@_mustachio/openauth 0.9.2 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/adapters/d1/audit-log.js +15 -0
- package/dist/esm/adapters/d1/config-store.js +45 -0
- package/dist/esm/adapters/d1/index.js +12 -0
- package/dist/esm/adapters/d1/key-store.js +116 -0
- package/dist/esm/adapters/d1/method-store.js +52 -0
- package/dist/esm/adapters/d1/migrations.js +77 -0
- package/dist/esm/adapters/d1/session-store.js +134 -0
- package/dist/esm/adapters/d1/session.js +18 -0
- package/dist/esm/adapters/d1/token-store.js +140 -0
- package/dist/esm/adapters/durable-object/index.js +3 -0
- package/dist/esm/adapters/durable-object/session-store.js +139 -0
- package/dist/esm/adapters/durable-object/types.js +0 -0
- package/dist/esm/adapters/dynamo/audit-log.js +23 -0
- package/dist/esm/adapters/dynamo/client.js +0 -0
- package/dist/esm/adapters/dynamo/config-store.js +57 -0
- package/dist/esm/adapters/dynamo/index.js +10 -0
- package/dist/esm/adapters/dynamo/key-store.js +188 -0
- package/dist/esm/adapters/dynamo/method-store.js +72 -0
- package/dist/esm/adapters/dynamo/passkey-credential-store.js +83 -0
- package/dist/esm/adapters/dynamo/sdk.js +128 -0
- package/dist/esm/adapters/dynamo/session-store.js +173 -0
- package/dist/esm/adapters/dynamo/token-store.js +178 -0
- package/dist/esm/adapters/kms/in-memory-backing.js +28 -0
- package/dist/esm/adapters/kms/index.js +5 -0
- package/dist/esm/adapters/kms/key-store.js +129 -0
- package/dist/esm/adapters/kms/sdk.js +23 -0
- package/dist/esm/adapters/kms/types.js +0 -0
- package/dist/esm/adapters/kv/audit-log.js +21 -0
- package/dist/esm/adapters/kv/config-store.js +43 -0
- package/dist/esm/adapters/kv/index.js +5 -0
- package/dist/esm/adapters/kv/method-store.js +63 -0
- package/dist/esm/adapters/kv/types.js +0 -0
- package/dist/esm/adapters/memory/audit-log.js +16 -0
- package/dist/esm/adapters/memory/clock.js +5 -0
- package/dist/esm/adapters/memory/config-store.js +31 -0
- package/dist/esm/adapters/memory/index.js +10 -0
- package/dist/esm/adapters/memory/key-store.js +78 -0
- package/dist/esm/adapters/memory/method-store.js +43 -0
- package/dist/esm/adapters/memory/passkey-credential-store.js +53 -0
- package/dist/esm/adapters/memory/session-store.js +104 -0
- package/dist/esm/adapters/memory/token-store.js +104 -0
- package/dist/esm/adapters/postgres/audit-log.js +16 -0
- package/dist/esm/adapters/postgres/config-store.js +48 -0
- package/dist/esm/adapters/postgres/executor.js +21 -0
- package/dist/esm/adapters/postgres/index.js +13 -0
- package/dist/esm/adapters/postgres/key-store.js +191 -0
- package/dist/esm/adapters/postgres/method-store.js +61 -0
- package/dist/esm/adapters/postgres/migrations.js +111 -0
- package/dist/esm/adapters/postgres/passkey-credential-store.js +80 -0
- package/dist/esm/adapters/postgres/session-store.js +135 -0
- package/dist/esm/adapters/postgres/token-store.js +151 -0
- package/dist/esm/client.js +35 -12
- package/dist/esm/domain/audit.js +13 -0
- package/dist/esm/domain/authorize.js +217 -0
- package/dist/esm/domain/callback.js +176 -0
- package/dist/esm/domain/client-auth.js +61 -0
- package/dist/esm/domain/client-credentials.js +91 -0
- package/dist/esm/domain/crypto.js +97 -0
- package/dist/esm/domain/discovery.js +83 -0
- package/dist/esm/domain/dpop.js +122 -0
- package/dist/esm/domain/id-token.js +94 -0
- package/dist/esm/domain/introspect.js +55 -0
- package/dist/esm/domain/jwt.js +71 -0
- package/dist/esm/domain/logout.js +75 -0
- package/dist/esm/domain/method-cache.js +136 -0
- package/dist/esm/domain/method-dispatch.js +36 -0
- package/dist/esm/domain/method-route.js +111 -0
- package/dist/esm/domain/par.js +51 -0
- package/dist/esm/domain/pkce.js +16 -0
- package/dist/esm/domain/refresh.js +102 -0
- package/dist/esm/domain/register.js +74 -0
- package/dist/esm/domain/revoke.js +81 -0
- package/dist/esm/domain/state-envelope.js +80 -0
- package/dist/esm/domain/token-exchange.js +102 -0
- package/dist/esm/domain/token.js +246 -0
- package/dist/esm/domain/userinfo.js +62 -0
- package/dist/esm/http/context.js +7 -0
- package/dist/esm/http/cookies.js +98 -0
- package/dist/esm/http/errors.js +71 -0
- package/dist/esm/http/handlers/authorize.js +250 -0
- package/dist/esm/http/handlers/callback.js +53 -0
- package/dist/esm/http/handlers/end-session.js +64 -0
- package/dist/esm/http/handlers/metadata.js +37 -0
- package/dist/esm/http/handlers/method-route.js +87 -0
- package/dist/esm/http/handlers/par.js +53 -0
- package/dist/esm/http/handlers/register.js +46 -0
- package/dist/esm/http/handlers/revocation.js +98 -0
- package/dist/esm/http/handlers/token.js +197 -0
- package/dist/esm/http/handlers/userinfo.js +60 -0
- package/dist/esm/http/middleware/error.js +15 -0
- package/dist/esm/http/middleware/tenant.js +102 -0
- package/dist/esm/http/resolver.js +15 -0
- package/dist/esm/http/router.js +45 -0
- package/dist/esm/http/schemas/authorize.js +30 -0
- package/dist/esm/http/schemas/end-session.js +13 -0
- package/dist/esm/http/schemas/par.js +9 -0
- package/dist/esm/http/schemas/register.js +16 -0
- package/dist/esm/http/schemas/revocation.js +18 -0
- package/dist/esm/http/schemas/token.js +57 -0
- package/dist/esm/index.js +126 -9
- package/dist/esm/methods/code.js +221 -0
- package/dist/esm/methods/m2m.js +41 -0
- package/dist/esm/methods/oauth2-factory.js +84 -0
- package/dist/esm/methods/oauth2-generic.js +196 -0
- package/dist/esm/methods/oidc-generic.js +53 -0
- package/dist/esm/methods/passkey.js +275 -0
- package/dist/esm/methods/password-hash.js +79 -0
- package/dist/esm/methods/password.js +166 -0
- package/dist/esm/methods/providers/apple.js +29 -0
- package/dist/esm/methods/providers/cognito.js +37 -0
- package/dist/esm/methods/providers/discord.js +28 -0
- package/dist/esm/methods/providers/facebook.js +42 -0
- package/dist/esm/methods/providers/github.js +29 -0
- package/dist/esm/methods/providers/google.js +29 -0
- package/dist/esm/methods/providers/index.js +17 -0
- package/dist/esm/methods/providers/jumpcloud.js +27 -0
- package/dist/esm/methods/providers/keycloak.js +32 -0
- package/dist/esm/methods/providers/linkedin.js +28 -0
- package/dist/esm/methods/providers/microsoft.js +28 -0
- package/dist/esm/methods/providers/slack.js +30 -0
- package/dist/esm/methods/providers/spotify.js +28 -0
- package/dist/esm/methods/providers/twitch.js +28 -0
- package/dist/esm/methods/providers/x.js +28 -0
- package/dist/esm/methods/providers/yahoo.js +27 -0
- package/dist/esm/pkce.js +4 -16
- package/dist/esm/ports/audit-log.js +0 -0
- package/dist/esm/ports/config-store.js +0 -0
- package/dist/esm/ports/key-store.js +0 -0
- package/dist/esm/ports/method-store.js +0 -0
- package/dist/esm/ports/session-store.js +0 -0
- package/dist/esm/ports/token-store.js +0 -0
- package/dist/esm/types/authorization.js +0 -0
- package/dist/esm/types/error.js +70 -0
- package/dist/esm/types/flow.js +0 -0
- package/dist/esm/types/idp.js +0 -0
- package/dist/esm/types/method.js +0 -0
- package/dist/esm/types/picker.js +0 -0
- package/dist/esm/types/result.js +11 -0
- package/dist/esm/types/subject.js +0 -0
- package/dist/esm/types/tenant.js +5 -0
- package/dist/esm/types/token.js +0 -0
- package/dist/esm/ui/forms.js +253 -0
- package/dist/esm/ui/index.js +8 -0
- package/dist/esm/ui/picker.js +49 -0
- package/dist/types/adapters/d1/audit-log.d.ts +19 -0
- package/dist/types/adapters/d1/audit-log.d.ts.map +1 -0
- package/dist/types/adapters/d1/config-store.d.ts +20 -0
- package/dist/types/adapters/d1/config-store.d.ts.map +1 -0
- package/dist/types/adapters/d1/index.d.ts +35 -0
- package/dist/types/adapters/d1/index.d.ts.map +1 -0
- package/dist/types/adapters/d1/key-store.d.ts +17 -0
- package/dist/types/adapters/d1/key-store.d.ts.map +1 -0
- package/dist/types/adapters/d1/method-store.d.ts +21 -0
- package/dist/types/adapters/d1/method-store.d.ts.map +1 -0
- package/dist/types/adapters/d1/migrations.d.ts +18 -0
- package/dist/types/adapters/d1/migrations.d.ts.map +1 -0
- package/dist/types/adapters/d1/session-store.d.ts +20 -0
- package/dist/types/adapters/d1/session-store.d.ts.map +1 -0
- package/dist/types/adapters/d1/session.d.ts +18 -0
- package/dist/types/adapters/d1/session.d.ts.map +1 -0
- package/dist/types/adapters/d1/token-store.d.ts +29 -0
- package/dist/types/adapters/d1/token-store.d.ts.map +1 -0
- package/dist/types/adapters/d1/types.d.ts +43 -0
- package/dist/types/adapters/d1/types.d.ts.map +1 -0
- package/dist/types/adapters/durable-object/index.d.ts +17 -0
- package/dist/types/adapters/durable-object/index.d.ts.map +1 -0
- package/dist/types/adapters/durable-object/session-store.d.ts +21 -0
- package/dist/types/adapters/durable-object/session-store.d.ts.map +1 -0
- package/dist/types/adapters/durable-object/types.d.ts +23 -0
- package/dist/types/adapters/durable-object/types.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/audit-log.d.ts +19 -0
- package/dist/types/adapters/dynamo/audit-log.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/client.d.ts +111 -0
- package/dist/types/adapters/dynamo/client.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/config-store.d.ts +21 -0
- package/dist/types/adapters/dynamo/config-store.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/index.d.ts +60 -0
- package/dist/types/adapters/dynamo/index.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/key-store.d.ts +23 -0
- package/dist/types/adapters/dynamo/key-store.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/method-store.d.ts +20 -0
- package/dist/types/adapters/dynamo/method-store.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/passkey-credential-store.d.ts +47 -0
- package/dist/types/adapters/dynamo/passkey-credential-store.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/sdk.d.ts +23 -0
- package/dist/types/adapters/dynamo/sdk.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/session-store.d.ts +20 -0
- package/dist/types/adapters/dynamo/session-store.d.ts.map +1 -0
- package/dist/types/adapters/dynamo/token-store.d.ts +29 -0
- package/dist/types/adapters/dynamo/token-store.d.ts.map +1 -0
- package/dist/types/adapters/kms/in-memory-backing.d.ts +9 -0
- package/dist/types/adapters/kms/in-memory-backing.d.ts.map +1 -0
- package/dist/types/adapters/kms/index.d.ts +35 -0
- package/dist/types/adapters/kms/index.d.ts.map +1 -0
- package/dist/types/adapters/kms/key-store.d.ts +20 -0
- package/dist/types/adapters/kms/key-store.d.ts.map +1 -0
- package/dist/types/adapters/kms/sdk.d.ts +16 -0
- package/dist/types/adapters/kms/sdk.d.ts.map +1 -0
- package/dist/types/adapters/kms/types.d.ts +58 -0
- package/dist/types/adapters/kms/types.d.ts.map +1 -0
- package/dist/types/adapters/kv/audit-log.d.ts +22 -0
- package/dist/types/adapters/kv/audit-log.d.ts.map +1 -0
- package/dist/types/adapters/kv/config-store.d.ts +25 -0
- package/dist/types/adapters/kv/config-store.d.ts.map +1 -0
- package/dist/types/adapters/kv/index.d.ts +21 -0
- package/dist/types/adapters/kv/index.d.ts.map +1 -0
- package/dist/types/adapters/kv/method-store.d.ts +23 -0
- package/dist/types/adapters/kv/method-store.d.ts.map +1 -0
- package/dist/types/adapters/kv/types.d.ts +28 -0
- package/dist/types/adapters/kv/types.d.ts.map +1 -0
- package/dist/types/adapters/memory/audit-log.d.ts +18 -0
- package/dist/types/adapters/memory/audit-log.d.ts.map +1 -0
- package/dist/types/adapters/memory/clock.d.ts +7 -0
- package/dist/types/adapters/memory/clock.d.ts.map +1 -0
- package/dist/types/adapters/memory/config-store.d.ts +19 -0
- package/dist/types/adapters/memory/config-store.d.ts.map +1 -0
- package/dist/types/adapters/memory/index.d.ts +15 -0
- package/dist/types/adapters/memory/index.d.ts.map +1 -0
- package/dist/types/adapters/memory/key-store.d.ts +17 -0
- package/dist/types/adapters/memory/key-store.d.ts.map +1 -0
- package/dist/types/adapters/memory/method-store.d.ts +26 -0
- package/dist/types/adapters/memory/method-store.d.ts.map +1 -0
- package/dist/types/adapters/memory/passkey-credential-store.d.ts +43 -0
- package/dist/types/adapters/memory/passkey-credential-store.d.ts.map +1 -0
- package/dist/types/adapters/memory/session-store.d.ts +21 -0
- package/dist/types/adapters/memory/session-store.d.ts.map +1 -0
- package/dist/types/adapters/memory/token-store.d.ts +29 -0
- package/dist/types/adapters/memory/token-store.d.ts.map +1 -0
- package/dist/types/adapters/postgres/audit-log.d.ts +18 -0
- package/dist/types/adapters/postgres/audit-log.d.ts.map +1 -0
- package/dist/types/adapters/postgres/config-store.d.ts +21 -0
- package/dist/types/adapters/postgres/config-store.d.ts.map +1 -0
- package/dist/types/adapters/postgres/executor.d.ts +48 -0
- package/dist/types/adapters/postgres/executor.d.ts.map +1 -0
- package/dist/types/adapters/postgres/index.d.ts +39 -0
- package/dist/types/adapters/postgres/index.d.ts.map +1 -0
- package/dist/types/adapters/postgres/key-store.d.ts +23 -0
- package/dist/types/adapters/postgres/key-store.d.ts.map +1 -0
- package/dist/types/adapters/postgres/method-store.d.ts +21 -0
- package/dist/types/adapters/postgres/method-store.d.ts.map +1 -0
- package/dist/types/adapters/postgres/migrations.d.ts +22 -0
- package/dist/types/adapters/postgres/migrations.d.ts.map +1 -0
- package/dist/types/adapters/postgres/passkey-credential-store.d.ts +48 -0
- package/dist/types/adapters/postgres/passkey-credential-store.d.ts.map +1 -0
- package/dist/types/adapters/postgres/session-store.d.ts +20 -0
- package/dist/types/adapters/postgres/session-store.d.ts.map +1 -0
- package/dist/types/adapters/postgres/token-store.d.ts +30 -0
- package/dist/types/adapters/postgres/token-store.d.ts.map +1 -0
- package/dist/types/client.d.ts +20 -1
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/domain/audit.d.ts +17 -0
- package/dist/types/domain/audit.d.ts.map +1 -0
- package/dist/types/domain/authorize.d.ts +125 -0
- package/dist/types/domain/authorize.d.ts.map +1 -0
- package/dist/types/domain/callback.d.ts +70 -0
- package/dist/types/domain/callback.d.ts.map +1 -0
- package/dist/types/domain/client-auth.d.ts +57 -0
- package/dist/types/domain/client-auth.d.ts.map +1 -0
- package/dist/types/domain/client-credentials.d.ts +54 -0
- package/dist/types/domain/client-credentials.d.ts.map +1 -0
- package/dist/types/domain/crypto.d.ts +53 -0
- package/dist/types/domain/crypto.d.ts.map +1 -0
- package/dist/types/domain/discovery.d.ts +81 -0
- package/dist/types/domain/discovery.d.ts.map +1 -0
- package/dist/types/domain/dpop.d.ts +61 -0
- package/dist/types/domain/dpop.d.ts.map +1 -0
- package/dist/types/domain/id-token.d.ts +83 -0
- package/dist/types/domain/id-token.d.ts.map +1 -0
- package/dist/types/domain/introspect.d.ts +79 -0
- package/dist/types/domain/introspect.d.ts.map +1 -0
- package/dist/types/domain/jwt.d.ts +74 -0
- package/dist/types/domain/jwt.d.ts.map +1 -0
- package/dist/types/domain/logout.d.ts +69 -0
- package/dist/types/domain/logout.d.ts.map +1 -0
- package/dist/types/domain/method-cache.d.ts +42 -0
- package/dist/types/domain/method-cache.d.ts.map +1 -0
- package/dist/types/domain/method-dispatch.d.ts +37 -0
- package/dist/types/domain/method-dispatch.d.ts.map +1 -0
- package/dist/types/domain/method-route.d.ts +77 -0
- package/dist/types/domain/method-route.d.ts.map +1 -0
- package/dist/types/domain/par.d.ts +62 -0
- package/dist/types/domain/par.d.ts.map +1 -0
- package/dist/types/domain/pkce.d.ts +15 -0
- package/dist/types/domain/pkce.d.ts.map +1 -0
- package/dist/types/domain/refresh.d.ts +52 -0
- package/dist/types/domain/refresh.d.ts.map +1 -0
- package/dist/types/domain/register.d.ts +33 -0
- package/dist/types/domain/register.d.ts.map +1 -0
- package/dist/types/domain/revoke.d.ts +61 -0
- package/dist/types/domain/revoke.d.ts.map +1 -0
- package/dist/types/domain/state-envelope.d.ts +30 -0
- package/dist/types/domain/state-envelope.d.ts.map +1 -0
- package/dist/types/domain/token-exchange.d.ts +69 -0
- package/dist/types/domain/token-exchange.d.ts.map +1 -0
- package/dist/types/domain/token.d.ts +140 -0
- package/dist/types/domain/token.d.ts.map +1 -0
- package/dist/types/domain/userinfo.d.ts +61 -0
- package/dist/types/domain/userinfo.d.ts.map +1 -0
- package/dist/types/http/context.d.ts +66 -0
- package/dist/types/http/context.d.ts.map +1 -0
- package/dist/types/http/cookies.d.ts +45 -0
- package/dist/types/http/cookies.d.ts.map +1 -0
- package/dist/types/http/errors.d.ts +36 -0
- package/dist/types/http/errors.d.ts.map +1 -0
- package/dist/types/http/handlers/authorize.d.ts +3 -0
- package/dist/types/http/handlers/authorize.d.ts.map +1 -0
- package/dist/types/http/handlers/callback.d.ts +3 -0
- package/dist/types/http/handlers/callback.d.ts.map +1 -0
- package/dist/types/http/handlers/end-session.d.ts +3 -0
- package/dist/types/http/handlers/end-session.d.ts.map +1 -0
- package/dist/types/http/handlers/metadata.d.ts +4 -0
- package/dist/types/http/handlers/metadata.d.ts.map +1 -0
- package/dist/types/http/handlers/method-route.d.ts +3 -0
- package/dist/types/http/handlers/method-route.d.ts.map +1 -0
- package/dist/types/http/handlers/par.d.ts +3 -0
- package/dist/types/http/handlers/par.d.ts.map +1 -0
- package/dist/types/http/handlers/register.d.ts +3 -0
- package/dist/types/http/handlers/register.d.ts.map +1 -0
- package/dist/types/http/handlers/revocation.d.ts +4 -0
- package/dist/types/http/handlers/revocation.d.ts.map +1 -0
- package/dist/types/http/handlers/token.d.ts +3 -0
- package/dist/types/http/handlers/token.d.ts.map +1 -0
- package/dist/types/http/handlers/userinfo.d.ts +3 -0
- package/dist/types/http/handlers/userinfo.d.ts.map +1 -0
- package/dist/types/http/middleware/error.d.ts +9 -0
- package/dist/types/http/middleware/error.d.ts.map +1 -0
- package/dist/types/http/middleware/tenant.d.ts +30 -0
- package/dist/types/http/middleware/tenant.d.ts.map +1 -0
- package/dist/types/http/resolver.d.ts +22 -0
- package/dist/types/http/resolver.d.ts.map +1 -0
- package/dist/types/http/router.d.ts +21 -0
- package/dist/types/http/router.d.ts.map +1 -0
- package/dist/types/http/schemas/authorize.d.ts +92 -0
- package/dist/types/http/schemas/authorize.d.ts.map +1 -0
- package/dist/types/http/schemas/end-session.d.ts +31 -0
- package/dist/types/http/schemas/end-session.d.ts.map +1 -0
- package/dist/types/http/schemas/par.d.ts +20 -0
- package/dist/types/http/schemas/par.d.ts.map +1 -0
- package/dist/types/http/schemas/register.d.ts +42 -0
- package/dist/types/http/schemas/register.d.ts.map +1 -0
- package/dist/types/http/schemas/revocation.d.ts +41 -0
- package/dist/types/http/schemas/revocation.d.ts.map +1 -0
- package/dist/types/http/schemas/token.d.ts +227 -0
- package/dist/types/http/schemas/token.d.ts.map +1 -0
- package/dist/types/index.d.ts +63 -13
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/methods/code.d.ts +96 -0
- package/dist/types/methods/code.d.ts.map +1 -0
- package/dist/types/methods/m2m.d.ts +41 -0
- package/dist/types/methods/m2m.d.ts.map +1 -0
- package/dist/types/methods/oauth2-factory.d.ts +133 -0
- package/dist/types/methods/oauth2-factory.d.ts.map +1 -0
- package/dist/types/methods/oauth2-generic.d.ts +75 -0
- package/dist/types/methods/oauth2-generic.d.ts.map +1 -0
- package/dist/types/methods/oidc-generic.d.ts +26 -0
- package/dist/types/methods/oidc-generic.d.ts.map +1 -0
- package/dist/types/methods/passkey.d.ts +106 -0
- package/dist/types/methods/passkey.d.ts.map +1 -0
- package/dist/types/methods/password-hash.d.ts +25 -0
- package/dist/types/methods/password-hash.d.ts.map +1 -0
- package/dist/types/methods/password.d.ts +70 -0
- package/dist/types/methods/password.d.ts.map +1 -0
- package/dist/types/methods/providers/apple.d.ts +29 -0
- package/dist/types/methods/providers/apple.d.ts.map +1 -0
- package/dist/types/methods/providers/cognito.d.ts +36 -0
- package/dist/types/methods/providers/cognito.d.ts.map +1 -0
- package/dist/types/methods/providers/discord.d.ts +22 -0
- package/dist/types/methods/providers/discord.d.ts.map +1 -0
- package/dist/types/methods/providers/facebook.d.ts +29 -0
- package/dist/types/methods/providers/facebook.d.ts.map +1 -0
- package/dist/types/methods/providers/github.d.ts +25 -0
- package/dist/types/methods/providers/github.d.ts.map +1 -0
- package/dist/types/methods/providers/google.d.ts +28 -0
- package/dist/types/methods/providers/google.d.ts.map +1 -0
- package/dist/types/methods/providers/index.d.ts +24 -0
- package/dist/types/methods/providers/index.d.ts.map +1 -0
- package/dist/types/methods/providers/jumpcloud.d.ts +22 -0
- package/dist/types/methods/providers/jumpcloud.d.ts.map +1 -0
- package/dist/types/methods/providers/keycloak.d.ts +30 -0
- package/dist/types/methods/providers/keycloak.d.ts.map +1 -0
- package/dist/types/methods/providers/linkedin.d.ts +22 -0
- package/dist/types/methods/providers/linkedin.d.ts.map +1 -0
- package/dist/types/methods/providers/microsoft.d.ts +30 -0
- package/dist/types/methods/providers/microsoft.d.ts.map +1 -0
- package/dist/types/methods/providers/slack.d.ts +25 -0
- package/dist/types/methods/providers/slack.d.ts.map +1 -0
- package/dist/types/methods/providers/spotify.d.ts +22 -0
- package/dist/types/methods/providers/spotify.d.ts.map +1 -0
- package/dist/types/methods/providers/twitch.d.ts +23 -0
- package/dist/types/methods/providers/twitch.d.ts.map +1 -0
- package/dist/types/methods/providers/x.d.ts +25 -0
- package/dist/types/methods/providers/x.d.ts.map +1 -0
- package/dist/types/methods/providers/yahoo.d.ts +22 -0
- package/dist/types/methods/providers/yahoo.d.ts.map +1 -0
- package/dist/types/pkce.d.ts +1 -2
- package/dist/types/pkce.d.ts.map +1 -1
- package/dist/types/ports/audit-log.d.ts +166 -0
- package/dist/types/ports/audit-log.d.ts.map +1 -0
- package/dist/types/ports/config-store.d.ts +32 -0
- package/dist/types/ports/config-store.d.ts.map +1 -0
- package/dist/types/ports/key-store.d.ts +98 -0
- package/dist/types/ports/key-store.d.ts.map +1 -0
- package/dist/types/ports/method-store.d.ts +29 -0
- package/dist/types/ports/method-store.d.ts.map +1 -0
- package/dist/types/ports/session-store.d.ts +109 -0
- package/dist/types/ports/session-store.d.ts.map +1 -0
- package/dist/types/ports/token-store.d.ts +105 -0
- package/dist/types/ports/token-store.d.ts.map +1 -0
- package/dist/types/types/authorization.d.ts +75 -0
- package/dist/types/types/authorization.d.ts.map +1 -0
- package/dist/types/types/error.d.ts +101 -0
- package/dist/types/types/error.d.ts.map +1 -0
- package/dist/types/types/flow.d.ts +97 -0
- package/dist/types/types/flow.d.ts.map +1 -0
- package/dist/types/types/idp.d.ts +324 -0
- package/dist/types/types/idp.d.ts.map +1 -0
- package/dist/types/types/method.d.ts +256 -0
- package/dist/types/types/method.d.ts.map +1 -0
- package/dist/types/types/picker.d.ts +31 -0
- package/dist/types/types/picker.d.ts.map +1 -0
- package/dist/types/types/result.d.ts +29 -0
- package/dist/types/types/result.d.ts.map +1 -0
- package/dist/types/types/subject.d.ts +47 -0
- package/dist/types/types/subject.d.ts.map +1 -0
- package/dist/types/types/tenant.d.ts +276 -0
- package/dist/types/types/tenant.d.ts.map +1 -0
- package/dist/types/types/token.d.ts +231 -0
- package/dist/types/types/token.d.ts.map +1 -0
- package/dist/types/ui/forms.d.ts +35 -0
- package/dist/types/ui/forms.d.ts.map +1 -0
- package/dist/types/ui/index.d.ts +14 -0
- package/dist/types/ui/index.d.ts.map +1 -0
- package/dist/types/ui/picker.d.ts +18 -0
- package/dist/types/ui/picker.d.ts.map +1 -0
- package/package.json +41 -6
- package/src/adapters/d1/audit-log.ts +32 -0
- package/src/adapters/d1/config-store.ts +67 -0
- package/src/adapters/d1/index.ts +41 -0
- package/src/adapters/d1/key-store.ts +218 -0
- package/src/adapters/d1/method-store.ts +103 -0
- package/src/adapters/d1/migrations.ts +89 -0
- package/src/adapters/d1/session-store.ts +230 -0
- package/src/adapters/d1/session.ts +38 -0
- package/src/adapters/d1/token-store.ts +251 -0
- package/src/adapters/d1/types.ts +53 -0
- package/src/adapters/durable-object/index.ts +23 -0
- package/src/adapters/durable-object/session-store.ts +227 -0
- package/src/adapters/durable-object/types.ts +25 -0
- package/src/adapters/dynamo/audit-log.ts +35 -0
- package/src/adapters/dynamo/client.ts +118 -0
- package/src/adapters/dynamo/config-store.ts +72 -0
- package/src/adapters/dynamo/index.ts +81 -0
- package/src/adapters/dynamo/key-store.ts +267 -0
- package/src/adapters/dynamo/method-store.ts +105 -0
- package/src/adapters/dynamo/passkey-credential-store.ts +132 -0
- package/src/adapters/dynamo/sdk.ts +189 -0
- package/src/adapters/dynamo/session-store.ts +229 -0
- package/src/adapters/dynamo/token-store.ts +248 -0
- package/src/adapters/kms/in-memory-backing.ts +36 -0
- package/src/adapters/kms/index.ts +39 -0
- package/src/adapters/kms/key-store.ts +176 -0
- package/src/adapters/kms/sdk.ts +39 -0
- package/src/adapters/kms/types.ts +61 -0
- package/src/adapters/kv/audit-log.ts +40 -0
- package/src/adapters/kv/config-store.ts +63 -0
- package/src/adapters/kv/index.ts +20 -0
- package/src/adapters/kv/method-store.ts +98 -0
- package/src/adapters/kv/types.ts +26 -0
- package/src/adapters/memory/audit-log.ts +28 -0
- package/src/adapters/memory/clock.ts +7 -0
- package/src/adapters/memory/config-store.ts +41 -0
- package/src/adapters/memory/index.ts +26 -0
- package/src/adapters/memory/key-store.ts +102 -0
- package/src/adapters/memory/method-store.ts +75 -0
- package/src/adapters/memory/passkey-credential-store.ts +97 -0
- package/src/adapters/memory/session-store.ts +171 -0
- package/src/adapters/memory/token-store.ts +181 -0
- package/src/adapters/postgres/audit-log.ts +34 -0
- package/src/adapters/postgres/config-store.ts +72 -0
- package/src/adapters/postgres/executor.ts +76 -0
- package/src/adapters/postgres/index.ts +60 -0
- package/src/adapters/postgres/key-store.ts +334 -0
- package/src/adapters/postgres/method-store.ts +104 -0
- package/src/adapters/postgres/migrations.ts +131 -0
- package/src/adapters/postgres/passkey-credential-store.ts +150 -0
- package/src/adapters/postgres/session-store.ts +216 -0
- package/src/adapters/postgres/token-store.ts +263 -0
- package/src/client.ts +82 -16
- package/src/domain/audit.ts +28 -0
- package/src/domain/authorize.ts +414 -0
- package/src/domain/callback.ts +268 -0
- package/src/domain/client-auth.ts +116 -0
- package/src/domain/client-credentials.ts +180 -0
- package/src/domain/crypto.ts +168 -0
- package/src/domain/discovery.ts +161 -0
- package/src/domain/dpop.ts +293 -0
- package/src/domain/id-token.ts +213 -0
- package/src/domain/introspect.ts +155 -0
- package/src/domain/jwt.ts +185 -0
- package/src/domain/logout.ts +180 -0
- package/src/domain/method-cache.ts +220 -0
- package/src/domain/method-dispatch.ts +95 -0
- package/src/domain/method-route.ts +213 -0
- package/src/domain/par.ts +141 -0
- package/src/domain/pkce.ts +37 -0
- package/src/domain/refresh.ts +210 -0
- package/src/domain/register.ts +168 -0
- package/src/domain/revoke.ts +161 -0
- package/src/domain/state-envelope.ts +142 -0
- package/src/domain/token-exchange.ts +243 -0
- package/src/domain/token.ts +483 -0
- package/src/domain/userinfo.ts +171 -0
- package/src/http/context.ts +90 -0
- package/src/http/cookies.ts +167 -0
- package/src/http/errors.ts +98 -0
- package/src/http/handlers/authorize.ts +362 -0
- package/src/http/handlers/callback.ts +77 -0
- package/src/http/handlers/end-session.ts +106 -0
- package/src/http/handlers/metadata.ts +49 -0
- package/src/http/handlers/method-route.ts +115 -0
- package/src/http/handlers/par.ts +84 -0
- package/src/http/handlers/register.ts +70 -0
- package/src/http/handlers/revocation.ts +151 -0
- package/src/http/handlers/token.ts +300 -0
- package/src/http/handlers/userinfo.ts +90 -0
- package/src/http/middleware/error.ts +26 -0
- package/src/http/middleware/tenant.ts +165 -0
- package/src/http/resolver.ts +34 -0
- package/src/http/router.ts +85 -0
- package/src/http/schemas/authorize.ts +85 -0
- package/src/http/schemas/end-session.ts +23 -0
- package/src/http/schemas/par.ts +23 -0
- package/src/http/schemas/register.ts +29 -0
- package/src/http/schemas/revocation.ts +23 -0
- package/src/http/schemas/token.ts +85 -0
- package/src/index.ts +283 -20
- package/src/methods/code.ts +359 -0
- package/src/methods/m2m.ts +82 -0
- package/src/methods/oauth2-factory.ts +151 -0
- package/src/methods/oauth2-generic.ts +360 -0
- package/src/methods/oidc-generic.ts +109 -0
- package/src/methods/passkey.ts +419 -0
- package/src/methods/password-hash.ts +134 -0
- package/src/methods/password.ts +298 -0
- package/src/methods/providers/apple.ts +42 -0
- package/src/methods/providers/cognito.ts +55 -0
- package/src/methods/providers/discord.ts +37 -0
- package/src/methods/providers/facebook.ts +54 -0
- package/src/methods/providers/github.ts +42 -0
- package/src/methods/providers/google.ts +43 -0
- package/src/methods/providers/index.ts +23 -0
- package/src/methods/providers/jumpcloud.ts +36 -0
- package/src/methods/providers/keycloak.ts +42 -0
- package/src/methods/providers/linkedin.ts +37 -0
- package/src/methods/providers/microsoft.ts +42 -0
- package/src/methods/providers/slack.ts +42 -0
- package/src/methods/providers/spotify.ts +37 -0
- package/src/methods/providers/twitch.ts +38 -0
- package/src/methods/providers/x.ts +40 -0
- package/src/methods/providers/yahoo.ts +36 -0
- package/src/pkce.ts +20 -21
- package/src/ports/CONSISTENCY.md +119 -0
- package/src/ports/audit-log.ts +177 -0
- package/src/ports/config-store.ts +34 -0
- package/src/ports/key-store.ts +106 -0
- package/src/ports/method-store.ts +41 -0
- package/src/ports/session-store.ts +131 -0
- package/src/ports/token-store.ts +116 -0
- package/src/types/authorization.ts +78 -0
- package/src/types/error.ts +146 -0
- package/src/types/flow.ts +99 -0
- package/src/types/idp.ts +365 -0
- package/src/types/method.ts +270 -0
- package/src/types/picker.ts +32 -0
- package/src/types/result.ts +23 -0
- package/src/types/subject.ts +50 -0
- package/src/types/tenant.ts +285 -0
- package/src/types/token.ts +236 -0
- package/src/ui/forms.ts +289 -0
- package/src/ui/index.ts +14 -0
- package/src/ui/picker.ts +63 -0
- package/dist/esm/issuer.js +0 -691
- package/dist/esm/jwt.js +0 -16
- package/dist/esm/keys.js +0 -113
- package/dist/esm/provider/apple.js +0 -28
- package/dist/esm/provider/arctic.js +0 -43
- package/dist/esm/provider/code.js +0 -58
- package/dist/esm/provider/cognito.js +0 -16
- package/dist/esm/provider/discord.js +0 -15
- package/dist/esm/provider/facebook.js +0 -24
- package/dist/esm/provider/github.js +0 -15
- package/dist/esm/provider/google.js +0 -25
- package/dist/esm/provider/index.js +0 -3
- package/dist/esm/provider/jumpcloud.js +0 -15
- package/dist/esm/provider/keycloak.js +0 -15
- package/dist/esm/provider/linkedin.js +0 -15
- package/dist/esm/provider/m2m.js +0 -16
- package/dist/esm/provider/microsoft.js +0 -24
- package/dist/esm/provider/oauth2.js +0 -119
- package/dist/esm/provider/oidc.js +0 -69
- package/dist/esm/provider/passkey.js +0 -315
- package/dist/esm/provider/password.js +0 -306
- package/dist/esm/provider/provider.js +0 -10
- package/dist/esm/provider/slack.js +0 -15
- package/dist/esm/provider/spotify.js +0 -15
- package/dist/esm/provider/twitch.js +0 -15
- package/dist/esm/provider/x.js +0 -16
- package/dist/esm/provider/yahoo.js +0 -15
- package/dist/esm/random.js +0 -27
- package/dist/esm/storage/aws.js +0 -39
- package/dist/esm/storage/cloudflare.js +0 -42
- package/dist/esm/storage/dynamo.js +0 -116
- package/dist/esm/storage/memory.js +0 -88
- package/dist/esm/storage/storage.js +0 -36
- package/dist/esm/subject.js +0 -7
- package/dist/esm/ui/base.js +0 -407
- package/dist/esm/ui/code.js +0 -151
- package/dist/esm/ui/form.js +0 -43
- package/dist/esm/ui/icon.js +0 -92
- package/dist/esm/ui/passkey.js +0 -329
- package/dist/esm/ui/password.js +0 -338
- package/dist/esm/ui/select.js +0 -187
- package/dist/esm/ui/theme.js +0 -115
- package/dist/esm/util.js +0 -54
- package/dist/types/issuer.d.ts +0 -607
- package/dist/types/issuer.d.ts.map +0 -1
- package/dist/types/jwt.d.ts +0 -6
- package/dist/types/jwt.d.ts.map +0 -1
- package/dist/types/keys.d.ts +0 -18
- package/dist/types/keys.d.ts.map +0 -1
- package/dist/types/provider/apple.d.ts +0 -108
- package/dist/types/provider/apple.d.ts.map +0 -1
- package/dist/types/provider/arctic.d.ts +0 -16
- package/dist/types/provider/arctic.d.ts.map +0 -1
- package/dist/types/provider/code.d.ts +0 -74
- package/dist/types/provider/code.d.ts.map +0 -1
- package/dist/types/provider/cognito.d.ts +0 -64
- package/dist/types/provider/cognito.d.ts.map +0 -1
- package/dist/types/provider/discord.d.ts +0 -38
- package/dist/types/provider/discord.d.ts.map +0 -1
- package/dist/types/provider/facebook.d.ts +0 -74
- package/dist/types/provider/facebook.d.ts.map +0 -1
- package/dist/types/provider/github.d.ts +0 -38
- package/dist/types/provider/github.d.ts.map +0 -1
- package/dist/types/provider/google.d.ts +0 -74
- package/dist/types/provider/google.d.ts.map +0 -1
- package/dist/types/provider/index.d.ts +0 -4
- package/dist/types/provider/index.d.ts.map +0 -1
- package/dist/types/provider/jumpcloud.d.ts +0 -38
- package/dist/types/provider/jumpcloud.d.ts.map +0 -1
- package/dist/types/provider/keycloak.d.ts +0 -67
- package/dist/types/provider/keycloak.d.ts.map +0 -1
- package/dist/types/provider/linkedin.d.ts +0 -6
- package/dist/types/provider/linkedin.d.ts.map +0 -1
- package/dist/types/provider/m2m.d.ts +0 -34
- package/dist/types/provider/m2m.d.ts.map +0 -1
- package/dist/types/provider/microsoft.d.ts +0 -89
- package/dist/types/provider/microsoft.d.ts.map +0 -1
- package/dist/types/provider/oauth2.d.ts +0 -133
- package/dist/types/provider/oauth2.d.ts.map +0 -1
- package/dist/types/provider/oidc.d.ts +0 -91
- package/dist/types/provider/oidc.d.ts.map +0 -1
- package/dist/types/provider/passkey.d.ts +0 -143
- package/dist/types/provider/passkey.d.ts.map +0 -1
- package/dist/types/provider/password.d.ts +0 -210
- package/dist/types/provider/password.d.ts.map +0 -1
- package/dist/types/provider/provider.d.ts +0 -29
- package/dist/types/provider/provider.d.ts.map +0 -1
- package/dist/types/provider/slack.d.ts +0 -59
- package/dist/types/provider/slack.d.ts.map +0 -1
- package/dist/types/provider/spotify.d.ts +0 -38
- package/dist/types/provider/spotify.d.ts.map +0 -1
- package/dist/types/provider/twitch.d.ts +0 -38
- package/dist/types/provider/twitch.d.ts.map +0 -1
- package/dist/types/provider/x.d.ts +0 -38
- package/dist/types/provider/x.d.ts.map +0 -1
- package/dist/types/provider/yahoo.d.ts +0 -38
- package/dist/types/provider/yahoo.d.ts.map +0 -1
- package/dist/types/random.d.ts +0 -3
- package/dist/types/random.d.ts.map +0 -1
- package/dist/types/storage/aws.d.ts +0 -4
- package/dist/types/storage/aws.d.ts.map +0 -1
- package/dist/types/storage/cloudflare.d.ts +0 -34
- package/dist/types/storage/cloudflare.d.ts.map +0 -1
- package/dist/types/storage/dynamo.d.ts +0 -65
- package/dist/types/storage/dynamo.d.ts.map +0 -1
- package/dist/types/storage/memory.d.ts +0 -49
- package/dist/types/storage/memory.d.ts.map +0 -1
- package/dist/types/storage/storage.d.ts +0 -15
- package/dist/types/storage/storage.d.ts.map +0 -1
- package/dist/types/subject.d.ts +0 -122
- package/dist/types/subject.d.ts.map +0 -1
- package/dist/types/ui/base.d.ts +0 -5
- package/dist/types/ui/base.d.ts.map +0 -1
- package/dist/types/ui/code.d.ts +0 -104
- package/dist/types/ui/code.d.ts.map +0 -1
- package/dist/types/ui/form.d.ts +0 -6
- package/dist/types/ui/form.d.ts.map +0 -1
- package/dist/types/ui/icon.d.ts +0 -6
- package/dist/types/ui/icon.d.ts.map +0 -1
- package/dist/types/ui/passkey.d.ts +0 -5
- package/dist/types/ui/passkey.d.ts.map +0 -1
- package/dist/types/ui/password.d.ts +0 -139
- package/dist/types/ui/password.d.ts.map +0 -1
- package/dist/types/ui/select.d.ts +0 -55
- package/dist/types/ui/select.d.ts.map +0 -1
- package/dist/types/ui/theme.d.ts +0 -207
- package/dist/types/ui/theme.d.ts.map +0 -1
- package/dist/types/util.d.ts +0 -8
- package/dist/types/util.d.ts.map +0 -1
- package/src/css.d.ts +0 -4
- package/src/issuer.ts +0 -1628
- package/src/jwt.ts +0 -17
- package/src/keys.ts +0 -139
- package/src/provider/apple.ts +0 -127
- package/src/provider/arctic.ts +0 -66
- package/src/provider/code.ts +0 -227
- package/src/provider/cognito.ts +0 -74
- package/src/provider/discord.ts +0 -45
- package/src/provider/facebook.ts +0 -84
- package/src/provider/github.ts +0 -45
- package/src/provider/google.ts +0 -85
- package/src/provider/index.ts +0 -3
- package/src/provider/jumpcloud.ts +0 -45
- package/src/provider/keycloak.ts +0 -75
- package/src/provider/linkedin.ts +0 -12
- package/src/provider/m2m.ts +0 -56
- package/src/provider/microsoft.ts +0 -100
- package/src/provider/oauth2.ts +0 -297
- package/src/provider/oidc.ts +0 -179
- package/src/provider/passkey.ts +0 -655
- package/src/provider/password.ts +0 -672
- package/src/provider/provider.ts +0 -33
- package/src/provider/slack.ts +0 -67
- package/src/provider/spotify.ts +0 -45
- package/src/provider/twitch.ts +0 -45
- package/src/provider/x.ts +0 -46
- package/src/provider/yahoo.ts +0 -45
- package/src/random.ts +0 -24
- package/src/storage/aws.ts +0 -59
- package/src/storage/cloudflare.ts +0 -77
- package/src/storage/dynamo.ts +0 -193
- package/src/storage/memory.ts +0 -135
- package/src/storage/storage.ts +0 -46
- package/src/subject.ts +0 -130
- package/src/ui/base.tsx +0 -118
- package/src/ui/code.tsx +0 -215
- package/src/ui/form.tsx +0 -40
- package/src/ui/icon.tsx +0 -95
- package/src/ui/passkey.tsx +0 -321
- package/src/ui/password.tsx +0 -405
- package/src/ui/select.tsx +0 -221
- package/src/ui/theme.ts +0 -319
- package/src/ui/ui.css +0 -252
- package/src/util.ts +0 -58
- /package/dist/esm/{css.d.js → adapters/d1/types.js} +0 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subject — the typed principal the IdP issues at the end of an auth flow.
|
|
3
|
+
*
|
|
4
|
+
* Per AD4 / plan §"Subject", Zod is the canonical schema library. The
|
|
5
|
+
* subject schema type is library-agnostic at the boundary (any schema that
|
|
6
|
+
* implements the [Standard Schema v1] spec — including Zod 3.24+, Valibot,
|
|
7
|
+
* and Arktype) so existing consumers can migrate from Valibot/Arktype
|
|
8
|
+
* without rewriting subject definitions.
|
|
9
|
+
*
|
|
10
|
+
* [Standard Schema v1]: https://github.com/standard-schema/standard-schema
|
|
11
|
+
*/
|
|
12
|
+
import type { v1 } from "@standard-schema/spec";
|
|
13
|
+
/**
|
|
14
|
+
* Map of subject-type id → schema for that subject's `properties`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { z } from "zod"
|
|
19
|
+
*
|
|
20
|
+
* const subjects: SubjectSchema = {
|
|
21
|
+
* user: z.object({ userId: z.string(), email: z.string().email() }),
|
|
22
|
+
* admin: z.object({ adminId: z.string(), roles: z.array(z.string()) }),
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export type SubjectSchema = Record<string, v1.StandardSchema>;
|
|
27
|
+
/**
|
|
28
|
+
* Helper that infers the discriminated-union `{ type, properties }` shape
|
|
29
|
+
* from a `SubjectSchema`. Used to type the IdP's `success` callback return
|
|
30
|
+
* and the access-token `claim` payload.
|
|
31
|
+
*/
|
|
32
|
+
export type SubjectPayload<T extends SubjectSchema> = {
|
|
33
|
+
[type in keyof T & string]: {
|
|
34
|
+
type: type;
|
|
35
|
+
properties: v1.InferOutput<T[type]>;
|
|
36
|
+
};
|
|
37
|
+
}[keyof T & string];
|
|
38
|
+
/**
|
|
39
|
+
* Generic typed-subject claim — what the user's `IdPOptions.success`
|
|
40
|
+
* callback returns and what is inlined as `claim` on the access token.
|
|
41
|
+
*
|
|
42
|
+
* Domain / port signatures keep the generic open (`SubjectClaim`) so the
|
|
43
|
+
* framework doesn't need to know each consumer's subject schema. Concrete
|
|
44
|
+
* call sites narrow `T extends SubjectSchema` for type safety.
|
|
45
|
+
*/
|
|
46
|
+
export type SubjectClaim<T extends SubjectSchema = SubjectSchema> = SubjectPayload<T>;
|
|
47
|
+
//# sourceMappingURL=subject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subject.d.ts","sourceRoot":"","sources":["../../../src/types/subject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAA;AAE/C;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,CAAA;AAE7D;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,aAAa,IAAI;KACnD,IAAI,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG;QAC1B,IAAI,EAAE,IAAI,CAAA;QACV,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;KACpC;CACF,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA;AAEnB;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,IAC9D,cAAc,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tenant model + tenant-resolution / callback-recovery types.
|
|
3
|
+
*
|
|
4
|
+
* Per AD1, tenancy is **not** a URL concept. A tenant is whatever the
|
|
5
|
+
* user-supplied `resolveTenant(req)` says it is for an incoming request, plus
|
|
6
|
+
* a deterministic callback-recovery chain (MAC-bound state, partitioned host,
|
|
7
|
+
* or `flowId`-in-URI) for the post-redirect leg where the original tenant
|
|
8
|
+
* signal may no longer be available.
|
|
9
|
+
*
|
|
10
|
+
* The minimal state envelope MACed and round-tripped through upstream
|
|
11
|
+
* providers carries only `{ tenantId, flowId, nonce, kid }`. Everything else
|
|
12
|
+
* lives in the server-side `FlowRecord` (see `./flow.ts`).
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Branded tenant id — **opaque to the framework**.
|
|
16
|
+
*
|
|
17
|
+
* The framework treats `TenantId` as a comparable string and nothing more.
|
|
18
|
+
* It never parses it, never assumes a hierarchy or naming convention, never
|
|
19
|
+
* imposes uniqueness rules, never knows the lifecycle of a tenant. The
|
|
20
|
+
* embedding application decides what a tenant *is* (an organization, a
|
|
21
|
+
* workspace, an App-Tenant tuple, a customer, …) and supplies a
|
|
22
|
+
* `resolveTenant(req)` that maps incoming requests to the right key.
|
|
23
|
+
*
|
|
24
|
+
* Common embedding pattern when the host application has two levels of
|
|
25
|
+
* scoping (e.g. `App` ⇒ `App-Tenant`): encode the tuple into the key.
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* // Inside the host application's resolveTenant:
|
|
29
|
+
* return ok(`${app.id}:${appTenant?.id ?? "__default__"}` as TenantId)
|
|
30
|
+
*
|
|
31
|
+
* // Inside the host application's ConfigStore.getTenantConfig:
|
|
32
|
+
* const [appId, subId] = (id as string).split(":")
|
|
33
|
+
* // merge App defaults + App-Tenant overrides from your own DB ...
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* The brand exists to keep arbitrary `string` values from being passed
|
|
37
|
+
* where a `TenantId` is expected; the *meaning* of the string is the host
|
|
38
|
+
* application's concern.
|
|
39
|
+
*/
|
|
40
|
+
export type TenantId = string & {
|
|
41
|
+
readonly __brand: "TenantId";
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Cast helper for code that mints `TenantId` from a validated string. The
|
|
45
|
+
* framework imposes no validation on the value — callers ensure their key
|
|
46
|
+
* is non-empty and stable per partition.
|
|
47
|
+
*/
|
|
48
|
+
export declare const asTenantId: (value: string) => TenantId;
|
|
49
|
+
/** OAuth 2.1 grant types in scope for this IdP. Implicit is intentionally absent. */
|
|
50
|
+
export type GrantType = "authorization_code" | "refresh_token" | "client_credentials";
|
|
51
|
+
/**
|
|
52
|
+
* `MethodType` is the canonical discriminator for an `AuthMethod`. It mirrors
|
|
53
|
+
* the existing provider taxonomy. The UI uses it to decide which selection /
|
|
54
|
+
* form to render; the framework uses it as a routing / dispatch hint.
|
|
55
|
+
*/
|
|
56
|
+
export type MethodType = "oauth2" | "oidc" | "password" | "code" | "m2m" | "passkey" | "custom";
|
|
57
|
+
/**
|
|
58
|
+
* Per-tenant configuration for a single auth method **instance**.
|
|
59
|
+
*
|
|
60
|
+
* `id` is the **tenant-local instance id** — the value that ends up in URLs
|
|
61
|
+
* (`/<id>/*`) and that the framework dispatches by.
|
|
62
|
+
*
|
|
63
|
+
* `kind` is the **factory id** — the value that selects which
|
|
64
|
+
* `AuthMethodFactory` builds this instance. A tenant may register multiple
|
|
65
|
+
* instances of the same factory (e.g. one Google Workspace SSO and one
|
|
66
|
+
* consumer Google Sign-In) by giving each instance a unique `id` while
|
|
67
|
+
* sharing a `kind`.
|
|
68
|
+
*
|
|
69
|
+
* `type` is the `MethodType` discriminator the UI uses. The framework
|
|
70
|
+
* verifies it agrees with the factory's declared type at load time.
|
|
71
|
+
*
|
|
72
|
+
* `config` is the tenant-supplied configuration blob. The framework validates
|
|
73
|
+
* it against the factory's Zod `configSchema` before any handler runs.
|
|
74
|
+
*/
|
|
75
|
+
export type MethodConfig = {
|
|
76
|
+
id: string;
|
|
77
|
+
kind: string;
|
|
78
|
+
type: MethodType;
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
config: Record<string, unknown>;
|
|
81
|
+
};
|
|
82
|
+
/** Optional theme metadata. Schema expanded in later phases. */
|
|
83
|
+
export type ThemeConfig = {
|
|
84
|
+
primary?: string;
|
|
85
|
+
logo?: string;
|
|
86
|
+
favicon?: string;
|
|
87
|
+
background?: string;
|
|
88
|
+
font?: string;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Registered OAuth client of this IdP (an app, SPA, mobile, M2M).
|
|
92
|
+
*
|
|
93
|
+
* Phase 8: split into a discriminated union so misconfiguration is a type
|
|
94
|
+
* error, not a runtime check. The runtime in `domain/authorize.ts` still
|
|
95
|
+
* enforces PKCE for public clients defensively, but hosts will see the
|
|
96
|
+
* problem at compile time.
|
|
97
|
+
*
|
|
98
|
+
* - **Public clients** (SPAs, mobile apps, native apps): no client secret;
|
|
99
|
+
* `pkceRequired` is the literal `true`. PKCE is non-negotiable per
|
|
100
|
+
* OAuth 2.1 BCP §2.1.1.
|
|
101
|
+
* - **Confidential clients** (server-side apps, M2M): `secretHash` is
|
|
102
|
+
* required (this used to be optional, in practice always set). PKCE
|
|
103
|
+
* recommended but may be disabled by the host.
|
|
104
|
+
*/
|
|
105
|
+
export type ClientConfig = PublicClientConfig | ConfidentialClientConfig;
|
|
106
|
+
export type PublicClientConfig = {
|
|
107
|
+
id: string;
|
|
108
|
+
name: string;
|
|
109
|
+
type: "public";
|
|
110
|
+
redirectUris: string[];
|
|
111
|
+
grantTypes: GrantType[];
|
|
112
|
+
scopes: string[];
|
|
113
|
+
/** Must be `true` for public clients per OAuth 2.1 §2.1.1. */
|
|
114
|
+
pkceRequired: true;
|
|
115
|
+
/**
|
|
116
|
+
* Registered URIs to which `/end_session` may redirect after RP-initiated
|
|
117
|
+
* logout (OIDC RP-Initiated Logout 1.0 §2). Exact-match. If absent, the
|
|
118
|
+
* `/end_session` endpoint refuses any `post_logout_redirect_uri`.
|
|
119
|
+
*/
|
|
120
|
+
postLogoutRedirectUris?: string[];
|
|
121
|
+
/**
|
|
122
|
+
* RFC 9126 §2: when `true`, the client MUST use Pushed Authorization
|
|
123
|
+
* Requests; a direct `GET /authorize` call without `request_uri` is
|
|
124
|
+
* rejected with `invalid_request`.
|
|
125
|
+
*/
|
|
126
|
+
requirePushedAuthorizationRequests?: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* OIDC Core §8.1 — when set, the subject identifier (`sub`) is derived
|
|
129
|
+
* as a pairwise pseudonym keyed by this string. Two clients sharing
|
|
130
|
+
* the same `sectorIdentifier` will see the same `sub`; different
|
|
131
|
+
* values yield different `sub`s for the same end user. Absent =
|
|
132
|
+
* public subject (sub is identical across all RPs).
|
|
133
|
+
*/
|
|
134
|
+
sectorIdentifier?: string;
|
|
135
|
+
/** Phase 8. */
|
|
136
|
+
dpopRequired?: boolean;
|
|
137
|
+
};
|
|
138
|
+
export type ConfidentialClientConfig = {
|
|
139
|
+
id: string;
|
|
140
|
+
name: string;
|
|
141
|
+
type: "confidential";
|
|
142
|
+
/** Hash of the client secret. Required for confidential clients. */
|
|
143
|
+
secretHash: string;
|
|
144
|
+
redirectUris: string[];
|
|
145
|
+
grantTypes: GrantType[];
|
|
146
|
+
scopes: string[];
|
|
147
|
+
/**
|
|
148
|
+
* Default true. Disabling it is permitted for confidential clients but
|
|
149
|
+
* strongly discouraged; OAuth 2.1 §2.1.1 recommends PKCE for every client.
|
|
150
|
+
*/
|
|
151
|
+
pkceRequired: boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Registered URIs to which `/end_session` may redirect after RP-initiated
|
|
154
|
+
* logout (OIDC RP-Initiated Logout 1.0 §2). Exact-match.
|
|
155
|
+
*/
|
|
156
|
+
postLogoutRedirectUris?: string[];
|
|
157
|
+
/**
|
|
158
|
+
* RFC 9126 §2: when `true`, the client MUST use Pushed Authorization
|
|
159
|
+
* Requests; a direct `GET /authorize` call without `request_uri` is
|
|
160
|
+
* rejected with `invalid_request`.
|
|
161
|
+
*/
|
|
162
|
+
requirePushedAuthorizationRequests?: boolean;
|
|
163
|
+
/**
|
|
164
|
+
* OIDC Core §8.1 — see `PublicClientConfig.sectorIdentifier` for
|
|
165
|
+
* semantics. Same field; duplicated on each branch because the
|
|
166
|
+
* `ClientConfig` discriminated union doesn't share optional fields.
|
|
167
|
+
*/
|
|
168
|
+
sectorIdentifier?: string;
|
|
169
|
+
/** Phase 8. */
|
|
170
|
+
dpopRequired?: boolean;
|
|
171
|
+
};
|
|
172
|
+
export type TenantConfig = {
|
|
173
|
+
id: TenantId;
|
|
174
|
+
displayName: string;
|
|
175
|
+
clients: ClientConfig[];
|
|
176
|
+
methods: MethodConfig[];
|
|
177
|
+
theme?: ThemeConfig;
|
|
178
|
+
/** Set when the tenant needs cross-subdomain SSO. */
|
|
179
|
+
cookieDomain?: string;
|
|
180
|
+
/** Override default refresh-token TTL (seconds). */
|
|
181
|
+
refreshTtl?: number;
|
|
182
|
+
/** Override default access-token TTL (seconds). */
|
|
183
|
+
accessTtl?: number;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Per-request tenant context handed to methods and the user-supplied
|
|
187
|
+
* `success` callback. `request.raw` is the Web Fetch `Request` the framework
|
|
188
|
+
* received; `request.custom` is whatever the host returned from the
|
|
189
|
+
* `IdPOptions.buildCustomContext` hook (request id, decoded JWT claims, mTLS
|
|
190
|
+
* cert info, geo hints — anything per-request that methods or `success`
|
|
191
|
+
* should see). Without the hook the blob is `{}`. The same blob is also
|
|
192
|
+
* persisted on the `FlowRecord` at `/authorize` time so it survives the
|
|
193
|
+
* upstream redirect and re-presents on the callback side.
|
|
194
|
+
*/
|
|
195
|
+
export type TenantContext = {
|
|
196
|
+
id: TenantId;
|
|
197
|
+
config: TenantConfig;
|
|
198
|
+
request: {
|
|
199
|
+
raw: Request;
|
|
200
|
+
custom: Record<string, unknown>;
|
|
201
|
+
};
|
|
202
|
+
};
|
|
203
|
+
/**
|
|
204
|
+
* Outcome of the framework's tenant-recovery chain, evaluated **before**
|
|
205
|
+
* `resolveTenant` runs on the incoming request. Each non-`fresh-request`
|
|
206
|
+
* variant carries a `flowId`; the framework consumes the matching
|
|
207
|
+
* `FlowRecord` and dispatches without consulting `resolveTenant`.
|
|
208
|
+
*
|
|
209
|
+
* Order of evaluation (see plan §"Tenant Recovery Across Redirects"):
|
|
210
|
+
* 1. If `callbackHostFor` configured AND host matches a known tenant:
|
|
211
|
+
* a. `state` MAC-verifies → host-plus-mac
|
|
212
|
+
* b. `flowId` in URI → host-plus-uri
|
|
213
|
+
* c. otherwise → invalid_request, audit unrecoverable_flow
|
|
214
|
+
* 2. Else if `state` MAC-verifies → mac-state
|
|
215
|
+
* 3. Else if `flowId` in registered URI path/query → flow-id-in-uri
|
|
216
|
+
* 4. Else → fresh-request → call user's `resolveTenant(req)`
|
|
217
|
+
*/
|
|
218
|
+
export type TenantRecovery = {
|
|
219
|
+
kind: "mac-state";
|
|
220
|
+
tenantId: TenantId;
|
|
221
|
+
flowId: string;
|
|
222
|
+
} | {
|
|
223
|
+
kind: "host-plus-uri";
|
|
224
|
+
tenantId: TenantId;
|
|
225
|
+
flowId: string;
|
|
226
|
+
} | {
|
|
227
|
+
kind: "host-plus-mac";
|
|
228
|
+
tenantId: TenantId;
|
|
229
|
+
flowId: string;
|
|
230
|
+
} | {
|
|
231
|
+
kind: "flow-id-in-uri";
|
|
232
|
+
tenantId: TenantId;
|
|
233
|
+
flowId: string;
|
|
234
|
+
} | {
|
|
235
|
+
kind: "fresh-request";
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* Minimal envelope MACed into the `state` query parameter. Intentionally
|
|
239
|
+
* tiny — under 256 base64url bytes — so it stays clear of provider URL
|
|
240
|
+
* limits. **No sensitive data must ever be added here.** Everything else
|
|
241
|
+
* lives in the server-side `FlowRecord`.
|
|
242
|
+
*/
|
|
243
|
+
export type StateEnvelope = {
|
|
244
|
+
tenantId: TenantId;
|
|
245
|
+
flowId: string;
|
|
246
|
+
/** Per-flow nonce. Distinct from the relying party's `state` param. */
|
|
247
|
+
nonce: string;
|
|
248
|
+
/** Key id of the HMAC key used to mint this envelope (`StateKeyRing` lookup). */
|
|
249
|
+
kid: string;
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* HMAC-SHA-256 key entry used to mint / verify the `state` envelope MAC.
|
|
253
|
+
* The 32-byte key is global (shared across IdP instances) — recovery has to
|
|
254
|
+
* work before tenant config is loaded, so per-tenant keys would create a
|
|
255
|
+
* bootstrap problem.
|
|
256
|
+
*/
|
|
257
|
+
export type StateKey = {
|
|
258
|
+
kid: string;
|
|
259
|
+
/** 32 raw bytes. */
|
|
260
|
+
key: Uint8Array;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* State-MAC key ring with overlap-based rotation. `active` mints new state;
|
|
264
|
+
* any key in `verify` accepts existing state during its overlap window.
|
|
265
|
+
*
|
|
266
|
+
* Rotation cadence: monthly. The overlap window must be at least as long as
|
|
267
|
+
* the flow-record TTL (default 10 minutes); a 1-hour overlap is the
|
|
268
|
+
* recommended default. New keys are added to `verify` first, promoted to
|
|
269
|
+
* `active` on the next rotation, then dropped from `verify` after overlap.
|
|
270
|
+
*/
|
|
271
|
+
export type StateKeyRing = {
|
|
272
|
+
active: StateKey;
|
|
273
|
+
/** Includes `active` plus any previous keys still inside their overlap window. */
|
|
274
|
+
verify: ReadonlyArray<StateKey>;
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=tenant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../../src/types/tenant.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token-domain shapes — auth code payload (snapshot of `FlowRecord` at
|
|
3
|
+
* handoff), access-token claims, refresh-token payload, and the small
|
|
4
|
+
* envelopes the `TokenStore` persists.
|
|
5
|
+
*
|
|
6
|
+
* Per AD9, access tokens are JWTs (ES256 by default, Ed25519 optional per
|
|
7
|
+
* AD11) and refresh tokens are opaque server-side records.
|
|
8
|
+
*/
|
|
9
|
+
import type { ClaimsRequest } from "./authorization";
|
|
10
|
+
import type { SubjectClaim } from "./subject";
|
|
11
|
+
import type { TenantId } from "./tenant";
|
|
12
|
+
/**
|
|
13
|
+
* Payload stored under an auth code. Built at callback time from the consumed
|
|
14
|
+
* `FlowRecord` plus the method's `success` result. Encrypted at rest by
|
|
15
|
+
* `TokenStore.saveCode` (see `ports/CONSISTENCY.md`).
|
|
16
|
+
*
|
|
17
|
+
* `methodState` is intentionally **not** snapshotted: it served its
|
|
18
|
+
* upstream-callback purpose and is dropped with the flow record.
|
|
19
|
+
*/
|
|
20
|
+
export type CodePayload = {
|
|
21
|
+
tenantId: TenantId;
|
|
22
|
+
clientId: string;
|
|
23
|
+
appRedirectUri: string;
|
|
24
|
+
/** Relying party's `state` param, echoed back at success. */
|
|
25
|
+
appState: string | null;
|
|
26
|
+
scopes: string[];
|
|
27
|
+
audience?: string;
|
|
28
|
+
/** Relying-party → IdP PKCE; verified at `/token` against the RP's verifier. */
|
|
29
|
+
clientPkce?: {
|
|
30
|
+
challenge: string;
|
|
31
|
+
method: "S256";
|
|
32
|
+
};
|
|
33
|
+
/** Tenant-local method instance id (`MethodConfig.id`). */
|
|
34
|
+
methodId: string;
|
|
35
|
+
/** Factory kind (`MethodConfig.kind`). */
|
|
36
|
+
methodKind: string;
|
|
37
|
+
/** User's `requestContext` snapshot, if any. */
|
|
38
|
+
context?: Record<string, unknown> | null;
|
|
39
|
+
/** Upstream system's stable identifier (from `MethodResult.success`). */
|
|
40
|
+
providerSubject: string;
|
|
41
|
+
/** Typed-per-method properties from `MethodResult.success`. */
|
|
42
|
+
properties: unknown;
|
|
43
|
+
/**
|
|
44
|
+
* Relying party's OIDC `nonce` (OIDC Core §3.1.2.1). Snapshotted from
|
|
45
|
+
* `FlowRecord.appNonce`. Echoed into the issued `id_token` when present.
|
|
46
|
+
*/
|
|
47
|
+
appNonce?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Seconds-since-epoch when end-user authentication completed
|
|
50
|
+
* (OIDC Core §2 `auth_time`). Stamped at the moment the method's
|
|
51
|
+
* `MethodResult.success` fires. Carried into the `id_token` and forward
|
|
52
|
+
* across refresh-token rotations.
|
|
53
|
+
*/
|
|
54
|
+
authTime: number;
|
|
55
|
+
/** OIDC Core §5.5 — RP-requested claims; honored at id_token + /userinfo. */
|
|
56
|
+
claimsRequest?: ClaimsRequest;
|
|
57
|
+
/** Auth-code TTL is 60 s — framework refuses anything longer. */
|
|
58
|
+
expiresAt: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* OIDC Core §5.1 `address` claim. Structured object value rather than a
|
|
62
|
+
* scalar — distinct from the rest of the profile fields.
|
|
63
|
+
*/
|
|
64
|
+
export type AddressClaim = {
|
|
65
|
+
formatted?: string;
|
|
66
|
+
street_address?: string;
|
|
67
|
+
locality?: string;
|
|
68
|
+
region?: string;
|
|
69
|
+
postal_code?: string;
|
|
70
|
+
country?: string;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* OIDC Core §5.1 profile / email / phone / address claims, gated by the
|
|
74
|
+
* `profile` / `email` / `phone` / `address` scopes via §5.4. Reused by
|
|
75
|
+
* `IdTokenClaims` and the `/userinfo` response so the two surfaces share
|
|
76
|
+
* exactly one source of truth for scope→claim mapping.
|
|
77
|
+
*
|
|
78
|
+
* Every field is optional: presence depends on (a) which scopes were
|
|
79
|
+
* granted and (b) whether the host populated the matching key in
|
|
80
|
+
* `SubjectClaim.properties`.
|
|
81
|
+
*/
|
|
82
|
+
export type ScopedProfileClaims = {
|
|
83
|
+
name?: string;
|
|
84
|
+
given_name?: string;
|
|
85
|
+
family_name?: string;
|
|
86
|
+
middle_name?: string;
|
|
87
|
+
nickname?: string;
|
|
88
|
+
preferred_username?: string;
|
|
89
|
+
profile?: string;
|
|
90
|
+
picture?: string;
|
|
91
|
+
website?: string;
|
|
92
|
+
gender?: string;
|
|
93
|
+
birthdate?: string;
|
|
94
|
+
zoneinfo?: string;
|
|
95
|
+
locale?: string;
|
|
96
|
+
updated_at?: number;
|
|
97
|
+
email?: string;
|
|
98
|
+
email_verified?: boolean;
|
|
99
|
+
phone_number?: string;
|
|
100
|
+
phone_number_verified?: boolean;
|
|
101
|
+
address?: AddressClaim;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* OIDC `id_token` JWT claims this IdP issues at `/token` when `openid`
|
|
105
|
+
* scope is granted (OIDC Core §2). Distinct from access-token claims:
|
|
106
|
+
*
|
|
107
|
+
* - `aud` is the relying-party `client_id` (not the API audience).
|
|
108
|
+
* - `nonce` echoes the RP's `/authorize` `nonce` parameter when present.
|
|
109
|
+
* - `auth_time` is stable across refresh-token rotations (OIDC Core §12).
|
|
110
|
+
* - `at_hash` is recommended whenever an id_token and access_token are
|
|
111
|
+
* returned in the same response (§3.1.3.6).
|
|
112
|
+
*
|
|
113
|
+
* Standard OIDC claim names use snake_case on the wire; TypeScript field
|
|
114
|
+
* names match to keep the marshalling 1:1.
|
|
115
|
+
*/
|
|
116
|
+
export type IdTokenClaims = ScopedProfileClaims & {
|
|
117
|
+
iss: string;
|
|
118
|
+
sub: string;
|
|
119
|
+
aud: string;
|
|
120
|
+
exp: number;
|
|
121
|
+
iat: number;
|
|
122
|
+
/** Seconds-since-epoch when end-user auth completed. */
|
|
123
|
+
auth_time?: number;
|
|
124
|
+
/** RP-supplied OIDC nonce, when present. MUST equal the `/authorize` value. */
|
|
125
|
+
nonce?: string;
|
|
126
|
+
/** Authentication Methods References (RFC 8176). */
|
|
127
|
+
amr?: string[];
|
|
128
|
+
/** Authentication Context Class Reference. */
|
|
129
|
+
acr?: string;
|
|
130
|
+
/** Authorized party — the client_id of the party the id_token is for. */
|
|
131
|
+
azp?: string;
|
|
132
|
+
/** Access-token hash (OIDC Core §3.1.3.6). */
|
|
133
|
+
at_hash?: string;
|
|
134
|
+
};
|
|
135
|
+
/** Access-token JWT claims this IdP issues. */
|
|
136
|
+
export type AccessTokenClaims = {
|
|
137
|
+
iss: string;
|
|
138
|
+
sub: string;
|
|
139
|
+
aud: string;
|
|
140
|
+
exp: number;
|
|
141
|
+
iat: number;
|
|
142
|
+
/** Tenant id. */
|
|
143
|
+
tid: TenantId;
|
|
144
|
+
/** Tenant-local method instance id that originated this token. */
|
|
145
|
+
mid?: string;
|
|
146
|
+
/** Factory kind that originated this token. */
|
|
147
|
+
mkind?: string;
|
|
148
|
+
scope?: string;
|
|
149
|
+
/**
|
|
150
|
+
* Seconds-since-epoch when the end-user originally authenticated
|
|
151
|
+
* (OIDC Core §2). Stable across refresh-token rotation and across
|
|
152
|
+
* RFC 8693 token-exchange (§12 — exchanging an audience does NOT
|
|
153
|
+
* re-authenticate the user). Absent on `client_credentials` grants
|
|
154
|
+
* where there is no end-user.
|
|
155
|
+
*
|
|
156
|
+
* Carried on the access token so RFC 8693 `subject_token` consumers
|
|
157
|
+
* can propagate it without needing the original id_token. Resource
|
|
158
|
+
* servers typically ignore it; it's there for the IdP's own
|
|
159
|
+
* downstream issuance.
|
|
160
|
+
*/
|
|
161
|
+
auth_time?: number;
|
|
162
|
+
/** DPoP confirmation claim (Phase 8). */
|
|
163
|
+
cnf?: {
|
|
164
|
+
jkt: string;
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* OIDC Core §5.5 — list of claim names the RP requested for the
|
|
168
|
+
* `/userinfo` response via the `claims` parameter. The resource server
|
|
169
|
+
* surface uses this to bypass scope-gating per §5.5; it is empty /
|
|
170
|
+
* absent when the RP did not use the `claims` parameter.
|
|
171
|
+
*/
|
|
172
|
+
uic?: string[];
|
|
173
|
+
/** The structured subject (matches `SubjectClaim`). Inlined for resource servers. */
|
|
174
|
+
claim: SubjectClaim;
|
|
175
|
+
};
|
|
176
|
+
/**
|
|
177
|
+
* Opaque refresh-token payload — persisted in `TokenStore` with strong CAS
|
|
178
|
+
* semantics (see `ports/CONSISTENCY.md`). The token itself is a random
|
|
179
|
+
* string; the payload is what the store returns on consume.
|
|
180
|
+
*/
|
|
181
|
+
export type RefreshTokenPayload = {
|
|
182
|
+
tenantId: TenantId;
|
|
183
|
+
clientId: string;
|
|
184
|
+
/** Stable subject id derived from the issued `SubjectClaim`. */
|
|
185
|
+
subjectId: string;
|
|
186
|
+
claim: SubjectClaim;
|
|
187
|
+
scopes: string[];
|
|
188
|
+
audience?: string;
|
|
189
|
+
/** Reuse-detection chain id. Rotation issues a new token with the same family. */
|
|
190
|
+
family: string;
|
|
191
|
+
/**
|
|
192
|
+
* Tenant-local method instance id (`MethodConfig.id`) that originated the
|
|
193
|
+
* chain. Preserved across `refresh_token` rotations so descendant access
|
|
194
|
+
* tokens carry the original `mid` / `mkind` claims instead of the
|
|
195
|
+
* grant-type literal "refresh".
|
|
196
|
+
*/
|
|
197
|
+
methodId: string;
|
|
198
|
+
/** Factory kind (`MethodConfig.kind`) that originated the chain. */
|
|
199
|
+
methodKind: string;
|
|
200
|
+
/**
|
|
201
|
+
* Seconds-since-epoch when end-user authentication originally completed
|
|
202
|
+
* (OIDC Core §2 `auth_time`). Stable across refresh-token rotations —
|
|
203
|
+
* `auth_time` does **not** advance on refresh, only on re-authentication.
|
|
204
|
+
*/
|
|
205
|
+
authTime: number;
|
|
206
|
+
/**
|
|
207
|
+
* RFC 7638 JWK thumbprint of the client's DPoP key (RFC 9449 §6.1).
|
|
208
|
+
* Present when the original token grant was DPoP-bound. Refresh-grant
|
|
209
|
+
* rotation REQUIRES a fresh DPoP proof whose thumbprint matches; absent
|
|
210
|
+
* = the token is plain Bearer and Bearer is acceptable on refresh.
|
|
211
|
+
*/
|
|
212
|
+
dpopJkt?: string;
|
|
213
|
+
/**
|
|
214
|
+
* OIDC Core §12 — the original RP-requested claims, preserved so
|
|
215
|
+
* refresh-grant id_token + /userinfo responses keep returning them.
|
|
216
|
+
*/
|
|
217
|
+
claimsRequest?: ClaimsRequest;
|
|
218
|
+
/** Wall-clock issuance and absolute-expiry timestamps. */
|
|
219
|
+
issuedAt: number;
|
|
220
|
+
expiresAt: number;
|
|
221
|
+
};
|
|
222
|
+
/** Response body of `/token` (RFC 6749 §5.1). */
|
|
223
|
+
export type TokenResponse = {
|
|
224
|
+
access_token: string;
|
|
225
|
+
token_type: "Bearer" | "DPoP";
|
|
226
|
+
expires_in: number;
|
|
227
|
+
refresh_token?: string;
|
|
228
|
+
scope?: string;
|
|
229
|
+
id_token?: string;
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/types/token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-rendered HTML helpers for the bundled credential methods and the
|
|
3
|
+
* default authorization picker.
|
|
4
|
+
*
|
|
5
|
+
* Intentionally minimal — zero JS, no client framework. Hosts that want a
|
|
6
|
+
* richer UI override `IdPOptions.renderPicker` (for method selection) or
|
|
7
|
+
* supply their own `success-response` from method handlers (for credential
|
|
8
|
+
* forms). The helpers escape user-provided strings so callers can drop
|
|
9
|
+
* arbitrary labels or error messages without thinking about XSS.
|
|
10
|
+
*/
|
|
11
|
+
export declare function escapeHtml(s: string): string;
|
|
12
|
+
export declare const BASE_STYLES = "\n:root {\n color-scheme: light dark;\n\n --bg-page: #eef0f4;\n --bg-card: #ffffff;\n --bg-input: #ffffff;\n --bg-row: #f5f6f8;\n --bg-row-hover: #eaecf1;\n --fg-high: #0e1116;\n --fg-mid: #4a5160;\n --fg-low: #8b93a3;\n --border: #d8dce3;\n --border-strong: #9aa3b2;\n --primary: #2f3137;\n --primary-fg: #ffffff;\n --primary-hover: #1b1d22;\n --focus-ring: rgba(47, 49, 55, 0.18);\n --error-bg: #fdecec;\n --error-fg: #8a1a1a;\n --radius: 8px;\n --shadow-card: 0 1px 2px rgba(15, 18, 25, 0.04), 0 12px 28px rgba(15, 18, 25, 0.08);\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --bg-page: #0e0f12;\n --bg-card: #16181d;\n --bg-input: #1c1f25;\n --bg-row: #20242c;\n --bg-row-hover: #2a2f38;\n --fg-high: #f3f4f6;\n --fg-mid: #b6bcc7;\n --fg-low: #7a8190;\n --border: #2a2e36;\n --border-strong: #3a4049;\n --primary: #f3f4f6;\n --primary-fg: #0e1116;\n --primary-hover: #ffffff;\n --focus-ring: rgba(243, 244, 246, 0.22);\n --error-bg: #2a1414;\n --error-fg: #f5b4b4;\n --shadow-card: 0 1px 2px rgba(0, 0, 0, 0.5), 0 18px 40px rgba(0, 0, 0, 0.5);\n }\n}\n\n* { box-sizing: border-box; }\n\nhtml, body { margin: 0; padding: 0; }\n\nbody {\n min-height: 100vh;\n background: var(--bg-page);\n color: var(--fg-high);\n font-family: ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", \"Inter\", \"Helvetica Neue\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\";\n font-size: 15px;\n line-height: 1.45;\n display: grid;\n place-items: center;\n padding: 1.5rem;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nmain {\n max-width: 380px;\n width: 100%;\n padding: 2rem 1.75rem;\n background: var(--bg-card);\n border-radius: var(--radius);\n box-shadow: var(--shadow-card);\n}\n\nh1 {\n font-size: 1.125rem;\n font-weight: 600;\n letter-spacing: -0.01em;\n margin: 0 0 1.25rem;\n color: var(--fg-high);\n}\n\nform {\n display: grid;\n gap: 0.85rem;\n margin: 0;\n}\n\nlabel {\n display: grid;\n gap: 0.4rem;\n font-size: 0.78rem;\n font-weight: 500;\n color: var(--fg-mid);\n text-transform: none;\n}\n\ninput {\n width: 100%;\n height: 2.5rem;\n padding: 0 0.85rem;\n background: var(--bg-input);\n color: var(--fg-high);\n border: 1px solid var(--border);\n border-radius: calc(var(--radius) - 2px);\n font-size: 0.95rem;\n font-family: inherit;\n outline: none;\n transition: border-color 120ms ease, box-shadow 120ms ease;\n}\ninput::placeholder { color: var(--fg-low); }\ninput:hover { border-color: var(--border-strong); }\ninput:focus {\n border-color: var(--primary);\n box-shadow: 0 0 0 3px var(--focus-ring);\n}\ninput:user-invalid:not(:focus) {\n border-color: var(--error-fg);\n}\n\nbutton {\n height: 2.5rem;\n padding: 0 1rem;\n border: 0;\n border-radius: calc(var(--radius) - 2px);\n background: var(--primary);\n color: var(--primary-fg);\n font-family: inherit;\n font-size: 0.9rem;\n font-weight: 600;\n letter-spacing: 0.01em;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n transition: background 120ms ease, transform 80ms ease;\n}\nbutton:hover { background: var(--primary-hover); }\nbutton:active { transform: translateY(1px); }\nbutton:focus-visible { box-shadow: 0 0 0 3px var(--focus-ring); outline: none; }\n\n.error {\n display: flex;\n align-items: center;\n min-height: 2.25rem;\n padding: 0.5rem 0.85rem;\n margin: 0 0 0.25rem;\n background: var(--error-bg);\n color: var(--error-fg);\n font-size: 0.82rem;\n border-radius: calc(var(--radius) - 2px);\n}\n\n.methods {\n list-style: none;\n padding: 0;\n margin: 0;\n display: grid;\n gap: 0.5rem;\n}\n.methods a {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 2.75rem;\n padding: 0 1rem;\n background: var(--bg-row);\n border: 1px solid var(--border);\n border-radius: calc(var(--radius) - 2px);\n color: var(--fg-high);\n font-size: 0.92rem;\n font-weight: 500;\n text-decoration: none;\n transition: background 120ms ease, border-color 120ms ease, transform 80ms ease;\n}\n.methods a::after {\n content: \"\u203A\";\n color: var(--fg-mid);\n font-size: 1.15rem;\n font-weight: 500;\n line-height: 1;\n}\n.methods a:hover {\n background: var(--bg-row-hover);\n border-color: var(--border-strong);\n color: var(--fg-high);\n}\n.methods a:hover::after {\n color: var(--fg-high);\n}\n.methods a:active { transform: translateY(1px); }\n.methods a:focus-visible {\n outline: none;\n border-color: var(--primary);\n box-shadow: 0 0 0 3px var(--focus-ring);\n}\n";
|
|
13
|
+
export declare function htmlPage(opts: {
|
|
14
|
+
title: string;
|
|
15
|
+
body: string;
|
|
16
|
+
}): string;
|
|
17
|
+
export type FormField = {
|
|
18
|
+
name: string;
|
|
19
|
+
label: string;
|
|
20
|
+
type?: "text" | "password" | "email" | "tel";
|
|
21
|
+
value?: string;
|
|
22
|
+
required?: boolean;
|
|
23
|
+
autocomplete?: string;
|
|
24
|
+
inputmode?: string;
|
|
25
|
+
};
|
|
26
|
+
/** Build a `<form>` POSTing to `action`. */
|
|
27
|
+
export declare function renderForm(opts: {
|
|
28
|
+
title: string;
|
|
29
|
+
action: string;
|
|
30
|
+
fields: FormField[];
|
|
31
|
+
submit: string;
|
|
32
|
+
error?: string;
|
|
33
|
+
hidden?: Record<string, string>;
|
|
34
|
+
}): string;
|
|
35
|
+
//# sourceMappingURL=forms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../../src/ui/forms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB5C;AAED,eAAO,MAAM,WAAW,+jJAoMvB,CAAA;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAatE;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAA;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC,GAAG,MAAM,CA2BT"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public surface for the built-in server-rendered UI helpers.
|
|
3
|
+
*
|
|
4
|
+
* Hosts who want their own UI typically don't import from here at all —
|
|
5
|
+
* they intercept at the host application layer. Hosts that want to keep
|
|
6
|
+
* the defaults but tweak around the edges (e.g. supply a custom picker
|
|
7
|
+
* while keeping the default credential forms) can pull renderForm /
|
|
8
|
+
* renderPicker from here.
|
|
9
|
+
*/
|
|
10
|
+
export { renderForm, escapeHtml, htmlPage, BASE_STYLES } from "./forms";
|
|
11
|
+
export type { FormField } from "./forms";
|
|
12
|
+
export { renderPicker, buildMethodLink } from "./picker";
|
|
13
|
+
export type { PickerMethod, PickerContext } from "./picker";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACvE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AACxD,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default provider picker — rendered when an `/authorize` request matches
|
|
3
|
+
* more than one enabled method and no `method_id` was specified.
|
|
4
|
+
*
|
|
5
|
+
* Hosts that want a fully custom UI override `IdPOptions.renderPicker`.
|
|
6
|
+
* Both the default and any override return a `Response`; the framework
|
|
7
|
+
* applies caching headers afterward.
|
|
8
|
+
*/
|
|
9
|
+
import type { PickerContext, PickerMethod } from "../types/picker";
|
|
10
|
+
export type { PickerContext, PickerMethod };
|
|
11
|
+
/**
|
|
12
|
+
* Build an `/authorize` URL that pre-selects a specific `method_id` while
|
|
13
|
+
* carrying every other OAuth param through unchanged.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildMethodLink(methodId: string, ctx: PickerContext): string;
|
|
16
|
+
/** Default styled HTML picker. */
|
|
17
|
+
export declare function renderPicker(methods: PickerMethod[], ctx: PickerContext): Response;
|
|
18
|
+
//# sourceMappingURL=picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../../src/ui/picker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGlE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,CAAA;AAE3C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAgB5E;AAED,kCAAkC;AAClC,wBAAgB,YAAY,CAC1B,OAAO,EAAE,YAAY,EAAE,EACvB,GAAG,EAAE,aAAa,GACjB,QAAQ,CAeV"}
|