@robelest/convex-auth 0.0.4-preview.13 → 0.0.4-preview.15
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 +1513 -3
- 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/model.d.ts +153 -0
- package/dist/component/model.d.ts.map +1 -0
- package/dist/component/model.js +327 -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 +49 -0
- package/dist/component/public/enterprise.d.ts.map +1 -0
- package/dist/component/public/enterprise.js +450 -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 +118 -0
- package/dist/component/public/groups.d.ts.map +1 -0
- package/dist/component/public/groups.js +599 -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 +368 -258
- package/dist/component/schema.js +23 -27
- package/dist/component/schema.js.map +1 -1
- package/dist/component/server/auth.d.ts +42 -7
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +70 -6
- 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 +466 -0
- package/dist/component/server/domains/core.js.map +1 -0
- package/dist/component/server/domains/sso.js +689 -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 +1128 -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 +3 -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 +50 -35
- 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 +44 -9
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +70 -6
- 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 +320 -0
- package/dist/server/domains/core.d.ts.map +1 -0
- package/dist/server/domains/core.js +466 -0
- package/dist/server/domains/core.js.map +1 -0
- package/dist/server/domains/sso.d.ts +340 -0
- package/dist/server/domains/sso.d.ts.map +1 -0
- package/dist/server/domains/sso.js +689 -0
- package/dist/server/domains/sso.js.map +1 -0
- package/dist/server/enterpriseValidators.d.ts +1 -0
- package/dist/server/enterpriseValidators.js +56 -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 +1128 -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 +432 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +486 -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/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/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 +1 -1
- package/dist/server/mutations/signature.d.ts +5 -5
- package/dist/server/mutations/signature.d.ts.map +1 -1
- package/dist/server/mutations/signin.d.ts +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 +4 -4
- 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 +3 -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 +55 -71
- 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 +1920 -3
- package/src/component/index.ts +2 -0
- package/src/component/model.ts +424 -0
- package/src/component/public/enterprise.ts +654 -0
- package/src/component/public/factors.ts +332 -0
- package/src/component/public/groups.ts +951 -0
- package/src/component/public/identity.ts +566 -0
- package/src/component/public/keys.ts +209 -0
- package/src/component/public/shared.ts +117 -0
- package/src/component/public.ts +5 -2965
- package/src/component/schema.ts +47 -57
- package/src/providers/sso.ts +1 -1
- package/src/server/auth.ts +192 -9
- 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 +916 -0
- package/src/server/domains/sso.ts +1462 -0
- package/src/server/enterpriseValidators.ts +88 -0
- package/src/server/factory.ts +2168 -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 +712 -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 +3 -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 +251 -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 +85 -77
- 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
|
@@ -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,49 @@
|
|
|
1
|
+
declare namespace enterprise_d_exports {
|
|
2
|
+
export { enterpriseAuditEventCreate, enterpriseAuditEventList, enterpriseCreate, enterpriseDelete, enterpriseDomainAdd, enterpriseDomainDelete, enterpriseDomainList, enterpriseGet, enterpriseGetByDomain, enterpriseGetByGroup, enterpriseList, enterpriseScimConfigGetByEnterprise, enterpriseScimConfigGetByTokenHash, enterpriseScimConfigUpsert, enterpriseScimIdentityDelete, enterpriseScimIdentityGet, enterpriseScimIdentityGetByEnterpriseAndUser, enterpriseScimIdentityGetByMappedGroup, enterpriseScimIdentityGetByUser, enterpriseScimIdentityListByEnterprise, enterpriseScimIdentityUpsert, enterpriseSecretDelete, enterpriseSecretGet, enterpriseSecretUpsert, enterpriseUpdate, enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, 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 enterpriseSecretUpsert: any;
|
|
25
|
+
declare const enterpriseSecretGet: any;
|
|
26
|
+
declare const enterpriseSecretDelete: any;
|
|
27
|
+
/** Create or rotate SCIM configuration for an enterprise. */
|
|
28
|
+
declare const enterpriseScimConfigUpsert: any;
|
|
29
|
+
declare const enterpriseScimConfigGetByEnterprise: any;
|
|
30
|
+
declare const enterpriseScimConfigGetByTokenHash: any;
|
|
31
|
+
declare const enterpriseScimIdentityGet: any;
|
|
32
|
+
declare const enterpriseScimIdentityGetByUser: any;
|
|
33
|
+
declare const enterpriseScimIdentityGetByEnterpriseAndUser: any;
|
|
34
|
+
declare const enterpriseScimIdentityGetByMappedGroup: any;
|
|
35
|
+
declare const enterpriseScimIdentityListByEnterprise: any;
|
|
36
|
+
declare const enterpriseScimIdentityUpsert: any;
|
|
37
|
+
declare const enterpriseScimIdentityDelete: any;
|
|
38
|
+
declare const enterpriseAuditEventCreate: any;
|
|
39
|
+
declare const enterpriseAuditEventList: any;
|
|
40
|
+
declare const enterpriseWebhookEndpointCreate: any;
|
|
41
|
+
declare const enterpriseWebhookEndpointList: any;
|
|
42
|
+
declare const enterpriseWebhookEndpointUpdate: any;
|
|
43
|
+
declare const enterpriseWebhookDeliveryEnqueue: any;
|
|
44
|
+
declare const enterpriseWebhookDeliveryListReady: any;
|
|
45
|
+
declare const enterpriseWebhookDeliveryList: any;
|
|
46
|
+
declare const enterpriseWebhookDeliveryPatch: any;
|
|
47
|
+
//#endregion
|
|
48
|
+
export { enterpriseAuditEventCreate, enterpriseAuditEventList, enterpriseCreate, enterpriseDelete, enterpriseDomainAdd, enterpriseDomainDelete, enterpriseDomainList, enterpriseGet, enterpriseGetByDomain, enterpriseGetByGroup, enterpriseList, enterpriseScimConfigGetByEnterprise, enterpriseScimConfigGetByTokenHash, enterpriseScimConfigUpsert, enterpriseScimIdentityDelete, enterpriseScimIdentityGet, enterpriseScimIdentityGetByEnterpriseAndUser, enterpriseScimIdentityGetByMappedGroup, enterpriseScimIdentityGetByUser, enterpriseScimIdentityListByEnterprise, enterpriseScimIdentityUpsert, enterpriseSecretDelete, enterpriseSecretGet, enterpriseSecretUpsert, enterpriseUpdate, enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate, enterprise_d_exports };
|
|
49
|
+
//# sourceMappingURL=enterprise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterprise.d.ts","names":[],"sources":["../../../src/component/public/enterprise.ts"],"mappings":";;;;cA6Ba,gBAAA;;cA8BA,aAAA;;cASA,oBAAA;;cAYA,qBAAA;;cA0BA,cAAA;;cAuEA,gBAAA;;cAUA,gBAAA;;cAwBA,mBAAA;;cAyDA,oBAAA;;cAYA,sBAAA;AAAA,cASA,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,+BAAA;AAAA,cASA,gCAAA;AAAA,cAmBA,kCAAA;AAAA,cAaA,6BAAA;AAAA,cAYA,8BAAA"}
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
import { mutation, query } from "../functions.js";
|
|
2
|
+
import { vAuditActorType, vAuditStatus, vEnterpriseAuditEventDoc, vEnterpriseDoc, vEnterpriseDomainDoc, 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) await ctx.db.delete(domain._id);
|
|
123
|
+
const secrets = await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
124
|
+
for (const secret of secrets) await ctx.db.delete(secret._id);
|
|
125
|
+
await ctx.db.delete(enterpriseId);
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
/** Link a domain to an enterprise record. */
|
|
130
|
+
const enterpriseDomainAdd = mutation({
|
|
131
|
+
args: {
|
|
132
|
+
enterpriseId: v.id("Enterprise"),
|
|
133
|
+
groupId: v.id("Group"),
|
|
134
|
+
domain: v.string(),
|
|
135
|
+
isPrimary: v.optional(v.boolean()),
|
|
136
|
+
verifiedAt: v.optional(v.number())
|
|
137
|
+
},
|
|
138
|
+
returns: v.id("EnterpriseDomain"),
|
|
139
|
+
handler: async (ctx, args) => {
|
|
140
|
+
const existingByDomain = await ctx.db.query("EnterpriseDomain").withIndex("domain", (idx) => idx.eq("domain", args.domain)).first();
|
|
141
|
+
if (existingByDomain && existingByDomain.enterpriseId !== args.enterpriseId) throw new ConvexError({
|
|
142
|
+
code: "ENTERPRISE_DOMAIN_TAKEN",
|
|
143
|
+
message: "That domain is already attached to another enterprise."
|
|
144
|
+
});
|
|
145
|
+
const existingForEnterprise = await ctx.db.query("EnterpriseDomain").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", args.enterpriseId)).collect();
|
|
146
|
+
for (const row of existingForEnterprise) if (row.domain === args.domain) {
|
|
147
|
+
await ctx.db.patch(row._id, {
|
|
148
|
+
isPrimary: args.isPrimary ?? row.isPrimary,
|
|
149
|
+
verifiedAt: args.verifiedAt ?? row.verifiedAt
|
|
150
|
+
});
|
|
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
|
+
await ctx.db.delete(domainId);
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
const enterpriseSecretUpsert = mutation({
|
|
180
|
+
args: {
|
|
181
|
+
enterpriseId: v.id("Enterprise"),
|
|
182
|
+
groupId: v.id("Group"),
|
|
183
|
+
kind: vEnterpriseSecretKind,
|
|
184
|
+
ciphertext: v.string(),
|
|
185
|
+
updatedAt: v.number()
|
|
186
|
+
},
|
|
187
|
+
returns: v.id("EnterpriseSecret"),
|
|
188
|
+
handler: async (ctx, args) => {
|
|
189
|
+
const existing = await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id_kind", (idx) => idx.eq("enterpriseId", args.enterpriseId).eq("kind", args.kind)).first();
|
|
190
|
+
if (existing) {
|
|
191
|
+
await ctx.db.patch(existing._id, args);
|
|
192
|
+
return existing._id;
|
|
193
|
+
}
|
|
194
|
+
return await ctx.db.insert("EnterpriseSecret", args);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
const enterpriseSecretGet = query({
|
|
198
|
+
args: {
|
|
199
|
+
enterpriseId: v.id("Enterprise"),
|
|
200
|
+
kind: vEnterpriseSecretKind
|
|
201
|
+
},
|
|
202
|
+
returns: v.union(vEnterpriseSecretDoc, v.null()),
|
|
203
|
+
handler: async (ctx, { enterpriseId, kind }) => {
|
|
204
|
+
return await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id_kind", (idx) => idx.eq("enterpriseId", enterpriseId).eq("kind", kind)).first();
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
const enterpriseSecretDelete = mutation({
|
|
208
|
+
args: {
|
|
209
|
+
enterpriseId: v.id("Enterprise"),
|
|
210
|
+
kind: vEnterpriseSecretKind
|
|
211
|
+
},
|
|
212
|
+
returns: v.null(),
|
|
213
|
+
handler: async (ctx, { enterpriseId, kind }) => {
|
|
214
|
+
const existing = await ctx.db.query("EnterpriseSecret").withIndex("enterprise_id_kind", (idx) => idx.eq("enterpriseId", enterpriseId).eq("kind", kind)).first();
|
|
215
|
+
if (existing) await ctx.db.delete(existing._id);
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
/** Create or rotate SCIM configuration for an enterprise. */
|
|
220
|
+
const enterpriseScimConfigUpsert = mutation({
|
|
221
|
+
args: {
|
|
222
|
+
enterpriseId: v.id("Enterprise"),
|
|
223
|
+
groupId: v.id("Group"),
|
|
224
|
+
status: vScimStatus,
|
|
225
|
+
basePath: v.string(),
|
|
226
|
+
tokenHash: v.string(),
|
|
227
|
+
lastRotatedAt: v.optional(v.number()),
|
|
228
|
+
extend: v.optional(v.any())
|
|
229
|
+
},
|
|
230
|
+
returns: v.id("EnterpriseScimConfig"),
|
|
231
|
+
handler: async (ctx, args) => {
|
|
232
|
+
const existing = await ctx.db.query("EnterpriseScimConfig").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", args.enterpriseId)).first();
|
|
233
|
+
if (existing) {
|
|
234
|
+
await ctx.db.patch(existing._id, args);
|
|
235
|
+
return existing._id;
|
|
236
|
+
}
|
|
237
|
+
return await ctx.db.insert("EnterpriseScimConfig", args);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
const enterpriseScimConfigGetByEnterprise = query({
|
|
241
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
242
|
+
returns: v.union(vEnterpriseScimConfigDoc, v.null()),
|
|
243
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
244
|
+
return await ctx.db.query("EnterpriseScimConfig").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).first();
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
const enterpriseScimConfigGetByTokenHash = query({
|
|
248
|
+
args: { tokenHash: v.string() },
|
|
249
|
+
returns: v.union(vEnterpriseScimConfigDoc, v.null()),
|
|
250
|
+
handler: async (ctx, { tokenHash }) => {
|
|
251
|
+
return await ctx.db.query("EnterpriseScimConfig").withIndex("token_hash", (idx) => idx.eq("tokenHash", tokenHash)).first();
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
const enterpriseScimIdentityGet = query({
|
|
255
|
+
args: {
|
|
256
|
+
enterpriseId: v.id("Enterprise"),
|
|
257
|
+
resourceType: vScimResourceType,
|
|
258
|
+
externalId: v.string()
|
|
259
|
+
},
|
|
260
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
261
|
+
handler: async (ctx, args) => {
|
|
262
|
+
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();
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
const enterpriseScimIdentityGetByUser = query({
|
|
266
|
+
args: { userId: v.id("User") },
|
|
267
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
268
|
+
handler: async (ctx, { userId }) => {
|
|
269
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("user_id", (idx) => idx.eq("userId", userId)).first();
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
const enterpriseScimIdentityGetByEnterpriseAndUser = query({
|
|
273
|
+
args: {
|
|
274
|
+
enterpriseId: v.id("Enterprise"),
|
|
275
|
+
userId: v.id("User")
|
|
276
|
+
},
|
|
277
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
278
|
+
handler: async (ctx, { enterpriseId, userId }) => {
|
|
279
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("enterprise_id_user_id", (idx) => idx.eq("enterpriseId", enterpriseId).eq("userId", userId)).first();
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
const enterpriseScimIdentityGetByMappedGroup = query({
|
|
283
|
+
args: { mappedGroupId: v.id("Group") },
|
|
284
|
+
returns: v.union(vEnterpriseScimIdentityDoc, v.null()),
|
|
285
|
+
handler: async (ctx, { mappedGroupId }) => {
|
|
286
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("mapped_group_id", (idx) => idx.eq("mappedGroupId", mappedGroupId)).first();
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
const enterpriseScimIdentityListByEnterprise = query({
|
|
290
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
291
|
+
returns: v.array(vEnterpriseScimIdentityDoc),
|
|
292
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
293
|
+
return await ctx.db.query("EnterpriseScimIdentity").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
const enterpriseScimIdentityUpsert = mutation({
|
|
297
|
+
args: {
|
|
298
|
+
enterpriseId: v.id("Enterprise"),
|
|
299
|
+
groupId: v.id("Group"),
|
|
300
|
+
resourceType: vScimResourceType,
|
|
301
|
+
externalId: v.string(),
|
|
302
|
+
userId: v.optional(v.id("User")),
|
|
303
|
+
mappedGroupId: v.optional(v.id("Group")),
|
|
304
|
+
lastProvisionedAt: v.optional(v.number()),
|
|
305
|
+
active: v.optional(v.boolean()),
|
|
306
|
+
raw: v.optional(v.any())
|
|
307
|
+
},
|
|
308
|
+
returns: v.id("EnterpriseScimIdentity"),
|
|
309
|
+
handler: async (ctx, args) => {
|
|
310
|
+
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();
|
|
311
|
+
if (existing) {
|
|
312
|
+
await ctx.db.patch(existing._id, args);
|
|
313
|
+
return existing._id;
|
|
314
|
+
}
|
|
315
|
+
return await ctx.db.insert("EnterpriseScimIdentity", args);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
const enterpriseScimIdentityDelete = mutation({
|
|
319
|
+
args: { identityId: v.id("EnterpriseScimIdentity") },
|
|
320
|
+
returns: v.null(),
|
|
321
|
+
handler: async (ctx, { identityId }) => {
|
|
322
|
+
await ctx.db.delete(identityId);
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
const enterpriseAuditEventCreate = mutation({
|
|
327
|
+
args: {
|
|
328
|
+
enterpriseId: v.id("Enterprise"),
|
|
329
|
+
groupId: v.id("Group"),
|
|
330
|
+
eventType: v.string(),
|
|
331
|
+
actorType: vAuditActorType,
|
|
332
|
+
actorId: v.optional(v.string()),
|
|
333
|
+
subjectType: v.string(),
|
|
334
|
+
subjectId: v.optional(v.string()),
|
|
335
|
+
status: vAuditStatus,
|
|
336
|
+
occurredAt: v.number(),
|
|
337
|
+
requestId: v.optional(v.string()),
|
|
338
|
+
ip: v.optional(v.string()),
|
|
339
|
+
metadata: v.optional(v.any())
|
|
340
|
+
},
|
|
341
|
+
returns: v.id("EnterpriseAuditEvent"),
|
|
342
|
+
handler: async (ctx, args) => {
|
|
343
|
+
return await ctx.db.insert("EnterpriseAuditEvent", args);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
const enterpriseAuditEventList = query({
|
|
347
|
+
args: {
|
|
348
|
+
enterpriseId: v.optional(v.id("Enterprise")),
|
|
349
|
+
groupId: v.optional(v.id("Group")),
|
|
350
|
+
limit: v.optional(v.number())
|
|
351
|
+
},
|
|
352
|
+
returns: v.array(vEnterpriseAuditEventDoc),
|
|
353
|
+
handler: async (ctx, args) => {
|
|
354
|
+
const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);
|
|
355
|
+
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);
|
|
356
|
+
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);
|
|
357
|
+
return await ctx.db.query("EnterpriseAuditEvent").order("desc").take(limit);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
const enterpriseWebhookEndpointCreate = mutation({
|
|
361
|
+
args: {
|
|
362
|
+
enterpriseId: v.id("Enterprise"),
|
|
363
|
+
groupId: v.id("Group"),
|
|
364
|
+
url: v.string(),
|
|
365
|
+
status: v.optional(vWebhookEndpointStatus),
|
|
366
|
+
secretHash: v.string(),
|
|
367
|
+
subscriptions: v.array(v.string()),
|
|
368
|
+
createdByUserId: v.optional(v.id("User")),
|
|
369
|
+
extend: v.optional(v.any())
|
|
370
|
+
},
|
|
371
|
+
returns: v.id("EnterpriseWebhookEndpoint"),
|
|
372
|
+
handler: async (ctx, args) => {
|
|
373
|
+
return await ctx.db.insert("EnterpriseWebhookEndpoint", {
|
|
374
|
+
...args,
|
|
375
|
+
status: args.status ?? "active",
|
|
376
|
+
failureCount: 0
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
const enterpriseWebhookEndpointList = query({
|
|
381
|
+
args: { enterpriseId: v.id("Enterprise") },
|
|
382
|
+
returns: v.array(vEnterpriseWebhookEndpointDoc),
|
|
383
|
+
handler: async (ctx, { enterpriseId }) => {
|
|
384
|
+
return await ctx.db.query("EnterpriseWebhookEndpoint").withIndex("enterprise_id", (idx) => idx.eq("enterpriseId", enterpriseId)).collect();
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
const enterpriseWebhookEndpointUpdate = mutation({
|
|
388
|
+
args: {
|
|
389
|
+
endpointId: v.id("EnterpriseWebhookEndpoint"),
|
|
390
|
+
data: v.any()
|
|
391
|
+
},
|
|
392
|
+
returns: v.null(),
|
|
393
|
+
handler: async (ctx, { endpointId, data }) => {
|
|
394
|
+
await ctx.db.patch(endpointId, data);
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
const enterpriseWebhookDeliveryEnqueue = mutation({
|
|
399
|
+
args: {
|
|
400
|
+
enterpriseId: v.id("Enterprise"),
|
|
401
|
+
endpointId: v.id("EnterpriseWebhookEndpoint"),
|
|
402
|
+
auditEventId: v.optional(v.id("EnterpriseAuditEvent")),
|
|
403
|
+
eventType: v.string(),
|
|
404
|
+
payload: v.any(),
|
|
405
|
+
nextAttemptAt: v.number()
|
|
406
|
+
},
|
|
407
|
+
returns: v.id("EnterpriseWebhookDelivery"),
|
|
408
|
+
handler: async (ctx, args) => {
|
|
409
|
+
return await ctx.db.insert("EnterpriseWebhookDelivery", {
|
|
410
|
+
...args,
|
|
411
|
+
status: "pending",
|
|
412
|
+
attemptCount: 0
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
const enterpriseWebhookDeliveryListReady = query({
|
|
417
|
+
args: {
|
|
418
|
+
now: v.number(),
|
|
419
|
+
limit: v.optional(v.number())
|
|
420
|
+
},
|
|
421
|
+
returns: v.array(vEnterpriseWebhookDeliveryDoc),
|
|
422
|
+
handler: async (ctx, { now, limit }) => {
|
|
423
|
+
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));
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
const enterpriseWebhookDeliveryList = query({
|
|
427
|
+
args: {
|
|
428
|
+
enterpriseId: v.id("Enterprise"),
|
|
429
|
+
limit: v.optional(v.number())
|
|
430
|
+
},
|
|
431
|
+
returns: v.array(vEnterpriseWebhookDeliveryDoc),
|
|
432
|
+
handler: async (ctx, { enterpriseId, limit }) => {
|
|
433
|
+
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));
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
const enterpriseWebhookDeliveryPatch = mutation({
|
|
437
|
+
args: {
|
|
438
|
+
deliveryId: v.id("EnterpriseWebhookDelivery"),
|
|
439
|
+
data: v.any()
|
|
440
|
+
},
|
|
441
|
+
returns: v.null(),
|
|
442
|
+
handler: async (ctx, { deliveryId, data }) => {
|
|
443
|
+
await ctx.db.patch(deliveryId, data);
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
//#endregion
|
|
449
|
+
export { enterpriseAuditEventCreate, enterpriseAuditEventList, enterpriseCreate, enterpriseDelete, enterpriseDomainAdd, enterpriseDomainDelete, enterpriseDomainList, enterpriseGet, enterpriseGetByDomain, enterpriseGetByGroup, enterpriseList, enterpriseScimConfigGetByEnterprise, enterpriseScimConfigGetByTokenHash, enterpriseScimConfigUpsert, enterpriseScimIdentityDelete, enterpriseScimIdentityGet, enterpriseScimIdentityGetByEnterpriseAndUser, enterpriseScimIdentityGetByMappedGroup, enterpriseScimIdentityGetByUser, enterpriseScimIdentityListByEnterprise, enterpriseScimIdentityUpsert, enterpriseSecretDelete, enterpriseSecretGet, enterpriseSecretUpsert, enterpriseUpdate, enterpriseWebhookDeliveryEnqueue, enterpriseWebhookDeliveryList, enterpriseWebhookDeliveryListReady, enterpriseWebhookDeliveryPatch, enterpriseWebhookEndpointCreate, enterpriseWebhookEndpointList, enterpriseWebhookEndpointUpdate };
|
|
450
|
+
//# sourceMappingURL=enterprise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enterprise.js","names":[],"sources":["../../../src/component/public/enterprise.ts"],"sourcesContent":["import {\n ConvexError,\n mutation,\n query,\n v,\n vAuditActorType,\n vAuditStatus,\n vEnterpriseAuditEventDoc,\n vEnterpriseDoc,\n vEnterpriseDomainDoc,\n vEnterprisePolicy,\n vEnterpriseScimConfigDoc,\n vEnterpriseScimIdentityDoc,\n vEnterpriseSecretDoc,\n vEnterpriseSecretKind,\n vEnterpriseStatus,\n vEnterpriseWebhookDeliveryDoc,\n vEnterpriseWebhookEndpointDoc,\n vPaginated,\n vScimResourceType,\n vScimStatus,\n vWebhookEndpointStatus,\n} from \"./shared\";\n\n// ============================================================================\n// Enterprise\n// ============================================================================\n\n/** Create an enterprise record attached to a root group. */\nexport const enterpriseCreate = mutation({\n args: {\n groupId: v.id(\"Group\"),\n slug: v.optional(v.string()),\n name: v.optional(v.string()),\n status: v.optional(vEnterpriseStatus),\n policy: v.optional(vEnterprisePolicy),\n config: v.optional(v.any()),\n extend: v.optional(v.any()),\n },\n returns: v.id(\"Enterprise\"),\n handler: async (ctx, args) => {\n const existing = await ctx.db\n .query(\"Enterprise\")\n .withIndex(\"group_id\", (idx) => idx.eq(\"groupId\", args.groupId))\n .first();\n if (existing) {\n throw new ConvexError({\n code: \"ENTERPRISE_ALREADY_EXISTS\",\n message: \"An enterprise record already exists for this group.\",\n });\n }\n return await ctx.db.insert(\"Enterprise\", {\n ...args,\n status: args.status ?? \"draft\",\n });\n },\n});\n\n/** Retrieve an enterprise record by ID. */\nexport const enterpriseGet = query({\n args: { enterpriseId: v.id(\"Enterprise\") },\n returns: v.union(vEnterpriseDoc, v.null()),\n handler: async (ctx, { enterpriseId }) => {\n return await ctx.db.get(\"Enterprise\", enterpriseId);\n },\n});\n\n/** Retrieve an enterprise record by group ID. */\nexport const enterpriseGetByGroup = query({\n args: { groupId: v.id(\"Group\") },\n returns: v.union(vEnterpriseDoc, v.null()),\n handler: async (ctx, { groupId }) => {\n return await ctx.db\n .query(\"Enterprise\")\n .withIndex(\"group_id\", (idx) => idx.eq(\"groupId\", groupId))\n .first();\n },\n});\n\n/** Retrieve an enterprise record by a linked domain. */\nexport const enterpriseGetByDomain = query({\n args: { domain: v.string() },\n returns: v.union(\n v.object({\n enterprise: vEnterpriseDoc,\n domain: vEnterpriseDomainDoc,\n }),\n v.null(),\n ),\n handler: async (ctx, { domain }) => {\n const domainRow = await ctx.db\n .query(\"EnterpriseDomain\")\n .withIndex(\"domain\", (idx) => idx.eq(\"domain\", domain))\n .first();\n if (!domainRow) {\n return null;\n }\n const enterprise = await ctx.db.get(\"Enterprise\", domainRow.enterpriseId);\n if (!enterprise) {\n return null;\n }\n return { enterprise, domain: domainRow };\n },\n});\n\n/** List enterprises with lightweight filtering and cursor pagination. */\nexport const enterpriseList = query({\n args: {\n where: v.optional(\n v.object({\n groupId: v.optional(v.id(\"Group\")),\n slug: v.optional(v.string()),\n status: v.optional(vEnterpriseStatus),\n }),\n ),\n limit: v.optional(v.number()),\n cursor: v.optional(v.union(v.string(), v.null())),\n orderBy: v.optional(\n v.union(\n v.literal(\"_creationTime\"),\n v.literal(\"name\"),\n v.literal(\"slug\"),\n v.literal(\"status\"),\n ),\n ),\n order: v.optional(v.union(v.literal(\"asc\"), v.literal(\"desc\"))),\n },\n returns: vPaginated(vEnterpriseDoc),\n handler: async (ctx, args) => {\n const where = args.where ?? {};\n const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);\n const order = args.order ?? \"desc\";\n\n let q;\n if (where.groupId !== undefined) {\n q = ctx.db\n .query(\"Enterprise\")\n .withIndex(\"group_id\", (idx) => idx.eq(\"groupId\", where.groupId!));\n } else if (where.slug !== undefined) {\n q = ctx.db\n .query(\"Enterprise\")\n .withIndex(\"slug\", (idx) => idx.eq(\"slug\", where.slug!));\n } else if (where.status !== undefined) {\n q = ctx.db\n .query(\"Enterprise\")\n .withIndex(\"status\", (idx) => idx.eq(\"status\", where.status!));\n } else {\n q = ctx.db.query(\"Enterprise\");\n }\n\n if (where.groupId !== undefined && where.slug !== undefined) {\n q = q.filter((f) => f.eq(f.field(\"slug\"), where.slug!));\n }\n if (where.status !== undefined && where.groupId === undefined) {\n // already handled by index in the dedicated branch\n } else if (where.status !== undefined) {\n q = q.filter((f) => f.eq(f.field(\"status\"), where.status!));\n }\n\n q = q.order(order);\n const all = await q.collect();\n let startIdx = 0;\n if (args.cursor) {\n const cursorIdx = all.findIndex((doc) => doc._id === args.cursor);\n if (cursorIdx !== -1) {\n startIdx = cursorIdx + 1;\n }\n }\n const page = all.slice(startIdx, startIdx + limit + 1);\n const hasMore = page.length > limit;\n const items = hasMore ? page.slice(0, limit) : page;\n const nextCursor = hasMore ? items[items.length - 1]._id : null;\n return { items, nextCursor };\n },\n});\n\n/** Patch an enterprise record. */\nexport const enterpriseUpdate = mutation({\n args: { enterpriseId: v.id(\"Enterprise\"), data: v.any() },\n returns: v.null(),\n handler: async (ctx, { enterpriseId, data }) => {\n await ctx.db.patch(enterpriseId, data);\n return null;\n },\n});\n\n/** Delete an enterprise record. */\nexport const enterpriseDelete = mutation({\n args: { enterpriseId: v.id(\"Enterprise\") },\n returns: v.null(),\n handler: async (ctx, { enterpriseId }) => {\n const domains = await ctx.db\n .query(\"EnterpriseDomain\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .collect();\n for (const domain of domains) {\n await ctx.db.delete(domain._id);\n }\n const secrets = await ctx.db\n .query(\"EnterpriseSecret\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .collect();\n for (const secret of secrets) {\n await ctx.db.delete(secret._id);\n }\n await ctx.db.delete(enterpriseId);\n return null;\n },\n});\n\n/** Link a domain to an enterprise record. */\nexport const enterpriseDomainAdd = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n groupId: v.id(\"Group\"),\n domain: v.string(),\n isPrimary: v.optional(v.boolean()),\n verifiedAt: v.optional(v.number()),\n },\n returns: v.id(\"EnterpriseDomain\"),\n handler: async (ctx, args) => {\n const existingByDomain = await ctx.db\n .query(\"EnterpriseDomain\")\n .withIndex(\"domain\", (idx) => idx.eq(\"domain\", args.domain))\n .first();\n if (\n existingByDomain &&\n existingByDomain.enterpriseId !== args.enterpriseId\n ) {\n throw new ConvexError({\n code: \"ENTERPRISE_DOMAIN_TAKEN\",\n message: \"That domain is already attached to another enterprise.\",\n });\n }\n\n const existingForEnterprise = await ctx.db\n .query(\"EnterpriseDomain\")\n .withIndex(\"enterprise_id\", (idx) =>\n idx.eq(\"enterpriseId\", args.enterpriseId),\n )\n .collect();\n\n for (const row of existingForEnterprise) {\n if (row.domain === args.domain) {\n await ctx.db.patch(row._id, {\n isPrimary: args.isPrimary ?? row.isPrimary,\n verifiedAt: args.verifiedAt ?? row.verifiedAt,\n });\n return row._id;\n }\n }\n\n if (args.isPrimary === true) {\n for (const row of existingForEnterprise) {\n if (row.isPrimary) {\n await ctx.db.patch(row._id, { isPrimary: false });\n }\n }\n }\n\n return await ctx.db.insert(\"EnterpriseDomain\", {\n ...args,\n isPrimary: args.isPrimary ?? existingForEnterprise.length === 0,\n });\n },\n});\n\n/** List domains linked to an enterprise. */\nexport const enterpriseDomainList = query({\n args: { enterpriseId: v.id(\"Enterprise\") },\n returns: v.array(vEnterpriseDomainDoc),\n handler: async (ctx, { enterpriseId }) => {\n return await ctx.db\n .query(\"EnterpriseDomain\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .collect();\n },\n});\n\n/** Remove a linked enterprise domain. */\nexport const enterpriseDomainDelete = mutation({\n args: { domainId: v.id(\"EnterpriseDomain\") },\n returns: v.null(),\n handler: async (ctx, { domainId }) => {\n await ctx.db.delete(domainId);\n return null;\n },\n});\n\nexport const enterpriseSecretUpsert = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n groupId: v.id(\"Group\"),\n kind: vEnterpriseSecretKind,\n ciphertext: v.string(),\n updatedAt: v.number(),\n },\n returns: v.id(\"EnterpriseSecret\"),\n handler: async (ctx, args) => {\n const existing = await ctx.db\n .query(\"EnterpriseSecret\")\n .withIndex(\"enterprise_id_kind\", (idx) =>\n idx.eq(\"enterpriseId\", args.enterpriseId).eq(\"kind\", args.kind),\n )\n .first();\n if (existing) {\n await ctx.db.patch(existing._id, args);\n return existing._id;\n }\n return await ctx.db.insert(\"EnterpriseSecret\", args);\n },\n});\n\nexport const enterpriseSecretGet = query({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n kind: vEnterpriseSecretKind,\n },\n returns: v.union(vEnterpriseSecretDoc, v.null()),\n handler: async (ctx, { enterpriseId, kind }) => {\n return await ctx.db\n .query(\"EnterpriseSecret\")\n .withIndex(\"enterprise_id_kind\", (idx) =>\n idx.eq(\"enterpriseId\", enterpriseId).eq(\"kind\", kind),\n )\n .first();\n },\n});\n\nexport const enterpriseSecretDelete = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n kind: vEnterpriseSecretKind,\n },\n returns: v.null(),\n handler: async (ctx, { enterpriseId, kind }) => {\n const existing = await ctx.db\n .query(\"EnterpriseSecret\")\n .withIndex(\"enterprise_id_kind\", (idx) =>\n idx.eq(\"enterpriseId\", enterpriseId).eq(\"kind\", kind),\n )\n .first();\n if (existing) {\n await ctx.db.delete(existing._id);\n }\n return null;\n },\n});\n\n/** Create or rotate SCIM configuration for an enterprise. */\nexport const enterpriseScimConfigUpsert = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n groupId: v.id(\"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 returns: v.id(\"EnterpriseScimConfig\"),\n handler: async (ctx, args) => {\n const existing = await ctx.db\n .query(\"EnterpriseScimConfig\")\n .withIndex(\"enterprise_id\", (idx) =>\n idx.eq(\"enterpriseId\", args.enterpriseId),\n )\n .first();\n if (existing) {\n await ctx.db.patch(existing._id, args);\n return existing._id;\n }\n return await ctx.db.insert(\"EnterpriseScimConfig\", args);\n },\n});\n\nexport const enterpriseScimConfigGetByEnterprise = query({\n args: { enterpriseId: v.id(\"Enterprise\") },\n returns: v.union(vEnterpriseScimConfigDoc, v.null()),\n handler: async (ctx, { enterpriseId }) => {\n return await ctx.db\n .query(\"EnterpriseScimConfig\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .first();\n },\n});\n\nexport const enterpriseScimConfigGetByTokenHash = query({\n args: { tokenHash: v.string() },\n returns: v.union(vEnterpriseScimConfigDoc, v.null()),\n handler: async (ctx, { tokenHash }) => {\n return await ctx.db\n .query(\"EnterpriseScimConfig\")\n .withIndex(\"token_hash\", (idx) => idx.eq(\"tokenHash\", tokenHash))\n .first();\n },\n});\n\nexport const enterpriseScimIdentityGet = query({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n resourceType: vScimResourceType,\n externalId: v.string(),\n },\n returns: v.union(vEnterpriseScimIdentityDoc, v.null()),\n handler: async (ctx, args) => {\n return await ctx.db\n .query(\"EnterpriseScimIdentity\")\n .withIndex(\"enterprise_id_resource_type_external_id\", (idx) =>\n idx\n .eq(\"enterpriseId\", args.enterpriseId)\n .eq(\"resourceType\", args.resourceType)\n .eq(\"externalId\", args.externalId),\n )\n .first();\n },\n});\n\nexport const enterpriseScimIdentityGetByUser = query({\n args: { userId: v.id(\"User\") },\n returns: v.union(vEnterpriseScimIdentityDoc, v.null()),\n handler: async (ctx, { userId }) => {\n return await ctx.db\n .query(\"EnterpriseScimIdentity\")\n .withIndex(\"user_id\", (idx) => idx.eq(\"userId\", userId))\n .first();\n },\n});\n\nexport const enterpriseScimIdentityGetByEnterpriseAndUser = query({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n userId: v.id(\"User\"),\n },\n returns: v.union(vEnterpriseScimIdentityDoc, v.null()),\n handler: async (ctx, { enterpriseId, userId }) => {\n return await ctx.db\n .query(\"EnterpriseScimIdentity\")\n .withIndex(\"enterprise_id_user_id\", (idx) =>\n idx.eq(\"enterpriseId\", enterpriseId).eq(\"userId\", userId),\n )\n .first();\n },\n});\n\nexport const enterpriseScimIdentityGetByMappedGroup = query({\n args: { mappedGroupId: v.id(\"Group\") },\n returns: v.union(vEnterpriseScimIdentityDoc, v.null()),\n handler: async (ctx, { mappedGroupId }) => {\n return await ctx.db\n .query(\"EnterpriseScimIdentity\")\n .withIndex(\"mapped_group_id\", (idx) =>\n idx.eq(\"mappedGroupId\", mappedGroupId),\n )\n .first();\n },\n});\n\nexport const enterpriseScimIdentityListByEnterprise = query({\n args: { enterpriseId: v.id(\"Enterprise\") },\n returns: v.array(vEnterpriseScimIdentityDoc),\n handler: async (ctx, { enterpriseId }) => {\n return await ctx.db\n .query(\"EnterpriseScimIdentity\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .collect();\n },\n});\n\nexport const enterpriseScimIdentityUpsert = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n groupId: v.id(\"Group\"),\n resourceType: vScimResourceType,\n externalId: v.string(),\n userId: v.optional(v.id(\"User\")),\n mappedGroupId: v.optional(v.id(\"Group\")),\n lastProvisionedAt: v.optional(v.number()),\n active: v.optional(v.boolean()),\n raw: v.optional(v.any()),\n },\n returns: v.id(\"EnterpriseScimIdentity\"),\n handler: async (ctx, args) => {\n const existing = await ctx.db\n .query(\"EnterpriseScimIdentity\")\n .withIndex(\"enterprise_id_resource_type_external_id\", (idx) =>\n idx\n .eq(\"enterpriseId\", args.enterpriseId)\n .eq(\"resourceType\", args.resourceType)\n .eq(\"externalId\", args.externalId),\n )\n .first();\n if (existing) {\n await ctx.db.patch(existing._id, args);\n return existing._id;\n }\n return await ctx.db.insert(\"EnterpriseScimIdentity\", args);\n },\n});\n\nexport const enterpriseScimIdentityDelete = mutation({\n args: { identityId: v.id(\"EnterpriseScimIdentity\") },\n returns: v.null(),\n handler: async (ctx, { identityId }) => {\n await ctx.db.delete(identityId);\n return null;\n },\n});\n\nexport const enterpriseAuditEventCreate = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n groupId: v.id(\"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 returns: v.id(\"EnterpriseAuditEvent\"),\n handler: async (ctx, args) => {\n return await ctx.db.insert(\"EnterpriseAuditEvent\", args);\n },\n});\n\nexport const enterpriseAuditEventList = query({\n args: {\n enterpriseId: v.optional(v.id(\"Enterprise\")),\n groupId: v.optional(v.id(\"Group\")),\n limit: v.optional(v.number()),\n },\n returns: v.array(vEnterpriseAuditEventDoc),\n handler: async (ctx, args) => {\n const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);\n if (args.enterpriseId !== undefined) {\n return await ctx.db\n .query(\"EnterpriseAuditEvent\")\n .withIndex(\"enterprise_id_occurred_at\", (idx) =>\n idx.eq(\"enterpriseId\", args.enterpriseId!),\n )\n .order(\"desc\")\n .take(limit);\n }\n if (args.groupId !== undefined) {\n return await ctx.db\n .query(\"EnterpriseAuditEvent\")\n .withIndex(\"group_id_occurred_at\", (idx) =>\n idx.eq(\"groupId\", args.groupId!),\n )\n .order(\"desc\")\n .take(limit);\n }\n return await ctx.db.query(\"EnterpriseAuditEvent\").order(\"desc\").take(limit);\n },\n});\n\nexport const enterpriseWebhookEndpointCreate = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n groupId: v.id(\"Group\"),\n url: v.string(),\n status: v.optional(vWebhookEndpointStatus),\n secretHash: v.string(),\n subscriptions: v.array(v.string()),\n createdByUserId: v.optional(v.id(\"User\")),\n extend: v.optional(v.any()),\n },\n returns: v.id(\"EnterpriseWebhookEndpoint\"),\n handler: async (ctx, args) => {\n return await ctx.db.insert(\"EnterpriseWebhookEndpoint\", {\n ...args,\n status: args.status ?? \"active\",\n failureCount: 0,\n });\n },\n});\n\nexport const enterpriseWebhookEndpointList = query({\n args: { enterpriseId: v.id(\"Enterprise\") },\n returns: v.array(vEnterpriseWebhookEndpointDoc),\n handler: async (ctx, { enterpriseId }) => {\n return await ctx.db\n .query(\"EnterpriseWebhookEndpoint\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .collect();\n },\n});\n\nexport const enterpriseWebhookEndpointUpdate = mutation({\n args: { endpointId: v.id(\"EnterpriseWebhookEndpoint\"), data: v.any() },\n returns: v.null(),\n handler: async (ctx, { endpointId, data }) => {\n await ctx.db.patch(endpointId, data);\n return null;\n },\n});\n\nexport const enterpriseWebhookDeliveryEnqueue = mutation({\n args: {\n enterpriseId: v.id(\"Enterprise\"),\n endpointId: v.id(\"EnterpriseWebhookEndpoint\"),\n auditEventId: v.optional(v.id(\"EnterpriseAuditEvent\")),\n eventType: v.string(),\n payload: v.any(),\n nextAttemptAt: v.number(),\n },\n returns: v.id(\"EnterpriseWebhookDelivery\"),\n handler: async (ctx, args) => {\n return await ctx.db.insert(\"EnterpriseWebhookDelivery\", {\n ...args,\n status: \"pending\",\n attemptCount: 0,\n });\n },\n});\n\nexport const enterpriseWebhookDeliveryListReady = query({\n args: { now: v.number(), limit: v.optional(v.number()) },\n returns: v.array(vEnterpriseWebhookDeliveryDoc),\n handler: async (ctx, { now, limit }) => {\n return await ctx.db\n .query(\"EnterpriseWebhookDelivery\")\n .withIndex(\"status_next_attempt_at\", (idx) =>\n idx.eq(\"status\", \"pending\").lte(\"nextAttemptAt\", now),\n )\n .take(Math.min(Math.max(limit ?? 50, 1), 100));\n },\n});\n\nexport const enterpriseWebhookDeliveryList = query({\n args: { enterpriseId: v.id(\"Enterprise\"), limit: v.optional(v.number()) },\n returns: v.array(vEnterpriseWebhookDeliveryDoc),\n handler: async (ctx, { enterpriseId, limit }) => {\n return await ctx.db\n .query(\"EnterpriseWebhookDelivery\")\n .withIndex(\"enterprise_id\", (idx) => idx.eq(\"enterpriseId\", enterpriseId))\n .order(\"desc\")\n .take(Math.min(Math.max(limit ?? 50, 1), 100));\n },\n});\n\nexport const enterpriseWebhookDeliveryPatch = mutation({\n args: { deliveryId: v.id(\"EnterpriseWebhookDelivery\"), data: v.any() },\n returns: v.null(),\n handler: async (ctx, { deliveryId, data }) => {\n await ctx.db.patch(deliveryId, data);\n return null;\n },\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
declare namespace factors_d_exports {
|
|
2
|
+
export { deviceAuthorize, deviceDelete, deviceGetByCodeHash, deviceGetByUserCode, deviceInsert, deviceUpdateLastPolled, passkeyDelete, passkeyGetByCredentialId, passkeyInsert, passkeyListByUserId, passkeyUpdateCounter, passkeyUpdateMeta, rateLimitCreate, rateLimitDelete, rateLimitGet, rateLimitPatch, totpDelete, totpGetById, totpGetVerifiedByUserId, totpInsert, totpListByUserId, totpMarkVerified, totpUpdateLastUsed };
|
|
3
|
+
}
|
|
4
|
+
/** Store a new passkey credential for a user. */
|
|
5
|
+
declare const passkeyInsert: any;
|
|
6
|
+
/** Look up a passkey by its credential ID. */
|
|
7
|
+
declare const passkeyGetByCredentialId: any;
|
|
8
|
+
/** List all passkeys for a user. */
|
|
9
|
+
declare const passkeyListByUserId: any;
|
|
10
|
+
/** Update a passkey's counter and last used timestamp after authentication. */
|
|
11
|
+
declare const passkeyUpdateCounter: any;
|
|
12
|
+
/** Update a passkey's metadata (name). */
|
|
13
|
+
declare const passkeyUpdateMeta: any;
|
|
14
|
+
/** Delete a passkey credential. */
|
|
15
|
+
declare const passkeyDelete: any;
|
|
16
|
+
/** Store a new TOTP enrollment for a user. */
|
|
17
|
+
declare const totpInsert: any;
|
|
18
|
+
/** Get a verified TOTP enrollment for a user (returns first match). */
|
|
19
|
+
declare const totpGetVerifiedByUserId: any;
|
|
20
|
+
/** List all TOTP enrollments for a user. */
|
|
21
|
+
declare const totpListByUserId: any;
|
|
22
|
+
/** Get a TOTP enrollment by its ID. */
|
|
23
|
+
declare const totpGetById: any;
|
|
24
|
+
/** Mark a TOTP enrollment as verified (setup complete). */
|
|
25
|
+
declare const totpMarkVerified: any;
|
|
26
|
+
/** Update a TOTP enrollment's last used timestamp. */
|
|
27
|
+
declare const totpUpdateLastUsed: any;
|
|
28
|
+
/** Delete a TOTP enrollment. */
|
|
29
|
+
declare const totpDelete: any;
|
|
30
|
+
/** Look up a rate limit entry by its identifier. */
|
|
31
|
+
declare const rateLimitGet: any;
|
|
32
|
+
/** Create a new rate limit entry. */
|
|
33
|
+
declare const rateLimitCreate: any;
|
|
34
|
+
/** Patch a rate limit entry with partial data. */
|
|
35
|
+
declare const rateLimitPatch: any;
|
|
36
|
+
/** Delete a rate limit entry. */
|
|
37
|
+
declare const rateLimitDelete: any;
|
|
38
|
+
/** Insert a new device authorization record. */
|
|
39
|
+
declare const deviceInsert: any;
|
|
40
|
+
/** Look up a device authorization by its hashed device code. */
|
|
41
|
+
declare const deviceGetByCodeHash: any;
|
|
42
|
+
/** Look up a pending device authorization by its user code. */
|
|
43
|
+
declare const deviceGetByUserCode: any;
|
|
44
|
+
/** Authorize a device code — link it to a user and session. */
|
|
45
|
+
declare const deviceAuthorize: any;
|
|
46
|
+
/** Update the last-polled timestamp on a device authorization record. */
|
|
47
|
+
declare const deviceUpdateLastPolled: any;
|
|
48
|
+
/** Delete a device authorization record (cleanup after use or expiry). */
|
|
49
|
+
declare const deviceDelete: any;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { deviceAuthorize, deviceDelete, deviceGetByCodeHash, deviceGetByUserCode, deviceInsert, deviceUpdateLastPolled, factors_d_exports, passkeyDelete, passkeyGetByCredentialId, passkeyInsert, passkeyListByUserId, passkeyUpdateCounter, passkeyUpdateMeta, rateLimitCreate, rateLimitDelete, rateLimitGet, rateLimitPatch, totpDelete, totpGetById, totpGetVerifiedByUserId, totpInsert, totpListByUserId, totpMarkVerified, totpUpdateLastUsed };
|
|
52
|
+
//# sourceMappingURL=factors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factors.d.ts","names":[],"sources":["../../../src/component/public/factors.ts"],"mappings":";;;;cAgBa,aAAA;;cAoBA,wBAAA;;cAYA,mBAAA;;cAYA,oBAAA;;cAcA,iBAAA;;cAUA,aAAA;;cAcA,UAAA;;cAiBA,uBAAA;;cAaA,gBAAA;;cAYA,WAAA;;cASA,gBAAA;;cAUA,kBAAA;;cAUA,UAAA;;cAcA,YAAA;AAvKb;AAAA,cA2La,eAAA;;cAiBA,cAAA;;cAmBA,eAAA;;cAcA,YAAA;;cAeA,mBAAA;AA5Nb;AAAA,cA0Oa,mBAAA;;cAcA,eAAA;;cAkBA,sBAAA;;cAUA,YAAA"}
|