@_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 @@
|
|
|
1
|
+
{"version":3,"file":"method-route.d.ts","sourceRoot":"","sources":["../../../src/domain/method-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1D,OAAO,KAAK,EAAgB,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAKpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAI5C,MAAM,MAAM,iBAAiB,GACzB;IACE,IAAI,EAAE,YAAY,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,GACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB,GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,SAAS,EAAE,CAAA;CAAE,CAAA;AAE/D,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,aAAa,CAAA;IACrB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAA;IAChB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,UAAU,EAAE,KAAK,GAAG,MAAM,CAAA;IAC1B,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,EAAE,UAAU,CAAA;IACtB,iFAAiF;IACjF,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,MAAM,CAAA;CACzB,CAAA;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,sBAAsB,EAC7B,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAgD/C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pushed Authorization Requests (RFC 9126).
|
|
3
|
+
*
|
|
4
|
+
* The RP submits the full `/authorize` parameter set to `POST /par` along
|
|
5
|
+
* with its client credentials. The OP authenticates the client, stores
|
|
6
|
+
* the payload under an opaque `request_uri`, and returns it with an
|
|
7
|
+
* `expires_in`. The RP then redirects the user-agent to
|
|
8
|
+
* `GET /authorize?client_id=...&request_uri=...` and the OP rehydrates
|
|
9
|
+
* the original parameter set.
|
|
10
|
+
*
|
|
11
|
+
* Per RFC 9126 §3:
|
|
12
|
+
* - Response is HTTP 201 with `application/json` body
|
|
13
|
+
* `{request_uri, expires_in}`.
|
|
14
|
+
* - `request_uri` MUST be of the form
|
|
15
|
+
* `urn:ietf:params:oauth:request_uri:<opaque>` (§2.2).
|
|
16
|
+
* - Default TTL is 60 seconds — same as auth-code TTL.
|
|
17
|
+
*
|
|
18
|
+
* Per RFC 9126 §4:
|
|
19
|
+
* - At `/authorize`, `request_uri` is one-shot — consumed and discarded
|
|
20
|
+
* on first use.
|
|
21
|
+
* - Parameters in the PAR record take precedence; additional `/authorize`
|
|
22
|
+
* parameters MAY be merged but MUST NOT contradict (we strictly use
|
|
23
|
+
* the PAR'd set and ignore any additional ones except `client_id`).
|
|
24
|
+
*
|
|
25
|
+
* Client authentication (§2):
|
|
26
|
+
* - Public clients: `client_id` only.
|
|
27
|
+
* - Confidential clients: `client_id` + `client_secret` (Basic or form).
|
|
28
|
+
*/
|
|
29
|
+
import type { AuditLog } from "../ports/audit-log";
|
|
30
|
+
import type { ConfigStore } from "../ports/config-store";
|
|
31
|
+
import type { SessionStore } from "../ports/session-store";
|
|
32
|
+
import { type AuthError } from "../types/error";
|
|
33
|
+
import type { Result } from "../types/result";
|
|
34
|
+
import type { TenantContext } from "../types/tenant";
|
|
35
|
+
export declare const PAR_URI_PREFIX = "urn:ietf:params:oauth:request_uri:";
|
|
36
|
+
export declare const DEFAULT_PAR_TTL_MS: number;
|
|
37
|
+
export type ParRequest = {
|
|
38
|
+
clientId: string;
|
|
39
|
+
/** Confidential-client secret. */
|
|
40
|
+
clientSecret?: string;
|
|
41
|
+
/** Raw `/authorize` parameter record, posted by the RP. */
|
|
42
|
+
params: Record<string, string>;
|
|
43
|
+
};
|
|
44
|
+
export type ParResponse = {
|
|
45
|
+
request_uri: string;
|
|
46
|
+
expires_in: number;
|
|
47
|
+
};
|
|
48
|
+
export type ParDeps = {
|
|
49
|
+
configStore: ConfigStore;
|
|
50
|
+
sessionStore: SessionStore;
|
|
51
|
+
auditLog?: AuditLog;
|
|
52
|
+
clock: () => number;
|
|
53
|
+
/** Test override. */
|
|
54
|
+
newRequestUriSuffix?: () => string;
|
|
55
|
+
ttlMs?: number;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Process a `POST /par` request. Authenticates the client, validates the
|
|
59
|
+
* `client_id` consistency, and persists the parameter set.
|
|
60
|
+
*/
|
|
61
|
+
export declare function pushAuthorizationRequest(req: ParRequest, tenant: TenantContext, deps: ParDeps): Promise<Result<ParResponse, AuthError>>;
|
|
62
|
+
//# sourceMappingURL=par.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"par.d.ts","sourceRoot":"","sources":["../../../src/domain/par.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAKpD,eAAO,MAAM,cAAc,uCAAuC,CAAA;AAClE,eAAO,MAAM,kBAAkB,QAAY,CAAA;AAE3C,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,YAAY,CAAA;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,MAAM,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAmEzC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute the S256 challenge for a verifier. Used at `/token` to recompute
|
|
3
|
+
* the expected challenge from the supplied `code_verifier` and compare it
|
|
4
|
+
* (timing-safe) against the challenge stashed in the auth-code payload.
|
|
5
|
+
*/
|
|
6
|
+
export declare function s256Challenge(verifier: string): Promise<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Verify a `code_verifier` against a previously-stored `code_challenge`.
|
|
9
|
+
*
|
|
10
|
+
* - Returns `false` on any length / character anomaly without computing the
|
|
11
|
+
* hash — these are public-shape checks, not secret-dependent.
|
|
12
|
+
* - Uses a constant-time compare for the recomputed challenge.
|
|
13
|
+
*/
|
|
14
|
+
export declare function validatePkce(verifier: string, challenge: string): Promise<boolean>;
|
|
15
|
+
//# sourceMappingURL=pkce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../../src/domain/pkce.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/token` endpoint logic for `grant_type=refresh_token`.
|
|
3
|
+
*
|
|
4
|
+
* Rotation semantics (plan §"Cross-cutting Decisions" + §"Port consistency
|
|
5
|
+
* contracts"):
|
|
6
|
+
*
|
|
7
|
+
* - Refresh tokens rotate on every use. The presented token is consumed
|
|
8
|
+
* (CAS); a fresh refresh token is issued, keyed by the same `family`.
|
|
9
|
+
* - If the same token is presented a second time within the reuse window
|
|
10
|
+
* (default 60 s), the family is revoked and the request is rejected
|
|
11
|
+
* with `invalid_grant`. Audit: `refresh_reuse_detected`.
|
|
12
|
+
* - Outside the reuse window the row should be GC'd; presentation
|
|
13
|
+
* returns `invalid_grant` ("unknown token").
|
|
14
|
+
*/
|
|
15
|
+
import type { AuditLog } from "../ports/audit-log";
|
|
16
|
+
import type { ConfigStore } from "../ports/config-store";
|
|
17
|
+
import type { KeyStore } from "../ports/key-store";
|
|
18
|
+
import type { TokenStore } from "../ports/token-store";
|
|
19
|
+
import { type AuthError } from "../types/error";
|
|
20
|
+
import type { Result } from "../types/result";
|
|
21
|
+
import type { TokenResponse } from "../types/token";
|
|
22
|
+
export type RefreshGrantRequest = {
|
|
23
|
+
grantType: "refresh_token";
|
|
24
|
+
refreshToken: string;
|
|
25
|
+
/** Optional per RFC 6749 — narrow scope. If absent, original scopes are reused. */
|
|
26
|
+
scope?: string;
|
|
27
|
+
/** Confidential clients authenticate at /token. */
|
|
28
|
+
clientId?: string;
|
|
29
|
+
clientSecret?: string;
|
|
30
|
+
/**
|
|
31
|
+
* RFC 9449 §6 — JWK thumbprint of the DPoP proof presented on this
|
|
32
|
+
* refresh request. MUST match `RefreshTokenPayload.dpopJkt` when the
|
|
33
|
+
* original grant was DPoP-bound; presence is REQUIRED for bound
|
|
34
|
+
* tokens, OPTIONAL otherwise.
|
|
35
|
+
*/
|
|
36
|
+
dpopJkt?: string;
|
|
37
|
+
};
|
|
38
|
+
export type RefreshTokensDeps = {
|
|
39
|
+
configStore: ConfigStore;
|
|
40
|
+
tokenStore: TokenStore;
|
|
41
|
+
keyStore: KeyStore;
|
|
42
|
+
auditLog?: AuditLog;
|
|
43
|
+
issuerUrl: string;
|
|
44
|
+
clock: () => number;
|
|
45
|
+
/** Reuse-detection window (ms). Default 60 s. */
|
|
46
|
+
reuseWindowMs?: number;
|
|
47
|
+
newRefreshToken?: () => string;
|
|
48
|
+
/** See `IdPOptions.customScopeClaims`. Forwarded to `mintTokens`. */
|
|
49
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>;
|
|
50
|
+
};
|
|
51
|
+
export declare function refreshTokens(req: RefreshGrantRequest, deps: RefreshTokensDeps): Promise<Result<TokenResponse, AuthError>>;
|
|
52
|
+
//# sourceMappingURL=refresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["../../../src/domain/refresh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAG7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAMnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,eAAe,CAAA;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;IAC9B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1D,CAAA;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAmJ3C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic Client Registration (RFC 7591).
|
|
3
|
+
*
|
|
4
|
+
* The host owns persistence — this module validates the wire request,
|
|
5
|
+
* mints a fresh `client_id` (and `client_secret` for confidential
|
|
6
|
+
* clients), invokes the host's `registerClient` hook with a structured
|
|
7
|
+
* `ClientConfig`, and builds the §3.2.1 response.
|
|
8
|
+
*
|
|
9
|
+
* Per RFC 7591:
|
|
10
|
+
* - §2: registration request body is JSON, fields include
|
|
11
|
+
* `client_name`, `redirect_uris`, `grant_types`, `response_types`,
|
|
12
|
+
* `token_endpoint_auth_method`, `scope`, etc.
|
|
13
|
+
* - §3.2.1: response is JSON with `client_id`, optional
|
|
14
|
+
* `client_secret`, `client_id_issued_at`, optional
|
|
15
|
+
* `client_secret_expires_at`, and the registered metadata.
|
|
16
|
+
* - §3.2.2: structural problems → `invalid_client_metadata` /
|
|
17
|
+
* `invalid_redirect_uri`. We collapse to `invalid_request` for
|
|
18
|
+
* consistency with the rest of the library's error mapping.
|
|
19
|
+
*/
|
|
20
|
+
import { type AuthError } from "../types/error";
|
|
21
|
+
import type { RegisterClient, RegisterClientRequest, RegisterClientResponse } from "../types/idp";
|
|
22
|
+
import type { Result } from "../types/result";
|
|
23
|
+
import type { TenantContext } from "../types/tenant";
|
|
24
|
+
export type RegisterDeps = {
|
|
25
|
+
registerClient?: RegisterClient;
|
|
26
|
+
clock: () => number;
|
|
27
|
+
/** Test override for deterministic client_id. */
|
|
28
|
+
newClientId?: () => string;
|
|
29
|
+
/** Test override for deterministic client_secret. */
|
|
30
|
+
newClientSecret?: () => string;
|
|
31
|
+
};
|
|
32
|
+
export declare function registerNewClient(request: RegisterClientRequest, tenant: TenantContext, deps: RegisterDeps): Promise<Result<RegisterClientResponse, AuthError>>;
|
|
33
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/domain/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAKpD,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAC1B,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;CAC/B,CAAA;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC,CA0HpD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/revoke` endpoint logic (RFC 7009).
|
|
3
|
+
*
|
|
4
|
+
* Access tokens are stateless JWTs in this IdP; revocation has to wait
|
|
5
|
+
* for natural expiry. `tokenTypeHint: "access_token"` resolves to a
|
|
6
|
+
* no-op per RFC 7009 §2.2 (invalid hint is ignored).
|
|
7
|
+
*
|
|
8
|
+
* Refresh tokens are server-side state. RFC 7009 §2.2 requires the
|
|
9
|
+
* authorization server to verify that the presented token was issued to
|
|
10
|
+
* the authenticated client and refuse otherwise. We implement this via
|
|
11
|
+
* `peekRefresh` (non-destructive) → ownership check → `consumeRefresh`
|
|
12
|
+
* (destructive). The peek/consume race is benign: if a concurrent caller
|
|
13
|
+
* consumes the token in between, our consume returns `invalid_grant`,
|
|
14
|
+
* which RFC 7009 §2.2 says we treat as a successful no-op.
|
|
15
|
+
*
|
|
16
|
+
* Anonymous revoke (no `client_id`) is permitted only for tokens issued
|
|
17
|
+
* to public clients. Confidential-client tokens MUST authenticate per
|
|
18
|
+
* RFC 7009 §2.1.
|
|
19
|
+
*/
|
|
20
|
+
import type { AuditLog } from "../ports/audit-log";
|
|
21
|
+
import type { ConfigStore } from "../ports/config-store";
|
|
22
|
+
import type { TokenStore } from "../ports/token-store";
|
|
23
|
+
import type { AuthError } from "../types/error";
|
|
24
|
+
import type { Result } from "../types/result";
|
|
25
|
+
import type { TenantId } from "../types/tenant";
|
|
26
|
+
export type RevokeRequest = {
|
|
27
|
+
token: string;
|
|
28
|
+
/** RFC 7009 hint: `"access_token"` or `"refresh_token"`. */
|
|
29
|
+
tokenTypeHint?: "access_token" | "refresh_token";
|
|
30
|
+
/** Optional — required when revoking a confidential client's token. */
|
|
31
|
+
clientId?: string;
|
|
32
|
+
clientSecret?: string;
|
|
33
|
+
};
|
|
34
|
+
export type RevokeDeps = {
|
|
35
|
+
tokenStore: TokenStore;
|
|
36
|
+
configStore: ConfigStore;
|
|
37
|
+
auditLog?: AuditLog;
|
|
38
|
+
clock: () => number;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Revoke a single refresh token. Anonymous revokes are accepted for
|
|
42
|
+
* public-client tokens; confidential-client tokens require valid
|
|
43
|
+
* credentials.
|
|
44
|
+
*/
|
|
45
|
+
export declare function revokeToken(req: RevokeRequest, deps: RevokeDeps): Promise<Result<void, AuthError>>;
|
|
46
|
+
/**
|
|
47
|
+
* Revoke every refresh token for a `(tenantId, subjectId)` pair and emit
|
|
48
|
+
* a `token_revoked` audit event with `reason: "subject_revoke"`.
|
|
49
|
+
*
|
|
50
|
+
* Public primitive exposed for host-driven "log me out of all devices"
|
|
51
|
+
* flows. Not called from the reuse-detection path — that stays at
|
|
52
|
+
* family-scope per OAuth 2.0 Security BCP §4.13.2 (revoking sibling
|
|
53
|
+
* families would punish legitimate other-device sessions sharing the
|
|
54
|
+
* same subject). See ARCHITECTURE.md §"Reuse detection scope".
|
|
55
|
+
*/
|
|
56
|
+
export declare function revokeAllForSubject(tenantId: TenantId, subjectId: string, deps: {
|
|
57
|
+
tokenStore: TokenStore;
|
|
58
|
+
auditLog?: AuditLog;
|
|
59
|
+
clock: () => number;
|
|
60
|
+
}): Promise<Result<void, AuthError>>;
|
|
61
|
+
//# sourceMappingURL=revoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../../src/domain/revoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAK/C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,aAAa,CAAC,EAAE,cAAc,GAAG,eAAe,CAAA;IAChD,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,KAAK,EAAE,MAAM,MAAM,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CA6ElC;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAYlC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MAC-signed `state` envelope used by the tenant-recovery chain.
|
|
3
|
+
*
|
|
4
|
+
* Format (intentionally compact, well under 256 base64url bytes):
|
|
5
|
+
*
|
|
6
|
+
* `<b64u(payloadJson)>.<b64u(hmacSha256(payloadJson, key[kid]))>`
|
|
7
|
+
*
|
|
8
|
+
* where `payloadJson` is canonical JSON over `{tenantId, flowId, nonce, kid}`.
|
|
9
|
+
*
|
|
10
|
+
* **Nothing sensitive is in the envelope** — only the minimal recovery
|
|
11
|
+
* tuple. Sensitive data (`clientPkce`, `appRedirectUri`, scopes, etc.)
|
|
12
|
+
* lives in the server-side `FlowRecord`, identified by `flowId`.
|
|
13
|
+
*
|
|
14
|
+
* See `ARCHITECTURE.md` §"Tenant recovery across redirects" and plan
|
|
15
|
+
* §"Crypto — HMAC-SHA-256".
|
|
16
|
+
*/
|
|
17
|
+
import { type AuthError } from "../types/error";
|
|
18
|
+
import type { Result } from "../types/result";
|
|
19
|
+
import type { StateEnvelope, StateKeyRing } from "../types/tenant";
|
|
20
|
+
/** Mint a signed state string for the given envelope under the active key. */
|
|
21
|
+
export declare function mintStateEnvelope(envelope: Omit<StateEnvelope, "kid">, keyRing: StateKeyRing): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Verify and parse a state string. Returns `unknown_state` on malformed
|
|
24
|
+
* input, unknown `kid`, or signature mismatch.
|
|
25
|
+
*
|
|
26
|
+
* The MAC verification step uses `crypto.subtle.verify`, which is
|
|
27
|
+
* timing-safe by spec.
|
|
28
|
+
*/
|
|
29
|
+
export declare function verifyStateEnvelope(state: string, keyRing: StateKeyRing): Promise<Result<StateEnvelope, AuthError>>;
|
|
30
|
+
//# sourceMappingURL=state-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-envelope.d.ts","sourceRoot":"","sources":["../../../src/domain/state-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EACV,aAAa,EAEb,YAAY,EAEb,MAAM,iBAAiB,CAAA;AAkBxB,8EAA8E;AAC9E,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EACpC,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAsD3C"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/token` logic for `grant_type=urn:ietf:params:oauth:grant-type:token-exchange`
|
|
3
|
+
* (RFC 8693).
|
|
4
|
+
*
|
|
5
|
+
* Scope: **audience-switch / impersonation only.** A subject who holds an
|
|
6
|
+
* access token for tenant A can present it here to receive a fresh
|
|
7
|
+
* access + refresh pair scoped to tenant B (the `audience` parameter).
|
|
8
|
+
* Delegation (`actor_token`) is rejected at the HTTP layer.
|
|
9
|
+
*
|
|
10
|
+
* Flow:
|
|
11
|
+
* 1. Verify the `subject_token` JWT against the IdP's own signing keys.
|
|
12
|
+
* Expired / wrong-issuer / bad-sig tokens fail with `invalid_grant`
|
|
13
|
+
* (per RFC 8693 §2.4).
|
|
14
|
+
* 2. Refuse if the host hasn't configured `exchangeAudience` — return
|
|
15
|
+
* `unsupported_grant_type` for graceful degradation.
|
|
16
|
+
* 3. Narrow scope if the caller requested a subset.
|
|
17
|
+
* 4. Call `exchangeAudience(currentClaim, request)`. The host returns
|
|
18
|
+
* either the SubjectClaim that should anchor the new tokens at the
|
|
19
|
+
* target tenant, or an `AuthError` (typically `invalid_target`).
|
|
20
|
+
* 5. Load the target tenant config via `ConfigStore.getTenantConfig`.
|
|
21
|
+
* This validates that the audience is a real partition.
|
|
22
|
+
* 6. Mint a fresh access + refresh pair with `tid = audience` and a
|
|
23
|
+
* brand-new refresh family. The previous family lives untouched.
|
|
24
|
+
* 7. Audit `token_exchanged`.
|
|
25
|
+
*
|
|
26
|
+
* Notes:
|
|
27
|
+
* - The new tokens' `clientId` is the **authenticated** client (the
|
|
28
|
+
* one doing the exchange), not the original audience of the
|
|
29
|
+
* subject_token. Hosts that need a different client must register
|
|
30
|
+
* one in the target tenant.
|
|
31
|
+
* - `methodId` / `methodKind` are preserved from the subject_token so
|
|
32
|
+
* the audit trail still names the original authentication method.
|
|
33
|
+
*/
|
|
34
|
+
import type { AuditLog } from "../ports/audit-log";
|
|
35
|
+
import type { ConfigStore } from "../ports/config-store";
|
|
36
|
+
import type { KeyStore } from "../ports/key-store";
|
|
37
|
+
import type { TokenStore } from "../ports/token-store";
|
|
38
|
+
import { type AuthError } from "../types/error";
|
|
39
|
+
import type { ExchangeAudience } from "../types/idp";
|
|
40
|
+
import type { Result } from "../types/result";
|
|
41
|
+
import type { TokenResponse } from "../types/token";
|
|
42
|
+
export type TokenExchangeRequest = {
|
|
43
|
+
grantType: "urn:ietf:params:oauth:grant-type:token-exchange";
|
|
44
|
+
subjectToken: string;
|
|
45
|
+
audience: string;
|
|
46
|
+
/** Confidential clients authenticate. Public clients use the subject_token alone. */
|
|
47
|
+
clientId?: string;
|
|
48
|
+
clientSecret?: string;
|
|
49
|
+
/** Optional subset of subject_token scopes. */
|
|
50
|
+
scope?: string;
|
|
51
|
+
};
|
|
52
|
+
export type TokenExchangeResponse = TokenResponse & {
|
|
53
|
+
/** RFC 8693 §2.2.1. Always `access_token` for this grant. */
|
|
54
|
+
issued_token_type: "urn:ietf:params:oauth:token-type:access_token";
|
|
55
|
+
};
|
|
56
|
+
export type ExchangeTokenDeps = {
|
|
57
|
+
configStore: ConfigStore;
|
|
58
|
+
tokenStore: TokenStore;
|
|
59
|
+
keyStore: KeyStore;
|
|
60
|
+
auditLog?: AuditLog;
|
|
61
|
+
exchangeAudience?: ExchangeAudience;
|
|
62
|
+
issuerUrl: string;
|
|
63
|
+
clock: () => number;
|
|
64
|
+
newRefreshFamily?: () => string;
|
|
65
|
+
/** See `IdPOptions.customScopeClaims`. Forwarded to `mintTokens`. */
|
|
66
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>;
|
|
67
|
+
};
|
|
68
|
+
export declare function exchangeToken(req: TokenExchangeRequest, deps: ExchangeTokenDeps): Promise<Result<TokenExchangeResponse, AuthError>>;
|
|
69
|
+
//# sourceMappingURL=token-exchange.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-exchange.d.ts","sourceRoot":"","sources":["../../../src/domain/token-exchange.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAI7C,OAAO,KAAK,EAAqB,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAQtE,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,iDAAiD,CAAA;IAC5D,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,6DAA6D;IAC7D,iBAAiB,EAAE,+CAA+C,CAAA;CACnE,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAA;IAC/B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1D,CAAA;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,oBAAoB,EACzB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,CA+JnD"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/token` endpoint logic for `grant_type=authorization_code`.
|
|
3
|
+
*
|
|
4
|
+
* Steps:
|
|
5
|
+
* 1. Authenticate client (public: id only; confidential: id + secret).
|
|
6
|
+
* 2. `TokenStore.consumeCode(code)` — strong CAS; returns the decrypted
|
|
7
|
+
* `CodePayload`.
|
|
8
|
+
* 3. Verify the consumed code matches the request (`client_id`,
|
|
9
|
+
* `redirect_uri`). Any mismatch → `invalid_grant`.
|
|
10
|
+
* 4. Verify PKCE if the code carries a `clientPkce` (RP→IdP PKCE).
|
|
11
|
+
* 5. Call the user's `success` callback with `SuccessMapInput` to mint
|
|
12
|
+
* the `SubjectClaim` — the same role the legacy `auth.success`
|
|
13
|
+
* callback plays in `issuer.ts`.
|
|
14
|
+
* 6. (Optional) `persistUpstreamTokens` hook — runs here, not at
|
|
15
|
+
* callback time, so failed exchanges don't pollute the secrets store.
|
|
16
|
+
* 7. Mint access (JWT, ES256) + refresh (random opaque) tokens, save
|
|
17
|
+
* refresh, audit `token_issued`.
|
|
18
|
+
*
|
|
19
|
+
* Refresh-grant logic lives in `./refresh.ts`. Revocation in `./revoke.ts`.
|
|
20
|
+
*/
|
|
21
|
+
import type { AuditLog } from "../ports/audit-log";
|
|
22
|
+
import type { KeyStore } from "../ports/key-store";
|
|
23
|
+
import type { TokenStore } from "../ports/token-store";
|
|
24
|
+
import type { ConfigStore } from "../ports/config-store";
|
|
25
|
+
import type { AuthError } from "../types/error";
|
|
26
|
+
import type { PersistUpstreamTokens, SuccessMapInput } from "../types/idp";
|
|
27
|
+
import type { Result } from "../types/result";
|
|
28
|
+
import type { SubjectClaim } from "../types/subject";
|
|
29
|
+
import type { TenantContext } from "../types/tenant";
|
|
30
|
+
import type { CodePayload, TokenResponse } from "../types/token";
|
|
31
|
+
/**
|
|
32
|
+
* Encrypt a `CodePayload` with the active `KeyStore` encryption key and
|
|
33
|
+
* persist it via `tokenStore.saveCode`. Centralizes the encrypt-then-store
|
|
34
|
+
* pattern so adapters never see plaintext (M1).
|
|
35
|
+
*/
|
|
36
|
+
export declare function saveEncryptedCode(code: string, payload: CodePayload, ttl: number, deps: {
|
|
37
|
+
keyStore: KeyStore;
|
|
38
|
+
tokenStore: TokenStore;
|
|
39
|
+
}): Promise<Result<void, AuthError>>;
|
|
40
|
+
export declare const DEFAULT_ACCESS_TTL_MS: number;
|
|
41
|
+
export declare const DEFAULT_REFRESH_TTL_MS: number;
|
|
42
|
+
export type TokenAuthCodeRequest = {
|
|
43
|
+
grantType: "authorization_code";
|
|
44
|
+
code: string;
|
|
45
|
+
redirectUri: string;
|
|
46
|
+
clientId: string;
|
|
47
|
+
/** Confidential clients only. */
|
|
48
|
+
clientSecret?: string;
|
|
49
|
+
/** Required if the original `/authorize` request had a `code_challenge`. */
|
|
50
|
+
codeVerifier?: string;
|
|
51
|
+
/**
|
|
52
|
+
* RFC 9449 §6 — the JWK thumbprint of the presented DPoP proof. Set by
|
|
53
|
+
* the HTTP layer after verifying the `DPoP:` header against this
|
|
54
|
+
* request's actual method + URI. The domain binds the issued access
|
|
55
|
+
* token to this thumbprint via `cnf.jkt`.
|
|
56
|
+
*/
|
|
57
|
+
dpopJkt?: string;
|
|
58
|
+
};
|
|
59
|
+
export type ExchangeCodeDeps = {
|
|
60
|
+
configStore: ConfigStore;
|
|
61
|
+
tokenStore: TokenStore;
|
|
62
|
+
keyStore: KeyStore;
|
|
63
|
+
auditLog?: AuditLog;
|
|
64
|
+
success: (input: SuccessMapInput) => Promise<SubjectClaim>;
|
|
65
|
+
persistUpstreamTokens?: PersistUpstreamTokens;
|
|
66
|
+
issuerUrl: string;
|
|
67
|
+
clock: () => number;
|
|
68
|
+
newRefreshToken?: () => string;
|
|
69
|
+
/** Test override. */
|
|
70
|
+
newRefreshFamily?: () => string;
|
|
71
|
+
/**
|
|
72
|
+
* Host-supplied vendor scope → claim-names map. Forwarded to `mintTokens`
|
|
73
|
+
* for id_token + /userinfo scope-gating. See `IdPOptions.customScopeClaims`.
|
|
74
|
+
*/
|
|
75
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>;
|
|
76
|
+
};
|
|
77
|
+
export declare function exchangeCode(req: TokenAuthCodeRequest, deps: ExchangeCodeDeps): Promise<Result<TokenResponse, AuthError>>;
|
|
78
|
+
/**
|
|
79
|
+
* Shared mint logic used by both `exchangeCode` and `refreshTokens` (which
|
|
80
|
+
* passes its previous `family` through to preserve the rotation chain).
|
|
81
|
+
*/
|
|
82
|
+
export declare function mintTokens(args: {
|
|
83
|
+
tenant: TenantContext;
|
|
84
|
+
claim: SubjectClaim;
|
|
85
|
+
payload: Pick<CodePayload, "tenantId" | "clientId" | "methodId" | "methodKind" | "scopes" | "audience"> & {
|
|
86
|
+
/**
|
|
87
|
+
* Present on `authorization_code` and `refresh_token` grants where an
|
|
88
|
+
* end-user actually authenticated. Absent on `client_credentials`
|
|
89
|
+
* (no end-user) — and absent means no `id_token` is emitted even if
|
|
90
|
+
* the requested scopes nominally include `openid`.
|
|
91
|
+
*/
|
|
92
|
+
authTime?: number;
|
|
93
|
+
/** RP's OIDC `nonce` from `/authorize`, when present. */
|
|
94
|
+
appNonce?: string;
|
|
95
|
+
/**
|
|
96
|
+
* DPoP key thumbprint (RFC 9449 §6.1). When present, the access
|
|
97
|
+
* token's `cnf.jkt` claim is set and `token_type` flips to `"DPoP"`;
|
|
98
|
+
* the saved refresh-token payload's `dpopJkt` is set so refresh
|
|
99
|
+
* rotation re-enforces sender constraint.
|
|
100
|
+
*/
|
|
101
|
+
dpopJkt?: string;
|
|
102
|
+
/**
|
|
103
|
+
* OIDC Core §5.5 — RP-requested claims from `/authorize`. Carried
|
|
104
|
+
* into the id_token and forward across refresh rotations (§12) so
|
|
105
|
+
* later /userinfo calls keep returning the requested fields.
|
|
106
|
+
*/
|
|
107
|
+
claimsRequest?: import("../types/authorization").ClaimsRequest;
|
|
108
|
+
};
|
|
109
|
+
family: string;
|
|
110
|
+
/**
|
|
111
|
+
* `client_credentials` grants (RFC 6749 §4.4.3) and other paths where a
|
|
112
|
+
* refresh token is not appropriate set `skipRefresh: true`. The response
|
|
113
|
+
* then omits `refresh_token` and **no row is written** to `TokenStore`,
|
|
114
|
+
* so the durable store doesn't accumulate orphaned refresh entries that
|
|
115
|
+
* the response strips and discards.
|
|
116
|
+
*/
|
|
117
|
+
skipRefresh?: boolean;
|
|
118
|
+
deps: {
|
|
119
|
+
keyStore: KeyStore;
|
|
120
|
+
tokenStore: TokenStore;
|
|
121
|
+
auditLog?: AuditLog;
|
|
122
|
+
issuerUrl: string;
|
|
123
|
+
clock: () => number;
|
|
124
|
+
newRefreshToken?: () => string;
|
|
125
|
+
/**
|
|
126
|
+
* Host-supplied vendor scope → claim-names map merged into the
|
|
127
|
+
* id_token + /userinfo scope-gating. See `IdPOptions.customScopeClaims`.
|
|
128
|
+
*/
|
|
129
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>;
|
|
130
|
+
};
|
|
131
|
+
}): Promise<Result<TokenResponse, AuthError>>;
|
|
132
|
+
/**
|
|
133
|
+
* Phase 2 client-secret hash format: SHA-256 over UTF-8 bytes, base64url.
|
|
134
|
+
*
|
|
135
|
+
* Production deployments will move to argon2id (per cross-cutting
|
|
136
|
+
* decisions) in Phase 8. The storage shape (`ClientConfig.secretHash:
|
|
137
|
+
* string`) is unchanged; only the hashing function swaps.
|
|
138
|
+
*/
|
|
139
|
+
export declare function hashClientSecret(plain: string): Promise<string>;
|
|
140
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/domain/token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAEV,WAAW,EAEX,aAAa,EACd,MAAM,gBAAgB,CAAA;AAiBvB;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACnD,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAclC;AAED,eAAO,MAAM,qBAAqB,QAAiB,CAAA;AACnD,eAAO,MAAM,sBAAsB,QAA2B,CAAA;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,oBAAoB,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1D,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;IAC9B,qBAAqB;IACrB,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAA;IAC/B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1D,CAAA;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,oBAAoB,EACzB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAkH3C;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,IAAI,CACX,WAAW,EACX,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAC5E,GAAG;QACF;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,yDAAyD;QACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB;;;;;WAKG;QACH,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB;;;;WAIG;QACH,aAAa,CAAC,EAAE,OAAO,wBAAwB,EAAE,aAAa,CAAA;KAC/D,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ,CAAA;QAClB,UAAU,EAAE,UAAU,CAAA;QACtB,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,KAAK,EAAE,MAAM,MAAM,CAAA;QACnB,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;QAC9B;;;WAGG;QACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;KAC1D,CAAA;CACF,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CA8I5C;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/userinfo` endpoint logic (OIDC Core §5.3). Verifies the presented
|
|
3
|
+
* access token, optionally enforces a DPoP proof binding (RFC 9449 §7),
|
|
4
|
+
* and returns the inlined `SubjectClaim` claims, scope-gated per OIDC
|
|
5
|
+
* Core §5.4.
|
|
6
|
+
*
|
|
7
|
+
* Profile / email / phone / address claims appear in the response only
|
|
8
|
+
* when (a) the access token's `scope` includes the granting scope and
|
|
9
|
+
* (b) the value exists on `SubjectClaim.properties`. Other properties
|
|
10
|
+
* (host-specific subject fields like `userId`, `roles`, …) are returned
|
|
11
|
+
* under `properties` and not subject to OIDC scope gating — they're
|
|
12
|
+
* outside §5.4's universe.
|
|
13
|
+
*
|
|
14
|
+
* DPoP at the resource server (RFC 9449 §7):
|
|
15
|
+
* - If the access token has a `cnf.jkt` claim, the request MUST carry a
|
|
16
|
+
* matching `DPoP:` proof whose `ath` equals SHA-256(access_token).
|
|
17
|
+
* - If no `cnf.jkt`, the access token is plain Bearer and any DPoP
|
|
18
|
+
* proof is silently ignored at this layer (host can still enforce).
|
|
19
|
+
*/
|
|
20
|
+
import type { TokenStore } from "../ports/token-store";
|
|
21
|
+
import type { KeyStore } from "../ports/key-store";
|
|
22
|
+
import { type AuthError } from "../types/error";
|
|
23
|
+
import type { Result } from "../types/result";
|
|
24
|
+
import type { ScopedProfileClaims } from "../types/token";
|
|
25
|
+
export type UserinfoResponse = ScopedProfileClaims & {
|
|
26
|
+
sub: string;
|
|
27
|
+
/** Subject type discriminator (e.g. `"user"` / `"admin"`). */
|
|
28
|
+
subject_type: string;
|
|
29
|
+
/** Inlined claim properties, host-specific and not gated by OIDC scope. */
|
|
30
|
+
properties: Record<string, unknown>;
|
|
31
|
+
/** Scope granted to this access token. */
|
|
32
|
+
scope?: string;
|
|
33
|
+
};
|
|
34
|
+
export type UserinfoDeps = {
|
|
35
|
+
keyStore: KeyStore;
|
|
36
|
+
/** Required when DPoP-bound tokens are accepted. */
|
|
37
|
+
tokenStore?: TokenStore;
|
|
38
|
+
issuerUrl?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Host-supplied vendor scope → claim-names map. Merged into the
|
|
41
|
+
* scope-gated /userinfo response just as it is for id_token. See
|
|
42
|
+
* `IdPOptions.customScopeClaims`.
|
|
43
|
+
*/
|
|
44
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>;
|
|
45
|
+
};
|
|
46
|
+
export type UserinfoInput = {
|
|
47
|
+
/** Access token from `Authorization: Bearer ...` or `Authorization: DPoP ...`. */
|
|
48
|
+
accessToken: string;
|
|
49
|
+
/** `Authorization`-scheme as presented. Defaults to `"Bearer"`. */
|
|
50
|
+
scheme?: "Bearer" | "DPoP";
|
|
51
|
+
/** Raw `DPoP:` header from the request, if any. */
|
|
52
|
+
dpopProof?: string;
|
|
53
|
+
/** Canonical request URI for DPoP `htu` check (scheme + host + path). */
|
|
54
|
+
htu?: string;
|
|
55
|
+
/** Request method for DPoP `htm` check, uppercase. */
|
|
56
|
+
htm?: string;
|
|
57
|
+
/** Wall clock seconds for DPoP `iat` window. */
|
|
58
|
+
nowSec?: number;
|
|
59
|
+
};
|
|
60
|
+
export declare function userinfo(input: UserinfoInput, deps: UserinfoDeps): Promise<Result<UserinfoResponse, AuthError>>;
|
|
61
|
+
//# sourceMappingURL=userinfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userinfo.d.ts","sourceRoot":"","sources":["../../../src/domain/userinfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAQ7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzD,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,QAAQ,CAAA;IAClB,oDAAoD;IACpD,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;CAC1D,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAA;IACnB,mEAAmE;IACnE,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAA;IAC1B,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAiG9C"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared deps + per-request context for the HTTP layer.
|
|
3
|
+
*
|
|
4
|
+
* `HttpDeps` is constructed once by `createIdP` and threaded through every
|
|
5
|
+
* handler. `HttpVars` is the per-request Hono-variable shape: tenant
|
|
6
|
+
* resolution, parsed cookies, optional recovery info from the callback chain.
|
|
7
|
+
*/
|
|
8
|
+
import type { Context } from "hono";
|
|
9
|
+
import type { AuditLog } from "../ports/audit-log";
|
|
10
|
+
import type { ConfigStore } from "../ports/config-store";
|
|
11
|
+
import type { KeyStore } from "../ports/key-store";
|
|
12
|
+
import type { MethodStore } from "../ports/method-store";
|
|
13
|
+
import type { SessionStore } from "../ports/session-store";
|
|
14
|
+
import type { TokenStore } from "../ports/token-store";
|
|
15
|
+
import type { MethodCache } from "../domain/method-cache";
|
|
16
|
+
import type { AuthError } from "../types/error";
|
|
17
|
+
import type { ExchangeAudience, PersistUpstreamTokens, RegisterClient, RenderPicker, SuccessMapInput } from "../types/idp";
|
|
18
|
+
import type { Result } from "../types/result";
|
|
19
|
+
import type { SubjectClaim } from "../types/subject";
|
|
20
|
+
import type { StateKeyRing, TenantContext, TenantId, TenantRecovery } from "../types/tenant";
|
|
21
|
+
import type { CookieDefaults } from "./cookies";
|
|
22
|
+
/** Long-lived deps the HTTP layer shares across requests. */
|
|
23
|
+
export type HttpDeps = {
|
|
24
|
+
configStore: ConfigStore;
|
|
25
|
+
tokenStore: TokenStore;
|
|
26
|
+
sessionStore: SessionStore;
|
|
27
|
+
keyStore: KeyStore;
|
|
28
|
+
methodStore?: MethodStore;
|
|
29
|
+
auditLog?: AuditLog;
|
|
30
|
+
methodCache: MethodCache;
|
|
31
|
+
stateKeys: StateKeyRing;
|
|
32
|
+
/** Resolves the issuer URL — string or per-request function. */
|
|
33
|
+
resolveIssuer: (req: Request) => string;
|
|
34
|
+
/** Optional partitioned-host helper (recovery #2). */
|
|
35
|
+
callbackHostFor?: (tenantId: TenantId) => string;
|
|
36
|
+
resolveTenant: (req: Request) => Promise<Result<TenantId, AuthError>>;
|
|
37
|
+
success: (input: SuccessMapInput) => Promise<SubjectClaim>;
|
|
38
|
+
persistUpstreamTokens?: PersistUpstreamTokens;
|
|
39
|
+
exchangeAudience?: ExchangeAudience;
|
|
40
|
+
renderPicker?: RenderPicker;
|
|
41
|
+
registerClient?: RegisterClient;
|
|
42
|
+
/** Builds `TenantContext.request.custom` for every request. See `IdPOptions.buildCustomContext`. */
|
|
43
|
+
buildCustomContext?: (req: Request) => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
44
|
+
clock: () => number;
|
|
45
|
+
cookieDefaults: CookieDefaults;
|
|
46
|
+
/** See `IdPOptions.customScopeClaims`. */
|
|
47
|
+
customScopeClaims?: Record<string, ReadonlyArray<string>>;
|
|
48
|
+
};
|
|
49
|
+
/** Per-request variables populated by middleware. */
|
|
50
|
+
export type HttpVars = {
|
|
51
|
+
/** Parsed `Cookie:` header. */
|
|
52
|
+
cookies: Map<string, string>;
|
|
53
|
+
/** Populated by the tenant middleware. May be `null` for unauthenticated public endpoints. */
|
|
54
|
+
tenant: TenantContext | null;
|
|
55
|
+
/** Outcome of the callback-recovery chain on `/cb/*` requests. */
|
|
56
|
+
recovery: TenantRecovery | null;
|
|
57
|
+
/** Issuer URL for this request — pre-resolved by middleware. */
|
|
58
|
+
issuerUrl: string;
|
|
59
|
+
};
|
|
60
|
+
export type HttpEnv = {
|
|
61
|
+
Variables: HttpVars;
|
|
62
|
+
};
|
|
63
|
+
export type HttpContext = Context<HttpEnv>;
|
|
64
|
+
/** Convenience: build the initial `HttpVars` value for a request. */
|
|
65
|
+
export declare function initialVars(issuerUrl: string, cookies: Map<string, string>): HttpVars;
|
|
66
|
+
//# sourceMappingURL=context.d.ts.map
|