@robelest/convex-auth 0.0.4-preview.21 → 0.0.4-preview.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.js +1 -1
- package/dist/authorization/index.js.map +1 -1
- package/dist/client/index.d.ts +1 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +36 -39
- package/dist/client/index.js.map +1 -1
- package/dist/component/client/index.d.ts +1 -2
- 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 +5 -5
- package/dist/component/model.d.ts.map +1 -1
- package/dist/component/public/enterprise/audit.d.ts.map +1 -1
- package/dist/component/public/enterprise/audit.js.map +1 -1
- package/dist/component/public/enterprise/core.d.ts.map +1 -1
- package/dist/component/public/enterprise/core.js.map +1 -1
- package/dist/component/public/enterprise/domains.d.ts.map +1 -1
- package/dist/component/public/enterprise/domains.js.map +1 -1
- package/dist/component/public/enterprise/scim.d.ts.map +1 -1
- package/dist/component/public/enterprise/scim.js.map +1 -1
- package/dist/component/public/enterprise/secrets.d.ts.map +1 -1
- package/dist/component/public/enterprise/secrets.js.map +1 -1
- package/dist/component/public/enterprise/webhooks.d.ts.map +1 -1
- package/dist/component/public/enterprise/webhooks.js.map +1 -1
- package/dist/component/public/factors/devices.d.ts.map +1 -1
- package/dist/component/public/factors/devices.js.map +1 -1
- package/dist/component/public/factors/passkeys.d.ts.map +1 -1
- package/dist/component/public/factors/passkeys.js.map +1 -1
- package/dist/component/public/factors/totp.d.ts.map +1 -1
- package/dist/component/public/factors/totp.js.map +1 -1
- package/dist/component/public/groups/core.js.map +1 -1
- package/dist/component/public/groups/invites.d.ts.map +1 -1
- package/dist/component/public/groups/invites.js.map +1 -1
- package/dist/component/public/groups/members.d.ts.map +1 -1
- package/dist/component/public/groups/members.js.map +1 -1
- package/dist/component/public/identity/accounts.d.ts.map +1 -1
- package/dist/component/public/identity/accounts.js.map +1 -1
- package/dist/component/public/identity/codes.d.ts.map +1 -1
- package/dist/component/public/identity/codes.js.map +1 -1
- package/dist/component/public/identity/sessions.d.ts.map +1 -1
- package/dist/component/public/identity/sessions.js.map +1 -1
- package/dist/component/public/identity/tokens.d.ts.map +1 -1
- package/dist/component/public/identity/tokens.js.map +1 -1
- package/dist/component/public/identity/users.d.ts.map +1 -1
- package/dist/component/public/identity/users.js.map +1 -1
- package/dist/component/public/identity/verifiers.d.ts.map +1 -1
- package/dist/component/public/identity/verifiers.js.map +1 -1
- package/dist/component/public/security/keys.d.ts.map +1 -1
- package/dist/component/public/security/keys.js.map +1 -1
- package/dist/component/public/security/limits.d.ts.map +1 -1
- package/dist/component/public/security/limits.js.map +1 -1
- package/dist/component/schema.d.ts +39 -39
- package/dist/component/server/auth.d.ts +95 -52
- package/dist/component/server/auth.d.ts.map +1 -1
- package/dist/component/server/auth.js +63 -43
- package/dist/component/server/auth.js.map +1 -1
- package/dist/component/server/core.js +116 -235
- package/dist/component/server/core.js.map +1 -1
- package/dist/component/server/crypto.js +25 -7
- package/dist/component/server/crypto.js.map +1 -1
- package/dist/component/server/device.js +58 -15
- package/dist/component/server/device.js.map +1 -1
- package/dist/component/server/enterprise/domain.js +148 -59
- package/dist/component/server/enterprise/domain.js.map +1 -1
- package/dist/component/server/enterprise/http.js +36 -15
- package/dist/component/server/enterprise/http.js.map +1 -1
- package/dist/component/server/enterprise/oidc.js +1 -1
- package/dist/component/server/http.js +26 -21
- package/dist/component/server/http.js.map +1 -1
- package/dist/component/server/identity.js +5 -2
- package/dist/component/server/identity.js.map +1 -1
- package/dist/component/server/limits.js +21 -30
- package/dist/component/server/limits.js.map +1 -1
- package/dist/component/server/mutations/account.js +12 -10
- package/dist/component/server/mutations/account.js.map +1 -1
- package/dist/component/server/mutations/code.js +5 -2
- package/dist/component/server/mutations/code.js.map +1 -1
- package/dist/component/server/mutations/invalidate.js +1 -1
- package/dist/component/server/mutations/invalidate.js.map +1 -1
- package/dist/component/server/mutations/oauth.js +10 -4
- package/dist/component/server/mutations/oauth.js.map +1 -1
- package/dist/component/server/mutations/refresh.js +2 -2
- package/dist/component/server/mutations/refresh.js.map +1 -1
- package/dist/component/server/mutations/register.js +46 -42
- package/dist/component/server/mutations/register.js.map +1 -1
- package/dist/component/server/mutations/retrieve.js +21 -25
- package/dist/component/server/mutations/retrieve.js.map +1 -1
- package/dist/component/server/mutations/signature.js +10 -4
- package/dist/component/server/mutations/signature.js.map +1 -1
- package/dist/component/server/mutations/signout.js.map +1 -1
- package/dist/component/server/mutations/store.js +9 -24
- package/dist/component/server/mutations/store.js.map +1 -1
- package/dist/component/server/mutations/verifier.js.map +1 -1
- package/dist/component/server/mutations/verify.js +1 -1
- package/dist/component/server/mutations/verify.js.map +1 -1
- package/dist/component/server/oauth.js +53 -16
- package/dist/component/server/oauth.js.map +1 -1
- package/dist/component/server/passkey.js +115 -31
- package/dist/component/server/passkey.js.map +1 -1
- package/dist/component/server/redirects.js +9 -3
- package/dist/component/server/redirects.js.map +1 -1
- package/dist/component/server/refresh.js +10 -7
- package/dist/component/server/refresh.js.map +1 -1
- package/dist/component/server/runtime.d.ts +3 -3
- package/dist/component/server/runtime.d.ts.map +1 -1
- package/dist/component/server/runtime.js +62 -20
- package/dist/component/server/runtime.js.map +1 -1
- package/dist/component/server/signin.js +34 -10
- package/dist/component/server/signin.js.map +1 -1
- package/dist/component/server/totp.js +79 -19
- package/dist/component/server/totp.js.map +1 -1
- package/dist/component/server/types.d.ts +12 -20
- 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 +6 -3
- package/dist/component/server/users.js.map +1 -1
- package/dist/component/server/utils.js +10 -4
- package/dist/component/server/utils.js.map +1 -1
- package/dist/core/types.d.ts +14 -22
- package/dist/core/types.d.ts.map +1 -1
- package/dist/factors/device.js +8 -9
- package/dist/factors/device.js.map +1 -1
- package/dist/factors/passkey.js +18 -21
- package/dist/factors/passkey.js.map +1 -1
- package/dist/providers/password.js +66 -81
- package/dist/providers/password.js.map +1 -1
- package/dist/runtime/invite.js +2 -8
- package/dist/runtime/invite.js.map +1 -1
- package/dist/server/auth.d.ts +95 -52
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +63 -43
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core.d.ts +71 -159
- package/dist/server/core.d.ts.map +1 -1
- package/dist/server/core.js +116 -235
- package/dist/server/core.js.map +1 -1
- package/dist/server/crypto.d.ts.map +1 -1
- package/dist/server/crypto.js +25 -7
- package/dist/server/crypto.js.map +1 -1
- package/dist/server/device.js +58 -15
- package/dist/server/device.js.map +1 -1
- package/dist/server/enterprise/domain.d.ts +0 -8
- package/dist/server/enterprise/domain.d.ts.map +1 -1
- package/dist/server/enterprise/domain.js +148 -59
- package/dist/server/enterprise/domain.js.map +1 -1
- package/dist/server/enterprise/http.d.ts.map +1 -1
- package/dist/server/enterprise/http.js +35 -14
- package/dist/server/enterprise/http.js.map +1 -1
- package/dist/server/http.d.ts +2 -2
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +25 -20
- package/dist/server/http.js.map +1 -1
- package/dist/server/identity.js +5 -2
- package/dist/server/identity.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/limits.js +21 -30
- package/dist/server/limits.js.map +1 -1
- package/dist/server/mounts.d.ts +26 -64
- package/dist/server/mounts.d.ts.map +1 -1
- package/dist/server/mounts.js +45 -106
- package/dist/server/mounts.js.map +1 -1
- package/dist/server/mutations/account.d.ts +8 -9
- package/dist/server/mutations/account.d.ts.map +1 -1
- package/dist/server/mutations/account.js +11 -9
- package/dist/server/mutations/account.js.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/code.js +5 -2
- package/dist/server/mutations/code.js.map +1 -1
- package/dist/server/mutations/invalidate.d.ts +4 -4
- package/dist/server/mutations/invalidate.d.ts.map +1 -1
- package/dist/server/mutations/invalidate.js.map +1 -1
- package/dist/server/mutations/oauth.d.ts +12 -10
- package/dist/server/mutations/oauth.d.ts.map +1 -1
- package/dist/server/mutations/oauth.js +9 -3
- package/dist/server/mutations/oauth.js.map +1 -1
- package/dist/server/mutations/refresh.d.ts +3 -3
- package/dist/server/mutations/refresh.d.ts.map +1 -1
- package/dist/server/mutations/refresh.js +1 -1
- package/dist/server/mutations/refresh.js.map +1 -1
- package/dist/server/mutations/register.d.ts +11 -11
- package/dist/server/mutations/register.d.ts.map +1 -1
- package/dist/server/mutations/register.js +45 -41
- package/dist/server/mutations/register.js.map +1 -1
- package/dist/server/mutations/retrieve.d.ts +6 -6
- package/dist/server/mutations/retrieve.d.ts.map +1 -1
- package/dist/server/mutations/retrieve.js +20 -24
- package/dist/server/mutations/retrieve.js.map +1 -1
- package/dist/server/mutations/signature.d.ts +6 -7
- package/dist/server/mutations/signature.d.ts.map +1 -1
- package/dist/server/mutations/signature.js +9 -3
- package/dist/server/mutations/signature.js.map +1 -1
- package/dist/server/mutations/signin.d.ts +5 -5
- package/dist/server/mutations/signin.d.ts.map +1 -1
- package/dist/server/mutations/signout.js.map +1 -1
- package/dist/server/mutations/store.d.ts +97 -97
- package/dist/server/mutations/store.d.ts.map +1 -1
- package/dist/server/mutations/store.js +8 -23
- package/dist/server/mutations/store.js.map +1 -1
- package/dist/server/mutations/verifier.js.map +1 -1
- package/dist/server/mutations/verify.d.ts +10 -10
- package/dist/server/mutations/verify.d.ts.map +1 -1
- package/dist/server/mutations/verify.js.map +1 -1
- package/dist/server/oauth.js +53 -16
- package/dist/server/oauth.js.map +1 -1
- package/dist/server/passkey.d.ts +2 -2
- package/dist/server/passkey.d.ts.map +1 -1
- package/dist/server/passkey.js +114 -30
- package/dist/server/passkey.js.map +1 -1
- package/dist/server/redirects.js +9 -3
- package/dist/server/redirects.js.map +1 -1
- package/dist/server/refresh.js +10 -7
- package/dist/server/refresh.js.map +1 -1
- package/dist/server/runtime.d.ts +14 -14
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js +61 -19
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/signin.js +34 -10
- package/dist/server/signin.js.map +1 -1
- package/dist/server/ssr.d.ts.map +1 -1
- package/dist/server/ssr.js +175 -184
- package/dist/server/ssr.js.map +1 -1
- package/dist/server/totp.js +78 -18
- package/dist/server/totp.js.map +1 -1
- package/dist/server/types.d.ts +13 -21
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/dist/server/users.js +6 -3
- package/dist/server/users.js.map +1 -1
- package/dist/server/utils.js +10 -4
- package/dist/server/utils.js.map +1 -1
- package/package.json +2 -6
- package/src/authorization/index.ts +1 -1
- package/src/cli/index.ts +1 -1
- package/src/client/core/types.ts +14 -14
- package/src/client/factors/device.ts +10 -12
- package/src/client/factors/passkey.ts +23 -26
- package/src/client/index.ts +54 -64
- package/src/client/runtime/invite.ts +5 -7
- package/src/component/index.ts +1 -0
- package/src/component/public/enterprise/audit.ts +6 -1
- package/src/component/public/enterprise/core.ts +1 -0
- package/src/component/public/enterprise/domains.ts +5 -1
- package/src/component/public/enterprise/scim.ts +1 -0
- package/src/component/public/enterprise/secrets.ts +1 -0
- package/src/component/public/enterprise/webhooks.ts +1 -0
- package/src/component/public/factors/devices.ts +1 -0
- package/src/component/public/factors/passkeys.ts +1 -0
- package/src/component/public/factors/totp.ts +1 -0
- package/src/component/public/groups/core.ts +1 -1
- package/src/component/public/groups/invites.ts +7 -1
- package/src/component/public/groups/members.ts +1 -0
- package/src/component/public/identity/accounts.ts +1 -0
- package/src/component/public/identity/codes.ts +1 -0
- package/src/component/public/identity/sessions.ts +1 -0
- package/src/component/public/identity/tokens.ts +1 -0
- package/src/component/public/identity/users.ts +1 -0
- package/src/component/public/identity/verifiers.ts +1 -0
- package/src/component/public/security/keys.ts +1 -0
- package/src/component/public/security/limits.ts +1 -0
- package/src/providers/password.ts +89 -110
- package/src/server/auth.ts +177 -111
- package/src/server/core.ts +197 -233
- package/src/server/crypto.ts +31 -29
- package/src/server/device.ts +65 -32
- package/src/server/enterprise/domain.ts +158 -170
- package/src/server/enterprise/http.ts +46 -39
- package/src/server/http.ts +36 -30
- package/src/server/identity.ts +5 -5
- package/src/server/index.ts +2 -0
- package/src/server/limits.ts +53 -80
- package/src/server/mounts.ts +47 -74
- package/src/server/mutations/account.ts +22 -36
- package/src/server/mutations/code.ts +6 -6
- package/src/server/mutations/invalidate.ts +1 -1
- package/src/server/mutations/oauth.ts +14 -8
- package/src/server/mutations/refresh.ts +5 -4
- package/src/server/mutations/register.ts +87 -132
- package/src/server/mutations/retrieve.ts +44 -44
- package/src/server/mutations/signature.ts +13 -6
- package/src/server/mutations/signout.ts +1 -1
- package/src/server/mutations/store.ts +16 -31
- package/src/server/mutations/verifier.ts +1 -1
- package/src/server/mutations/verify.ts +3 -5
- package/src/server/oauth.ts +60 -69
- package/src/server/passkey.ts +567 -517
- package/src/server/redirects.ts +10 -6
- package/src/server/refresh.ts +14 -18
- package/src/server/runtime.ts +70 -55
- package/src/server/signin.ts +44 -37
- package/src/server/ssr.ts +390 -407
- package/src/server/totp.ts +85 -35
- package/src/server/types.ts +19 -22
- package/src/server/users.ts +7 -6
- package/src/server/utils.ts +10 -12
- package/dist/component/server/authError.js +0 -34
- package/dist/component/server/authError.js.map +0 -1
- package/dist/component/server/errors.d.ts +0 -1
- package/dist/component/server/errors.js +0 -137
- package/dist/component/server/errors.js.map +0 -1
- package/dist/server/authError.d.ts +0 -46
- package/dist/server/authError.d.ts.map +0 -1
- package/dist/server/authError.js +0 -34
- package/dist/server/authError.js.map +0 -1
- package/dist/server/errors.d.ts +0 -177
- package/dist/server/errors.d.ts.map +0 -1
- package/dist/server/errors.js +0 -212
- package/dist/server/errors.js.map +0 -1
- package/src/server/authError.ts +0 -44
- package/src/server/errors.ts +0 -290
package/dist/server/mounts.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { enterpriseConnectionWhereValidator, enterpriseDomainInputValidator, enterpriseDomainVerificationInputValidator, enterprisePolicyPatchValidator, enterpriseSamlAttributeMappingValidator, enterpriseSamlSpValidator, enterpriseStatusValidator } from "./enterprise/validators.js";
|
|
2
|
+
import { Cv } from "@robelest/fx/convex";
|
|
2
3
|
import { actionGeneric, mutationGeneric, queryGeneric } from "convex/server";
|
|
3
4
|
import { ConvexError, v } from "convex/values";
|
|
4
5
|
|
|
@@ -51,28 +52,23 @@ function createMountedAdminAuthorizer(auth, options) {
|
|
|
51
52
|
const requireUserId = requireSignedInUser(auth);
|
|
52
53
|
return async (ctx, permission, target = {}) => {
|
|
53
54
|
const userId = await requireUserId(ctx);
|
|
54
|
-
if (userId === null)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
};
|
|
58
|
-
if (!options?.admin?.authorized)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
55
|
+
if (userId === null) throw Cv.error({
|
|
56
|
+
code: "NOT_SIGNED_IN",
|
|
57
|
+
message: "You must be signed in to perform this action."
|
|
58
|
+
});
|
|
59
|
+
if (!options?.admin?.authorized) throw Cv.error({
|
|
60
|
+
code: "FORBIDDEN",
|
|
61
|
+
message: "Access denied."
|
|
62
|
+
});
|
|
62
63
|
const resolved = await resolveMountedEnterpriseTarget(auth, ctx, target);
|
|
63
|
-
|
|
64
|
+
await options.admin.authorized(ctx, {
|
|
64
65
|
userId,
|
|
65
66
|
permission,
|
|
66
67
|
enterpriseId: resolved.enterpriseId,
|
|
67
68
|
groupId: resolved.groupId,
|
|
68
69
|
resolvedGroupId: resolved.resolvedGroupId
|
|
69
70
|
});
|
|
70
|
-
if (authResult && !authResult.ok) return {
|
|
71
|
-
ok: false,
|
|
72
|
-
code: "FORBIDDEN"
|
|
73
|
-
};
|
|
74
71
|
return {
|
|
75
|
-
ok: true,
|
|
76
72
|
userId,
|
|
77
73
|
...resolved
|
|
78
74
|
};
|
|
@@ -126,12 +122,7 @@ function sso(auth, options) {
|
|
|
126
122
|
domain: v.optional(v.string())
|
|
127
123
|
},
|
|
128
124
|
handler: async (ctx, args) => {
|
|
129
|
-
const
|
|
130
|
-
if (!authResult.ok) return {
|
|
131
|
-
ok: false,
|
|
132
|
-
code: authResult.code
|
|
133
|
-
};
|
|
134
|
-
const { userId } = authResult;
|
|
125
|
+
const { userId } = await authorize(ctx, "sso.connection.create", { groupId: args.groupId });
|
|
135
126
|
const createsGroup = args.groupId === void 0;
|
|
136
127
|
const groupId = args.groupId ?? (await auth.group.create(ctx, {
|
|
137
128
|
name: args.name?.trim() || args.slug?.trim() || "Enterprise",
|
|
@@ -163,21 +154,21 @@ function sso(auth, options) {
|
|
|
163
154
|
get: queryGeneric({
|
|
164
155
|
args: { enterpriseId: v.string() },
|
|
165
156
|
handler: async (ctx, args) => {
|
|
166
|
-
|
|
157
|
+
await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
|
|
167
158
|
return await auth.sso.admin.connection.get(ctx, args.enterpriseId);
|
|
168
159
|
}
|
|
169
160
|
}),
|
|
170
161
|
getByGroup: queryGeneric({
|
|
171
162
|
args: { groupId: v.string() },
|
|
172
163
|
handler: async (ctx, args) => {
|
|
173
|
-
|
|
164
|
+
await authorize(ctx, "sso.connection.read", { groupId: args.groupId });
|
|
174
165
|
return await auth.sso.admin.connection.getByGroup(ctx, args.groupId);
|
|
175
166
|
}
|
|
176
167
|
}),
|
|
177
168
|
getByDomain: queryGeneric({
|
|
178
169
|
args: { domain: v.string() },
|
|
179
170
|
handler: async (ctx, args) => {
|
|
180
|
-
|
|
171
|
+
await authorize(ctx, "sso.connection.read", { domain: args.domain });
|
|
181
172
|
return await auth.sso.admin.connection.getByDomain(ctx, args.domain);
|
|
182
173
|
}
|
|
183
174
|
}),
|
|
@@ -190,7 +181,7 @@ function sso(auth, options) {
|
|
|
190
181
|
order: v.optional(v.union(v.literal("asc"), v.literal("desc")))
|
|
191
182
|
},
|
|
192
183
|
handler: async (ctx, args) => {
|
|
193
|
-
|
|
184
|
+
await authorize(ctx, "sso.connection.read", { groupId: args.where?.groupId });
|
|
194
185
|
return await auth.sso.admin.connection.list(ctx, args);
|
|
195
186
|
}
|
|
196
187
|
}),
|
|
@@ -204,33 +195,22 @@ function sso(auth, options) {
|
|
|
204
195
|
})
|
|
205
196
|
},
|
|
206
197
|
handler: async (ctx, args) => {
|
|
207
|
-
|
|
208
|
-
if (!_auth.ok) return {
|
|
209
|
-
ok: false,
|
|
210
|
-
code: _auth.code
|
|
211
|
-
};
|
|
198
|
+
await authorize(ctx, "sso.connection.manage", { enterpriseId: args.enterpriseId });
|
|
212
199
|
await auth.sso.admin.connection.update(ctx, args.enterpriseId, args.data);
|
|
213
|
-
return {
|
|
214
|
-
ok: true,
|
|
215
|
-
enterpriseId: args.enterpriseId
|
|
216
|
-
};
|
|
200
|
+
return { enterpriseId: args.enterpriseId };
|
|
217
201
|
}
|
|
218
202
|
}),
|
|
219
203
|
delete: mutationGeneric({
|
|
220
204
|
args: { enterpriseId: v.string() },
|
|
221
205
|
handler: async (ctx, args) => {
|
|
222
|
-
|
|
223
|
-
if (!_auth.ok) return {
|
|
224
|
-
ok: false,
|
|
225
|
-
code: _auth.code
|
|
226
|
-
};
|
|
206
|
+
await authorize(ctx, "sso.connection.manage", { enterpriseId: args.enterpriseId });
|
|
227
207
|
return await auth.sso.admin.connection.delete(ctx, args.enterpriseId);
|
|
228
208
|
}
|
|
229
209
|
}),
|
|
230
210
|
status: queryGeneric({
|
|
231
211
|
args: { enterpriseId: v.string() },
|
|
232
212
|
handler: async (ctx, args) => {
|
|
233
|
-
|
|
213
|
+
await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
|
|
234
214
|
return await auth.sso.admin.connection.status(ctx, args.enterpriseId);
|
|
235
215
|
}
|
|
236
216
|
}),
|
|
@@ -238,14 +218,14 @@ function sso(auth, options) {
|
|
|
238
218
|
list: queryGeneric({
|
|
239
219
|
args: { enterpriseId: v.string() },
|
|
240
220
|
handler: async (ctx, args) => {
|
|
241
|
-
|
|
221
|
+
await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
|
|
242
222
|
return await auth.sso.admin.connection.domain.list(ctx, args.enterpriseId);
|
|
243
223
|
}
|
|
244
224
|
}),
|
|
245
225
|
validate: queryGeneric({
|
|
246
226
|
args: { enterpriseId: v.string() },
|
|
247
227
|
handler: async (ctx, args) => {
|
|
248
|
-
|
|
228
|
+
await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
|
|
249
229
|
return await auth.sso.admin.connection.domain.validate(ctx, args.enterpriseId);
|
|
250
230
|
}
|
|
251
231
|
}),
|
|
@@ -255,11 +235,7 @@ function sso(auth, options) {
|
|
|
255
235
|
domains: v.array(enterpriseDomainInputValidator)
|
|
256
236
|
},
|
|
257
237
|
handler: async (ctx, args) => {
|
|
258
|
-
|
|
259
|
-
if (!_auth.ok) return {
|
|
260
|
-
ok: false,
|
|
261
|
-
code: _auth.code
|
|
262
|
-
};
|
|
238
|
+
await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
|
|
263
239
|
return await auth.sso.admin.connection.domain.set(ctx, args.enterpriseId, args.domains);
|
|
264
240
|
}
|
|
265
241
|
}),
|
|
@@ -267,22 +243,14 @@ function sso(auth, options) {
|
|
|
267
243
|
request: mutationGeneric({
|
|
268
244
|
args: enterpriseDomainVerificationInputValidator,
|
|
269
245
|
handler: async (ctx, args) => {
|
|
270
|
-
|
|
271
|
-
if (!_auth.ok) return {
|
|
272
|
-
ok: false,
|
|
273
|
-
code: _auth.code
|
|
274
|
-
};
|
|
246
|
+
await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
|
|
275
247
|
return await auth.sso.admin.connection.domain.verification.request(ctx, args);
|
|
276
248
|
}
|
|
277
249
|
}),
|
|
278
250
|
confirm: actionGeneric({
|
|
279
251
|
args: enterpriseDomainVerificationInputValidator,
|
|
280
252
|
handler: async (ctx, args) => {
|
|
281
|
-
|
|
282
|
-
if (!_auth.ok) return {
|
|
283
|
-
ok: false,
|
|
284
|
-
code: _auth.code
|
|
285
|
-
};
|
|
253
|
+
await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
|
|
286
254
|
return await auth.sso.admin.connection.domain.verification.confirm(ctx, args);
|
|
287
255
|
}
|
|
288
256
|
})
|
|
@@ -304,29 +272,21 @@ function sso(auth, options) {
|
|
|
304
272
|
extraFields: v.optional(v.record(v.string(), v.string()))
|
|
305
273
|
},
|
|
306
274
|
handler: async (ctx, args) => {
|
|
307
|
-
|
|
308
|
-
if (!_auth.ok) return {
|
|
309
|
-
ok: false,
|
|
310
|
-
code: _auth.code
|
|
311
|
-
};
|
|
275
|
+
await authorize(ctx, "sso.protocol.manage", { enterpriseId: args.enterpriseId });
|
|
312
276
|
return await auth.sso.admin.oidc.configure(ctx, args);
|
|
313
277
|
}
|
|
314
278
|
}),
|
|
315
279
|
get: queryGeneric({
|
|
316
280
|
args: { enterpriseId: v.string() },
|
|
317
281
|
handler: async (ctx, args) => {
|
|
318
|
-
|
|
282
|
+
await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
|
|
319
283
|
return await auth.sso.admin.oidc.get(ctx, args.enterpriseId);
|
|
320
284
|
}
|
|
321
285
|
}),
|
|
322
286
|
validate: actionGeneric({
|
|
323
287
|
args: { enterpriseId: v.string() },
|
|
324
288
|
handler: async (ctx, args) => {
|
|
325
|
-
|
|
326
|
-
if (!_auth.ok) return {
|
|
327
|
-
ok: false,
|
|
328
|
-
code: _auth.code
|
|
329
|
-
};
|
|
289
|
+
await authorize(ctx, "sso.protocol.manage", { enterpriseId: args.enterpriseId });
|
|
330
290
|
return await auth.sso.admin.oidc.validate(ctx, args.enterpriseId);
|
|
331
291
|
}
|
|
332
292
|
})
|
|
@@ -343,18 +303,14 @@ function sso(auth, options) {
|
|
|
343
303
|
sp: v.optional(enterpriseSamlSpValidator)
|
|
344
304
|
},
|
|
345
305
|
handler: async (ctx, args) => {
|
|
346
|
-
|
|
347
|
-
if (!_auth.ok) return {
|
|
348
|
-
ok: false,
|
|
349
|
-
code: _auth.code
|
|
350
|
-
};
|
|
306
|
+
await authorize(ctx, "sso.protocol.manage", { enterpriseId: args.enterpriseId });
|
|
351
307
|
return await auth.sso.admin.saml.configure(ctx, args);
|
|
352
308
|
}
|
|
353
309
|
}),
|
|
354
310
|
validate: queryGeneric({
|
|
355
311
|
args: { enterpriseId: v.string() },
|
|
356
312
|
handler: async (ctx, args) => {
|
|
357
|
-
|
|
313
|
+
await authorize(ctx, "sso.protocol.manage", { enterpriseId: args.enterpriseId });
|
|
358
314
|
return await auth.sso.admin.saml.validate(ctx, args.enterpriseId);
|
|
359
315
|
}
|
|
360
316
|
})
|
|
@@ -363,7 +319,7 @@ function sso(auth, options) {
|
|
|
363
319
|
get: queryGeneric({
|
|
364
320
|
args: { enterpriseId: v.string() },
|
|
365
321
|
handler: async (ctx, args) => {
|
|
366
|
-
|
|
322
|
+
await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
|
|
367
323
|
return await auth.sso.admin.policy.get(ctx, args.enterpriseId);
|
|
368
324
|
}
|
|
369
325
|
}),
|
|
@@ -373,18 +329,14 @@ function sso(auth, options) {
|
|
|
373
329
|
patch: enterprisePolicyPatchValidator
|
|
374
330
|
},
|
|
375
331
|
handler: async (ctx, args) => {
|
|
376
|
-
|
|
377
|
-
if (!_auth.ok) return {
|
|
378
|
-
ok: false,
|
|
379
|
-
code: _auth.code
|
|
380
|
-
};
|
|
332
|
+
await authorize(ctx, "sso.policy.manage", { enterpriseId: args.enterpriseId });
|
|
381
333
|
return await auth.sso.admin.policy.update(ctx, args.enterpriseId, args.patch);
|
|
382
334
|
}
|
|
383
335
|
}),
|
|
384
336
|
validate: queryGeneric({
|
|
385
337
|
args: { enterpriseId: v.string() },
|
|
386
338
|
handler: async (ctx, args) => {
|
|
387
|
-
|
|
339
|
+
await authorize(ctx, "sso.policy.manage", { enterpriseId: args.enterpriseId });
|
|
388
340
|
return await auth.sso.admin.policy.validate(ctx, args.enterpriseId);
|
|
389
341
|
}
|
|
390
342
|
})
|
|
@@ -396,10 +348,10 @@ function sso(auth, options) {
|
|
|
396
348
|
limit: v.optional(v.number())
|
|
397
349
|
},
|
|
398
350
|
handler: async (ctx, args) => {
|
|
399
|
-
|
|
351
|
+
await authorize(ctx, "sso.audit.read", {
|
|
400
352
|
enterpriseId: args.enterpriseId,
|
|
401
353
|
groupId: args.groupId
|
|
402
|
-
})
|
|
354
|
+
});
|
|
403
355
|
return await auth.sso.admin.audit.list(ctx, args);
|
|
404
356
|
}
|
|
405
357
|
}) },
|
|
@@ -410,7 +362,7 @@ function sso(auth, options) {
|
|
|
410
362
|
limit: v.optional(v.number())
|
|
411
363
|
},
|
|
412
364
|
handler: async (ctx, args) => {
|
|
413
|
-
|
|
365
|
+
await authorize(ctx, "sso.webhook.manage", { enterpriseId: args.enterpriseId });
|
|
414
366
|
return await auth.sso.admin.webhook.delivery.list(ctx, args);
|
|
415
367
|
}
|
|
416
368
|
}) },
|
|
@@ -424,12 +376,7 @@ function sso(auth, options) {
|
|
|
424
376
|
createdByUserId: v.optional(v.string())
|
|
425
377
|
},
|
|
426
378
|
handler: async (ctx, args) => {
|
|
427
|
-
const
|
|
428
|
-
if (!authResult.ok) return {
|
|
429
|
-
ok: false,
|
|
430
|
-
code: authResult.code
|
|
431
|
-
};
|
|
432
|
-
const { userId } = authResult;
|
|
379
|
+
const { userId } = await authorize(ctx, "sso.webhook.manage", { enterpriseId: args.enterpriseId });
|
|
433
380
|
return {
|
|
434
381
|
_id: (await auth.sso.admin.webhook.endpoint.create(ctx, {
|
|
435
382
|
...args,
|
|
@@ -447,7 +394,7 @@ function sso(auth, options) {
|
|
|
447
394
|
list: queryGeneric({
|
|
448
395
|
args: { enterpriseId: v.string() },
|
|
449
396
|
handler: async (ctx, args) => {
|
|
450
|
-
|
|
397
|
+
await authorize(ctx, "sso.webhook.manage", { enterpriseId: args.enterpriseId });
|
|
451
398
|
return (await auth.sso.admin.webhook.endpoint.list(ctx, args.enterpriseId)).map((endpoint) => {
|
|
452
399
|
const { secretHash: _secretHash, ...rest } = endpoint;
|
|
453
400
|
return rest;
|
|
@@ -458,18 +405,14 @@ function sso(auth, options) {
|
|
|
458
405
|
args: { endpointId: v.string() },
|
|
459
406
|
handler: async (ctx, args) => {
|
|
460
407
|
const endpoint = await auth.sso.admin.webhook.endpoint.get(ctx, args.endpointId);
|
|
461
|
-
if (!endpoint)
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
};
|
|
465
|
-
|
|
408
|
+
if (!endpoint) throw Cv.error({
|
|
409
|
+
code: "INVALID_PARAMETERS",
|
|
410
|
+
message: "Webhook endpoint not found."
|
|
411
|
+
});
|
|
412
|
+
await authorize(ctx, "sso.webhook.manage", {
|
|
466
413
|
enterpriseId: endpoint.enterpriseId,
|
|
467
414
|
groupId: endpoint.groupId
|
|
468
415
|
});
|
|
469
|
-
if (!_auth.ok) return {
|
|
470
|
-
ok: false,
|
|
471
|
-
code: _auth.code
|
|
472
|
-
};
|
|
473
416
|
return await auth.sso.admin.webhook.endpoint.disable(ctx, args.endpointId);
|
|
474
417
|
}
|
|
475
418
|
})
|
|
@@ -541,25 +484,21 @@ function scim(auth, options) {
|
|
|
541
484
|
status: v.optional(enterpriseStatusValidator)
|
|
542
485
|
},
|
|
543
486
|
handler: async (ctx, args) => {
|
|
544
|
-
|
|
545
|
-
if (!_auth.ok) return {
|
|
546
|
-
ok: false,
|
|
547
|
-
code: _auth.code
|
|
548
|
-
};
|
|
487
|
+
await authorize(ctx, "scim.manage", { enterpriseId: args.enterpriseId });
|
|
549
488
|
return await auth.scim.admin.configure(ctx, args);
|
|
550
489
|
}
|
|
551
490
|
}),
|
|
552
491
|
get: queryGeneric({
|
|
553
492
|
args: { enterpriseId: v.string() },
|
|
554
493
|
handler: async (ctx, args) => {
|
|
555
|
-
|
|
494
|
+
await authorize(ctx, "scim.manage", { enterpriseId: args.enterpriseId });
|
|
556
495
|
return await auth.scim.admin.get(ctx, args.enterpriseId);
|
|
557
496
|
}
|
|
558
497
|
}),
|
|
559
498
|
validate: queryGeneric({
|
|
560
499
|
args: { enterpriseId: v.string() },
|
|
561
500
|
handler: async (ctx, args) => {
|
|
562
|
-
|
|
501
|
+
await authorize(ctx, "scim.manage", { enterpriseId: args.enterpriseId });
|
|
563
502
|
return await auth.scim.admin.validate(ctx, args.enterpriseId);
|
|
564
503
|
}
|
|
565
504
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mounts.js","names":[],"sources":["../../src/server/mounts.ts"],"sourcesContent":["import { actionGeneric, mutationGeneric, queryGeneric } from \"convex/server\";\nimport { ConvexError, v } from \"convex/values\";\n\nimport type { AuthApi } from \"./auth\";\nimport {\n enterpriseConnectionWhereValidator,\n enterpriseDomainInputValidator,\n enterpriseDomainVerificationInputValidator,\n enterprisePolicyPatchValidator,\n enterpriseSamlAttributeMappingValidator,\n enterpriseSamlSpValidator,\n enterpriseStatusValidator,\n} from \"./enterprise/validators\";\nimport type { AuthAuthorizationConfig, AuthRoleId } from \"./types\";\n\n/**\n * Permission identifiers used by mounted enterprise admin APIs.\n *\n * These permission strings are passed to your {@link EnterpriseAuthorizer}\n * callback so app code can decide whether the current user may perform a\n * specific SSO or SCIM management operation.\n *\n * @example\n * ```ts\n * const authorized: EnterpriseAuthorizer = async (ctx, input) => {\n * if (input.permission === \"sso.connection.create\") {\n * // Only org admins may create SSO connections\n * }\n * };\n * ```\n */\nexport type EnterpriseAdminPermission =\n | \"sso.connection.create\"\n | \"sso.connection.read\"\n | \"sso.connection.manage\"\n | \"sso.domain.manage\"\n | \"sso.protocol.manage\"\n | \"sso.policy.manage\"\n | \"sso.audit.read\"\n | \"sso.webhook.manage\"\n | \"scim.manage\";\n\n/**\n * Input passed to an {@link EnterpriseAuthorizer}.\n *\n * Contains the acting user, the requested permission, and the resolved\n * enterprise/group scope for the operation being authorized.\n */\nexport type EnterpriseAdminAuthorizationInput = {\n /** The signed-in user's ID performing the admin action. */\n userId: string;\n /** The {@link EnterpriseAdminPermission} being requested. */\n permission: EnterpriseAdminPermission;\n /** Enterprise document ID, if the operation targets a specific enterprise. */\n enterpriseId?: string;\n /** Group document ID, if explicitly provided by the caller. */\n groupId?: string;\n /** Resolved group ID from the enterprise record, or `null` when no enterprise context. */\n resolvedGroupId: string | null;\n};\n\n/**\n * App-defined authorization hook for mounted enterprise admin APIs.\n *\n * Return `void` (or resolve) to allow the operation, or `{ ok: false }` to deny it.\n *\n * @param ctx - Convex context with `ctx.auth` for identity checks.\n * @param input - The {@link EnterpriseAdminAuthorizationInput} describing who is doing what.\n * @returns `void` to allow, `{ ok: false }` to deny.\n *\n * @example\n * ```ts\n * import { EnterpriseAuthorizer } from \"@robelest/convex-auth/server\";\n *\n * const authorized: EnterpriseAuthorizer = async (ctx, input) => {\n * const identity = await ctx.auth.getUserIdentity();\n * if (!identity) return { ok: false };\n * // Allow all admin ops for the org owner\n * };\n * ```\n */\nexport type EnterpriseAuthorizer = (\n ctx: { auth: import(\"convex/server\").Auth },\n input: EnterpriseAdminAuthorizationInput,\n) => Promise<void | { ok: false }>;\n\ntype RoleRef<TRoleId extends string> = { id: TRoleId };\n\ntype MountedEnterpriseOptions<TRoleId extends string = string> = {\n admin?: {\n authorized?: EnterpriseAuthorizer;\n roles?: Array<TRoleId | RoleRef<TRoleId>>;\n };\n};\n\n/**\n * Configuration for {@link enterprise}, {@link sso}, and {@link scim}\n * mounted admin APIs.\n *\n * @typeParam TRoleId - Role IDs that may be assigned to enterprise creators.\n *\n * @example\n * ```ts\n * import { enterprise, EnterpriseMountOptions } from \"@robelest/convex-auth/server\";\n *\n * const options: EnterpriseMountOptions = {\n * admin: {\n * authorized: async (ctx, input) => {\n * // Verify the user has permission for `input.permission`\n * },\n * roles: [\"admin\", \"owner\"],\n * },\n * };\n * ```\n */\nexport type EnterpriseMountOptions<TRoleId extends string = string> = {\n admin: {\n authorized: EnterpriseAuthorizer;\n roles?: Array<TRoleId | RoleRef<TRoleId>>;\n };\n};\n\ntype MountedEnterpriseTarget = {\n enterpriseId?: string;\n groupId?: string;\n domain?: string;\n};\n\nfunction requireSignedInUser(auth: Pick<AuthApi, \"user\">) {\n return async (ctx: {\n auth: import(\"convex/server\").Auth;\n }): Promise<string | null> => {\n return await auth.user.id(ctx as never);\n };\n}\n\nfunction normalizeCreatorRoleIds<TRoleId extends string>(\n roles?: Array<TRoleId | RoleRef<TRoleId>>,\n) {\n return roles?.map((role) => (typeof role === \"string\" ? role : role.id));\n}\n\nasync function resolveMountedEnterpriseTarget(\n auth: Pick<AuthApi, \"sso\">,\n ctx: { auth: import(\"convex/server\").Auth },\n target: MountedEnterpriseTarget,\n) {\n if (target.groupId !== undefined) {\n return {\n enterpriseId: target.enterpriseId,\n groupId: target.groupId,\n resolvedGroupId: target.groupId,\n };\n }\n\n if (target.enterpriseId !== undefined) {\n const enterprise = await auth.sso.admin.connection.get(\n ctx as never,\n target.enterpriseId,\n );\n if (enterprise === null) {\n throw new ConvexError({\n code: \"INVALID_PARAMETERS\",\n message: \"Enterprise not found.\",\n });\n }\n return {\n enterpriseId: enterprise._id,\n groupId: enterprise.groupId,\n resolvedGroupId: enterprise.groupId,\n };\n }\n\n if (target.domain !== undefined) {\n const resolved = await auth.sso.admin.connection.getByDomain(\n ctx as never,\n target.domain,\n );\n if (resolved?.enterprise === undefined) {\n throw new ConvexError({\n code: \"INVALID_PARAMETERS\",\n message: \"Enterprise not found.\",\n });\n }\n return {\n enterpriseId: resolved.enterprise._id,\n groupId: resolved.enterprise.groupId,\n resolvedGroupId: resolved.enterprise.groupId,\n };\n }\n\n return {\n enterpriseId: undefined,\n groupId: undefined,\n resolvedGroupId: null,\n };\n}\n\nfunction createMountedAdminAuthorizer(\n auth: Pick<AuthApi, \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions,\n) {\n const requireUserId = requireSignedInUser(auth);\n\n return async (\n ctx: { auth: import(\"convex/server\").Auth },\n permission: EnterpriseAdminPermission,\n target: MountedEnterpriseTarget = {},\n ) => {\n const userId = await requireUserId(ctx);\n if (userId === null) {\n return { ok: false as const, code: \"NOT_SIGNED_IN\" as const };\n }\n if (!options?.admin?.authorized) {\n return { ok: false as const, code: \"FORBIDDEN\" as const };\n }\n const resolved = await resolveMountedEnterpriseTarget(auth, ctx, target);\n const authResult = await options.admin.authorized(ctx, {\n userId,\n permission,\n enterpriseId: resolved.enterpriseId,\n groupId: resolved.groupId,\n resolvedGroupId: resolved.resolvedGroupId,\n });\n if (authResult && !authResult.ok) {\n return { ok: false as const, code: \"FORBIDDEN\" as const };\n }\n return { ok: true as const, userId, ...resolved };\n };\n}\n\n/**\n * Build optional public SSO management actions that apps can mount under\n * `convex/auth/sso/**` when they want client-callable enterprise APIs.\n *\n * `admin` is for tenant-admin control-plane operations and should be mounted\n * with an explicit authorization policy. `client` is for end-user sign-in\n * helpers and does not require tenant-admin authorization.\n *\n * @param auth - Auth API subset providing `group`, `member`, `sso`, and `user` namespaces.\n * @param options - Optional admin authorization config. See {@link EnterpriseMountOptions}.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns An object with `admin` (connection CRUD, OIDC/SAML protocol config, policy,\n * audit, webhooks, domain management) and `client` (signIn, metadata) namespaces.\n *\n * @example\n * ```ts\n * // convex/auth/sso.ts\n * import { sso } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const mounted = sso(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * },\n * });\n *\n * export const createConnection = mounted.admin.connection.create;\n * export const signIn = mounted.client.signIn;\n * ```\n *\n * @see {@link scim}\n * @see {@link enterprise}\n */\nexport function sso<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<AuthApi<TAuthorization>, \"group\" | \"member\" | \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions<AuthRoleId<TAuthorization>>,\n) {\n const authorize = createMountedAdminAuthorizer(auth, options);\n const adminRoleIds = normalizeCreatorRoleIds(options?.admin?.roles);\n\n return {\n admin: {\n connection: {\n create: mutationGeneric({\n args: {\n groupId: v.optional(v.string()),\n name: v.optional(v.string()),\n slug: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n domain: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const authResult = await authorize(ctx, \"sso.connection.create\", {\n groupId: args.groupId,\n });\n if (!authResult.ok)\n return { ok: false as const, code: authResult.code };\n const { userId } = authResult;\n const createsGroup = args.groupId === undefined;\n const groupId =\n args.groupId ??\n (\n await auth.group.create(ctx as never, {\n name: args.name?.trim() || args.slug?.trim() || \"Enterprise\",\n slug: args.slug,\n type: \"enterprise\",\n })\n ).groupId;\n if (createsGroup) {\n await auth.member.create(ctx as never, {\n groupId,\n userId,\n roleIds: adminRoleIds,\n });\n }\n const created = await auth.sso.admin.connection.create(\n ctx as never,\n {\n groupId,\n name: args.name,\n slug: args.slug,\n status: args.status,\n },\n );\n if (args.domain) {\n await auth.sso.admin.connection.domain.set(\n ctx as never,\n created.enterpriseId,\n [{ domain: args.domain, isPrimary: true }],\n );\n }\n return {\n ...created,\n groupId,\n createdGroup: createsGroup,\n };\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n getByGroup: queryGeneric({\n args: { groupId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n groupId: args.groupId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.getByGroup(\n ctx as never,\n args.groupId,\n );\n },\n }),\n getByDomain: queryGeneric({\n args: { domain: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n domain: args.domain,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.getByDomain(\n ctx as never,\n args.domain,\n );\n },\n }),\n list: queryGeneric({\n args: {\n where: v.optional(enterpriseConnectionWhereValidator),\n limit: v.optional(v.number()),\n cursor: v.optional(v.union(v.string(), v.null())),\n orderBy: v.optional(v.string()),\n order: v.optional(v.union(v.literal(\"asc\"), v.literal(\"desc\"))),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n groupId: args.where?.groupId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.list(\n ctx as never,\n args as never,\n );\n },\n }),\n update: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n data: v.object({\n name: v.optional(v.string()),\n slug: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n }),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n await auth.sso.admin.connection.update(\n ctx as never,\n args.enterpriseId,\n args.data,\n );\n return { ok: true as const, enterpriseId: args.enterpriseId };\n },\n }),\n delete: mutationGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.delete(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n status: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.status(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n domain: {\n list: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.domain.list(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.domain.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n set: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n domains: v.array(enterpriseDomainInputValidator),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.domain.set(\n ctx as never,\n args.enterpriseId,\n args.domains,\n );\n },\n }),\n verification: {\n request: mutationGeneric({\n args: enterpriseDomainVerificationInputValidator,\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.domain.verification.request(\n ctx as never,\n args,\n );\n },\n }),\n confirm: actionGeneric({\n args: enterpriseDomainVerificationInputValidator,\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.domain.verification.confirm(\n ctx as never,\n args,\n );\n },\n }),\n },\n },\n },\n oidc: {\n configure: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n issuer: v.optional(v.string()),\n discoveryUrl: v.optional(v.string()),\n clientId: v.string(),\n clientSecret: v.optional(v.string()),\n scopes: v.optional(v.array(v.string())),\n authorizationParams: v.optional(v.record(v.string(), v.string())),\n clockToleranceSeconds: v.optional(v.number()),\n strictIssuer: v.optional(v.boolean()),\n extraFields: v.optional(v.record(v.string(), v.string())),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.oidc.configure(ctx as never, args);\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.oidc.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n validate: actionGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.oidc.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n saml: {\n configure: actionGeneric({\n args: {\n enterpriseId: v.string(),\n metadataXml: v.optional(v.string()),\n metadataUrl: v.optional(v.string()),\n domains: v.optional(v.array(v.string())),\n signAuthnRequests: v.optional(v.boolean()),\n attributeMapping: v.optional(\n enterpriseSamlAttributeMappingValidator,\n ),\n sp: v.optional(enterpriseSamlSpValidator),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.saml.configure(ctx as never, args);\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.saml.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n policy: {\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.policy.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n update: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n patch: enterprisePolicyPatchValidator,\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.policy.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.policy.update(\n ctx as never,\n args.enterpriseId,\n args.patch,\n );\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.policy.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.policy.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n audit: {\n list: queryGeneric({\n args: {\n enterpriseId: v.optional(v.string()),\n groupId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.audit.read\", {\n enterpriseId: args.enterpriseId,\n groupId: args.groupId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.audit.list(ctx as never, args);\n },\n }),\n },\n webhook: {\n delivery: {\n list: queryGeneric({\n args: {\n enterpriseId: v.string(),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await (auth.sso.admin.webhook as any).delivery.list(\n ctx as never,\n args,\n );\n },\n }),\n },\n endpoint: {\n create: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n url: v.string(),\n secret: v.string(),\n subscriptions: v.array(v.string()),\n createdByUserId: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const authResult = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!authResult.ok)\n return { ok: false as const, code: authResult.code };\n const { userId } = authResult;\n const result = await auth.sso.admin.webhook.endpoint.create(\n ctx as never,\n {\n ...args,\n createdByUserId: args.createdByUserId ?? userId,\n },\n );\n return {\n _id: result.endpointId,\n enterpriseId: args.enterpriseId,\n url: args.url,\n subscriptions: args.subscriptions,\n createdByUserId: args.createdByUserId ?? userId,\n status: \"active\",\n failureCount: 0,\n };\n },\n }),\n list: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n const endpoints = await auth.sso.admin.webhook.endpoint.list(\n ctx as never,\n args.enterpriseId,\n );\n return endpoints.map((endpoint: Record<string, unknown>) => {\n const { secretHash: _secretHash, ...rest } = endpoint;\n return rest;\n });\n },\n }),\n disable: mutationGeneric({\n args: { endpointId: v.string() },\n handler: async (ctx, args) => {\n const endpoint = await auth.sso.admin.webhook.endpoint.get(\n ctx as never,\n args.endpointId,\n );\n if (!endpoint) {\n return {\n ok: false as const,\n code: \"INVALID_PARAMETERS\" as const,\n };\n }\n const _auth = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: endpoint.enterpriseId,\n groupId: endpoint.groupId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.webhook.endpoint.disable(\n ctx as never,\n args.endpointId,\n );\n },\n }),\n },\n },\n },\n client: {\n signIn: queryGeneric({\n args: {\n enterpriseId: v.optional(v.string()),\n email: v.optional(v.string()),\n domain: v.optional(v.string()),\n redirectTo: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n return await auth.sso.client.signIn(ctx as never, args);\n },\n }),\n metadata: queryGeneric({\n args: {\n enterpriseId: v.string(),\n entityId: v.optional(v.string()),\n acsUrl: v.optional(v.string()),\n sloUrl: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n return await auth.sso.client.metadata(ctx as never, args);\n },\n }),\n },\n };\n}\n\n/**\n * Build optional public SCIM management actions that apps can mount under\n * `convex/auth/scim/**` when they want client-callable enterprise admin APIs.\n *\n * @param auth - Auth API subset providing `scim`, `sso`, and `user` namespaces.\n * @param options - Optional admin authorization config. See {@link EnterpriseMountOptions}.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns An object with `admin.configure`, `admin.get`, and `admin.validate` actions.\n *\n * @example\n * ```ts\n * // convex/auth/scim.ts\n * import { scim } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const mounted = scim(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * },\n * });\n *\n * export const configure = mounted.admin.configure;\n * export const get = mounted.admin.get;\n * export const validate = mounted.admin.validate;\n * ```\n *\n * @see {@link sso}\n * @see {@link enterprise}\n */\nexport function scim<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<AuthApi<TAuthorization>, \"scim\" | \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions<AuthRoleId<TAuthorization>>,\n) {\n const authorize = createMountedAdminAuthorizer(auth, options);\n\n return {\n admin: {\n configure: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n basePath: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.scim.admin.configure(ctx as never, args);\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.scim.admin.get(ctx as never, args.enterpriseId);\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.scim.admin.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n };\n}\n\n/**\n * Build a flat mounted enterprise API surface for app-owned Convex exports.\n *\n * Combines {@link sso} and {@link scim} into a single flat object with\n * all SSO connection, protocol, policy, audit, webhook, and SCIM\n * management functions plus end-user sign-in helpers. The `authorized`\n * callback is required for all admin operations.\n *\n * @param auth - Auth API subset providing `group`, `member`, `scim`, `sso`, and `user` namespaces.\n * @param options - Required {@link EnterpriseMountOptions} with an `admin.authorized` callback.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns A flat object with all enterprise management functions (e.g. `createConnection`,\n * `configureOidc`, `configureScim`, `signIn`, etc.).\n *\n * @example\n * ```ts\n * // convex/auth/enterprise.ts\n * import { enterprise } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const api = enterprise(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * roles: [\"admin\"],\n * },\n * });\n *\n * export const createConnection = api.createConnection;\n * export const configureOidc = api.configureOidc;\n * export const signIn = api.signIn;\n * ```\n *\n * @see {@link sso}\n * @see {@link scim}\n */\nexport function enterprise<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<\n AuthApi<TAuthorization>,\n \"group\" | \"member\" | \"scim\" | \"sso\" | \"user\"\n >,\n options: EnterpriseMountOptions<AuthRoleId<TAuthorization>>,\n) {\n const mountedSso = sso(auth, {\n admin: options.admin,\n });\n const mountedScim = scim(auth, {\n admin: { authorized: options.admin.authorized },\n });\n\n return {\n createConnection: mountedSso.admin.connection.create,\n getConnection: mountedSso.admin.connection.get,\n getConnectionByGroup: mountedSso.admin.connection.getByGroup,\n getConnectionByDomain: mountedSso.admin.connection.getByDomain,\n listConnections: mountedSso.admin.connection.list,\n updateConnection: mountedSso.admin.connection.update,\n deleteConnection: mountedSso.admin.connection.delete,\n getConnectionStatus: mountedSso.admin.connection.status,\n listDomains: mountedSso.admin.connection.domain.list,\n validateDomains: mountedSso.admin.connection.domain.validate,\n setDomains: mountedSso.admin.connection.domain.set,\n requestDomainVerification:\n mountedSso.admin.connection.domain.verification.request,\n confirmDomainVerification:\n mountedSso.admin.connection.domain.verification.confirm,\n configureOidc: mountedSso.admin.oidc.configure,\n getOidc: mountedSso.admin.oidc.get,\n validateOidc: mountedSso.admin.oidc.validate,\n configureSaml: mountedSso.admin.saml.configure,\n validateSaml: mountedSso.admin.saml.validate,\n getPolicy: mountedSso.admin.policy.get,\n updatePolicy: mountedSso.admin.policy.update,\n validatePolicy: mountedSso.admin.policy.validate,\n listAudit: mountedSso.admin.audit.list,\n createWebhookEndpoint: mountedSso.admin.webhook.endpoint.create,\n listWebhookEndpoints: mountedSso.admin.webhook.endpoint.list,\n listWebhookDeliveries: mountedSso.admin.webhook.delivery.list,\n disableWebhookEndpoint: mountedSso.admin.webhook.endpoint.disable,\n configureScim: mountedScim.admin.configure,\n getScim: mountedScim.admin.get,\n validateScim: mountedScim.admin.validate,\n signIn: mountedSso.client.signIn,\n metadata: mountedSso.client.metadata,\n };\n}\n"],"mappings":";;;;;AAgIA,SAAS,oBAAoB,MAA6B;AACxD,QAAO,OAAO,QAEgB;AAC5B,SAAO,MAAM,KAAK,KAAK,GAAG,IAAa;;;AAI3C,SAAS,wBACP,OACA;AACA,QAAO,OAAO,KAAK,SAAU,OAAO,SAAS,WAAW,OAAO,KAAK,GAAI;;AAG1E,eAAe,+BACb,MACA,KACA,QACA;AACA,KAAI,OAAO,YAAY,OACrB,QAAO;EACL,cAAc,OAAO;EACrB,SAAS,OAAO;EAChB,iBAAiB,OAAO;EACzB;AAGH,KAAI,OAAO,iBAAiB,QAAW;EACrC,MAAM,aAAa,MAAM,KAAK,IAAI,MAAM,WAAW,IACjD,KACA,OAAO,aACR;AACD,MAAI,eAAe,KACjB,OAAM,IAAI,YAAY;GACpB,MAAM;GACN,SAAS;GACV,CAAC;AAEJ,SAAO;GACL,cAAc,WAAW;GACzB,SAAS,WAAW;GACpB,iBAAiB,WAAW;GAC7B;;AAGH,KAAI,OAAO,WAAW,QAAW;EAC/B,MAAM,WAAW,MAAM,KAAK,IAAI,MAAM,WAAW,YAC/C,KACA,OAAO,OACR;AACD,MAAI,UAAU,eAAe,OAC3B,OAAM,IAAI,YAAY;GACpB,MAAM;GACN,SAAS;GACV,CAAC;AAEJ,SAAO;GACL,cAAc,SAAS,WAAW;GAClC,SAAS,SAAS,WAAW;GAC7B,iBAAiB,SAAS,WAAW;GACtC;;AAGH,QAAO;EACL,cAAc;EACd,SAAS;EACT,iBAAiB;EAClB;;AAGH,SAAS,6BACP,MACA,SACA;CACA,MAAM,gBAAgB,oBAAoB,KAAK;AAE/C,QAAO,OACL,KACA,YACA,SAAkC,EAAE,KACjC;EACH,MAAM,SAAS,MAAM,cAAc,IAAI;AACvC,MAAI,WAAW,KACb,QAAO;GAAE,IAAI;GAAgB,MAAM;GAA0B;AAE/D,MAAI,CAAC,SAAS,OAAO,WACnB,QAAO;GAAE,IAAI;GAAgB,MAAM;GAAsB;EAE3D,MAAM,WAAW,MAAM,+BAA+B,MAAM,KAAK,OAAO;EACxE,MAAM,aAAa,MAAM,QAAQ,MAAM,WAAW,KAAK;GACrD;GACA;GACA,cAAc,SAAS;GACvB,SAAS,SAAS;GAClB,iBAAiB,SAAS;GAC3B,CAAC;AACF,MAAI,cAAc,CAAC,WAAW,GAC5B,QAAO;GAAE,IAAI;GAAgB,MAAM;GAAsB;AAE3D,SAAO;GAAE,IAAI;GAAe;GAAQ,GAAG;GAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCrD,SAAgB,IAGd,MACA,SACA;CACA,MAAM,YAAY,6BAA6B,MAAM,QAAQ;CAC7D,MAAM,eAAe,wBAAwB,SAAS,OAAO,MAAM;AAEnE,QAAO;EACL,OAAO;GACL,YAAY;IACV,QAAQ,gBAAgB;KACtB,MAAM;MACJ,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC/B,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC5B,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC5B,QAAQ,EAAE,SAAS,0BAA0B;MAC7C,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC/B;KACD,SAAS,OAAO,KAAK,SAAS;MAC5B,MAAM,aAAa,MAAM,UAAU,KAAK,yBAAyB,EAC/D,SAAS,KAAK,SACf,CAAC;AACF,UAAI,CAAC,WAAW,GACd,QAAO;OAAE,IAAI;OAAgB,MAAM,WAAW;OAAM;MACtD,MAAM,EAAE,WAAW;MACnB,MAAM,eAAe,KAAK,YAAY;MACtC,MAAM,UACJ,KAAK,YAEH,MAAM,KAAK,MAAM,OAAO,KAAc;OACpC,MAAM,KAAK,MAAM,MAAM,IAAI,KAAK,MAAM,MAAM,IAAI;OAChD,MAAM,KAAK;OACX,MAAM;OACP,CAAC,EACF;AACJ,UAAI,aACF,OAAM,KAAK,OAAO,OAAO,KAAc;OACrC;OACA;OACA,SAAS;OACV,CAAC;MAEJ,MAAM,UAAU,MAAM,KAAK,IAAI,MAAM,WAAW,OAC9C,KACA;OACE;OACA,MAAM,KAAK;OACX,MAAM,KAAK;OACX,QAAQ,KAAK;OACd,CACF;AACD,UAAI,KAAK,OACP,OAAM,KAAK,IAAI,MAAM,WAAW,OAAO,IACrC,KACA,QAAQ,cACR,CAAC;OAAE,QAAQ,KAAK;OAAQ,WAAW;OAAM,CAAC,CAC3C;AAEH,aAAO;OACL,GAAG;OACH;OACA,cAAc;OACf;;KAEJ,CAAC;IACF,KAAK,aAAa;KAChB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,WAAW,IACrC,KACA,KAAK,aACN;;KAEJ,CAAC;IACF,YAAY,aAAa;KACvB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE;KAC7B,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,SAAS,KAAK,SACf,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,WAAW,WACrC,KACA,KAAK,QACN;;KAEJ,CAAC;IACF,aAAa,aAAa;KACxB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;KAC5B,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,QAAQ,KAAK,QACd,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,WAAW,YACrC,KACA,KAAK,OACN;;KAEJ,CAAC;IACF,MAAM,aAAa;KACjB,MAAM;MACJ,OAAO,EAAE,SAAS,mCAAmC;MACrD,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC7B,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;MACjD,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,MAAM,EAAE,EAAE,QAAQ,OAAO,CAAC,CAAC;MAChE;KACD,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,SAAS,KAAK,OAAO,SACtB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,WAAW,KACrC,KACA,KACD;;KAEJ,CAAC;IACF,QAAQ,gBAAgB;KACtB,MAAM;MACJ,cAAc,EAAE,QAAQ;MACxB,MAAM,EAAE,OAAO;OACb,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;OAC5B,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC;OAC5B,QAAQ,EAAE,SAAS,0BAA0B;OAC9C,CAAC;MACH;KACD,SAAS,OAAO,KAAK,SAAS;MAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,yBAAyB,EAC1D,cAAc,KAAK,cACpB,CAAC;AACF,UAAI,CAAC,MAAM,GAAI,QAAO;OAAE,IAAI;OAAgB,MAAM,MAAM;OAAM;AAC9D,YAAM,KAAK,IAAI,MAAM,WAAW,OAC9B,KACA,KAAK,cACL,KAAK,KACN;AACD,aAAO;OAAE,IAAI;OAAe,cAAc,KAAK;OAAc;;KAEhE,CAAC;IACF,QAAQ,gBAAgB;KACtB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;MAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,yBAAyB,EAC1D,cAAc,KAAK,cACpB,CAAC;AACF,UAAI,CAAC,MAAM,GAAI,QAAO;OAAE,IAAI;OAAgB,MAAM,MAAM;OAAM;AAC9D,aAAO,MAAM,KAAK,IAAI,MAAM,WAAW,OACrC,KACA,KAAK,aACN;;KAEJ,CAAC;IACF,QAAQ,aAAa;KACnB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,WAAW,OACrC,KACA,KAAK,aACN;;KAEJ,CAAC;IACF,QAAQ;KACN,MAAM,aAAa;MACjB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;MAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,WAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,cAAO,MAAM,KAAK,IAAI,MAAM,WAAW,OAAO,KAC5C,KACA,KAAK,aACN;;MAEJ,CAAC;KACF,UAAU,aAAa;MACrB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;MAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,WAAI,EAHU,MAAM,UAAU,KAAK,qBAAqB,EACtD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,cAAO,MAAM,KAAK,IAAI,MAAM,WAAW,OAAO,SAC5C,KACA,KAAK,aACN;;MAEJ,CAAC;KACF,KAAK,gBAAgB;MACnB,MAAM;OACJ,cAAc,EAAE,QAAQ;OACxB,SAAS,EAAE,MAAM,+BAA+B;OACjD;MACD,SAAS,OAAO,KAAK,SAAS;OAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,qBAAqB,EACtD,cAAc,KAAK,cACpB,CAAC;AACF,WAAI,CAAC,MAAM,GAAI,QAAO;QAAE,IAAI;QAAgB,MAAM,MAAM;QAAM;AAC9D,cAAO,MAAM,KAAK,IAAI,MAAM,WAAW,OAAO,IAC5C,KACA,KAAK,cACL,KAAK,QACN;;MAEJ,CAAC;KACF,cAAc;MACZ,SAAS,gBAAgB;OACvB,MAAM;OACN,SAAS,OAAO,KAAK,SAAS;QAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,qBAAqB,EACtD,cAAc,KAAK,cACpB,CAAC;AACF,YAAI,CAAC,MAAM,GAAI,QAAO;SAAE,IAAI;SAAgB,MAAM,MAAM;SAAM;AAC9D,eAAO,MAAM,KAAK,IAAI,MAAM,WAAW,OAAO,aAAa,QACzD,KACA,KACD;;OAEJ,CAAC;MACF,SAAS,cAAc;OACrB,MAAM;OACN,SAAS,OAAO,KAAK,SAAS;QAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,qBAAqB,EACtD,cAAc,KAAK,cACpB,CAAC;AACF,YAAI,CAAC,MAAM,GAAI,QAAO;SAAE,IAAI;SAAgB,MAAM,MAAM;SAAM;AAC9D,eAAO,MAAM,KAAK,IAAI,MAAM,WAAW,OAAO,aAAa,QACzD,KACA,KACD;;OAEJ,CAAC;MACH;KACF;IACF;GACD,MAAM;IACJ,WAAW,gBAAgB;KACzB,MAAM;MACJ,cAAc,EAAE,QAAQ;MACxB,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC9B,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;MACpC,UAAU,EAAE,QAAQ;MACpB,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;MACpC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;MACvC,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;MACjE,uBAAuB,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC7C,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC;MACrC,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;MAC1D;KACD,SAAS,OAAO,KAAK,SAAS;MAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC;AACF,UAAI,CAAC,MAAM,GAAI,QAAO;OAAE,IAAI;OAAgB,MAAM,MAAM;OAAM;AAC9D,aAAO,MAAM,KAAK,IAAI,MAAM,KAAK,UAAU,KAAc,KAAK;;KAEjE,CAAC;IACF,KAAK,aAAa;KAChB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,KAAK,IAC/B,KACA,KAAK,aACN;;KAEJ,CAAC;IACF,UAAU,cAAc;KACtB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;MAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC;AACF,UAAI,CAAC,MAAM,GAAI,QAAO;OAAE,IAAI;OAAgB,MAAM,MAAM;OAAM;AAC9D,aAAO,MAAM,KAAK,IAAI,MAAM,KAAK,SAC/B,KACA,KAAK,aACN;;KAEJ,CAAC;IACH;GACD,MAAM;IACJ,WAAW,cAAc;KACvB,MAAM;MACJ,cAAc,EAAE,QAAQ;MACxB,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC;MACnC,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAC;MACnC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;MACxC,mBAAmB,EAAE,SAAS,EAAE,SAAS,CAAC;MAC1C,kBAAkB,EAAE,SAClB,wCACD;MACD,IAAI,EAAE,SAAS,0BAA0B;MAC1C;KACD,SAAS,OAAO,KAAK,SAAS;MAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC;AACF,UAAI,CAAC,MAAM,GAAI,QAAO;OAAE,IAAI;OAAgB,MAAM,MAAM;OAAM;AAC9D,aAAO,MAAM,KAAK,IAAI,MAAM,KAAK,UAAU,KAAc,KAAK;;KAEjE,CAAC;IACF,UAAU,aAAa;KACrB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,KAAK,SAC/B,KACA,KAAK,aACN;;KAEJ,CAAC;IACH;GACD,QAAQ;IACN,KAAK,aAAa;KAChB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,uBAAuB,EACxD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,OAAO,IACjC,KACA,KAAK,aACN;;KAEJ,CAAC;IACF,QAAQ,gBAAgB;KACtB,MAAM;MACJ,cAAc,EAAE,QAAQ;MACxB,OAAO;MACR;KACD,SAAS,OAAO,KAAK,SAAS;MAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,qBAAqB,EACtD,cAAc,KAAK,cACpB,CAAC;AACF,UAAI,CAAC,MAAM,GAAI,QAAO;OAAE,IAAI;OAAgB,MAAM,MAAM;OAAM;AAC9D,aAAO,MAAM,KAAK,IAAI,MAAM,OAAO,OACjC,KACA,KAAK,cACL,KAAK,MACN;;KAEJ,CAAC;IACF,UAAU,aAAa;KACrB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;KAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,qBAAqB,EACtD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAM,KAAK,IAAI,MAAM,OAAO,SACjC,KACA,KAAK,aACN;;KAEJ,CAAC;IACH;GACD,OAAO,EACL,MAAM,aAAa;IACjB,MAAM;KACJ,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;KACpC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC/B,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC9B;IACD,SAAS,OAAO,KAAK,SAAS;AAK5B,SAAI,EAJU,MAAM,UAAU,KAAK,kBAAkB;MACnD,cAAc,KAAK;MACnB,SAAS,KAAK;MACf,CAAC,EACS,GAAI,QAAO;AACtB,YAAO,MAAM,KAAK,IAAI,MAAM,MAAM,KAAK,KAAc,KAAK;;IAE7D,CAAC,EACH;GACD,SAAS;IACP,UAAU,EACR,MAAM,aAAa;KACjB,MAAM;MACJ,cAAc,EAAE,QAAQ;MACxB,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;MAC9B;KACD,SAAS,OAAO,KAAK,SAAS;AAI5B,UAAI,EAHU,MAAM,UAAU,KAAK,sBAAsB,EACvD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,aAAO,MAAO,KAAK,IAAI,MAAM,QAAgB,SAAS,KACpD,KACA,KACD;;KAEJ,CAAC,EACH;IACD,UAAU;KACR,QAAQ,gBAAgB;MACtB,MAAM;OACJ,cAAc,EAAE,QAAQ;OACxB,KAAK,EAAE,QAAQ;OACf,QAAQ,EAAE,QAAQ;OAClB,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC;OAClC,iBAAiB,EAAE,SAAS,EAAE,QAAQ,CAAC;OACxC;MACD,SAAS,OAAO,KAAK,SAAS;OAC5B,MAAM,aAAa,MAAM,UAAU,KAAK,sBAAsB,EAC5D,cAAc,KAAK,cACpB,CAAC;AACF,WAAI,CAAC,WAAW,GACd,QAAO;QAAE,IAAI;QAAgB,MAAM,WAAW;QAAM;OACtD,MAAM,EAAE,WAAW;AAQnB,cAAO;QACL,MARa,MAAM,KAAK,IAAI,MAAM,QAAQ,SAAS,OACnD,KACA;SACE,GAAG;SACH,iBAAiB,KAAK,mBAAmB;SAC1C,CACF,EAEa;QACZ,cAAc,KAAK;QACnB,KAAK,KAAK;QACV,eAAe,KAAK;QACpB,iBAAiB,KAAK,mBAAmB;QACzC,QAAQ;QACR,cAAc;QACf;;MAEJ,CAAC;KACF,MAAM,aAAa;MACjB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;MAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,WAAI,EAHU,MAAM,UAAU,KAAK,sBAAsB,EACvD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AAKtB,eAJkB,MAAM,KAAK,IAAI,MAAM,QAAQ,SAAS,KACtD,KACA,KAAK,aACN,EACgB,KAAK,aAAsC;QAC1D,MAAM,EAAE,YAAY,aAAa,GAAG,SAAS;AAC7C,eAAO;SACP;;MAEL,CAAC;KACF,SAAS,gBAAgB;MACvB,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;MAChC,SAAS,OAAO,KAAK,SAAS;OAC5B,MAAM,WAAW,MAAM,KAAK,IAAI,MAAM,QAAQ,SAAS,IACrD,KACA,KAAK,WACN;AACD,WAAI,CAAC,SACH,QAAO;QACL,IAAI;QACJ,MAAM;QACP;OAEH,MAAM,QAAQ,MAAM,UAAU,KAAK,sBAAsB;QACvD,cAAc,SAAS;QACvB,SAAS,SAAS;QACnB,CAAC;AACF,WAAI,CAAC,MAAM,GAAI,QAAO;QAAE,IAAI;QAAgB,MAAM,MAAM;QAAM;AAC9D,cAAO,MAAM,KAAK,IAAI,MAAM,QAAQ,SAAS,QAC3C,KACA,KAAK,WACN;;MAEJ,CAAC;KACH;IACF;GACF;EACD,QAAQ;GACN,QAAQ,aAAa;IACnB,MAAM;KACJ,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;KACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC7B,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC9B,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;KACnC;IACD,SAAS,OAAO,KAAK,SAAS;AAC5B,YAAO,MAAM,KAAK,IAAI,OAAO,OAAO,KAAc,KAAK;;IAE1D,CAAC;GACF,UAAU,aAAa;IACrB,MAAM;KACJ,cAAc,EAAE,QAAQ;KACxB,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;KAChC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC9B,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC/B;IACD,SAAS,OAAO,KAAK,SAAS;AAC5B,YAAO,MAAM,KAAK,IAAI,OAAO,SAAS,KAAc,KAAK;;IAE5D,CAAC;GACH;EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCH,SAAgB,KAGd,MACA,SACA;CACA,MAAM,YAAY,6BAA6B,MAAM,QAAQ;AAE7D,QAAO,EACL,OAAO;EACL,WAAW,gBAAgB;GACzB,MAAM;IACJ,cAAc,EAAE,QAAQ;IACxB,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;IAChC,QAAQ,EAAE,SAAS,0BAA0B;IAC9C;GACD,SAAS,OAAO,KAAK,SAAS;IAC5B,MAAM,QAAQ,MAAM,UAAU,KAAK,eAAe,EAChD,cAAc,KAAK,cACpB,CAAC;AACF,QAAI,CAAC,MAAM,GAAI,QAAO;KAAE,IAAI;KAAgB,MAAM,MAAM;KAAM;AAC9D,WAAO,MAAM,KAAK,KAAK,MAAM,UAAU,KAAc,KAAK;;GAE7D,CAAC;EACF,KAAK,aAAa;GAChB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;GAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,QAAI,EAHU,MAAM,UAAU,KAAK,eAAe,EAChD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,WAAO,MAAM,KAAK,KAAK,MAAM,IAAI,KAAc,KAAK,aAAa;;GAEpE,CAAC;EACF,UAAU,aAAa;GACrB,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE;GAClC,SAAS,OAAO,KAAK,SAAS;AAI5B,QAAI,EAHU,MAAM,UAAU,KAAK,eAAe,EAChD,cAAc,KAAK,cACpB,CAAC,EACS,GAAI,QAAO;AACtB,WAAO,MAAM,KAAK,KAAK,MAAM,SAC3B,KACA,KAAK,aACN;;GAEJ,CAAC;EACH,EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCH,SAAgB,WAGd,MAIA,SACA;CACA,MAAM,aAAa,IAAI,MAAM,EAC3B,OAAO,QAAQ,OAChB,CAAC;CACF,MAAM,cAAc,KAAK,MAAM,EAC7B,OAAO,EAAE,YAAY,QAAQ,MAAM,YAAY,EAChD,CAAC;AAEF,QAAO;EACL,kBAAkB,WAAW,MAAM,WAAW;EAC9C,eAAe,WAAW,MAAM,WAAW;EAC3C,sBAAsB,WAAW,MAAM,WAAW;EAClD,uBAAuB,WAAW,MAAM,WAAW;EACnD,iBAAiB,WAAW,MAAM,WAAW;EAC7C,kBAAkB,WAAW,MAAM,WAAW;EAC9C,kBAAkB,WAAW,MAAM,WAAW;EAC9C,qBAAqB,WAAW,MAAM,WAAW;EACjD,aAAa,WAAW,MAAM,WAAW,OAAO;EAChD,iBAAiB,WAAW,MAAM,WAAW,OAAO;EACpD,YAAY,WAAW,MAAM,WAAW,OAAO;EAC/C,2BACE,WAAW,MAAM,WAAW,OAAO,aAAa;EAClD,2BACE,WAAW,MAAM,WAAW,OAAO,aAAa;EAClD,eAAe,WAAW,MAAM,KAAK;EACrC,SAAS,WAAW,MAAM,KAAK;EAC/B,cAAc,WAAW,MAAM,KAAK;EACpC,eAAe,WAAW,MAAM,KAAK;EACrC,cAAc,WAAW,MAAM,KAAK;EACpC,WAAW,WAAW,MAAM,OAAO;EACnC,cAAc,WAAW,MAAM,OAAO;EACtC,gBAAgB,WAAW,MAAM,OAAO;EACxC,WAAW,WAAW,MAAM,MAAM;EAClC,uBAAuB,WAAW,MAAM,QAAQ,SAAS;EACzD,sBAAsB,WAAW,MAAM,QAAQ,SAAS;EACxD,uBAAuB,WAAW,MAAM,QAAQ,SAAS;EACzD,wBAAwB,WAAW,MAAM,QAAQ,SAAS;EAC1D,eAAe,YAAY,MAAM;EACjC,SAAS,YAAY,MAAM;EAC3B,cAAc,YAAY,MAAM;EAChC,QAAQ,WAAW,OAAO;EAC1B,UAAU,WAAW,OAAO;EAC7B"}
|
|
1
|
+
{"version":3,"file":"mounts.js","names":[],"sources":["../../src/server/mounts.ts"],"sourcesContent":["import { Cv } from \"@robelest/fx/convex\";\nimport { actionGeneric, mutationGeneric, queryGeneric } from \"convex/server\";\nimport { ConvexError, v } from \"convex/values\";\n\nimport type { AuthApi } from \"./auth\";\nimport {\n enterpriseConnectionWhereValidator,\n enterpriseDomainInputValidator,\n enterpriseDomainVerificationInputValidator,\n enterprisePolicyPatchValidator,\n enterpriseSamlAttributeMappingValidator,\n enterpriseSamlSpValidator,\n enterpriseStatusValidator,\n} from \"./enterprise/validators\";\nimport type { AuthAuthorizationConfig, AuthRoleId } from \"./types\";\n\n/**\n * Permission identifiers used by mounted enterprise admin APIs.\n *\n * These permission strings are passed to your {@link EnterpriseAuthorizer}\n * callback so app code can decide whether the current user may perform a\n * specific SSO or SCIM management operation.\n *\n * @example\n * ```ts\n * const authorized: EnterpriseAuthorizer = async (ctx, input) => {\n * if (input.permission === \"sso.connection.create\") {\n * // Only org admins may create SSO connections\n * }\n * };\n * ```\n */\nexport type EnterpriseAdminPermission =\n | \"sso.connection.create\"\n | \"sso.connection.read\"\n | \"sso.connection.manage\"\n | \"sso.domain.manage\"\n | \"sso.protocol.manage\"\n | \"sso.policy.manage\"\n | \"sso.audit.read\"\n | \"sso.webhook.manage\"\n | \"scim.manage\";\n\n/**\n * Input passed to an {@link EnterpriseAuthorizer}.\n *\n * Contains the acting user, the requested permission, and the resolved\n * enterprise/group scope for the operation being authorized.\n */\nexport type EnterpriseAdminAuthorizationInput = {\n /** The signed-in user's ID performing the admin action. */\n userId: string;\n /** The {@link EnterpriseAdminPermission} being requested. */\n permission: EnterpriseAdminPermission;\n /** Enterprise document ID, if the operation targets a specific enterprise. */\n enterpriseId?: string;\n /** Group document ID, if explicitly provided by the caller. */\n groupId?: string;\n /** Resolved group ID from the enterprise record, or `null` when no enterprise context. */\n resolvedGroupId: string | null;\n};\n\n/**\n * App-defined authorization hook for mounted enterprise admin APIs.\n *\n * Return `void` (or resolve) to allow the operation, or throw to deny it.\n *\n * @param ctx - Convex context with `ctx.auth` for identity checks.\n * @param input - The {@link EnterpriseAdminAuthorizationInput} describing who is doing what.\n * @returns `void` to allow; throw to deny.\n *\n * @example\n * ```ts\n * import { EnterpriseAuthorizer } from \"@robelest/convex-auth/server\";\n *\n * const authorized: EnterpriseAuthorizer = async (ctx, input) => {\n * const identity = await ctx.auth.getUserIdentity();\n * if (!identity) throw new Error(\"Forbidden\");\n * // Allow all admin ops for the org owner\n * };\n * ```\n */\nexport type EnterpriseAuthorizer = (\n ctx: { auth: import(\"convex/server\").Auth },\n input: EnterpriseAdminAuthorizationInput,\n) => Promise<void>;\n\ntype RoleRef<TRoleId extends string> = { id: TRoleId };\n\ntype MountedEnterpriseOptions<TRoleId extends string = string> = {\n admin?: {\n authorized?: EnterpriseAuthorizer;\n roles?: Array<TRoleId | RoleRef<TRoleId>>;\n };\n};\n\n/**\n * Configuration for {@link enterprise}, {@link sso}, and {@link scim}\n * mounted admin APIs.\n *\n * @typeParam TRoleId - Role IDs that may be assigned to enterprise creators.\n *\n * @example\n * ```ts\n * import { enterprise, EnterpriseMountOptions } from \"@robelest/convex-auth/server\";\n *\n * const options: EnterpriseMountOptions = {\n * admin: {\n * authorized: async (ctx, input) => {\n * // Verify the user has permission for `input.permission`\n * },\n * roles: [\"admin\", \"owner\"],\n * },\n * };\n * ```\n */\nexport type EnterpriseMountOptions<TRoleId extends string = string> = {\n admin: {\n authorized: EnterpriseAuthorizer;\n roles?: Array<TRoleId | RoleRef<TRoleId>>;\n };\n};\n\ntype MountedEnterpriseTarget = {\n enterpriseId?: string;\n groupId?: string;\n domain?: string;\n};\n\nfunction requireSignedInUser(auth: Pick<AuthApi, \"user\">) {\n return async (ctx: {\n auth: import(\"convex/server\").Auth;\n }): Promise<string | null> => {\n return await auth.user.id(ctx as never);\n };\n}\n\nfunction normalizeCreatorRoleIds<TRoleId extends string>(\n roles?: Array<TRoleId | RoleRef<TRoleId>>,\n) {\n return roles?.map((role) => (typeof role === \"string\" ? role : role.id));\n}\n\nasync function resolveMountedEnterpriseTarget(\n auth: Pick<AuthApi, \"sso\">,\n ctx: { auth: import(\"convex/server\").Auth },\n target: MountedEnterpriseTarget,\n) {\n if (target.groupId !== undefined) {\n return {\n enterpriseId: target.enterpriseId,\n groupId: target.groupId,\n resolvedGroupId: target.groupId,\n };\n }\n\n if (target.enterpriseId !== undefined) {\n const enterprise = await auth.sso.admin.connection.get(\n ctx as never,\n target.enterpriseId,\n );\n if (enterprise === null) {\n throw new ConvexError({\n code: \"INVALID_PARAMETERS\",\n message: \"Enterprise not found.\",\n });\n }\n return {\n enterpriseId: enterprise._id,\n groupId: enterprise.groupId,\n resolvedGroupId: enterprise.groupId,\n };\n }\n\n if (target.domain !== undefined) {\n const resolved = await auth.sso.admin.connection.getByDomain(\n ctx as never,\n target.domain,\n );\n if (resolved?.enterprise === undefined) {\n throw new ConvexError({\n code: \"INVALID_PARAMETERS\",\n message: \"Enterprise not found.\",\n });\n }\n return {\n enterpriseId: resolved.enterprise._id,\n groupId: resolved.enterprise.groupId,\n resolvedGroupId: resolved.enterprise.groupId,\n };\n }\n\n return {\n enterpriseId: undefined,\n groupId: undefined,\n resolvedGroupId: null,\n };\n}\n\nfunction createMountedAdminAuthorizer(\n auth: Pick<AuthApi, \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions,\n) {\n const requireUserId = requireSignedInUser(auth);\n\n return async (\n ctx: { auth: import(\"convex/server\").Auth },\n permission: EnterpriseAdminPermission,\n target: MountedEnterpriseTarget = {},\n ) => {\n const userId = await requireUserId(ctx);\n if (userId === null) {\n throw Cv.error({\n code: \"NOT_SIGNED_IN\",\n message: \"You must be signed in to perform this action.\",\n });\n }\n if (!options?.admin?.authorized) {\n throw Cv.error({\n code: \"FORBIDDEN\",\n message: \"Access denied.\",\n });\n }\n const resolved = await resolveMountedEnterpriseTarget(auth, ctx, target);\n await options.admin.authorized(ctx, {\n userId,\n permission,\n enterpriseId: resolved.enterpriseId,\n groupId: resolved.groupId,\n resolvedGroupId: resolved.resolvedGroupId,\n });\n return { userId, ...resolved };\n };\n}\n\n/**\n * Build optional public SSO management actions that apps can mount under\n * `convex/auth/sso/**` when they want client-callable enterprise APIs.\n *\n * `admin` is for tenant-admin control-plane operations and should be mounted\n * with an explicit authorization policy. `client` is for end-user sign-in\n * helpers and does not require tenant-admin authorization.\n *\n * @param auth - Auth API subset providing `group`, `member`, `sso`, and `user` namespaces.\n * @param options - Optional admin authorization config. See {@link EnterpriseMountOptions}.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns An object with `admin` (connection CRUD, OIDC/SAML protocol config, policy,\n * audit, webhooks, domain management) and `client` (signIn, metadata) namespaces.\n *\n * @example\n * ```ts\n * // convex/auth/sso.ts\n * import { sso } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const mounted = sso(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * },\n * });\n *\n * export const createConnection = mounted.admin.connection.create;\n * export const signIn = mounted.client.signIn;\n * ```\n *\n * @see {@link scim}\n * @see {@link enterprise}\n */\nexport function sso<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<AuthApi<TAuthorization>, \"group\" | \"member\" | \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions<AuthRoleId<TAuthorization>>,\n) {\n const authorize = createMountedAdminAuthorizer(auth, options);\n const adminRoleIds = normalizeCreatorRoleIds(options?.admin?.roles);\n\n return {\n admin: {\n connection: {\n create: mutationGeneric({\n args: {\n groupId: v.optional(v.string()),\n name: v.optional(v.string()),\n slug: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n domain: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const authResult = await authorize(ctx, \"sso.connection.create\", {\n groupId: args.groupId,\n });\n const { userId } = authResult;\n const createsGroup = args.groupId === undefined;\n const groupId =\n args.groupId ??\n (\n await auth.group.create(ctx as never, {\n name: args.name?.trim() || args.slug?.trim() || \"Enterprise\",\n slug: args.slug,\n type: \"enterprise\",\n })\n ).groupId;\n if (createsGroup) {\n await auth.member.create(ctx as never, {\n groupId,\n userId,\n roleIds: adminRoleIds,\n });\n }\n const created = await auth.sso.admin.connection.create(\n ctx as never,\n {\n groupId,\n name: args.name,\n slug: args.slug,\n status: args.status,\n },\n );\n if (args.domain) {\n await auth.sso.admin.connection.domain.set(\n ctx as never,\n created.enterpriseId,\n [{ domain: args.domain, isPrimary: true }],\n );\n }\n return {\n ...created,\n groupId,\n createdGroup: createsGroup,\n };\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n getByGroup: queryGeneric({\n args: { groupId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n groupId: args.groupId,\n });\n return await auth.sso.admin.connection.getByGroup(\n ctx as never,\n args.groupId,\n );\n },\n }),\n getByDomain: queryGeneric({\n args: { domain: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n domain: args.domain,\n });\n return await auth.sso.admin.connection.getByDomain(\n ctx as never,\n args.domain,\n );\n },\n }),\n list: queryGeneric({\n args: {\n where: v.optional(enterpriseConnectionWhereValidator),\n limit: v.optional(v.number()),\n cursor: v.optional(v.union(v.string(), v.null())),\n orderBy: v.optional(v.string()),\n order: v.optional(v.union(v.literal(\"asc\"), v.literal(\"desc\"))),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n groupId: args.where?.groupId,\n });\n return await auth.sso.admin.connection.list(\n ctx as never,\n args as never,\n );\n },\n }),\n update: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n data: v.object({\n name: v.optional(v.string()),\n slug: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n }),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.manage\", {\n enterpriseId: args.enterpriseId,\n });\n await auth.sso.admin.connection.update(\n ctx as never,\n args.enterpriseId,\n args.data,\n );\n return { enterpriseId: args.enterpriseId };\n },\n }),\n delete: mutationGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.delete(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n status: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.status(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n domain: {\n list: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.domain.list(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.domain.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n set: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n domains: v.array(enterpriseDomainInputValidator),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.domain.set(\n ctx as never,\n args.enterpriseId,\n args.domains,\n );\n },\n }),\n verification: {\n request: mutationGeneric({\n args: enterpriseDomainVerificationInputValidator,\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.domain.verification.request(\n ctx as never,\n args,\n );\n },\n }),\n confirm: actionGeneric({\n args: enterpriseDomainVerificationInputValidator,\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.connection.domain.verification.confirm(\n ctx as never,\n args,\n );\n },\n }),\n },\n },\n },\n oidc: {\n configure: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n issuer: v.optional(v.string()),\n discoveryUrl: v.optional(v.string()),\n clientId: v.string(),\n clientSecret: v.optional(v.string()),\n scopes: v.optional(v.array(v.string())),\n authorizationParams: v.optional(v.record(v.string(), v.string())),\n clockToleranceSeconds: v.optional(v.number()),\n strictIssuer: v.optional(v.boolean()),\n extraFields: v.optional(v.record(v.string(), v.string())),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.oidc.configure(ctx as never, args);\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.oidc.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n validate: actionGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.oidc.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n saml: {\n configure: actionGeneric({\n args: {\n enterpriseId: v.string(),\n metadataXml: v.optional(v.string()),\n metadataUrl: v.optional(v.string()),\n domains: v.optional(v.array(v.string())),\n signAuthnRequests: v.optional(v.boolean()),\n attributeMapping: v.optional(\n enterpriseSamlAttributeMappingValidator,\n ),\n sp: v.optional(enterpriseSamlSpValidator),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.saml.configure(ctx as never, args);\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.saml.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n policy: {\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.policy.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n update: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n patch: enterprisePolicyPatchValidator,\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.policy.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.policy.update(\n ctx as never,\n args.enterpriseId,\n args.patch,\n );\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.policy.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.sso.admin.policy.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n audit: {\n list: queryGeneric({\n args: {\n enterpriseId: v.optional(v.string()),\n groupId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.audit.read\", {\n enterpriseId: args.enterpriseId,\n groupId: args.groupId,\n });\n return await auth.sso.admin.audit.list(ctx as never, args);\n },\n }),\n },\n webhook: {\n delivery: {\n list: queryGeneric({\n args: {\n enterpriseId: v.string(),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await (auth.sso.admin.webhook as any).delivery.list(\n ctx as never,\n args,\n );\n },\n }),\n },\n endpoint: {\n create: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n url: v.string(),\n secret: v.string(),\n subscriptions: v.array(v.string()),\n createdByUserId: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const authResult = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n const { userId } = authResult;\n const result = await auth.sso.admin.webhook.endpoint.create(\n ctx as never,\n {\n ...args,\n createdByUserId: args.createdByUserId ?? userId,\n },\n );\n return {\n _id: result.endpointId,\n enterpriseId: args.enterpriseId,\n url: args.url,\n subscriptions: args.subscriptions,\n createdByUserId: args.createdByUserId ?? userId,\n status: \"active\",\n failureCount: 0,\n };\n },\n }),\n list: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n const endpoints = await auth.sso.admin.webhook.endpoint.list(\n ctx as never,\n args.enterpriseId,\n );\n return endpoints.map((endpoint: Record<string, unknown>) => {\n const { secretHash: _secretHash, ...rest } = endpoint;\n return rest;\n });\n },\n }),\n disable: mutationGeneric({\n args: { endpointId: v.string() },\n handler: async (ctx, args) => {\n const endpoint = await auth.sso.admin.webhook.endpoint.get(\n ctx as never,\n args.endpointId,\n );\n if (!endpoint) {\n throw Cv.error({\n code: \"INVALID_PARAMETERS\",\n message: \"Webhook endpoint not found.\",\n });\n }\n await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: endpoint.enterpriseId,\n groupId: endpoint.groupId,\n });\n return await auth.sso.admin.webhook.endpoint.disable(\n ctx as never,\n args.endpointId,\n );\n },\n }),\n },\n },\n },\n client: {\n signIn: queryGeneric({\n args: {\n enterpriseId: v.optional(v.string()),\n email: v.optional(v.string()),\n domain: v.optional(v.string()),\n redirectTo: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n return await auth.sso.client.signIn(ctx as never, args);\n },\n }),\n metadata: queryGeneric({\n args: {\n enterpriseId: v.string(),\n entityId: v.optional(v.string()),\n acsUrl: v.optional(v.string()),\n sloUrl: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n return await auth.sso.client.metadata(ctx as never, args);\n },\n }),\n },\n };\n}\n\n/**\n * Build optional public SCIM management actions that apps can mount under\n * `convex/auth/scim/**` when they want client-callable enterprise admin APIs.\n *\n * @param auth - Auth API subset providing `scim`, `sso`, and `user` namespaces.\n * @param options - Optional admin authorization config. See {@link EnterpriseMountOptions}.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns An object with `admin.configure`, `admin.get`, and `admin.validate` actions.\n *\n * @example\n * ```ts\n * // convex/auth/scim.ts\n * import { scim } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const mounted = scim(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * },\n * });\n *\n * export const configure = mounted.admin.configure;\n * export const get = mounted.admin.get;\n * export const validate = mounted.admin.validate;\n * ```\n *\n * @see {@link sso}\n * @see {@link enterprise}\n */\nexport function scim<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<AuthApi<TAuthorization>, \"scim\" | \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions<AuthRoleId<TAuthorization>>,\n) {\n const authorize = createMountedAdminAuthorizer(auth, options);\n\n return {\n admin: {\n configure: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n basePath: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n },\n handler: async (ctx, args) => {\n await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.scim.admin.configure(ctx as never, args);\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.scim.admin.get(ctx as never, args.enterpriseId);\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n return await auth.scim.admin.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n };\n}\n\n/**\n * Build a flat mounted enterprise API surface for app-owned Convex exports.\n *\n * Combines {@link sso} and {@link scim} into a single flat object with\n * all SSO connection, protocol, policy, audit, webhook, and SCIM\n * management functions plus end-user sign-in helpers. The `authorized`\n * callback is required for all admin operations.\n *\n * @param auth - Auth API subset providing `group`, `member`, `scim`, `sso`, and `user` namespaces.\n * @param options - Required {@link EnterpriseMountOptions} with an `admin.authorized` callback.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns A flat object with all enterprise management functions (e.g. `createConnection`,\n * `configureOidc`, `configureScim`, `signIn`, etc.).\n *\n * @example\n * ```ts\n * // convex/auth/enterprise.ts\n * import { enterprise } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const api = enterprise(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * roles: [\"admin\"],\n * },\n * });\n *\n * export const createConnection = api.createConnection;\n * export const configureOidc = api.configureOidc;\n * export const signIn = api.signIn;\n * ```\n *\n * @see {@link sso}\n * @see {@link scim}\n */\nexport function enterprise<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<\n AuthApi<TAuthorization>,\n \"group\" | \"member\" | \"scim\" | \"sso\" | \"user\"\n >,\n options: EnterpriseMountOptions<AuthRoleId<TAuthorization>>,\n) {\n const mountedSso = sso(auth, {\n admin: options.admin,\n });\n const mountedScim = scim(auth, {\n admin: { authorized: options.admin.authorized },\n });\n\n return {\n createConnection: mountedSso.admin.connection.create,\n getConnection: mountedSso.admin.connection.get,\n getConnectionByGroup: mountedSso.admin.connection.getByGroup,\n getConnectionByDomain: mountedSso.admin.connection.getByDomain,\n listConnections: mountedSso.admin.connection.list,\n updateConnection: mountedSso.admin.connection.update,\n deleteConnection: mountedSso.admin.connection.delete,\n getConnectionStatus: mountedSso.admin.connection.status,\n listDomains: mountedSso.admin.connection.domain.list,\n validateDomains: mountedSso.admin.connection.domain.validate,\n setDomains: mountedSso.admin.connection.domain.set,\n requestDomainVerification:\n mountedSso.admin.connection.domain.verification.request,\n confirmDomainVerification:\n mountedSso.admin.connection.domain.verification.confirm,\n configureOidc: mountedSso.admin.oidc.configure,\n getOidc: mountedSso.admin.oidc.get,\n validateOidc: mountedSso.admin.oidc.validate,\n configureSaml: mountedSso.admin.saml.configure,\n validateSaml: mountedSso.admin.saml.validate,\n getPolicy: mountedSso.admin.policy.get,\n updatePolicy: mountedSso.admin.policy.update,\n validatePolicy: mountedSso.admin.policy.validate,\n listAudit: mountedSso.admin.audit.list,\n createWebhookEndpoint: mountedSso.admin.webhook.endpoint.create,\n listWebhookEndpoints: mountedSso.admin.webhook.endpoint.list,\n listWebhookDeliveries: mountedSso.admin.webhook.delivery.list,\n disableWebhookEndpoint: mountedSso.admin.webhook.endpoint.disable,\n configureScim: mountedScim.admin.configure,\n getScim: mountedScim.admin.get,\n validateScim: mountedScim.admin.validate,\n signIn: mountedSso.client.signIn,\n metadata: mountedSso.client.metadata,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
import { MutationCtx } from "../types.js";
|
|
2
|
-
import { AuthError } from "../authError.js";
|
|
3
2
|
import { Config, GetProviderOrThrowFunc } from "../crypto.js";
|
|
4
3
|
import { Fx } from "@robelest/fx";
|
|
5
4
|
import { GenericActionCtx, GenericDataModel } from "convex/server";
|
|
6
|
-
import * as
|
|
7
|
-
import { Infer } from "convex/values";
|
|
5
|
+
import * as convex_values92 from "convex/values";
|
|
6
|
+
import { ConvexError, Infer } from "convex/values";
|
|
8
7
|
|
|
9
8
|
//#region src/server/mutations/account.d.ts
|
|
10
|
-
declare const modifyAccountArgs:
|
|
9
|
+
declare const modifyAccountArgs: convex_values92.VObject<{
|
|
11
10
|
provider: string;
|
|
12
11
|
account: {
|
|
13
12
|
id: string;
|
|
14
13
|
secret: string;
|
|
15
14
|
};
|
|
16
15
|
}, {
|
|
17
|
-
provider:
|
|
18
|
-
account:
|
|
16
|
+
provider: convex_values92.VString<string, "required">;
|
|
17
|
+
account: convex_values92.VObject<{
|
|
19
18
|
id: string;
|
|
20
19
|
secret: string;
|
|
21
20
|
}, {
|
|
22
|
-
id:
|
|
23
|
-
secret:
|
|
21
|
+
id: convex_values92.VString<string, "required">;
|
|
22
|
+
secret: convex_values92.VString<string, "required">;
|
|
24
23
|
}, "required", "id" | "secret">;
|
|
25
24
|
}, "required", "provider" | "account" | "account.id" | "account.secret">;
|
|
26
|
-
declare function modifyAccountImpl(ctx: MutationCtx, args: Infer<typeof modifyAccountArgs>, getProviderOrThrow: GetProviderOrThrowFunc, config: Config): Fx<void,
|
|
25
|
+
declare function modifyAccountImpl(ctx: MutationCtx, args: Infer<typeof modifyAccountArgs>, getProviderOrThrow: GetProviderOrThrowFunc, config: Config): Fx<void, ConvexError<any>>;
|
|
27
26
|
declare const callModifyAccount: <DataModel extends GenericDataModel>(ctx: GenericActionCtx<DataModel>, args: Infer<typeof modifyAccountArgs>) => Promise<void>;
|
|
28
27
|
//#endregion
|
|
29
28
|
export { callModifyAccount, modifyAccountArgs, modifyAccountImpl };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","names":[],"sources":["../../../src/server/mutations/account.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"account.d.ts","names":[],"sources":["../../../src/server/mutations/account.ts"],"mappings":";;;;;;;;cAYa,iBAAA,kBAAiB,OAAA;;;;;;;YAG5B,eAAA,CAAA,OAAA;;;;;;;;;iBAEc,iBAAA,CACd,GAAA,EAAK,WAAA,EACL,IAAA,EAAM,KAAA,QAAa,iBAAA,GACnB,kBAAA,EAAoB,sBAAA,EACpB,MAAA,EAAQ,MAAA,GACP,EAAA,OAAS,WAAA;AAAA,cA6BC,iBAAA,qBAA6C,gBAAA,EACxD,GAAA,EAAK,gBAAA,CAAiB,SAAA,GACtB,IAAA,EAAM,KAAA,QAAa,iBAAA,MAClB,OAAA"}
|