@_mustachio/openauth 0.9.2 → 0.10.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 +82 -0
- package/dist/esm/adapters/memory/token-store.js +91 -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 +26 -10
- package/dist/esm/domain/audit.js +13 -0
- package/dist/esm/domain/authorize.js +212 -0
- package/dist/esm/domain/callback.js +173 -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 +41 -0
- package/dist/esm/domain/introspect.js +51 -0
- package/dist/esm/domain/jwt.js +43 -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 +108 -0
- package/dist/esm/domain/pkce.js +16 -0
- package/dist/esm/domain/refresh.js +91 -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 +101 -0
- package/dist/esm/domain/token.js +205 -0
- package/dist/esm/domain/userinfo.js +27 -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 +163 -0
- package/dist/esm/http/handlers/callback.js +53 -0
- package/dist/esm/http/handlers/metadata.js +34 -0
- package/dist/esm/http/handlers/method-route.js +87 -0
- package/dist/esm/http/handlers/revocation.js +98 -0
- package/dist/esm/http/handlers/token.js +167 -0
- package/dist/esm/http/handlers/userinfo.js +54 -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 +35 -0
- package/dist/esm/http/schemas/authorize.js +24 -0
- package/dist/esm/http/schemas/revocation.js +18 -0
- package/dist/esm/http/schemas/token.js +57 -0
- package/dist/esm/index.js +121 -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 +65 -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 +19 -0
- package/dist/types/adapters/memory/session-store.d.ts.map +1 -0
- package/dist/types/adapters/memory/token-store.d.ts +28 -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 +1 -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 +52 -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 +44 -0
- package/dist/types/domain/discovery.d.ts.map +1 -0
- package/dist/types/domain/introspect.d.ts +71 -0
- package/dist/types/domain/introspect.d.ts.map +1 -0
- package/dist/types/domain/jwt.d.ts +48 -0
- package/dist/types/domain/jwt.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/pkce.d.ts +15 -0
- package/dist/types/domain/pkce.d.ts.map +1 -0
- package/dist/types/domain/refresh.d.ts +43 -0
- package/dist/types/domain/refresh.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 +67 -0
- package/dist/types/domain/token-exchange.d.ts.map +1 -0
- package/dist/types/domain/token.d.ts +100 -0
- package/dist/types/domain/token.d.ts.map +1 -0
- package/dist/types/domain/userinfo.d.ts +22 -0
- package/dist/types/domain/userinfo.d.ts.map +1 -0
- package/dist/types/http/context.d.ts +63 -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/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/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 +52 -0
- package/dist/types/http/schemas/authorize.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 +139 -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 +82 -0
- package/dist/types/ports/session-store.d.ts.map +1 -0
- package/dist/types/ports/token-store.d.ts +93 -0
- package/dist/types/ports/token-store.d.ts.map +1 -0
- package/dist/types/types/authorization.d.ts +52 -0
- package/dist/types/types/authorization.d.ts.map +1 -0
- package/dist/types/types/error.d.ts +92 -0
- package/dist/types/types/error.d.ts.map +1 -0
- package/dist/types/types/flow.d.ts +87 -0
- package/dist/types/types/flow.d.ts.map +1 -0
- package/dist/types/types/idp.d.ts +234 -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 +239 -0
- package/dist/types/types/tenant.d.ts.map +1 -0
- package/dist/types/types/token.d.ts +103 -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 +128 -0
- package/src/adapters/memory/token-store.ts +165 -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 +50 -16
- package/src/domain/audit.ts +28 -0
- package/src/domain/authorize.ts +405 -0
- package/src/domain/callback.ts +263 -0
- package/src/domain/client-auth.ts +116 -0
- package/src/domain/client-credentials.ts +178 -0
- package/src/domain/crypto.ts +168 -0
- package/src/domain/discovery.ts +83 -0
- package/src/domain/introspect.ts +145 -0
- package/src/domain/jwt.ts +106 -0
- package/src/domain/method-cache.ts +220 -0
- package/src/domain/method-dispatch.ts +95 -0
- package/src/domain/method-route.ts +208 -0
- package/src/domain/pkce.ts +37 -0
- package/src/domain/refresh.ts +169 -0
- package/src/domain/revoke.ts +161 -0
- package/src/domain/state-envelope.ts +142 -0
- package/src/domain/token-exchange.ts +232 -0
- package/src/domain/token.ts +357 -0
- package/src/domain/userinfo.ts +56 -0
- package/src/http/context.ts +86 -0
- package/src/http/cookies.ts +167 -0
- package/src/http/errors.ts +98 -0
- package/src/http/handlers/authorize.ts +221 -0
- package/src/http/handlers/callback.ts +77 -0
- package/src/http/handlers/metadata.ts +44 -0
- package/src/http/handlers/method-route.ts +115 -0
- package/src/http/handlers/revocation.ts +151 -0
- package/src/http/handlers/token.ts +244 -0
- package/src/http/handlers/userinfo.ts +66 -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 +66 -0
- package/src/http/schemas/authorize.ts +58 -0
- package/src/http/schemas/revocation.ts +23 -0
- package/src/http/schemas/token.ts +85 -0
- package/src/index.ts +266 -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 +88 -0
- package/src/ports/audit-log.ts +148 -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 +98 -0
- package/src/ports/token-store.ts +103 -0
- package/src/types/authorization.ts +53 -0
- package/src/types/error.ts +123 -0
- package/src/types/flow.ts +89 -0
- package/src/types/idp.ts +269 -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 +248 -0
- package/src/types/token.ts +101 -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,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,67 @@
|
|
|
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
|
+
};
|
|
66
|
+
export declare function exchangeToken(req: TokenExchangeRequest, deps: ExchangeTokenDeps): Promise<Result<TokenExchangeResponse, AuthError>>;
|
|
67
|
+
//# 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;CAChC,CAAA;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,oBAAoB,EACzB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,CAsJnD"}
|
|
@@ -0,0 +1,100 @@
|
|
|
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
|
+
export type ExchangeCodeDeps = {
|
|
53
|
+
configStore: ConfigStore;
|
|
54
|
+
tokenStore: TokenStore;
|
|
55
|
+
keyStore: KeyStore;
|
|
56
|
+
auditLog?: AuditLog;
|
|
57
|
+
success: (input: SuccessMapInput) => Promise<SubjectClaim>;
|
|
58
|
+
persistUpstreamTokens?: PersistUpstreamTokens;
|
|
59
|
+
issuerUrl: string;
|
|
60
|
+
clock: () => number;
|
|
61
|
+
newRefreshToken?: () => string;
|
|
62
|
+
/** Test override. */
|
|
63
|
+
newRefreshFamily?: () => string;
|
|
64
|
+
};
|
|
65
|
+
export declare function exchangeCode(req: TokenAuthCodeRequest, deps: ExchangeCodeDeps): Promise<Result<TokenResponse, AuthError>>;
|
|
66
|
+
/**
|
|
67
|
+
* Shared mint logic used by both `exchangeCode` and `refreshTokens` (which
|
|
68
|
+
* passes its previous `family` through to preserve the rotation chain).
|
|
69
|
+
*/
|
|
70
|
+
export declare function mintTokens(args: {
|
|
71
|
+
tenant: TenantContext;
|
|
72
|
+
claim: SubjectClaim;
|
|
73
|
+
payload: Pick<CodePayload, "tenantId" | "clientId" | "methodId" | "methodKind" | "scopes" | "audience">;
|
|
74
|
+
family: string;
|
|
75
|
+
/**
|
|
76
|
+
* `client_credentials` grants (RFC 6749 §4.4.3) and other paths where a
|
|
77
|
+
* refresh token is not appropriate set `skipRefresh: true`. The response
|
|
78
|
+
* then omits `refresh_token` and **no row is written** to `TokenStore`,
|
|
79
|
+
* so the durable store doesn't accumulate orphaned refresh entries that
|
|
80
|
+
* the response strips and discards.
|
|
81
|
+
*/
|
|
82
|
+
skipRefresh?: boolean;
|
|
83
|
+
deps: {
|
|
84
|
+
keyStore: KeyStore;
|
|
85
|
+
tokenStore: TokenStore;
|
|
86
|
+
auditLog?: AuditLog;
|
|
87
|
+
issuerUrl: string;
|
|
88
|
+
clock: () => number;
|
|
89
|
+
newRefreshToken?: () => string;
|
|
90
|
+
};
|
|
91
|
+
}): Promise<Result<TokenResponse, AuthError>>;
|
|
92
|
+
/**
|
|
93
|
+
* Phase 2 client-secret hash format: SHA-256 over UTF-8 bytes, base64url.
|
|
94
|
+
*
|
|
95
|
+
* Production deployments will move to argon2id (per cross-cutting
|
|
96
|
+
* decisions) in Phase 8. The storage shape (`ClientConfig.secretHash:
|
|
97
|
+
* string`) is unchanged; only the hashing function swaps.
|
|
98
|
+
*/
|
|
99
|
+
export declare function hashClientSecret(plain: string): Promise<string>;
|
|
100
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/domain/token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/userinfo` endpoint logic (OIDC Core §5.3). Verifies the bearer access
|
|
3
|
+
* token and returns the inlined `SubjectClaim` claims.
|
|
4
|
+
*/
|
|
5
|
+
import type { KeyStore } from "../ports/key-store";
|
|
6
|
+
import { type AuthError } from "../types/error";
|
|
7
|
+
import type { Result } from "../types/result";
|
|
8
|
+
export type UserinfoResponse = {
|
|
9
|
+
sub: string;
|
|
10
|
+
/** Subject type discriminator (e.g. `"user"` / `"admin"`). */
|
|
11
|
+
subject_type: string;
|
|
12
|
+
/** Inlined claim properties. */
|
|
13
|
+
properties: Record<string, unknown>;
|
|
14
|
+
/** Scope granted to this access token. */
|
|
15
|
+
scope?: string;
|
|
16
|
+
};
|
|
17
|
+
export type UserinfoDeps = {
|
|
18
|
+
keyStore: KeyStore;
|
|
19
|
+
issuerUrl?: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function userinfo(bearerToken: string, deps: UserinfoDeps): Promise<Result<UserinfoResponse, AuthError>>;
|
|
22
|
+
//# sourceMappingURL=userinfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userinfo.d.ts","sourceRoot":"","sources":["../../../src/domain/userinfo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,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;AAO7C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAA;IACpB,gCAAgC;IAChC,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,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAsB,QAAQ,CAC5B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAwB9C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
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, 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
|
+
/** Builds `TenantContext.request.custom` for every request. See `IdPOptions.buildCustomContext`. */
|
|
42
|
+
buildCustomContext?: (req: Request) => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
43
|
+
clock: () => number;
|
|
44
|
+
cookieDefaults: CookieDefaults;
|
|
45
|
+
};
|
|
46
|
+
/** Per-request variables populated by middleware. */
|
|
47
|
+
export type HttpVars = {
|
|
48
|
+
/** Parsed `Cookie:` header. */
|
|
49
|
+
cookies: Map<string, string>;
|
|
50
|
+
/** Populated by the tenant middleware. May be `null` for unauthenticated public endpoints. */
|
|
51
|
+
tenant: TenantContext | null;
|
|
52
|
+
/** Outcome of the callback-recovery chain on `/cb/*` requests. */
|
|
53
|
+
recovery: TenantRecovery | null;
|
|
54
|
+
/** Issuer URL for this request — pre-resolved by middleware. */
|
|
55
|
+
issuerUrl: string;
|
|
56
|
+
};
|
|
57
|
+
export type HttpEnv = {
|
|
58
|
+
Variables: HttpVars;
|
|
59
|
+
};
|
|
60
|
+
export type HttpContext = Context<HttpEnv>;
|
|
61
|
+
/** Convenience: build the initial `HttpVars` value for a request. */
|
|
62
|
+
export declare function initialVars(issuerUrl: string, cookies: Map<string, string>): HttpVars;
|
|
63
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/http/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cookie parsing + serialization for the HTTP layer.
|
|
3
|
+
*
|
|
4
|
+
* The framework owns cookie policy (per `ARCHITECTURE.md` §"Response
|
|
5
|
+
* sanitization"). Methods never set cookies through `Response.headers`; they
|
|
6
|
+
* return `SetCookie[]` data and this module renders them. We additionally
|
|
7
|
+
* strip method-returned `Set-Cookie` / security / `Cache-Control` headers so
|
|
8
|
+
* methods cannot bypass policy.
|
|
9
|
+
*/
|
|
10
|
+
import type { SetCookie } from "../types/method";
|
|
11
|
+
/** Parse an incoming `Cookie:` header into a read-only map. */
|
|
12
|
+
export declare function parseCookieHeader(header: string | null): Map<string, string>;
|
|
13
|
+
export type CookieDefaults = {
|
|
14
|
+
/** Secure flag default. Production should pass `true`. */
|
|
15
|
+
secure?: boolean;
|
|
16
|
+
domain?: string;
|
|
17
|
+
path?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Serialize a single `SetCookie` data instruction into a `Set-Cookie` header
|
|
21
|
+
* string. Enforces framework policy:
|
|
22
|
+
* - `Secure` forced on if `defaults.secure === true`.
|
|
23
|
+
* - `SameSite` defaults to `Lax` if unspecified.
|
|
24
|
+
* - `HttpOnly` defaults to `true` for any cookie name in the `auth.*` /
|
|
25
|
+
* `idp.*` reserved namespace.
|
|
26
|
+
* - `null` value → `Max-Age=0` to clear.
|
|
27
|
+
*/
|
|
28
|
+
export declare function serializeSetCookie(cookie: SetCookie, defaults?: CookieDefaults): string;
|
|
29
|
+
export type ApplyOptions = {
|
|
30
|
+
setCookies?: SetCookie[];
|
|
31
|
+
cookieDefaults?: CookieDefaults;
|
|
32
|
+
/** When set, framework writes this `Cache-Control` value. Default `no-store`. */
|
|
33
|
+
cacheControl?: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Sanitize a method-returned `Response` and apply framework-owned headers.
|
|
37
|
+
*
|
|
38
|
+
* Returns a new `Response` so the original is left untouched. When the
|
|
39
|
+
* method's response carried any of the stripped headers, emit a
|
|
40
|
+
* `console.warn` so a programmer notices their header got dropped
|
|
41
|
+
* silently. (Per ARCHITECTURE.md §"Response sanitization"; switches to
|
|
42
|
+
* the Logger port when that lands in Phase 8.)
|
|
43
|
+
*/
|
|
44
|
+
export declare function applyResponsePolicy(response: Response, opts?: ApplyOptions): Response;
|
|
45
|
+
//# sourceMappingURL=cookies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../../src/http/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsB5E;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAsBD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,QAAQ,GAAE,cAAmB,GAC5B,MAAM,CA4BR;AAgBD,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE,YAAiB,GACtB,QAAQ,CA4BV"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map an `AuthError` into a standards-compliant HTTP response.
|
|
3
|
+
*
|
|
4
|
+
* Two surfaces:
|
|
5
|
+
* - **Token / introspect / revoke endpoints (RFC 6749 §5.2).** JSON body
|
|
6
|
+
* `{ "error": "...", "error_description": "..." }` with the spec status
|
|
7
|
+
* codes (`invalid_client` → 401, server-side → 500, the rest → 400).
|
|
8
|
+
* - **Authorize endpoint (RFC 6749 §4.1.2.1).** Recoverable errors redirect
|
|
9
|
+
* back to the relying party with `error` + `error_description` + the
|
|
10
|
+
* echoed `state`. Non-recoverable errors (unknown client, unregistered
|
|
11
|
+
* redirect_uri) surface as plain text to avoid open-redirector behavior.
|
|
12
|
+
*
|
|
13
|
+
* `internal_error` is framework-internal; the HTTP layer always rewrites it
|
|
14
|
+
* to `server_error` before responding to the client.
|
|
15
|
+
*/
|
|
16
|
+
import type { AuthError, AuthErrorCode } from "../types/error";
|
|
17
|
+
/** Public OAuth error code emitted on the wire. Strips framework-internal. */
|
|
18
|
+
export declare function publicErrorCode(code: AuthErrorCode): string;
|
|
19
|
+
export declare function tokenEndpointErrorResponse(error: AuthError): Response;
|
|
20
|
+
/**
|
|
21
|
+
* Redirect back to the RP with the OAuth error in the query (RFC 6749
|
|
22
|
+
* §4.1.2.1). Returns `null` if the error is non-recoverable — the caller
|
|
23
|
+
* should render a plain-text response instead.
|
|
24
|
+
*/
|
|
25
|
+
export declare function authorizeRedirectErrorResponse(error: AuthError, appRedirectUri: string, appState: string | null): Response;
|
|
26
|
+
/**
|
|
27
|
+
* Plain-text fallback for errors that occur before a valid `redirect_uri`
|
|
28
|
+
* has been established — open-redirector defense.
|
|
29
|
+
*/
|
|
30
|
+
export declare function authorizeDirectErrorResponse(error: AuthError): Response;
|
|
31
|
+
/**
|
|
32
|
+
* Errors that must never round-trip through `appRedirectUri` because the URI
|
|
33
|
+
* itself is what failed validation.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isNonRecoverable(error: AuthError): boolean;
|
|
36
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/http/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAS9D,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAM3D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAerE;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,EAChB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,QAAQ,CASV;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAMvE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAW1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorize.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/authorize.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQvD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,OAChC,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CA4JjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/callback.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGvD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,OAC/B,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CA2DjD"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HttpContext, HttpDeps } from "../context";
|
|
2
|
+
export declare function makeDiscoveryHandler(_deps: HttpDeps): (c: HttpContext) => Promise<Response>;
|
|
3
|
+
export declare function makeJwksHandler(deps: HttpDeps): (_c: HttpContext) => Promise<Response>;
|
|
4
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/metadata.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGvD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,OACjC,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CAUjD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,QAC1B,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CAWlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method-route.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/method-route.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGvD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,OAClC,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CAqFjD"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HttpContext, HttpDeps } from "../context";
|
|
2
|
+
export declare function makeRevokeHandler(deps: HttpDeps): (c: HttpContext) => Promise<Response>;
|
|
3
|
+
export declare function makeIntrospectHandler(deps: HttpDeps): (c: HttpContext) => Promise<Response>;
|
|
4
|
+
//# sourceMappingURL=revocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revocation.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/revocation.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,OAC7B,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CA+CjD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,OACjC,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CAkEjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/token.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,OAC5B,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CA6KjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userinfo.d.ts","sourceRoot":"","sources":["../../../../src/http/handlers/userinfo.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAEvD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,OAC/B,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC,CAiDjD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global error middleware. Catches thrown values and serializes them as
|
|
3
|
+
* OAuth-compliant responses. Inside handlers we route through `Result<T,
|
|
4
|
+
* AuthError>` instead — this is the last-resort net for unexpected throws.
|
|
5
|
+
*/
|
|
6
|
+
import type { MiddlewareHandler } from "hono";
|
|
7
|
+
import type { HttpDeps, HttpEnv } from "../context";
|
|
8
|
+
export declare function errorMiddleware(_deps: HttpDeps): MiddlewareHandler<HttpEnv>;
|
|
9
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../../../src/http/middleware/error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AAI7C,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGnD,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAa3E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tenant resolution + callback-recovery middleware.
|
|
3
|
+
*
|
|
4
|
+
* Phase 3 ships the mac-state recovery path. Mechanisms #2 (partitioned
|
|
5
|
+
* host) and #3 (`flowId`-in-URI) are scaffolded but not yet plumbed end-to-
|
|
6
|
+
* end (per plan §"Phase 2 — Deferred"); the framework currently falls back
|
|
7
|
+
* to `resolveTenant` when the state envelope is absent or invalid, so users
|
|
8
|
+
* who want partitioned-host deployments can implement the lookup inside
|
|
9
|
+
* their own `resolveTenant`.
|
|
10
|
+
*
|
|
11
|
+
* Order on `/cb/*`:
|
|
12
|
+
* 1. If `state` MAC-verifies → `mac-state`. `resolveTenant` is NOT called.
|
|
13
|
+
* 2. Else fall through to `resolveTenant` (host-plus-* deployments do the
|
|
14
|
+
* host inspection there).
|
|
15
|
+
*
|
|
16
|
+
* Order on all other paths: `resolveTenant` directly.
|
|
17
|
+
*/
|
|
18
|
+
import type { MiddlewareHandler } from "hono";
|
|
19
|
+
import type { HttpDeps, HttpEnv } from "../context";
|
|
20
|
+
/**
|
|
21
|
+
* Initial pass — parse cookies + resolve issuer URL. Runs unconditionally.
|
|
22
|
+
*/
|
|
23
|
+
export declare function bootstrapMiddleware(deps: HttpDeps): MiddlewareHandler<HttpEnv>;
|
|
24
|
+
/**
|
|
25
|
+
* Tenant + recovery resolution middleware. Mount on routes that need a
|
|
26
|
+
* tenant in scope (`/authorize`, method dispatch, `/cb/*`). Token endpoints
|
|
27
|
+
* derive tenant from the auth code's snapshot — they skip this middleware.
|
|
28
|
+
*/
|
|
29
|
+
export declare function tenantMiddleware(deps: HttpDeps): MiddlewareHandler<HttpEnv>;
|
|
30
|
+
//# sourceMappingURL=tenant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../../../src/http/middleware/tenant.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AAY7C,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAWnD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,GACb,iBAAiB,CAAC,OAAO,CAAC,CAS5B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAkD3E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers that prepare a `Request` for the host-supplied
|
|
3
|
+
* `IdPOptions.resolveTenant` hook.
|
|
4
|
+
*
|
|
5
|
+
* The canonical resolver reads `client_id` from URL search params
|
|
6
|
+
* (INTEGRATION.md §5.1). On endpoints where `client_id` is carried in
|
|
7
|
+
* the form body / Basic-auth header rather than the URL (m2m at
|
|
8
|
+
* `/token`, introspect at `/introspect`, revoke at `/revoke`) the
|
|
9
|
+
* framework parses the body first and then injects the parsed
|
|
10
|
+
* `client_id` into a synthesized request so the resolver still sees
|
|
11
|
+
* what it expects.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Build a new `Request` whose URL search params carry the supplied
|
|
15
|
+
* resolver hints. Existing query params win — hosts can still override
|
|
16
|
+
* via the URL. Headers are copied so Basic-auth-based resolvers still
|
|
17
|
+
* see the original `Authorization`. The body is intentionally dropped:
|
|
18
|
+
* the original is already consumed by the handler and resolvers must
|
|
19
|
+
* not depend on body state.
|
|
20
|
+
*/
|
|
21
|
+
export declare function injectResolverHints(original: Request, hints: Record<string, string>): Request;
|
|
22
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/http/resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAST"}
|