@robelest/convex-auth 0.0.4-preview.25 → 0.0.4-preview.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -36
- package/dist/bin.js +5765 -4880
- package/dist/browser/index.d.ts +30 -0
- package/dist/browser/index.js +93 -0
- package/dist/browser/locks.js +11 -0
- package/dist/browser/navigation.js +14 -0
- package/dist/{factors → browser}/passkey.js +23 -32
- package/dist/browser/runtime.js +92 -0
- package/dist/client/core/types.d.ts +452 -5
- package/dist/client/core/types.js +17 -0
- package/dist/client/errors.js +19 -0
- package/dist/client/factors/device.js +94 -0
- package/dist/{factors → client/factors}/totp.js +12 -4
- package/dist/client/index.d.ts +47 -1
- package/dist/client/index.js +269 -232
- package/dist/client/runtime/mutex.js +24 -0
- package/dist/client/runtime/proxy.js +30 -0
- package/dist/client/runtime/storage.js +45 -0
- package/dist/client/services/adapters.js +7 -0
- package/dist/client/services/http.js +6 -0
- package/dist/client/services/resolve.js +13 -0
- package/dist/client/services/runtime.js +6 -0
- package/dist/component/_generated/component.d.ts +1355 -1399
- package/dist/component/convex.config.d.ts +2 -2
- package/dist/component/index.d.ts +4 -26
- package/dist/component/index.js +1 -1
- package/dist/component/model.d.ts +26 -112
- package/dist/component/model.js +76 -54
- package/dist/component/modules.js +38 -0
- package/dist/component/public/factors/devices.js +1 -1
- package/dist/component/public/factors/passkeys.js +1 -1
- package/dist/component/public/factors/totp.js +1 -1
- package/dist/component/public/groups/core.js +2 -2
- package/dist/component/public/groups/invites.js +1 -1
- package/dist/component/public/groups/members.js +1 -1
- package/dist/component/public/identity/accounts.js +1 -1
- package/dist/component/public/identity/codes.js +1 -1
- package/dist/component/public/identity/sessions.js +39 -2
- package/dist/component/public/identity/tokens.js +82 -4
- package/dist/component/public/identity/users.js +1 -1
- package/dist/component/public/identity/verifiers.js +10 -4
- package/dist/component/public/security/keys.js +1 -1
- package/dist/component/public/security/limits.js +1 -1
- package/dist/component/public/{enterprise → sso}/audit.js +26 -26
- package/dist/component/public/sso/core.js +263 -0
- package/dist/component/public/sso/domains.js +280 -0
- package/dist/component/public/{enterprise → sso}/scim.js +87 -87
- package/dist/component/public/sso/secrets.js +125 -0
- package/dist/component/public/{enterprise → sso}/webhooks.js +59 -59
- package/dist/component/public.js +9 -9
- package/dist/component/schema.d.ts +472 -393
- package/dist/component/schema.js +36 -35
- package/dist/core/index.d.ts +380 -0
- package/dist/core/index.js +83 -0
- package/dist/otel.d.ts +69 -0
- package/dist/otel.js +82 -0
- package/dist/providers/anonymous.d.ts +15 -34
- package/dist/providers/anonymous.js +27 -35
- package/dist/providers/apple.d.ts +59 -0
- package/dist/providers/apple.js +58 -0
- package/dist/providers/credentials.d.ts +18 -34
- package/dist/providers/credentials.js +16 -27
- package/dist/providers/custom.d.ts +94 -0
- package/dist/providers/custom.js +119 -0
- package/dist/providers/device.d.ts +15 -49
- package/dist/providers/device.js +17 -34
- package/dist/providers/email.d.ts +21 -38
- package/dist/providers/email.js +36 -55
- package/dist/providers/github.d.ts +54 -0
- package/dist/providers/github.js +75 -0
- package/dist/providers/google.d.ts +54 -0
- package/dist/providers/google.js +61 -0
- package/dist/providers/index.d.ts +16 -12
- package/dist/providers/index.js +15 -11
- package/dist/providers/microsoft.d.ts +57 -0
- package/dist/providers/microsoft.js +101 -0
- package/dist/providers/passkey.d.ts +19 -35
- package/dist/providers/passkey.js +20 -30
- package/dist/providers/password.d.ts +17 -18
- package/dist/providers/password.js +121 -143
- package/dist/providers/phone.d.ts +13 -28
- package/dist/providers/phone.js +21 -46
- package/dist/providers/sso.d.ts +16 -36
- package/dist/providers/sso.js +21 -22
- package/dist/providers/totp.d.ts +13 -29
- package/dist/providers/totp.js +17 -27
- package/dist/server/auth-context.d.ts +204 -0
- package/dist/server/auth-context.js +76 -0
- package/dist/server/auth.d.ts +99 -244
- package/dist/server/auth.js +56 -152
- package/dist/server/componentContext.d.ts +12 -0
- package/dist/server/componentContext.js +1 -0
- package/dist/server/config.js +6 -67
- package/dist/server/constants.js +6 -0
- package/dist/server/contract.d.ts +105 -0
- package/dist/server/contract.js +43 -0
- package/dist/server/cookies.js +3 -2
- package/dist/server/core.js +31 -36
- package/dist/server/crypto.js +34 -44
- package/dist/server/db.js +6 -1
- package/dist/server/device.js +96 -130
- package/dist/server/env.js +48 -0
- package/dist/server/errors.js +20 -0
- package/dist/server/http.d.ts +15 -59
- package/dist/server/http.js +136 -120
- package/dist/server/identity.js +2 -2
- package/dist/server/index.d.ts +5 -4
- package/dist/server/index.js +3 -3
- package/dist/server/keys.js +10 -1
- package/dist/server/limits.js +26 -26
- package/dist/server/log.js +28 -0
- package/dist/server/mounts.d.ts +1107 -296
- package/dist/server/mounts.js +315 -196
- package/dist/server/mutations/account.js +11 -14
- package/dist/server/mutations/code.js +6 -5
- package/dist/server/mutations/invalidate.js +9 -11
- package/dist/server/mutations/oauth.js +112 -73
- package/dist/server/mutations/refresh.js +47 -97
- package/dist/server/mutations/register.js +37 -35
- package/dist/server/mutations/retrieve.js +16 -16
- package/dist/server/mutations/signature.js +15 -18
- package/dist/server/mutations/signin.js +10 -5
- package/dist/server/mutations/signout.js +11 -14
- package/dist/server/mutations/store.js +25 -18
- package/dist/server/mutations/verifier.js +11 -8
- package/dist/server/mutations/verify.js +53 -41
- package/dist/server/oauth/factory.js +44 -0
- package/dist/server/oauth/index.js +12 -0
- package/dist/server/oauth/runtime.js +248 -0
- package/dist/server/passkey.js +331 -365
- package/dist/server/payloads.d.ts +16 -0
- package/dist/server/payloads.js +30 -0
- package/dist/server/{ssr.d.ts → prefetch.d.ts} +2 -2
- package/dist/server/prefetch.js +635 -0
- package/dist/server/random.js +19 -0
- package/dist/server/redirects.js +10 -5
- package/dist/server/refresh.js +14 -86
- package/dist/server/runtime.d.ts +531 -31
- package/dist/server/runtime.js +106 -267
- package/dist/server/secret.js +44 -0
- package/dist/server/services/config.js +10 -0
- package/dist/server/services/group.js +211 -0
- package/dist/server/services/logger.js +8 -0
- package/dist/server/services/providers.js +22 -0
- package/dist/server/services/refresh.js +8 -0
- package/dist/server/services/resolve.js +27 -0
- package/dist/server/services/signin.js +8 -0
- package/dist/server/sessions.js +35 -34
- package/dist/server/signin.js +229 -140
- package/dist/server/{enterprise → sso}/config.js +10 -3
- package/dist/server/sso/domain.d.ts +614 -0
- package/dist/server/sso/domain.js +1175 -0
- package/dist/server/sso/http.js +1060 -0
- package/dist/server/sso/oidc.js +324 -0
- package/dist/server/sso/policies.js +59 -0
- package/dist/server/sso/policy.js +139 -0
- package/dist/server/sso/profile.js +22 -0
- package/dist/server/sso/provision.js +179 -0
- package/dist/{component/server/enterprise → server/sso}/saml.js +142 -56
- package/dist/{component/server/enterprise → server/sso}/scim.js +13 -7
- package/dist/server/sso/shared.js +74 -0
- package/dist/server/sso/validators.js +88 -0
- package/dist/server/sso/webhook.js +94 -0
- package/dist/server/tokens.js +16 -4
- package/dist/server/totp.js +155 -164
- package/dist/server/types.d.ts +306 -296
- package/dist/server/types.js +1 -30
- package/dist/server/url.js +32 -0
- package/dist/server/users.js +74 -40
- package/dist/server/utils/cache.js +51 -0
- package/dist/server/utils/dispatch.js +36 -0
- package/dist/server/utils/retry.js +24 -0
- package/dist/server/utils/span.js +32 -0
- package/dist/shared/errors.js +19 -0
- package/dist/shared/log.js +45 -0
- package/{src/test.ts → dist/test.d.ts} +21 -22
- package/dist/test.js +51 -0
- package/package.json +70 -42
- package/dist/authorization/index.d.ts.map +0 -1
- package/dist/authorization/index.js.map +0 -1
- package/dist/client/core/types.d.ts.map +0 -1
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/component/_generated/api.d.ts +0 -75
- package/dist/component/_generated/api.d.ts.map +0 -1
- package/dist/component/_generated/api.js.map +0 -1
- package/dist/component/_generated/component.d.ts.map +0 -1
- package/dist/component/_generated/dataModel.d.ts +0 -42
- package/dist/component/_generated/dataModel.d.ts.map +0 -1
- package/dist/component/_generated/server.d.ts +0 -117
- package/dist/component/_generated/server.d.ts.map +0 -1
- package/dist/component/_generated/server.js.map +0 -1
- package/dist/component/_virtual/rolldown_runtime.js +0 -18
- package/dist/component/client/core/types.d.ts +0 -2
- package/dist/component/client/index.d.ts +0 -1
- package/dist/component/convex.config.d.ts.map +0 -1
- package/dist/component/convex.config.js.map +0 -1
- package/dist/component/functions.d.ts +0 -25
- package/dist/component/functions.d.ts.map +0 -1
- package/dist/component/functions.js.map +0 -1
- package/dist/component/index.d.ts.map +0 -1
- package/dist/component/model.d.ts.map +0 -1
- package/dist/component/model.js.map +0 -1
- package/dist/component/providers/anonymous.d.ts +0 -54
- package/dist/component/providers/anonymous.d.ts.map +0 -1
- package/dist/component/providers/credentials.d.ts +0 -38
- package/dist/component/providers/credentials.d.ts.map +0 -1
- package/dist/component/providers/device.d.ts +0 -67
- package/dist/component/providers/device.d.ts.map +0 -1
- package/dist/component/providers/email.d.ts +0 -62
- package/dist/component/providers/email.d.ts.map +0 -1
- package/dist/component/providers/oauth.d.ts +0 -25
- package/dist/component/providers/oauth.d.ts.map +0 -1
- package/dist/component/providers/oauth.js +0 -13
- package/dist/component/providers/oauth.js.map +0 -1
- package/dist/component/providers/passkey.d.ts +0 -57
- package/dist/component/providers/passkey.d.ts.map +0 -1
- package/dist/component/providers/password.d.ts +0 -88
- package/dist/component/providers/password.d.ts.map +0 -1
- package/dist/component/providers/phone.d.ts +0 -48
- package/dist/component/providers/phone.d.ts.map +0 -1
- package/dist/component/providers/sso.d.ts +0 -50
- package/dist/component/providers/sso.d.ts.map +0 -1
- package/dist/component/providers/totp.d.ts +0 -45
- package/dist/component/providers/totp.d.ts.map +0 -1
- package/dist/component/public/enterprise/audit.d.ts +0 -73
- package/dist/component/public/enterprise/audit.d.ts.map +0 -1
- package/dist/component/public/enterprise/audit.js.map +0 -1
- package/dist/component/public/enterprise/core.d.ts +0 -176
- package/dist/component/public/enterprise/core.d.ts.map +0 -1
- package/dist/component/public/enterprise/core.js +0 -292
- package/dist/component/public/enterprise/core.js.map +0 -1
- package/dist/component/public/enterprise/domains.d.ts +0 -174
- package/dist/component/public/enterprise/domains.d.ts.map +0 -1
- package/dist/component/public/enterprise/domains.js +0 -271
- package/dist/component/public/enterprise/domains.js.map +0 -1
- package/dist/component/public/enterprise/scim.d.ts +0 -245
- package/dist/component/public/enterprise/scim.d.ts.map +0 -1
- package/dist/component/public/enterprise/scim.js.map +0 -1
- package/dist/component/public/enterprise/secrets.d.ts +0 -78
- package/dist/component/public/enterprise/secrets.d.ts.map +0 -1
- package/dist/component/public/enterprise/secrets.js +0 -118
- package/dist/component/public/enterprise/secrets.js.map +0 -1
- package/dist/component/public/enterprise/webhooks.d.ts +0 -211
- package/dist/component/public/enterprise/webhooks.d.ts.map +0 -1
- package/dist/component/public/enterprise/webhooks.js.map +0 -1
- package/dist/component/public/factors/devices.d.ts +0 -157
- package/dist/component/public/factors/devices.d.ts.map +0 -1
- package/dist/component/public/factors/devices.js.map +0 -1
- package/dist/component/public/factors/passkeys.d.ts +0 -175
- package/dist/component/public/factors/passkeys.d.ts.map +0 -1
- package/dist/component/public/factors/passkeys.js.map +0 -1
- package/dist/component/public/factors/totp.d.ts +0 -189
- package/dist/component/public/factors/totp.d.ts.map +0 -1
- package/dist/component/public/factors/totp.js.map +0 -1
- package/dist/component/public/groups/core.d.ts +0 -137
- package/dist/component/public/groups/core.d.ts.map +0 -1
- package/dist/component/public/groups/core.js.map +0 -1
- package/dist/component/public/groups/invites.d.ts +0 -217
- package/dist/component/public/groups/invites.d.ts.map +0 -1
- package/dist/component/public/groups/invites.js.map +0 -1
- package/dist/component/public/groups/members.d.ts +0 -204
- package/dist/component/public/groups/members.d.ts.map +0 -1
- package/dist/component/public/groups/members.js.map +0 -1
- package/dist/component/public/identity/accounts.d.ts +0 -147
- package/dist/component/public/identity/accounts.d.ts.map +0 -1
- package/dist/component/public/identity/accounts.js.map +0 -1
- package/dist/component/public/identity/codes.d.ts +0 -104
- package/dist/component/public/identity/codes.d.ts.map +0 -1
- package/dist/component/public/identity/codes.js.map +0 -1
- package/dist/component/public/identity/sessions.d.ts +0 -128
- package/dist/component/public/identity/sessions.d.ts.map +0 -1
- package/dist/component/public/identity/sessions.js.map +0 -1
- package/dist/component/public/identity/tokens.d.ts +0 -169
- package/dist/component/public/identity/tokens.d.ts.map +0 -1
- package/dist/component/public/identity/tokens.js.map +0 -1
- package/dist/component/public/identity/users.d.ts +0 -212
- package/dist/component/public/identity/users.d.ts.map +0 -1
- package/dist/component/public/identity/users.js.map +0 -1
- package/dist/component/public/identity/verifiers.d.ts +0 -116
- package/dist/component/public/identity/verifiers.d.ts.map +0 -1
- package/dist/component/public/identity/verifiers.js.map +0 -1
- package/dist/component/public/security/keys.d.ts +0 -209
- package/dist/component/public/security/keys.d.ts.map +0 -1
- package/dist/component/public/security/keys.js.map +0 -1
- package/dist/component/public/security/limits.d.ts +0 -114
- package/dist/component/public/security/limits.d.ts.map +0 -1
- package/dist/component/public/security/limits.js.map +0 -1
- package/dist/component/public.d.ts +0 -28
- package/dist/component/public.d.ts.map +0 -1
- package/dist/component/schema.d.ts.map +0 -1
- package/dist/component/schema.js.map +0 -1
- package/dist/component/server/auth.d.ts +0 -447
- package/dist/component/server/auth.d.ts.map +0 -1
- package/dist/component/server/auth.js +0 -254
- package/dist/component/server/auth.js.map +0 -1
- package/dist/component/server/config.js +0 -121
- package/dist/component/server/config.js.map +0 -1
- package/dist/component/server/context.js +0 -53
- package/dist/component/server/context.js.map +0 -1
- package/dist/component/server/cookies.js +0 -47
- package/dist/component/server/cookies.js.map +0 -1
- package/dist/component/server/core.js +0 -576
- package/dist/component/server/core.js.map +0 -1
- package/dist/component/server/crypto.js +0 -56
- package/dist/component/server/crypto.js.map +0 -1
- package/dist/component/server/db.js +0 -87
- package/dist/component/server/db.js.map +0 -1
- package/dist/component/server/device.js +0 -152
- package/dist/component/server/device.js.map +0 -1
- package/dist/component/server/enterprise/config.js +0 -46
- package/dist/component/server/enterprise/config.js.map +0 -1
- package/dist/component/server/enterprise/domain.js +0 -974
- package/dist/component/server/enterprise/domain.js.map +0 -1
- package/dist/component/server/enterprise/http.js +0 -787
- package/dist/component/server/enterprise/http.js.map +0 -1
- package/dist/component/server/enterprise/oidc.js +0 -248
- package/dist/component/server/enterprise/oidc.js.map +0 -1
- package/dist/component/server/enterprise/policy.js +0 -85
- package/dist/component/server/enterprise/policy.js.map +0 -1
- package/dist/component/server/enterprise/saml.js.map +0 -1
- package/dist/component/server/enterprise/scim.js.map +0 -1
- package/dist/component/server/enterprise/shared.js +0 -51
- package/dist/component/server/enterprise/shared.js.map +0 -1
- package/dist/component/server/http.d.ts +0 -85
- package/dist/component/server/http.d.ts.map +0 -1
- package/dist/component/server/http.js +0 -351
- package/dist/component/server/http.js.map +0 -1
- package/dist/component/server/identity.js +0 -16
- package/dist/component/server/identity.js.map +0 -1
- package/dist/component/server/keys.js +0 -96
- package/dist/component/server/keys.js.map +0 -1
- package/dist/component/server/limits.js +0 -52
- package/dist/component/server/limits.js.map +0 -1
- package/dist/component/server/mutations/account.js +0 -46
- package/dist/component/server/mutations/account.js.map +0 -1
- package/dist/component/server/mutations/code.js +0 -68
- package/dist/component/server/mutations/code.js.map +0 -1
- package/dist/component/server/mutations/invalidate.js +0 -32
- package/dist/component/server/mutations/invalidate.js.map +0 -1
- package/dist/component/server/mutations/oauth.js +0 -116
- package/dist/component/server/mutations/oauth.js.map +0 -1
- package/dist/component/server/mutations/refresh.js +0 -119
- package/dist/component/server/mutations/refresh.js.map +0 -1
- package/dist/component/server/mutations/register.js +0 -87
- package/dist/component/server/mutations/register.js.map +0 -1
- package/dist/component/server/mutations/retrieve.js +0 -61
- package/dist/component/server/mutations/retrieve.js.map +0 -1
- package/dist/component/server/mutations/signature.js +0 -38
- package/dist/component/server/mutations/signature.js.map +0 -1
- package/dist/component/server/mutations/signin.js +0 -27
- package/dist/component/server/mutations/signin.js.map +0 -1
- package/dist/component/server/mutations/signout.js +0 -27
- package/dist/component/server/mutations/signout.js.map +0 -1
- package/dist/component/server/mutations/store/refs.js +0 -15
- package/dist/component/server/mutations/store/refs.js.map +0 -1
- package/dist/component/server/mutations/store.js +0 -70
- package/dist/component/server/mutations/store.js.map +0 -1
- package/dist/component/server/mutations/verifier.js +0 -18
- package/dist/component/server/mutations/verifier.js.map +0 -1
- package/dist/component/server/mutations/verify.js +0 -98
- package/dist/component/server/mutations/verify.js.map +0 -1
- package/dist/component/server/oauth.js +0 -242
- package/dist/component/server/oauth.js.map +0 -1
- package/dist/component/server/passkey.js +0 -415
- package/dist/component/server/passkey.js.map +0 -1
- package/dist/component/server/redirects.js +0 -40
- package/dist/component/server/redirects.js.map +0 -1
- package/dist/component/server/refresh.js +0 -99
- package/dist/component/server/refresh.js.map +0 -1
- package/dist/component/server/runtime.d.ts +0 -136
- package/dist/component/server/runtime.d.ts.map +0 -1
- package/dist/component/server/runtime.js +0 -456
- package/dist/component/server/runtime.js.map +0 -1
- package/dist/component/server/sessions.js +0 -71
- package/dist/component/server/sessions.js.map +0 -1
- package/dist/component/server/signin.js +0 -225
- package/dist/component/server/signin.js.map +0 -1
- package/dist/component/server/tokens.js +0 -17
- package/dist/component/server/tokens.js.map +0 -1
- package/dist/component/server/totp.js +0 -208
- package/dist/component/server/totp.js.map +0 -1
- package/dist/component/server/types.d.ts +0 -949
- package/dist/component/server/types.d.ts.map +0 -1
- package/dist/component/server/types.js +0 -79
- package/dist/component/server/types.js.map +0 -1
- package/dist/component/server/users.js +0 -123
- package/dist/component/server/users.js.map +0 -1
- package/dist/component/server/utils.js +0 -140
- package/dist/component/server/utils.js.map +0 -1
- package/dist/core/types.d.ts +0 -361
- package/dist/core/types.d.ts.map +0 -1
- package/dist/factors/device.js +0 -104
- package/dist/factors/device.js.map +0 -1
- package/dist/factors/passkey.js.map +0 -1
- package/dist/factors/totp.js.map +0 -1
- package/dist/providers/anonymous.d.ts.map +0 -1
- package/dist/providers/anonymous.js.map +0 -1
- package/dist/providers/credentials.d.ts.map +0 -1
- package/dist/providers/credentials.js.map +0 -1
- package/dist/providers/device.d.ts.map +0 -1
- package/dist/providers/device.js.map +0 -1
- package/dist/providers/email.d.ts.map +0 -1
- package/dist/providers/email.js.map +0 -1
- package/dist/providers/oauth.d.ts +0 -69
- package/dist/providers/oauth.d.ts.map +0 -1
- package/dist/providers/oauth.js +0 -43
- package/dist/providers/oauth.js.map +0 -1
- package/dist/providers/passkey.d.ts.map +0 -1
- package/dist/providers/passkey.js.map +0 -1
- package/dist/providers/password.d.ts.map +0 -1
- package/dist/providers/password.js.map +0 -1
- package/dist/providers/phone.d.ts.map +0 -1
- package/dist/providers/phone.js.map +0 -1
- package/dist/providers/sso.d.ts.map +0 -1
- package/dist/providers/sso.js.map +0 -1
- package/dist/providers/totp.d.ts.map +0 -1
- package/dist/providers/totp.js.map +0 -1
- package/dist/runtime/browser.js +0 -68
- package/dist/runtime/browser.js.map +0 -1
- package/dist/runtime/invite.js.map +0 -1
- package/dist/runtime/proxy.js +0 -70
- package/dist/runtime/proxy.js.map +0 -1
- package/dist/runtime/storage.js +0 -37
- package/dist/runtime/storage.js.map +0 -1
- package/dist/server/auth.d.ts.map +0 -1
- package/dist/server/auth.js.map +0 -1
- package/dist/server/config.d.ts +0 -1
- package/dist/server/config.js.map +0 -1
- package/dist/server/context.d.ts +0 -1
- package/dist/server/context.js.map +0 -1
- package/dist/server/cookies.d.ts +0 -1
- package/dist/server/cookies.js.map +0 -1
- package/dist/server/core.d.ts +0 -1315
- package/dist/server/core.d.ts.map +0 -1
- package/dist/server/core.js.map +0 -1
- package/dist/server/crypto.d.ts +0 -8
- package/dist/server/crypto.d.ts.map +0 -1
- package/dist/server/crypto.js.map +0 -1
- package/dist/server/db.d.ts +0 -1
- package/dist/server/db.js.map +0 -1
- package/dist/server/device.d.ts +0 -1
- package/dist/server/device.js.map +0 -1
- package/dist/server/enterprise/config.d.ts +0 -1
- package/dist/server/enterprise/config.js.map +0 -1
- package/dist/server/enterprise/domain.d.ts +0 -401
- package/dist/server/enterprise/domain.d.ts.map +0 -1
- package/dist/server/enterprise/domain.js +0 -974
- package/dist/server/enterprise/domain.js.map +0 -1
- package/dist/server/enterprise/http.d.ts +0 -26
- package/dist/server/enterprise/http.d.ts.map +0 -1
- package/dist/server/enterprise/http.js +0 -787
- package/dist/server/enterprise/http.js.map +0 -1
- package/dist/server/enterprise/oidc.d.ts +0 -1
- package/dist/server/enterprise/oidc.js +0 -248
- package/dist/server/enterprise/oidc.js.map +0 -1
- package/dist/server/enterprise/policy.d.ts +0 -1
- package/dist/server/enterprise/policy.js +0 -85
- package/dist/server/enterprise/policy.js.map +0 -1
- package/dist/server/enterprise/saml.d.ts +0 -1
- package/dist/server/enterprise/saml.js +0 -338
- package/dist/server/enterprise/saml.js.map +0 -1
- package/dist/server/enterprise/scim.d.ts +0 -1
- package/dist/server/enterprise/scim.js +0 -97
- package/dist/server/enterprise/scim.js.map +0 -1
- package/dist/server/enterprise/shared.d.ts +0 -5
- package/dist/server/enterprise/shared.d.ts.map +0 -1
- package/dist/server/enterprise/shared.js +0 -51
- package/dist/server/enterprise/shared.js.map +0 -1
- package/dist/server/enterprise/validators.d.ts +0 -1
- package/dist/server/enterprise/validators.js +0 -60
- package/dist/server/enterprise/validators.js.map +0 -1
- package/dist/server/http.d.ts.map +0 -1
- package/dist/server/http.js.map +0 -1
- package/dist/server/identity.d.ts +0 -1
- package/dist/server/identity.js.map +0 -1
- package/dist/server/keys.d.ts +0 -1
- package/dist/server/keys.js.map +0 -1
- package/dist/server/limits.d.ts +0 -1
- package/dist/server/limits.js.map +0 -1
- package/dist/server/mounts.d.ts.map +0 -1
- package/dist/server/mounts.js.map +0 -1
- package/dist/server/mutations/account.d.ts +0 -29
- package/dist/server/mutations/account.d.ts.map +0 -1
- package/dist/server/mutations/account.js.map +0 -1
- package/dist/server/mutations/code.d.ts +0 -30
- package/dist/server/mutations/code.d.ts.map +0 -1
- package/dist/server/mutations/code.js.map +0 -1
- package/dist/server/mutations/index.d.ts +0 -14
- package/dist/server/mutations/invalidate.d.ts +0 -20
- package/dist/server/mutations/invalidate.d.ts.map +0 -1
- package/dist/server/mutations/invalidate.js.map +0 -1
- package/dist/server/mutations/oauth.d.ts +0 -30
- package/dist/server/mutations/oauth.d.ts.map +0 -1
- package/dist/server/mutations/oauth.js.map +0 -1
- package/dist/server/mutations/refresh.d.ts +0 -21
- package/dist/server/mutations/refresh.d.ts.map +0 -1
- package/dist/server/mutations/refresh.js.map +0 -1
- package/dist/server/mutations/register.d.ts +0 -38
- package/dist/server/mutations/register.d.ts.map +0 -1
- package/dist/server/mutations/register.js.map +0 -1
- package/dist/server/mutations/retrieve.d.ts +0 -33
- package/dist/server/mutations/retrieve.d.ts.map +0 -1
- package/dist/server/mutations/retrieve.js.map +0 -1
- package/dist/server/mutations/signature.d.ts +0 -21
- package/dist/server/mutations/signature.d.ts.map +0 -1
- package/dist/server/mutations/signature.js.map +0 -1
- package/dist/server/mutations/signin.d.ts +0 -22
- package/dist/server/mutations/signin.d.ts.map +0 -1
- package/dist/server/mutations/signin.js.map +0 -1
- package/dist/server/mutations/signout.d.ts +0 -16
- package/dist/server/mutations/signout.d.ts.map +0 -1
- package/dist/server/mutations/signout.js.map +0 -1
- package/dist/server/mutations/store/refs.d.ts +0 -12
- package/dist/server/mutations/store/refs.d.ts.map +0 -1
- package/dist/server/mutations/store/refs.js.map +0 -1
- package/dist/server/mutations/store.d.ts +0 -306
- package/dist/server/mutations/store.d.ts.map +0 -1
- package/dist/server/mutations/store.js.map +0 -1
- package/dist/server/mutations/verifier.d.ts +0 -13
- package/dist/server/mutations/verifier.d.ts.map +0 -1
- package/dist/server/mutations/verifier.js.map +0 -1
- package/dist/server/mutations/verify.d.ts +0 -26
- package/dist/server/mutations/verify.d.ts.map +0 -1
- package/dist/server/mutations/verify.js.map +0 -1
- package/dist/server/oauth.d.ts +0 -1
- package/dist/server/oauth.js +0 -242
- package/dist/server/oauth.js.map +0 -1
- package/dist/server/passkey.d.ts +0 -27
- package/dist/server/passkey.d.ts.map +0 -1
- package/dist/server/passkey.js.map +0 -1
- package/dist/server/redirects.d.ts +0 -1
- package/dist/server/redirects.js.map +0 -1
- package/dist/server/refresh.d.ts +0 -1
- package/dist/server/refresh.js.map +0 -1
- package/dist/server/runtime.d.ts.map +0 -1
- package/dist/server/runtime.js.map +0 -1
- package/dist/server/sessions.d.ts +0 -1
- package/dist/server/sessions.js.map +0 -1
- package/dist/server/signin.d.ts +0 -1
- package/dist/server/signin.js.map +0 -1
- package/dist/server/ssr.d.ts.map +0 -1
- package/dist/server/ssr.js +0 -777
- package/dist/server/ssr.js.map +0 -1
- package/dist/server/templates.d.ts +0 -1
- package/dist/server/templates.js.map +0 -1
- package/dist/server/tokens.d.ts +0 -1
- package/dist/server/tokens.js.map +0 -1
- package/dist/server/totp.d.ts +0 -1
- package/dist/server/totp.js.map +0 -1
- package/dist/server/types.d.ts.map +0 -1
- package/dist/server/types.js.map +0 -1
- package/dist/server/users.d.ts +0 -1
- package/dist/server/users.js.map +0 -1
- package/dist/server/utils.d.ts +0 -1
- package/dist/server/utils.js +0 -140
- package/dist/server/utils.js.map +0 -1
- package/src/authorization/index.ts +0 -83
- package/src/cli/bin.ts +0 -5
- package/src/cli/command.ts +0 -70
- package/src/cli/index.ts +0 -1112
- package/src/cli/keys.ts +0 -23
- package/src/client/core/types.ts +0 -437
- package/src/client/factors/device.ts +0 -158
- package/src/client/factors/passkey.ts +0 -279
- package/src/client/factors/totp.ts +0 -150
- package/src/client/index.ts +0 -1124
- package/src/client/runtime/browser.ts +0 -112
- package/src/client/runtime/invite.ts +0 -63
- package/src/client/runtime/proxy.ts +0 -111
- package/src/client/runtime/storage.ts +0 -79
- package/src/component/_generated/api.ts +0 -96
- package/src/component/_generated/component.ts +0 -3774
- package/src/component/_generated/dataModel.ts +0 -60
- package/src/component/_generated/server.ts +0 -156
- package/src/component/convex.config.ts +0 -5
- package/src/component/functions.ts +0 -104
- package/src/component/index.ts +0 -42
- package/src/component/model.ts +0 -449
- package/src/component/public/enterprise/audit.ts +0 -125
- package/src/component/public/enterprise/core.ts +0 -355
- package/src/component/public/enterprise/domains.ts +0 -327
- package/src/component/public/enterprise/scim.ts +0 -397
- package/src/component/public/enterprise/secrets.ts +0 -133
- package/src/component/public/enterprise/webhooks.ts +0 -307
- package/src/component/public/factors/devices.ts +0 -224
- package/src/component/public/factors/passkeys.ts +0 -243
- package/src/component/public/factors/totp.ts +0 -259
- package/src/component/public/groups/core.ts +0 -481
- package/src/component/public/groups/invites.ts +0 -608
- package/src/component/public/groups/members.ts +0 -410
- package/src/component/public/identity/accounts.ts +0 -207
- package/src/component/public/identity/codes.ts +0 -149
- package/src/component/public/identity/sessions.ts +0 -210
- package/src/component/public/identity/tokens.ts +0 -251
- package/src/component/public/identity/users.ts +0 -355
- package/src/component/public/identity/verifiers.ts +0 -158
- package/src/component/public/security/keys.ts +0 -366
- package/src/component/public/security/limits.ts +0 -174
- package/src/component/public.ts +0 -27
- package/src/component/schema.ts +0 -505
- package/src/providers/anonymous.ts +0 -99
- package/src/providers/credentials.ts +0 -102
- package/src/providers/device.ts +0 -87
- package/src/providers/email.ts +0 -99
- package/src/providers/index.ts +0 -31
- package/src/providers/oauth.ts +0 -117
- package/src/providers/passkey.ts +0 -77
- package/src/providers/password.ts +0 -441
- package/src/providers/phone.ts +0 -93
- package/src/providers/sso.ts +0 -54
- package/src/providers/totp.ts +0 -62
- package/src/samlify.d.ts +0 -53
- package/src/server/auth.ts +0 -949
- package/src/server/config.ts +0 -200
- package/src/server/context.ts +0 -90
- package/src/server/cookies.ts +0 -49
- package/src/server/core.ts +0 -2004
- package/src/server/crypto.ts +0 -90
- package/src/server/db.ts +0 -203
- package/src/server/device.ts +0 -254
- package/src/server/enterprise/config.ts +0 -51
- package/src/server/enterprise/domain.ts +0 -1739
- package/src/server/enterprise/http.ts +0 -1331
- package/src/server/enterprise/oidc.ts +0 -500
- package/src/server/enterprise/policy.ts +0 -128
- package/src/server/enterprise/saml.ts +0 -578
- package/src/server/enterprise/scim.ts +0 -135
- package/src/server/enterprise/shared.ts +0 -134
- package/src/server/enterprise/validators.ts +0 -93
- package/src/server/http.ts +0 -790
- package/src/server/identity.ts +0 -18
- package/src/server/index.ts +0 -40
- package/src/server/keys.ts +0 -158
- package/src/server/limits.ts +0 -107
- package/src/server/mounts.ts +0 -924
- package/src/server/mutations/account.ts +0 -62
- package/src/server/mutations/code.ts +0 -119
- package/src/server/mutations/index.ts +0 -13
- package/src/server/mutations/invalidate.ts +0 -50
- package/src/server/mutations/oauth.ts +0 -243
- package/src/server/mutations/refresh.ts +0 -299
- package/src/server/mutations/register.ts +0 -155
- package/src/server/mutations/retrieve.ts +0 -109
- package/src/server/mutations/signature.ts +0 -57
- package/src/server/mutations/signin.ts +0 -54
- package/src/server/mutations/signout.ts +0 -43
- package/src/server/mutations/store/refs.ts +0 -10
- package/src/server/mutations/store.ts +0 -123
- package/src/server/mutations/verifier.ts +0 -34
- package/src/server/mutations/verify.ts +0 -200
- package/src/server/oauth.ts +0 -418
- package/src/server/passkey.ts +0 -838
- package/src/server/redirects.ts +0 -59
- package/src/server/refresh.ts +0 -218
- package/src/server/runtime.ts +0 -918
- package/src/server/sessions.ts +0 -132
- package/src/server/signin.ts +0 -445
- package/src/server/ssr.ts +0 -1747
- package/src/server/templates.ts +0 -82
- package/src/server/tokens.ts +0 -35
- package/src/server/totp.ts +0 -399
- package/src/server/types.ts +0 -1942
- package/src/server/users.ts +0 -291
- package/src/server/utils.ts +0 -220
- /package/dist/{runtime → client/runtime}/invite.js +0 -0
package/dist/server/mounts.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Cv } from "@robelest/fx/convex";
|
|
3
|
-
import { actionGeneric, mutationGeneric, queryGeneric } from "convex/server";
|
|
1
|
+
import { groupConnectionDomainInputValidator, groupConnectionDomainVerificationInputValidator, groupConnectionStatusValidator, groupConnectionWhereValidator, groupPolicyPatchValidator, ssoSamlAttributeMappingValidator, ssoSamlSecurityValidator, ssoSamlSpValidator } from "./sso/validators.js";
|
|
4
2
|
import { ConvexError, v } from "convex/values";
|
|
3
|
+
import { actionGeneric, mutationGeneric, queryGeneric } from "convex/server";
|
|
5
4
|
|
|
6
5
|
//#region src/server/mounts.ts
|
|
7
6
|
function requireSignedInUser(auth) {
|
|
@@ -9,65 +8,82 @@ function requireSignedInUser(auth) {
|
|
|
9
8
|
return (await auth.context(ctx, { optional: true })).userId;
|
|
10
9
|
};
|
|
11
10
|
}
|
|
12
|
-
function
|
|
13
|
-
return roles?.map((role) => typeof role === "string" ? role : role.id);
|
|
14
|
-
}
|
|
15
|
-
async function resolveMountedEnterpriseTarget(auth, ctx, target) {
|
|
11
|
+
async function resolveMountedGroupTarget(auth, ctx, target) {
|
|
16
12
|
if (target.groupId !== void 0) return {
|
|
17
|
-
|
|
18
|
-
groupId: target.groupId
|
|
19
|
-
resolvedGroupId: target.groupId
|
|
13
|
+
connectionId: target.connectionId,
|
|
14
|
+
groupId: target.groupId
|
|
20
15
|
};
|
|
21
|
-
if (target.
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
16
|
+
if (target.connectionId !== void 0) {
|
|
17
|
+
const connection = await auth.group.sso.connection.get(ctx, target.connectionId);
|
|
18
|
+
if (connection === null) throw new ConvexError({
|
|
24
19
|
code: "INVALID_PARAMETERS",
|
|
25
|
-
message: "
|
|
20
|
+
message: "Connection not found."
|
|
26
21
|
});
|
|
27
22
|
return {
|
|
28
|
-
|
|
29
|
-
groupId:
|
|
30
|
-
resolvedGroupId: enterprise.groupId
|
|
23
|
+
connectionId: connection._id,
|
|
24
|
+
groupId: connection.groupId
|
|
31
25
|
};
|
|
32
26
|
}
|
|
33
27
|
if (target.domain !== void 0) {
|
|
34
|
-
const resolved = await auth.sso.
|
|
35
|
-
if (resolved?.
|
|
28
|
+
const resolved = await auth.group.sso.connection.getByDomain(ctx, target.domain);
|
|
29
|
+
if (resolved?.connection == null) throw new ConvexError({
|
|
36
30
|
code: "INVALID_PARAMETERS",
|
|
37
|
-
message: "
|
|
31
|
+
message: "Connection not found."
|
|
38
32
|
});
|
|
39
33
|
return {
|
|
40
|
-
|
|
41
|
-
groupId: resolved.
|
|
42
|
-
resolvedGroupId: resolved.enterprise.groupId
|
|
34
|
+
connectionId: resolved.connection._id,
|
|
35
|
+
groupId: resolved.connection.groupId
|
|
43
36
|
};
|
|
44
37
|
}
|
|
45
38
|
return {
|
|
46
|
-
|
|
47
|
-
groupId: void 0
|
|
48
|
-
resolvedGroupId: null
|
|
39
|
+
connectionId: void 0,
|
|
40
|
+
groupId: void 0
|
|
49
41
|
};
|
|
50
42
|
}
|
|
43
|
+
function resolveRequiredAccess(permissions, permission) {
|
|
44
|
+
const ssoRequire = permissions.sso?.require;
|
|
45
|
+
const scimRequire = permissions.scim?.require;
|
|
46
|
+
switch (permission) {
|
|
47
|
+
case "sso.connection.create": return permissions.sso?.connection?.create ?? ssoRequire;
|
|
48
|
+
case "sso.connection.read": return permissions.sso?.connection?.read ?? ssoRequire;
|
|
49
|
+
case "sso.connection.manage": return permissions.sso?.connection?.manage ?? ssoRequire;
|
|
50
|
+
case "sso.domain.manage": return permissions.sso?.domain?.manage ?? ssoRequire;
|
|
51
|
+
case "sso.protocol.manage": return permissions.sso?.protocol?.manage ?? ssoRequire;
|
|
52
|
+
case "sso.policy.manage": return permissions.sso?.policy?.manage ?? ssoRequire;
|
|
53
|
+
case "sso.audit.read": return permissions.sso?.audit?.read ?? ssoRequire;
|
|
54
|
+
case "sso.webhook.manage": return permissions.sso?.webhook?.manage ?? ssoRequire;
|
|
55
|
+
case "scim.manage": return permissions.scim?.manage ?? scimRequire;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
51
58
|
function createMountedAdminAuthorizer(auth, options) {
|
|
52
59
|
const requireUserId = requireSignedInUser(auth);
|
|
53
60
|
return async (ctx, permission, target = {}) => {
|
|
54
61
|
const userId = await requireUserId(ctx);
|
|
55
|
-
if (userId === null) throw
|
|
62
|
+
if (userId === null) throw new ConvexError({
|
|
56
63
|
code: "NOT_SIGNED_IN",
|
|
57
64
|
message: "You must be signed in to perform this action."
|
|
58
65
|
});
|
|
59
|
-
if (!options
|
|
66
|
+
if (!options) throw new ConvexError({
|
|
60
67
|
code: "FORBIDDEN",
|
|
61
68
|
message: "Access denied."
|
|
62
69
|
});
|
|
63
|
-
const resolved = await
|
|
64
|
-
|
|
70
|
+
const resolved = await resolveMountedGroupTarget(auth, ctx, target);
|
|
71
|
+
const input = {
|
|
65
72
|
userId,
|
|
66
73
|
permission,
|
|
67
|
-
|
|
68
|
-
groupId: resolved.groupId
|
|
69
|
-
|
|
70
|
-
|
|
74
|
+
connectionId: resolved.connectionId,
|
|
75
|
+
groupId: resolved.groupId
|
|
76
|
+
};
|
|
77
|
+
if (options.permissions === void 0) {
|
|
78
|
+
await options.access(ctx, input);
|
|
79
|
+
return {
|
|
80
|
+
userId,
|
|
81
|
+
...resolved
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const required = resolveRequiredAccess(options.permissions, permission);
|
|
85
|
+
if (required === void 0) throw new Error(`Missing permissions entry for mounted Group SSO permission: ${permission}`);
|
|
86
|
+
await options.access(ctx, input, required);
|
|
71
87
|
return {
|
|
72
88
|
userId,
|
|
73
89
|
...resolved
|
|
@@ -76,15 +92,17 @@ function createMountedAdminAuthorizer(auth, options) {
|
|
|
76
92
|
}
|
|
77
93
|
/**
|
|
78
94
|
* Build optional public SSO management actions that apps can mount under
|
|
79
|
-
* `convex/auth/sso/**` when they want client-callable
|
|
95
|
+
* `convex/auth/sso/**` when they want client-callable group SSO APIs.
|
|
80
96
|
*
|
|
81
97
|
* `admin` is for tenant-admin control-plane operations and should be mounted
|
|
82
|
-
* with an explicit
|
|
98
|
+
* with an explicit access policy. `client` is for end-user sign-in
|
|
83
99
|
* helpers and does not require tenant-admin authorization.
|
|
84
100
|
*
|
|
85
101
|
* @param auth - Auth API subset providing `group`, `member`, `sso`, and `user` namespaces.
|
|
86
|
-
* @param options - Optional admin
|
|
102
|
+
* @param options - Optional admin access config. See {@link CreateAuthGroupSsoOptions}.
|
|
87
103
|
* @typeParam TAuthorization - Optional authorization config for typed role IDs.
|
|
104
|
+
* @typeParam TRequirement - App-defined requirement values used by declarative
|
|
105
|
+
* `permissions` configs.
|
|
88
106
|
* @returns An object with `admin` (connection CRUD, OIDC/SAML protocol config, policy,
|
|
89
107
|
* audit, webhooks, domain management) and `client` (signIn, metadata) namespaces.
|
|
90
108
|
*
|
|
@@ -95,9 +113,10 @@ function createMountedAdminAuthorizer(auth, options) {
|
|
|
95
113
|
* import { auth } from "../auth";
|
|
96
114
|
*
|
|
97
115
|
* const mounted = sso(auth, {
|
|
98
|
-
*
|
|
99
|
-
*
|
|
116
|
+
* permissions: {
|
|
117
|
+
* sso: { require: ["workspace.sso.manage"] },
|
|
100
118
|
* },
|
|
119
|
+
* access: async (_ctx, _input, _required) => {},
|
|
101
120
|
* });
|
|
102
121
|
*
|
|
103
122
|
* export const createConnection = mounted.admin.connection.create;
|
|
@@ -105,76 +124,58 @@ function createMountedAdminAuthorizer(auth, options) {
|
|
|
105
124
|
* ```
|
|
106
125
|
*
|
|
107
126
|
* @see {@link scim}
|
|
108
|
-
* @see {@link
|
|
127
|
+
* @see {@link createAuthGroupSso}
|
|
109
128
|
*/
|
|
110
129
|
function sso(auth, options) {
|
|
111
130
|
const authorize = createMountedAdminAuthorizer(auth, options);
|
|
112
|
-
const adminRoleIds = normalizeCreatorRoleIds(options?.admin?.roles);
|
|
113
131
|
return {
|
|
114
132
|
admin: {
|
|
115
133
|
connection: {
|
|
116
134
|
create: mutationGeneric({
|
|
117
135
|
args: {
|
|
118
|
-
groupId: v.
|
|
136
|
+
groupId: v.string(),
|
|
119
137
|
name: v.optional(v.string()),
|
|
120
138
|
slug: v.optional(v.string()),
|
|
121
|
-
|
|
139
|
+
protocol: v.union(v.literal("oidc"), v.literal("saml")),
|
|
140
|
+
status: v.optional(groupConnectionStatusValidator),
|
|
122
141
|
domain: v.optional(v.string())
|
|
123
142
|
},
|
|
124
143
|
handler: async (ctx, args) => {
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
name: args.name?.trim() || args.slug?.trim() || "Enterprise",
|
|
129
|
-
slug: args.slug,
|
|
130
|
-
type: "enterprise"
|
|
131
|
-
})).groupId;
|
|
132
|
-
if (createsGroup) await auth.member.create(ctx, {
|
|
133
|
-
groupId,
|
|
134
|
-
userId,
|
|
135
|
-
roleIds: adminRoleIds
|
|
136
|
-
});
|
|
137
|
-
const created = await auth.sso.admin.connection.create(ctx, {
|
|
138
|
-
groupId,
|
|
144
|
+
await authorize(ctx, "sso.connection.create", { groupId: args.groupId });
|
|
145
|
+
const created = await auth.group.sso.connection.create(ctx, {
|
|
146
|
+
groupId: args.groupId,
|
|
139
147
|
name: args.name,
|
|
140
148
|
slug: args.slug,
|
|
149
|
+
protocol: args.protocol,
|
|
141
150
|
status: args.status
|
|
142
151
|
});
|
|
143
|
-
if (args.domain) await auth.sso.
|
|
152
|
+
if (args.domain) await auth.group.sso.connection.domain.set(ctx, created.connectionId, [{
|
|
144
153
|
domain: args.domain,
|
|
145
154
|
isPrimary: true
|
|
146
155
|
}]);
|
|
147
156
|
return {
|
|
148
157
|
...created,
|
|
149
|
-
groupId
|
|
150
|
-
createdGroup: createsGroup
|
|
158
|
+
groupId: args.groupId
|
|
151
159
|
};
|
|
152
160
|
}
|
|
153
161
|
}),
|
|
154
162
|
get: queryGeneric({
|
|
155
|
-
args: {
|
|
163
|
+
args: { connectionId: v.string() },
|
|
156
164
|
handler: async (ctx, args) => {
|
|
157
|
-
await authorize(ctx, "sso.connection.read", {
|
|
158
|
-
return await auth.sso.
|
|
159
|
-
}
|
|
160
|
-
}),
|
|
161
|
-
getByGroup: queryGeneric({
|
|
162
|
-
args: { groupId: v.string() },
|
|
163
|
-
handler: async (ctx, args) => {
|
|
164
|
-
await authorize(ctx, "sso.connection.read", { groupId: args.groupId });
|
|
165
|
-
return await auth.sso.admin.connection.getByGroup(ctx, args.groupId);
|
|
165
|
+
await authorize(ctx, "sso.connection.read", { connectionId: args.connectionId });
|
|
166
|
+
return await auth.group.sso.connection.get(ctx, args.connectionId);
|
|
166
167
|
}
|
|
167
168
|
}),
|
|
168
169
|
getByDomain: queryGeneric({
|
|
169
170
|
args: { domain: v.string() },
|
|
170
171
|
handler: async (ctx, args) => {
|
|
171
172
|
await authorize(ctx, "sso.connection.read", { domain: args.domain });
|
|
172
|
-
return await auth.sso.
|
|
173
|
+
return await auth.group.sso.connection.getByDomain(ctx, args.domain);
|
|
173
174
|
}
|
|
174
175
|
}),
|
|
175
176
|
list: queryGeneric({
|
|
176
177
|
args: {
|
|
177
|
-
where: v.optional(
|
|
178
|
+
where: v.optional(groupConnectionWhereValidator),
|
|
178
179
|
limit: v.optional(v.number()),
|
|
179
180
|
cursor: v.optional(v.union(v.string(), v.null())),
|
|
180
181
|
orderBy: v.optional(v.string()),
|
|
@@ -182,76 +183,83 @@ function sso(auth, options) {
|
|
|
182
183
|
},
|
|
183
184
|
handler: async (ctx, args) => {
|
|
184
185
|
await authorize(ctx, "sso.connection.read", { groupId: args.where?.groupId });
|
|
185
|
-
return await auth.sso.
|
|
186
|
+
return await auth.group.sso.connection.list(ctx, args);
|
|
186
187
|
}
|
|
187
188
|
}),
|
|
188
189
|
update: mutationGeneric({
|
|
189
190
|
args: {
|
|
190
|
-
|
|
191
|
+
connectionId: v.string(),
|
|
191
192
|
data: v.object({
|
|
192
193
|
name: v.optional(v.string()),
|
|
193
194
|
slug: v.optional(v.string()),
|
|
194
|
-
status: v.optional(
|
|
195
|
+
status: v.optional(groupConnectionStatusValidator)
|
|
195
196
|
})
|
|
196
197
|
},
|
|
197
198
|
handler: async (ctx, args) => {
|
|
198
|
-
await authorize(ctx, "sso.connection.manage", {
|
|
199
|
-
await auth.sso.
|
|
200
|
-
return {
|
|
199
|
+
await authorize(ctx, "sso.connection.manage", { connectionId: args.connectionId });
|
|
200
|
+
await auth.group.sso.connection.update(ctx, args.connectionId, args.data);
|
|
201
|
+
return { connectionId: args.connectionId };
|
|
201
202
|
}
|
|
202
203
|
}),
|
|
203
204
|
delete: mutationGeneric({
|
|
204
|
-
args: {
|
|
205
|
+
args: { connectionId: v.string() },
|
|
205
206
|
handler: async (ctx, args) => {
|
|
206
|
-
await authorize(ctx, "sso.connection.manage", {
|
|
207
|
-
return await auth.sso.
|
|
207
|
+
await authorize(ctx, "sso.connection.manage", { connectionId: args.connectionId });
|
|
208
|
+
return await auth.group.sso.connection.delete(ctx, args.connectionId);
|
|
208
209
|
}
|
|
209
210
|
}),
|
|
210
211
|
status: queryGeneric({
|
|
211
|
-
args: {
|
|
212
|
+
args: { connectionId: v.string() },
|
|
212
213
|
handler: async (ctx, args) => {
|
|
213
|
-
await authorize(ctx, "sso.connection.read", {
|
|
214
|
-
return await auth.sso.
|
|
214
|
+
await authorize(ctx, "sso.connection.read", { connectionId: args.connectionId });
|
|
215
|
+
return await auth.group.sso.connection.status(ctx, args.connectionId);
|
|
215
216
|
}
|
|
216
217
|
}),
|
|
217
218
|
domain: {
|
|
218
219
|
list: queryGeneric({
|
|
219
|
-
args: {
|
|
220
|
+
args: { connectionId: v.string() },
|
|
221
|
+
handler: async (ctx, args) => {
|
|
222
|
+
await authorize(ctx, "sso.connection.read", { connectionId: args.connectionId });
|
|
223
|
+
return await auth.group.sso.connection.domain.list(ctx, args.connectionId);
|
|
224
|
+
}
|
|
225
|
+
}),
|
|
226
|
+
status: queryGeneric({
|
|
227
|
+
args: { connectionId: v.string() },
|
|
220
228
|
handler: async (ctx, args) => {
|
|
221
|
-
await authorize(ctx, "sso.
|
|
222
|
-
return await auth.sso.
|
|
229
|
+
await authorize(ctx, "sso.domain.manage", { connectionId: args.connectionId });
|
|
230
|
+
return await auth.group.sso.connection.domain.status(ctx, args.connectionId);
|
|
223
231
|
}
|
|
224
232
|
}),
|
|
225
233
|
validate: queryGeneric({
|
|
226
|
-
args: {
|
|
234
|
+
args: { connectionId: v.string() },
|
|
227
235
|
handler: async (ctx, args) => {
|
|
228
|
-
await authorize(ctx, "sso.domain.manage", {
|
|
229
|
-
return await auth.sso.
|
|
236
|
+
await authorize(ctx, "sso.domain.manage", { connectionId: args.connectionId });
|
|
237
|
+
return await auth.group.sso.connection.domain.validate(ctx, args.connectionId);
|
|
230
238
|
}
|
|
231
239
|
}),
|
|
232
240
|
set: mutationGeneric({
|
|
233
241
|
args: {
|
|
234
|
-
|
|
235
|
-
domains: v.array(
|
|
242
|
+
connectionId: v.string(),
|
|
243
|
+
domains: v.array(groupConnectionDomainInputValidator)
|
|
236
244
|
},
|
|
237
245
|
handler: async (ctx, args) => {
|
|
238
|
-
await authorize(ctx, "sso.domain.manage", {
|
|
239
|
-
return await auth.sso.
|
|
246
|
+
await authorize(ctx, "sso.domain.manage", { connectionId: args.connectionId });
|
|
247
|
+
return await auth.group.sso.connection.domain.set(ctx, args.connectionId, args.domains);
|
|
240
248
|
}
|
|
241
249
|
}),
|
|
242
250
|
verification: {
|
|
243
251
|
request: mutationGeneric({
|
|
244
|
-
args:
|
|
252
|
+
args: groupConnectionDomainVerificationInputValidator,
|
|
245
253
|
handler: async (ctx, args) => {
|
|
246
|
-
await authorize(ctx, "sso.domain.manage", {
|
|
247
|
-
return await auth.sso.
|
|
254
|
+
await authorize(ctx, "sso.domain.manage", { connectionId: args.connectionId });
|
|
255
|
+
return await auth.group.sso.connection.domain.verification.request(ctx, args);
|
|
248
256
|
}
|
|
249
257
|
}),
|
|
250
258
|
confirm: actionGeneric({
|
|
251
|
-
args:
|
|
259
|
+
args: groupConnectionDomainVerificationInputValidator,
|
|
252
260
|
handler: async (ctx, args) => {
|
|
253
|
-
await authorize(ctx, "sso.domain.manage", {
|
|
254
|
-
return await auth.sso.
|
|
261
|
+
await authorize(ctx, "sso.domain.manage", { connectionId: args.connectionId });
|
|
262
|
+
return await auth.group.sso.connection.domain.verification.confirm(ctx, args);
|
|
255
263
|
}
|
|
256
264
|
})
|
|
257
265
|
}
|
|
@@ -260,129 +268,197 @@ function sso(auth, options) {
|
|
|
260
268
|
oidc: {
|
|
261
269
|
configure: mutationGeneric({
|
|
262
270
|
args: {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
271
|
+
connectionId: v.string(),
|
|
272
|
+
discovery: v.object({
|
|
273
|
+
issuer: v.optional(v.string()),
|
|
274
|
+
discoveryUrl: v.optional(v.string()),
|
|
275
|
+
jwksUri: v.optional(v.string()),
|
|
276
|
+
audience: v.optional(v.union(v.string(), v.array(v.string())))
|
|
277
|
+
}),
|
|
278
|
+
client: v.object({
|
|
279
|
+
id: v.string(),
|
|
280
|
+
secret: v.optional(v.string()),
|
|
281
|
+
authMethod: v.optional(v.union(v.literal("client_secret_post"), v.literal("client_secret_basic")))
|
|
282
|
+
}),
|
|
283
|
+
request: v.optional(v.object({
|
|
284
|
+
scopes: v.optional(v.array(v.string())),
|
|
285
|
+
loginHint: v.optional(v.string()),
|
|
286
|
+
authorizationParams: v.optional(v.record(v.string(), v.string()))
|
|
287
|
+
})),
|
|
288
|
+
security: v.optional(v.object({
|
|
289
|
+
clockToleranceSeconds: v.optional(v.number()),
|
|
290
|
+
strictIssuer: v.optional(v.boolean())
|
|
291
|
+
})),
|
|
292
|
+
profile: v.optional(v.object({
|
|
293
|
+
mapping: v.optional(v.object({
|
|
294
|
+
subject: v.optional(v.string()),
|
|
295
|
+
email: v.optional(v.string()),
|
|
296
|
+
emailVerified: v.optional(v.string()),
|
|
297
|
+
name: v.optional(v.string()),
|
|
298
|
+
image: v.optional(v.string()),
|
|
299
|
+
groups: v.optional(v.string()),
|
|
300
|
+
roles: v.optional(v.string())
|
|
301
|
+
})),
|
|
302
|
+
extraFields: v.optional(v.record(v.string(), v.string()))
|
|
303
|
+
}))
|
|
273
304
|
},
|
|
274
305
|
handler: async (ctx, args) => {
|
|
275
|
-
await authorize(ctx, "sso.protocol.manage", {
|
|
276
|
-
return await auth.sso.
|
|
306
|
+
await authorize(ctx, "sso.protocol.manage", { connectionId: args.connectionId });
|
|
307
|
+
return await auth.group.sso.oidc.configure(ctx, {
|
|
308
|
+
...args,
|
|
309
|
+
connectionId: args.connectionId
|
|
310
|
+
});
|
|
277
311
|
}
|
|
278
312
|
}),
|
|
279
313
|
get: queryGeneric({
|
|
280
|
-
args: {
|
|
314
|
+
args: { connectionId: v.string() },
|
|
281
315
|
handler: async (ctx, args) => {
|
|
282
|
-
await authorize(ctx, "sso.connection.read", {
|
|
283
|
-
return await auth.sso.
|
|
316
|
+
await authorize(ctx, "sso.connection.read", { connectionId: args.connectionId });
|
|
317
|
+
return await auth.group.sso.oidc.get(ctx, args.connectionId);
|
|
284
318
|
}
|
|
285
319
|
}),
|
|
286
320
|
validate: actionGeneric({
|
|
287
|
-
args: {
|
|
321
|
+
args: { connectionId: v.string() },
|
|
288
322
|
handler: async (ctx, args) => {
|
|
289
|
-
await authorize(ctx, "sso.protocol.manage", {
|
|
290
|
-
return await auth.sso.
|
|
323
|
+
await authorize(ctx, "sso.protocol.manage", { connectionId: args.connectionId });
|
|
324
|
+
return await auth.group.sso.oidc.validate(ctx, args.connectionId);
|
|
325
|
+
}
|
|
326
|
+
}),
|
|
327
|
+
status: queryGeneric({
|
|
328
|
+
args: { connectionId: v.string() },
|
|
329
|
+
handler: async (ctx, args) => {
|
|
330
|
+
await authorize(ctx, "sso.connection.read", { connectionId: args.connectionId });
|
|
331
|
+
return await auth.group.sso.oidc.status(ctx, args.connectionId);
|
|
291
332
|
}
|
|
292
333
|
})
|
|
293
334
|
},
|
|
294
335
|
saml: {
|
|
295
336
|
configure: actionGeneric({
|
|
296
337
|
args: {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
338
|
+
connectionId: v.string(),
|
|
339
|
+
metadata: v.object({
|
|
340
|
+
xml: v.optional(v.string()),
|
|
341
|
+
url: v.optional(v.string())
|
|
342
|
+
}),
|
|
300
343
|
domains: v.optional(v.array(v.string())),
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
344
|
+
request: v.optional(v.object({
|
|
345
|
+
signAuthnRequests: v.optional(v.boolean()),
|
|
346
|
+
nameIdFormat: v.optional(v.string()),
|
|
347
|
+
forceAuthn: v.optional(v.boolean()),
|
|
348
|
+
authnContextClassRefs: v.optional(v.array(v.string()))
|
|
349
|
+
})),
|
|
350
|
+
profile: v.optional(v.object({
|
|
351
|
+
mapping: v.optional(ssoSamlAttributeMappingValidator),
|
|
352
|
+
extraFields: v.optional(v.record(v.string(), v.string()))
|
|
353
|
+
})),
|
|
354
|
+
security: v.optional(ssoSamlSecurityValidator),
|
|
355
|
+
serviceProvider: v.optional(ssoSamlSpValidator)
|
|
304
356
|
},
|
|
305
357
|
handler: async (ctx, args) => {
|
|
306
|
-
await authorize(ctx, "sso.protocol.manage", {
|
|
307
|
-
return await auth.sso.
|
|
358
|
+
await authorize(ctx, "sso.protocol.manage", { connectionId: args.connectionId });
|
|
359
|
+
return await auth.group.sso.saml.configure(ctx, {
|
|
360
|
+
...args,
|
|
361
|
+
connectionId: args.connectionId
|
|
362
|
+
});
|
|
308
363
|
}
|
|
309
364
|
}),
|
|
310
365
|
validate: queryGeneric({
|
|
311
|
-
args: {
|
|
366
|
+
args: { connectionId: v.string() },
|
|
367
|
+
handler: async (ctx, args) => {
|
|
368
|
+
await authorize(ctx, "sso.protocol.manage", { connectionId: args.connectionId });
|
|
369
|
+
return await auth.group.sso.saml.validate(ctx, args.connectionId);
|
|
370
|
+
}
|
|
371
|
+
}),
|
|
372
|
+
get: queryGeneric({
|
|
373
|
+
args: { connectionId: v.string() },
|
|
374
|
+
handler: async (ctx, args) => {
|
|
375
|
+
await authorize(ctx, "sso.connection.read", { connectionId: args.connectionId });
|
|
376
|
+
return await auth.group.sso.saml.get(ctx, args.connectionId);
|
|
377
|
+
}
|
|
378
|
+
}),
|
|
379
|
+
status: queryGeneric({
|
|
380
|
+
args: { connectionId: v.string() },
|
|
312
381
|
handler: async (ctx, args) => {
|
|
313
|
-
await authorize(ctx, "sso.
|
|
314
|
-
return await auth.sso.
|
|
382
|
+
await authorize(ctx, "sso.connection.read", { connectionId: args.connectionId });
|
|
383
|
+
return await auth.group.sso.saml.status(ctx, args.connectionId);
|
|
384
|
+
}
|
|
385
|
+
}),
|
|
386
|
+
refresh: actionGeneric({
|
|
387
|
+
args: { connectionId: v.string() },
|
|
388
|
+
handler: async (ctx, args) => {
|
|
389
|
+
await authorize(ctx, "sso.protocol.manage", { connectionId: args.connectionId });
|
|
390
|
+
return await auth.group.sso.saml.refresh(ctx, args);
|
|
315
391
|
}
|
|
316
392
|
})
|
|
317
393
|
},
|
|
318
394
|
policy: {
|
|
319
395
|
get: queryGeneric({
|
|
320
|
-
args: {
|
|
396
|
+
args: { groupId: v.string() },
|
|
321
397
|
handler: async (ctx, args) => {
|
|
322
|
-
await authorize(ctx, "sso.
|
|
323
|
-
return await auth.sso.
|
|
398
|
+
await authorize(ctx, "sso.policy.manage", { groupId: args.groupId });
|
|
399
|
+
return await auth.group.sso.policy.get(ctx, args.groupId);
|
|
324
400
|
}
|
|
325
401
|
}),
|
|
326
402
|
update: mutationGeneric({
|
|
327
403
|
args: {
|
|
328
|
-
|
|
329
|
-
patch:
|
|
404
|
+
groupId: v.string(),
|
|
405
|
+
patch: groupPolicyPatchValidator
|
|
330
406
|
},
|
|
331
407
|
handler: async (ctx, args) => {
|
|
332
|
-
await authorize(ctx, "sso.policy.manage", {
|
|
333
|
-
return await auth.sso.
|
|
408
|
+
await authorize(ctx, "sso.policy.manage", { groupId: args.groupId });
|
|
409
|
+
return await auth.group.sso.policy.update(ctx, args.groupId, args.patch);
|
|
334
410
|
}
|
|
335
411
|
}),
|
|
336
412
|
validate: queryGeneric({
|
|
337
|
-
args: {
|
|
413
|
+
args: { groupId: v.string() },
|
|
338
414
|
handler: async (ctx, args) => {
|
|
339
|
-
await authorize(ctx, "sso.policy.manage", {
|
|
340
|
-
return await auth.sso.
|
|
415
|
+
await authorize(ctx, "sso.policy.manage", { groupId: args.groupId });
|
|
416
|
+
return await auth.group.sso.policy.validate(ctx, args.groupId);
|
|
341
417
|
}
|
|
342
418
|
})
|
|
343
419
|
},
|
|
344
420
|
audit: { list: queryGeneric({
|
|
345
421
|
args: {
|
|
346
|
-
enterpriseId: v.optional(v.string()),
|
|
347
422
|
groupId: v.optional(v.string()),
|
|
423
|
+
connectionId: v.optional(v.string()),
|
|
348
424
|
limit: v.optional(v.number())
|
|
349
425
|
},
|
|
350
426
|
handler: async (ctx, args) => {
|
|
351
427
|
await authorize(ctx, "sso.audit.read", {
|
|
352
|
-
|
|
428
|
+
connectionId: args.connectionId,
|
|
353
429
|
groupId: args.groupId
|
|
354
430
|
});
|
|
355
|
-
return await auth.sso.
|
|
431
|
+
return await auth.group.sso.audit.list(ctx, args);
|
|
356
432
|
}
|
|
357
433
|
}) },
|
|
358
434
|
webhook: {
|
|
359
435
|
delivery: { list: queryGeneric({
|
|
360
436
|
args: {
|
|
361
|
-
|
|
437
|
+
connectionId: v.string(),
|
|
362
438
|
limit: v.optional(v.number())
|
|
363
439
|
},
|
|
364
440
|
handler: async (ctx, args) => {
|
|
365
|
-
await authorize(ctx, "sso.webhook.manage", {
|
|
366
|
-
return await auth.sso.
|
|
441
|
+
await authorize(ctx, "sso.webhook.manage", { connectionId: args.connectionId });
|
|
442
|
+
return await auth.group.sso.webhook.delivery.list(ctx, args);
|
|
367
443
|
}
|
|
368
444
|
}) },
|
|
369
445
|
endpoint: {
|
|
370
446
|
create: mutationGeneric({
|
|
371
447
|
args: {
|
|
372
|
-
|
|
448
|
+
connectionId: v.string(),
|
|
373
449
|
url: v.string(),
|
|
374
450
|
secret: v.string(),
|
|
375
451
|
subscriptions: v.array(v.string()),
|
|
376
452
|
createdByUserId: v.optional(v.string())
|
|
377
453
|
},
|
|
378
454
|
handler: async (ctx, args) => {
|
|
379
|
-
const { userId } = await authorize(ctx, "sso.webhook.manage", {
|
|
455
|
+
const { userId } = await authorize(ctx, "sso.webhook.manage", { connectionId: args.connectionId });
|
|
380
456
|
return {
|
|
381
|
-
_id: (await auth.sso.
|
|
457
|
+
_id: (await auth.group.sso.webhook.endpoint.create(ctx, {
|
|
382
458
|
...args,
|
|
383
459
|
createdByUserId: args.createdByUserId ?? userId
|
|
384
460
|
})).endpointId,
|
|
385
|
-
|
|
461
|
+
connectionId: args.connectionId,
|
|
386
462
|
url: args.url,
|
|
387
463
|
subscriptions: args.subscriptions,
|
|
388
464
|
createdByUserId: args.createdByUserId ?? userId,
|
|
@@ -392,10 +468,10 @@ function sso(auth, options) {
|
|
|
392
468
|
}
|
|
393
469
|
}),
|
|
394
470
|
list: queryGeneric({
|
|
395
|
-
args: {
|
|
471
|
+
args: { connectionId: v.string() },
|
|
396
472
|
handler: async (ctx, args) => {
|
|
397
|
-
await authorize(ctx, "sso.webhook.manage", {
|
|
398
|
-
return (await auth.sso.
|
|
473
|
+
await authorize(ctx, "sso.webhook.manage", { connectionId: args.connectionId });
|
|
474
|
+
return (await auth.group.sso.webhook.endpoint.list(ctx, args.connectionId)).map((endpoint) => {
|
|
399
475
|
const { secretHash: _secretHash, ...rest } = endpoint;
|
|
400
476
|
return rest;
|
|
401
477
|
});
|
|
@@ -404,16 +480,16 @@ function sso(auth, options) {
|
|
|
404
480
|
disable: mutationGeneric({
|
|
405
481
|
args: { endpointId: v.string() },
|
|
406
482
|
handler: async (ctx, args) => {
|
|
407
|
-
const endpoint = await auth.sso.
|
|
408
|
-
if (!endpoint) throw
|
|
483
|
+
const endpoint = await auth.group.sso.webhook.endpoint.get(ctx, args.endpointId);
|
|
484
|
+
if (!endpoint) throw new ConvexError({
|
|
409
485
|
code: "INVALID_PARAMETERS",
|
|
410
486
|
message: "Webhook endpoint not found."
|
|
411
487
|
});
|
|
412
488
|
await authorize(ctx, "sso.webhook.manage", {
|
|
413
|
-
|
|
489
|
+
connectionId: endpoint.connectionId,
|
|
414
490
|
groupId: endpoint.groupId
|
|
415
491
|
});
|
|
416
|
-
return await auth.sso.
|
|
492
|
+
return await auth.group.sso.webhook.endpoint.disable(ctx, args.endpointId);
|
|
417
493
|
}
|
|
418
494
|
})
|
|
419
495
|
}
|
|
@@ -422,24 +498,31 @@ function sso(auth, options) {
|
|
|
422
498
|
client: {
|
|
423
499
|
signIn: queryGeneric({
|
|
424
500
|
args: {
|
|
425
|
-
|
|
501
|
+
connectionId: v.optional(v.string()),
|
|
426
502
|
email: v.optional(v.string()),
|
|
427
503
|
domain: v.optional(v.string()),
|
|
428
|
-
redirectTo: v.optional(v.string())
|
|
504
|
+
redirectTo: v.optional(v.string()),
|
|
505
|
+
loginHint: v.optional(v.string())
|
|
429
506
|
},
|
|
430
507
|
handler: async (ctx, args) => {
|
|
431
|
-
return await auth.sso.
|
|
508
|
+
return await auth.group.sso.signIn(ctx, {
|
|
509
|
+
...args,
|
|
510
|
+
connectionId: args.connectionId
|
|
511
|
+
});
|
|
432
512
|
}
|
|
433
513
|
}),
|
|
434
514
|
metadata: queryGeneric({
|
|
435
515
|
args: {
|
|
436
|
-
|
|
516
|
+
connectionId: v.string(),
|
|
437
517
|
entityId: v.optional(v.string()),
|
|
438
518
|
acsUrl: v.optional(v.string()),
|
|
439
519
|
sloUrl: v.optional(v.string())
|
|
440
520
|
},
|
|
441
521
|
handler: async (ctx, args) => {
|
|
442
|
-
return await auth.sso.
|
|
522
|
+
return await auth.group.sso.metadata(ctx, {
|
|
523
|
+
...args,
|
|
524
|
+
connectionId: args.connectionId
|
|
525
|
+
});
|
|
443
526
|
}
|
|
444
527
|
})
|
|
445
528
|
}
|
|
@@ -447,23 +530,26 @@ function sso(auth, options) {
|
|
|
447
530
|
}
|
|
448
531
|
/**
|
|
449
532
|
* Build optional public SCIM management actions that apps can mount under
|
|
450
|
-
* `convex/auth/
|
|
533
|
+
* `convex/auth/group/**` when they want client-callable group SSO admin APIs.
|
|
451
534
|
*
|
|
452
|
-
* @param auth - Auth API subset providing `
|
|
453
|
-
* @param options - Optional admin
|
|
535
|
+
* @param auth - Auth API subset providing `group` and `context` namespaces.
|
|
536
|
+
* @param options - Optional admin access config. See {@link CreateAuthGroupSsoOptions}.
|
|
454
537
|
* @typeParam TAuthorization - Optional authorization config for typed role IDs.
|
|
538
|
+
* @typeParam TRequirement - App-defined requirement values used by declarative
|
|
539
|
+
* `permissions` configs.
|
|
455
540
|
* @returns An object with `admin.configure`, `admin.get`, and `admin.validate` actions.
|
|
456
541
|
*
|
|
457
542
|
* @example
|
|
458
543
|
* ```ts
|
|
459
|
-
* // convex/auth/
|
|
544
|
+
* // convex/auth/group.ts
|
|
460
545
|
* import { scim } from "@robelest/convex-auth/server";
|
|
461
546
|
* import { auth } from "../auth";
|
|
462
547
|
*
|
|
463
548
|
* const mounted = scim(auth, {
|
|
464
|
-
*
|
|
465
|
-
*
|
|
549
|
+
* permissions: {
|
|
550
|
+
* scim: { require: ["workspace.scim.manage"] },
|
|
466
551
|
* },
|
|
552
|
+
* access: async (_ctx, _input, _required) => {},
|
|
467
553
|
* });
|
|
468
554
|
*
|
|
469
555
|
* export const configure = mounted.admin.configure;
|
|
@@ -472,63 +558,91 @@ function sso(auth, options) {
|
|
|
472
558
|
* ```
|
|
473
559
|
*
|
|
474
560
|
* @see {@link sso}
|
|
475
|
-
* @see {@link
|
|
561
|
+
* @see {@link createAuthGroupSso}
|
|
476
562
|
*/
|
|
477
563
|
function scim(auth, options) {
|
|
478
564
|
const authorize = createMountedAdminAuthorizer(auth, options);
|
|
479
565
|
return { admin: {
|
|
480
566
|
configure: mutationGeneric({
|
|
481
567
|
args: {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
568
|
+
connectionId: v.string(),
|
|
569
|
+
status: v.optional(groupConnectionStatusValidator),
|
|
570
|
+
security: v.optional(v.object({ maxRequestSize: v.optional(v.number()) })),
|
|
571
|
+
profile: v.optional(v.object({
|
|
572
|
+
mapping: v.optional(v.object({
|
|
573
|
+
subject: v.optional(v.string()),
|
|
574
|
+
externalId: v.optional(v.string()),
|
|
575
|
+
email: v.optional(v.string()),
|
|
576
|
+
firstName: v.optional(v.string()),
|
|
577
|
+
lastName: v.optional(v.string()),
|
|
578
|
+
name: v.optional(v.string()),
|
|
579
|
+
phone: v.optional(v.string()),
|
|
580
|
+
active: v.optional(v.string()),
|
|
581
|
+
groups: v.optional(v.string()),
|
|
582
|
+
roles: v.optional(v.string())
|
|
583
|
+
})),
|
|
584
|
+
extraFields: v.optional(v.record(v.string(), v.string()))
|
|
585
|
+
}))
|
|
485
586
|
},
|
|
486
587
|
handler: async (ctx, args) => {
|
|
487
|
-
await authorize(ctx, "scim.manage", {
|
|
488
|
-
return await auth.scim.
|
|
588
|
+
await authorize(ctx, "scim.manage", { connectionId: args.connectionId });
|
|
589
|
+
return await auth.group.sso.scim.configure(ctx, {
|
|
590
|
+
...args,
|
|
591
|
+
connectionId: args.connectionId
|
|
592
|
+
});
|
|
489
593
|
}
|
|
490
594
|
}),
|
|
491
595
|
get: queryGeneric({
|
|
492
|
-
args: {
|
|
596
|
+
args: { connectionId: v.string() },
|
|
597
|
+
handler: async (ctx, args) => {
|
|
598
|
+
await authorize(ctx, "scim.manage", { connectionId: args.connectionId });
|
|
599
|
+
return await auth.group.sso.scim.get(ctx, args.connectionId);
|
|
600
|
+
}
|
|
601
|
+
}),
|
|
602
|
+
status: queryGeneric({
|
|
603
|
+
args: { connectionId: v.string() },
|
|
493
604
|
handler: async (ctx, args) => {
|
|
494
|
-
await authorize(ctx, "scim.manage", {
|
|
495
|
-
return await auth.scim.
|
|
605
|
+
await authorize(ctx, "scim.manage", { connectionId: args.connectionId });
|
|
606
|
+
return await auth.group.sso.scim.status(ctx, args.connectionId);
|
|
496
607
|
}
|
|
497
608
|
}),
|
|
498
609
|
validate: queryGeneric({
|
|
499
|
-
args: {
|
|
610
|
+
args: { connectionId: v.string() },
|
|
500
611
|
handler: async (ctx, args) => {
|
|
501
|
-
await authorize(ctx, "scim.manage", {
|
|
502
|
-
return await auth.scim.
|
|
612
|
+
await authorize(ctx, "scim.manage", { connectionId: args.connectionId });
|
|
613
|
+
return await auth.group.sso.scim.validate(ctx, args.connectionId);
|
|
503
614
|
}
|
|
504
615
|
})
|
|
505
616
|
} };
|
|
506
617
|
}
|
|
507
618
|
/**
|
|
508
|
-
* Build a flat mounted
|
|
619
|
+
* Build a flat mounted group SSO API surface for app-owned Convex exports.
|
|
509
620
|
*
|
|
510
621
|
* Combines {@link sso} and {@link scim} into a single flat object with
|
|
511
622
|
* all SSO connection, protocol, policy, audit, webhook, and SCIM
|
|
512
|
-
* management functions plus end-user sign-in helpers. The `
|
|
513
|
-
*
|
|
623
|
+
* management functions plus end-user sign-in helpers. The `access`
|
|
624
|
+
* config is required for all admin operations.
|
|
514
625
|
*
|
|
515
|
-
* @param auth - Auth API subset providing `group`, `member`,
|
|
516
|
-
* @param options - Required {@link
|
|
626
|
+
* @param auth - Auth API subset providing `group`, `member`, and `context` namespaces.
|
|
627
|
+
* @param options - Required {@link CreateAuthGroupSsoOptions} with an `access` policy.
|
|
517
628
|
* @typeParam TAuthorization - Optional authorization config for typed role IDs.
|
|
518
|
-
* @
|
|
629
|
+
* @typeParam TRequirement - App-defined requirement values used by declarative
|
|
630
|
+
* `permissions` configs.
|
|
631
|
+
* @returns A flat object with all group connection management functions (e.g. `createConnection`,
|
|
519
632
|
* `configureOidc`, `configureScim`, `signIn`, etc.).
|
|
520
633
|
*
|
|
521
634
|
* @example
|
|
522
635
|
* ```ts
|
|
523
|
-
* // convex/auth/
|
|
524
|
-
* import {
|
|
636
|
+
* // convex/auth/group.ts
|
|
637
|
+
* import { createAuthGroupSso } from "@robelest/convex-auth/server";
|
|
525
638
|
* import { auth } from "../auth";
|
|
526
639
|
*
|
|
527
|
-
* const api =
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
*
|
|
640
|
+
* const api = createAuthGroupSso(auth, {
|
|
641
|
+
* permissions: {
|
|
642
|
+
* sso: { require: ["workspace.sso.manage"] },
|
|
643
|
+
* scim: { require: ["workspace.scim.manage"] },
|
|
531
644
|
* },
|
|
645
|
+
* access: async (_ctx, _input, _required) => {},
|
|
532
646
|
* });
|
|
533
647
|
*
|
|
534
648
|
* export const createConnection = api.createConnection;
|
|
@@ -539,28 +653,32 @@ function scim(auth, options) {
|
|
|
539
653
|
* @see {@link sso}
|
|
540
654
|
* @see {@link scim}
|
|
541
655
|
*/
|
|
542
|
-
function
|
|
543
|
-
const mountedSso = sso(auth,
|
|
544
|
-
const mountedScim = scim(auth,
|
|
656
|
+
function createAuthGroupSso(auth, options) {
|
|
657
|
+
const mountedSso = sso(auth, options);
|
|
658
|
+
const mountedScim = scim(auth, options);
|
|
545
659
|
return {
|
|
546
660
|
createConnection: mountedSso.admin.connection.create,
|
|
547
661
|
getConnection: mountedSso.admin.connection.get,
|
|
548
|
-
getConnectionByGroup: mountedSso.admin.connection.getByGroup,
|
|
549
662
|
getConnectionByDomain: mountedSso.admin.connection.getByDomain,
|
|
550
663
|
listConnections: mountedSso.admin.connection.list,
|
|
551
664
|
updateConnection: mountedSso.admin.connection.update,
|
|
552
665
|
deleteConnection: mountedSso.admin.connection.delete,
|
|
553
666
|
getConnectionStatus: mountedSso.admin.connection.status,
|
|
554
667
|
listDomains: mountedSso.admin.connection.domain.list,
|
|
668
|
+
getDomainStatus: mountedSso.admin.connection.domain.status,
|
|
555
669
|
validateDomains: mountedSso.admin.connection.domain.validate,
|
|
556
670
|
setDomains: mountedSso.admin.connection.domain.set,
|
|
557
671
|
requestDomainVerification: mountedSso.admin.connection.domain.verification.request,
|
|
558
672
|
confirmDomainVerification: mountedSso.admin.connection.domain.verification.confirm,
|
|
559
673
|
configureOidc: mountedSso.admin.oidc.configure,
|
|
560
674
|
getOidc: mountedSso.admin.oidc.get,
|
|
675
|
+
getOidcStatus: mountedSso.admin.oidc.status,
|
|
561
676
|
validateOidc: mountedSso.admin.oidc.validate,
|
|
562
677
|
configureSaml: mountedSso.admin.saml.configure,
|
|
678
|
+
getSaml: mountedSso.admin.saml.get,
|
|
679
|
+
getSamlStatus: mountedSso.admin.saml.status,
|
|
563
680
|
validateSaml: mountedSso.admin.saml.validate,
|
|
681
|
+
refreshSaml: mountedSso.admin.saml.refresh,
|
|
564
682
|
getPolicy: mountedSso.admin.policy.get,
|
|
565
683
|
updatePolicy: mountedSso.admin.policy.update,
|
|
566
684
|
validatePolicy: mountedSso.admin.policy.validate,
|
|
@@ -571,6 +689,7 @@ function enterprise(auth, options) {
|
|
|
571
689
|
disableWebhookEndpoint: mountedSso.admin.webhook.endpoint.disable,
|
|
572
690
|
configureScim: mountedScim.admin.configure,
|
|
573
691
|
getScim: mountedScim.admin.get,
|
|
692
|
+
getScimStatus: mountedScim.admin.status,
|
|
574
693
|
validateScim: mountedScim.admin.validate,
|
|
575
694
|
signIn: mountedSso.client.signIn,
|
|
576
695
|
metadata: mountedSso.client.metadata
|
|
@@ -578,5 +697,5 @@ function enterprise(auth, options) {
|
|
|
578
697
|
}
|
|
579
698
|
|
|
580
699
|
//#endregion
|
|
581
|
-
export {
|
|
700
|
+
export { createAuthGroupSso, scim, sso };
|
|
582
701
|
//# sourceMappingURL=mounts.js.map
|