APIsSign-in and identityDetails
What the compiler checks of sign-in
On this page
Jadpo checks your sign-in setup when it compiles, so a mistake is an error with a fix rather than a sign-in that fails in production. Each row says what you wrote and the error you get.
Magic link settings
| What you wrote | Error |
|---|---|
sign_in_providers:, the old name |
semantic.auth_method_unknown, whose edit renames it sign_in: |
magic_link: without browser_session:, or without its origin: |
semantic.auth_setting_required |
magic_link: without the app's email: connection, and no send: |
email.connection_required |
magic_link: without application { display_name: }, which Jadpo's email names your app by |
semantic.auth_setting_required |
magic_link: without link: |
semantic.auth_setting_required |
address: naming anything but a field of the principal's user entity built on Email and unique: true |
semantic.auth_setting_invalid |
address: naming a field the entity doesn't have |
type.unknown_field |
No address:, and no email field on the entity |
semantic.auth_setting_required |
A setting magic_link: doesn't take |
semantic.auth_setting_unknown |
A link: that isn't a path on your app's site, a path: that isn't fixed segments, expires_after: under 1m, resend_after: not above zero, a count under 1, or same_browser: that isn't true or false |
semantic.auth_setting_invalid |
| A setting loosened past its limit, with no acceptance this change adds | acceptance.missing (Acceptances) |
generate_routes: that isn't true or false, or false beside path: |
semantic.auth_setting_invalid |
| A route your app writes at a generated magic-link path | route.path_overlap; with generate_routes: false there are none |
MagicLinkAsk, MagicLinkConfirmation or MagicLinkCode built with { ... } anywhere but a test, fixture or seed |
type.not_record |
A request to /auth/magic-link/redeem without api_token:, which generates no such route |
semantic.request_route_unknown |
The first sign-in action
on_first_sign_in: naming anything but an action that takes one
FirstSignIn and returns the user entity's id is
semantic.auth_setting_invalid.
Your own magic-link email
| What you wrote | Error |
|---|---|
email: and send: together |
semantic.auth_setting_invalid |
email: naming anything but an EmailMessage of your app's |
semantic.auth_setting_invalid |
email: naming an email with a field, besides to: and locale:, that isn't picked from MagicLinkEmail |
semantic.auth_setting_invalid |
send: naming anything but an action that takes one MagicLinkRequest and returns Unit |
semantic.auth_setting_invalid |
emit of the email email: names |
event.emit_invalid |
Copying from MagicLinkEmail into anything but an email |
type.not_record |
A SignInCode kept in an entity |
type.auth_credential_stored |
A SignInCode in an Output, a failure or an event |
type.secret_exposed |
See Built-in emails for both settings.
Writing the magic-link routes yourself
| What you wrote | Error |
|---|---|
magic_links.request, .redeem or .redeem_code with no magic_link:, or with its routes generated |
semantic.auth_setting_required |
| One of them called outside an action | type.auth_sessions_context |
One of them as a route's run: itself |
route.run_invalid |
A SignInToken kept in an entity |
type.auth_credential_stored |
A SignInToken in an Output, a failure, an event, an email, a message or a prompt |
type.secret_exposed |
Sign-in events
| What you wrote | Error |
|---|---|
A subscriber of SignedIn, SignInRefused or SignInCodesDisabled with no magic_link: |
subscriber.event_invalid |
| A field one of them doesn't have | type.unknown_field |
emit of one of them |
event.emit_invalid |
FirstSignIn or a sign-in event built with { ... } anywhere but a test, fixture or seed |
type.not_record |
Passkeys
| What you wrote | Error |
|---|---|
passkey: without browser_session:, or without its origin: |
semantic.auth_setting_required |
passkey: without magic_link: in the same sign_in: |
semantic.auth_setting_required |
A setting passkey: doesn't take |
semantic.auth_setting_unknown |
expires_after: outside 1m to 10m, or a path: that isn't fixed segments |
semantic.auth_setting_invalid |
Anything in sign_in: but magic_link:, passkey: and providers: |
semantic.auth_method_unknown |
| A route your app writes at a generated passkey path | route.path_overlap |
A subscriber of PasskeyAdded or PasskeyRemoved with no passkey: |
subscriber.event_invalid |
emit of PasskeyAdded or PasskeyRemoved |
event.emit_invalid |
test_passkeys.register, .sign_in or .confirm anywhere but a test |
semantic.request_invalid |
test_passkeys.register, .sign_in or .confirm with no passkey: |
semantic.auth_setting_required |
A route's confirm: holding anything but Confirmation.passkey, on a route open to anyone or for a service |
route.confirm_invalid |
A route's confirm: with no passkey: |
semantic.auth_setting_required |
A route your app writes at a confirmed route's …/confirmation, or a confirmed GET beside a confirmed POST at one path |
route.path_overlap |
Sign-in providers
| What you wrote | Error |
|---|---|
A name in providers: that isn't a connection on Driver.oidc |
semantic.auth_setting_invalid |
A provider named magic_link, passkey or external_token, or named twice |
semantic.auth_setting_invalid |
providers: without browser_session:, or without its origin: |
semantic.auth_setting_required |
providers: without on_first_sign_in: |
semantic.auth_setting_required |
A Driver.oidc connection without issuer:, client_id: or credential: |
connection.key_missing |
issuer: not reading a Url setting, client_id: not a Text one, or credential: not a secret one |
connection.value_invalid |
Any other setting on a Driver.oidc connection |
connection.key_invalid |
A route your app writes at /auth/<name>/start or /auth/<name>/callback |
route.path_overlap |
SignInMethod.<name> for a provider the app doesn't name |
type.unknown_enum_variant |
test_providers.sign_in anywhere but a test |
semantic.request_invalid |
test_providers.sign_in with no providers: |
semantic.auth_setting_required |
TestAccount built with { ... } anywhere but a test, fixture or seed |
type.not_record |
Markdown for agents: /docs/what-the-compiler-checks-of-sign-in.md.Built from Jadpo main at aee2e8f.