@robelest/convex-auth 0.0.4-preview.18 → 0.0.4-preview.19
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 +6 -3
- package/dist/authorization/index.d.ts +46 -0
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +46 -0
- package/dist/authorization/index.js.map +1 -1
- package/dist/bin.cjs +21 -13
- 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 -16
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +67 -565
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +40 -12
- 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 +1306 -1344
- 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 -2
- package/dist/component/model.d.ts +80 -80
- package/dist/component/model.d.ts.map +1 -1
- package/dist/component/model.js +5 -1
- package/dist/component/model.js.map +1 -1
- package/dist/component/providers/credentials.d.ts +3 -2
- package/dist/component/providers/credentials.d.ts.map +1 -1
- package/dist/component/providers/email.d.ts +30 -0
- package/dist/component/providers/email.d.ts.map +1 -1
- package/dist/component/providers/phone.d.ts +28 -0
- package/dist/component/providers/phone.d.ts.map +1 -1
- 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 +22 -7
- package/dist/component/public.js +21 -6
- package/dist/component/schema.d.ts +288 -288
- package/dist/component/server/auth.d.ts +212 -25
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +68 -4
- 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} +2 -2
- package/dist/component/server/config.js.map +1 -0
- package/dist/component/server/{domains/core.js → core.js} +107 -88
- package/dist/component/server/core.js.map +1 -0
- package/dist/component/server/{provider.js → crypto.js} +3 -3
- package/dist/component/server/crypto.js.map +1 -0
- package/dist/component/server/device.js +1 -1
- package/dist/component/server/device.js.map +1 -1
- package/dist/component/server/enterprise/config.js +46 -0
- package/dist/component/server/enterprise/config.js.map +1 -0
- package/dist/component/server/{domains/sso.js → enterprise/domain.js} +6 -5
- 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.js.map +1 -1
- package/dist/component/server/http.js +2 -1
- package/dist/component/server/http.js.map +1 -1
- package/dist/component/server/identity.js +1 -1
- package/dist/component/server/identity.js.map +1 -1
- package/dist/component/server/{ratelimit.js → limits.js} +3 -3
- package/dist/component/server/limits.js.map +1 -0
- package/dist/component/server/mutations/account.js +3 -3
- package/dist/component/server/mutations/account.js.map +1 -1
- package/dist/component/server/mutations/code.js +2 -2
- package/dist/component/server/mutations/code.js.map +1 -1
- package/dist/component/server/mutations/invalidate.js +1 -1
- package/dist/component/server/mutations/invalidate.js.map +1 -1
- package/dist/component/server/mutations/oauth.js +5 -3
- package/dist/component/server/mutations/oauth.js.map +1 -1
- package/dist/component/server/mutations/refresh.js +1 -1
- package/dist/component/server/mutations/refresh.js.map +1 -1
- package/dist/component/server/mutations/register.js +3 -3
- package/dist/component/server/mutations/register.js.map +1 -1
- package/dist/component/server/mutations/retrieve.js +4 -4
- package/dist/component/server/mutations/retrieve.js.map +1 -1
- package/dist/component/server/mutations/signature.js +2 -2
- package/dist/component/server/mutations/signature.js.map +1 -1
- package/dist/component/server/mutations/signin.js +1 -1
- package/dist/component/server/mutations/signin.js.map +1 -1
- package/dist/component/server/mutations/signout.js +1 -1
- package/dist/component/server/mutations/signout.js.map +1 -1
- 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 +80 -10
- package/dist/component/server/mutations/store.js.map +1 -1
- package/dist/component/server/mutations/verifier.js +1 -1
- package/dist/component/server/mutations/verifier.js.map +1 -1
- package/dist/component/server/mutations/verify.js +4 -3
- package/dist/component/server/mutations/verify.js.map +1 -1
- package/dist/component/server/oauth.js +1 -1
- package/dist/component/server/oauth.js.map +1 -1
- package/dist/component/server/passkey.js +2 -1
- package/dist/component/server/passkey.js.map +1 -1
- package/dist/component/server/redirects.js +1 -1
- package/dist/component/server/redirects.js.map +1 -1
- package/dist/component/server/refresh.js +1 -1
- package/dist/component/server/refresh.js.map +1 -1
- package/dist/component/server/{factory.d.ts → runtime.d.ts} +2 -2
- 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/component/server/signin.js +2 -1
- package/dist/component/server/signin.js.map +1 -1
- package/dist/component/server/totp.js +2 -1
- package/dist/component/server/totp.js.map +1 -1
- package/dist/component/server/types.d.ts +225 -41
- package/dist/component/server/types.d.ts.map +1 -1
- package/dist/component/server/types.js.map +1 -1
- package/dist/component/server/users.js +1 -1
- package/dist/component/server/users.js.map +1 -1
- package/dist/component/server/utils.js +1 -1
- 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/credentials.d.ts +5 -2
- package/dist/providers/credentials.d.ts.map +1 -1
- package/dist/providers/credentials.js +2 -0
- package/dist/providers/credentials.js.map +1 -1
- package/dist/providers/email.d.ts +30 -0
- package/dist/providers/email.d.ts.map +1 -1
- package/dist/providers/email.js +24 -0
- package/dist/providers/email.js.map +1 -1
- package/dist/providers/phone.d.ts +28 -0
- package/dist/providers/phone.d.ts.map +1 -1
- package/dist/providers/phone.js +22 -0
- package/dist/providers/phone.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 +218 -28
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +68 -4
- package/dist/server/auth.js.map +1 -1
- package/dist/server/{fx.d.ts → authError.d.ts} +25 -15
- 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/{providers.js → config.js} +2 -2
- package/dist/server/config.js.map +1 -0
- package/dist/server/core.d.ts +1436 -0
- package/dist/server/core.d.ts.map +1 -0
- package/dist/server/{domains/core.js → core.js} +107 -88
- package/dist/server/core.js.map +1 -0
- package/dist/server/{provider.d.ts → crypto.d.ts} +2 -2
- package/dist/server/crypto.d.ts.map +1 -0
- package/dist/server/{provider.js → crypto.js} +3 -3
- package/dist/{component/server/provider.js.map → server/crypto.js.map} +1 -1
- package/dist/server/device.js +1 -1
- package/dist/server/device.js.map +1 -1
- package/dist/server/enterprise/config.js +46 -0
- package/dist/server/enterprise/config.js.map +1 -0
- package/dist/server/{domains/sso.d.ts → enterprise/domain.d.ts} +4 -4
- package/dist/server/enterprise/domain.d.ts.map +1 -0
- package/dist/server/{domains/sso.js → enterprise/domain.js} +6 -5
- 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.js +248 -0
- package/dist/server/enterprise/oidc.js.map +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/{enterpriseValidators.js → enterprise/validators.js} +2 -2
- package/dist/server/enterprise/validators.js.map +1 -0
- package/dist/server/errors.d.ts +2 -0
- package/dist/server/errors.d.ts.map +1 -1
- package/dist/server/errors.js +2 -0
- package/dist/server/errors.js.map +1 -1
- package/dist/server/http.d.ts +2 -2
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +2 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/identity.js +1 -1
- package/dist/server/identity.js.map +1 -1
- package/dist/server/index.d.ts +4 -705
- package/dist/server/index.js +4 -1367
- package/dist/server/limits.d.ts +1 -0
- package/dist/server/{ratelimit.js → limits.js} +3 -3
- 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 +8 -8
- package/dist/server/mutations/account.js +3 -3
- package/dist/server/mutations/account.js.map +1 -1
- package/dist/server/mutations/code.d.ts +13 -13
- package/dist/server/mutations/code.js +2 -2
- package/dist/server/mutations/code.js.map +1 -1
- package/dist/server/mutations/index.d.ts +8 -312
- package/dist/server/mutations/index.js +14 -84
- package/dist/server/mutations/invalidate.d.ts +5 -5
- package/dist/server/mutations/invalidate.d.ts.map +1 -1
- package/dist/server/mutations/invalidate.js +1 -1
- package/dist/server/mutations/invalidate.js.map +1 -1
- package/dist/server/mutations/oauth.d.ts +9 -9
- package/dist/server/mutations/oauth.d.ts.map +1 -1
- package/dist/server/mutations/oauth.js +5 -3
- package/dist/server/mutations/oauth.js.map +1 -1
- package/dist/server/mutations/refresh.d.ts +4 -4
- package/dist/server/mutations/refresh.js +1 -1
- package/dist/server/mutations/refresh.js.map +1 -1
- package/dist/server/mutations/register.d.ts +10 -10
- package/dist/server/mutations/register.d.ts.map +1 -1
- package/dist/server/mutations/register.js +3 -3
- package/dist/server/mutations/register.js.map +1 -1
- package/dist/server/mutations/retrieve.d.ts +8 -10
- package/dist/server/mutations/retrieve.d.ts.map +1 -1
- package/dist/server/mutations/retrieve.js +5 -7
- package/dist/server/mutations/retrieve.js.map +1 -1
- package/dist/server/mutations/signature.d.ts +6 -6
- package/dist/server/mutations/signature.d.ts.map +1 -1
- package/dist/server/mutations/signature.js +2 -2
- package/dist/server/mutations/signature.js.map +1 -1
- package/dist/server/mutations/signin.d.ts +1 -1
- package/dist/server/mutations/signin.js +1 -1
- package/dist/server/mutations/signin.js.map +1 -1
- package/dist/server/mutations/signout.d.ts +1 -1
- package/dist/server/mutations/signout.js +1 -1
- package/dist/server/mutations/signout.js.map +1 -1
- 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 +303 -9
- package/dist/server/mutations/store.d.ts.map +1 -1
- package/dist/server/mutations/store.js +80 -10
- package/dist/server/mutations/store.js.map +1 -1
- package/dist/server/mutations/verifier.d.ts +1 -1
- package/dist/server/mutations/verifier.js +1 -1
- package/dist/server/mutations/verifier.js.map +1 -1
- package/dist/server/mutations/verify.d.ts +8 -8
- package/dist/server/mutations/verify.d.ts.map +1 -1
- package/dist/server/mutations/verify.js +4 -3
- package/dist/server/mutations/verify.js.map +1 -1
- package/dist/server/oauth.js +1 -1
- package/dist/server/oauth.js.map +1 -1
- package/dist/server/passkey.d.ts +2 -2
- package/dist/server/passkey.d.ts.map +1 -1
- package/dist/server/passkey.js +3 -2
- package/dist/server/passkey.js.map +1 -1
- package/dist/server/redirects.js +1 -1
- package/dist/server/redirects.js.map +1 -1
- package/dist/server/refresh.js +1 -1
- package/dist/server/refresh.js.map +1 -1
- package/dist/server/{factory.d.ts → runtime.d.ts} +16 -16
- 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/signin.js +3 -2
- package/dist/server/signin.js.map +1 -1
- 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/totp.js +2 -1
- package/dist/server/totp.js.map +1 -1
- package/dist/server/types.d.ts +242 -42
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +12 -1
- package/dist/server/types.js.map +1 -1
- package/dist/server/users.js +1 -1
- package/dist/server/users.js.map +1 -1
- package/dist/server/utils.js +1 -1
- package/dist/server/utils.js.map +1 -1
- package/package.json +3 -4
- package/src/authorization/index.ts +46 -0
- package/src/cli/index.ts +38 -20
- 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 +133 -1267
- 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 +40 -12
- package/src/component/_generated/component.ts +1772 -1798
- package/src/component/model.ts +6 -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 +27 -5
- package/src/providers/credentials.ts +4 -5
- package/src/providers/email.ts +30 -0
- package/src/providers/phone.ts +28 -0
- package/src/server/auth.ts +282 -28
- package/src/server/authError.ts +44 -0
- package/src/server/core.ts +2095 -0
- package/src/server/{provider.ts → crypto.ts} +1 -1
- package/src/server/device.ts +1 -1
- package/src/server/enterprise/config.ts +51 -0
- package/src/server/{domains/sso.ts → enterprise/domain.ts} +4 -2
- 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/errors.ts +2 -0
- package/src/server/http.ts +3 -1
- package/src/server/identity.ts +1 -1
- package/src/server/index.ts +32 -2605
- package/src/server/{ratelimit.ts → limits.ts} +1 -1
- package/src/server/mounts.ts +948 -0
- package/src/server/mutations/account.ts +4 -4
- package/src/server/mutations/code.ts +3 -3
- package/src/server/mutations/index.ts +8 -148
- package/src/server/mutations/invalidate.ts +2 -2
- package/src/server/mutations/oauth.ts +8 -6
- package/src/server/mutations/refresh.ts +3 -3
- package/src/server/mutations/register.ts +3 -3
- package/src/server/mutations/retrieve.ts +4 -8
- package/src/server/mutations/signature.ts +3 -3
- package/src/server/mutations/signin.ts +2 -2
- package/src/server/mutations/signout.ts +2 -2
- package/src/server/mutations/store/refs.ts +10 -0
- package/src/server/mutations/store.ts +137 -9
- package/src/server/mutations/verifier.ts +2 -2
- package/src/server/mutations/verify.ts +5 -5
- package/src/server/oauth.ts +1 -1
- package/src/server/passkey.ts +3 -4
- package/src/server/redirects.ts +1 -1
- package/src/server/refresh.ts +1 -1
- package/src/server/runtime.ts +880 -0
- package/src/server/signin.ts +3 -1
- package/src/server/ssr.ts +1764 -0
- package/src/server/totp.ts +3 -1
- package/src/server/types.ts +254 -43
- package/src/server/users.ts +1 -1
- package/src/server/utils.ts +1 -1
- package/src/test.ts +25 -0
- package/dist/component/public/enterprise.d.ts +0 -54
- package/dist/component/public/enterprise.d.ts.map +0 -1
- package/dist/component/public/enterprise.js +0 -515
- package/dist/component/public/enterprise.js.map +0 -1
- package/dist/component/public/factors.d.ts +0 -52
- package/dist/component/public/factors.d.ts.map +0 -1
- package/dist/component/public/factors.js +0 -285
- package/dist/component/public/factors.js.map +0 -1
- package/dist/component/public/groups.d.ts +0 -124
- package/dist/component/public/groups.d.ts.map +0 -1
- package/dist/component/public/groups.js +0 -680
- package/dist/component/public/groups.js.map +0 -1
- package/dist/component/public/identity.d.ts +0 -93
- package/dist/component/public/identity.d.ts.map +0 -1
- package/dist/component/public/identity.js +0 -426
- package/dist/component/public/identity.js.map +0 -1
- package/dist/component/public/keys.d.ts +0 -41
- package/dist/component/public/keys.d.ts.map +0 -1
- package/dist/component/public/keys.js +0 -157
- package/dist/component/public/keys.js.map +0 -1
- package/dist/component/public/shared.d.ts +0 -26
- package/dist/component/public/shared.d.ts.map +0 -1
- package/dist/component/public/shared.js +0 -32
- package/dist/component/public/shared.js.map +0 -1
- package/dist/component/server/domains/core.js.map +0 -1
- package/dist/component/server/domains/sso.js.map +0 -1
- package/dist/component/server/factory.d.ts.map +0 -1
- package/dist/component/server/factory.js +0 -1134
- package/dist/component/server/factory.js.map +0 -1
- package/dist/component/server/fx.js +0 -66
- package/dist/component/server/fx.js.map +0 -1
- package/dist/component/server/mutations/index.js +0 -85
- package/dist/component/server/mutations/index.js.map +0 -1
- package/dist/component/server/providers.js.map +0 -1
- package/dist/component/server/ratelimit.js.map +0 -1
- package/dist/component/server/sso.js +0 -830
- package/dist/component/server/sso.js.map +0 -1
- package/dist/server/domains/core.d.ts +0 -449
- package/dist/server/domains/core.d.ts.map +0 -1
- package/dist/server/domains/core.js.map +0 -1
- package/dist/server/domains/sso.d.ts.map +0 -1
- package/dist/server/domains/sso.js.map +0 -1
- package/dist/server/enterpriseValidators.js.map +0 -1
- package/dist/server/factory.d.ts.map +0 -1
- package/dist/server/factory.js +0 -1134
- package/dist/server/factory.js.map +0 -1
- package/dist/server/fx.d.ts.map +0 -1
- package/dist/server/fx.js +0 -66
- package/dist/server/fx.js.map +0 -1
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/mutations/index.d.ts.map +0 -1
- package/dist/server/mutations/index.js.map +0 -1
- package/dist/server/provider.d.ts.map +0 -1
- package/dist/server/provider.js.map +0 -1
- package/dist/server/providers.js.map +0 -1
- package/dist/server/ratelimit.js.map +0 -1
- package/dist/server/sso.js +0 -830
- package/dist/server/sso.js.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/component/public/enterprise.ts +0 -753
- package/src/component/public/factors.ts +0 -333
- package/src/component/public/groups.ts +0 -1066
- package/src/component/public/identity.ts +0 -569
- package/src/component/public/keys.ts +0 -209
- package/src/component/public/shared.ts +0 -119
- package/src/server/domains/core.ts +0 -1096
- package/src/server/factory.ts +0 -2181
- package/src/server/fx.ts +0 -152
- package/src/server/sso.ts +0 -1516
- package/src/server/version.ts +0 -2
- /package/dist/server/{enterpriseValidators.d.ts → config.d.ts} +0 -0
- /package/dist/server/{providers.d.ts → enterprise/config.d.ts} +0 -0
- /package/dist/server/{ratelimit.d.ts → enterprise/oidc.d.ts} +0 -0
- /package/dist/server/{sso.d.ts → enterprise/policy.d.ts} +0 -0
- /package/src/server/{providers.ts → config.ts} +0 -0
- /package/src/server/{enterpriseValidators.ts → enterprise/validators.ts} +0 -0
package/src/component/model.ts
CHANGED
|
@@ -29,6 +29,12 @@ export const TABLES = {
|
|
|
29
29
|
|
|
30
30
|
export const vTag = v.object({ key: v.string(), value: v.string() });
|
|
31
31
|
|
|
32
|
+
export const vPaginated = (item: any) =>
|
|
33
|
+
v.object({
|
|
34
|
+
items: v.array(item),
|
|
35
|
+
nextCursor: v.union(v.string(), v.null()),
|
|
36
|
+
});
|
|
37
|
+
|
|
32
38
|
export const vInviteStatus = v.union(
|
|
33
39
|
v.literal("pending"),
|
|
34
40
|
v.literal("accepted"),
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { v } from "convex/values";
|
|
2
|
+
import { mutation, query } from "../../functions";
|
|
3
|
+
import { vAuditActorType, vAuditStatus, vEnterpriseAuditEventDoc } from "../../model";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Record a new audit event for an enterprise.
|
|
7
|
+
*
|
|
8
|
+
* Inserts an immutable audit log entry capturing who performed what action,
|
|
9
|
+
* on which subject, and whether it succeeded or failed. Use this to maintain
|
|
10
|
+
* a tamper-evident trail of security-relevant events.
|
|
11
|
+
*
|
|
12
|
+
* @param args.enterpriseId - The ID of the enterprise this event belongs to.
|
|
13
|
+
* @param args.groupId - The ID of the root group that owns the enterprise.
|
|
14
|
+
* @param args.eventType - A string identifying the type of event (e.g. `"user.login"`, `"scim.provision"`).
|
|
15
|
+
* @param args.actorType - The kind of actor: `"user"`, `"system"`, `"scim"`, `"api_key"`, or `"webhook"`.
|
|
16
|
+
* @param args.actorId - An optional identifier for the actor (e.g. a user ID or API key ID).
|
|
17
|
+
* @param args.subjectType - The type of the resource being acted upon (e.g. `"user"`, `"group"`).
|
|
18
|
+
* @param args.subjectId - An optional identifier for the subject resource.
|
|
19
|
+
* @param args.status - Whether the event represents a `"success"` or `"failure"`.
|
|
20
|
+
* @param args.occurredAt - Epoch timestamp (ms) when the event occurred.
|
|
21
|
+
* @param args.requestId - An optional correlation ID tying this event to a specific request.
|
|
22
|
+
* @param args.ip - An optional IP address of the actor.
|
|
23
|
+
* @param args.metadata - An optional arbitrary object with additional event details.
|
|
24
|
+
* @returns The ID of the newly created `EnterpriseAuditEvent` document.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* const eventId = await ctx.runMutation(
|
|
29
|
+
* components.auth.enterprise.enterpriseAuditEventCreate,
|
|
30
|
+
* {
|
|
31
|
+
* enterpriseId,
|
|
32
|
+
* groupId: orgGroupId,
|
|
33
|
+
* eventType: "user.login",
|
|
34
|
+
* actorType: "user",
|
|
35
|
+
* actorId: userId,
|
|
36
|
+
* subjectType: "session",
|
|
37
|
+
* subjectId: sessionId,
|
|
38
|
+
* status: "success",
|
|
39
|
+
* occurredAt: Date.now(),
|
|
40
|
+
* ip: "203.0.113.42",
|
|
41
|
+
* },
|
|
42
|
+
* );
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export const enterpriseAuditEventCreate = mutation({
|
|
46
|
+
args: {
|
|
47
|
+
enterpriseId: v.id("Enterprise"),
|
|
48
|
+
groupId: v.id("Group"),
|
|
49
|
+
eventType: v.string(),
|
|
50
|
+
actorType: vAuditActorType,
|
|
51
|
+
actorId: v.optional(v.string()),
|
|
52
|
+
subjectType: v.string(),
|
|
53
|
+
subjectId: v.optional(v.string()),
|
|
54
|
+
status: vAuditStatus,
|
|
55
|
+
occurredAt: v.number(),
|
|
56
|
+
requestId: v.optional(v.string()),
|
|
57
|
+
ip: v.optional(v.string()),
|
|
58
|
+
metadata: v.optional(v.any()),
|
|
59
|
+
},
|
|
60
|
+
returns: v.id("EnterpriseAuditEvent"),
|
|
61
|
+
handler: async (ctx, args) => {
|
|
62
|
+
return await ctx.db.insert("EnterpriseAuditEvent", args);
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* List audit events, optionally filtered by enterprise or group.
|
|
68
|
+
*
|
|
69
|
+
* Returns audit events in reverse chronological order. When `enterpriseId` is
|
|
70
|
+
* provided, events are filtered using the `enterprise_id_occurred_at` index.
|
|
71
|
+
* When only `groupId` is provided, the `group_id_occurred_at` index is used.
|
|
72
|
+
* If neither filter is given, the most recent events across all enterprises
|
|
73
|
+
* are returned.
|
|
74
|
+
*
|
|
75
|
+
* @param args.enterpriseId - An optional enterprise ID to scope events to a single enterprise.
|
|
76
|
+
* @param args.groupId - An optional group ID to scope events to a single group.
|
|
77
|
+
* @param args.limit - Maximum number of events to return (clamped between 1 and 100, defaults to 50).
|
|
78
|
+
* @returns An array of audit event documents, most recent first.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* const events = await ctx.runQuery(
|
|
83
|
+
* components.auth.enterprise.enterpriseAuditEventList,
|
|
84
|
+
* { enterpriseId, limit: 20 },
|
|
85
|
+
* );
|
|
86
|
+
* for (const event of events) {
|
|
87
|
+
* console.log(event.eventType, event.actorType, event.status);
|
|
88
|
+
* }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export const enterpriseAuditEventList = query({
|
|
92
|
+
args: {
|
|
93
|
+
enterpriseId: v.optional(v.id("Enterprise")),
|
|
94
|
+
groupId: v.optional(v.id("Group")),
|
|
95
|
+
limit: v.optional(v.number()),
|
|
96
|
+
},
|
|
97
|
+
returns: v.array(vEnterpriseAuditEventDoc),
|
|
98
|
+
handler: async (ctx, args) => {
|
|
99
|
+
const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);
|
|
100
|
+
if (args.enterpriseId !== undefined) {
|
|
101
|
+
return await ctx.db
|
|
102
|
+
.query("EnterpriseAuditEvent")
|
|
103
|
+
.withIndex("enterprise_id_occurred_at", (idx) =>
|
|
104
|
+
idx.eq("enterpriseId", args.enterpriseId!),
|
|
105
|
+
)
|
|
106
|
+
.order("desc")
|
|
107
|
+
.take(limit);
|
|
108
|
+
}
|
|
109
|
+
if (args.groupId !== undefined) {
|
|
110
|
+
return await ctx.db
|
|
111
|
+
.query("EnterpriseAuditEvent")
|
|
112
|
+
.withIndex("group_id_occurred_at", (idx) =>
|
|
113
|
+
idx.eq("groupId", args.groupId!),
|
|
114
|
+
)
|
|
115
|
+
.order("desc")
|
|
116
|
+
.take(limit);
|
|
117
|
+
}
|
|
118
|
+
return await ctx.db.query("EnterpriseAuditEvent").order("desc").take(limit);
|
|
119
|
+
},
|
|
120
|
+
});
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import { ConvexError, v } from "convex/values";
|
|
2
|
+
import { mutation, query } from "../../functions";
|
|
3
|
+
import {
|
|
4
|
+
vEnterpriseDoc,
|
|
5
|
+
vEnterpriseDomainDoc,
|
|
6
|
+
vEnterprisePolicy,
|
|
7
|
+
vEnterpriseStatus,
|
|
8
|
+
vPaginated,
|
|
9
|
+
} from "../../model";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Create a new enterprise record attached to a root group.
|
|
13
|
+
*
|
|
14
|
+
* Each group may only have one enterprise record. If an enterprise already
|
|
15
|
+
* exists for the given group, a `ENTERPRISE_ALREADY_EXISTS` error is thrown.
|
|
16
|
+
* The enterprise status defaults to `"draft"` when not explicitly provided.
|
|
17
|
+
*
|
|
18
|
+
* @param args.groupId - The ID of the root group that owns this enterprise.
|
|
19
|
+
* @param args.slug - An optional URL-friendly identifier for the enterprise.
|
|
20
|
+
* @param args.name - An optional human-readable display name for the enterprise.
|
|
21
|
+
* @param args.status - The lifecycle status (`"draft"`, `"active"`, or `"disabled"`). Defaults to `"draft"`.
|
|
22
|
+
* @param args.policy - An optional enterprise policy object controlling identity linking, provisioning, and deprovisioning behavior.
|
|
23
|
+
* @param args.config - An optional arbitrary configuration blob for enterprise-specific settings.
|
|
24
|
+
* @param args.extend - An optional arbitrary extension object for custom fields.
|
|
25
|
+
* @returns The ID of the newly created `Enterprise` document.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const enterpriseId = await ctx.runMutation(
|
|
30
|
+
* components.auth.enterprise.enterpriseCreate,
|
|
31
|
+
* {
|
|
32
|
+
* groupId: orgGroupId,
|
|
33
|
+
* slug: "acme-corp",
|
|
34
|
+
* name: "Acme Corporation",
|
|
35
|
+
* status: "active",
|
|
36
|
+
* },
|
|
37
|
+
* );
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export const enterpriseCreate = mutation({
|
|
41
|
+
args: {
|
|
42
|
+
groupId: v.id("Group"),
|
|
43
|
+
slug: v.optional(v.string()),
|
|
44
|
+
name: v.optional(v.string()),
|
|
45
|
+
status: v.optional(vEnterpriseStatus),
|
|
46
|
+
policy: v.optional(vEnterprisePolicy),
|
|
47
|
+
config: v.optional(v.any()),
|
|
48
|
+
extend: v.optional(v.any()),
|
|
49
|
+
},
|
|
50
|
+
returns: v.id("Enterprise"),
|
|
51
|
+
handler: async (ctx, args) => {
|
|
52
|
+
const existing = await ctx.db
|
|
53
|
+
.query("Enterprise")
|
|
54
|
+
.withIndex("group_id", (idx) => idx.eq("groupId", args.groupId))
|
|
55
|
+
.first();
|
|
56
|
+
if (existing) {
|
|
57
|
+
throw new ConvexError({
|
|
58
|
+
code: "ENTERPRISE_ALREADY_EXISTS",
|
|
59
|
+
message: "An enterprise record already exists for this group.",
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return await ctx.db.insert("Enterprise", {
|
|
63
|
+
...args,
|
|
64
|
+
status: args.status ?? "draft",
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Retrieve a single enterprise record by its document ID.
|
|
71
|
+
*
|
|
72
|
+
* Returns the full enterprise document if it exists, or `null` if no
|
|
73
|
+
* enterprise is found with the given ID.
|
|
74
|
+
*
|
|
75
|
+
* @param args.enterpriseId - The document ID of the enterprise to retrieve.
|
|
76
|
+
* @returns The enterprise document, or `null` if not found.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```ts
|
|
80
|
+
* const enterprise = await ctx.runQuery(
|
|
81
|
+
* components.auth.enterprise.enterpriseGet,
|
|
82
|
+
* { enterpriseId },
|
|
83
|
+
* );
|
|
84
|
+
* if (enterprise) {
|
|
85
|
+
* console.log(enterprise.name, enterprise.status);
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export const enterpriseGet = query({
|
|
90
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
91
|
+
returns: v.union(vEnterpriseDoc, v.null()),
|
|
92
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
93
|
+
return await ctx.db.get("Enterprise", enterpriseId);
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Retrieve an enterprise record by the ID of its owning group.
|
|
99
|
+
*
|
|
100
|
+
* Looks up the enterprise that is linked to the specified group using the
|
|
101
|
+
* `group_id` index. Returns `null` if no enterprise is associated with the group.
|
|
102
|
+
*
|
|
103
|
+
* @param args.groupId - The ID of the root group whose enterprise record to look up.
|
|
104
|
+
* @returns The enterprise document, or `null` if the group has no enterprise.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* const enterprise = await ctx.runQuery(
|
|
109
|
+
* components.auth.enterprise.enterpriseGetByGroup,
|
|
110
|
+
* { groupId: orgGroupId },
|
|
111
|
+
* );
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export const enterpriseGetByGroup = query({
|
|
115
|
+
args: { groupId: v.id("Group") },
|
|
116
|
+
returns: v.union(vEnterpriseDoc, v.null()),
|
|
117
|
+
handler: async (ctx, { groupId }) => {
|
|
118
|
+
return await ctx.db
|
|
119
|
+
.query("Enterprise")
|
|
120
|
+
.withIndex("group_id", (idx) => idx.eq("groupId", groupId))
|
|
121
|
+
.first();
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Retrieve an enterprise record by one of its linked domain names.
|
|
127
|
+
*
|
|
128
|
+
* Looks up an `EnterpriseDomain` row matching the given domain string, then
|
|
129
|
+
* resolves the parent enterprise. Returns both the enterprise and the matched
|
|
130
|
+
* domain document, or `null` if the domain is not registered or its enterprise
|
|
131
|
+
* no longer exists.
|
|
132
|
+
*
|
|
133
|
+
* @param args.domain - The domain name to search for (e.g. `"acme.com"`).
|
|
134
|
+
* @returns An object containing the `enterprise` and `domain` documents, or `null` if not found.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* const result = await ctx.runQuery(
|
|
139
|
+
* components.auth.enterprise.enterpriseGetByDomain,
|
|
140
|
+
* { domain: "acme.com" },
|
|
141
|
+
* );
|
|
142
|
+
* if (result) {
|
|
143
|
+
* console.log(result.enterprise.name, result.domain.verifiedAt);
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export const enterpriseGetByDomain = query({
|
|
148
|
+
args: { domain: v.string() },
|
|
149
|
+
returns: v.union(
|
|
150
|
+
v.object({
|
|
151
|
+
enterprise: vEnterpriseDoc,
|
|
152
|
+
domain: vEnterpriseDomainDoc,
|
|
153
|
+
}),
|
|
154
|
+
v.null(),
|
|
155
|
+
),
|
|
156
|
+
handler: async (ctx, { domain }) => {
|
|
157
|
+
const domainRow = await ctx.db
|
|
158
|
+
.query("EnterpriseDomain")
|
|
159
|
+
.withIndex("domain", (idx) => idx.eq("domain", domain))
|
|
160
|
+
.first();
|
|
161
|
+
if (!domainRow) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
const enterprise = await ctx.db.get("Enterprise", domainRow.enterpriseId);
|
|
165
|
+
if (!enterprise) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
return { enterprise, domain: domainRow };
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* List enterprise records with optional filtering and cursor-based pagination.
|
|
174
|
+
*
|
|
175
|
+
* Supports filtering by `groupId`, `slug`, and/or `status`. The query selects
|
|
176
|
+
* the most specific index available for the primary filter, then applies
|
|
177
|
+
* remaining predicates as post-filters. Results are ordered by creation time
|
|
178
|
+
* (or the specified field) and paginated using an opaque cursor.
|
|
179
|
+
*
|
|
180
|
+
* @param args.where - Optional filter criteria: `groupId`, `slug`, and/or `status`.
|
|
181
|
+
* @param args.limit - Maximum number of items per page (clamped between 1 and 100, defaults to 50).
|
|
182
|
+
* @param args.cursor - An opaque cursor string returned from a previous call to fetch the next page, or `null` / omitted for the first page.
|
|
183
|
+
* @param args.orderBy - The field to sort results by: `"_creationTime"`, `"name"`, `"slug"`, or `"status"`.
|
|
184
|
+
* @param args.order - Sort direction: `"asc"` or `"desc"` (defaults to `"desc"`).
|
|
185
|
+
* @returns A paginated result containing `items` (array of enterprise documents) and `nextCursor` (`string | null`).
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* ```ts
|
|
189
|
+
* const page = await ctx.runQuery(
|
|
190
|
+
* components.auth.enterprise.enterpriseList,
|
|
191
|
+
* {
|
|
192
|
+
* where: { status: "active" },
|
|
193
|
+
* limit: 25,
|
|
194
|
+
* order: "asc",
|
|
195
|
+
* },
|
|
196
|
+
* );
|
|
197
|
+
* for (const ent of page.items) {
|
|
198
|
+
* console.log(ent.name);
|
|
199
|
+
* }
|
|
200
|
+
* // Fetch next page:
|
|
201
|
+
* const nextPage = await ctx.runQuery(
|
|
202
|
+
* components.auth.enterprise.enterpriseList,
|
|
203
|
+
* { where: { status: "active" }, cursor: page.nextCursor },
|
|
204
|
+
* );
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
export const enterpriseList = query({
|
|
208
|
+
args: {
|
|
209
|
+
where: v.optional(
|
|
210
|
+
v.object({
|
|
211
|
+
groupId: v.optional(v.id("Group")),
|
|
212
|
+
slug: v.optional(v.string()),
|
|
213
|
+
status: v.optional(vEnterpriseStatus),
|
|
214
|
+
}),
|
|
215
|
+
),
|
|
216
|
+
limit: v.optional(v.number()),
|
|
217
|
+
cursor: v.optional(v.union(v.string(), v.null())),
|
|
218
|
+
orderBy: v.optional(
|
|
219
|
+
v.union(
|
|
220
|
+
v.literal("_creationTime"),
|
|
221
|
+
v.literal("name"),
|
|
222
|
+
v.literal("slug"),
|
|
223
|
+
v.literal("status"),
|
|
224
|
+
),
|
|
225
|
+
),
|
|
226
|
+
order: v.optional(v.union(v.literal("asc"), v.literal("desc"))),
|
|
227
|
+
},
|
|
228
|
+
returns: vPaginated(vEnterpriseDoc),
|
|
229
|
+
handler: async (ctx, args) => {
|
|
230
|
+
const where = args.where ?? {};
|
|
231
|
+
const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);
|
|
232
|
+
const order = args.order ?? "desc";
|
|
233
|
+
|
|
234
|
+
let q;
|
|
235
|
+
if (where.groupId !== undefined) {
|
|
236
|
+
q = ctx.db
|
|
237
|
+
.query("Enterprise")
|
|
238
|
+
.withIndex("group_id", (idx) => idx.eq("groupId", where.groupId!));
|
|
239
|
+
} else if (where.slug !== undefined) {
|
|
240
|
+
q = ctx.db
|
|
241
|
+
.query("Enterprise")
|
|
242
|
+
.withIndex("slug", (idx) => idx.eq("slug", where.slug!));
|
|
243
|
+
} else if (where.status !== undefined) {
|
|
244
|
+
q = ctx.db
|
|
245
|
+
.query("Enterprise")
|
|
246
|
+
.withIndex("status", (idx) => idx.eq("status", where.status!));
|
|
247
|
+
} else {
|
|
248
|
+
q = ctx.db.query("Enterprise");
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if (where.groupId !== undefined && where.slug !== undefined) {
|
|
252
|
+
q = q.filter((f) => f.eq(f.field("slug"), where.slug!));
|
|
253
|
+
}
|
|
254
|
+
if (where.status !== undefined && where.groupId === undefined) {
|
|
255
|
+
// already handled by index in the dedicated branch
|
|
256
|
+
} else if (where.status !== undefined) {
|
|
257
|
+
q = q.filter((f) => f.eq(f.field("status"), where.status!));
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
q = q.order(order);
|
|
261
|
+
const all = await q.collect();
|
|
262
|
+
let startIdx = 0;
|
|
263
|
+
if (args.cursor) {
|
|
264
|
+
const cursorIdx = all.findIndex((doc) => doc._id === args.cursor);
|
|
265
|
+
if (cursorIdx !== -1) {
|
|
266
|
+
startIdx = cursorIdx + 1;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const page = all.slice(startIdx, startIdx + limit + 1);
|
|
270
|
+
const hasMore = page.length > limit;
|
|
271
|
+
const items = hasMore ? page.slice(0, limit) : page;
|
|
272
|
+
const nextCursor = hasMore ? items[items.length - 1]._id : null;
|
|
273
|
+
return { items, nextCursor };
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Partially update (patch) an existing enterprise record.
|
|
279
|
+
*
|
|
280
|
+
* Merges the provided `data` fields into the existing enterprise document.
|
|
281
|
+
* Only the fields present in `data` are changed; all other fields are preserved.
|
|
282
|
+
*
|
|
283
|
+
* @param args.enterpriseId - The document ID of the enterprise to update.
|
|
284
|
+
* @param args.data - An object containing the fields to update (e.g. `{ name, status, policy }`).
|
|
285
|
+
* @returns `null` on success.
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* ```ts
|
|
289
|
+
* await ctx.runMutation(
|
|
290
|
+
* components.auth.enterprise.enterpriseUpdate,
|
|
291
|
+
* {
|
|
292
|
+
* enterpriseId,
|
|
293
|
+
* data: { status: "active", name: "Acme Corp (Renamed)" },
|
|
294
|
+
* },
|
|
295
|
+
* );
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
export const enterpriseUpdate = mutation({
|
|
299
|
+
args: { enterpriseId: v.id("Enterprise"), data: v.any() },
|
|
300
|
+
returns: v.null(),
|
|
301
|
+
handler: async (ctx, { enterpriseId, data }) => {
|
|
302
|
+
await ctx.db.patch(enterpriseId, data);
|
|
303
|
+
return null;
|
|
304
|
+
},
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Delete an enterprise record and all of its associated child data.
|
|
309
|
+
*
|
|
310
|
+
* This cascading delete removes the enterprise document along with all linked
|
|
311
|
+
* domain records, domain verification records, and enterprise secrets. Callers
|
|
312
|
+
* should ensure that higher-level cleanup (e.g. SCIM identities, webhook
|
|
313
|
+
* endpoints) is handled separately if needed.
|
|
314
|
+
*
|
|
315
|
+
* @param args.enterpriseId - The document ID of the enterprise to delete.
|
|
316
|
+
* @returns `null` on success.
|
|
317
|
+
*
|
|
318
|
+
* @example
|
|
319
|
+
* ```ts
|
|
320
|
+
* await ctx.runMutation(
|
|
321
|
+
* components.auth.enterprise.enterpriseDelete,
|
|
322
|
+
* { enterpriseId },
|
|
323
|
+
* );
|
|
324
|
+
* ```
|
|
325
|
+
*/
|
|
326
|
+
export const enterpriseDelete = mutation({
|
|
327
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
328
|
+
returns: v.null(),
|
|
329
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
330
|
+
const domains = await ctx.db
|
|
331
|
+
.query("EnterpriseDomain")
|
|
332
|
+
.withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId))
|
|
333
|
+
.collect();
|
|
334
|
+
for (const domain of domains) {
|
|
335
|
+
const verification = await ctx.db
|
|
336
|
+
.query("EnterpriseDomainVerification")
|
|
337
|
+
.withIndex("domain_id", (idx) => idx.eq("domainId", domain._id))
|
|
338
|
+
.first();
|
|
339
|
+
if (verification) {
|
|
340
|
+
await ctx.db.delete(verification._id);
|
|
341
|
+
}
|
|
342
|
+
await ctx.db.delete(domain._id);
|
|
343
|
+
}
|
|
344
|
+
const secrets = await ctx.db
|
|
345
|
+
.query("EnterpriseSecret")
|
|
346
|
+
.withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId))
|
|
347
|
+
.collect();
|
|
348
|
+
for (const secret of secrets) {
|
|
349
|
+
await ctx.db.delete(secret._id);
|
|
350
|
+
}
|
|
351
|
+
await ctx.db.delete(enterpriseId);
|
|
352
|
+
return null;
|
|
353
|
+
},
|
|
354
|
+
});
|