@robelest/convex-auth 0.0.4-preview.2 → 0.0.4-preview.21
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/README.md +67 -26
- package/dist/authorization/index.d.ts +63 -0
- package/dist/authorization/index.d.ts.map +1 -0
- package/dist/authorization/index.js +63 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/bin.js +6185 -0
- package/dist/client/core/types.d.ts +20 -0
- package/dist/client/core/types.d.ts.map +1 -0
- package/dist/client/index.d.ts +2 -299
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +407 -534
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +42 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +2546 -90
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/client/core/types.d.ts +2 -0
- package/dist/component/client/index.d.ts +2 -0
- package/dist/component/convex.config.d.ts +2 -2
- package/dist/component/functions.d.ts +11 -9
- package/dist/component/functions.d.ts.map +1 -1
- package/dist/component/functions.js.map +1 -1
- package/dist/component/index.d.ts +7 -11
- package/dist/component/index.js +2 -3
- package/dist/component/model.d.ts +153 -0
- package/dist/component/model.d.ts.map +1 -0
- package/dist/component/model.js +349 -0
- package/dist/component/model.js.map +1 -0
- package/dist/component/providers/anonymous.d.ts +54 -0
- package/dist/component/providers/anonymous.d.ts.map +1 -0
- package/dist/component/providers/credentials.d.ts +5 -5
- package/dist/component/providers/credentials.d.ts.map +1 -1
- package/dist/component/providers/device.d.ts +67 -0
- package/dist/component/providers/device.d.ts.map +1 -0
- package/dist/component/providers/email.d.ts +62 -0
- package/dist/component/providers/email.d.ts.map +1 -0
- package/dist/component/providers/oauth.d.ts.map +1 -1
- package/dist/component/providers/oauth.js.map +1 -1
- package/dist/component/providers/passkey.d.ts +57 -0
- package/dist/component/providers/passkey.d.ts.map +1 -0
- package/dist/component/providers/password.d.ts +88 -0
- package/dist/component/providers/password.d.ts.map +1 -0
- package/dist/component/providers/phone.d.ts +48 -0
- package/dist/component/providers/phone.d.ts.map +1 -0
- package/dist/component/providers/sso.d.ts +50 -0
- package/dist/component/providers/sso.d.ts.map +1 -0
- package/dist/component/providers/totp.d.ts +45 -0
- package/dist/component/providers/totp.d.ts.map +1 -0
- package/dist/component/public/enterprise/audit.d.ts +73 -0
- package/dist/component/public/enterprise/audit.d.ts.map +1 -0
- package/dist/component/public/enterprise/audit.js +108 -0
- package/dist/component/public/enterprise/audit.js.map +1 -0
- package/dist/component/public/enterprise/core.d.ts +176 -0
- package/dist/component/public/enterprise/core.d.ts.map +1 -0
- package/dist/component/public/enterprise/core.js +292 -0
- package/dist/component/public/enterprise/core.js.map +1 -0
- package/dist/component/public/enterprise/domains.d.ts +174 -0
- package/dist/component/public/enterprise/domains.d.ts.map +1 -0
- package/dist/component/public/enterprise/domains.js +271 -0
- package/dist/component/public/enterprise/domains.js.map +1 -0
- package/dist/component/public/enterprise/scim.d.ts +245 -0
- package/dist/component/public/enterprise/scim.d.ts.map +1 -0
- package/dist/component/public/enterprise/scim.js +344 -0
- package/dist/component/public/enterprise/scim.js.map +1 -0
- package/dist/component/public/enterprise/secrets.d.ts +78 -0
- package/dist/component/public/enterprise/secrets.d.ts.map +1 -0
- package/dist/component/public/enterprise/secrets.js +118 -0
- package/dist/component/public/enterprise/secrets.js.map +1 -0
- package/dist/component/public/enterprise/webhooks.d.ts +211 -0
- package/dist/component/public/enterprise/webhooks.d.ts.map +1 -0
- package/dist/component/public/enterprise/webhooks.js +300 -0
- package/dist/component/public/enterprise/webhooks.js.map +1 -0
- package/dist/component/public/factors/devices.d.ts +157 -0
- package/dist/component/public/factors/devices.d.ts.map +1 -0
- package/dist/component/public/factors/devices.js +216 -0
- package/dist/component/public/factors/devices.js.map +1 -0
- package/dist/component/public/factors/passkeys.d.ts +175 -0
- package/dist/component/public/factors/passkeys.d.ts.map +1 -0
- package/dist/component/public/factors/passkeys.js +238 -0
- package/dist/component/public/factors/passkeys.js.map +1 -0
- package/dist/component/public/factors/totp.d.ts +189 -0
- package/dist/component/public/factors/totp.d.ts.map +1 -0
- package/dist/component/public/factors/totp.js +254 -0
- package/dist/component/public/factors/totp.js.map +1 -0
- package/dist/component/public/groups/core.d.ts +137 -0
- package/dist/component/public/groups/core.d.ts.map +1 -0
- package/dist/component/public/groups/core.js +321 -0
- package/dist/component/public/groups/core.js.map +1 -0
- package/dist/component/public/groups/invites.d.ts +217 -0
- package/dist/component/public/groups/invites.d.ts.map +1 -0
- package/dist/component/public/groups/invites.js +457 -0
- package/dist/component/public/groups/invites.js.map +1 -0
- package/dist/component/public/groups/members.d.ts +204 -0
- package/dist/component/public/groups/members.d.ts.map +1 -0
- package/dist/component/public/groups/members.js +355 -0
- package/dist/component/public/groups/members.js.map +1 -0
- package/dist/component/public/identity/accounts.d.ts +147 -0
- package/dist/component/public/identity/accounts.d.ts.map +1 -0
- package/dist/component/public/identity/accounts.js +200 -0
- package/dist/component/public/identity/accounts.js.map +1 -0
- package/dist/component/public/identity/codes.d.ts +104 -0
- package/dist/component/public/identity/codes.d.ts.map +1 -0
- package/dist/component/public/identity/codes.js +140 -0
- package/dist/component/public/identity/codes.js.map +1 -0
- package/dist/component/public/identity/sessions.d.ts +128 -0
- package/dist/component/public/identity/sessions.d.ts.map +1 -0
- package/dist/component/public/identity/sessions.js +192 -0
- package/dist/component/public/identity/sessions.js.map +1 -0
- package/dist/component/public/identity/tokens.d.ts +169 -0
- package/dist/component/public/identity/tokens.d.ts.map +1 -0
- package/dist/component/public/identity/tokens.js +227 -0
- package/dist/component/public/identity/tokens.js.map +1 -0
- package/dist/component/public/identity/users.d.ts +212 -0
- package/dist/component/public/identity/users.d.ts.map +1 -0
- package/dist/component/public/identity/users.js +311 -0
- package/dist/component/public/identity/users.js.map +1 -0
- package/dist/component/public/identity/verifiers.d.ts +116 -0
- package/dist/component/public/identity/verifiers.d.ts.map +1 -0
- package/dist/component/public/identity/verifiers.js +154 -0
- package/dist/component/public/identity/verifiers.js.map +1 -0
- package/dist/component/public/security/keys.d.ts +209 -0
- package/dist/component/public/security/keys.d.ts.map +1 -0
- package/dist/component/public/security/keys.js +319 -0
- package/dist/component/public/security/keys.js.map +1 -0
- package/dist/component/public/security/limits.d.ts +114 -0
- package/dist/component/public/security/limits.d.ts.map +1 -0
- package/dist/component/public/security/limits.js +169 -0
- package/dist/component/public/security/limits.js.map +1 -0
- package/dist/component/public.d.ts +24 -271
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +21 -1229
- package/dist/component/schema.d.ts +473 -110
- package/dist/component/schema.js +162 -73
- package/dist/component/schema.js.map +1 -1
- package/dist/component/server/auth.d.ts +318 -373
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +204 -123
- package/dist/component/server/auth.js.map +1 -1
- package/dist/component/server/authError.js +34 -0
- package/dist/component/server/authError.js.map +1 -0
- package/dist/component/server/{providers.js → config.js} +43 -12
- package/dist/component/server/config.js.map +1 -0
- package/dist/component/server/cookies.js +3 -0
- package/dist/component/server/cookies.js.map +1 -1
- package/dist/component/server/core.js +713 -0
- package/dist/component/server/core.js.map +1 -0
- package/dist/component/server/crypto.js +38 -0
- package/dist/component/server/crypto.js.map +1 -0
- package/dist/component/server/{implementation/db.js → db.js} +2 -1
- package/dist/component/server/db.js.map +1 -0
- package/dist/component/server/device.js +109 -0
- package/dist/component/server/device.js.map +1 -0
- package/dist/component/server/enterprise/config.js +46 -0
- package/dist/component/server/enterprise/config.js.map +1 -0
- package/dist/component/server/enterprise/domain.js +885 -0
- package/dist/component/server/enterprise/domain.js.map +1 -0
- package/dist/component/server/enterprise/http.js +766 -0
- package/dist/component/server/enterprise/http.js.map +1 -0
- package/dist/component/server/enterprise/oidc.js +248 -0
- package/dist/component/server/enterprise/oidc.js.map +1 -0
- package/dist/component/server/enterprise/policy.js +85 -0
- package/dist/component/server/enterprise/policy.js.map +1 -0
- package/dist/component/server/enterprise/saml.js +338 -0
- package/dist/component/server/enterprise/saml.js.map +1 -0
- package/dist/component/server/enterprise/scim.js +97 -0
- package/dist/component/server/enterprise/scim.js.map +1 -0
- package/dist/component/server/enterprise/shared.js +51 -0
- package/dist/component/server/enterprise/shared.js.map +1 -0
- package/dist/component/server/errors.d.ts +1 -0
- package/dist/component/server/errors.js +24 -16
- package/dist/component/server/errors.js.map +1 -1
- package/dist/component/server/http.js +288 -0
- package/dist/component/server/http.js.map +1 -0
- package/dist/component/server/identity.js +13 -0
- package/dist/component/server/identity.js.map +1 -0
- package/dist/{server/implementation → component/server}/keys.js +9 -31
- package/dist/component/server/keys.js.map +1 -0
- package/dist/component/server/limits.js +61 -0
- package/dist/component/server/limits.js.map +1 -0
- package/dist/component/server/mutations/account.js +44 -0
- package/dist/component/server/mutations/account.js.map +1 -0
- package/dist/component/server/{implementation/mutations → mutations}/code.js +7 -4
- package/dist/component/server/mutations/code.js.map +1 -0
- package/dist/component/server/mutations/invalidate.js +32 -0
- package/dist/component/server/mutations/invalidate.js.map +1 -0
- package/dist/component/server/mutations/oauth.js +110 -0
- package/dist/component/server/mutations/oauth.js.map +1 -0
- package/dist/component/server/mutations/refresh.js +119 -0
- package/dist/component/server/mutations/refresh.js.map +1 -0
- package/dist/component/server/mutations/register.js +83 -0
- package/dist/component/server/mutations/register.js.map +1 -0
- package/dist/component/server/mutations/retrieve.js +65 -0
- package/dist/component/server/mutations/retrieve.js.map +1 -0
- package/dist/component/server/mutations/signature.js +32 -0
- package/dist/component/server/mutations/signature.js.map +1 -0
- package/dist/component/server/{implementation/mutations → mutations}/signin.js +2 -2
- package/dist/component/server/mutations/signin.js.map +1 -0
- package/dist/component/server/mutations/signout.js +27 -0
- package/dist/component/server/mutations/signout.js.map +1 -0
- package/dist/component/server/mutations/store/refs.js +15 -0
- package/dist/component/server/mutations/store/refs.js.map +1 -0
- package/dist/component/server/mutations/store.js +85 -0
- package/dist/component/server/mutations/store.js.map +1 -0
- package/dist/component/server/mutations/verifier.js +18 -0
- package/dist/component/server/mutations/verifier.js.map +1 -0
- package/dist/component/server/mutations/verify.js +98 -0
- package/dist/component/server/mutations/verify.js.map +1 -0
- package/dist/component/server/oauth.js +106 -60
- package/dist/component/server/oauth.js.map +1 -1
- package/dist/component/server/passkey.js +328 -0
- package/dist/component/server/passkey.js.map +1 -0
- package/dist/{server/implementation → component/server}/redirects.js +13 -11
- package/dist/component/server/redirects.js.map +1 -0
- package/dist/component/server/refresh.js +96 -0
- package/dist/component/server/refresh.js.map +1 -0
- package/dist/component/server/runtime.d.ts +136 -0
- package/dist/component/server/runtime.d.ts.map +1 -0
- package/dist/component/server/runtime.js +413 -0
- package/dist/component/server/runtime.js.map +1 -0
- package/dist/{server/implementation → component/server}/sessions.js +14 -8
- package/dist/component/server/sessions.js.map +1 -0
- package/dist/component/server/signin.js +201 -0
- package/dist/component/server/signin.js.map +1 -0
- package/dist/component/server/tokens.js +17 -0
- package/dist/component/server/tokens.js.map +1 -0
- package/dist/component/server/totp.js +148 -0
- package/dist/component/server/totp.js.map +1 -0
- package/dist/component/server/types.d.ts +387 -298
- package/dist/component/server/types.d.ts.map +1 -1
- package/dist/component/server/{implementation/types.js → types.js} +1 -1
- package/dist/component/server/types.js.map +1 -0
- package/dist/component/server/{implementation/users.js → users.js} +54 -35
- package/dist/component/server/users.js.map +1 -0
- package/dist/component/server/utils.js +110 -4
- package/dist/component/server/utils.js.map +1 -1
- package/dist/core/types.d.ts +369 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/factors/device.js +105 -0
- package/dist/factors/device.js.map +1 -0
- package/dist/factors/passkey.js +181 -0
- package/dist/factors/passkey.js.map +1 -0
- package/dist/factors/totp.js +122 -0
- package/dist/factors/totp.js.map +1 -0
- package/dist/providers/anonymous.d.ts +3 -9
- package/dist/providers/anonymous.d.ts.map +1 -1
- package/dist/providers/anonymous.js +1 -18
- package/dist/providers/anonymous.js.map +1 -1
- package/dist/providers/credentials.d.ts +8 -10
- package/dist/providers/credentials.d.ts.map +1 -1
- package/dist/providers/credentials.js +3 -5
- package/dist/providers/credentials.js.map +1 -1
- package/dist/providers/device.d.ts +18 -10
- package/dist/providers/device.d.ts.map +1 -1
- package/dist/providers/device.js +4 -8
- package/dist/providers/device.js.map +1 -1
- package/dist/providers/email.d.ts +50 -23
- package/dist/providers/email.d.ts.map +1 -1
- package/dist/providers/email.js +58 -34
- package/dist/providers/email.js.map +1 -1
- package/dist/providers/index.d.ts +7 -3
- package/dist/providers/index.js +4 -1
- package/dist/providers/oauth.d.ts.map +1 -1
- package/dist/providers/oauth.js.map +1 -1
- package/dist/providers/passkey.d.ts +12 -9
- package/dist/providers/passkey.d.ts.map +1 -1
- package/dist/providers/passkey.js +1 -7
- package/dist/providers/passkey.js.map +1 -1
- package/dist/providers/password.d.ts +6 -12
- package/dist/providers/password.d.ts.map +1 -1
- package/dist/providers/password.js +189 -89
- package/dist/providers/password.js.map +1 -1
- package/dist/providers/phone.d.ts +40 -11
- package/dist/providers/phone.d.ts.map +1 -1
- package/dist/providers/phone.js +52 -21
- package/dist/providers/phone.js.map +1 -1
- package/dist/providers/sso.d.ts +50 -0
- package/dist/providers/sso.d.ts.map +1 -0
- package/dist/providers/sso.js +34 -0
- package/dist/providers/sso.js.map +1 -0
- package/dist/providers/totp.d.ts +12 -9
- package/dist/providers/totp.d.ts.map +1 -1
- package/dist/providers/totp.js +1 -7
- package/dist/providers/totp.js.map +1 -1
- package/dist/runtime/browser.js +68 -0
- package/dist/runtime/browser.js.map +1 -0
- package/dist/runtime/invite.js +51 -0
- package/dist/runtime/invite.js.map +1 -0
- package/dist/runtime/proxy.js +70 -0
- package/dist/runtime/proxy.js.map +1 -0
- package/dist/runtime/storage.js +37 -0
- package/dist/runtime/storage.js.map +1 -0
- package/dist/server/auth.d.ts +335 -370
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +204 -123
- package/dist/server/auth.js.map +1 -1
- package/dist/server/authError.d.ts +46 -0
- package/dist/server/authError.d.ts.map +1 -0
- package/dist/server/authError.js +34 -0
- package/dist/server/authError.js.map +1 -0
- package/dist/server/config.d.ts +1 -0
- package/dist/server/{providers.js → config.js} +43 -12
- package/dist/server/config.js.map +1 -0
- package/dist/server/cookies.d.ts +1 -38
- package/dist/server/cookies.js +3 -0
- package/dist/server/cookies.js.map +1 -1
- package/dist/server/core.d.ts +1436 -0
- package/dist/server/core.d.ts.map +1 -0
- package/dist/server/core.js +713 -0
- package/dist/server/core.js.map +1 -0
- package/dist/server/crypto.d.ts +8 -0
- package/dist/server/crypto.d.ts.map +1 -0
- package/dist/server/crypto.js +38 -0
- package/dist/server/crypto.js.map +1 -0
- package/dist/server/db.d.ts +1 -0
- package/dist/server/{implementation/db.js → db.js} +2 -1
- package/dist/server/db.js.map +1 -0
- package/dist/server/device.d.ts +1 -0
- package/dist/server/device.js +109 -0
- package/dist/server/device.js.map +1 -0
- package/dist/server/enterprise/config.d.ts +1 -0
- package/dist/server/enterprise/config.js +46 -0
- package/dist/server/enterprise/config.js.map +1 -0
- package/dist/server/enterprise/domain.d.ts +409 -0
- package/dist/server/enterprise/domain.d.ts.map +1 -0
- package/dist/server/enterprise/domain.js +885 -0
- package/dist/server/enterprise/domain.js.map +1 -0
- package/dist/server/enterprise/http.d.ts +26 -0
- package/dist/server/enterprise/http.d.ts.map +1 -0
- package/dist/server/enterprise/http.js +766 -0
- package/dist/server/enterprise/http.js.map +1 -0
- package/dist/server/enterprise/oidc.d.ts +1 -0
- package/dist/server/enterprise/oidc.js +248 -0
- package/dist/server/enterprise/oidc.js.map +1 -0
- package/dist/server/enterprise/policy.d.ts +1 -0
- package/dist/server/enterprise/policy.js +85 -0
- package/dist/server/enterprise/policy.js.map +1 -0
- package/dist/server/enterprise/saml.d.ts +1 -0
- package/dist/server/enterprise/saml.js +338 -0
- package/dist/server/enterprise/saml.js.map +1 -0
- package/dist/server/enterprise/scim.d.ts +1 -0
- package/dist/server/enterprise/scim.js +97 -0
- package/dist/server/enterprise/scim.js.map +1 -0
- package/dist/server/enterprise/shared.d.ts +5 -0
- package/dist/server/enterprise/shared.d.ts.map +1 -0
- package/dist/server/enterprise/shared.js +51 -0
- package/dist/server/enterprise/shared.js.map +1 -0
- package/dist/server/enterprise/validators.d.ts +1 -0
- package/dist/server/enterprise/validators.js +60 -0
- package/dist/server/enterprise/validators.js.map +1 -0
- package/dist/server/errors.d.ts +33 -1
- package/dist/server/errors.d.ts.map +1 -1
- package/dist/server/errors.js +44 -1
- package/dist/server/errors.js.map +1 -1
- package/dist/server/http.d.ts +59 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +288 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/identity.d.ts +1 -0
- package/dist/server/identity.js +13 -0
- package/dist/server/identity.js.map +1 -0
- package/dist/server/index.d.ts +4 -182
- package/dist/server/index.js +4 -376
- package/dist/server/keys.d.ts +1 -0
- package/dist/{component/server/implementation → server}/keys.js +9 -31
- package/dist/server/keys.js.map +1 -0
- package/dist/server/limits.d.ts +1 -0
- package/dist/server/limits.js +61 -0
- package/dist/server/limits.js.map +1 -0
- package/dist/server/mounts.d.ts +647 -0
- package/dist/server/mounts.d.ts.map +1 -0
- package/dist/server/mounts.js +643 -0
- package/dist/server/mounts.js.map +1 -0
- package/dist/server/mutations/account.d.ts +30 -0
- package/dist/server/mutations/account.d.ts.map +1 -0
- package/dist/server/mutations/account.js +44 -0
- package/dist/server/mutations/account.js.map +1 -0
- package/dist/server/mutations/code.d.ts +30 -0
- package/dist/server/mutations/code.d.ts.map +1 -0
- package/dist/server/{implementation/mutations → mutations}/code.js +7 -4
- package/dist/server/mutations/code.js.map +1 -0
- package/dist/server/mutations/index.d.ts +14 -0
- package/dist/server/mutations/index.js +15 -0
- package/dist/server/mutations/invalidate.d.ts +20 -0
- package/dist/server/mutations/invalidate.d.ts.map +1 -0
- package/dist/server/mutations/invalidate.js +32 -0
- package/dist/server/mutations/invalidate.js.map +1 -0
- package/dist/server/mutations/oauth.d.ts +28 -0
- package/dist/server/mutations/oauth.d.ts.map +1 -0
- package/dist/server/mutations/oauth.js +110 -0
- package/dist/server/mutations/oauth.js.map +1 -0
- package/dist/server/mutations/refresh.d.ts +21 -0
- package/dist/server/mutations/refresh.d.ts.map +1 -0
- package/dist/server/mutations/refresh.js +119 -0
- package/dist/server/mutations/refresh.js.map +1 -0
- package/dist/server/mutations/register.d.ts +38 -0
- package/dist/server/mutations/register.d.ts.map +1 -0
- package/dist/server/mutations/register.js +83 -0
- package/dist/server/mutations/register.js.map +1 -0
- package/dist/server/mutations/retrieve.d.ts +33 -0
- package/dist/server/mutations/retrieve.d.ts.map +1 -0
- package/dist/server/mutations/retrieve.js +65 -0
- package/dist/server/mutations/retrieve.js.map +1 -0
- package/dist/server/mutations/signature.d.ts +22 -0
- package/dist/server/mutations/signature.d.ts.map +1 -0
- package/dist/server/mutations/signature.js +32 -0
- package/dist/server/mutations/signature.js.map +1 -0
- package/dist/server/mutations/signin.d.ts +22 -0
- package/dist/server/mutations/signin.d.ts.map +1 -0
- package/dist/server/{implementation/mutations → mutations}/signin.js +2 -2
- package/dist/server/mutations/signin.js.map +1 -0
- package/dist/server/mutations/signout.d.ts +16 -0
- package/dist/server/mutations/signout.d.ts.map +1 -0
- package/dist/server/mutations/signout.js +27 -0
- package/dist/server/mutations/signout.js.map +1 -0
- package/dist/server/mutations/store/refs.d.ts +12 -0
- package/dist/server/mutations/store/refs.d.ts.map +1 -0
- package/dist/server/mutations/store/refs.js +15 -0
- package/dist/server/mutations/store/refs.js.map +1 -0
- package/dist/server/mutations/store.d.ts +306 -0
- package/dist/server/mutations/store.d.ts.map +1 -0
- package/dist/server/mutations/store.js +85 -0
- package/dist/server/mutations/store.js.map +1 -0
- package/dist/server/mutations/verifier.d.ts +13 -0
- package/dist/server/mutations/verifier.d.ts.map +1 -0
- package/dist/server/mutations/verifier.js +18 -0
- package/dist/server/mutations/verifier.js.map +1 -0
- package/dist/server/mutations/verify.d.ts +26 -0
- package/dist/server/mutations/verify.d.ts.map +1 -0
- package/dist/server/mutations/verify.js +98 -0
- package/dist/server/mutations/verify.js.map +1 -0
- package/dist/server/oauth.d.ts +1 -48
- package/dist/server/oauth.js +107 -64
- package/dist/server/oauth.js.map +1 -1
- package/dist/server/passkey.d.ts +27 -0
- package/dist/server/passkey.d.ts.map +1 -0
- package/dist/server/passkey.js +328 -0
- package/dist/server/passkey.js.map +1 -0
- package/dist/server/redirects.d.ts +1 -0
- package/dist/{component/server/implementation → server}/redirects.js +13 -11
- package/dist/server/redirects.js.map +1 -0
- package/dist/server/refresh.d.ts +1 -0
- package/dist/server/refresh.js +96 -0
- package/dist/server/refresh.js.map +1 -0
- package/dist/server/runtime.d.ts +136 -0
- package/dist/server/runtime.d.ts.map +1 -0
- package/dist/server/runtime.js +413 -0
- package/dist/server/runtime.js.map +1 -0
- package/dist/server/sessions.d.ts +1 -0
- package/dist/{component/server/implementation → server}/sessions.js +14 -8
- package/dist/server/sessions.js.map +1 -0
- package/dist/server/signin.d.ts +1 -0
- package/dist/server/signin.js +201 -0
- package/dist/server/signin.js.map +1 -0
- package/dist/server/ssr.d.ts +226 -0
- package/dist/server/ssr.d.ts.map +1 -0
- package/dist/server/ssr.js +786 -0
- package/dist/server/ssr.js.map +1 -0
- package/dist/server/templates.d.ts +1 -21
- package/dist/server/templates.js +2 -1
- package/dist/server/templates.js.map +1 -1
- package/dist/server/tokens.d.ts +1 -0
- package/dist/server/tokens.js +17 -0
- package/dist/server/tokens.js.map +1 -0
- package/dist/server/totp.d.ts +1 -0
- package/dist/server/totp.js +148 -0
- package/dist/server/totp.js.map +1 -0
- package/dist/server/types.d.ts +498 -306
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +108 -1
- package/dist/server/types.js.map +1 -0
- package/dist/server/users.d.ts +1 -0
- package/dist/server/{implementation/users.js → users.js} +54 -35
- package/dist/server/users.js.map +1 -0
- package/dist/server/utils.d.ts +1 -6
- package/dist/server/utils.js +110 -4
- package/dist/server/utils.js.map +1 -1
- package/package.json +49 -46
- package/src/authorization/index.ts +83 -0
- package/src/cli/bin.ts +5 -0
- package/src/cli/command.ts +6 -5
- package/src/cli/index.ts +456 -248
- package/src/cli/keys.ts +3 -0
- package/src/client/core/types.ts +437 -0
- package/src/client/factors/device.ts +160 -0
- package/src/client/factors/passkey.ts +282 -0
- package/src/client/factors/totp.ts +150 -0
- package/src/client/index.ts +745 -989
- package/src/client/runtime/browser.ts +112 -0
- package/src/client/runtime/invite.ts +65 -0
- package/src/client/runtime/proxy.ts +111 -0
- package/src/client/runtime/storage.ts +79 -0
- package/src/component/_generated/api.ts +42 -0
- package/src/component/_generated/component.ts +3123 -102
- package/src/component/functions.ts +38 -22
- package/src/component/index.ts +10 -20
- package/src/component/model.ts +449 -0
- package/src/component/public/enterprise/audit.ts +120 -0
- package/src/component/public/enterprise/core.ts +354 -0
- package/src/component/public/enterprise/domains.ts +323 -0
- package/src/component/public/enterprise/scim.ts +396 -0
- package/src/component/public/enterprise/secrets.ts +132 -0
- package/src/component/public/enterprise/webhooks.ts +306 -0
- package/src/component/public/factors/devices.ts +223 -0
- package/src/component/public/factors/passkeys.ts +242 -0
- package/src/component/public/factors/totp.ts +258 -0
- package/src/component/public/groups/core.ts +481 -0
- package/src/component/public/groups/invites.ts +602 -0
- package/src/component/public/groups/members.ts +409 -0
- package/src/component/public/identity/accounts.ts +206 -0
- package/src/component/public/identity/codes.ts +148 -0
- package/src/component/public/identity/sessions.ts +209 -0
- package/src/component/public/identity/tokens.ts +250 -0
- package/src/component/public/identity/users.ts +354 -0
- package/src/component/public/identity/verifiers.ts +157 -0
- package/src/component/public/security/keys.ts +365 -0
- package/src/component/public/security/limits.ts +173 -0
- package/src/component/public.ts +26 -1766
- package/src/component/schema.ts +273 -100
- package/src/providers/anonymous.ts +10 -20
- package/src/providers/credentials.ts +14 -22
- package/src/providers/device.ts +3 -14
- package/src/providers/email.ts +83 -47
- package/src/providers/index.ts +7 -0
- package/src/providers/oauth.ts +5 -3
- package/src/providers/passkey.ts +0 -13
- package/src/providers/password.ts +307 -130
- package/src/providers/phone.ts +81 -37
- package/src/providers/sso.ts +54 -0
- package/src/providers/totp.ts +0 -13
- package/src/samlify.d.ts +53 -0
- package/src/server/auth.ts +701 -247
- package/src/server/authError.ts +44 -0
- package/src/server/{providers.ts → config.ts} +84 -15
- package/src/server/cookies.ts +8 -1
- package/src/server/core.ts +2095 -0
- package/src/server/crypto.ts +88 -0
- package/src/server/{implementation/db.ts → db.ts} +90 -15
- package/src/server/device.ts +221 -0
- package/src/server/enterprise/config.ts +51 -0
- package/src/server/enterprise/domain.ts +1751 -0
- package/src/server/enterprise/http.ts +1324 -0
- package/src/server/enterprise/oidc.ts +500 -0
- package/src/server/enterprise/policy.ts +128 -0
- package/src/server/enterprise/saml.ts +578 -0
- package/src/server/enterprise/scim.ts +135 -0
- package/src/server/enterprise/shared.ts +134 -0
- package/src/server/enterprise/validators.ts +93 -0
- package/src/server/errors.ts +130 -119
- package/src/server/http.ts +531 -0
- package/src/server/identity.ts +18 -0
- package/src/server/index.ts +32 -650
- package/src/server/{implementation/keys.ts → keys.ts} +16 -44
- package/src/server/limits.ts +134 -0
- package/src/server/mounts.ts +948 -0
- package/src/server/mutations/account.ts +76 -0
- package/src/server/{implementation/mutations → mutations}/code.ts +22 -11
- package/src/server/mutations/index.ts +13 -0
- package/src/server/mutations/invalidate.ts +50 -0
- package/src/server/mutations/oauth.ts +237 -0
- package/src/server/mutations/refresh.ts +298 -0
- package/src/server/mutations/register.ts +200 -0
- package/src/server/mutations/retrieve.ts +109 -0
- package/src/server/mutations/signature.ts +50 -0
- package/src/server/{implementation/mutations → mutations}/signin.ts +9 -7
- package/src/server/mutations/signout.ts +43 -0
- package/src/server/mutations/store/refs.ts +10 -0
- package/src/server/mutations/store.ts +138 -0
- package/src/server/mutations/verifier.ts +34 -0
- package/src/server/mutations/verify.ts +202 -0
- package/src/server/oauth.ts +243 -131
- package/src/server/passkey.ts +784 -0
- package/src/server/{implementation/redirects.ts → redirects.ts} +21 -16
- package/src/server/refresh.ts +222 -0
- package/src/server/runtime.ts +880 -0
- package/src/server/{implementation/sessions.ts → sessions.ts} +33 -25
- package/src/server/signin.ts +438 -0
- package/src/server/ssr.ts +1764 -0
- package/src/server/templates.ts +8 -3
- package/src/server/{implementation/tokens.ts → tokens.ts} +11 -5
- package/src/server/totp.ts +349 -0
- package/src/server/types.ts +972 -207
- package/src/server/{implementation/users.ts → users.ts} +129 -75
- package/src/server/utils.ts +192 -5
- package/src/test.ts +28 -4
- package/dist/bin.cjs +0 -27757
- package/dist/component/providers/email.js +0 -47
- package/dist/component/providers/email.js.map +0 -1
- package/dist/component/public.js.map +0 -1
- package/dist/component/server/implementation/db.js.map +0 -1
- package/dist/component/server/implementation/device.js +0 -135
- package/dist/component/server/implementation/device.js.map +0 -1
- package/dist/component/server/implementation/index.d.ts +0 -870
- package/dist/component/server/implementation/index.d.ts.map +0 -1
- package/dist/component/server/implementation/index.js +0 -610
- package/dist/component/server/implementation/index.js.map +0 -1
- package/dist/component/server/implementation/keys.js.map +0 -1
- package/dist/component/server/implementation/mutations/account.js +0 -39
- package/dist/component/server/implementation/mutations/account.js.map +0 -1
- package/dist/component/server/implementation/mutations/code.js.map +0 -1
- package/dist/component/server/implementation/mutations/index.js +0 -70
- package/dist/component/server/implementation/mutations/index.js.map +0 -1
- package/dist/component/server/implementation/mutations/invalidate.js +0 -29
- package/dist/component/server/implementation/mutations/invalidate.js.map +0 -1
- package/dist/component/server/implementation/mutations/oauth.js +0 -51
- package/dist/component/server/implementation/mutations/oauth.js.map +0 -1
- package/dist/component/server/implementation/mutations/refresh.js +0 -85
- package/dist/component/server/implementation/mutations/refresh.js.map +0 -1
- package/dist/component/server/implementation/mutations/register.js +0 -65
- package/dist/component/server/implementation/mutations/register.js.map +0 -1
- package/dist/component/server/implementation/mutations/retrieve.js +0 -50
- package/dist/component/server/implementation/mutations/retrieve.js.map +0 -1
- package/dist/component/server/implementation/mutations/signature.js +0 -27
- package/dist/component/server/implementation/mutations/signature.js.map +0 -1
- package/dist/component/server/implementation/mutations/signin.js.map +0 -1
- package/dist/component/server/implementation/mutations/signout.js +0 -27
- package/dist/component/server/implementation/mutations/signout.js.map +0 -1
- package/dist/component/server/implementation/mutations/store.js +0 -12
- package/dist/component/server/implementation/mutations/store.js.map +0 -1
- package/dist/component/server/implementation/mutations/verifier.js +0 -16
- package/dist/component/server/implementation/mutations/verifier.js.map +0 -1
- package/dist/component/server/implementation/mutations/verify.js +0 -105
- package/dist/component/server/implementation/mutations/verify.js.map +0 -1
- package/dist/component/server/implementation/passkey.js +0 -307
- package/dist/component/server/implementation/passkey.js.map +0 -1
- package/dist/component/server/implementation/provider.js +0 -19
- package/dist/component/server/implementation/provider.js.map +0 -1
- package/dist/component/server/implementation/ratelimit.js +0 -48
- package/dist/component/server/implementation/ratelimit.js.map +0 -1
- package/dist/component/server/implementation/redirects.js.map +0 -1
- package/dist/component/server/implementation/refresh.js +0 -109
- package/dist/component/server/implementation/refresh.js.map +0 -1
- package/dist/component/server/implementation/sessions.js.map +0 -1
- package/dist/component/server/implementation/signin.js +0 -148
- package/dist/component/server/implementation/signin.js.map +0 -1
- package/dist/component/server/implementation/tokens.js +0 -15
- package/dist/component/server/implementation/tokens.js.map +0 -1
- package/dist/component/server/implementation/totp.js +0 -142
- package/dist/component/server/implementation/totp.js.map +0 -1
- package/dist/component/server/implementation/types.d.ts +0 -42
- package/dist/component/server/implementation/types.d.ts.map +0 -1
- package/dist/component/server/implementation/types.js.map +0 -1
- package/dist/component/server/implementation/users.js.map +0 -1
- package/dist/component/server/implementation/utils.js +0 -56
- package/dist/component/server/implementation/utils.js.map +0 -1
- package/dist/component/server/providers.js.map +0 -1
- package/dist/component/server/templates.js +0 -84
- package/dist/component/server/templates.js.map +0 -1
- package/dist/server/cookies.d.ts.map +0 -1
- package/dist/server/implementation/db.d.ts +0 -86
- package/dist/server/implementation/db.d.ts.map +0 -1
- package/dist/server/implementation/db.js.map +0 -1
- package/dist/server/implementation/device.d.ts +0 -30
- package/dist/server/implementation/device.d.ts.map +0 -1
- package/dist/server/implementation/device.js +0 -135
- package/dist/server/implementation/device.js.map +0 -1
- package/dist/server/implementation/index.d.ts +0 -870
- package/dist/server/implementation/index.d.ts.map +0 -1
- package/dist/server/implementation/index.js +0 -610
- package/dist/server/implementation/index.js.map +0 -1
- package/dist/server/implementation/keys.d.ts +0 -66
- package/dist/server/implementation/keys.d.ts.map +0 -1
- package/dist/server/implementation/keys.js.map +0 -1
- package/dist/server/implementation/mutations/account.d.ts +0 -27
- package/dist/server/implementation/mutations/account.d.ts.map +0 -1
- package/dist/server/implementation/mutations/account.js +0 -39
- package/dist/server/implementation/mutations/account.js.map +0 -1
- package/dist/server/implementation/mutations/code.d.ts +0 -29
- package/dist/server/implementation/mutations/code.d.ts.map +0 -1
- package/dist/server/implementation/mutations/code.js.map +0 -1
- package/dist/server/implementation/mutations/index.d.ts +0 -310
- package/dist/server/implementation/mutations/index.d.ts.map +0 -1
- package/dist/server/implementation/mutations/index.js +0 -70
- package/dist/server/implementation/mutations/index.js.map +0 -1
- package/dist/server/implementation/mutations/invalidate.d.ts +0 -18
- package/dist/server/implementation/mutations/invalidate.d.ts.map +0 -1
- package/dist/server/implementation/mutations/invalidate.js +0 -29
- package/dist/server/implementation/mutations/invalidate.js.map +0 -1
- package/dist/server/implementation/mutations/oauth.d.ts +0 -23
- package/dist/server/implementation/mutations/oauth.d.ts.map +0 -1
- package/dist/server/implementation/mutations/oauth.js +0 -51
- package/dist/server/implementation/mutations/oauth.js.map +0 -1
- package/dist/server/implementation/mutations/refresh.d.ts +0 -20
- package/dist/server/implementation/mutations/refresh.d.ts.map +0 -1
- package/dist/server/implementation/mutations/refresh.js +0 -85
- package/dist/server/implementation/mutations/refresh.js.map +0 -1
- package/dist/server/implementation/mutations/register.d.ts +0 -37
- package/dist/server/implementation/mutations/register.d.ts.map +0 -1
- package/dist/server/implementation/mutations/register.js +0 -65
- package/dist/server/implementation/mutations/register.js.map +0 -1
- package/dist/server/implementation/mutations/retrieve.d.ts +0 -31
- package/dist/server/implementation/mutations/retrieve.d.ts.map +0 -1
- package/dist/server/implementation/mutations/retrieve.js +0 -50
- package/dist/server/implementation/mutations/retrieve.js.map +0 -1
- package/dist/server/implementation/mutations/signature.d.ts +0 -19
- package/dist/server/implementation/mutations/signature.d.ts.map +0 -1
- package/dist/server/implementation/mutations/signature.js +0 -27
- package/dist/server/implementation/mutations/signature.js.map +0 -1
- package/dist/server/implementation/mutations/signin.d.ts +0 -21
- package/dist/server/implementation/mutations/signin.d.ts.map +0 -1
- package/dist/server/implementation/mutations/signin.js.map +0 -1
- package/dist/server/implementation/mutations/signout.d.ts +0 -14
- package/dist/server/implementation/mutations/signout.d.ts.map +0 -1
- package/dist/server/implementation/mutations/signout.js +0 -27
- package/dist/server/implementation/mutations/signout.js.map +0 -1
- package/dist/server/implementation/mutations/store.d.ts +0 -11
- package/dist/server/implementation/mutations/store.d.ts.map +0 -1
- package/dist/server/implementation/mutations/store.js +0 -12
- package/dist/server/implementation/mutations/store.js.map +0 -1
- package/dist/server/implementation/mutations/verifier.d.ts +0 -11
- package/dist/server/implementation/mutations/verifier.d.ts.map +0 -1
- package/dist/server/implementation/mutations/verifier.js +0 -16
- package/dist/server/implementation/mutations/verifier.js.map +0 -1
- package/dist/server/implementation/mutations/verify.d.ts +0 -25
- package/dist/server/implementation/mutations/verify.d.ts.map +0 -1
- package/dist/server/implementation/mutations/verify.js +0 -105
- package/dist/server/implementation/mutations/verify.js.map +0 -1
- package/dist/server/implementation/passkey.d.ts +0 -24
- package/dist/server/implementation/passkey.d.ts.map +0 -1
- package/dist/server/implementation/passkey.js +0 -307
- package/dist/server/implementation/passkey.js.map +0 -1
- package/dist/server/implementation/provider.d.ts +0 -10
- package/dist/server/implementation/provider.d.ts.map +0 -1
- package/dist/server/implementation/provider.js +0 -19
- package/dist/server/implementation/provider.js.map +0 -1
- package/dist/server/implementation/ratelimit.d.ts +0 -10
- package/dist/server/implementation/ratelimit.d.ts.map +0 -1
- package/dist/server/implementation/ratelimit.js +0 -48
- package/dist/server/implementation/ratelimit.js.map +0 -1
- package/dist/server/implementation/redirects.d.ts +0 -10
- package/dist/server/implementation/redirects.d.ts.map +0 -1
- package/dist/server/implementation/redirects.js.map +0 -1
- package/dist/server/implementation/refresh.d.ts +0 -37
- package/dist/server/implementation/refresh.d.ts.map +0 -1
- package/dist/server/implementation/refresh.js +0 -109
- package/dist/server/implementation/refresh.js.map +0 -1
- package/dist/server/implementation/sessions.d.ts +0 -29
- package/dist/server/implementation/sessions.d.ts.map +0 -1
- package/dist/server/implementation/sessions.js.map +0 -1
- package/dist/server/implementation/signin.d.ts +0 -55
- package/dist/server/implementation/signin.d.ts.map +0 -1
- package/dist/server/implementation/signin.js +0 -148
- package/dist/server/implementation/signin.js.map +0 -1
- package/dist/server/implementation/tokens.d.ts +0 -11
- package/dist/server/implementation/tokens.d.ts.map +0 -1
- package/dist/server/implementation/tokens.js +0 -15
- package/dist/server/implementation/tokens.js.map +0 -1
- package/dist/server/implementation/totp.d.ts +0 -31
- package/dist/server/implementation/totp.d.ts.map +0 -1
- package/dist/server/implementation/totp.js +0 -142
- package/dist/server/implementation/totp.js.map +0 -1
- package/dist/server/implementation/types.d.ts +0 -189
- package/dist/server/implementation/types.d.ts.map +0 -1
- package/dist/server/implementation/types.js +0 -97
- package/dist/server/implementation/types.js.map +0 -1
- package/dist/server/implementation/users.d.ts +0 -30
- package/dist/server/implementation/users.d.ts.map +0 -1
- package/dist/server/implementation/users.js.map +0 -1
- package/dist/server/implementation/utils.d.ts +0 -19
- package/dist/server/implementation/utils.d.ts.map +0 -1
- package/dist/server/implementation/utils.js +0 -56
- package/dist/server/implementation/utils.js.map +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/oauth.d.ts.map +0 -1
- package/dist/server/providers.d.ts +0 -72
- package/dist/server/providers.d.ts.map +0 -1
- package/dist/server/providers.js.map +0 -1
- package/dist/server/templates.d.ts.map +0 -1
- package/dist/server/utils.d.ts.map +0 -1
- package/dist/server/version.d.ts +0 -5
- package/dist/server/version.d.ts.map +0 -1
- package/dist/server/version.js +0 -6
- package/dist/server/version.js.map +0 -1
- package/src/cli/utils.ts +0 -248
- package/src/server/implementation/device.ts +0 -307
- package/src/server/implementation/index.ts +0 -1583
- package/src/server/implementation/mutations/account.ts +0 -50
- package/src/server/implementation/mutations/index.ts +0 -157
- package/src/server/implementation/mutations/invalidate.ts +0 -42
- package/src/server/implementation/mutations/oauth.ts +0 -73
- package/src/server/implementation/mutations/refresh.ts +0 -175
- package/src/server/implementation/mutations/register.ts +0 -100
- package/src/server/implementation/mutations/retrieve.ts +0 -79
- package/src/server/implementation/mutations/signature.ts +0 -39
- package/src/server/implementation/mutations/signout.ts +0 -35
- package/src/server/implementation/mutations/store.ts +0 -7
- package/src/server/implementation/mutations/verifier.ts +0 -24
- package/src/server/implementation/mutations/verify.ts +0 -194
- package/src/server/implementation/passkey.ts +0 -620
- package/src/server/implementation/provider.ts +0 -36
- package/src/server/implementation/ratelimit.ts +0 -79
- package/src/server/implementation/refresh.ts +0 -172
- package/src/server/implementation/signin.ts +0 -296
- package/src/server/implementation/totp.ts +0 -342
- package/src/server/implementation/types.ts +0 -444
- package/src/server/implementation/utils.ts +0 -91
- package/src/server/version.ts +0 -2
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AuthError } from "./authError.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/identity.ts
|
|
4
|
+
/** @internal */
|
|
5
|
+
function userIdFromIdentitySubject(subject) {
|
|
6
|
+
const [userId, ...rest] = subject.split("|");
|
|
7
|
+
if (typeof userId !== "string" || userId.length === 0 || rest.length === 0 || rest.some((segment) => segment.length === 0)) throw new AuthError("INTERNAL_ERROR", "Authenticated identity subject is malformed.");
|
|
8
|
+
return userId;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { userIdFromIdentitySubject };
|
|
13
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","names":[],"sources":["../../src/server/identity.ts"],"sourcesContent":["import { AuthError } from \"./authError\";\n\n/** @internal */\nexport function userIdFromIdentitySubject(subject: string): string {\n const [userId, ...rest] = subject.split(\"|\");\n if (\n typeof userId !== \"string\" ||\n userId.length === 0 ||\n rest.length === 0 ||\n rest.some((segment) => segment.length === 0)\n ) {\n throw new AuthError(\n \"INTERNAL_ERROR\",\n \"Authenticated identity subject is malformed.\",\n );\n }\n return userId;\n}\n"],"mappings":";;;;AAGA,SAAgB,0BAA0B,SAAyB;CACjE,MAAM,CAAC,QAAQ,GAAG,QAAQ,QAAQ,MAAM,IAAI;AAC5C,KACE,OAAO,WAAW,YAClB,OAAO,WAAW,KAClB,KAAK,WAAW,KAChB,KAAK,MAAM,YAAY,QAAQ,WAAW,EAAE,CAE5C,OAAM,IAAI,UACR,kBACA,+CACD;AAEH,QAAO"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,182 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
};
|
|
6
|
-
/** Raw cookie values extracted from a request. */
|
|
7
|
-
type AuthCookies = {
|
|
8
|
-
/** The JWT access token, or `null` when absent. */token: string | null; /** The refresh token, or `null` when absent. */
|
|
9
|
-
refreshToken: string | null; /** The OAuth PKCE verifier, or `null` when absent. */
|
|
10
|
-
verifier: string | null;
|
|
11
|
-
};
|
|
12
|
-
/** A structured cookie ready to be set via any framework's cookie API. */
|
|
13
|
-
type AuthCookie = {
|
|
14
|
-
name: string;
|
|
15
|
-
value: string;
|
|
16
|
-
options: {
|
|
17
|
-
path: string;
|
|
18
|
-
httpOnly: boolean;
|
|
19
|
-
secure: boolean;
|
|
20
|
-
sameSite: "lax" | "strict" | "none";
|
|
21
|
-
maxAge?: number;
|
|
22
|
-
expires?: Date;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Options for the SSR auth helper returned by {@link server}.
|
|
27
|
-
*/
|
|
28
|
-
type ServerOptions = {
|
|
29
|
-
/** Convex deployment URL (e.g. `https://your-app.convex.cloud`). */url: string;
|
|
30
|
-
/**
|
|
31
|
-
* Path the client POSTs auth actions to. Defaults to `"/api/auth"`.
|
|
32
|
-
* Must match the `proxy` option on the client.
|
|
33
|
-
*/
|
|
34
|
-
apiRoute?: string; /** Cookie `maxAge` in seconds, or `null` for session cookies. */
|
|
35
|
-
cookieMaxAge?: number | null; /** Enable verbose debug logging for token refresh and cookie operations. */
|
|
36
|
-
verbose?: boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Control whether `refresh()` handles OAuth `?code=` query parameters.
|
|
39
|
-
*
|
|
40
|
-
* - `true` (default): always exchange the code on GET requests with `text/html` accept.
|
|
41
|
-
* - `false`: never exchange — useful when only the client handles codes.
|
|
42
|
-
* - A function: called with the `Request` for per-request decisions.
|
|
43
|
-
*/
|
|
44
|
-
shouldHandleCode?: ((request: Request) => boolean | Promise<boolean>) | boolean;
|
|
45
|
-
};
|
|
46
|
-
type RefreshResult = {
|
|
47
|
-
/** Structured cookies to set on the response. */cookies: AuthCookie[]; /** URL to redirect to (set after OAuth code exchange). */
|
|
48
|
-
redirect?: string; /** JWT for SSR hydration, or `null` if not authenticated. */
|
|
49
|
-
token: string | null;
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Derive the cookie names used for auth tokens.
|
|
53
|
-
*
|
|
54
|
-
* On localhost the names are unprefixed; on production hosts they
|
|
55
|
-
* use the `__Host-` prefix for tighter security.
|
|
56
|
-
*
|
|
57
|
-
* @param host - The `Host` header value. Omit to use unprefixed names.
|
|
58
|
-
* @returns An object with `token`, `refreshToken`, and `verifier` cookie names.
|
|
59
|
-
*/
|
|
60
|
-
declare function authCookieNames(host?: string): {
|
|
61
|
-
token: string;
|
|
62
|
-
refreshToken: string;
|
|
63
|
-
verifier: string;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Parse auth cookie values from a raw `Cookie` header string.
|
|
67
|
-
*
|
|
68
|
-
* @param cookieHeader - The raw `Cookie` header, or `null`/`undefined`.
|
|
69
|
-
* @param host - The `Host` header, used to determine cookie name prefixes.
|
|
70
|
-
* @returns Parsed {@link AuthCookies} with `token`, `refreshToken`, and `verifier`.
|
|
71
|
-
*/
|
|
72
|
-
declare function parseAuthCookies(cookieHeader: string | null | undefined, host?: string): AuthCookies;
|
|
73
|
-
/**
|
|
74
|
-
* Serialize auth cookies into `Set-Cookie` header strings.
|
|
75
|
-
*
|
|
76
|
-
* Nulled-out values produce deletion cookies (maxAge 0, expired date).
|
|
77
|
-
*
|
|
78
|
-
* @param cookies - The auth cookie values to serialize.
|
|
79
|
-
* @param host - The `Host` header, used for cookie name prefixes and `Secure` flag.
|
|
80
|
-
* @param config - Cookie lifetime config. Defaults to session cookies.
|
|
81
|
-
* @returns An array of three `Set-Cookie` header strings.
|
|
82
|
-
*/
|
|
83
|
-
declare function serializeAuthCookies(cookies: AuthCookies, host?: string, config?: AuthCookieConfig): string[];
|
|
84
|
-
/**
|
|
85
|
-
* Build structured cookie objects for any SSR framework.
|
|
86
|
-
*
|
|
87
|
-
* Use with SvelteKit's `event.cookies.set()`, TanStack Start's `setCookie()`,
|
|
88
|
-
* Next.js's `cookies().set()`, or any other framework cookie API.
|
|
89
|
-
*/
|
|
90
|
-
declare function structuredAuthCookies(cookies: AuthCookies, host?: string, config?: AuthCookieConfig): AuthCookie[];
|
|
91
|
-
/**
|
|
92
|
-
* Check whether a request pathname matches the auth proxy route.
|
|
93
|
-
*
|
|
94
|
-
* Handles trailing-slash ambiguity: both `/api/auth` and `/api/auth/`
|
|
95
|
-
* match regardless of how `apiRoute` is configured.
|
|
96
|
-
*
|
|
97
|
-
* @param pathname - The request URL pathname.
|
|
98
|
-
* @param apiRoute - The configured proxy route (e.g. `"/api/auth"`).
|
|
99
|
-
* @returns `true` when the pathname matches the proxy route.
|
|
100
|
-
*/
|
|
101
|
-
declare function shouldProxyAuthAction(pathname: string, apiRoute: string): boolean;
|
|
102
|
-
/**
|
|
103
|
-
* Create an SSR auth helper for server-side frameworks.
|
|
104
|
-
*
|
|
105
|
-
* Handles cookie-based token management, OAuth code exchange,
|
|
106
|
-
* and automatic JWT refresh on page loads. Works with any
|
|
107
|
-
* framework that gives you a `Request` object — SvelteKit,
|
|
108
|
-
* TanStack Start, Remix, Next.js, etc.
|
|
109
|
-
*
|
|
110
|
-
* @param options - SSR configuration (Convex URL, proxy route, cookie lifetime).
|
|
111
|
-
* @returns An object with `token`, `verify`, `proxy`, and `refresh` methods.
|
|
112
|
-
*
|
|
113
|
-
* @example SvelteKit hooks
|
|
114
|
-
* ```ts
|
|
115
|
-
* // src/hooks.server.ts
|
|
116
|
-
* import { server } from '@robelest/convex-auth/server';
|
|
117
|
-
*
|
|
118
|
-
* const auth = server({ url: CONVEX_URL });
|
|
119
|
-
*
|
|
120
|
-
* export const handle = async ({ event, resolve }) => {
|
|
121
|
-
* const { cookies, token } = await auth.refresh(event.request);
|
|
122
|
-
* for (const c of cookies) event.cookies.set(c.name, c.value, c.options);
|
|
123
|
-
* event.locals.token = token;
|
|
124
|
-
* return resolve(event);
|
|
125
|
-
* };
|
|
126
|
-
* ```
|
|
127
|
-
*
|
|
128
|
-
* @example Generic proxy endpoint
|
|
129
|
-
* ```ts
|
|
130
|
-
* if (shouldProxyAuthAction(url.pathname, '/api/auth')) {
|
|
131
|
-
* return auth.proxy(request);
|
|
132
|
-
* }
|
|
133
|
-
* ```
|
|
134
|
-
*/
|
|
135
|
-
declare function server(options: ServerOptions): {
|
|
136
|
-
/**
|
|
137
|
-
* Read the JWT from the request cookies without any validation.
|
|
138
|
-
*
|
|
139
|
-
* @param request - The incoming HTTP request.
|
|
140
|
-
* @returns The raw JWT string, or `null` when no token cookie exists.
|
|
141
|
-
*/
|
|
142
|
-
token(request: Request): string | null;
|
|
143
|
-
/**
|
|
144
|
-
* Check whether the request carries a non-expired JWT.
|
|
145
|
-
*
|
|
146
|
-
* Performs local expiration checking only (no network call).
|
|
147
|
-
* Use for lightweight auth guards in middleware.
|
|
148
|
-
*
|
|
149
|
-
* @param request - The incoming HTTP request.
|
|
150
|
-
* @returns `true` when a valid, non-expired JWT exists in the cookies.
|
|
151
|
-
*/
|
|
152
|
-
verify(request: Request): Promise<boolean>;
|
|
153
|
-
/**
|
|
154
|
-
* Handle a proxied `signIn` or `signOut` POST from the client.
|
|
155
|
-
*
|
|
156
|
-
* Validates the route, method, and origin, then forwards the
|
|
157
|
-
* action to Convex and returns a `Response` with updated
|
|
158
|
-
* `Set-Cookie` headers. The client never sees the real
|
|
159
|
-
* refresh token — it stays in httpOnly cookies.
|
|
160
|
-
*
|
|
161
|
-
* @param request - The incoming POST request from the client.
|
|
162
|
-
* @returns A JSON `Response` with auth result and cookie headers.
|
|
163
|
-
*/
|
|
164
|
-
proxy(request: Request): Promise<Response>;
|
|
165
|
-
/**
|
|
166
|
-
* Refresh auth tokens on page load.
|
|
167
|
-
*
|
|
168
|
-
* Call this in your server hooks/middleware on every request.
|
|
169
|
-
* It handles three scenarios:
|
|
170
|
-
*
|
|
171
|
-
* 1. **OAuth code exchange** — exchanges a `?code=` query param for tokens and returns a redirect URL.
|
|
172
|
-
* 2. **Token refresh** — refreshes the JWT if it's close to expiry.
|
|
173
|
-
* 3. **No-op** — returns the existing token when no refresh is needed.
|
|
174
|
-
*
|
|
175
|
-
* @param request - The incoming HTTP request.
|
|
176
|
-
* @returns Structured cookies to set on the response, an optional redirect URL, and the current JWT.
|
|
177
|
-
*/
|
|
178
|
-
refresh(request: Request): Promise<RefreshResult>;
|
|
179
|
-
};
|
|
180
|
-
//#endregion
|
|
181
|
-
export { AuthCookie, AuthCookieConfig, AuthCookies, RefreshResult, ServerOptions, authCookieNames, parseAuthCookies, serializeAuthCookies, server, shouldProxyAuthAction, structuredAuthCookies };
|
|
182
|
-
//# sourceMappingURL=index.d.ts.map
|
|
1
|
+
import { AuthApi, AuthApiBase, AuthConfig, AuthCtx, ConvexAuthResult, InferAuth, InferClientApi, UserDoc, createAuth } from "./auth.js";
|
|
2
|
+
import { EnterpriseAdminAuthorizationInput, EnterpriseAdminPermission, EnterpriseAuthorizer, EnterpriseMountOptions, enterprise, scim, sso } from "./mounts.js";
|
|
3
|
+
import { AuthCookie, AuthCookieConfig, AuthCookies, RefreshResult, ServerOptions, authCookieNames, parseAuthCookies, serializeAuthCookies, server, shouldProxyAuthAction, structuredAuthCookies } from "./ssr.js";
|
|
4
|
+
export { type AuthApi, type AuthApiBase, type AuthConfig, type AuthCookie, type AuthCookieConfig, type AuthCookies, AuthCtx, type ConvexAuthResult, type EnterpriseAdminAuthorizationInput, type EnterpriseAdminPermission, type EnterpriseAuthorizer, type EnterpriseMountOptions, type InferAuth, type InferClientApi, type RefreshResult, type ServerOptions, type UserDoc, authCookieNames, createAuth, enterprise, parseAuthCookies, scim, serializeAuthCookies, server, shouldProxyAuthAction, sso, structuredAuthCookies };
|
package/dist/server/index.js
CHANGED
|
@@ -1,377 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { ConvexHttpClient } from "convex/browser";
|
|
5
|
-
import { jwtDecode } from "jwt-decode";
|
|
1
|
+
import { AuthCtx, createAuth } from "./auth.js";
|
|
2
|
+
import { enterprise, scim, sso } from "./mounts.js";
|
|
3
|
+
import { authCookieNames, parseAuthCookies, serializeAuthCookies, server, shouldProxyAuthAction, structuredAuthCookies } from "./ssr.js";
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Derive the cookie names used for auth tokens.
|
|
10
|
-
*
|
|
11
|
-
* On localhost the names are unprefixed; on production hosts they
|
|
12
|
-
* use the `__Host-` prefix for tighter security.
|
|
13
|
-
*
|
|
14
|
-
* @param host - The `Host` header value. Omit to use unprefixed names.
|
|
15
|
-
* @returns An object with `token`, `refreshToken`, and `verifier` cookie names.
|
|
16
|
-
*/
|
|
17
|
-
function authCookieNames(host) {
|
|
18
|
-
const prefix = isLocalHost(host) ? "" : "__Host-";
|
|
19
|
-
return {
|
|
20
|
-
token: `${prefix}__convexAuthJWT`,
|
|
21
|
-
refreshToken: `${prefix}__convexAuthRefreshToken`,
|
|
22
|
-
verifier: `${prefix}__convexAuthOAuthVerifier`
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Parse auth cookie values from a raw `Cookie` header string.
|
|
27
|
-
*
|
|
28
|
-
* @param cookieHeader - The raw `Cookie` header, or `null`/`undefined`.
|
|
29
|
-
* @param host - The `Host` header, used to determine cookie name prefixes.
|
|
30
|
-
* @returns Parsed {@link AuthCookies} with `token`, `refreshToken`, and `verifier`.
|
|
31
|
-
*/
|
|
32
|
-
function parseAuthCookies(cookieHeader, host) {
|
|
33
|
-
const names = authCookieNames(host);
|
|
34
|
-
const parsed = parse(cookieHeader ?? "");
|
|
35
|
-
return {
|
|
36
|
-
token: parsed[names.token] ?? null,
|
|
37
|
-
refreshToken: parsed[names.refreshToken] ?? null,
|
|
38
|
-
verifier: parsed[names.verifier] ?? null
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Serialize auth cookies into `Set-Cookie` header strings.
|
|
43
|
-
*
|
|
44
|
-
* Nulled-out values produce deletion cookies (maxAge 0, expired date).
|
|
45
|
-
*
|
|
46
|
-
* @param cookies - The auth cookie values to serialize.
|
|
47
|
-
* @param host - The `Host` header, used for cookie name prefixes and `Secure` flag.
|
|
48
|
-
* @param config - Cookie lifetime config. Defaults to session cookies.
|
|
49
|
-
* @returns An array of three `Set-Cookie` header strings.
|
|
50
|
-
*/
|
|
51
|
-
function serializeAuthCookies(cookies, host, config = { maxAge: null }) {
|
|
52
|
-
const names = authCookieNames(host);
|
|
53
|
-
const base = {
|
|
54
|
-
path: "/",
|
|
55
|
-
httpOnly: true,
|
|
56
|
-
sameSite: "lax",
|
|
57
|
-
secure: !isLocalHost(host)
|
|
58
|
-
};
|
|
59
|
-
const maxAge = config.maxAge ?? void 0;
|
|
60
|
-
return [
|
|
61
|
-
serialize(names.token, cookies.token ?? "", {
|
|
62
|
-
...base,
|
|
63
|
-
maxAge: cookies.token === null ? 0 : maxAge,
|
|
64
|
-
expires: cookies.token === null ? /* @__PURE__ */ new Date(0) : void 0
|
|
65
|
-
}),
|
|
66
|
-
serialize(names.refreshToken, cookies.refreshToken ?? "", {
|
|
67
|
-
...base,
|
|
68
|
-
maxAge: cookies.refreshToken === null ? 0 : maxAge,
|
|
69
|
-
expires: cookies.refreshToken === null ? /* @__PURE__ */ new Date(0) : void 0
|
|
70
|
-
}),
|
|
71
|
-
serialize(names.verifier, cookies.verifier ?? "", {
|
|
72
|
-
...base,
|
|
73
|
-
maxAge: cookies.verifier === null ? 0 : maxAge,
|
|
74
|
-
expires: cookies.verifier === null ? /* @__PURE__ */ new Date(0) : void 0
|
|
75
|
-
})
|
|
76
|
-
];
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Build structured cookie objects for any SSR framework.
|
|
80
|
-
*
|
|
81
|
-
* Use with SvelteKit's `event.cookies.set()`, TanStack Start's `setCookie()`,
|
|
82
|
-
* Next.js's `cookies().set()`, or any other framework cookie API.
|
|
83
|
-
*/
|
|
84
|
-
function structuredAuthCookies(cookies, host, config = { maxAge: null }) {
|
|
85
|
-
const names = authCookieNames(host);
|
|
86
|
-
const base = {
|
|
87
|
-
path: "/",
|
|
88
|
-
httpOnly: true,
|
|
89
|
-
secure: !isLocalHost(host),
|
|
90
|
-
sameSite: "lax"
|
|
91
|
-
};
|
|
92
|
-
const maxAge = config.maxAge ?? void 0;
|
|
93
|
-
return [
|
|
94
|
-
{
|
|
95
|
-
name: names.token,
|
|
96
|
-
value: cookies.token ?? "",
|
|
97
|
-
options: {
|
|
98
|
-
...base,
|
|
99
|
-
maxAge: cookies.token === null ? 0 : maxAge,
|
|
100
|
-
expires: cookies.token === null ? /* @__PURE__ */ new Date(0) : void 0
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
name: names.refreshToken,
|
|
105
|
-
value: cookies.refreshToken ?? "",
|
|
106
|
-
options: {
|
|
107
|
-
...base,
|
|
108
|
-
maxAge: cookies.refreshToken === null ? 0 : maxAge,
|
|
109
|
-
expires: cookies.refreshToken === null ? /* @__PURE__ */ new Date(0) : void 0
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
name: names.verifier,
|
|
114
|
-
value: cookies.verifier ?? "",
|
|
115
|
-
options: {
|
|
116
|
-
...base,
|
|
117
|
-
maxAge: cookies.verifier === null ? 0 : maxAge,
|
|
118
|
-
expires: cookies.verifier === null ? /* @__PURE__ */ new Date(0) : void 0
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
];
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Check whether a request pathname matches the auth proxy route.
|
|
125
|
-
*
|
|
126
|
-
* Handles trailing-slash ambiguity: both `/api/auth` and `/api/auth/`
|
|
127
|
-
* match regardless of how `apiRoute` is configured.
|
|
128
|
-
*
|
|
129
|
-
* @param pathname - The request URL pathname.
|
|
130
|
-
* @param apiRoute - The configured proxy route (e.g. `"/api/auth"`).
|
|
131
|
-
* @returns `true` when the pathname matches the proxy route.
|
|
132
|
-
*/
|
|
133
|
-
function shouldProxyAuthAction(pathname, apiRoute) {
|
|
134
|
-
if (apiRoute.endsWith("/")) return pathname === apiRoute || pathname === apiRoute.slice(0, -1);
|
|
135
|
-
return pathname === apiRoute || pathname === `${apiRoute}/`;
|
|
136
|
-
}
|
|
137
|
-
const REQUIRED_TOKEN_LIFETIME_MS = 6e4;
|
|
138
|
-
const MINIMUM_REQUIRED_TOKEN_LIFETIME_MS = 1e4;
|
|
139
|
-
/**
|
|
140
|
-
* Create an SSR auth helper for server-side frameworks.
|
|
141
|
-
*
|
|
142
|
-
* Handles cookie-based token management, OAuth code exchange,
|
|
143
|
-
* and automatic JWT refresh on page loads. Works with any
|
|
144
|
-
* framework that gives you a `Request` object — SvelteKit,
|
|
145
|
-
* TanStack Start, Remix, Next.js, etc.
|
|
146
|
-
*
|
|
147
|
-
* @param options - SSR configuration (Convex URL, proxy route, cookie lifetime).
|
|
148
|
-
* @returns An object with `token`, `verify`, `proxy`, and `refresh` methods.
|
|
149
|
-
*
|
|
150
|
-
* @example SvelteKit hooks
|
|
151
|
-
* ```ts
|
|
152
|
-
* // src/hooks.server.ts
|
|
153
|
-
* import { server } from '@robelest/convex-auth/server';
|
|
154
|
-
*
|
|
155
|
-
* const auth = server({ url: CONVEX_URL });
|
|
156
|
-
*
|
|
157
|
-
* export const handle = async ({ event, resolve }) => {
|
|
158
|
-
* const { cookies, token } = await auth.refresh(event.request);
|
|
159
|
-
* for (const c of cookies) event.cookies.set(c.name, c.value, c.options);
|
|
160
|
-
* event.locals.token = token;
|
|
161
|
-
* return resolve(event);
|
|
162
|
-
* };
|
|
163
|
-
* ```
|
|
164
|
-
*
|
|
165
|
-
* @example Generic proxy endpoint
|
|
166
|
-
* ```ts
|
|
167
|
-
* if (shouldProxyAuthAction(url.pathname, '/api/auth')) {
|
|
168
|
-
* return auth.proxy(request);
|
|
169
|
-
* }
|
|
170
|
-
* ```
|
|
171
|
-
*/
|
|
172
|
-
function server(options) {
|
|
173
|
-
const convexUrl = options.url;
|
|
174
|
-
const apiRoute = options.apiRoute ?? "/api/auth";
|
|
175
|
-
const cookieConfig = { maxAge: options.cookieMaxAge ?? null };
|
|
176
|
-
const verbose = options.verbose ?? false;
|
|
177
|
-
const logVerbose = (message) => {
|
|
178
|
-
if (!verbose) return;
|
|
179
|
-
console.debug(`${(/* @__PURE__ */ new Date()).toISOString()} [convex-auth/server] ${message}`);
|
|
180
|
-
};
|
|
181
|
-
const cookieHost = (request) => {
|
|
182
|
-
return request.headers.get("host") ?? new URL(request.url).host;
|
|
183
|
-
};
|
|
184
|
-
const parseRequestCookies = (request) => {
|
|
185
|
-
return parseAuthCookies(request.headers.get("cookie"), cookieHost(request));
|
|
186
|
-
};
|
|
187
|
-
const attachCookies = (response, cookies) => {
|
|
188
|
-
for (const value of cookies) response.headers.append("Set-Cookie", value);
|
|
189
|
-
return response;
|
|
190
|
-
};
|
|
191
|
-
const jsonResponse = (body, status = 200) => {
|
|
192
|
-
return new Response(JSON.stringify(body), {
|
|
193
|
-
status,
|
|
194
|
-
headers: { "Content-Type": "application/json" }
|
|
195
|
-
});
|
|
196
|
-
};
|
|
197
|
-
const isCorsRequest = (request) => {
|
|
198
|
-
const originHeader = request.headers.get("origin");
|
|
199
|
-
if (originHeader === null) return false;
|
|
200
|
-
const requestUrl = new URL(request.url);
|
|
201
|
-
const originUrl = new URL(originHeader);
|
|
202
|
-
return originUrl.host !== requestUrl.host || originUrl.protocol !== requestUrl.protocol;
|
|
203
|
-
};
|
|
204
|
-
const decodeToken = (token) => {
|
|
205
|
-
try {
|
|
206
|
-
return jwtDecode(token);
|
|
207
|
-
} catch {
|
|
208
|
-
return null;
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
const convexClient = (token) => {
|
|
212
|
-
const client = new ConvexHttpClient(convexUrl);
|
|
213
|
-
if (token !== void 0 && token !== null) client.setAuth(token);
|
|
214
|
-
return client;
|
|
215
|
-
};
|
|
216
|
-
const refreshTokens = async (request) => {
|
|
217
|
-
const { token, refreshToken } = parseRequestCookies(request);
|
|
218
|
-
if (refreshToken === null && token === null) {
|
|
219
|
-
logVerbose("No auth cookies found, skipping refresh");
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
if (refreshToken === null || token === null) {
|
|
223
|
-
logVerbose("Only one auth cookie present, clearing auth cookies");
|
|
224
|
-
return null;
|
|
225
|
-
}
|
|
226
|
-
const decodedToken = decodeToken(token);
|
|
227
|
-
if (decodedToken?.exp === void 0 || decodedToken.iat === void 0) {
|
|
228
|
-
logVerbose("Failed to decode token, clearing auth cookies");
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
const totalTokenLifetimeMs = decodedToken.exp * 1e3 - decodedToken.iat * 1e3;
|
|
232
|
-
const minimumExpiration = Date.now() + Math.min(REQUIRED_TOKEN_LIFETIME_MS, Math.max(MINIMUM_REQUIRED_TOKEN_LIFETIME_MS, totalTokenLifetimeMs / 10));
|
|
233
|
-
if (decodedToken.exp * 1e3 > minimumExpiration) {
|
|
234
|
-
logVerbose("Token valid long enough, skipping refresh");
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
try {
|
|
238
|
-
const result = await convexClient().action("auth:signIn", { refreshToken });
|
|
239
|
-
if (result.tokens === void 0) throw new Error("Invalid `auth:signIn` result for token refresh");
|
|
240
|
-
logVerbose(`Refreshed tokens, null=${result.tokens === null}`);
|
|
241
|
-
return result.tokens;
|
|
242
|
-
} catch (error) {
|
|
243
|
-
console.error(error);
|
|
244
|
-
logVerbose("Token refresh failed, clearing auth cookies");
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
return {
|
|
249
|
-
token(request) {
|
|
250
|
-
return parseRequestCookies(request).token;
|
|
251
|
-
},
|
|
252
|
-
async verify(request) {
|
|
253
|
-
const token = parseRequestCookies(request).token;
|
|
254
|
-
if (token === null) return false;
|
|
255
|
-
const decodedToken = decodeToken(token);
|
|
256
|
-
if (decodedToken?.exp === void 0) return false;
|
|
257
|
-
return decodedToken.exp * 1e3 > Date.now();
|
|
258
|
-
},
|
|
259
|
-
async proxy(request) {
|
|
260
|
-
if (!shouldProxyAuthAction(new URL(request.url).pathname, apiRoute)) return new Response("Invalid route", { status: 404 });
|
|
261
|
-
if (request.method !== "POST") return new Response("Invalid method", { status: 405 });
|
|
262
|
-
if (isCorsRequest(request)) return new Response("Invalid origin", { status: 403 });
|
|
263
|
-
const body = await request.json();
|
|
264
|
-
const action = body.action;
|
|
265
|
-
const args = body.args ?? {};
|
|
266
|
-
if (action !== "auth:signIn" && action !== "auth:signOut") return new Response("Invalid action", { status: 400 });
|
|
267
|
-
const currentCookies = parseRequestCookies(request);
|
|
268
|
-
const host = cookieHost(request);
|
|
269
|
-
if (action === "auth:signIn") {
|
|
270
|
-
if (args.refreshToken !== void 0) {
|
|
271
|
-
if (currentCookies.refreshToken === null) return jsonResponse({ tokens: null });
|
|
272
|
-
args.refreshToken = currentCookies.refreshToken;
|
|
273
|
-
}
|
|
274
|
-
const client = convexClient(args.refreshToken !== void 0 || args.params?.code !== void 0 ? null : currentCookies.token);
|
|
275
|
-
try {
|
|
276
|
-
const result = await client.action("auth:signIn", args);
|
|
277
|
-
if (result.redirect !== void 0) return attachCookies(jsonResponse({ redirect: result.redirect }), serializeAuthCookies({
|
|
278
|
-
...currentCookies,
|
|
279
|
-
verifier: result.verifier ?? null
|
|
280
|
-
}, host, cookieConfig));
|
|
281
|
-
if (result.tokens !== void 0) return attachCookies(jsonResponse({ tokens: result.tokens === null ? null : {
|
|
282
|
-
token: result.tokens.token,
|
|
283
|
-
refreshToken: "dummy"
|
|
284
|
-
} }), serializeAuthCookies({
|
|
285
|
-
token: result.tokens?.token ?? null,
|
|
286
|
-
refreshToken: result.tokens?.refreshToken ?? null,
|
|
287
|
-
verifier: null
|
|
288
|
-
}, host, cookieConfig));
|
|
289
|
-
return jsonResponse(result);
|
|
290
|
-
} catch (error) {
|
|
291
|
-
return attachCookies(jsonResponse(error instanceof ConvexError && typeof error.data === "object" && error.data !== null && "code" in error.data ? {
|
|
292
|
-
error: error.data.message ?? String(error),
|
|
293
|
-
authError: error.data
|
|
294
|
-
} : { error: error instanceof Error ? error.message : String(error) }, 400), serializeAuthCookies({
|
|
295
|
-
token: null,
|
|
296
|
-
refreshToken: null,
|
|
297
|
-
verifier: null
|
|
298
|
-
}, host, cookieConfig));
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
try {
|
|
302
|
-
await convexClient(currentCookies.token).action("auth:signOut");
|
|
303
|
-
} catch (error) {
|
|
304
|
-
console.error(error);
|
|
305
|
-
}
|
|
306
|
-
return attachCookies(jsonResponse(null), serializeAuthCookies({
|
|
307
|
-
token: null,
|
|
308
|
-
refreshToken: null,
|
|
309
|
-
verifier: null
|
|
310
|
-
}, host, cookieConfig));
|
|
311
|
-
},
|
|
312
|
-
async refresh(request) {
|
|
313
|
-
const host = cookieHost(request);
|
|
314
|
-
const currentToken = parseRequestCookies(request).token;
|
|
315
|
-
if (isCorsRequest(request)) return {
|
|
316
|
-
cookies: structuredAuthCookies({
|
|
317
|
-
token: null,
|
|
318
|
-
refreshToken: null,
|
|
319
|
-
verifier: null
|
|
320
|
-
}, host, cookieConfig),
|
|
321
|
-
token: null
|
|
322
|
-
};
|
|
323
|
-
const requestUrl = new URL(request.url);
|
|
324
|
-
const code = requestUrl.searchParams.get("code");
|
|
325
|
-
const shouldHandleCode = options.shouldHandleCode === void 0 ? true : typeof options.shouldHandleCode === "function" ? await options.shouldHandleCode(request) : options.shouldHandleCode;
|
|
326
|
-
if (code !== null && request.method === "GET" && request.headers.get("accept")?.includes("text/html") && shouldHandleCode) {
|
|
327
|
-
const requestCookies = parseRequestCookies(request);
|
|
328
|
-
const redirectUrl = new URL(requestUrl);
|
|
329
|
-
redirectUrl.searchParams.delete("code");
|
|
330
|
-
try {
|
|
331
|
-
const result = await convexClient().action("auth:signIn", {
|
|
332
|
-
params: { code },
|
|
333
|
-
verifier: requestCookies.verifier ?? void 0
|
|
334
|
-
});
|
|
335
|
-
if (result.tokens === void 0) throw new Error("Invalid `auth:signIn` result for code exchange");
|
|
336
|
-
return {
|
|
337
|
-
cookies: structuredAuthCookies({
|
|
338
|
-
token: result.tokens?.token ?? null,
|
|
339
|
-
refreshToken: result.tokens?.refreshToken ?? null,
|
|
340
|
-
verifier: null
|
|
341
|
-
}, host, cookieConfig),
|
|
342
|
-
redirect: redirectUrl.toString(),
|
|
343
|
-
token: result.tokens?.token ?? null
|
|
344
|
-
};
|
|
345
|
-
} catch (error) {
|
|
346
|
-
console.error(error);
|
|
347
|
-
return {
|
|
348
|
-
cookies: structuredAuthCookies({
|
|
349
|
-
token: null,
|
|
350
|
-
refreshToken: null,
|
|
351
|
-
verifier: null
|
|
352
|
-
}, host, cookieConfig),
|
|
353
|
-
redirect: redirectUrl.toString(),
|
|
354
|
-
token: null
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
const tokens = await refreshTokens(request);
|
|
359
|
-
if (tokens === void 0) return {
|
|
360
|
-
cookies: [],
|
|
361
|
-
token: currentToken
|
|
362
|
-
};
|
|
363
|
-
return {
|
|
364
|
-
cookies: structuredAuthCookies({
|
|
365
|
-
token: tokens?.token ?? null,
|
|
366
|
-
refreshToken: tokens?.refreshToken ?? null,
|
|
367
|
-
verifier: null
|
|
368
|
-
}, host, cookieConfig),
|
|
369
|
-
token: tokens?.token ?? null
|
|
370
|
-
};
|
|
371
|
-
}
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
//#endregion
|
|
376
|
-
export { authCookieNames, parseAuthCookies, serializeAuthCookies, server, shouldProxyAuthAction, structuredAuthCookies };
|
|
377
|
-
//# sourceMappingURL=index.js.map
|
|
5
|
+
export { AuthCtx, authCookieNames, createAuth, enterprise, parseAuthCookies, scim, serializeAuthCookies, server, shouldProxyAuthAction, sso, structuredAuthCookies };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,22 +1,12 @@
|
|
|
1
|
-
import { throwAuthError } from "../errors.js";
|
|
2
1
|
import { generateRandomString, sha256 } from "./utils.js";
|
|
3
2
|
|
|
4
|
-
//#region src/server/
|
|
5
|
-
|
|
6
|
-
* API Key crypto utilities.
|
|
7
|
-
*
|
|
8
|
-
* Uses `@oslojs/crypto` primitives for key generation and hashing:
|
|
9
|
-
* - SHA-256 for hashing keys (API keys have high entropy, no need for bcrypt)
|
|
10
|
-
* - Cryptographically secure random generation for key material
|
|
11
|
-
*
|
|
12
|
-
* @module
|
|
13
|
-
*/
|
|
14
|
-
const DEFAULT_KEY_PREFIX = "sk_live_";
|
|
3
|
+
//#region src/server/keys.ts
|
|
4
|
+
const DEFAULT_KEY_PREFIX = "sk_";
|
|
15
5
|
const KEY_RANDOM_LENGTH = 32;
|
|
16
6
|
const KEY_RANDOM_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
17
7
|
/**
|
|
18
8
|
* How many characters of the full key to store as the visible prefix.
|
|
19
|
-
* Includes the prefix string (e.g. "
|
|
9
|
+
* Includes the prefix string (e.g. "sk_") plus a few random chars.
|
|
20
10
|
*/
|
|
21
11
|
const VISIBLE_PREFIX_EXTRA_CHARS = 4;
|
|
22
12
|
/**
|
|
@@ -25,9 +15,10 @@ const VISIBLE_PREFIX_EXTRA_CHARS = 4;
|
|
|
25
15
|
* Returns the raw key (to be shown once to the user) and metadata for storage.
|
|
26
16
|
* The raw key is `{prefix}{32 random alphanumeric chars}`.
|
|
27
17
|
*
|
|
28
|
-
* @param prefix - Key prefix, defaults to "
|
|
18
|
+
* @param prefix - Key prefix, defaults to "sk_"
|
|
29
19
|
* @returns `{ raw, hashedKey, displayPrefix }`
|
|
30
20
|
*/
|
|
21
|
+
/** @internal */
|
|
31
22
|
async function generateApiKey(prefix = DEFAULT_KEY_PREFIX) {
|
|
32
23
|
const raw = `${prefix}${generateRandomString(KEY_RANDOM_LENGTH, KEY_RANDOM_ALPHABET)}`;
|
|
33
24
|
return {
|
|
@@ -41,6 +32,7 @@ async function generateApiKey(prefix = DEFAULT_KEY_PREFIX) {
|
|
|
41
32
|
*
|
|
42
33
|
* Used during Bearer token verification to find the stored key record.
|
|
43
34
|
*/
|
|
35
|
+
/** @internal */
|
|
44
36
|
async function hashApiKey(rawKey) {
|
|
45
37
|
return sha256(rawKey);
|
|
46
38
|
}
|
|
@@ -53,6 +45,7 @@ async function hashApiKey(rawKey) {
|
|
|
53
45
|
* A wildcard action `"*"` grants all actions on that resource.
|
|
54
46
|
* A wildcard resource `"*"` grants the action on all resources.
|
|
55
47
|
*/
|
|
48
|
+
/** @internal */
|
|
56
49
|
function buildScopeChecker(scopes) {
|
|
57
50
|
return {
|
|
58
51
|
scopes,
|
|
@@ -62,22 +55,6 @@ function buildScopeChecker(scopes) {
|
|
|
62
55
|
};
|
|
63
56
|
}
|
|
64
57
|
/**
|
|
65
|
-
* Validate that requested scopes are a subset of the allowed scopes
|
|
66
|
-
* defined in the API key config.
|
|
67
|
-
*
|
|
68
|
-
* @param requested - Scopes the user wants on the new key.
|
|
69
|
-
* @param allowed - The scope definition from `apiKeys.scopes` config.
|
|
70
|
-
* @throws Error if any requested scope is not in the allowed set.
|
|
71
|
-
*/
|
|
72
|
-
function validateScopes(requested, allowed) {
|
|
73
|
-
if (!allowed) return;
|
|
74
|
-
for (const scope of requested) {
|
|
75
|
-
const allowedActions = allowed[scope.resource];
|
|
76
|
-
if (!allowedActions) throwAuthError("API_KEY_INVALID_SCOPE", `Unknown resource "${scope.resource}" in API key scopes. Allowed resources: ${Object.keys(allowed).join(", ")}`);
|
|
77
|
-
for (const action of scope.actions) if (action !== "*" && !allowedActions.includes(action)) throwAuthError("API_KEY_INVALID_SCOPE", `Unknown action "${action}" for resource "${scope.resource}". Allowed actions: ${allowedActions.join(", ")}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
58
|
* Check whether a key is rate-limited based on its stored state.
|
|
82
59
|
*
|
|
83
60
|
* Uses the same token-bucket algorithm as sign-in rate limiting:
|
|
@@ -85,6 +62,7 @@ function validateScopes(requested, allowed) {
|
|
|
85
62
|
*
|
|
86
63
|
* @returns `{ limited: boolean; newState: { attemptsLeft, lastAttemptTime } }`
|
|
87
64
|
*/
|
|
65
|
+
/** @internal */
|
|
88
66
|
function checkKeyRateLimit(rateLimit, state) {
|
|
89
67
|
const now = Date.now();
|
|
90
68
|
if (!state) return {
|
|
@@ -114,5 +92,5 @@ function checkKeyRateLimit(rateLimit, state) {
|
|
|
114
92
|
}
|
|
115
93
|
|
|
116
94
|
//#endregion
|
|
117
|
-
export { buildScopeChecker, checkKeyRateLimit, generateApiKey, hashApiKey
|
|
95
|
+
export { buildScopeChecker, checkKeyRateLimit, generateApiKey, hashApiKey };
|
|
118
96
|
//# sourceMappingURL=keys.js.map
|