@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.
Files changed (666) hide show
  1. package/README.md +43 -36
  2. package/dist/bin.js +5765 -4880
  3. package/dist/browser/index.d.ts +30 -0
  4. package/dist/browser/index.js +93 -0
  5. package/dist/browser/locks.js +11 -0
  6. package/dist/browser/navigation.js +14 -0
  7. package/dist/{factors → browser}/passkey.js +23 -32
  8. package/dist/browser/runtime.js +92 -0
  9. package/dist/client/core/types.d.ts +452 -5
  10. package/dist/client/core/types.js +17 -0
  11. package/dist/client/errors.js +19 -0
  12. package/dist/client/factors/device.js +94 -0
  13. package/dist/{factors → client/factors}/totp.js +12 -4
  14. package/dist/client/index.d.ts +47 -1
  15. package/dist/client/index.js +269 -232
  16. package/dist/client/runtime/mutex.js +24 -0
  17. package/dist/client/runtime/proxy.js +30 -0
  18. package/dist/client/runtime/storage.js +45 -0
  19. package/dist/client/services/adapters.js +7 -0
  20. package/dist/client/services/http.js +6 -0
  21. package/dist/client/services/resolve.js +13 -0
  22. package/dist/client/services/runtime.js +6 -0
  23. package/dist/component/_generated/component.d.ts +1355 -1399
  24. package/dist/component/convex.config.d.ts +2 -2
  25. package/dist/component/index.d.ts +4 -26
  26. package/dist/component/index.js +1 -1
  27. package/dist/component/model.d.ts +26 -112
  28. package/dist/component/model.js +76 -54
  29. package/dist/component/modules.js +38 -0
  30. package/dist/component/public/factors/devices.js +1 -1
  31. package/dist/component/public/factors/passkeys.js +1 -1
  32. package/dist/component/public/factors/totp.js +1 -1
  33. package/dist/component/public/groups/core.js +2 -2
  34. package/dist/component/public/groups/invites.js +1 -1
  35. package/dist/component/public/groups/members.js +1 -1
  36. package/dist/component/public/identity/accounts.js +1 -1
  37. package/dist/component/public/identity/codes.js +1 -1
  38. package/dist/component/public/identity/sessions.js +39 -2
  39. package/dist/component/public/identity/tokens.js +82 -4
  40. package/dist/component/public/identity/users.js +1 -1
  41. package/dist/component/public/identity/verifiers.js +10 -4
  42. package/dist/component/public/security/keys.js +1 -1
  43. package/dist/component/public/security/limits.js +1 -1
  44. package/dist/component/public/{enterprise → sso}/audit.js +26 -26
  45. package/dist/component/public/sso/core.js +263 -0
  46. package/dist/component/public/sso/domains.js +280 -0
  47. package/dist/component/public/{enterprise → sso}/scim.js +87 -87
  48. package/dist/component/public/sso/secrets.js +125 -0
  49. package/dist/component/public/{enterprise → sso}/webhooks.js +59 -59
  50. package/dist/component/public.js +9 -9
  51. package/dist/component/schema.d.ts +472 -393
  52. package/dist/component/schema.js +36 -35
  53. package/dist/core/index.d.ts +380 -0
  54. package/dist/core/index.js +83 -0
  55. package/dist/otel.d.ts +69 -0
  56. package/dist/otel.js +82 -0
  57. package/dist/providers/anonymous.d.ts +15 -34
  58. package/dist/providers/anonymous.js +27 -35
  59. package/dist/providers/apple.d.ts +59 -0
  60. package/dist/providers/apple.js +58 -0
  61. package/dist/providers/credentials.d.ts +18 -34
  62. package/dist/providers/credentials.js +16 -27
  63. package/dist/providers/custom.d.ts +94 -0
  64. package/dist/providers/custom.js +119 -0
  65. package/dist/providers/device.d.ts +15 -49
  66. package/dist/providers/device.js +17 -34
  67. package/dist/providers/email.d.ts +21 -38
  68. package/dist/providers/email.js +36 -55
  69. package/dist/providers/github.d.ts +54 -0
  70. package/dist/providers/github.js +75 -0
  71. package/dist/providers/google.d.ts +54 -0
  72. package/dist/providers/google.js +61 -0
  73. package/dist/providers/index.d.ts +16 -12
  74. package/dist/providers/index.js +15 -11
  75. package/dist/providers/microsoft.d.ts +57 -0
  76. package/dist/providers/microsoft.js +101 -0
  77. package/dist/providers/passkey.d.ts +19 -35
  78. package/dist/providers/passkey.js +20 -30
  79. package/dist/providers/password.d.ts +17 -18
  80. package/dist/providers/password.js +121 -143
  81. package/dist/providers/phone.d.ts +13 -28
  82. package/dist/providers/phone.js +21 -46
  83. package/dist/providers/sso.d.ts +16 -36
  84. package/dist/providers/sso.js +21 -22
  85. package/dist/providers/totp.d.ts +13 -29
  86. package/dist/providers/totp.js +17 -27
  87. package/dist/server/auth-context.d.ts +204 -0
  88. package/dist/server/auth-context.js +76 -0
  89. package/dist/server/auth.d.ts +99 -244
  90. package/dist/server/auth.js +56 -152
  91. package/dist/server/componentContext.d.ts +12 -0
  92. package/dist/server/componentContext.js +1 -0
  93. package/dist/server/config.js +6 -67
  94. package/dist/server/constants.js +6 -0
  95. package/dist/server/contract.d.ts +105 -0
  96. package/dist/server/contract.js +43 -0
  97. package/dist/server/cookies.js +3 -2
  98. package/dist/server/core.js +31 -36
  99. package/dist/server/crypto.js +34 -44
  100. package/dist/server/db.js +6 -1
  101. package/dist/server/device.js +96 -130
  102. package/dist/server/env.js +48 -0
  103. package/dist/server/errors.js +20 -0
  104. package/dist/server/http.d.ts +15 -59
  105. package/dist/server/http.js +136 -120
  106. package/dist/server/identity.js +2 -2
  107. package/dist/server/index.d.ts +5 -4
  108. package/dist/server/index.js +3 -3
  109. package/dist/server/keys.js +10 -1
  110. package/dist/server/limits.js +26 -26
  111. package/dist/server/log.js +28 -0
  112. package/dist/server/mounts.d.ts +1107 -296
  113. package/dist/server/mounts.js +315 -196
  114. package/dist/server/mutations/account.js +11 -14
  115. package/dist/server/mutations/code.js +6 -5
  116. package/dist/server/mutations/invalidate.js +9 -11
  117. package/dist/server/mutations/oauth.js +112 -73
  118. package/dist/server/mutations/refresh.js +47 -97
  119. package/dist/server/mutations/register.js +37 -35
  120. package/dist/server/mutations/retrieve.js +16 -16
  121. package/dist/server/mutations/signature.js +15 -18
  122. package/dist/server/mutations/signin.js +10 -5
  123. package/dist/server/mutations/signout.js +11 -14
  124. package/dist/server/mutations/store.js +25 -18
  125. package/dist/server/mutations/verifier.js +11 -8
  126. package/dist/server/mutations/verify.js +53 -41
  127. package/dist/server/oauth/factory.js +44 -0
  128. package/dist/server/oauth/index.js +12 -0
  129. package/dist/server/oauth/runtime.js +248 -0
  130. package/dist/server/passkey.js +331 -365
  131. package/dist/server/payloads.d.ts +16 -0
  132. package/dist/server/payloads.js +30 -0
  133. package/dist/server/{ssr.d.ts → prefetch.d.ts} +2 -2
  134. package/dist/server/prefetch.js +635 -0
  135. package/dist/server/random.js +19 -0
  136. package/dist/server/redirects.js +10 -5
  137. package/dist/server/refresh.js +14 -86
  138. package/dist/server/runtime.d.ts +531 -31
  139. package/dist/server/runtime.js +106 -267
  140. package/dist/server/secret.js +44 -0
  141. package/dist/server/services/config.js +10 -0
  142. package/dist/server/services/group.js +211 -0
  143. package/dist/server/services/logger.js +8 -0
  144. package/dist/server/services/providers.js +22 -0
  145. package/dist/server/services/refresh.js +8 -0
  146. package/dist/server/services/resolve.js +27 -0
  147. package/dist/server/services/signin.js +8 -0
  148. package/dist/server/sessions.js +35 -34
  149. package/dist/server/signin.js +229 -140
  150. package/dist/server/{enterprise → sso}/config.js +10 -3
  151. package/dist/server/sso/domain.d.ts +614 -0
  152. package/dist/server/sso/domain.js +1175 -0
  153. package/dist/server/sso/http.js +1060 -0
  154. package/dist/server/sso/oidc.js +324 -0
  155. package/dist/server/sso/policies.js +59 -0
  156. package/dist/server/sso/policy.js +139 -0
  157. package/dist/server/sso/profile.js +22 -0
  158. package/dist/server/sso/provision.js +179 -0
  159. package/dist/{component/server/enterprise → server/sso}/saml.js +142 -56
  160. package/dist/{component/server/enterprise → server/sso}/scim.js +13 -7
  161. package/dist/server/sso/shared.js +74 -0
  162. package/dist/server/sso/validators.js +88 -0
  163. package/dist/server/sso/webhook.js +94 -0
  164. package/dist/server/tokens.js +16 -4
  165. package/dist/server/totp.js +155 -164
  166. package/dist/server/types.d.ts +306 -296
  167. package/dist/server/types.js +1 -30
  168. package/dist/server/url.js +32 -0
  169. package/dist/server/users.js +74 -40
  170. package/dist/server/utils/cache.js +51 -0
  171. package/dist/server/utils/dispatch.js +36 -0
  172. package/dist/server/utils/retry.js +24 -0
  173. package/dist/server/utils/span.js +32 -0
  174. package/dist/shared/errors.js +19 -0
  175. package/dist/shared/log.js +45 -0
  176. package/{src/test.ts → dist/test.d.ts} +21 -22
  177. package/dist/test.js +51 -0
  178. package/package.json +70 -42
  179. package/dist/authorization/index.d.ts.map +0 -1
  180. package/dist/authorization/index.js.map +0 -1
  181. package/dist/client/core/types.d.ts.map +0 -1
  182. package/dist/client/index.d.ts.map +0 -1
  183. package/dist/client/index.js.map +0 -1
  184. package/dist/component/_generated/api.d.ts +0 -75
  185. package/dist/component/_generated/api.d.ts.map +0 -1
  186. package/dist/component/_generated/api.js.map +0 -1
  187. package/dist/component/_generated/component.d.ts.map +0 -1
  188. package/dist/component/_generated/dataModel.d.ts +0 -42
  189. package/dist/component/_generated/dataModel.d.ts.map +0 -1
  190. package/dist/component/_generated/server.d.ts +0 -117
  191. package/dist/component/_generated/server.d.ts.map +0 -1
  192. package/dist/component/_generated/server.js.map +0 -1
  193. package/dist/component/_virtual/rolldown_runtime.js +0 -18
  194. package/dist/component/client/core/types.d.ts +0 -2
  195. package/dist/component/client/index.d.ts +0 -1
  196. package/dist/component/convex.config.d.ts.map +0 -1
  197. package/dist/component/convex.config.js.map +0 -1
  198. package/dist/component/functions.d.ts +0 -25
  199. package/dist/component/functions.d.ts.map +0 -1
  200. package/dist/component/functions.js.map +0 -1
  201. package/dist/component/index.d.ts.map +0 -1
  202. package/dist/component/model.d.ts.map +0 -1
  203. package/dist/component/model.js.map +0 -1
  204. package/dist/component/providers/anonymous.d.ts +0 -54
  205. package/dist/component/providers/anonymous.d.ts.map +0 -1
  206. package/dist/component/providers/credentials.d.ts +0 -38
  207. package/dist/component/providers/credentials.d.ts.map +0 -1
  208. package/dist/component/providers/device.d.ts +0 -67
  209. package/dist/component/providers/device.d.ts.map +0 -1
  210. package/dist/component/providers/email.d.ts +0 -62
  211. package/dist/component/providers/email.d.ts.map +0 -1
  212. package/dist/component/providers/oauth.d.ts +0 -25
  213. package/dist/component/providers/oauth.d.ts.map +0 -1
  214. package/dist/component/providers/oauth.js +0 -13
  215. package/dist/component/providers/oauth.js.map +0 -1
  216. package/dist/component/providers/passkey.d.ts +0 -57
  217. package/dist/component/providers/passkey.d.ts.map +0 -1
  218. package/dist/component/providers/password.d.ts +0 -88
  219. package/dist/component/providers/password.d.ts.map +0 -1
  220. package/dist/component/providers/phone.d.ts +0 -48
  221. package/dist/component/providers/phone.d.ts.map +0 -1
  222. package/dist/component/providers/sso.d.ts +0 -50
  223. package/dist/component/providers/sso.d.ts.map +0 -1
  224. package/dist/component/providers/totp.d.ts +0 -45
  225. package/dist/component/providers/totp.d.ts.map +0 -1
  226. package/dist/component/public/enterprise/audit.d.ts +0 -73
  227. package/dist/component/public/enterprise/audit.d.ts.map +0 -1
  228. package/dist/component/public/enterprise/audit.js.map +0 -1
  229. package/dist/component/public/enterprise/core.d.ts +0 -176
  230. package/dist/component/public/enterprise/core.d.ts.map +0 -1
  231. package/dist/component/public/enterprise/core.js +0 -292
  232. package/dist/component/public/enterprise/core.js.map +0 -1
  233. package/dist/component/public/enterprise/domains.d.ts +0 -174
  234. package/dist/component/public/enterprise/domains.d.ts.map +0 -1
  235. package/dist/component/public/enterprise/domains.js +0 -271
  236. package/dist/component/public/enterprise/domains.js.map +0 -1
  237. package/dist/component/public/enterprise/scim.d.ts +0 -245
  238. package/dist/component/public/enterprise/scim.d.ts.map +0 -1
  239. package/dist/component/public/enterprise/scim.js.map +0 -1
  240. package/dist/component/public/enterprise/secrets.d.ts +0 -78
  241. package/dist/component/public/enterprise/secrets.d.ts.map +0 -1
  242. package/dist/component/public/enterprise/secrets.js +0 -118
  243. package/dist/component/public/enterprise/secrets.js.map +0 -1
  244. package/dist/component/public/enterprise/webhooks.d.ts +0 -211
  245. package/dist/component/public/enterprise/webhooks.d.ts.map +0 -1
  246. package/dist/component/public/enterprise/webhooks.js.map +0 -1
  247. package/dist/component/public/factors/devices.d.ts +0 -157
  248. package/dist/component/public/factors/devices.d.ts.map +0 -1
  249. package/dist/component/public/factors/devices.js.map +0 -1
  250. package/dist/component/public/factors/passkeys.d.ts +0 -175
  251. package/dist/component/public/factors/passkeys.d.ts.map +0 -1
  252. package/dist/component/public/factors/passkeys.js.map +0 -1
  253. package/dist/component/public/factors/totp.d.ts +0 -189
  254. package/dist/component/public/factors/totp.d.ts.map +0 -1
  255. package/dist/component/public/factors/totp.js.map +0 -1
  256. package/dist/component/public/groups/core.d.ts +0 -137
  257. package/dist/component/public/groups/core.d.ts.map +0 -1
  258. package/dist/component/public/groups/core.js.map +0 -1
  259. package/dist/component/public/groups/invites.d.ts +0 -217
  260. package/dist/component/public/groups/invites.d.ts.map +0 -1
  261. package/dist/component/public/groups/invites.js.map +0 -1
  262. package/dist/component/public/groups/members.d.ts +0 -204
  263. package/dist/component/public/groups/members.d.ts.map +0 -1
  264. package/dist/component/public/groups/members.js.map +0 -1
  265. package/dist/component/public/identity/accounts.d.ts +0 -147
  266. package/dist/component/public/identity/accounts.d.ts.map +0 -1
  267. package/dist/component/public/identity/accounts.js.map +0 -1
  268. package/dist/component/public/identity/codes.d.ts +0 -104
  269. package/dist/component/public/identity/codes.d.ts.map +0 -1
  270. package/dist/component/public/identity/codes.js.map +0 -1
  271. package/dist/component/public/identity/sessions.d.ts +0 -128
  272. package/dist/component/public/identity/sessions.d.ts.map +0 -1
  273. package/dist/component/public/identity/sessions.js.map +0 -1
  274. package/dist/component/public/identity/tokens.d.ts +0 -169
  275. package/dist/component/public/identity/tokens.d.ts.map +0 -1
  276. package/dist/component/public/identity/tokens.js.map +0 -1
  277. package/dist/component/public/identity/users.d.ts +0 -212
  278. package/dist/component/public/identity/users.d.ts.map +0 -1
  279. package/dist/component/public/identity/users.js.map +0 -1
  280. package/dist/component/public/identity/verifiers.d.ts +0 -116
  281. package/dist/component/public/identity/verifiers.d.ts.map +0 -1
  282. package/dist/component/public/identity/verifiers.js.map +0 -1
  283. package/dist/component/public/security/keys.d.ts +0 -209
  284. package/dist/component/public/security/keys.d.ts.map +0 -1
  285. package/dist/component/public/security/keys.js.map +0 -1
  286. package/dist/component/public/security/limits.d.ts +0 -114
  287. package/dist/component/public/security/limits.d.ts.map +0 -1
  288. package/dist/component/public/security/limits.js.map +0 -1
  289. package/dist/component/public.d.ts +0 -28
  290. package/dist/component/public.d.ts.map +0 -1
  291. package/dist/component/schema.d.ts.map +0 -1
  292. package/dist/component/schema.js.map +0 -1
  293. package/dist/component/server/auth.d.ts +0 -447
  294. package/dist/component/server/auth.d.ts.map +0 -1
  295. package/dist/component/server/auth.js +0 -254
  296. package/dist/component/server/auth.js.map +0 -1
  297. package/dist/component/server/config.js +0 -121
  298. package/dist/component/server/config.js.map +0 -1
  299. package/dist/component/server/context.js +0 -53
  300. package/dist/component/server/context.js.map +0 -1
  301. package/dist/component/server/cookies.js +0 -47
  302. package/dist/component/server/cookies.js.map +0 -1
  303. package/dist/component/server/core.js +0 -576
  304. package/dist/component/server/core.js.map +0 -1
  305. package/dist/component/server/crypto.js +0 -56
  306. package/dist/component/server/crypto.js.map +0 -1
  307. package/dist/component/server/db.js +0 -87
  308. package/dist/component/server/db.js.map +0 -1
  309. package/dist/component/server/device.js +0 -152
  310. package/dist/component/server/device.js.map +0 -1
  311. package/dist/component/server/enterprise/config.js +0 -46
  312. package/dist/component/server/enterprise/config.js.map +0 -1
  313. package/dist/component/server/enterprise/domain.js +0 -974
  314. package/dist/component/server/enterprise/domain.js.map +0 -1
  315. package/dist/component/server/enterprise/http.js +0 -787
  316. package/dist/component/server/enterprise/http.js.map +0 -1
  317. package/dist/component/server/enterprise/oidc.js +0 -248
  318. package/dist/component/server/enterprise/oidc.js.map +0 -1
  319. package/dist/component/server/enterprise/policy.js +0 -85
  320. package/dist/component/server/enterprise/policy.js.map +0 -1
  321. package/dist/component/server/enterprise/saml.js.map +0 -1
  322. package/dist/component/server/enterprise/scim.js.map +0 -1
  323. package/dist/component/server/enterprise/shared.js +0 -51
  324. package/dist/component/server/enterprise/shared.js.map +0 -1
  325. package/dist/component/server/http.d.ts +0 -85
  326. package/dist/component/server/http.d.ts.map +0 -1
  327. package/dist/component/server/http.js +0 -351
  328. package/dist/component/server/http.js.map +0 -1
  329. package/dist/component/server/identity.js +0 -16
  330. package/dist/component/server/identity.js.map +0 -1
  331. package/dist/component/server/keys.js +0 -96
  332. package/dist/component/server/keys.js.map +0 -1
  333. package/dist/component/server/limits.js +0 -52
  334. package/dist/component/server/limits.js.map +0 -1
  335. package/dist/component/server/mutations/account.js +0 -46
  336. package/dist/component/server/mutations/account.js.map +0 -1
  337. package/dist/component/server/mutations/code.js +0 -68
  338. package/dist/component/server/mutations/code.js.map +0 -1
  339. package/dist/component/server/mutations/invalidate.js +0 -32
  340. package/dist/component/server/mutations/invalidate.js.map +0 -1
  341. package/dist/component/server/mutations/oauth.js +0 -116
  342. package/dist/component/server/mutations/oauth.js.map +0 -1
  343. package/dist/component/server/mutations/refresh.js +0 -119
  344. package/dist/component/server/mutations/refresh.js.map +0 -1
  345. package/dist/component/server/mutations/register.js +0 -87
  346. package/dist/component/server/mutations/register.js.map +0 -1
  347. package/dist/component/server/mutations/retrieve.js +0 -61
  348. package/dist/component/server/mutations/retrieve.js.map +0 -1
  349. package/dist/component/server/mutations/signature.js +0 -38
  350. package/dist/component/server/mutations/signature.js.map +0 -1
  351. package/dist/component/server/mutations/signin.js +0 -27
  352. package/dist/component/server/mutations/signin.js.map +0 -1
  353. package/dist/component/server/mutations/signout.js +0 -27
  354. package/dist/component/server/mutations/signout.js.map +0 -1
  355. package/dist/component/server/mutations/store/refs.js +0 -15
  356. package/dist/component/server/mutations/store/refs.js.map +0 -1
  357. package/dist/component/server/mutations/store.js +0 -70
  358. package/dist/component/server/mutations/store.js.map +0 -1
  359. package/dist/component/server/mutations/verifier.js +0 -18
  360. package/dist/component/server/mutations/verifier.js.map +0 -1
  361. package/dist/component/server/mutations/verify.js +0 -98
  362. package/dist/component/server/mutations/verify.js.map +0 -1
  363. package/dist/component/server/oauth.js +0 -242
  364. package/dist/component/server/oauth.js.map +0 -1
  365. package/dist/component/server/passkey.js +0 -415
  366. package/dist/component/server/passkey.js.map +0 -1
  367. package/dist/component/server/redirects.js +0 -40
  368. package/dist/component/server/redirects.js.map +0 -1
  369. package/dist/component/server/refresh.js +0 -99
  370. package/dist/component/server/refresh.js.map +0 -1
  371. package/dist/component/server/runtime.d.ts +0 -136
  372. package/dist/component/server/runtime.d.ts.map +0 -1
  373. package/dist/component/server/runtime.js +0 -456
  374. package/dist/component/server/runtime.js.map +0 -1
  375. package/dist/component/server/sessions.js +0 -71
  376. package/dist/component/server/sessions.js.map +0 -1
  377. package/dist/component/server/signin.js +0 -225
  378. package/dist/component/server/signin.js.map +0 -1
  379. package/dist/component/server/tokens.js +0 -17
  380. package/dist/component/server/tokens.js.map +0 -1
  381. package/dist/component/server/totp.js +0 -208
  382. package/dist/component/server/totp.js.map +0 -1
  383. package/dist/component/server/types.d.ts +0 -949
  384. package/dist/component/server/types.d.ts.map +0 -1
  385. package/dist/component/server/types.js +0 -79
  386. package/dist/component/server/types.js.map +0 -1
  387. package/dist/component/server/users.js +0 -123
  388. package/dist/component/server/users.js.map +0 -1
  389. package/dist/component/server/utils.js +0 -140
  390. package/dist/component/server/utils.js.map +0 -1
  391. package/dist/core/types.d.ts +0 -361
  392. package/dist/core/types.d.ts.map +0 -1
  393. package/dist/factors/device.js +0 -104
  394. package/dist/factors/device.js.map +0 -1
  395. package/dist/factors/passkey.js.map +0 -1
  396. package/dist/factors/totp.js.map +0 -1
  397. package/dist/providers/anonymous.d.ts.map +0 -1
  398. package/dist/providers/anonymous.js.map +0 -1
  399. package/dist/providers/credentials.d.ts.map +0 -1
  400. package/dist/providers/credentials.js.map +0 -1
  401. package/dist/providers/device.d.ts.map +0 -1
  402. package/dist/providers/device.js.map +0 -1
  403. package/dist/providers/email.d.ts.map +0 -1
  404. package/dist/providers/email.js.map +0 -1
  405. package/dist/providers/oauth.d.ts +0 -69
  406. package/dist/providers/oauth.d.ts.map +0 -1
  407. package/dist/providers/oauth.js +0 -43
  408. package/dist/providers/oauth.js.map +0 -1
  409. package/dist/providers/passkey.d.ts.map +0 -1
  410. package/dist/providers/passkey.js.map +0 -1
  411. package/dist/providers/password.d.ts.map +0 -1
  412. package/dist/providers/password.js.map +0 -1
  413. package/dist/providers/phone.d.ts.map +0 -1
  414. package/dist/providers/phone.js.map +0 -1
  415. package/dist/providers/sso.d.ts.map +0 -1
  416. package/dist/providers/sso.js.map +0 -1
  417. package/dist/providers/totp.d.ts.map +0 -1
  418. package/dist/providers/totp.js.map +0 -1
  419. package/dist/runtime/browser.js +0 -68
  420. package/dist/runtime/browser.js.map +0 -1
  421. package/dist/runtime/invite.js.map +0 -1
  422. package/dist/runtime/proxy.js +0 -70
  423. package/dist/runtime/proxy.js.map +0 -1
  424. package/dist/runtime/storage.js +0 -37
  425. package/dist/runtime/storage.js.map +0 -1
  426. package/dist/server/auth.d.ts.map +0 -1
  427. package/dist/server/auth.js.map +0 -1
  428. package/dist/server/config.d.ts +0 -1
  429. package/dist/server/config.js.map +0 -1
  430. package/dist/server/context.d.ts +0 -1
  431. package/dist/server/context.js.map +0 -1
  432. package/dist/server/cookies.d.ts +0 -1
  433. package/dist/server/cookies.js.map +0 -1
  434. package/dist/server/core.d.ts +0 -1315
  435. package/dist/server/core.d.ts.map +0 -1
  436. package/dist/server/core.js.map +0 -1
  437. package/dist/server/crypto.d.ts +0 -8
  438. package/dist/server/crypto.d.ts.map +0 -1
  439. package/dist/server/crypto.js.map +0 -1
  440. package/dist/server/db.d.ts +0 -1
  441. package/dist/server/db.js.map +0 -1
  442. package/dist/server/device.d.ts +0 -1
  443. package/dist/server/device.js.map +0 -1
  444. package/dist/server/enterprise/config.d.ts +0 -1
  445. package/dist/server/enterprise/config.js.map +0 -1
  446. package/dist/server/enterprise/domain.d.ts +0 -401
  447. package/dist/server/enterprise/domain.d.ts.map +0 -1
  448. package/dist/server/enterprise/domain.js +0 -974
  449. package/dist/server/enterprise/domain.js.map +0 -1
  450. package/dist/server/enterprise/http.d.ts +0 -26
  451. package/dist/server/enterprise/http.d.ts.map +0 -1
  452. package/dist/server/enterprise/http.js +0 -787
  453. package/dist/server/enterprise/http.js.map +0 -1
  454. package/dist/server/enterprise/oidc.d.ts +0 -1
  455. package/dist/server/enterprise/oidc.js +0 -248
  456. package/dist/server/enterprise/oidc.js.map +0 -1
  457. package/dist/server/enterprise/policy.d.ts +0 -1
  458. package/dist/server/enterprise/policy.js +0 -85
  459. package/dist/server/enterprise/policy.js.map +0 -1
  460. package/dist/server/enterprise/saml.d.ts +0 -1
  461. package/dist/server/enterprise/saml.js +0 -338
  462. package/dist/server/enterprise/saml.js.map +0 -1
  463. package/dist/server/enterprise/scim.d.ts +0 -1
  464. package/dist/server/enterprise/scim.js +0 -97
  465. package/dist/server/enterprise/scim.js.map +0 -1
  466. package/dist/server/enterprise/shared.d.ts +0 -5
  467. package/dist/server/enterprise/shared.d.ts.map +0 -1
  468. package/dist/server/enterprise/shared.js +0 -51
  469. package/dist/server/enterprise/shared.js.map +0 -1
  470. package/dist/server/enterprise/validators.d.ts +0 -1
  471. package/dist/server/enterprise/validators.js +0 -60
  472. package/dist/server/enterprise/validators.js.map +0 -1
  473. package/dist/server/http.d.ts.map +0 -1
  474. package/dist/server/http.js.map +0 -1
  475. package/dist/server/identity.d.ts +0 -1
  476. package/dist/server/identity.js.map +0 -1
  477. package/dist/server/keys.d.ts +0 -1
  478. package/dist/server/keys.js.map +0 -1
  479. package/dist/server/limits.d.ts +0 -1
  480. package/dist/server/limits.js.map +0 -1
  481. package/dist/server/mounts.d.ts.map +0 -1
  482. package/dist/server/mounts.js.map +0 -1
  483. package/dist/server/mutations/account.d.ts +0 -29
  484. package/dist/server/mutations/account.d.ts.map +0 -1
  485. package/dist/server/mutations/account.js.map +0 -1
  486. package/dist/server/mutations/code.d.ts +0 -30
  487. package/dist/server/mutations/code.d.ts.map +0 -1
  488. package/dist/server/mutations/code.js.map +0 -1
  489. package/dist/server/mutations/index.d.ts +0 -14
  490. package/dist/server/mutations/invalidate.d.ts +0 -20
  491. package/dist/server/mutations/invalidate.d.ts.map +0 -1
  492. package/dist/server/mutations/invalidate.js.map +0 -1
  493. package/dist/server/mutations/oauth.d.ts +0 -30
  494. package/dist/server/mutations/oauth.d.ts.map +0 -1
  495. package/dist/server/mutations/oauth.js.map +0 -1
  496. package/dist/server/mutations/refresh.d.ts +0 -21
  497. package/dist/server/mutations/refresh.d.ts.map +0 -1
  498. package/dist/server/mutations/refresh.js.map +0 -1
  499. package/dist/server/mutations/register.d.ts +0 -38
  500. package/dist/server/mutations/register.d.ts.map +0 -1
  501. package/dist/server/mutations/register.js.map +0 -1
  502. package/dist/server/mutations/retrieve.d.ts +0 -33
  503. package/dist/server/mutations/retrieve.d.ts.map +0 -1
  504. package/dist/server/mutations/retrieve.js.map +0 -1
  505. package/dist/server/mutations/signature.d.ts +0 -21
  506. package/dist/server/mutations/signature.d.ts.map +0 -1
  507. package/dist/server/mutations/signature.js.map +0 -1
  508. package/dist/server/mutations/signin.d.ts +0 -22
  509. package/dist/server/mutations/signin.d.ts.map +0 -1
  510. package/dist/server/mutations/signin.js.map +0 -1
  511. package/dist/server/mutations/signout.d.ts +0 -16
  512. package/dist/server/mutations/signout.d.ts.map +0 -1
  513. package/dist/server/mutations/signout.js.map +0 -1
  514. package/dist/server/mutations/store/refs.d.ts +0 -12
  515. package/dist/server/mutations/store/refs.d.ts.map +0 -1
  516. package/dist/server/mutations/store/refs.js.map +0 -1
  517. package/dist/server/mutations/store.d.ts +0 -306
  518. package/dist/server/mutations/store.d.ts.map +0 -1
  519. package/dist/server/mutations/store.js.map +0 -1
  520. package/dist/server/mutations/verifier.d.ts +0 -13
  521. package/dist/server/mutations/verifier.d.ts.map +0 -1
  522. package/dist/server/mutations/verifier.js.map +0 -1
  523. package/dist/server/mutations/verify.d.ts +0 -26
  524. package/dist/server/mutations/verify.d.ts.map +0 -1
  525. package/dist/server/mutations/verify.js.map +0 -1
  526. package/dist/server/oauth.d.ts +0 -1
  527. package/dist/server/oauth.js +0 -242
  528. package/dist/server/oauth.js.map +0 -1
  529. package/dist/server/passkey.d.ts +0 -27
  530. package/dist/server/passkey.d.ts.map +0 -1
  531. package/dist/server/passkey.js.map +0 -1
  532. package/dist/server/redirects.d.ts +0 -1
  533. package/dist/server/redirects.js.map +0 -1
  534. package/dist/server/refresh.d.ts +0 -1
  535. package/dist/server/refresh.js.map +0 -1
  536. package/dist/server/runtime.d.ts.map +0 -1
  537. package/dist/server/runtime.js.map +0 -1
  538. package/dist/server/sessions.d.ts +0 -1
  539. package/dist/server/sessions.js.map +0 -1
  540. package/dist/server/signin.d.ts +0 -1
  541. package/dist/server/signin.js.map +0 -1
  542. package/dist/server/ssr.d.ts.map +0 -1
  543. package/dist/server/ssr.js +0 -777
  544. package/dist/server/ssr.js.map +0 -1
  545. package/dist/server/templates.d.ts +0 -1
  546. package/dist/server/templates.js.map +0 -1
  547. package/dist/server/tokens.d.ts +0 -1
  548. package/dist/server/tokens.js.map +0 -1
  549. package/dist/server/totp.d.ts +0 -1
  550. package/dist/server/totp.js.map +0 -1
  551. package/dist/server/types.d.ts.map +0 -1
  552. package/dist/server/types.js.map +0 -1
  553. package/dist/server/users.d.ts +0 -1
  554. package/dist/server/users.js.map +0 -1
  555. package/dist/server/utils.d.ts +0 -1
  556. package/dist/server/utils.js +0 -140
  557. package/dist/server/utils.js.map +0 -1
  558. package/src/authorization/index.ts +0 -83
  559. package/src/cli/bin.ts +0 -5
  560. package/src/cli/command.ts +0 -70
  561. package/src/cli/index.ts +0 -1112
  562. package/src/cli/keys.ts +0 -23
  563. package/src/client/core/types.ts +0 -437
  564. package/src/client/factors/device.ts +0 -158
  565. package/src/client/factors/passkey.ts +0 -279
  566. package/src/client/factors/totp.ts +0 -150
  567. package/src/client/index.ts +0 -1124
  568. package/src/client/runtime/browser.ts +0 -112
  569. package/src/client/runtime/invite.ts +0 -63
  570. package/src/client/runtime/proxy.ts +0 -111
  571. package/src/client/runtime/storage.ts +0 -79
  572. package/src/component/_generated/api.ts +0 -96
  573. package/src/component/_generated/component.ts +0 -3774
  574. package/src/component/_generated/dataModel.ts +0 -60
  575. package/src/component/_generated/server.ts +0 -156
  576. package/src/component/convex.config.ts +0 -5
  577. package/src/component/functions.ts +0 -104
  578. package/src/component/index.ts +0 -42
  579. package/src/component/model.ts +0 -449
  580. package/src/component/public/enterprise/audit.ts +0 -125
  581. package/src/component/public/enterprise/core.ts +0 -355
  582. package/src/component/public/enterprise/domains.ts +0 -327
  583. package/src/component/public/enterprise/scim.ts +0 -397
  584. package/src/component/public/enterprise/secrets.ts +0 -133
  585. package/src/component/public/enterprise/webhooks.ts +0 -307
  586. package/src/component/public/factors/devices.ts +0 -224
  587. package/src/component/public/factors/passkeys.ts +0 -243
  588. package/src/component/public/factors/totp.ts +0 -259
  589. package/src/component/public/groups/core.ts +0 -481
  590. package/src/component/public/groups/invites.ts +0 -608
  591. package/src/component/public/groups/members.ts +0 -410
  592. package/src/component/public/identity/accounts.ts +0 -207
  593. package/src/component/public/identity/codes.ts +0 -149
  594. package/src/component/public/identity/sessions.ts +0 -210
  595. package/src/component/public/identity/tokens.ts +0 -251
  596. package/src/component/public/identity/users.ts +0 -355
  597. package/src/component/public/identity/verifiers.ts +0 -158
  598. package/src/component/public/security/keys.ts +0 -366
  599. package/src/component/public/security/limits.ts +0 -174
  600. package/src/component/public.ts +0 -27
  601. package/src/component/schema.ts +0 -505
  602. package/src/providers/anonymous.ts +0 -99
  603. package/src/providers/credentials.ts +0 -102
  604. package/src/providers/device.ts +0 -87
  605. package/src/providers/email.ts +0 -99
  606. package/src/providers/index.ts +0 -31
  607. package/src/providers/oauth.ts +0 -117
  608. package/src/providers/passkey.ts +0 -77
  609. package/src/providers/password.ts +0 -441
  610. package/src/providers/phone.ts +0 -93
  611. package/src/providers/sso.ts +0 -54
  612. package/src/providers/totp.ts +0 -62
  613. package/src/samlify.d.ts +0 -53
  614. package/src/server/auth.ts +0 -949
  615. package/src/server/config.ts +0 -200
  616. package/src/server/context.ts +0 -90
  617. package/src/server/cookies.ts +0 -49
  618. package/src/server/core.ts +0 -2004
  619. package/src/server/crypto.ts +0 -90
  620. package/src/server/db.ts +0 -203
  621. package/src/server/device.ts +0 -254
  622. package/src/server/enterprise/config.ts +0 -51
  623. package/src/server/enterprise/domain.ts +0 -1739
  624. package/src/server/enterprise/http.ts +0 -1331
  625. package/src/server/enterprise/oidc.ts +0 -500
  626. package/src/server/enterprise/policy.ts +0 -128
  627. package/src/server/enterprise/saml.ts +0 -578
  628. package/src/server/enterprise/scim.ts +0 -135
  629. package/src/server/enterprise/shared.ts +0 -134
  630. package/src/server/enterprise/validators.ts +0 -93
  631. package/src/server/http.ts +0 -790
  632. package/src/server/identity.ts +0 -18
  633. package/src/server/index.ts +0 -40
  634. package/src/server/keys.ts +0 -158
  635. package/src/server/limits.ts +0 -107
  636. package/src/server/mounts.ts +0 -924
  637. package/src/server/mutations/account.ts +0 -62
  638. package/src/server/mutations/code.ts +0 -119
  639. package/src/server/mutations/index.ts +0 -13
  640. package/src/server/mutations/invalidate.ts +0 -50
  641. package/src/server/mutations/oauth.ts +0 -243
  642. package/src/server/mutations/refresh.ts +0 -299
  643. package/src/server/mutations/register.ts +0 -155
  644. package/src/server/mutations/retrieve.ts +0 -109
  645. package/src/server/mutations/signature.ts +0 -57
  646. package/src/server/mutations/signin.ts +0 -54
  647. package/src/server/mutations/signout.ts +0 -43
  648. package/src/server/mutations/store/refs.ts +0 -10
  649. package/src/server/mutations/store.ts +0 -123
  650. package/src/server/mutations/verifier.ts +0 -34
  651. package/src/server/mutations/verify.ts +0 -200
  652. package/src/server/oauth.ts +0 -418
  653. package/src/server/passkey.ts +0 -838
  654. package/src/server/redirects.ts +0 -59
  655. package/src/server/refresh.ts +0 -218
  656. package/src/server/runtime.ts +0 -918
  657. package/src/server/sessions.ts +0 -132
  658. package/src/server/signin.ts +0 -445
  659. package/src/server/ssr.ts +0 -1747
  660. package/src/server/templates.ts +0 -82
  661. package/src/server/tokens.ts +0 -35
  662. package/src/server/totp.ts +0 -399
  663. package/src/server/types.ts +0 -1942
  664. package/src/server/users.ts +0 -291
  665. package/src/server/utils.ts +0 -220
  666. /package/dist/{runtime → client/runtime}/invite.js +0 -0
