You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Secondary indexes: apikey:{hash} → partner_id for batch auth, _pull_enabled → [partner_ids] for pull sync. Best-effort, not atomic. Old API key index deleted on key rotation.
pull_enabled_partners() re-checks pull_sync_enabled == true on fetched records (stale index guard).
API key stored as SHA-256 hex; plaintext never written to KV. verify_api_key() uses constant-time comparison.
POST /admin/partners/register validates Authorization: Bearer <token> in-handler against settings.ec.admin_token_hash. Returns 401 before reading body if invalid.
Validates: required fields, id format (^[a-z0-9_-]{1,32}$), reserved names, pull_sync_url + ts_pull_token required when pull_sync_enabled, pull_sync_url domain in allowlist.
Returns 201 Created on new partner, 200 OK on update, with explicit response DTO (never serialize full PartnerRecord). 400 on validation failure, 503 on KV failure.
/admin/partners/register NOT added to Settings::ADMIN_ENDPOINTS. Admin-route-scan test updated with exclusion list. [[handlers]] pattern narrowed from ^/admin to ^/admin/keys.
Activity
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint
Add partner registry and admin registration endpoint