@_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,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D1 / SQLite schema for the IdP adapters. Mirrors the Postgres schema
|
|
3
|
+
* exactly with SQLite-flavored types (TEXT for JSON, BLOB for bytes,
|
|
4
|
+
* INTEGER for timestamps and serials).
|
|
5
|
+
*
|
|
6
|
+
* The auth-code payload is encrypted at rest by the adapter before the
|
|
7
|
+
* ciphertext lands in `openauth_codes.ciphertext` — the DB only ever sees
|
|
8
|
+
* the JWE compact string.
|
|
9
|
+
*/
|
|
10
|
+
import type { AnyD1Database } from "./types";
|
|
11
|
+
export declare const INITIAL_SCHEMA_SQL: string[];
|
|
12
|
+
/**
|
|
13
|
+
* Apply the initial schema to a D1 database. Idempotent — every statement
|
|
14
|
+
* is `CREATE … IF NOT EXISTS`. Deployments using `wrangler d1 migrations
|
|
15
|
+
* apply` can apply the SQL above directly.
|
|
16
|
+
*/
|
|
17
|
+
export declare function migrate(db: AnyD1Database): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../../../src/adapters/d1/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,kBAAkB,UAkE9B,CAAA;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FlowRecord } from "../../types/flow";
|
|
2
|
+
import type { SessionRecord, SessionStore } from "../../ports/session-store";
|
|
3
|
+
import type { Result } from "../../types/result";
|
|
4
|
+
import type { AnyD1Database } from "./types";
|
|
5
|
+
export type D1SessionStoreOptions = {
|
|
6
|
+
db: AnyD1Database;
|
|
7
|
+
clock?: () => number;
|
|
8
|
+
};
|
|
9
|
+
export declare class D1SessionStore implements SessionStore {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(opts: D1SessionStoreOptions);
|
|
12
|
+
saveFlow(flowId: string, payload: FlowRecord, ttl: number): Promise<Result<void>>;
|
|
13
|
+
updateFlowMethodState(flowId: string, methodState: unknown): Promise<Result<void>>;
|
|
14
|
+
readFlow(flowId: string): Promise<Result<FlowRecord>>;
|
|
15
|
+
consumeFlow(flowId: string): Promise<Result<FlowRecord>>;
|
|
16
|
+
createSession(sessionId: string, payload: SessionRecord, ttl: number): Promise<Result<void>>;
|
|
17
|
+
readSession(sessionId: string): Promise<Result<SessionRecord>>;
|
|
18
|
+
revokeSession(sessionId: string): Promise<Result<void>>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/d1/session-store.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAIhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,aAAa,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,cAAe,YAAW,YAAY;;gBAIrC,IAAI,EAAE,qBAAqB;IAKjC,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAoBlB,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAwDlB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IA2BrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAuBxD,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAuBlB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IA2B9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAW9D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessions-API helper. Wraps a `D1Database` in a session pinned to the
|
|
3
|
+
* primary node for read-after-write consistency on security-critical paths.
|
|
4
|
+
*
|
|
5
|
+
* If the bundled `D1Database` lacks `withSession` (older runtime), the
|
|
6
|
+
* helper returns the plain `db` and the caller pays no Sessions-API cost
|
|
7
|
+
* (and gets eventual-consistency reads — documented in the adapter's
|
|
8
|
+
* top-level JSDoc).
|
|
9
|
+
*/
|
|
10
|
+
import type { AnyD1Database, D1DatabaseSession, D1DatabaseWithSessions } from "./types";
|
|
11
|
+
export declare function isSessionsCapable(db: AnyD1Database): db is D1DatabaseWithSessions;
|
|
12
|
+
/**
|
|
13
|
+
* Open a Sessions-API session pinned to the primary node. All `prepare` calls
|
|
14
|
+
* inside the session see the latest writes; bookmarks may be threaded across
|
|
15
|
+
* requests by the caller if needed.
|
|
16
|
+
*/
|
|
17
|
+
export declare function primarySession(db: AnyD1Database): D1DatabaseSession;
|
|
18
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/adapters/d1/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,SAAS,CAAA;AAEhB,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,aAAa,GAChB,EAAE,IAAI,sBAAsB,CAE9B;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,iBAAiB,CAWnE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { KeyStore } from "../../ports/key-store";
|
|
2
|
+
import type { TokenStore } from "../../ports/token-store";
|
|
3
|
+
import type { Result } from "../../types/result";
|
|
4
|
+
import type { TenantId } from "../../types/tenant";
|
|
5
|
+
import type { RefreshTokenPayload } from "../../types/token";
|
|
6
|
+
import type { AnyD1Database } from "./types";
|
|
7
|
+
export type D1TokenStoreOptions = {
|
|
8
|
+
db: AnyD1Database;
|
|
9
|
+
/**
|
|
10
|
+
* Optional — retained for API stability after M1 moved code-payload
|
|
11
|
+
* encryption to the domain layer. The adapter no longer touches it.
|
|
12
|
+
*/
|
|
13
|
+
keyStore?: KeyStore;
|
|
14
|
+
clock?: () => number;
|
|
15
|
+
};
|
|
16
|
+
export declare class D1TokenStore implements TokenStore {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(opts: D1TokenStoreOptions);
|
|
19
|
+
saveCode(code: string, ciphertext: string, ttl: number): Promise<Result<void>>;
|
|
20
|
+
consumeCode(code: string): Promise<Result<string>>;
|
|
21
|
+
saveRefresh(refresh: string, payload: RefreshTokenPayload): Promise<Result<void>>;
|
|
22
|
+
consumeRefresh(refresh: string, options?: {
|
|
23
|
+
reuseWindowMs?: number;
|
|
24
|
+
}): Promise<Result<RefreshTokenPayload>>;
|
|
25
|
+
peekRefresh(refresh: string): Promise<Result<RefreshTokenPayload>>;
|
|
26
|
+
revokeFamily(family: string): Promise<Result<void>>;
|
|
27
|
+
revokeBySubject(tenantId: TenantId, subjectId: string): Promise<Result<void>>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=token-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/d1/token-store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,aAAa,CAAA;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,YAAa,YAAW,UAAU;;gBAIjC,IAAI,EAAE,mBAAmB;IAK/B,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAsBlB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAuBlD,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAwBlB,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GACvC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IA2EjC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAuBlE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAYnD,eAAe,CACnB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAazB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D1 type extensions.
|
|
3
|
+
*
|
|
4
|
+
* `@cloudflare/workers-types` < 2024-12 does not yet expose the D1 Sessions
|
|
5
|
+
* API on its `D1Database` class. We declare the augmentation locally and
|
|
6
|
+
* feature-detect at runtime: if `db.withSession` is a function the adapter
|
|
7
|
+
* uses it for read-after-write consistency on the security-critical paths;
|
|
8
|
+
* otherwise it falls back to plain `prepare`. This keeps the adapter
|
|
9
|
+
* type-safe today and forward-compatible when the workers-types release
|
|
10
|
+
* catches up.
|
|
11
|
+
*/
|
|
12
|
+
import type { D1Database, D1PreparedStatement, D1Result } from "@cloudflare/workers-types";
|
|
13
|
+
/**
|
|
14
|
+
* D1 Sessions API constraints. Documented at
|
|
15
|
+
* <https://developers.cloudflare.com/d1/best-practices/read-replication/>.
|
|
16
|
+
* - `"first-primary"` — pin the session to the primary node. All reads see
|
|
17
|
+
* the latest write. Used for security-critical paths.
|
|
18
|
+
* - `"first-unconstrained"` — pin to whichever node responds first. Lower
|
|
19
|
+
* latency, eventual consistency. Used for JWKS / config reads.
|
|
20
|
+
*/
|
|
21
|
+
export type D1SessionConstraint = "first-primary" | "first-unconstrained";
|
|
22
|
+
/** A session bookmark — opaque token returned by `getBookmark()`. */
|
|
23
|
+
export type D1SessionBookmark = string;
|
|
24
|
+
/** Minimal shape we use from `D1DatabaseSession`. */
|
|
25
|
+
export type D1DatabaseSession = {
|
|
26
|
+
prepare(query: string): D1PreparedStatement;
|
|
27
|
+
batch<T = unknown>(statements: D1PreparedStatement[]): Promise<D1Result<T>[]>;
|
|
28
|
+
getBookmark(): D1SessionBookmark | null;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* `D1Database` with the Sessions API. Use this type at the adapter boundary;
|
|
32
|
+
* the runtime feature-detects `withSession` so consumers can still pass a
|
|
33
|
+
* plain `D1Database` if Sessions is unavailable in their environment.
|
|
34
|
+
*/
|
|
35
|
+
export type D1DatabaseWithSessions = D1Database & {
|
|
36
|
+
withSession(constraintOrBookmark?: D1SessionConstraint | D1SessionBookmark): D1DatabaseSession;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Either a real D1Database or our test shim. Feature detection happens at
|
|
40
|
+
* call time so the adapter still works against both.
|
|
41
|
+
*/
|
|
42
|
+
export type AnyD1Database = D1Database | D1DatabaseWithSessions;
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/d1/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAElC;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,qBAAqB,CAAA;AAEzE,qEAAqE;AACrE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEtC,qDAAqD;AACrD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAAA;IAC3C,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC7E,WAAW,IAAI,iBAAiB,GAAG,IAAI,CAAA;CACxC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG;IAChD,WAAW,CACT,oBAAoB,CAAC,EAAE,mBAAmB,GAAG,iBAAiB,GAC7D,iBAAiB,CAAA;CACrB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare Durable Objects adapters.
|
|
3
|
+
*
|
|
4
|
+
* Durable Objects are an excellent fit for `SessionStore` (flow records)
|
|
5
|
+
* because every operation on a single DO instance is serialized — atomic
|
|
6
|
+
* delete-on-read comes for free with `storage.transaction`. Per
|
|
7
|
+
* `ports/CONSISTENCY.md`, DOs are also acceptable for `TokenStore` in
|
|
8
|
+
* deployments that don't run D1.
|
|
9
|
+
*
|
|
10
|
+
* The adapter is supplied a `DurableObjectStorage` directly (`this.ctx.storage`
|
|
11
|
+
* from inside a DO class). Users wire their own DO class around the adapter
|
|
12
|
+
* and forward RPC / fetch calls to the methods. See the JSDoc on
|
|
13
|
+
* `DurableObjectSessionStore` for the canonical wiring pattern.
|
|
14
|
+
*/
|
|
15
|
+
export { DurableObjectSessionStore, type DurableObjectSessionStoreOptions, } from "./session-store";
|
|
16
|
+
export type { DurableObjectStorageLike, DurableObjectTransactionLike, } from "./types";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/durable-object/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EACL,yBAAyB,EACzB,KAAK,gCAAgC,GACtC,MAAM,iBAAiB,CAAA;AAExB,YAAY,EACV,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { FlowRecord } from "../../types/flow";
|
|
2
|
+
import type { SessionRecord, SessionStore } from "../../ports/session-store";
|
|
3
|
+
import type { Result } from "../../types/result";
|
|
4
|
+
import type { DurableObjectStorageLike, DurableObjectTransactionLike } from "./types";
|
|
5
|
+
export type DurableObjectSessionStoreOptions = {
|
|
6
|
+
storage: DurableObjectStorageLike;
|
|
7
|
+
clock?: () => number;
|
|
8
|
+
};
|
|
9
|
+
export declare class DurableObjectSessionStore implements SessionStore {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(opts: DurableObjectSessionStoreOptions);
|
|
12
|
+
saveFlow(flowId: string, payload: FlowRecord, ttl: number): Promise<Result<void>>;
|
|
13
|
+
updateFlowMethodState(flowId: string, methodState: unknown): Promise<Result<void>>;
|
|
14
|
+
readFlow(flowId: string): Promise<Result<FlowRecord>>;
|
|
15
|
+
consumeFlow(flowId: string): Promise<Result<FlowRecord>>;
|
|
16
|
+
createSession(sessionId: string, payload: SessionRecord, ttl: number): Promise<Result<void>>;
|
|
17
|
+
readSession(sessionId: string): Promise<Result<SessionRecord>>;
|
|
18
|
+
revokeSession(sessionId: string): Promise<Result<void>>;
|
|
19
|
+
}
|
|
20
|
+
export type { DurableObjectStorageLike, DurableObjectTransactionLike };
|
|
21
|
+
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/durable-object/session-store.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGhD,OAAO,KAAK,EACV,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,SAAS,CAAA;AAYhB,MAAM,MAAM,gCAAgC,GAAG;IAC7C,OAAO,EAAE,wBAAwB,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,yBAA0B,YAAW,YAAY;;gBAIhD,IAAI,EAAE,gCAAgC;IAK5C,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAkBlB,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IA2BlB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAmBrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IA+BxD,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAoBlB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAmB9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAQ9D;AAMD,YAAY,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal `DurableObjectStorage` shape the adapter depends on. Defined
|
|
3
|
+
* locally so the adapter is testable without a real Workers runtime and so
|
|
4
|
+
* it stays compatible with both legacy and current versions of
|
|
5
|
+
* `@cloudflare/workers-types`.
|
|
6
|
+
*
|
|
7
|
+
* Real `DurableObjectStorage` instances satisfy this interface — pass
|
|
8
|
+
* `this.ctx.storage` directly.
|
|
9
|
+
*/
|
|
10
|
+
export type DurableObjectTransactionLike = {
|
|
11
|
+
get<T>(key: string): Promise<T | undefined>;
|
|
12
|
+
put<T>(key: string, value: T): Promise<void>;
|
|
13
|
+
delete(key: string): Promise<boolean>;
|
|
14
|
+
};
|
|
15
|
+
export type DurableObjectStorageLike = DurableObjectTransactionLike & {
|
|
16
|
+
/**
|
|
17
|
+
* Run a closure atomically. On any DO, all operations within `closure`
|
|
18
|
+
* see a consistent snapshot of storage; the closure's return value is
|
|
19
|
+
* resolved after the writes are durable.
|
|
20
|
+
*/
|
|
21
|
+
transaction<T>(closure: (txn: DurableObjectTransactionLike) => Promise<T>): Promise<T>;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/durable-object/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;IAC3C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,4BAA4B,GAAG;IACpE;;;;OAIG;IACH,WAAW,CAAC,CAAC,EACX,OAAO,EAAE,CAAC,GAAG,EAAE,4BAA4B,KAAK,OAAO,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,CAAC,CAAC,CAAA;CACd,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDB `AuditLog`. `pk="audit"`, `sk="<paddedTs>:<rand>"` so a Query
|
|
3
|
+
* pulls events in insertion order. As with all `AuditLog` adapters, `log()`
|
|
4
|
+
* never throws — durability failures are swallowed so the IdP's hot paths
|
|
5
|
+
* are not gated on the log.
|
|
6
|
+
*/
|
|
7
|
+
import type { AuditEvent, AuditLog } from "../../ports/audit-log";
|
|
8
|
+
import type { DynamoExecutor } from "./client";
|
|
9
|
+
export type DynamoAuditLogOptions = {
|
|
10
|
+
exec: DynamoExecutor;
|
|
11
|
+
};
|
|
12
|
+
export declare class DynamoAuditLog implements AuditLog {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(opts: DynamoAuditLogOptions);
|
|
15
|
+
log(event: AuditEvent & {
|
|
16
|
+
timestamp: number;
|
|
17
|
+
}): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=audit-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/audit-log.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,qBAAa,cAAe,YAAW,QAAQ;;gBAGjC,IAAI,EAAE,qBAAqB;IAIjC,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAapE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `DynamoExecutor` — the operation surface the adapters depend on.
|
|
3
|
+
*
|
|
4
|
+
* Keeps the AWS SDK out of the adapter's import graph. Production users
|
|
5
|
+
* wire the executor via `fromDynamoDBClient(docClient, tableName)`; tests
|
|
6
|
+
* supply an in-memory implementation (`test/helpers/dynamo-shim.ts`).
|
|
7
|
+
*
|
|
8
|
+
* All operations target a single table (the adapter is single-table by
|
|
9
|
+
* design — pk + sk + optional GSIs). The executor knows the table name; the
|
|
10
|
+
* adapter only passes keys + data.
|
|
11
|
+
*/
|
|
12
|
+
export type DynamoKey = {
|
|
13
|
+
pk: string;
|
|
14
|
+
sk: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Strong read by primary key. `consistentRead` MUST be honoured for every
|
|
18
|
+
* security-critical read (`getCode`, `getRefresh`, `getFlow`) — DynamoDB
|
|
19
|
+
* defaults to eventually consistent reads which violate the contracts in
|
|
20
|
+
* `ports/CONSISTENCY.md`.
|
|
21
|
+
*/
|
|
22
|
+
export type DynamoGetInput = {
|
|
23
|
+
key: DynamoKey;
|
|
24
|
+
consistentRead: boolean;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Insert (`condition: "not-exists"`) or unconditional put. The adapter uses:
|
|
28
|
+
* - `"not-exists"` for code / refresh / flow inserts so a duplicate token
|
|
29
|
+
* never silently overwrites.
|
|
30
|
+
* - `"exists"` for read-modify-write paths (e.g. `updateFlowMethodState`)
|
|
31
|
+
* so the put fails if a concurrent `consumeFlow` deleted the row between
|
|
32
|
+
* the prior `get` and this `put`. The executor surfaces a
|
|
33
|
+
* `ConditionalCheckFailedException` that callers translate into a typed
|
|
34
|
+
* failure.
|
|
35
|
+
*/
|
|
36
|
+
export type DynamoPutInput = {
|
|
37
|
+
item: Record<string, unknown> & DynamoKey;
|
|
38
|
+
condition?: "not-exists" | "exists";
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Atomic delete-on-read — equivalent to `DeleteItem` with
|
|
42
|
+
* `ReturnValues=ALL_OLD`. Concurrent calls resolve to exactly one winner
|
|
43
|
+
* that gets the row back; losers get `undefined`.
|
|
44
|
+
*/
|
|
45
|
+
export type DynamoDeleteInput = {
|
|
46
|
+
key: DynamoKey;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Conditional UPDATE used for the refresh-token rotation. Sets `consumed_at`
|
|
50
|
+
* iff it is currently absent. Returns the post-update item on success;
|
|
51
|
+
* resolves with `null` if the condition failed (`ConditionalCheckFailed`).
|
|
52
|
+
*/
|
|
53
|
+
export type DynamoUpdateConsumeRefreshInput = {
|
|
54
|
+
key: DynamoKey;
|
|
55
|
+
now: number;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Query items by partition key (and optionally a sort-key prefix). Strongly
|
|
59
|
+
* consistent for the refresh-revoke paths.
|
|
60
|
+
*/
|
|
61
|
+
export type DynamoQueryInput = {
|
|
62
|
+
pk: string;
|
|
63
|
+
/** Sort-key prefix filter — emits `begins_with(sk, prefix)`. */
|
|
64
|
+
skBeginsWith?: string;
|
|
65
|
+
consistentRead: boolean;
|
|
66
|
+
/** Filter by an attribute (e.g. `family = :v` for `revokeFamily` via GSI). */
|
|
67
|
+
filter?: {
|
|
68
|
+
attribute: string;
|
|
69
|
+
equals: string;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
export type DynamoQueryByGsiInput = {
|
|
73
|
+
/**
|
|
74
|
+
* GSI name configured on the table. Each entry corresponds to a GSI
|
|
75
|
+
* the bundled adapters need:
|
|
76
|
+
* - `family-index` (refresh-token family revocation)
|
|
77
|
+
* - `subject-index` (revokeBySubject)
|
|
78
|
+
* - `passkey-user-index` (PasskeyCredentialStore.findByUsername)
|
|
79
|
+
*/
|
|
80
|
+
indexName: "family-index" | "subject-index" | "passkey-user-index";
|
|
81
|
+
/** Hash key value on the GSI. */
|
|
82
|
+
hashKey: string;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Update a single item's attributes — equivalent to DynamoDB's
|
|
86
|
+
* `UpdateItem` with a `SET` expression over each provided attribute.
|
|
87
|
+
*
|
|
88
|
+
* Used by passkey-counter updates today; future Phase 8 features
|
|
89
|
+
* (DPoP jti replay, etc.) may reuse it.
|
|
90
|
+
*/
|
|
91
|
+
export type DynamoUpdateItemInput = {
|
|
92
|
+
key: DynamoKey;
|
|
93
|
+
/** Attribute name → new value. Top-level only, no nested updates. */
|
|
94
|
+
set: Record<string, unknown>;
|
|
95
|
+
};
|
|
96
|
+
export type DynamoExecutor = {
|
|
97
|
+
get(input: DynamoGetInput): Promise<Record<string, unknown> | undefined>;
|
|
98
|
+
put(input: DynamoPutInput): Promise<void>;
|
|
99
|
+
/** Returns the deleted item if one was deleted; `undefined` otherwise. */
|
|
100
|
+
delete(input: DynamoDeleteInput): Promise<Record<string, unknown> | undefined>;
|
|
101
|
+
/**
|
|
102
|
+
* Atomic refresh-token claim. Returns the post-update item on success;
|
|
103
|
+
* `null` if the condition failed (already-consumed race).
|
|
104
|
+
*/
|
|
105
|
+
consumeRefresh(input: DynamoUpdateConsumeRefreshInput): Promise<Record<string, unknown> | null>;
|
|
106
|
+
query(input: DynamoQueryInput): Promise<Record<string, unknown>[]>;
|
|
107
|
+
queryByGsi(input: DynamoQueryByGsiInput): Promise<Record<string, unknown>[]>;
|
|
108
|
+
/** Generic attribute update. No-op if the item does not exist. */
|
|
109
|
+
updateItem(input: DynamoUpdateItemInput): Promise<void>;
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAElD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,SAAS,CAAA;IACd,cAAc,EAAE,OAAO,CAAA;CACxB,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACzC,SAAS,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAA;CACpC,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,SAAS,CAAA;CACf,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,GAAG,EAAE,SAAS,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;IACvB,8EAA8E;IAC9E,MAAM,CAAC,EAAE;QACP,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;;;OAMG;IACH,SAAS,EAAE,cAAc,GAAG,eAAe,GAAG,oBAAoB,CAAA;IAClE,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,SAAS,CAAA;IACd,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;IACxE,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAA;IAC9E;;;OAGG;IACH,cAAc,CACZ,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAA;IAC1C,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAClE,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAC5E,kEAAkE;IAClE,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxD,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDB `ConfigStore`. `pk="tenant"`, `sk=<tenantId>`. Read-eventual
|
|
3
|
+
* by default (config is read-heavy, write-rare); the invalidation hook
|
|
4
|
+
* fires on every `putTenantConfig` so in-process caches drop stale values
|
|
5
|
+
* immediately.
|
|
6
|
+
*/
|
|
7
|
+
import type { ConfigStore } from "../../ports/config-store";
|
|
8
|
+
import type { Result } from "../../types/result";
|
|
9
|
+
import type { TenantConfig, TenantId } from "../../types/tenant";
|
|
10
|
+
import type { DynamoExecutor } from "./client";
|
|
11
|
+
export type DynamoConfigStoreOptions = {
|
|
12
|
+
exec: DynamoExecutor;
|
|
13
|
+
};
|
|
14
|
+
export declare class DynamoConfigStore implements ConfigStore {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(opts: DynamoConfigStoreOptions);
|
|
17
|
+
getTenantConfig(id: TenantId): Promise<Result<TenantConfig>>;
|
|
18
|
+
putTenantConfig(config: TenantConfig): Promise<Result<void>>;
|
|
19
|
+
onInvalidate(handler: (id: TenantId) => void): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=config-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/config-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,qBAAa,iBAAkB,YAAW,WAAW;;gBAIvC,IAAI,EAAE,wBAAwB;IAIpC,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAgB5D,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAqBlE,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;CAGpD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS DynamoDB adapter set.
|
|
3
|
+
*
|
|
4
|
+
* Single-table design with `pk` / `sk` primary key plus three GSIs:
|
|
5
|
+
*
|
|
6
|
+
* `family-index` hash = `family` (revokeFamily)
|
|
7
|
+
* `subject-index` hash = `subject_key` (revokeBySubject) — value is `<tenantId>#<subjectId>`
|
|
8
|
+
* `passkey-user-index` hash = `user_key` (PasskeyCredentialStore.findByUsername) — value is `<tenantId>#<userId>`
|
|
9
|
+
*
|
|
10
|
+
* The adapter satisfies every contract in `ports/CONSISTENCY.md` provided
|
|
11
|
+
* the underlying calls use `ConsistentRead=true` on the strong reads and
|
|
12
|
+
* `ConditionExpression` on the rotation `UpdateItem` — both are handled by
|
|
13
|
+
* `fromDynamoDBClient`.
|
|
14
|
+
*
|
|
15
|
+
* Wiring:
|
|
16
|
+
* @example
|
|
17
|
+
* import { DynamoDBClient } from "@aws-sdk/client-dynamodb"
|
|
18
|
+
* import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"
|
|
19
|
+
* import {
|
|
20
|
+
* fromDynamoDBClient,
|
|
21
|
+
* DynamoTokenStore,
|
|
22
|
+
* DynamoSessionStore,
|
|
23
|
+
* // ...
|
|
24
|
+
* } from "@_mustachio/openauth/adapters/dynamo"
|
|
25
|
+
*
|
|
26
|
+
* const docClient = DynamoDBDocumentClient.from(new DynamoDBClient({ region: "us-east-1" }))
|
|
27
|
+
* const exec = fromDynamoDBClient(docClient, "openauth")
|
|
28
|
+
* const keyStore = new DynamoKeyStore({ exec })
|
|
29
|
+
* const tokenStore = new DynamoTokenStore({ exec, keyStore })
|
|
30
|
+
*
|
|
31
|
+
* Table creation is left to the operator (Terraform / CDK / `aws dynamodb
|
|
32
|
+
* create-table`). The schema you need:
|
|
33
|
+
*
|
|
34
|
+
* Table: openauth (or any name you choose)
|
|
35
|
+
* Hash key: pk (S)
|
|
36
|
+
* Range key: sk (S)
|
|
37
|
+
* TTL attribute: `ttl` (epoch seconds)
|
|
38
|
+
*
|
|
39
|
+
* GSI: family-index
|
|
40
|
+
* Hash key: family (S)
|
|
41
|
+
* Projection: ALL
|
|
42
|
+
*
|
|
43
|
+
* GSI: subject-index
|
|
44
|
+
* Hash key: subject_key (S)
|
|
45
|
+
* Projection: ALL
|
|
46
|
+
*
|
|
47
|
+
* GSI: passkey-user-index
|
|
48
|
+
* Hash key: user_key (S)
|
|
49
|
+
* Projection: ALL
|
|
50
|
+
*/
|
|
51
|
+
export { DynamoAuditLog, type DynamoAuditLogOptions } from "./audit-log";
|
|
52
|
+
export { DynamoConfigStore, type DynamoConfigStoreOptions, } from "./config-store";
|
|
53
|
+
export { DynamoKeyStore, type DynamoKeyStoreOptions } from "./key-store";
|
|
54
|
+
export { DynamoMethodStore, type DynamoMethodStoreOptions, } from "./method-store";
|
|
55
|
+
export { DynamoSessionStore, type DynamoSessionStoreOptions, } from "./session-store";
|
|
56
|
+
export { DynamoTokenStore, type DynamoTokenStoreOptions } from "./token-store";
|
|
57
|
+
export { DynamoPasskeyCredentialStore, type DynamoPasskeyCredentialStoreOptions, } from "./passkey-credential-store";
|
|
58
|
+
export { fromDynamoDBClient } from "./sdk";
|
|
59
|
+
export type { DynamoDeleteInput, DynamoExecutor, DynamoGetInput, DynamoKey, DynamoPutInput, DynamoQueryByGsiInput, DynamoQueryInput, DynamoUpdateConsumeRefreshInput, DynamoUpdateItemInput, } from "./client";
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,gBAAgB,EAAE,KAAK,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EACL,4BAA4B,EAC5B,KAAK,mCAAmC,GACzC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAC1C,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EncryptionKey, KeyStore, KeyWrapper, SigningKey } from "../../ports/key-store";
|
|
2
|
+
import type { Result } from "../../types/result";
|
|
3
|
+
import type { DynamoExecutor } from "./client";
|
|
4
|
+
export type DynamoKeyStoreOptions = {
|
|
5
|
+
exec: DynamoExecutor;
|
|
6
|
+
clock?: () => number;
|
|
7
|
+
signingAlg?: "ES256" | "EdDSA";
|
|
8
|
+
/**
|
|
9
|
+
* Optional envelope that encrypts private JWKs and encryption-key bytes
|
|
10
|
+
* before they leave the process. STRONGLY RECOMMENDED in production.
|
|
11
|
+
* Pair with a cloud KMS or HSM-backed implementation.
|
|
12
|
+
*/
|
|
13
|
+
wrapper?: KeyWrapper;
|
|
14
|
+
};
|
|
15
|
+
export declare class DynamoKeyStore implements KeyStore {
|
|
16
|
+
#private;
|
|
17
|
+
constructor(opts: DynamoKeyStoreOptions);
|
|
18
|
+
currentSigningKey(): Promise<Result<SigningKey>>;
|
|
19
|
+
signingKeys(): Promise<Result<SigningKey[]>>;
|
|
20
|
+
currentEncryptionKey(): Promise<Result<EncryptionKey>>;
|
|
21
|
+
getEncryptionKey(kid: string): Promise<Result<EncryptionKey>>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=key-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/key-store.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACX,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB,CAAA;AAED,qBAAa,cAAe,YAAW,QAAQ;;gBAOjC,IAAI,EAAE,qBAAqB;IAOjC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAkBhD,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAU5C,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAkBtD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;CA+JpE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDB `MethodStore`. `pk="tenant-methods:<tenantId>"`, `sk=<methodId>`.
|
|
3
|
+
* Co-locating methods per-tenant lets `listMethods` use a single Query.
|
|
4
|
+
*/
|
|
5
|
+
import type { MethodStore } from "../../ports/method-store";
|
|
6
|
+
import type { Result } from "../../types/result";
|
|
7
|
+
import type { MethodConfig, TenantId } from "../../types/tenant";
|
|
8
|
+
import type { DynamoExecutor } from "./client";
|
|
9
|
+
export type DynamoMethodStoreOptions = {
|
|
10
|
+
exec: DynamoExecutor;
|
|
11
|
+
};
|
|
12
|
+
export declare class DynamoMethodStore implements MethodStore {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(opts: DynamoMethodStoreOptions);
|
|
15
|
+
listMethods(tenantId: TenantId): Promise<Result<MethodConfig[]>>;
|
|
16
|
+
getMethodConfig(tenantId: TenantId, methodId: string): Promise<Result<MethodConfig>>;
|
|
17
|
+
putMethodConfig(tenantId: TenantId, method: MethodConfig): Promise<Result<void>>;
|
|
18
|
+
deleteMethodConfig(tenantId: TenantId, methodId: string): Promise<Result<void>>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=method-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/method-store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAI9C,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,cAAc,CAAA;CACrB,CAAA;AAED,qBAAa,iBAAkB,YAAW,WAAW;;gBAGvC,IAAI,EAAE,wBAAwB;IAIpC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAgBhE,eAAe,CACnB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAqB1B,eAAe,CACnB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAgBlB,kBAAkB,CACtB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAYzB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DynamoDB `PasskeyCredentialStore`.
|
|
3
|
+
*
|
|
4
|
+
* Single-table layout, one item per credential:
|
|
5
|
+
*
|
|
6
|
+
* pk = "passkey-cred"
|
|
7
|
+
* sk = "<tenantId>#<credentialId>"
|
|
8
|
+
* user_key = "<tenantId>#<userId>" // GSI hash for findByUsername
|
|
9
|
+
* tenant_id, user_id, public_key, counter, transports, created_at
|
|
10
|
+
*
|
|
11
|
+
* Required GSI on the table (alongside `family-index` /
|
|
12
|
+
* `subject-index` from `DynamoTokenStore`):
|
|
13
|
+
*
|
|
14
|
+
* passkey-user-index
|
|
15
|
+
* Hash key: user_key (S)
|
|
16
|
+
* Projection: ALL
|
|
17
|
+
*
|
|
18
|
+
* The reference adapter treats `userId` as the username lookup key —
|
|
19
|
+
* matching the bundled `passkeyMethod`. Hosts that need
|
|
20
|
+
* username ≠ userId implement `PasskeyCredentialStore` directly.
|
|
21
|
+
*/
|
|
22
|
+
import type { PasskeyCredentialStore, StoredCredential } from "../../methods/passkey";
|
|
23
|
+
import type { DynamoExecutor } from "./client";
|
|
24
|
+
export type DynamoPasskeyCredentialStoreOptions = {
|
|
25
|
+
exec: DynamoExecutor;
|
|
26
|
+
clock?: () => number;
|
|
27
|
+
};
|
|
28
|
+
export declare class DynamoPasskeyCredentialStore implements PasskeyCredentialStore {
|
|
29
|
+
#private;
|
|
30
|
+
constructor(opts: DynamoPasskeyCredentialStoreOptions);
|
|
31
|
+
findByUsername(username: string, tenantId: string): Promise<{
|
|
32
|
+
userId: string;
|
|
33
|
+
credentials: StoredCredential[];
|
|
34
|
+
} | null>;
|
|
35
|
+
findById(credentialId: string, tenantId: string): Promise<StoredCredential | null>;
|
|
36
|
+
updateCounter(input: {
|
|
37
|
+
credentialId: string;
|
|
38
|
+
counter: number;
|
|
39
|
+
tenantId: string;
|
|
40
|
+
}): Promise<void>;
|
|
41
|
+
create(input: {
|
|
42
|
+
userId: string;
|
|
43
|
+
credential: StoredCredential;
|
|
44
|
+
tenantId: string;
|
|
45
|
+
}): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=passkey-credential-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passkey-credential-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/passkey-credential-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,MAAM,mCAAmC,GAAG;IAChD,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,4BAA6B,YAAW,sBAAsB;;gBAI7D,IAAI,EAAE,mCAAmC;IAK/C,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,gBAAgB,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAiBhE,QAAQ,CACZ,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAS7B,aAAa,CAAC,KAAK,EAAE;QACzB,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUX,MAAM,CAAC,KAAK,EAAE;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,UAAU,EAAE,gBAAgB,CAAA;QAC5B,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBlB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fromDynamoDBClient` — wires the `DynamoExecutor` interface to a real AWS
|
|
3
|
+
* SDK `DynamoDBDocumentClient`. Adapter consumers using AWS in production
|
|
4
|
+
* call this factory once, then pass the returned executor into every store
|
|
5
|
+
* adapter.
|
|
6
|
+
*
|
|
7
|
+
* The AWS SDK is imported via `@aws-sdk/lib-dynamodb` exclusively; the bare
|
|
8
|
+
* client is the caller's concern (they can configure region, creds, retries,
|
|
9
|
+
* etc.). This file is the **only** place in the package that imports the
|
|
10
|
+
* AWS SDK at runtime — keeping the adapter surface clean and the bundle
|
|
11
|
+
* lean for non-AWS consumers.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { DynamoDBClient } from "@aws-sdk/client-dynamodb"
|
|
15
|
+
* import { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb"
|
|
16
|
+
* const docClient = DynamoDBDocumentClient.from(new DynamoDBClient({}))
|
|
17
|
+
* const exec = fromDynamoDBClient(docClient, "openauth")
|
|
18
|
+
* const tokenStore = new DynamoTokenStore({ exec, keyStore })
|
|
19
|
+
*/
|
|
20
|
+
import type { DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";
|
|
21
|
+
import type { DynamoExecutor } from "./client";
|
|
22
|
+
export declare function fromDynamoDBClient(client: DynamoDBDocumentClient, tableName: string): DynamoExecutor;
|
|
23
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AASnE,OAAO,KAAK,EAEV,cAAc,EAOf,MAAM,UAAU,CAAA;AAEjB,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,sBAAsB,EAC9B,SAAS,EAAE,MAAM,GAChB,cAAc,CA4IhB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { FlowRecord } from "../../types/flow";
|
|
2
|
+
import type { SessionRecord, SessionStore } from "../../ports/session-store";
|
|
3
|
+
import type { Result } from "../../types/result";
|
|
4
|
+
import type { DynamoExecutor } from "./client";
|
|
5
|
+
export type DynamoSessionStoreOptions = {
|
|
6
|
+
exec: DynamoExecutor;
|
|
7
|
+
clock?: () => number;
|
|
8
|
+
};
|
|
9
|
+
export declare class DynamoSessionStore implements SessionStore {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(opts: DynamoSessionStoreOptions);
|
|
12
|
+
saveFlow(flowId: string, payload: FlowRecord, ttl: number): Promise<Result<void>>;
|
|
13
|
+
updateFlowMethodState(flowId: string, methodState: unknown): Promise<Result<void>>;
|
|
14
|
+
readFlow(flowId: string): Promise<Result<FlowRecord>>;
|
|
15
|
+
consumeFlow(flowId: string): Promise<Result<FlowRecord>>;
|
|
16
|
+
createSession(sessionId: string, payload: SessionRecord, ttl: number): Promise<Result<void>>;
|
|
17
|
+
readSession(sessionId: string): Promise<Result<SessionRecord>>;
|
|
18
|
+
revokeSession(sessionId: string): Promise<Result<void>>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/adapters/dynamo/session-store.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CACrB,CAAA;AAED,qBAAa,kBAAmB,YAAW,YAAY;;gBAIzC,IAAI,EAAE,yBAAyB;IAKrC,QAAQ,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAuBlB,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAoDlB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAsBrD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAkBxD,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAyBlB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAsB9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAQ9D"}
|