@@ -1,7 +1,6 @@
1
- import { enterpriseConnectionWhereValidator, enterpriseDomainInputValidator, enterpriseDomainVerificationInputValidator, enterprisePolicyPatchValidator, enterpriseSamlAttributeMappingValidator, enterpriseSamlSpValidator, enterpriseStatusValidator } from "./enterprise/validators.js";
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 normalizeCreatorRoleIds(roles) {
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
- enterpriseId: target.enterpriseId,
18
- groupId: target.groupId,
19
- resolvedGroupId: target.groupId
13
+ connectionId: target.connectionId,
14
+ groupId: target.groupId
20
15
  };
21
- if (target.enterpriseId !== void 0) {
22
- const enterprise = await auth.sso.admin.connection.get(ctx, target.enterpriseId);
23
- if (enterprise === null) throw new ConvexError({
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: "Enterprise not found."
20
+ message: "Connection not found."
26
21
  });
27
22
  return {
28
- enterpriseId: enterprise._id,
29
- groupId: enterprise.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.admin.connection.getByDomain(ctx, target.domain);
35
- if (resolved?.enterprise === void 0) throw new ConvexError({
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: "Enterprise not found."
31
+ message: "Connection not found."
38
32
  });
39
33
  return {
40
- enterpriseId: resolved.enterprise._id,
41
- groupId: resolved.enterprise.groupId,
42
- resolvedGroupId: resolved.enterprise.groupId
34
+ connectionId: resolved.connection._id,
35
+ groupId: resolved.connection.groupId
43
36
  };
44
37
  }
45
38
  return {
46
- enterpriseId: void 0,
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 Cv.error({
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?.admin?.authorized) throw Cv.error({
66
+ if (!options) throw new ConvexError({
60
67
  code: "FORBIDDEN",
61
68
  message: "Access denied."
62
69
  });
63
- const resolved = await resolveMountedEnterpriseTarget(auth, ctx, target);
64
- await options.admin.authorized(ctx, {
70
+ const resolved = await resolveMountedGroupTarget(auth, ctx, target);
71
+ const input = {
65
72
  userId,
66
73
  permission,
67
- enterpriseId: resolved.enterpriseId,
68
- groupId: resolved.groupId,
69
- resolvedGroupId: resolved.resolvedGroupId
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 enterprise APIs.
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 authorization policy. `client` is for end-user sign-in
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 authorization config. See {@link EnterpriseMountOptions}.
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
- * admin: {
99
- * authorized: async (ctx, input) => { /* check permissions *\/ },
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 enterprise}
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.optional(v.string()),
136
+ groupId: v.string(),
119
137
  name: v.optional(v.string()),
120
138
  slug: v.optional(v.string()),
121
- status: v.optional(enterpriseStatusValidator),
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
- const { userId } = await authorize(ctx, "sso.connection.create", { groupId: args.groupId });
126
- const createsGroup = args.groupId === void 0;
127
- const groupId = args.groupId ?? (await auth.group.create(ctx, {
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.admin.connection.domain.set(ctx, created.enterpriseId, [{
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: { enterpriseId: v.string() },
163
+ args: { connectionId: v.string() },
156
164
  handler: async (ctx, args) => {
157
- await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
158
- return await auth.sso.admin.connection.get(ctx, args.enterpriseId);
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.admin.connection.getByDomain(ctx, args.domain);
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(enterpriseConnectionWhereValidator),
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.admin.connection.list(ctx, args);
186
+ return await auth.group.sso.connection.list(ctx, args);
186
187
  }
187
188
  }),
188
189
  update: mutationGeneric({
189
190
  args: {
190
- enterpriseId: v.string(),
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(enterpriseStatusValidator)
195
+ status: v.optional(groupConnectionStatusValidator)
195
196
  })
196
197
  },
197
198
  handler: async (ctx, args) => {
198
- await authorize(ctx, "sso.connection.manage", { enterpriseId: args.enterpriseId });
199
- await auth.sso.admin.connection.update(ctx, args.enterpriseId, args.data);
200
- return { enterpriseId: args.enterpriseId };
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: { enterpriseId: v.string() },
205
+ args: { connectionId: v.string() },
205
206
  handler: async (ctx, args) => {
206
- await authorize(ctx, "sso.connection.manage", { enterpriseId: args.enterpriseId });
207
- return await auth.sso.admin.connection.delete(ctx, args.enterpriseId);
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: { enterpriseId: v.string() },
212
+ args: { connectionId: v.string() },
212
213
  handler: async (ctx, args) => {
213
- await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
214
- return await auth.sso.admin.connection.status(ctx, args.enterpriseId);
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: { enterpriseId: v.string() },
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.connection.read", { enterpriseId: args.enterpriseId });
222
- return await auth.sso.admin.connection.domain.list(ctx, args.enterpriseId);
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: { enterpriseId: v.string() },
234
+ args: { connectionId: v.string() },
227
235
  handler: async (ctx, args) => {
228
- await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
229
- return await auth.sso.admin.connection.domain.validate(ctx, args.enterpriseId);
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
- enterpriseId: v.string(),
235
- domains: v.array(enterpriseDomainInputValidator)
242
+ connectionId: v.string(),
243
+ domains: v.array(groupConnectionDomainInputValidator)
236
244
  },
237
245
  handler: async (ctx, args) => {
238
- await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
239
- return await auth.sso.admin.connection.domain.set(ctx, args.enterpriseId, args.domains);
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: enterpriseDomainVerificationInputValidator,
252
+ args: groupConnectionDomainVerificationInputValidator,
245
253
  handler: async (ctx, args) => {
246
- await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
247
- return await auth.sso.admin.connection.domain.verification.request(ctx, args);
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: enterpriseDomainVerificationInputValidator,
259
+ args: groupConnectionDomainVerificationInputValidator,
252
260
  handler: async (ctx, args) => {
253
- await authorize(ctx, "sso.domain.manage", { enterpriseId: args.enterpriseId });
254
- return await auth.sso.admin.connection.domain.verification.confirm(ctx, args);
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
- enterpriseId: v.string(),
264
- issuer: v.optional(v.string()),
265
- discoveryUrl: v.optional(v.string()),
266
- clientId: v.string(),
267
- clientSecret: v.optional(v.string()),
268
- scopes: v.optional(v.array(v.string())),
269
- authorizationParams: v.optional(v.record(v.string(), v.string())),
270
- clockToleranceSeconds: v.optional(v.number()),
271
- strictIssuer: v.optional(v.boolean()),
272
- extraFields: v.optional(v.record(v.string(), v.string()))
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", { enterpriseId: args.enterpriseId });
276
- return await auth.sso.admin.oidc.configure(ctx, args);
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: { enterpriseId: v.string() },
314
+ args: { connectionId: v.string() },
281
315
  handler: async (ctx, args) => {
282
- await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
283
- return await auth.sso.admin.oidc.get(ctx, args.enterpriseId);
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: { enterpriseId: v.string() },
321
+ args: { connectionId: v.string() },
288
322
  handler: async (ctx, args) => {
289
- await authorize(ctx, "sso.protocol.manage", { enterpriseId: args.enterpriseId });
290
- return await auth.sso.admin.oidc.validate(ctx, args.enterpriseId);
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
- enterpriseId: v.string(),
298
- metadataXml: v.optional(v.string()),
299
- metadataUrl: v.optional(v.string()),
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
- signAuthnRequests: v.optional(v.boolean()),
302
- attributeMapping: v.optional(enterpriseSamlAttributeMappingValidator),
303
- sp: v.optional(enterpriseSamlSpValidator)
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", { enterpriseId: args.enterpriseId });
307
- return await auth.sso.admin.saml.configure(ctx, args);
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: { enterpriseId: v.string() },
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.protocol.manage", { enterpriseId: args.enterpriseId });
314
- return await auth.sso.admin.saml.validate(ctx, args.enterpriseId);
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: { enterpriseId: v.string() },
396
+ args: { groupId: v.string() },
321
397
  handler: async (ctx, args) => {
322
- await authorize(ctx, "sso.connection.read", { enterpriseId: args.enterpriseId });
323
- return await auth.sso.admin.policy.get(ctx, args.enterpriseId);
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
- enterpriseId: v.string(),
329
- patch: enterprisePolicyPatchValidator
404
+ groupId: v.string(),
405
+ patch: groupPolicyPatchValidator
330
406
  },
331
407
  handler: async (ctx, args) => {
332
- await authorize(ctx, "sso.policy.manage", { enterpriseId: args.enterpriseId });
333
- return await auth.sso.admin.policy.update(ctx, args.enterpriseId, args.patch);
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: { enterpriseId: v.string() },
413
+ args: { groupId: v.string() },
338
414
  handler: async (ctx, args) => {
339
- await authorize(ctx, "sso.policy.manage", { enterpriseId: args.enterpriseId });
340
- return await auth.sso.admin.policy.validate(ctx, args.enterpriseId);
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
- enterpriseId: args.enterpriseId,
428
+ connectionId: args.connectionId,
353
429
  groupId: args.groupId
354
430
  });
355
- return await auth.sso.admin.audit.list(ctx, args);
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
- enterpriseId: v.string(),
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", { enterpriseId: args.enterpriseId });
366
- return await auth.sso.admin.webhook.delivery.list(ctx, args);
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
- enterpriseId: v.string(),
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", { enterpriseId: args.enterpriseId });
455
+ const { userId } = await authorize(ctx, "sso.webhook.manage", { connectionId: args.connectionId });
380
456
  return {
381
- _id: (await auth.sso.admin.webhook.endpoint.create(ctx, {
457
+ _id: (await auth.group.sso.webhook.endpoint.create(ctx, {
382
458
  ...args,
383
459
  createdByUserId: args.createdByUserId ?? userId
384
460
  })).endpointId,
385
- enterpriseId: args.enterpriseId,
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: { enterpriseId: v.string() },
471
+ args: { connectionId: v.string() },
396
472
  handler: async (ctx, args) => {
397
- await authorize(ctx, "sso.webhook.manage", { enterpriseId: args.enterpriseId });
398
- return (await auth.sso.admin.webhook.endpoint.list(ctx, args.enterpriseId)).map((endpoint) => {
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.admin.webhook.endpoint.get(ctx, args.endpointId);
408
- if (!endpoint) throw Cv.error({
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
- enterpriseId: endpoint.enterpriseId,
489
+ connectionId: endpoint.connectionId,
414
490
  groupId: endpoint.groupId
415
491
  });
416
- return await auth.sso.admin.webhook.endpoint.disable(ctx, args.endpointId);
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
- enterpriseId: v.optional(v.string()),
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.client.signIn(ctx, args);
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
- enterpriseId: v.string(),
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.client.metadata(ctx, args);
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/scim/**` when they want client-callable enterprise admin APIs.
533
+ * `convex/auth/group/**` when they want client-callable group SSO admin APIs.
451
534
  *
452
- * @param auth - Auth API subset providing `scim`, `sso`, and `user` namespaces.
453
- * @param options - Optional admin authorization config. See {@link EnterpriseMountOptions}.
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/scim.ts
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
- * admin: {
465
- * authorized: async (ctx, input) => { /* check permissions *\/ },
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 enterprise}
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
- enterpriseId: v.string(),
483
- basePath: v.optional(v.string()),
484
- status: v.optional(enterpriseStatusValidator)
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", { enterpriseId: args.enterpriseId });
488
- return await auth.scim.admin.configure(ctx, args);
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: { enterpriseId: v.string() },
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", { enterpriseId: args.enterpriseId });
495
- return await auth.scim.admin.get(ctx, args.enterpriseId);
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: { enterpriseId: v.string() },
610
+ args: { connectionId: v.string() },
500
611
  handler: async (ctx, args) => {
501
- await authorize(ctx, "scim.manage", { enterpriseId: args.enterpriseId });
502
- return await auth.scim.admin.validate(ctx, args.enterpriseId);
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 enterprise API surface for app-owned Convex exports.
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 `authorized`
513
- * callback is required for all admin operations.
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`, `scim`, `sso`, and `user` namespaces.
516
- * @param options - Required {@link EnterpriseMountOptions} with an `admin.authorized` callback.
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
- * @returns A flat object with all enterprise management functions (e.g. `createConnection`,
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/enterprise.ts
524
- * import { enterprise } from "@robelest/convex-auth/server";
636
+ * // convex/auth/group.ts
637
+ * import { createAuthGroupSso } from "@robelest/convex-auth/server";
525
638
  * import { auth } from "../auth";
526
639
  *
527
- * const api = enterprise(auth, {
528
- * admin: {
529
- * authorized: async (ctx, input) => { /* check permissions *\/ },
530
- * roles: ["admin"],
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 enterprise(auth, options) {
543
- const mountedSso = sso(auth, { admin: options.admin });
544
- const mountedScim = scim(auth, { admin: { authorized: options.admin.authorized } });
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 { enterprise, scim, sso };
700
+ export { createAuthGroupSso, scim, sso };
582
701
  //# sourceMappingURL=mounts.js.map