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
{{ message }}
Repository navigation
feat: v0.20 routes and recovery sessions in every adapter #232
An access token may carry recovery: true. requireAuth (and the Next.js / Go / Python / Rust equivalents) refuses it by default with 403 enrollment_required, with an option to allow it, so an app does not treat a half-recovered account as signed in.
After passkey registration or TOTP enrollment from a recovery session, the API lifts the restriction on the session; the adapter should refresh so the cookie's access token drops the claim.
Routes
Manifest-driven (public / pre-auth; picked up from /.well-known/seamless-adapter.json, verify they work):
Also from fells-code/seamless-auth-api#490: DELETE /users/delete (a user deleting their own account) now needs a fresh step-up and answers 403 step_up_required with the step-up status fields otherwise. Pass it through unchanged; the React SDK's account deletion needs to step up first (and an account with no passkey or TOTP cannot delete itself).
From fells-code/seamless-auth-api#498: POST /recovery/verify can now answer 503 with recovery_notice_failed (the request is voided when the owner could not be notified). When the /recovery/* passthroughs land, pass that status and body through unchanged, and don't send x-seamless-auth-delivery-mode: external on /recovery/verify until fells-code/seamless-auth-api#499 adds a delivery kind for the notice.
Handle the new delivery kinds account_notice_email (to, subject, text, notice, cancelUrl?) and account_notice_sms (to, text, notice, cancelUrl?). cancelUrl carries a credential: send it only to to, never log it.
On manifest routes marked notices: true (today POST /recovery/verify), send external delivery plus x-seamless-auth-delivery-kinds: account_notice_email,account_notice_sms, deliver every item in the response's deliveries array, and strip it before answering the client. Do not send that header unless every listed kind is actually delivered, because the API counts a returned notice as the owner being told.
otp_email / otp_sms may carry purpose: 'account_recovery': word that message as a recovery warning.
New access routes GET /recovery/requests and DELETE /recovery/requests/:id need no adapter-specific code where the manifest catch-all is used.
POST /recovery/verify can answer 503 recovery_notice_failed; pass it through.
Done: the recovery-session refusal and account notices shipped in #233, the hardening in #234, and the bundled manifest carries every v0.20 route (policy, recovery codes, recovery). Released in core/express 0.22.0, fastify 0.13.0, nextjs 0.6.0. The refresh-after-enrollment parity is #235, now in v0.21.
Activity
Bccorb commentedon Oct 24, 2026
Also from fells-code/seamless-auth-api#490:
DELETE /users/delete(a user deleting their own account) now needs a fresh step-up and answers403 step_up_requiredwith the step-up status fields otherwise. Pass it through unchanged; the React SDK's account deletion needs to step up first (and an account with no passkey or TOTP cannot delete itself).Bccorb commentedon Oct 25, 2026
From fells-code/seamless-auth-api#498:
POST /recovery/verifycan now answer503withrecovery_notice_failed(the request is voided when the owner could not be notified). When the/recovery/*passthroughs land, pass that status and body through unchanged, and don't sendx-seamless-auth-delivery-mode: externalon/recovery/verifyuntil fells-code/seamless-auth-api#499 adds a delivery kind for the notice.Bccorb commentedon Oct 25, 2026
Contract from fells-code/seamless-auth-api#500 (types
@seamless-auth/types0.31.0):account_notice_email(to, subject, text, notice, cancelUrl?) andaccount_notice_sms(to, text, notice, cancelUrl?).cancelUrlcarries a credential: send it only toto, never log it.notices: true(todayPOST /recovery/verify), send external delivery plusx-seamless-auth-delivery-kinds: account_notice_email,account_notice_sms, deliver every item in the response'sdeliveriesarray, and strip it before answering the client. Do not send that header unless every listed kind is actually delivered, because the API counts a returned notice as the owner being told.otp_email/otp_smsmay carrypurpose: 'account_recovery': word that message as a recovery warning.GET /recovery/requestsandDELETE /recovery/requests/:idneed no adapter-specific code where the manifest catch-all is used.POST /recovery/verifycan answer503 recovery_notice_failed; pass it through.feat: recovery sessions and account notices for the v0.20 auth server (…
Bccorb commentedon Oct 29, 2026
Done: the recovery-session refusal and account notices shipped in #233, the hardening in #234, and the bundled manifest carries every v0.20 route (policy, recovery codes, recovery). Released in core/express 0.22.0, fastify 0.13.0, nextjs 0.6.0. The refresh-after-enrollment parity is #235, now in v0.21.