@robelest/convex-auth 0.0.4-preview.13 → 0.0.4-preview.16
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 +140 -9
- package/dist/bin.cjs +5957 -5478
- package/dist/client/index.d.ts +3 -7
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +27 -26
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +14 -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 +1672 -24
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/convex.config.d.ts +2 -2
- package/dist/component/convex.config.d.ts.map +1 -1
- package/dist/component/index.d.ts +1 -1
- package/dist/component/index.js +2 -2
- package/dist/component/model.d.ts +153 -0
- package/dist/component/model.d.ts.map +1 -0
- package/dist/component/model.js +343 -0
- package/dist/component/model.js.map +1 -0
- package/dist/component/providers/sso.d.ts +1 -1
- package/dist/component/public/enterprise.d.ts +54 -0
- package/dist/component/public/enterprise.d.ts.map +1 -0
- package/dist/component/public/enterprise.js +515 -0
- package/dist/component/public/enterprise.js.map +1 -0
- package/dist/component/public/factors.d.ts +52 -0
- package/dist/component/public/factors.d.ts.map +1 -0
- package/dist/component/public/factors.js +285 -0
- package/dist/component/public/factors.js.map +1 -0
- package/dist/component/public/groups.d.ts +116 -0
- package/dist/component/public/groups.d.ts.map +1 -0
- package/dist/component/public/groups.js +596 -0
- package/dist/component/public/groups.js.map +1 -0
- package/dist/component/public/identity.d.ts +93 -0
- package/dist/component/public/identity.d.ts.map +1 -0
- package/dist/component/public/identity.js +426 -0
- package/dist/component/public/identity.js.map +1 -0
- package/dist/component/public/keys.d.ts +41 -0
- package/dist/component/public/keys.d.ts.map +1 -0
- package/dist/component/public/keys.js +157 -0
- package/dist/component/public/keys.js.map +1 -0
- package/dist/component/public/shared.d.ts +26 -0
- package/dist/component/public/shared.d.ts.map +1 -0
- package/dist/component/public/shared.js +32 -0
- package/dist/component/public/shared.js.map +1 -0
- package/dist/component/public.d.ts +9 -321
- package/dist/component/public.d.ts.map +1 -1
- package/dist/component/public.js +6 -2145
- package/dist/component/schema.d.ts +406 -260
- package/dist/component/schema.js +37 -32
- package/dist/component/schema.js.map +1 -1
- package/dist/component/server/auth.d.ts +161 -15
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +100 -7
- package/dist/component/server/auth.js.map +1 -1
- package/dist/component/server/cookies.js +3 -0
- package/dist/component/server/cookies.js.map +1 -1
- package/dist/component/server/db.js +1 -0
- package/dist/component/server/db.js.map +1 -1
- package/dist/component/server/device.js +3 -1
- package/dist/component/server/device.js.map +1 -1
- package/dist/component/server/domains/core.js +629 -0
- package/dist/component/server/domains/core.js.map +1 -0
- package/dist/component/server/domains/sso.js +884 -0
- package/dist/component/server/domains/sso.js.map +1 -0
- package/dist/component/server/factory.d.ts +136 -0
- package/dist/component/server/factory.d.ts.map +1 -0
- package/dist/component/server/factory.js +1134 -0
- package/dist/component/server/factory.js.map +1 -0
- package/dist/component/server/fx.js +2 -1
- package/dist/component/server/fx.js.map +1 -1
- package/dist/component/server/http.js +287 -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/component/server/keys.js +4 -0
- package/dist/component/server/keys.js.map +1 -1
- package/dist/component/server/mutations/account.js +1 -1
- package/dist/component/server/mutations/index.js +2 -2
- package/dist/component/server/mutations/index.js.map +1 -1
- package/dist/component/server/mutations/invalidate.js +1 -1
- package/dist/component/server/mutations/oauth.js +10 -7
- package/dist/component/server/mutations/oauth.js.map +1 -1
- package/dist/component/server/mutations/refresh.js +1 -1
- package/dist/component/server/mutations/register.js +1 -1
- package/dist/component/server/mutations/retrieve.js +1 -1
- package/dist/component/server/mutations/signature.js +1 -1
- package/dist/component/server/mutations/store.js +6 -3
- package/dist/component/server/mutations/store.js.map +1 -1
- package/dist/component/server/mutations/verify.js +1 -1
- package/dist/component/server/oauth.js +3 -0
- package/dist/component/server/oauth.js.map +1 -1
- package/dist/component/server/passkey.js +3 -2
- package/dist/component/server/passkey.js.map +1 -1
- package/dist/component/server/provider.js +2 -0
- package/dist/component/server/provider.js.map +1 -1
- package/dist/component/server/providers.js +10 -0
- package/dist/component/server/providers.js.map +1 -1
- package/dist/component/server/ratelimit.js +3 -0
- package/dist/component/server/ratelimit.js.map +1 -1
- package/dist/component/server/redirects.js +2 -0
- package/dist/component/server/redirects.js.map +1 -1
- package/dist/component/server/refresh.js +5 -0
- package/dist/component/server/refresh.js.map +1 -1
- package/dist/component/server/sessions.js +5 -0
- package/dist/component/server/sessions.js.map +1 -1
- package/dist/component/server/signin.js +2 -1
- package/dist/component/server/signin.js.map +1 -1
- package/dist/component/server/sso.js +166 -19
- package/dist/component/server/sso.js.map +1 -1
- package/dist/component/server/tokens.js +1 -0
- package/dist/component/server/tokens.js.map +1 -1
- package/dist/component/server/totp.js +4 -2
- package/dist/component/server/totp.js.map +1 -1
- package/dist/component/server/types.d.ts +106 -38
- 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 -0
- package/dist/component/server/users.js.map +1 -1
- package/dist/component/server/utils.js +44 -2
- package/dist/component/server/utils.js.map +1 -1
- package/dist/providers/anonymous.d.ts +1 -1
- package/dist/providers/credentials.d.ts +1 -1
- package/dist/providers/password.d.ts +1 -1
- package/dist/providers/sso.d.ts +1 -1
- package/dist/providers/sso.js.map +1 -1
- package/dist/server/auth.d.ts +163 -17
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +100 -7
- package/dist/server/auth.js.map +1 -1
- 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/db.d.ts +1 -125
- package/dist/server/db.js +1 -0
- package/dist/server/db.js.map +1 -1
- package/dist/server/device.d.ts +1 -24
- package/dist/server/device.js +3 -1
- package/dist/server/device.js.map +1 -1
- package/dist/server/domains/core.d.ts +434 -0
- package/dist/server/domains/core.d.ts.map +1 -0
- package/dist/server/domains/core.js +629 -0
- package/dist/server/domains/core.js.map +1 -0
- package/dist/server/domains/sso.d.ts +409 -0
- package/dist/server/domains/sso.d.ts.map +1 -0
- package/dist/server/domains/sso.js +884 -0
- package/dist/server/domains/sso.js.map +1 -0
- package/dist/server/enterpriseValidators.d.ts +1 -0
- package/dist/server/enterpriseValidators.js +60 -0
- package/dist/server/enterpriseValidators.js.map +1 -0
- package/dist/server/factory.d.ts +136 -0
- package/dist/server/factory.d.ts.map +1 -0
- package/dist/server/factory.js +1134 -0
- package/dist/server/factory.js.map +1 -0
- package/dist/server/fx.d.ts +1 -16
- package/dist/server/fx.d.ts.map +1 -1
- package/dist/server/fx.js +1 -0
- package/dist/server/fx.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 +287 -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 +468 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +530 -36
- package/dist/server/index.js.map +1 -1
- package/dist/server/keys.d.ts +1 -57
- package/dist/server/keys.js +4 -0
- package/dist/server/keys.js.map +1 -1
- package/dist/server/mutations/account.d.ts +7 -7
- package/dist/server/mutations/account.d.ts.map +1 -1
- package/dist/server/mutations/code.d.ts +13 -13
- package/dist/server/mutations/code.d.ts.map +1 -1
- package/dist/server/mutations/index.d.ts +107 -107
- package/dist/server/mutations/index.d.ts.map +1 -1
- package/dist/server/mutations/index.js +1 -1
- package/dist/server/mutations/index.js.map +1 -1
- package/dist/server/mutations/invalidate.d.ts +5 -5
- package/dist/server/mutations/invalidate.d.ts.map +1 -1
- package/dist/server/mutations/oauth.d.ts +10 -10
- package/dist/server/mutations/oauth.d.ts.map +1 -1
- package/dist/server/mutations/oauth.js +9 -6
- package/dist/server/mutations/oauth.js.map +1 -1
- package/dist/server/mutations/refresh.d.ts +4 -4
- package/dist/server/mutations/register.d.ts +12 -12
- package/dist/server/mutations/register.d.ts.map +1 -1
- package/dist/server/mutations/retrieve.d.ts +7 -7
- package/dist/server/mutations/signature.d.ts +5 -5
- package/dist/server/mutations/signin.d.ts +6 -6
- package/dist/server/mutations/signin.d.ts.map +1 -1
- package/dist/server/mutations/signout.d.ts +1 -1
- package/dist/server/mutations/store.d.ts +3 -2
- package/dist/server/mutations/store.d.ts.map +1 -1
- package/dist/server/mutations/store.js +6 -3
- package/dist/server/mutations/store.js.map +1 -1
- package/dist/server/mutations/verifier.d.ts +1 -1
- package/dist/server/mutations/verify.d.ts +11 -11
- package/dist/server/mutations/verify.d.ts.map +1 -1
- package/dist/server/oauth.d.ts +1 -59
- package/dist/server/oauth.js +3 -0
- package/dist/server/oauth.js.map +1 -1
- 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/provider.d.ts +1 -14
- package/dist/server/provider.d.ts.map +1 -1
- package/dist/server/provider.js +2 -0
- package/dist/server/provider.js.map +1 -1
- package/dist/server/providers.js +10 -0
- package/dist/server/providers.js.map +1 -1
- package/dist/server/ratelimit.d.ts +1 -22
- package/dist/server/ratelimit.js +3 -0
- package/dist/server/ratelimit.js.map +1 -1
- package/dist/server/redirects.d.ts +1 -10
- package/dist/server/redirects.js +2 -0
- package/dist/server/redirects.js.map +1 -1
- package/dist/server/refresh.d.ts +1 -37
- package/dist/server/refresh.js +5 -0
- package/dist/server/refresh.js.map +1 -1
- package/dist/server/sessions.d.ts +1 -28
- package/dist/server/sessions.js +5 -0
- package/dist/server/sessions.js.map +1 -1
- package/dist/server/signin.d.ts +1 -55
- package/dist/server/signin.js +2 -1
- package/dist/server/signin.js.map +1 -1
- package/dist/server/sso.d.ts +1 -348
- package/dist/server/sso.js +165 -18
- package/dist/server/sso.js.map +1 -1
- package/dist/server/templates.d.ts +1 -21
- package/dist/server/templates.js +1 -0
- package/dist/server/templates.js.map +1 -1
- package/dist/server/tokens.d.ts +1 -11
- package/dist/server/tokens.js +1 -0
- package/dist/server/tokens.js.map +1 -1
- package/dist/server/totp.d.ts +1 -23
- package/dist/server/totp.js +4 -2
- package/dist/server/totp.js.map +1 -1
- package/dist/server/types.d.ts +114 -77
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/dist/server/users.d.ts +1 -31
- package/dist/server/users.js +1 -0
- package/dist/server/users.js.map +1 -1
- package/dist/server/utils.d.ts +1 -27
- package/dist/server/utils.js +44 -2
- package/dist/server/utils.js.map +1 -1
- package/dist/server/version.d.ts +1 -1
- package/dist/server/version.js +1 -1
- package/dist/server/version.js.map +1 -1
- package/package.json +4 -5
- package/src/cli/bin.ts +5 -0
- package/src/cli/index.ts +22 -9
- package/src/cli/keys.ts +3 -0
- package/src/client/index.ts +36 -37
- package/src/component/_generated/api.ts +14 -0
- package/src/component/_generated/component.ts +2106 -9
- package/src/component/index.ts +3 -1
- package/src/component/model.ts +441 -0
- package/src/component/public/enterprise.ts +753 -0
- package/src/component/public/factors.ts +332 -0
- package/src/component/public/groups.ts +932 -0
- package/src/component/public/identity.ts +566 -0
- package/src/component/public/keys.ts +209 -0
- package/src/component/public/shared.ts +119 -0
- package/src/component/public.ts +5 -2965
- package/src/component/schema.ts +68 -63
- package/src/providers/sso.ts +1 -1
- package/src/server/auth.ts +413 -18
- package/src/server/cookies.ts +3 -0
- package/src/server/db.ts +3 -0
- package/src/server/device.ts +3 -1
- package/src/server/domains/core.ts +1071 -0
- package/src/server/domains/sso.ts +1749 -0
- package/src/server/enterpriseValidators.ts +93 -0
- package/src/server/factory.ts +2181 -0
- package/src/server/fx.ts +1 -0
- package/src/server/http.ts +529 -0
- package/src/server/identity.ts +18 -0
- package/src/server/index.ts +806 -40
- package/src/server/keys.ts +4 -0
- package/src/server/mutations/index.ts +1 -1
- package/src/server/mutations/oauth.ts +36 -8
- package/src/server/mutations/store.ts +6 -3
- package/src/server/oauth.ts +6 -0
- package/src/server/passkey.ts +3 -2
- package/src/server/provider.ts +2 -0
- package/src/server/providers.ts +20 -0
- package/src/server/ratelimit.ts +3 -0
- package/src/server/redirects.ts +2 -0
- package/src/server/refresh.ts +5 -0
- package/src/server/sessions.ts +5 -0
- package/src/server/signin.ts +1 -0
- package/src/server/sso.ts +259 -17
- package/src/server/templates.ts +1 -0
- package/src/server/tokens.ts +1 -0
- package/src/server/totp.ts +4 -2
- package/src/server/types.ts +178 -83
- package/src/server/users.ts +1 -0
- package/src/server/utils.ts +71 -1
- package/src/server/version.ts +1 -1
- package/dist/component/public.js.map +0 -1
- package/dist/component/server/implementation.d.ts +0 -1264
- package/dist/component/server/implementation.d.ts.map +0 -1
- package/dist/component/server/implementation.js +0 -2365
- package/dist/component/server/implementation.js.map +0 -1
- package/dist/server/cookies.d.ts.map +0 -1
- package/dist/server/db.d.ts.map +0 -1
- package/dist/server/device.d.ts.map +0 -1
- package/dist/server/implementation.d.ts +0 -1264
- package/dist/server/implementation.d.ts.map +0 -1
- package/dist/server/implementation.js +0 -2365
- package/dist/server/implementation.js.map +0 -1
- package/dist/server/keys.d.ts.map +0 -1
- package/dist/server/oauth.d.ts.map +0 -1
- package/dist/server/ratelimit.d.ts.map +0 -1
- package/dist/server/redirects.d.ts.map +0 -1
- package/dist/server/refresh.d.ts.map +0 -1
- package/dist/server/sessions.d.ts.map +0 -1
- package/dist/server/signin.d.ts.map +0 -1
- package/dist/server/sso.d.ts.map +0 -1
- package/dist/server/templates.d.ts.map +0 -1
- package/dist/server/tokens.d.ts.map +0 -1
- package/dist/server/totp.d.ts.map +0 -1
- package/dist/server/users.d.ts.map +0 -1
- package/dist/server/utils.d.ts.map +0 -1
- package/src/server/implementation.ts +0 -5336
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","names":[],"sources":["../../src/component/model.ts"],"sourcesContent":["import { v } from \"convex/values\";\n\nexport const TABLES = {\n User: \"User\",\n Session: \"Session\",\n Account: \"Account\",\n AuthVerifier: \"AuthVerifier\",\n VerificationCode: \"VerificationCode\",\n RefreshToken: \"RefreshToken\",\n Passkey: \"Passkey\",\n TotpFactor: \"TotpFactor\",\n RateLimit: \"RateLimit\",\n Group: \"Group\",\n GroupTag: \"GroupTag\",\n GroupMember: \"GroupMember\",\n GroupInvite: \"GroupInvite\",\n Enterprise: \"Enterprise\",\n EnterpriseDomain: \"EnterpriseDomain\",\n EnterpriseDomainVerification: \"EnterpriseDomainVerification\",\n EnterpriseSecret: \"EnterpriseSecret\",\n EnterpriseScimConfig: \"EnterpriseScimConfig\",\n EnterpriseScimIdentity: \"EnterpriseScimIdentity\",\n EnterpriseAuditEvent: \"EnterpriseAuditEvent\",\n EnterpriseWebhookEndpoint: \"EnterpriseWebhookEndpoint\",\n EnterpriseWebhookDelivery: \"EnterpriseWebhookDelivery\",\n ApiKey: \"ApiKey\",\n DeviceCode: \"DeviceCode\",\n} as const;\n\nexport const vTag = v.object({ key: v.string(), value: v.string() });\n\nexport const vInviteStatus = v.union(\n v.literal(\"pending\"),\n v.literal(\"accepted\"),\n v.literal(\"revoked\"),\n v.literal(\"expired\"),\n);\n\nexport const vDeviceStatus = v.union(\n v.literal(\"pending\"),\n v.literal(\"authorized\"),\n v.literal(\"denied\"),\n);\n\nexport const vEnterpriseAccountLinkingPolicy = v.union(\n v.literal(\"verifiedEmail\"),\n v.literal(\"none\"),\n);\n\nexport const vEnterpriseScimReuseUserPolicy = v.union(\n v.literal(\"externalId\"),\n v.literal(\"none\"),\n);\n\nexport const vEnterpriseJitProvisioningMode = v.union(\n v.literal(\"off\"),\n v.literal(\"createUser\"),\n v.literal(\"createUserAndMembership\"),\n);\n\nexport const vEnterpriseDeprovisionMode = v.union(\n v.literal(\"soft\"),\n v.literal(\"hard\"),\n);\n\nexport const vEnterpriseStatus = v.union(\n v.literal(\"draft\"),\n v.literal(\"active\"),\n v.literal(\"disabled\"),\n);\n\nexport const vEnterprisePolicy = v.object({\n version: v.literal(1),\n identity: v.object({\n accountLinking: v.object({\n oidc: vEnterpriseAccountLinkingPolicy,\n saml: vEnterpriseAccountLinkingPolicy,\n }),\n }),\n provisioning: v.object({\n scimReuse: v.object({\n user: vEnterpriseScimReuseUserPolicy,\n }),\n jit: v.object({\n mode: vEnterpriseJitProvisioningMode,\n defaultRole: v.optional(v.string()),\n defaultRoleIds: v.optional(v.array(v.string())),\n }),\n deprovision: v.object({\n mode: vEnterpriseDeprovisionMode,\n }),\n }),\n extend: v.optional(v.any()),\n});\n\nexport const vScimStatus = v.union(\n v.literal(\"draft\"),\n v.literal(\"active\"),\n v.literal(\"disabled\"),\n);\n\nexport const vScimResourceType = v.union(v.literal(\"user\"), v.literal(\"group\"));\n\nexport const vAuditActorType = v.union(\n v.literal(\"user\"),\n v.literal(\"system\"),\n v.literal(\"scim\"),\n v.literal(\"api_key\"),\n v.literal(\"webhook\"),\n);\n\nexport const vAuditStatus = v.union(v.literal(\"success\"), v.literal(\"failure\"));\n\nexport const vWebhookEndpointStatus = v.union(\n v.literal(\"active\"),\n v.literal(\"disabled\"),\n);\n\nexport const vWebhookDeliveryStatus = v.union(\n v.literal(\"pending\"),\n v.literal(\"processing\"),\n v.literal(\"delivered\"),\n v.literal(\"failed\"),\n);\n\nexport const vInviteTokenAcceptStatus = v.union(\n v.literal(\"accepted\"),\n v.literal(\"already_accepted\"),\n);\n\nexport const vMembershipStatus = v.union(\n v.literal(\"joined\"),\n v.literal(\"already_joined\"),\n v.literal(\"not_applicable\"),\n);\n\nexport const vApiKeyScope = v.object({\n resource: v.string(),\n actions: v.array(v.string()),\n});\n\nexport const vApiKeyRateLimit = v.object({\n maxRequests: v.number(),\n windowMs: v.number(),\n});\n\nexport const vApiKeyRateLimitState = v.object({\n attemptsLeft: v.number(),\n lastAttemptTime: v.number(),\n});\n\nexport const vEnterpriseSecretKind = v.union(v.literal(\"oidc_client_secret\"));\n\nfunction vDocMeta<T extends (typeof TABLES)[keyof typeof TABLES]>(\n tableName: T,\n) {\n return {\n _id: v.id(tableName),\n _creationTime: v.number(),\n };\n}\n\nexport const vUserDoc = v.object({\n ...vDocMeta(TABLES.User),\n name: v.optional(v.string()),\n image: v.optional(v.string()),\n email: v.optional(v.string()),\n emailVerificationTime: v.optional(v.number()),\n phone: v.optional(v.string()),\n phoneVerificationTime: v.optional(v.number()),\n isAnonymous: v.optional(v.boolean()),\n extend: v.optional(v.any()),\n});\n\nexport const vSessionDoc = v.object({\n ...vDocMeta(TABLES.Session),\n userId: v.id(TABLES.User),\n expirationTime: v.number(),\n});\n\nexport const vAccountDoc = v.object({\n ...vDocMeta(TABLES.Account),\n userId: v.id(TABLES.User),\n provider: v.string(),\n providerAccountId: v.string(),\n secret: v.optional(v.string()),\n emailVerified: v.optional(v.string()),\n phoneVerified: v.optional(v.string()),\n extend: v.optional(v.any()),\n});\n\nexport const vAuthVerifierDoc = v.object({\n ...vDocMeta(TABLES.AuthVerifier),\n sessionId: v.optional(v.id(TABLES.Session)),\n signature: v.optional(v.string()),\n});\n\nexport const vVerificationCodeDoc = v.object({\n ...vDocMeta(TABLES.VerificationCode),\n accountId: v.id(TABLES.Account),\n provider: v.string(),\n code: v.string(),\n expirationTime: v.number(),\n verifier: v.optional(v.string()),\n emailVerified: v.optional(v.string()),\n phoneVerified: v.optional(v.string()),\n});\n\nexport const vRefreshTokenDoc = v.object({\n ...vDocMeta(TABLES.RefreshToken),\n sessionId: v.id(TABLES.Session),\n expirationTime: v.number(),\n firstUsedTime: v.optional(v.number()),\n parentRefreshTokenId: v.optional(v.id(TABLES.RefreshToken)),\n});\n\nexport const vPasskeyDoc = v.object({\n ...vDocMeta(TABLES.Passkey),\n userId: v.id(TABLES.User),\n credentialId: v.string(),\n publicKey: v.bytes(),\n algorithm: v.number(),\n counter: v.number(),\n transports: v.optional(v.array(v.string())),\n deviceType: v.string(),\n backedUp: v.boolean(),\n name: v.optional(v.string()),\n createdAt: v.number(),\n lastUsedAt: v.optional(v.number()),\n});\n\nexport const vTotpFactorDoc = v.object({\n ...vDocMeta(TABLES.TotpFactor),\n userId: v.id(TABLES.User),\n secret: v.bytes(),\n digits: v.number(),\n period: v.number(),\n verified: v.boolean(),\n name: v.optional(v.string()),\n createdAt: v.number(),\n lastUsedAt: v.optional(v.number()),\n});\n\nexport const vRateLimitDoc = v.object({\n ...vDocMeta(TABLES.RateLimit),\n identifier: v.string(),\n last_attempt_time: v.number(),\n attempts_left: v.number(),\n});\n\nexport const vGroupDoc = v.object({\n ...vDocMeta(TABLES.Group),\n name: v.string(),\n slug: v.optional(v.string()),\n type: v.optional(v.string()),\n parentGroupId: v.optional(v.id(TABLES.Group)),\n tags: v.optional(v.array(vTag)),\n extend: v.optional(v.any()),\n});\n\nexport const vGroupMemberDoc = v.object({\n ...vDocMeta(TABLES.GroupMember),\n groupId: v.id(TABLES.Group),\n userId: v.id(TABLES.User),\n role: v.optional(v.string()),\n roleIds: v.optional(v.array(v.string())),\n status: v.optional(v.string()),\n extend: v.optional(v.any()),\n});\n\nexport const vGroupInviteDoc = v.object({\n ...vDocMeta(TABLES.GroupInvite),\n groupId: v.optional(v.id(TABLES.Group)),\n invitedByUserId: v.optional(v.id(TABLES.User)),\n email: v.optional(v.string()),\n tokenHash: v.string(),\n role: v.optional(v.string()),\n roleIds: v.optional(v.array(v.string())),\n status: vInviteStatus,\n expiresTime: v.optional(v.number()),\n acceptedByUserId: v.optional(v.id(TABLES.User)),\n acceptedTime: v.optional(v.number()),\n extend: v.optional(v.any()),\n});\n\nexport const vApiKeyDoc = v.object({\n ...vDocMeta(TABLES.ApiKey),\n userId: v.id(TABLES.User),\n prefix: v.string(),\n hashedKey: v.string(),\n name: v.string(),\n scopes: v.array(vApiKeyScope),\n rateLimit: v.optional(vApiKeyRateLimit),\n rateLimitState: v.optional(vApiKeyRateLimitState),\n expiresAt: v.optional(v.number()),\n lastUsedAt: v.optional(v.number()),\n createdAt: v.number(),\n revoked: v.boolean(),\n metadata: v.optional(v.any()),\n});\n\nexport const vDeviceCodeDoc = v.object({\n ...vDocMeta(TABLES.DeviceCode),\n deviceCodeHash: v.string(),\n userCode: v.string(),\n expiresAt: v.number(),\n interval: v.number(),\n status: vDeviceStatus,\n userId: v.optional(v.id(TABLES.User)),\n sessionId: v.optional(v.id(TABLES.Session)),\n lastPolledAt: v.optional(v.number()),\n});\n\nexport const vEnterpriseDoc = v.object({\n ...vDocMeta(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n slug: v.optional(v.string()),\n name: v.optional(v.string()),\n status: vEnterpriseStatus,\n policy: v.optional(vEnterprisePolicy),\n config: v.optional(v.any()),\n extend: v.optional(v.any()),\n});\n\nexport const vEnterpriseDomainDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseDomain),\n enterpriseId: v.id(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n domain: v.string(),\n isPrimary: v.boolean(),\n verifiedAt: v.optional(v.number()),\n});\n\nexport const vEnterpriseDomainVerificationDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseDomainVerification),\n enterpriseId: v.id(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n domainId: v.id(TABLES.EnterpriseDomain),\n domain: v.string(),\n recordName: v.string(),\n token: v.string(),\n tokenHash: v.string(),\n requestedAt: v.number(),\n expiresAt: v.number(),\n});\n\nexport const vEnterpriseSecretDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseSecret),\n enterpriseId: v.id(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n kind: vEnterpriseSecretKind,\n ciphertext: v.string(),\n updatedAt: v.number(),\n});\n\nexport const vEnterpriseScimConfigDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseScimConfig),\n enterpriseId: v.id(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n status: vScimStatus,\n basePath: v.string(),\n tokenHash: v.string(),\n lastRotatedAt: v.optional(v.number()),\n extend: v.optional(v.any()),\n});\n\nexport const vEnterpriseScimIdentityDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseScimIdentity),\n enterpriseId: v.id(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n resourceType: vScimResourceType,\n externalId: v.string(),\n userId: v.optional(v.id(TABLES.User)),\n mappedGroupId: v.optional(v.id(TABLES.Group)),\n lastProvisionedAt: v.optional(v.number()),\n active: v.optional(v.boolean()),\n raw: v.optional(v.any()),\n});\n\nexport const vEnterpriseAuditEventDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseAuditEvent),\n enterpriseId: v.id(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n eventType: v.string(),\n actorType: vAuditActorType,\n actorId: v.optional(v.string()),\n subjectType: v.string(),\n subjectId: v.optional(v.string()),\n status: vAuditStatus,\n occurredAt: v.number(),\n requestId: v.optional(v.string()),\n ip: v.optional(v.string()),\n metadata: v.optional(v.any()),\n});\n\nexport const vEnterpriseWebhookEndpointDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseWebhookEndpoint),\n enterpriseId: v.id(TABLES.Enterprise),\n groupId: v.id(TABLES.Group),\n url: v.string(),\n status: vWebhookEndpointStatus,\n secretHash: v.string(),\n subscriptions: v.array(v.string()),\n createdByUserId: v.optional(v.id(TABLES.User)),\n lastSuccessAt: v.optional(v.number()),\n lastFailureAt: v.optional(v.number()),\n failureCount: v.number(),\n extend: v.optional(v.any()),\n});\n\nexport const vEnterpriseWebhookDeliveryDoc = v.object({\n ...vDocMeta(TABLES.EnterpriseWebhookDelivery),\n enterpriseId: v.id(TABLES.Enterprise),\n endpointId: v.id(TABLES.EnterpriseWebhookEndpoint),\n auditEventId: v.optional(v.id(TABLES.EnterpriseAuditEvent)),\n eventType: v.string(),\n status: vWebhookDeliveryStatus,\n attemptCount: v.number(),\n nextAttemptAt: v.number(),\n lastAttemptAt: v.optional(v.number()),\n lastResponseStatus: v.optional(v.number()),\n lastError: v.optional(v.string()),\n payload: v.any(),\n});\n\nexport const vRateLimitResult = v.object({\n ...vDocMeta(TABLES.RateLimit),\n identifier: v.string(),\n last_attempt_time: v.number(),\n attempts_left: v.number(),\n attemptsLeft: v.number(),\n lastAttemptTime: v.number(),\n});\n\nexport const vInviteAcceptByTokenResult = v.object({\n inviteId: v.id(TABLES.GroupInvite),\n groupId: v.union(v.id(TABLES.Group), v.null()),\n memberId: v.optional(v.id(TABLES.GroupMember)),\n inviteStatus: vInviteTokenAcceptStatus,\n membershipStatus: vMembershipStatus,\n});\n"],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* });
|
|
16
16
|
*
|
|
17
17
|
* // auth.sso is now available
|
|
18
|
-
* await auth.sso.oidc.configure(ctx, { enterpriseId, clientId, ... });
|
|
18
|
+
* await auth.sso.admin.oidc.configure(ctx, { enterpriseId, clientId, ... });
|
|
19
19
|
* ```
|
|
20
20
|
*
|
|
21
21
|
* Without `new SSO()` in the providers list, `auth.sso` is not
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
declare namespace enterprise_d_exports {
|
|
2
|
+
export { enterpriseAuditEventCreate, enterpriseAuditEventList, enterpriseCreate, enterpriseDelete, enterpriseDomainAdd, enterpriseDomainDelete, enterpriseDomainList, enterpriseDomainVerificationDelete, enterpriseDomainVerificationGet, enterpriseDomainVerificationUpsert, enterpriseDomainVerify, enterpriseGet, enterpriseGetByDomain, enterpriseGetByGroup, enterpriseList, enterpriseScimConfigGetByEnterprise, enterpriseScimConfigGetByTokenHash, enterpriseScimConfigUpsert, enterpriseScimIdentityDelete, enterpriseScimIdentityGet, enterpriseScimIdentityGetByEnterpriseAndUser, enterpriseScimIdentityGetByMappedGroup, enterpriseScimIdentityGetByUser, enterpriseScimIdentityListByEnterprise, enterpriseScimIdentityUpsert, enterpriseSecretDelete, enterpriseSecretGet, enterpriseSecretUpsert, enterpriseUpdate, enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointGet, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate };
|
|
3
|
+
}
|
|
4
|
+
/** Create an enterprise record attached to a root group. */
|
|
5
|
+
declare const enterpriseCreate: any;
|
|
6
|
+
/** Retrieve an enterprise record by ID. */
|
|
7
|
+
declare const enterpriseGet: any;
|
|
8
|
+
/** Retrieve an enterprise record by group ID. */
|
|
9
|
+
declare const enterpriseGetByGroup: any;
|
|
10
|
+
/** Retrieve an enterprise record by a linked domain. */
|
|
11
|
+
declare const enterpriseGetByDomain: any;
|
|
12
|
+
/** List enterprises with lightweight filtering and cursor pagination. */
|
|
13
|
+
declare const enterpriseList: any;
|
|
14
|
+
/** Patch an enterprise record. */
|
|
15
|
+
declare const enterpriseUpdate: any;
|
|
16
|
+
/** Delete an enterprise record. */
|
|
17
|
+
declare const enterpriseDelete: any;
|
|
18
|
+
/** Link a domain to an enterprise record. */
|
|
19
|
+
declare const enterpriseDomainAdd: any;
|
|
20
|
+
/** List domains linked to an enterprise. */
|
|
21
|
+
declare const enterpriseDomainList: any;
|
|
22
|
+
/** Remove a linked enterprise domain. */
|
|
23
|
+
declare const enterpriseDomainDelete: any;
|
|
24
|
+
declare const enterpriseDomainVerificationGet: any;
|
|
25
|
+
declare const enterpriseDomainVerificationUpsert: any;
|
|
26
|
+
declare const enterpriseDomainVerificationDelete: any;
|
|
27
|
+
declare const enterpriseDomainVerify: any;
|
|
28
|
+
declare const enterpriseSecretUpsert: any;
|
|
29
|
+
declare const enterpriseSecretGet: any;
|
|
30
|
+
declare const enterpriseSecretDelete: any;
|
|
31
|
+
/** Create or rotate SCIM configuration for an enterprise. */
|
|
32
|
+
declare const enterpriseScimConfigUpsert: any;
|
|
33
|
+
declare const enterpriseScimConfigGetByEnterprise: any;
|
|
34
|
+
declare const enterpriseScimConfigGetByTokenHash: any;
|
|
35
|
+
declare const enterpriseScimIdentityGet: any;
|
|
36
|
+
declare const enterpriseScimIdentityGetByUser: any;
|
|
37
|
+
declare const enterpriseScimIdentityGetByEnterpriseAndUser: any;
|
|
38
|
+
declare const enterpriseScimIdentityGetByMappedGroup: any;
|
|
39
|
+
declare const enterpriseScimIdentityListByEnterprise: any;
|
|
40
|
+
declare const enterpriseScimIdentityUpsert: any;
|
|
41
|
+
declare const enterpriseScimIdentityDelete: any;
|
|
42
|
+
declare const enterpriseAuditEventCreate: any;
|
|
43
|
+
declare const enterpriseAuditEventList: any;
|
|
44
|
+
declare const enterpriseWebhookEndpointCreate: any;
|
|
45
|
+
declare const enterpriseWebhookEndpointList: any;
|
|
46
|
+
declare const enterpriseWebhookEndpointGet: any;
|
|
47
|
+
declare const enterpriseWebhookEndpointUpdate: any;
|
|
48
|
+
declare const enterpriseWebhookDeliveryEnqueue: any;
|
|
49
|
+
declare const enterpriseWebhookDeliveryListReady: any;
|
|
50
|
+
declare const enterpriseWebhookDeliveryList: any;
|
|
51
|
+
declare const enterpriseWebhookDeliveryPatch: any;
|
|
52
|
+
//#endregion
|
|
53
|
+
export { enterpriseAuditEventCreate, enterpriseAuditEventList, enterpriseCreate, enterpriseDelete, enterpriseDomainAdd, enterpriseDomainDelete, enterpriseDomainList, enterpriseDomainVerificationDelete, enterpriseDomainVerificationGet, enterpriseDomainVerificationUpsert, enterpriseDomainVerify, enterpriseGet, enterpriseGetByDomain, enterpriseGetByGroup, enterpriseList, enterpriseScimConfigGetByEnterprise, enterpriseScimConfigGetByTokenHash, enterpriseScimConfigUpsert, enterpriseScimIdentityDelete, enterpriseScimIdentityGet, enterpriseScimIdentityGetByEnterpriseAndUser, enterpriseScimIdentityGetByMappedGroup, enterpriseScimIdentityGetByUser, enterpriseScimIdentityListByEnterprise, enterpriseScimIdentityUpsert, enterpriseSecretDelete, enterpriseSecretGet, enterpriseSecretUpsert, enterpriseUpdate, enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointGet, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate, enterprise_d_exports };
|
|
54
|
+
//# sourceMappingURL=enterprise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterprise.d.ts","names":[],"sources":["../../../src/component/public/enterprise.ts"],"mappings":";;;;cA8Ba,gBAAA;;cA8BA,aAAA;;cASA,oBAAA;;cAYA,qBAAA;;cA0BA,cAAA;;cAuEA,gBAAA;;cAUA,gBAAA;;cA+BA,mBAAA;;cAuDA,oBAAA;;cAYA,sBAAA;AAAA,cAgBA,+BAAA;AAAA,cAWA,kCAAA;AAAA,cA0BA,kCAAA;AAAA,cAeA,sBAAA;AAAA,cA0BA,sBAAA;AAAA,cAwBA,mBAAA;AAAA,cAgBA,sBAAA;;cAqBA,0BAAA;AAAA,cA0BA,mCAAA;AAAA,cAWA,kCAAA;AAAA,cAWA,yBAAA;AAAA,cAoBA,+BAAA;AAAA,cAWA,4CAAA;AAAA,cAgBA,sCAAA;AAAA,cAaA,sCAAA;AAAA,cAWA,4BAAA;AAAA,cA+BA,4BAAA;AAAA,cASA,0BAAA;AAAA,cAqBA,wBAAA;AAAA,cA+BA,+BAAA;AAAA,cAqBA,6BAAA;AAAA,cAWA,4BAAA;AAAA,cAQA,+BAAA;AAAA,cASA,gCAAA;AAAA,cAmBA,kCAAA;AAAA,cAaA,6BAAA;AAAA,cAYA,8BAAA"}
|
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import { mutation, query } from "../functions.js";
|
|
2
|
+
import { vAuditActorType, vAuditStatus, vEnterpriseAuditEventDoc, vEnterpriseDoc, vEnterpriseDomainDoc, vEnterpriseDomainVerificationDoc, vEnterprisePolicy, vEnterpriseScimConfigDoc, vEnterpriseScimIdentityDoc, vEnterpriseSecretDoc, vEnterpriseSecretKind, vEnterpriseStatus, vEnterpriseWebhookDeliveryDoc, vEnterpriseWebhookEndpointDoc, vScimResourceType, vScimStatus, vWebhookEndpointStatus } from "../model.js";
|
|
3
|
+
import { ConvexError, v, vPaginated } from "./shared.js";
|
|
4
|
+
|
|
5
|
+
//#region src/component/public/enterprise.ts
|
|
6
|
+
/** Create an enterprise record attached to a root group. */
|
|
7
|
+
const enterpriseCreate = mutation({
|
|
8
|
+
args: {
|
|
9
|
+
groupId: v.id("Group"),
|
|
10
|
+
slug: v.optional(v.string()),
|
|
11
|
+
name: v.optional(v.string()),
|
|
12
|
+
status: v.optional(vEnterpriseStatus),
|
|
13
|
+
policy: v.optional(vEnterprisePolicy),
|
|
14
|
+
config: v.optional(v.any()),
|
|
15
|
+
extend: v.optional(v.any())
|
|
16
|
+
},
|
|
17
|
+
returns: v.id("Enterprise"),
|
|
18
|
+
handler: async (ctx, args) => {
|
|
19
|
+
if (await ctx.db.query("Enterprise").withIndex("group_id", (idx) => idx.eq("groupId", args.groupId)).first()) throw new ConvexError({
|
|
20
|
+
code: "ENTERPRISE_ALREADY_EXISTS",
|
|
21
|
+
message: "An enterprise record already exists for this group."
|
|
22
|
+
});
|
|
23
|
+
return await ctx.db.insert("Enterprise", {
|
|
24
|
+
...args,
|
|
25
|
+
status: args.status ?? "draft"
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
/** Retrieve an enterprise record by ID. */
|
|
30
|
+
const enterpriseGet = query({
|
|
31
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
32
|
+
returns: v.union(vEnterpriseDoc, v.null()),
|
|
33
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
34
|
+
return await ctx.db.get("Enterprise", enterpriseId);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
/** Retrieve an enterprise record by group ID. */
|
|
38
|
+
const enterpriseGetByGroup = query({
|
|
39
|
+
args: { groupId: v.id("Group") },
|
|
40
|
+
returns: v.union(vEnterpriseDoc, v.null()),
|
|
41
|
+
handler: async (ctx, { groupId }) => {
|
|
42
|
+
return await ctx.db.query("Enterprise").withIndex("group_id", (idx) => idx.eq("groupId", groupId)).first();
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
/** Retrieve an enterprise record by a linked domain. */
|
|
46
|
+
const enterpriseGetByDomain = query({
|
|
47
|
+
args: { domain: v.string() },
|
|
48
|
+
returns: v.union(v.object({
|
|
49
|
+
enterprise: vEnterpriseDoc,
|
|
50
|
+
domain: vEnterpriseDomainDoc
|
|
51
|
+
}), v.null()),
|
|
52
|
+
handler: async (ctx, { domain }) => {
|
|
53
|
+
const domainRow = await ctx.db.query("EnterpriseDomain").withIndex("domain", (idx) => idx.eq("domain", domain)).first();
|
|
54
|
+
if (!domainRow) return null;
|
|
55
|
+
const enterprise = await ctx.db.get("Enterprise", domainRow.enterpriseId);
|
|
56
|
+
if (!enterprise) return null;
|
|
57
|
+
return {
|
|
58
|
+
enterprise,
|
|
59
|
+
domain: domainRow
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
/** List enterprises with lightweight filtering and cursor pagination. */
|
|
64
|
+
const enterpriseList = query({
|
|
65
|
+
args: {
|
|
66
|
+
where: v.optional(v.object({
|
|
67
|
+
groupId: v.optional(v.id("Group")),
|
|
68
|
+
slug: v.optional(v.string()),
|
|
69
|
+
status: v.optional(vEnterpriseStatus)
|
|
70
|
+
})),
|
|
71
|
+
limit: v.optional(v.number()),
|
|
72
|
+
cursor: v.optional(v.union(v.string(), v.null())),
|
|
73
|
+
orderBy: v.optional(v.union(v.literal("_creationTime"), v.literal("name"), v.literal("slug"), v.literal("status"))),
|
|
74
|
+
order: v.optional(v.union(v.literal("asc"), v.literal("desc")))
|
|
75
|
+
},
|
|
76
|
+
returns: vPaginated(vEnterpriseDoc),
|
|
77
|
+
handler: async (ctx, args) => {
|
|
78
|
+
const where = args.where ?? {};
|
|
79
|
+
const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);
|
|
80
|
+
const order = args.order ?? "desc";
|
|
81
|
+
let q;
|
|
82
|
+
if (where.groupId !== void 0) q = ctx.db.query("Enterprise").withIndex("group_id", (idx) => idx.eq("groupId", where.groupId));
|
|
83
|
+
else if (where.slug !== void 0) q = ctx.db.query("Enterprise").withIndex("slug", (idx) => idx.eq("slug", where.slug));
|
|
84
|
+
else if (where.status !== void 0) q = ctx.db.query("Enterprise").withIndex("status", (idx) => idx.eq("status", where.status));
|
|
85
|
+
else q = ctx.db.query("Enterprise");
|
|
86
|
+
if (where.groupId !== void 0 && where.slug !== void 0) q = q.filter((f) => f.eq(f.field("slug"), where.slug));
|
|
87
|
+
if (where.status !== void 0 && where.groupId === void 0) {} else if (where.status !== void 0) q = q.filter((f) => f.eq(f.field("status"), where.status));
|
|
88
|
+
q = q.order(order);
|
|
89
|
+
const all = await q.collect();
|
|
90
|
+
let startIdx = 0;
|
|
91
|
+
if (args.cursor) {
|
|
92
|
+
const cursorIdx = all.findIndex((doc) => doc._id === args.cursor);
|
|
93
|
+
if (cursorIdx !== -1) startIdx = cursorIdx + 1;
|
|
94
|
+
}
|
|
95
|
+
const page = all.slice(startIdx, startIdx + limit + 1);
|
|
96
|
+
const hasMore = page.length > limit;
|
|
97
|
+
const items = hasMore ? page.slice(0, limit) : page;
|
|
98
|
+
return {
|
|
99
|
+
items,
|
|
100
|
+
nextCursor: hasMore ? items[items.length - 1]._id : null
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
/** Patch an enterprise record. */
|
|
105
|
+
const enterpriseUpdate = mutation({
|
|
106
|
+
args: {
|
|
107
|
+
enterpriseId: v.id("Enterprise"),
|
|
108
|
+
data: v.any()
|
|
109
|
+
},
|
|
110
|
+
returns: v.null(),
|
|
111
|
+
handler: async (ctx, { enterpriseId, data }) => {
|
|
112
|
+
await ctx.db.patch(enterpriseId, data);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
/** Delete an enterprise record. */
|
|
117
|
+
const enterpriseDelete = mutation({
|
|
118
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
119
|
+
returns: v.null(),
|
|
120
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
121
|
+
const domains = await ctx.db.query("EnterpriseDomain").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
122
|
+
for (const domain of domains) {
|
|
123
|
+
const verification = await ctx.db.query("EnterpriseDomainVerification").withIndex("domain_id", (idx) => idx.eq("domainId", domain._id)).first();
|
|
124
|
+
if (verification) await ctx.db.delete(verification._id);
|
|
125
|
+
await ctx.db.delete(domain._id);
|
|
126
|
+
}
|
|
127
|
+
const secrets = await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
128
|
+
for (const secret of secrets) await ctx.db.delete(secret._id);
|
|
129
|
+
await ctx.db.delete(enterpriseId);
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
/** Link a domain to an enterprise record. */
|
|
134
|
+
const enterpriseDomainAdd = mutation({
|
|
135
|
+
args: {
|
|
136
|
+
enterpriseId: v.id("Enterprise"),
|
|
137
|
+
groupId: v.id("Group"),
|
|
138
|
+
domain: v.string(),
|
|
139
|
+
isPrimary: v.optional(v.boolean())
|
|
140
|
+
},
|
|
141
|
+
returns: v.id("EnterpriseDomain"),
|
|
142
|
+
handler: async (ctx, args) => {
|
|
143
|
+
const existingByDomain = await ctx.db.query("EnterpriseDomain").withIndex("domain", (idx) => idx.eq("domain", args.domain)).first();
|
|
144
|
+
if (existingByDomain && existingByDomain.enterpriseId !== args.enterpriseId) throw new ConvexError({
|
|
145
|
+
code: "ENTERPRISE_DOMAIN_TAKEN",
|
|
146
|
+
message: "That domain is already attached to another enterprise."
|
|
147
|
+
});
|
|
148
|
+
const existingForEnterprise = await ctx.db.query("EnterpriseDomain").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", args.enterpriseId)).collect();
|
|
149
|
+
for (const row of existingForEnterprise) if (row.domain === args.domain) {
|
|
150
|
+
await ctx.db.patch(row._id, { isPrimary: args.isPrimary ?? row.isPrimary });
|
|
151
|
+
return row._id;
|
|
152
|
+
}
|
|
153
|
+
if (args.isPrimary === true) {
|
|
154
|
+
for (const row of existingForEnterprise) if (row.isPrimary) await ctx.db.patch(row._id, { isPrimary: false });
|
|
155
|
+
}
|
|
156
|
+
return await ctx.db.insert("EnterpriseDomain", {
|
|
157
|
+
...args,
|
|
158
|
+
isPrimary: args.isPrimary ?? existingForEnterprise.length === 0
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
/** List domains linked to an enterprise. */
|
|
163
|
+
const enterpriseDomainList = query({
|
|
164
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
165
|
+
returns: v.array(vEnterpriseDomainDoc),
|
|
166
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
167
|
+
return await ctx.db.query("EnterpriseDomain").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
/** Remove a linked enterprise domain. */
|
|
171
|
+
const enterpriseDomainDelete = mutation({
|
|
172
|
+
args: { domainId: v.id("EnterpriseDomain") },
|
|
173
|
+
returns: v.null(),
|
|
174
|
+
handler: async (ctx, { domainId }) => {
|
|
175
|
+
const verification = await ctx.db.query("EnterpriseDomainVerification").withIndex("domain_id", (idx) => idx.eq("domainId", domainId)).first();
|
|
176
|
+
if (verification) await ctx.db.delete(verification._id);
|
|
177
|
+
await ctx.db.delete(domainId);
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
const enterpriseDomainVerificationGet = query({
|
|
182
|
+
args: { domainId: v.id("EnterpriseDomain") },
|
|
183
|
+
returns: v.union(vEnterpriseDomainVerificationDoc, v.null()),
|
|
184
|
+
handler: async (ctx, { domainId }) => {
|
|
185
|
+
return await ctx.db.query("EnterpriseDomainVerification").withIndex("domain_id", (idx) => idx.eq("domainId", domainId)).first();
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
const enterpriseDomainVerificationUpsert = mutation({
|
|
189
|
+
args: {
|
|
190
|
+
enterpriseId: v.id("Enterprise"),
|
|
191
|
+
groupId: v.id("Group"),
|
|
192
|
+
domainId: v.id("EnterpriseDomain"),
|
|
193
|
+
domain: v.string(),
|
|
194
|
+
recordName: v.string(),
|
|
195
|
+
token: v.string(),
|
|
196
|
+
tokenHash: v.string(),
|
|
197
|
+
requestedAt: v.number(),
|
|
198
|
+
expiresAt: v.number()
|
|
199
|
+
},
|
|
200
|
+
returns: v.id("EnterpriseDomainVerification"),
|
|
201
|
+
handler: async (ctx, args) => {
|
|
202
|
+
const existing = await ctx.db.query("EnterpriseDomainVerification").withIndex("domain_id", (idx) => idx.eq("domainId", args.domainId)).first();
|
|
203
|
+
if (existing) {
|
|
204
|
+
await ctx.db.patch(existing._id, args);
|
|
205
|
+
return existing._id;
|
|
206
|
+
}
|
|
207
|
+
return await ctx.db.insert("EnterpriseDomainVerification", args);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
const enterpriseDomainVerificationDelete = mutation({
|
|
211
|
+
args: { domainId: v.id("EnterpriseDomain") },
|
|
212
|
+
returns: v.null(),
|
|
213
|
+
handler: async (ctx, { domainId }) => {
|
|
214
|
+
const existing = await ctx.db.query("EnterpriseDomainVerification").withIndex("domain_id", (idx) => idx.eq("domainId", domainId)).first();
|
|
215
|
+
if (existing) await ctx.db.delete(existing._id);
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
const enterpriseDomainVerify = mutation({
|
|
220
|
+
args: {
|
|
221
|
+
domainId: v.id("EnterpriseDomain"),
|
|
222
|
+
verifiedAt: v.number()
|
|
223
|
+
},
|
|
224
|
+
returns: vEnterpriseDomainDoc,
|
|
225
|
+
handler: async (ctx, { domainId, verifiedAt }) => {
|
|
226
|
+
await ctx.db.patch(domainId, { verifiedAt });
|
|
227
|
+
const domain = await ctx.db.get("EnterpriseDomain", domainId);
|
|
228
|
+
if (!domain) throw new ConvexError({
|
|
229
|
+
code: "INVALID_PARAMETERS",
|
|
230
|
+
message: "Enterprise domain not found."
|
|
231
|
+
});
|
|
232
|
+
const verification = await ctx.db.query("EnterpriseDomainVerification").withIndex("domain_id", (idx) => idx.eq("domainId", domainId)).first();
|
|
233
|
+
if (verification) await ctx.db.delete(verification._id);
|
|
234
|
+
return domain;
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
const enterpriseSecretUpsert = mutation({
|
|
238
|
+
args: {
|
|
239
|
+
enterpriseId: v.id("Enterprise"),
|
|
240
|
+
groupId: v.id("Group"),
|
|
241
|
+
kind: vEnterpriseSecretKind,
|
|
242
|
+
ciphertext: v.string(),
|
|
243
|
+
updatedAt: v.number()
|
|
244
|
+
},
|
|
245
|
+
returns: v.id("EnterpriseSecret"),
|
|
246
|
+
handler: async (ctx, args) => {
|
|
247
|
+
const existing = await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id_kind", (idx) => idx.eq("enterpriseId", args.enterpriseId).eq("kind", args.kind)).first();
|
|
248
|
+
if (existing) {
|
|
249
|
+
await ctx.db.patch(existing._id, args);
|
|
250
|
+
return existing._id;
|
|
251
|
+
}
|
|
252
|
+
return await ctx.db.insert("EnterpriseSecret", args);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
const enterpriseSecretGet = query({
|
|
256
|
+
args: {
|
|
257
|
+
enterpriseId: v.id("Enterprise"),
|
|
258
|
+
kind: vEnterpriseSecretKind
|
|
259
|
+
},
|
|
260
|
+
returns: v.union(vEnterpriseSecretDoc, v.null()),
|
|
261
|
+
handler: async (ctx, { enterpriseId, kind }) => {
|
|
262
|
+
return await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id_kind", (idx) => idx.eq("enterpriseId", enterpriseId).eq("kind", kind)).first();
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
const enterpriseSecretDelete = mutation({
|
|
266
|
+
args: {
|
|
267
|
+
enterpriseId: v.id("Enterprise"),
|
|
268
|
+
kind: vEnterpriseSecretKind
|
|
269
|
+
},
|
|
270
|
+
returns: v.null(),
|
|
271
|
+
handler: async (ctx, { enterpriseId, kind }) => {
|
|
272
|
+
const existing = await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id_kind", (idx) => idx.eq("enterpriseId", enterpriseId).eq("kind", kind)).first();
|
|
273
|
+
if (existing) await ctx.db.delete(existing._id);
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
/** Create or rotate SCIM configuration for an enterprise. */
|
|
278
|
+
const enterpriseScimConfigUpsert = mutation({
|
|
279
|
+
args: {
|
|
280
|
+
enterpriseId: v.id("Enterprise"),
|
|
281
|
+
groupId: v.id("Group"),
|
|
282
|
+
status: vScimStatus,
|
|
283
|
+
basePath: v.string(),
|
|
284
|
+
tokenHash: v.string(),
|
|
285
|
+
lastRotatedAt: v.optional(v.number()),
|
|
286
|
+
extend: v.optional(v.any())
|
|
287
|
+
},
|
|
288
|
+
returns: v.id("EnterpriseScimConfig"),
|
|
289
|
+
handler: async (ctx, args) => {
|
|
290
|
+
const existing = await ctx.db.query("EnterpriseScimConfig").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", args.enterpriseId)).first();
|
|
291
|
+
if (existing) {
|
|
292
|
+
await ctx.db.patch(existing._id, args);
|
|
293
|
+
return existing._id;
|
|
294
|
+
}
|
|
295
|
+
return await ctx.db.insert("EnterpriseScimConfig", args);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
const enterpriseScimConfigGetByEnterprise = query({
|
|
299
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
300
|
+
returns: v.union(vEnterpriseScimConfigDoc, v.null()),
|
|
301
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
302
|
+
return await ctx.db.query("EnterpriseScimConfig").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).first();
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
const enterpriseScimConfigGetByTokenHash = query({
|
|
306
|
+
args: { tokenHash: v.string() },
|
|
307
|
+
returns: v.union(vEnterpriseScimConfigDoc, v.null()),
|
|
308
|
+
handler: async (ctx, { tokenHash }) => {
|
|
309
|
+
return await ctx.db.query("EnterpriseScimConfig").withIndex("token_hash", (idx) => idx.eq("tokenHash", tokenHash)).first();
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
const enterpriseScimIdentityGet = query({
|
|
313
|
+
args: {
|
|
314
|
+
enterpriseId: v.id("Enterprise"),
|
|
315
|
+
resourceType: vScimResourceType,
|
|
316
|
+
externalId: v.string()
|
|
317
|
+
},
|
|
318
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
319
|
+
handler: async (ctx, args) => {
|
|
320
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("enterprise_id_resource_type_external_id", (idx) => idx.eq("enterpriseId", args.enterpriseId).eq("resourceType", args.resourceType).eq("externalId", args.externalId)).first();
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
const enterpriseScimIdentityGetByUser = query({
|
|
324
|
+
args: { userId: v.id("User") },
|
|
325
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
326
|
+
handler: async (ctx, { userId }) => {
|
|
327
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("user_id", (idx) => idx.eq("userId", userId)).first();
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
const enterpriseScimIdentityGetByEnterpriseAndUser = query({
|
|
331
|
+
args: {
|
|
332
|
+
enterpriseId: v.id("Enterprise"),
|
|
333
|
+
userId: v.id("User")
|
|
334
|
+
},
|
|
335
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
336
|
+
handler: async (ctx, { enterpriseId, userId }) => {
|
|
337
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("enterprise_id_user_id", (idx) => idx.eq("enterpriseId", enterpriseId).eq("userId", userId)).first();
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
const enterpriseScimIdentityGetByMappedGroup = query({
|
|
341
|
+
args: { mappedGroupId: v.id("Group") },
|
|
342
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
343
|
+
handler: async (ctx, { mappedGroupId }) => {
|
|
344
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("mapped_group_id", (idx) => idx.eq("mappedGroupId", mappedGroupId)).first();
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
const enterpriseScimIdentityListByEnterprise = query({
|
|
348
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
349
|
+
returns: v.array(vEnterpriseScimIdentityDoc),
|
|
350
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
351
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
const enterpriseScimIdentityUpsert = mutation({
|
|
355
|
+
args: {
|
|
356
|
+
enterpriseId: v.id("Enterprise"),
|
|
357
|
+
groupId: v.id("Group"),
|
|
358
|
+
resourceType: vScimResourceType,
|
|
359
|
+
externalId: v.string(),
|
|
360
|
+
userId: v.optional(v.id("User")),
|
|
361
|
+
mappedGroupId: v.optional(v.id("Group")),
|
|
362
|
+
lastProvisionedAt: v.optional(v.number()),
|
|
363
|
+
active: v.optional(v.boolean()),
|
|
364
|
+
raw: v.optional(v.any())
|
|
365
|
+
},
|
|
366
|
+
returns: v.id("EnterpriseScimIdentity"),
|
|
367
|
+
handler: async (ctx, args) => {
|
|
368
|
+
const existing = await ctx.db.query("EnterpriseScimIdentity").withIndex("enterprise_id_resource_type_external_id", (idx) => idx.eq("enterpriseId", args.enterpriseId).eq("resourceType", args.resourceType).eq("externalId", args.externalId)).first();
|
|
369
|
+
if (existing) {
|
|
370
|
+
await ctx.db.patch(existing._id, args);
|
|
371
|
+
return existing._id;
|
|
372
|
+
}
|
|
373
|
+
return await ctx.db.insert("EnterpriseScimIdentity", args);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
const enterpriseScimIdentityDelete = mutation({
|
|
377
|
+
args: { identityId: v.id("EnterpriseScimIdentity") },
|
|
378
|
+
returns: v.null(),
|
|
379
|
+
handler: async (ctx, { identityId }) => {
|
|
380
|
+
await ctx.db.delete(identityId);
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
const enterpriseAuditEventCreate = mutation({
|
|
385
|
+
args: {
|
|
386
|
+
enterpriseId: v.id("Enterprise"),
|
|
387
|
+
groupId: v.id("Group"),
|
|
388
|
+
eventType: v.string(),
|
|
389
|
+
actorType: vAuditActorType,
|
|
390
|
+
actorId: v.optional(v.string()),
|
|
391
|
+
subjectType: v.string(),
|
|
392
|
+
subjectId: v.optional(v.string()),
|
|
393
|
+
status: vAuditStatus,
|
|
394
|
+
occurredAt: v.number(),
|
|
395
|
+
requestId: v.optional(v.string()),
|
|
396
|
+
ip: v.optional(v.string()),
|
|
397
|
+
metadata: v.optional(v.any())
|
|
398
|
+
},
|
|
399
|
+
returns: v.id("EnterpriseAuditEvent"),
|
|
400
|
+
handler: async (ctx, args) => {
|
|
401
|
+
return await ctx.db.insert("EnterpriseAuditEvent", args);
|
|
402
|
+
}
|
|
403
|
+
});
|
|
404
|
+
const enterpriseAuditEventList = query({
|
|
405
|
+
args: {
|
|
406
|
+
enterpriseId: v.optional(v.id("Enterprise")),
|
|
407
|
+
groupId: v.optional(v.id("Group")),
|
|
408
|
+
limit: v.optional(v.number())
|
|
409
|
+
},
|
|
410
|
+
returns: v.array(vEnterpriseAuditEventDoc),
|
|
411
|
+
handler: async (ctx, args) => {
|
|
412
|
+
const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);
|
|
413
|
+
if (args.enterpriseId !== void 0) return await ctx.db.query("EnterpriseAuditEvent").withIndex("enterprise_id_occurred_at", (idx) => idx.eq("enterpriseId", args.enterpriseId)).order("desc").take(limit);
|
|
414
|
+
if (args.groupId !== void 0) return await ctx.db.query("EnterpriseAuditEvent").withIndex("group_id_occurred_at", (idx) => idx.eq("groupId", args.groupId)).order("desc").take(limit);
|
|
415
|
+
return await ctx.db.query("EnterpriseAuditEvent").order("desc").take(limit);
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
const enterpriseWebhookEndpointCreate = mutation({
|
|
419
|
+
args: {
|
|
420
|
+
enterpriseId: v.id("Enterprise"),
|
|
421
|
+
groupId: v.id("Group"),
|
|
422
|
+
url: v.string(),
|
|
423
|
+
status: v.optional(vWebhookEndpointStatus),
|
|
424
|
+
secretHash: v.string(),
|
|
425
|
+
subscriptions: v.array(v.string()),
|
|
426
|
+
createdByUserId: v.optional(v.id("User")),
|
|
427
|
+
extend: v.optional(v.any())
|
|
428
|
+
},
|
|
429
|
+
returns: v.id("EnterpriseWebhookEndpoint"),
|
|
430
|
+
handler: async (ctx, args) => {
|
|
431
|
+
return await ctx.db.insert("EnterpriseWebhookEndpoint", {
|
|
432
|
+
...args,
|
|
433
|
+
status: args.status ?? "active",
|
|
434
|
+
failureCount: 0
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
const enterpriseWebhookEndpointList = query({
|
|
439
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
440
|
+
returns: v.array(vEnterpriseWebhookEndpointDoc),
|
|
441
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
442
|
+
return await ctx.db.query("EnterpriseWebhookEndpoint").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
const enterpriseWebhookEndpointGet = query({
|
|
446
|
+
args: { endpointId: v.id("EnterpriseWebhookEndpoint") },
|
|
447
|
+
returns: v.union(vEnterpriseWebhookEndpointDoc, v.null()),
|
|
448
|
+
handler: async (ctx, { endpointId }) => {
|
|
449
|
+
return await ctx.db.get(endpointId);
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
const enterpriseWebhookEndpointUpdate = mutation({
|
|
453
|
+
args: {
|
|
454
|
+
endpointId: v.id("EnterpriseWebhookEndpoint"),
|
|
455
|
+
data: v.any()
|
|
456
|
+
},
|
|
457
|
+
returns: v.null(),
|
|
458
|
+
handler: async (ctx, { endpointId, data }) => {
|
|
459
|
+
await ctx.db.patch(endpointId, data);
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
const enterpriseWebhookDeliveryEnqueue = mutation({
|
|
464
|
+
args: {
|
|
465
|
+
enterpriseId: v.id("Enterprise"),
|
|
466
|
+
endpointId: v.id("EnterpriseWebhookEndpoint"),
|
|
467
|
+
auditEventId: v.optional(v.id("EnterpriseAuditEvent")),
|
|
468
|
+
eventType: v.string(),
|
|
469
|
+
payload: v.any(),
|
|
470
|
+
nextAttemptAt: v.number()
|
|
471
|
+
},
|
|
472
|
+
returns: v.id("EnterpriseWebhookDelivery"),
|
|
473
|
+
handler: async (ctx, args) => {
|
|
474
|
+
return await ctx.db.insert("EnterpriseWebhookDelivery", {
|
|
475
|
+
...args,
|
|
476
|
+
status: "pending",
|
|
477
|
+
attemptCount: 0
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
});
|
|
481
|
+
const enterpriseWebhookDeliveryListReady = query({
|
|
482
|
+
args: {
|
|
483
|
+
now: v.number(),
|
|
484
|
+
limit: v.optional(v.number())
|
|
485
|
+
},
|
|
486
|
+
returns: v.array(vEnterpriseWebhookDeliveryDoc),
|
|
487
|
+
handler: async (ctx, { now, limit }) => {
|
|
488
|
+
return await ctx.db.query("EnterpriseWebhookDelivery").withIndex("status_next_attempt_at", (idx) => idx.eq("status", "pending").lte("nextAttemptAt", now)).take(Math.min(Math.max(limit ?? 50, 1), 100));
|
|
489
|
+
}
|
|
490
|
+
});
|
|
491
|
+
const enterpriseWebhookDeliveryList = query({
|
|
492
|
+
args: {
|
|
493
|
+
enterpriseId: v.id("Enterprise"),
|
|
494
|
+
limit: v.optional(v.number())
|
|
495
|
+
},
|
|
496
|
+
returns: v.array(vEnterpriseWebhookDeliveryDoc),
|
|
497
|
+
handler: async (ctx, { enterpriseId, limit }) => {
|
|
498
|
+
return await ctx.db.query("EnterpriseWebhookDelivery").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).order("desc").take(Math.min(Math.max(limit ?? 50, 1), 100));
|
|
499
|
+
}
|
|
500
|
+
});
|
|
501
|
+
const enterpriseWebhookDeliveryPatch = mutation({
|
|
502
|
+
args: {
|
|
503
|
+
deliveryId: v.id("EnterpriseWebhookDelivery"),
|
|
504
|
+
data: v.any()
|
|
505
|
+
},
|
|
506
|
+
returns: v.null(),
|
|
507
|
+
handler: async (ctx, { deliveryId, data }) => {
|
|
508
|
+
await ctx.db.patch(deliveryId, data);
|
|
509
|
+
return null;
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
//#endregion
|
|
514
|
+
export { enterpriseAuditEventCreate, enterpriseAuditEventList, enterpriseCreate, enterpriseDelete, enterpriseDomainAdd, enterpriseDomainDelete, enterpriseDomainList, enterpriseDomainVerificationDelete, enterpriseDomainVerificationGet, enterpriseDomainVerificationUpsert, enterpriseDomainVerify, enterpriseGet, enterpriseGetByDomain, enterpriseGetByGroup, enterpriseList, enterpriseScimConfigGetByEnterprise, enterpriseScimConfigGetByTokenHash, enterpriseScimConfigUpsert, enterpriseScimIdentityDelete, enterpriseScimIdentityGet, enterpriseScimIdentityGetByEnterpriseAndUser, enterpriseScimIdentityGetByMappedGroup, enterpriseScimIdentityGetByUser, enterpriseScimIdentityListByEnterprise, enterpriseScimIdentityUpsert, enterpriseSecretDelete, enterpriseSecretGet, enterpriseSecretUpsert, enterpriseUpdate, enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointGet, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate };
|
|
515
|
+
//# sourceMappingURL=enterprise.js.map
|