@robelest/convex-auth 0.0.4-preview.2 → 0.0.4-preview.21

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 (798) hide show
  1. package/README.md +67 -26
  2. package/dist/authorization/index.d.ts +63 -0
  3. package/dist/authorization/index.d.ts.map +1 -0
  4. package/dist/authorization/index.js +63 -0
  5. package/dist/authorization/index.js.map +1 -0
  6. package/dist/bin.js +6185 -0
  7. package/dist/client/core/types.d.ts +20 -0
  8. package/dist/client/core/types.d.ts.map +1 -0
  9. package/dist/client/index.d.ts +2 -299
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +407 -534
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/component/_generated/api.d.ts +42 -0
  14. package/dist/component/_generated/api.d.ts.map +1 -1
  15. package/dist/component/_generated/api.js.map +1 -1
  16. package/dist/component/_generated/component.d.ts +2546 -90
  17. package/dist/component/_generated/component.d.ts.map +1 -1
  18. package/dist/component/client/core/types.d.ts +2 -0
  19. package/dist/component/client/index.d.ts +2 -0
  20. package/dist/component/convex.config.d.ts +2 -2
  21. package/dist/component/functions.d.ts +11 -9
  22. package/dist/component/functions.d.ts.map +1 -1
  23. package/dist/component/functions.js.map +1 -1
  24. package/dist/component/index.d.ts +7 -11
  25. package/dist/component/index.js +2 -3
  26. package/dist/component/model.d.ts +153 -0
  27. package/dist/component/model.d.ts.map +1 -0
  28. package/dist/component/model.js +349 -0
  29. package/dist/component/model.js.map +1 -0
  30. package/dist/component/providers/anonymous.d.ts +54 -0
  31. package/dist/component/providers/anonymous.d.ts.map +1 -0
  32. package/dist/component/providers/credentials.d.ts +5 -5
  33. package/dist/component/providers/credentials.d.ts.map +1 -1
  34. package/dist/component/providers/device.d.ts +67 -0
  35. package/dist/component/providers/device.d.ts.map +1 -0
  36. package/dist/component/providers/email.d.ts +62 -0
  37. package/dist/component/providers/email.d.ts.map +1 -0
  38. package/dist/component/providers/oauth.d.ts.map +1 -1
  39. package/dist/component/providers/oauth.js.map +1 -1
  40. package/dist/component/providers/passkey.d.ts +57 -0
  41. package/dist/component/providers/passkey.d.ts.map +1 -0
  42. package/dist/component/providers/password.d.ts +88 -0
  43. package/dist/component/providers/password.d.ts.map +1 -0
  44. package/dist/component/providers/phone.d.ts +48 -0
  45. package/dist/component/providers/phone.d.ts.map +1 -0
  46. package/dist/component/providers/sso.d.ts +50 -0
  47. package/dist/component/providers/sso.d.ts.map +1 -0
  48. package/dist/component/providers/totp.d.ts +45 -0
  49. package/dist/component/providers/totp.d.ts.map +1 -0
  50. package/dist/component/public/enterprise/audit.d.ts +73 -0
  51. package/dist/component/public/enterprise/audit.d.ts.map +1 -0
  52. package/dist/component/public/enterprise/audit.js +108 -0
  53. package/dist/component/public/enterprise/audit.js.map +1 -0
  54. package/dist/component/public/enterprise/core.d.ts +176 -0
  55. package/dist/component/public/enterprise/core.d.ts.map +1 -0
  56. package/dist/component/public/enterprise/core.js +292 -0
  57. package/dist/component/public/enterprise/core.js.map +1 -0
  58. package/dist/component/public/enterprise/domains.d.ts +174 -0
  59. package/dist/component/public/enterprise/domains.d.ts.map +1 -0
  60. package/dist/component/public/enterprise/domains.js +271 -0
  61. package/dist/component/public/enterprise/domains.js.map +1 -0
  62. package/dist/component/public/enterprise/scim.d.ts +245 -0
  63. package/dist/component/public/enterprise/scim.d.ts.map +1 -0
  64. package/dist/component/public/enterprise/scim.js +344 -0
  65. package/dist/component/public/enterprise/scim.js.map +1 -0
  66. package/dist/component/public/enterprise/secrets.d.ts +78 -0
  67. package/dist/component/public/enterprise/secrets.d.ts.map +1 -0
  68. package/dist/component/public/enterprise/secrets.js +118 -0
  69. package/dist/component/public/enterprise/secrets.js.map +1 -0
  70. package/dist/component/public/enterprise/webhooks.d.ts +211 -0
  71. package/dist/component/public/enterprise/webhooks.d.ts.map +1 -0
  72. package/dist/component/public/enterprise/webhooks.js +300 -0
  73. package/dist/component/public/enterprise/webhooks.js.map +1 -0
  74. package/dist/component/public/factors/devices.d.ts +157 -0
  75. package/dist/component/public/factors/devices.d.ts.map +1 -0
  76. package/dist/component/public/factors/devices.js +216 -0
  77. package/dist/component/public/factors/devices.js.map +1 -0
  78. package/dist/component/public/factors/passkeys.d.ts +175 -0
  79. package/dist/component/public/factors/passkeys.d.ts.map +1 -0
  80. package/dist/component/public/factors/passkeys.js +238 -0
  81. package/dist/component/public/factors/passkeys.js.map +1 -0
  82. package/dist/component/public/factors/totp.d.ts +189 -0
  83. package/dist/component/public/factors/totp.d.ts.map +1 -0
  84. package/dist/component/public/factors/totp.js +254 -0
  85. package/dist/component/public/factors/totp.js.map +1 -0
  86. package/dist/component/public/groups/core.d.ts +137 -0
  87. package/dist/component/public/groups/core.d.ts.map +1 -0
  88. package/dist/component/public/groups/core.js +321 -0
  89. package/dist/component/public/groups/core.js.map +1 -0
  90. package/dist/component/public/groups/invites.d.ts +217 -0
  91. package/dist/component/public/groups/invites.d.ts.map +1 -0
  92. package/dist/component/public/groups/invites.js +457 -0
  93. package/dist/component/public/groups/invites.js.map +1 -0
  94. package/dist/component/public/groups/members.d.ts +204 -0
  95. package/dist/component/public/groups/members.d.ts.map +1 -0
  96. package/dist/component/public/groups/members.js +355 -0
  97. package/dist/component/public/groups/members.js.map +1 -0
  98. package/dist/component/public/identity/accounts.d.ts +147 -0
  99. package/dist/component/public/identity/accounts.d.ts.map +1 -0
  100. package/dist/component/public/identity/accounts.js +200 -0
  101. package/dist/component/public/identity/accounts.js.map +1 -0
  102. package/dist/component/public/identity/codes.d.ts +104 -0
  103. package/dist/component/public/identity/codes.d.ts.map +1 -0
  104. package/dist/component/public/identity/codes.js +140 -0
  105. package/dist/component/public/identity/codes.js.map +1 -0
  106. package/dist/component/public/identity/sessions.d.ts +128 -0
  107. package/dist/component/public/identity/sessions.d.ts.map +1 -0
  108. package/dist/component/public/identity/sessions.js +192 -0
  109. package/dist/component/public/identity/sessions.js.map +1 -0
  110. package/dist/component/public/identity/tokens.d.ts +169 -0
  111. package/dist/component/public/identity/tokens.d.ts.map +1 -0
  112. package/dist/component/public/identity/tokens.js +227 -0
  113. package/dist/component/public/identity/tokens.js.map +1 -0
  114. package/dist/component/public/identity/users.d.ts +212 -0
  115. package/dist/component/public/identity/users.d.ts.map +1 -0
  116. package/dist/component/public/identity/users.js +311 -0
  117. package/dist/component/public/identity/users.js.map +1 -0
  118. package/dist/component/public/identity/verifiers.d.ts +116 -0
  119. package/dist/component/public/identity/verifiers.d.ts.map +1 -0
  120. package/dist/component/public/identity/verifiers.js +154 -0
  121. package/dist/component/public/identity/verifiers.js.map +1 -0
  122. package/dist/component/public/security/keys.d.ts +209 -0
  123. package/dist/component/public/security/keys.d.ts.map +1 -0
  124. package/dist/component/public/security/keys.js +319 -0
  125. package/dist/component/public/security/keys.js.map +1 -0
  126. package/dist/component/public/security/limits.d.ts +114 -0
  127. package/dist/component/public/security/limits.d.ts.map +1 -0
  128. package/dist/component/public/security/limits.js +169 -0
  129. package/dist/component/public/security/limits.js.map +1 -0
  130. package/dist/component/public.d.ts +24 -271
  131. package/dist/component/public.d.ts.map +1 -1
  132. package/dist/component/public.js +21 -1229
  133. package/dist/component/schema.d.ts +473 -110
  134. package/dist/component/schema.js +162 -73
  135. package/dist/component/schema.js.map +1 -1
  136. package/dist/component/server/auth.d.ts +318 -373
  137. package/dist/component/server/auth.d.ts.map +1 -1
  138. package/dist/component/server/auth.js +204 -123
  139. package/dist/component/server/auth.js.map +1 -1
  140. package/dist/component/server/authError.js +34 -0
  141. package/dist/component/server/authError.js.map +1 -0
  142. package/dist/component/server/{providers.js → config.js} +43 -12
  143. package/dist/component/server/config.js.map +1 -0
  144. package/dist/component/server/cookies.js +3 -0
  145. package/dist/component/server/cookies.js.map +1 -1
  146. package/dist/component/server/core.js +713 -0
  147. package/dist/component/server/core.js.map +1 -0
  148. package/dist/component/server/crypto.js +38 -0
  149. package/dist/component/server/crypto.js.map +1 -0
  150. package/dist/component/server/{implementation/db.js → db.js} +2 -1
  151. package/dist/component/server/db.js.map +1 -0
  152. package/dist/component/server/device.js +109 -0
  153. package/dist/component/server/device.js.map +1 -0
  154. package/dist/component/server/enterprise/config.js +46 -0
  155. package/dist/component/server/enterprise/config.js.map +1 -0
  156. package/dist/component/server/enterprise/domain.js +885 -0
  157. package/dist/component/server/enterprise/domain.js.map +1 -0
  158. package/dist/component/server/enterprise/http.js +766 -0
  159. package/dist/component/server/enterprise/http.js.map +1 -0
  160. package/dist/component/server/enterprise/oidc.js +248 -0
  161. package/dist/component/server/enterprise/oidc.js.map +1 -0
  162. package/dist/component/server/enterprise/policy.js +85 -0
  163. package/dist/component/server/enterprise/policy.js.map +1 -0
  164. package/dist/component/server/enterprise/saml.js +338 -0
  165. package/dist/component/server/enterprise/saml.js.map +1 -0
  166. package/dist/component/server/enterprise/scim.js +97 -0
  167. package/dist/component/server/enterprise/scim.js.map +1 -0
  168. package/dist/component/server/enterprise/shared.js +51 -0
  169. package/dist/component/server/enterprise/shared.js.map +1 -0
  170. package/dist/component/server/errors.d.ts +1 -0
  171. package/dist/component/server/errors.js +24 -16
  172. package/dist/component/server/errors.js.map +1 -1
  173. package/dist/component/server/http.js +288 -0
  174. package/dist/component/server/http.js.map +1 -0
  175. package/dist/component/server/identity.js +13 -0
  176. package/dist/component/server/identity.js.map +1 -0
  177. package/dist/{server/implementation → component/server}/keys.js +9 -31
  178. package/dist/component/server/keys.js.map +1 -0
  179. package/dist/component/server/limits.js +61 -0
  180. package/dist/component/server/limits.js.map +1 -0
  181. package/dist/component/server/mutations/account.js +44 -0
  182. package/dist/component/server/mutations/account.js.map +1 -0
  183. package/dist/component/server/{implementation/mutations → mutations}/code.js +7 -4
  184. package/dist/component/server/mutations/code.js.map +1 -0
  185. package/dist/component/server/mutations/invalidate.js +32 -0
  186. package/dist/component/server/mutations/invalidate.js.map +1 -0
  187. package/dist/component/server/mutations/oauth.js +110 -0
  188. package/dist/component/server/mutations/oauth.js.map +1 -0
  189. package/dist/component/server/mutations/refresh.js +119 -0
  190. package/dist/component/server/mutations/refresh.js.map +1 -0
  191. package/dist/component/server/mutations/register.js +83 -0
  192. package/dist/component/server/mutations/register.js.map +1 -0
  193. package/dist/component/server/mutations/retrieve.js +65 -0
  194. package/dist/component/server/mutations/retrieve.js.map +1 -0
  195. package/dist/component/server/mutations/signature.js +32 -0
  196. package/dist/component/server/mutations/signature.js.map +1 -0
  197. package/dist/component/server/{implementation/mutations → mutations}/signin.js +2 -2
  198. package/dist/component/server/mutations/signin.js.map +1 -0
  199. package/dist/component/server/mutations/signout.js +27 -0
  200. package/dist/component/server/mutations/signout.js.map +1 -0
  201. package/dist/component/server/mutations/store/refs.js +15 -0
  202. package/dist/component/server/mutations/store/refs.js.map +1 -0
  203. package/dist/component/server/mutations/store.js +85 -0
  204. package/dist/component/server/mutations/store.js.map +1 -0
  205. package/dist/component/server/mutations/verifier.js +18 -0
  206. package/dist/component/server/mutations/verifier.js.map +1 -0
  207. package/dist/component/server/mutations/verify.js +98 -0
  208. package/dist/component/server/mutations/verify.js.map +1 -0
  209. package/dist/component/server/oauth.js +106 -60
  210. package/dist/component/server/oauth.js.map +1 -1
  211. package/dist/component/server/passkey.js +328 -0
  212. package/dist/component/server/passkey.js.map +1 -0
  213. package/dist/{server/implementation → component/server}/redirects.js +13 -11
  214. package/dist/component/server/redirects.js.map +1 -0
  215. package/dist/component/server/refresh.js +96 -0
  216. package/dist/component/server/refresh.js.map +1 -0
  217. package/dist/component/server/runtime.d.ts +136 -0
  218. package/dist/component/server/runtime.d.ts.map +1 -0
  219. package/dist/component/server/runtime.js +413 -0
  220. package/dist/component/server/runtime.js.map +1 -0
  221. package/dist/{server/implementation → component/server}/sessions.js +14 -8
  222. package/dist/component/server/sessions.js.map +1 -0
  223. package/dist/component/server/signin.js +201 -0
  224. package/dist/component/server/signin.js.map +1 -0
  225. package/dist/component/server/tokens.js +17 -0
  226. package/dist/component/server/tokens.js.map +1 -0
  227. package/dist/component/server/totp.js +148 -0
  228. package/dist/component/server/totp.js.map +1 -0
  229. package/dist/component/server/types.d.ts +387 -298
  230. package/dist/component/server/types.d.ts.map +1 -1
  231. package/dist/component/server/{implementation/types.js → types.js} +1 -1
  232. package/dist/component/server/types.js.map +1 -0
  233. package/dist/component/server/{implementation/users.js → users.js} +54 -35
  234. package/dist/component/server/users.js.map +1 -0
  235. package/dist/component/server/utils.js +110 -4
  236. package/dist/component/server/utils.js.map +1 -1
  237. package/dist/core/types.d.ts +369 -0
  238. package/dist/core/types.d.ts.map +1 -0
  239. package/dist/factors/device.js +105 -0
  240. package/dist/factors/device.js.map +1 -0
  241. package/dist/factors/passkey.js +181 -0
  242. package/dist/factors/passkey.js.map +1 -0
  243. package/dist/factors/totp.js +122 -0
  244. package/dist/factors/totp.js.map +1 -0
  245. package/dist/providers/anonymous.d.ts +3 -9
  246. package/dist/providers/anonymous.d.ts.map +1 -1
  247. package/dist/providers/anonymous.js +1 -18
  248. package/dist/providers/anonymous.js.map +1 -1
  249. package/dist/providers/credentials.d.ts +8 -10
  250. package/dist/providers/credentials.d.ts.map +1 -1
  251. package/dist/providers/credentials.js +3 -5
  252. package/dist/providers/credentials.js.map +1 -1
  253. package/dist/providers/device.d.ts +18 -10
  254. package/dist/providers/device.d.ts.map +1 -1
  255. package/dist/providers/device.js +4 -8
  256. package/dist/providers/device.js.map +1 -1
  257. package/dist/providers/email.d.ts +50 -23
  258. package/dist/providers/email.d.ts.map +1 -1
  259. package/dist/providers/email.js +58 -34
  260. package/dist/providers/email.js.map +1 -1
  261. package/dist/providers/index.d.ts +7 -3
  262. package/dist/providers/index.js +4 -1
  263. package/dist/providers/oauth.d.ts.map +1 -1
  264. package/dist/providers/oauth.js.map +1 -1
  265. package/dist/providers/passkey.d.ts +12 -9
  266. package/dist/providers/passkey.d.ts.map +1 -1
  267. package/dist/providers/passkey.js +1 -7
  268. package/dist/providers/passkey.js.map +1 -1
  269. package/dist/providers/password.d.ts +6 -12
  270. package/dist/providers/password.d.ts.map +1 -1
  271. package/dist/providers/password.js +189 -89
  272. package/dist/providers/password.js.map +1 -1
  273. package/dist/providers/phone.d.ts +40 -11
  274. package/dist/providers/phone.d.ts.map +1 -1
  275. package/dist/providers/phone.js +52 -21
  276. package/dist/providers/phone.js.map +1 -1
  277. package/dist/providers/sso.d.ts +50 -0
  278. package/dist/providers/sso.d.ts.map +1 -0
  279. package/dist/providers/sso.js +34 -0
  280. package/dist/providers/sso.js.map +1 -0
  281. package/dist/providers/totp.d.ts +12 -9
  282. package/dist/providers/totp.d.ts.map +1 -1
  283. package/dist/providers/totp.js +1 -7
  284. package/dist/providers/totp.js.map +1 -1
  285. package/dist/runtime/browser.js +68 -0
  286. package/dist/runtime/browser.js.map +1 -0
  287. package/dist/runtime/invite.js +51 -0
  288. package/dist/runtime/invite.js.map +1 -0
  289. package/dist/runtime/proxy.js +70 -0
  290. package/dist/runtime/proxy.js.map +1 -0
  291. package/dist/runtime/storage.js +37 -0
  292. package/dist/runtime/storage.js.map +1 -0
  293. package/dist/server/auth.d.ts +335 -370
  294. package/dist/server/auth.d.ts.map +1 -1
  295. package/dist/server/auth.js +204 -123
  296. package/dist/server/auth.js.map +1 -1
  297. package/dist/server/authError.d.ts +46 -0
  298. package/dist/server/authError.d.ts.map +1 -0
  299. package/dist/server/authError.js +34 -0
  300. package/dist/server/authError.js.map +1 -0
  301. package/dist/server/config.d.ts +1 -0
  302. package/dist/server/{providers.js → config.js} +43 -12
  303. package/dist/server/config.js.map +1 -0
  304. package/dist/server/cookies.d.ts +1 -38
  305. package/dist/server/cookies.js +3 -0
  306. package/dist/server/cookies.js.map +1 -1
  307. package/dist/server/core.d.ts +1436 -0
  308. package/dist/server/core.d.ts.map +1 -0
  309. package/dist/server/core.js +713 -0
  310. package/dist/server/core.js.map +1 -0
  311. package/dist/server/crypto.d.ts +8 -0
  312. package/dist/server/crypto.d.ts.map +1 -0
  313. package/dist/server/crypto.js +38 -0
  314. package/dist/server/crypto.js.map +1 -0
  315. package/dist/server/db.d.ts +1 -0
  316. package/dist/server/{implementation/db.js → db.js} +2 -1
  317. package/dist/server/db.js.map +1 -0
  318. package/dist/server/device.d.ts +1 -0
  319. package/dist/server/device.js +109 -0
  320. package/dist/server/device.js.map +1 -0
  321. package/dist/server/enterprise/config.d.ts +1 -0
  322. package/dist/server/enterprise/config.js +46 -0
  323. package/dist/server/enterprise/config.js.map +1 -0
  324. package/dist/server/enterprise/domain.d.ts +409 -0
  325. package/dist/server/enterprise/domain.d.ts.map +1 -0
  326. package/dist/server/enterprise/domain.js +885 -0
  327. package/dist/server/enterprise/domain.js.map +1 -0
  328. package/dist/server/enterprise/http.d.ts +26 -0
  329. package/dist/server/enterprise/http.d.ts.map +1 -0
  330. package/dist/server/enterprise/http.js +766 -0
  331. package/dist/server/enterprise/http.js.map +1 -0
  332. package/dist/server/enterprise/oidc.d.ts +1 -0
  333. package/dist/server/enterprise/oidc.js +248 -0
  334. package/dist/server/enterprise/oidc.js.map +1 -0
  335. package/dist/server/enterprise/policy.d.ts +1 -0
  336. package/dist/server/enterprise/policy.js +85 -0
  337. package/dist/server/enterprise/policy.js.map +1 -0
  338. package/dist/server/enterprise/saml.d.ts +1 -0
  339. package/dist/server/enterprise/saml.js +338 -0
  340. package/dist/server/enterprise/saml.js.map +1 -0
  341. package/dist/server/enterprise/scim.d.ts +1 -0
  342. package/dist/server/enterprise/scim.js +97 -0
  343. package/dist/server/enterprise/scim.js.map +1 -0
  344. package/dist/server/enterprise/shared.d.ts +5 -0
  345. package/dist/server/enterprise/shared.d.ts.map +1 -0
  346. package/dist/server/enterprise/shared.js +51 -0
  347. package/dist/server/enterprise/shared.js.map +1 -0
  348. package/dist/server/enterprise/validators.d.ts +1 -0
  349. package/dist/server/enterprise/validators.js +60 -0
  350. package/dist/server/enterprise/validators.js.map +1 -0
  351. package/dist/server/errors.d.ts +33 -1
  352. package/dist/server/errors.d.ts.map +1 -1
  353. package/dist/server/errors.js +44 -1
  354. package/dist/server/errors.js.map +1 -1
  355. package/dist/server/http.d.ts +59 -0
  356. package/dist/server/http.d.ts.map +1 -0
  357. package/dist/server/http.js +288 -0
  358. package/dist/server/http.js.map +1 -0
  359. package/dist/server/identity.d.ts +1 -0
  360. package/dist/server/identity.js +13 -0
  361. package/dist/server/identity.js.map +1 -0
  362. package/dist/server/index.d.ts +4 -182
  363. package/dist/server/index.js +4 -376
  364. package/dist/server/keys.d.ts +1 -0
  365. package/dist/{component/server/implementation → server}/keys.js +9 -31
  366. package/dist/server/keys.js.map +1 -0
  367. package/dist/server/limits.d.ts +1 -0
  368. package/dist/server/limits.js +61 -0
  369. package/dist/server/limits.js.map +1 -0
  370. package/dist/server/mounts.d.ts +647 -0
  371. package/dist/server/mounts.d.ts.map +1 -0
  372. package/dist/server/mounts.js +643 -0
  373. package/dist/server/mounts.js.map +1 -0
  374. package/dist/server/mutations/account.d.ts +30 -0
  375. package/dist/server/mutations/account.d.ts.map +1 -0
  376. package/dist/server/mutations/account.js +44 -0
  377. package/dist/server/mutations/account.js.map +1 -0
  378. package/dist/server/mutations/code.d.ts +30 -0
  379. package/dist/server/mutations/code.d.ts.map +1 -0
  380. package/dist/server/{implementation/mutations → mutations}/code.js +7 -4
  381. package/dist/server/mutations/code.js.map +1 -0
  382. package/dist/server/mutations/index.d.ts +14 -0
  383. package/dist/server/mutations/index.js +15 -0
  384. package/dist/server/mutations/invalidate.d.ts +20 -0
  385. package/dist/server/mutations/invalidate.d.ts.map +1 -0
  386. package/dist/server/mutations/invalidate.js +32 -0
  387. package/dist/server/mutations/invalidate.js.map +1 -0
  388. package/dist/server/mutations/oauth.d.ts +28 -0
  389. package/dist/server/mutations/oauth.d.ts.map +1 -0
  390. package/dist/server/mutations/oauth.js +110 -0
  391. package/dist/server/mutations/oauth.js.map +1 -0
  392. package/dist/server/mutations/refresh.d.ts +21 -0
  393. package/dist/server/mutations/refresh.d.ts.map +1 -0
  394. package/dist/server/mutations/refresh.js +119 -0
  395. package/dist/server/mutations/refresh.js.map +1 -0
  396. package/dist/server/mutations/register.d.ts +38 -0
  397. package/dist/server/mutations/register.d.ts.map +1 -0
  398. package/dist/server/mutations/register.js +83 -0
  399. package/dist/server/mutations/register.js.map +1 -0
  400. package/dist/server/mutations/retrieve.d.ts +33 -0
  401. package/dist/server/mutations/retrieve.d.ts.map +1 -0
  402. package/dist/server/mutations/retrieve.js +65 -0
  403. package/dist/server/mutations/retrieve.js.map +1 -0
  404. package/dist/server/mutations/signature.d.ts +22 -0
  405. package/dist/server/mutations/signature.d.ts.map +1 -0
  406. package/dist/server/mutations/signature.js +32 -0
  407. package/dist/server/mutations/signature.js.map +1 -0
  408. package/dist/server/mutations/signin.d.ts +22 -0
  409. package/dist/server/mutations/signin.d.ts.map +1 -0
  410. package/dist/server/{implementation/mutations → mutations}/signin.js +2 -2
  411. package/dist/server/mutations/signin.js.map +1 -0
  412. package/dist/server/mutations/signout.d.ts +16 -0
  413. package/dist/server/mutations/signout.d.ts.map +1 -0
  414. package/dist/server/mutations/signout.js +27 -0
  415. package/dist/server/mutations/signout.js.map +1 -0
  416. package/dist/server/mutations/store/refs.d.ts +12 -0
  417. package/dist/server/mutations/store/refs.d.ts.map +1 -0
  418. package/dist/server/mutations/store/refs.js +15 -0
  419. package/dist/server/mutations/store/refs.js.map +1 -0
  420. package/dist/server/mutations/store.d.ts +306 -0
  421. package/dist/server/mutations/store.d.ts.map +1 -0
  422. package/dist/server/mutations/store.js +85 -0
  423. package/dist/server/mutations/store.js.map +1 -0
  424. package/dist/server/mutations/verifier.d.ts +13 -0
  425. package/dist/server/mutations/verifier.d.ts.map +1 -0
  426. package/dist/server/mutations/verifier.js +18 -0
  427. package/dist/server/mutations/verifier.js.map +1 -0
  428. package/dist/server/mutations/verify.d.ts +26 -0
  429. package/dist/server/mutations/verify.d.ts.map +1 -0
  430. package/dist/server/mutations/verify.js +98 -0
  431. package/dist/server/mutations/verify.js.map +1 -0
  432. package/dist/server/oauth.d.ts +1 -48
  433. package/dist/server/oauth.js +107 -64
  434. package/dist/server/oauth.js.map +1 -1
  435. package/dist/server/passkey.d.ts +27 -0
  436. package/dist/server/passkey.d.ts.map +1 -0
  437. package/dist/server/passkey.js +328 -0
  438. package/dist/server/passkey.js.map +1 -0
  439. package/dist/server/redirects.d.ts +1 -0
  440. package/dist/{component/server/implementation → server}/redirects.js +13 -11
  441. package/dist/server/redirects.js.map +1 -0
  442. package/dist/server/refresh.d.ts +1 -0
  443. package/dist/server/refresh.js +96 -0
  444. package/dist/server/refresh.js.map +1 -0
  445. package/dist/server/runtime.d.ts +136 -0
  446. package/dist/server/runtime.d.ts.map +1 -0
  447. package/dist/server/runtime.js +413 -0
  448. package/dist/server/runtime.js.map +1 -0
  449. package/dist/server/sessions.d.ts +1 -0
  450. package/dist/{component/server/implementation → server}/sessions.js +14 -8
  451. package/dist/server/sessions.js.map +1 -0
  452. package/dist/server/signin.d.ts +1 -0
  453. package/dist/server/signin.js +201 -0
  454. package/dist/server/signin.js.map +1 -0
  455. package/dist/server/ssr.d.ts +226 -0
  456. package/dist/server/ssr.d.ts.map +1 -0
  457. package/dist/server/ssr.js +786 -0
  458. package/dist/server/ssr.js.map +1 -0
  459. package/dist/server/templates.d.ts +1 -21
  460. package/dist/server/templates.js +2 -1
  461. package/dist/server/templates.js.map +1 -1
  462. package/dist/server/tokens.d.ts +1 -0
  463. package/dist/server/tokens.js +17 -0
  464. package/dist/server/tokens.js.map +1 -0
  465. package/dist/server/totp.d.ts +1 -0
  466. package/dist/server/totp.js +148 -0
  467. package/dist/server/totp.js.map +1 -0
  468. package/dist/server/types.d.ts +498 -306
  469. package/dist/server/types.d.ts.map +1 -1
  470. package/dist/server/types.js +108 -1
  471. package/dist/server/types.js.map +1 -0
  472. package/dist/server/users.d.ts +1 -0
  473. package/dist/server/{implementation/users.js → users.js} +54 -35
  474. package/dist/server/users.js.map +1 -0
  475. package/dist/server/utils.d.ts +1 -6
  476. package/dist/server/utils.js +110 -4
  477. package/dist/server/utils.js.map +1 -1
  478. package/package.json +49 -46
  479. package/src/authorization/index.ts +83 -0
  480. package/src/cli/bin.ts +5 -0
  481. package/src/cli/command.ts +6 -5
  482. package/src/cli/index.ts +456 -248
  483. package/src/cli/keys.ts +3 -0
  484. package/src/client/core/types.ts +437 -0
  485. package/src/client/factors/device.ts +160 -0
  486. package/src/client/factors/passkey.ts +282 -0
  487. package/src/client/factors/totp.ts +150 -0
  488. package/src/client/index.ts +745 -989
  489. package/src/client/runtime/browser.ts +112 -0
  490. package/src/client/runtime/invite.ts +65 -0
  491. package/src/client/runtime/proxy.ts +111 -0
  492. package/src/client/runtime/storage.ts +79 -0
  493. package/src/component/_generated/api.ts +42 -0
  494. package/src/component/_generated/component.ts +3123 -102
  495. package/src/component/functions.ts +38 -22
  496. package/src/component/index.ts +10 -20
  497. package/src/component/model.ts +449 -0
  498. package/src/component/public/enterprise/audit.ts +120 -0
  499. package/src/component/public/enterprise/core.ts +354 -0
  500. package/src/component/public/enterprise/domains.ts +323 -0
  501. package/src/component/public/enterprise/scim.ts +396 -0
  502. package/src/component/public/enterprise/secrets.ts +132 -0
  503. package/src/component/public/enterprise/webhooks.ts +306 -0
  504. package/src/component/public/factors/devices.ts +223 -0
  505. package/src/component/public/factors/passkeys.ts +242 -0
  506. package/src/component/public/factors/totp.ts +258 -0
  507. package/src/component/public/groups/core.ts +481 -0
  508. package/src/component/public/groups/invites.ts +602 -0
  509. package/src/component/public/groups/members.ts +409 -0
  510. package/src/component/public/identity/accounts.ts +206 -0
  511. package/src/component/public/identity/codes.ts +148 -0
  512. package/src/component/public/identity/sessions.ts +209 -0
  513. package/src/component/public/identity/tokens.ts +250 -0
  514. package/src/component/public/identity/users.ts +354 -0
  515. package/src/component/public/identity/verifiers.ts +157 -0
  516. package/src/component/public/security/keys.ts +365 -0
  517. package/src/component/public/security/limits.ts +173 -0
  518. package/src/component/public.ts +26 -1766
  519. package/src/component/schema.ts +273 -100
  520. package/src/providers/anonymous.ts +10 -20
  521. package/src/providers/credentials.ts +14 -22
  522. package/src/providers/device.ts +3 -14
  523. package/src/providers/email.ts +83 -47
  524. package/src/providers/index.ts +7 -0
  525. package/src/providers/oauth.ts +5 -3
  526. package/src/providers/passkey.ts +0 -13
  527. package/src/providers/password.ts +307 -130
  528. package/src/providers/phone.ts +81 -37
  529. package/src/providers/sso.ts +54 -0
  530. package/src/providers/totp.ts +0 -13
  531. package/src/samlify.d.ts +53 -0
  532. package/src/server/auth.ts +701 -247
  533. package/src/server/authError.ts +44 -0
  534. package/src/server/{providers.ts → config.ts} +84 -15
  535. package/src/server/cookies.ts +8 -1
  536. package/src/server/core.ts +2095 -0
  537. package/src/server/crypto.ts +88 -0
  538. package/src/server/{implementation/db.ts → db.ts} +90 -15
  539. package/src/server/device.ts +221 -0
  540. package/src/server/enterprise/config.ts +51 -0
  541. package/src/server/enterprise/domain.ts +1751 -0
  542. package/src/server/enterprise/http.ts +1324 -0
  543. package/src/server/enterprise/oidc.ts +500 -0
  544. package/src/server/enterprise/policy.ts +128 -0
  545. package/src/server/enterprise/saml.ts +578 -0
  546. package/src/server/enterprise/scim.ts +135 -0
  547. package/src/server/enterprise/shared.ts +134 -0
  548. package/src/server/enterprise/validators.ts +93 -0
  549. package/src/server/errors.ts +130 -119
  550. package/src/server/http.ts +531 -0
  551. package/src/server/identity.ts +18 -0
  552. package/src/server/index.ts +32 -650
  553. package/src/server/{implementation/keys.ts → keys.ts} +16 -44
  554. package/src/server/limits.ts +134 -0
  555. package/src/server/mounts.ts +948 -0
  556. package/src/server/mutations/account.ts +76 -0
  557. package/src/server/{implementation/mutations → mutations}/code.ts +22 -11
  558. package/src/server/mutations/index.ts +13 -0
  559. package/src/server/mutations/invalidate.ts +50 -0
  560. package/src/server/mutations/oauth.ts +237 -0
  561. package/src/server/mutations/refresh.ts +298 -0
  562. package/src/server/mutations/register.ts +200 -0
  563. package/src/server/mutations/retrieve.ts +109 -0
  564. package/src/server/mutations/signature.ts +50 -0
  565. package/src/server/{implementation/mutations → mutations}/signin.ts +9 -7
  566. package/src/server/mutations/signout.ts +43 -0
  567. package/src/server/mutations/store/refs.ts +10 -0
  568. package/src/server/mutations/store.ts +138 -0
  569. package/src/server/mutations/verifier.ts +34 -0
  570. package/src/server/mutations/verify.ts +202 -0
  571. package/src/server/oauth.ts +243 -131
  572. package/src/server/passkey.ts +784 -0
  573. package/src/server/{implementation/redirects.ts → redirects.ts} +21 -16
  574. package/src/server/refresh.ts +222 -0
  575. package/src/server/runtime.ts +880 -0
  576. package/src/server/{implementation/sessions.ts → sessions.ts} +33 -25
  577. package/src/server/signin.ts +438 -0
  578. package/src/server/ssr.ts +1764 -0
  579. package/src/server/templates.ts +8 -3
  580. package/src/server/{implementation/tokens.ts → tokens.ts} +11 -5
  581. package/src/server/totp.ts +349 -0
  582. package/src/server/types.ts +972 -207
  583. package/src/server/{implementation/users.ts → users.ts} +129 -75
  584. package/src/server/utils.ts +192 -5
  585. package/src/test.ts +28 -4
  586. package/dist/bin.cjs +0 -27757
  587. package/dist/component/providers/email.js +0 -47
  588. package/dist/component/providers/email.js.map +0 -1
  589. package/dist/component/public.js.map +0 -1
  590. package/dist/component/server/implementation/db.js.map +0 -1
  591. package/dist/component/server/implementation/device.js +0 -135
  592. package/dist/component/server/implementation/device.js.map +0 -1
  593. package/dist/component/server/implementation/index.d.ts +0 -870
  594. package/dist/component/server/implementation/index.d.ts.map +0 -1
  595. package/dist/component/server/implementation/index.js +0 -610
  596. package/dist/component/server/implementation/index.js.map +0 -1
  597. package/dist/component/server/implementation/keys.js.map +0 -1
  598. package/dist/component/server/implementation/mutations/account.js +0 -39
  599. package/dist/component/server/implementation/mutations/account.js.map +0 -1
  600. package/dist/component/server/implementation/mutations/code.js.map +0 -1
  601. package/dist/component/server/implementation/mutations/index.js +0 -70
  602. package/dist/component/server/implementation/mutations/index.js.map +0 -1
  603. package/dist/component/server/implementation/mutations/invalidate.js +0 -29
  604. package/dist/component/server/implementation/mutations/invalidate.js.map +0 -1
  605. package/dist/component/server/implementation/mutations/oauth.js +0 -51
  606. package/dist/component/server/implementation/mutations/oauth.js.map +0 -1
  607. package/dist/component/server/implementation/mutations/refresh.js +0 -85
  608. package/dist/component/server/implementation/mutations/refresh.js.map +0 -1
  609. package/dist/component/server/implementation/mutations/register.js +0 -65
  610. package/dist/component/server/implementation/mutations/register.js.map +0 -1
  611. package/dist/component/server/implementation/mutations/retrieve.js +0 -50
  612. package/dist/component/server/implementation/mutations/retrieve.js.map +0 -1
  613. package/dist/component/server/implementation/mutations/signature.js +0 -27
  614. package/dist/component/server/implementation/mutations/signature.js.map +0 -1
  615. package/dist/component/server/implementation/mutations/signin.js.map +0 -1
  616. package/dist/component/server/implementation/mutations/signout.js +0 -27
  617. package/dist/component/server/implementation/mutations/signout.js.map +0 -1
  618. package/dist/component/server/implementation/mutations/store.js +0 -12
  619. package/dist/component/server/implementation/mutations/store.js.map +0 -1
  620. package/dist/component/server/implementation/mutations/verifier.js +0 -16
  621. package/dist/component/server/implementation/mutations/verifier.js.map +0 -1
  622. package/dist/component/server/implementation/mutations/verify.js +0 -105
  623. package/dist/component/server/implementation/mutations/verify.js.map +0 -1
  624. package/dist/component/server/implementation/passkey.js +0 -307
  625. package/dist/component/server/implementation/passkey.js.map +0 -1
  626. package/dist/component/server/implementation/provider.js +0 -19
  627. package/dist/component/server/implementation/provider.js.map +0 -1
  628. package/dist/component/server/implementation/ratelimit.js +0 -48
  629. package/dist/component/server/implementation/ratelimit.js.map +0 -1
  630. package/dist/component/server/implementation/redirects.js.map +0 -1
  631. package/dist/component/server/implementation/refresh.js +0 -109
  632. package/dist/component/server/implementation/refresh.js.map +0 -1
  633. package/dist/component/server/implementation/sessions.js.map +0 -1
  634. package/dist/component/server/implementation/signin.js +0 -148
  635. package/dist/component/server/implementation/signin.js.map +0 -1
  636. package/dist/component/server/implementation/tokens.js +0 -15
  637. package/dist/component/server/implementation/tokens.js.map +0 -1
  638. package/dist/component/server/implementation/totp.js +0 -142
  639. package/dist/component/server/implementation/totp.js.map +0 -1
  640. package/dist/component/server/implementation/types.d.ts +0 -42
  641. package/dist/component/server/implementation/types.d.ts.map +0 -1
  642. package/dist/component/server/implementation/types.js.map +0 -1
  643. package/dist/component/server/implementation/users.js.map +0 -1
  644. package/dist/component/server/implementation/utils.js +0 -56
  645. package/dist/component/server/implementation/utils.js.map +0 -1
  646. package/dist/component/server/providers.js.map +0 -1
  647. package/dist/component/server/templates.js +0 -84
  648. package/dist/component/server/templates.js.map +0 -1
  649. package/dist/server/cookies.d.ts.map +0 -1
  650. package/dist/server/implementation/db.d.ts +0 -86
  651. package/dist/server/implementation/db.d.ts.map +0 -1
  652. package/dist/server/implementation/db.js.map +0 -1
  653. package/dist/server/implementation/device.d.ts +0 -30
  654. package/dist/server/implementation/device.d.ts.map +0 -1
  655. package/dist/server/implementation/device.js +0 -135
  656. package/dist/server/implementation/device.js.map +0 -1
  657. package/dist/server/implementation/index.d.ts +0 -870
  658. package/dist/server/implementation/index.d.ts.map +0 -1
  659. package/dist/server/implementation/index.js +0 -610
  660. package/dist/server/implementation/index.js.map +0 -1
  661. package/dist/server/implementation/keys.d.ts +0 -66
  662. package/dist/server/implementation/keys.d.ts.map +0 -1
  663. package/dist/server/implementation/keys.js.map +0 -1
  664. package/dist/server/implementation/mutations/account.d.ts +0 -27
  665. package/dist/server/implementation/mutations/account.d.ts.map +0 -1
  666. package/dist/server/implementation/mutations/account.js +0 -39
  667. package/dist/server/implementation/mutations/account.js.map +0 -1
  668. package/dist/server/implementation/mutations/code.d.ts +0 -29
  669. package/dist/server/implementation/mutations/code.d.ts.map +0 -1
  670. package/dist/server/implementation/mutations/code.js.map +0 -1
  671. package/dist/server/implementation/mutations/index.d.ts +0 -310
  672. package/dist/server/implementation/mutations/index.d.ts.map +0 -1
  673. package/dist/server/implementation/mutations/index.js +0 -70
  674. package/dist/server/implementation/mutations/index.js.map +0 -1
  675. package/dist/server/implementation/mutations/invalidate.d.ts +0 -18
  676. package/dist/server/implementation/mutations/invalidate.d.ts.map +0 -1
  677. package/dist/server/implementation/mutations/invalidate.js +0 -29
  678. package/dist/server/implementation/mutations/invalidate.js.map +0 -1
  679. package/dist/server/implementation/mutations/oauth.d.ts +0 -23
  680. package/dist/server/implementation/mutations/oauth.d.ts.map +0 -1
  681. package/dist/server/implementation/mutations/oauth.js +0 -51
  682. package/dist/server/implementation/mutations/oauth.js.map +0 -1
  683. package/dist/server/implementation/mutations/refresh.d.ts +0 -20
  684. package/dist/server/implementation/mutations/refresh.d.ts.map +0 -1
  685. package/dist/server/implementation/mutations/refresh.js +0 -85
  686. package/dist/server/implementation/mutations/refresh.js.map +0 -1
  687. package/dist/server/implementation/mutations/register.d.ts +0 -37
  688. package/dist/server/implementation/mutations/register.d.ts.map +0 -1
  689. package/dist/server/implementation/mutations/register.js +0 -65
  690. package/dist/server/implementation/mutations/register.js.map +0 -1
  691. package/dist/server/implementation/mutations/retrieve.d.ts +0 -31
  692. package/dist/server/implementation/mutations/retrieve.d.ts.map +0 -1
  693. package/dist/server/implementation/mutations/retrieve.js +0 -50
  694. package/dist/server/implementation/mutations/retrieve.js.map +0 -1
  695. package/dist/server/implementation/mutations/signature.d.ts +0 -19
  696. package/dist/server/implementation/mutations/signature.d.ts.map +0 -1
  697. package/dist/server/implementation/mutations/signature.js +0 -27
  698. package/dist/server/implementation/mutations/signature.js.map +0 -1
  699. package/dist/server/implementation/mutations/signin.d.ts +0 -21
  700. package/dist/server/implementation/mutations/signin.d.ts.map +0 -1
  701. package/dist/server/implementation/mutations/signin.js.map +0 -1
  702. package/dist/server/implementation/mutations/signout.d.ts +0 -14
  703. package/dist/server/implementation/mutations/signout.d.ts.map +0 -1
  704. package/dist/server/implementation/mutations/signout.js +0 -27
  705. package/dist/server/implementation/mutations/signout.js.map +0 -1
  706. package/dist/server/implementation/mutations/store.d.ts +0 -11
  707. package/dist/server/implementation/mutations/store.d.ts.map +0 -1
  708. package/dist/server/implementation/mutations/store.js +0 -12
  709. package/dist/server/implementation/mutations/store.js.map +0 -1
  710. package/dist/server/implementation/mutations/verifier.d.ts +0 -11
  711. package/dist/server/implementation/mutations/verifier.d.ts.map +0 -1
  712. package/dist/server/implementation/mutations/verifier.js +0 -16
  713. package/dist/server/implementation/mutations/verifier.js.map +0 -1
  714. package/dist/server/implementation/mutations/verify.d.ts +0 -25
  715. package/dist/server/implementation/mutations/verify.d.ts.map +0 -1
  716. package/dist/server/implementation/mutations/verify.js +0 -105
  717. package/dist/server/implementation/mutations/verify.js.map +0 -1
  718. package/dist/server/implementation/passkey.d.ts +0 -24
  719. package/dist/server/implementation/passkey.d.ts.map +0 -1
  720. package/dist/server/implementation/passkey.js +0 -307
  721. package/dist/server/implementation/passkey.js.map +0 -1
  722. package/dist/server/implementation/provider.d.ts +0 -10
  723. package/dist/server/implementation/provider.d.ts.map +0 -1
  724. package/dist/server/implementation/provider.js +0 -19
  725. package/dist/server/implementation/provider.js.map +0 -1
  726. package/dist/server/implementation/ratelimit.d.ts +0 -10
  727. package/dist/server/implementation/ratelimit.d.ts.map +0 -1
  728. package/dist/server/implementation/ratelimit.js +0 -48
  729. package/dist/server/implementation/ratelimit.js.map +0 -1
  730. package/dist/server/implementation/redirects.d.ts +0 -10
  731. package/dist/server/implementation/redirects.d.ts.map +0 -1
  732. package/dist/server/implementation/redirects.js.map +0 -1
  733. package/dist/server/implementation/refresh.d.ts +0 -37
  734. package/dist/server/implementation/refresh.d.ts.map +0 -1
  735. package/dist/server/implementation/refresh.js +0 -109
  736. package/dist/server/implementation/refresh.js.map +0 -1
  737. package/dist/server/implementation/sessions.d.ts +0 -29
  738. package/dist/server/implementation/sessions.d.ts.map +0 -1
  739. package/dist/server/implementation/sessions.js.map +0 -1
  740. package/dist/server/implementation/signin.d.ts +0 -55
  741. package/dist/server/implementation/signin.d.ts.map +0 -1
  742. package/dist/server/implementation/signin.js +0 -148
  743. package/dist/server/implementation/signin.js.map +0 -1
  744. package/dist/server/implementation/tokens.d.ts +0 -11
  745. package/dist/server/implementation/tokens.d.ts.map +0 -1
  746. package/dist/server/implementation/tokens.js +0 -15
  747. package/dist/server/implementation/tokens.js.map +0 -1
  748. package/dist/server/implementation/totp.d.ts +0 -31
  749. package/dist/server/implementation/totp.d.ts.map +0 -1
  750. package/dist/server/implementation/totp.js +0 -142
  751. package/dist/server/implementation/totp.js.map +0 -1
  752. package/dist/server/implementation/types.d.ts +0 -189
  753. package/dist/server/implementation/types.d.ts.map +0 -1
  754. package/dist/server/implementation/types.js +0 -97
  755. package/dist/server/implementation/types.js.map +0 -1
  756. package/dist/server/implementation/users.d.ts +0 -30
  757. package/dist/server/implementation/users.d.ts.map +0 -1
  758. package/dist/server/implementation/users.js.map +0 -1
  759. package/dist/server/implementation/utils.d.ts +0 -19
  760. package/dist/server/implementation/utils.d.ts.map +0 -1
  761. package/dist/server/implementation/utils.js +0 -56
  762. package/dist/server/implementation/utils.js.map +0 -1
  763. package/dist/server/index.d.ts.map +0 -1
  764. package/dist/server/index.js.map +0 -1
  765. package/dist/server/oauth.d.ts.map +0 -1
  766. package/dist/server/providers.d.ts +0 -72
  767. package/dist/server/providers.d.ts.map +0 -1
  768. package/dist/server/providers.js.map +0 -1
  769. package/dist/server/templates.d.ts.map +0 -1
  770. package/dist/server/utils.d.ts.map +0 -1
  771. package/dist/server/version.d.ts +0 -5
  772. package/dist/server/version.d.ts.map +0 -1
  773. package/dist/server/version.js +0 -6
  774. package/dist/server/version.js.map +0 -1
  775. package/src/cli/utils.ts +0 -248
  776. package/src/server/implementation/device.ts +0 -307
  777. package/src/server/implementation/index.ts +0 -1583
  778. package/src/server/implementation/mutations/account.ts +0 -50
  779. package/src/server/implementation/mutations/index.ts +0 -157
  780. package/src/server/implementation/mutations/invalidate.ts +0 -42
  781. package/src/server/implementation/mutations/oauth.ts +0 -73
  782. package/src/server/implementation/mutations/refresh.ts +0 -175
  783. package/src/server/implementation/mutations/register.ts +0 -100
  784. package/src/server/implementation/mutations/retrieve.ts +0 -79
  785. package/src/server/implementation/mutations/signature.ts +0 -39
  786. package/src/server/implementation/mutations/signout.ts +0 -35
  787. package/src/server/implementation/mutations/store.ts +0 -7
  788. package/src/server/implementation/mutations/verifier.ts +0 -24
  789. package/src/server/implementation/mutations/verify.ts +0 -194
  790. package/src/server/implementation/passkey.ts +0 -620
  791. package/src/server/implementation/provider.ts +0 -36
  792. package/src/server/implementation/ratelimit.ts +0 -79
  793. package/src/server/implementation/refresh.ts +0 -172
  794. package/src/server/implementation/signin.ts +0 -296
  795. package/src/server/implementation/totp.ts +0 -342
  796. package/src/server/implementation/types.ts +0 -444
  797. package/src/server/implementation/utils.ts +0 -91
  798. package/src/server/version.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mounts.js","names":[],"sources":["../../src/server/mounts.ts"],"sourcesContent":["import { actionGeneric, mutationGeneric, queryGeneric } from \"convex/server\";\nimport { ConvexError, v } from \"convex/values\";\n\nimport type { AuthApi } from \"./auth\";\nimport {\n enterpriseConnectionWhereValidator,\n enterpriseDomainInputValidator,\n enterpriseDomainVerificationInputValidator,\n enterprisePolicyPatchValidator,\n enterpriseSamlAttributeMappingValidator,\n enterpriseSamlSpValidator,\n enterpriseStatusValidator,\n} from \"./enterprise/validators\";\nimport type { AuthAuthorizationConfig, AuthRoleId } from \"./types\";\n\n/**\n * Permission identifiers used by mounted enterprise admin APIs.\n *\n * These permission strings are passed to your {@link EnterpriseAuthorizer}\n * callback so app code can decide whether the current user may perform a\n * specific SSO or SCIM management operation.\n *\n * @example\n * ```ts\n * const authorized: EnterpriseAuthorizer = async (ctx, input) => {\n * if (input.permission === \"sso.connection.create\") {\n * // Only org admins may create SSO connections\n * }\n * };\n * ```\n */\nexport type EnterpriseAdminPermission =\n | \"sso.connection.create\"\n | \"sso.connection.read\"\n | \"sso.connection.manage\"\n | \"sso.domain.manage\"\n | \"sso.protocol.manage\"\n | \"sso.policy.manage\"\n | \"sso.audit.read\"\n | \"sso.webhook.manage\"\n | \"scim.manage\";\n\n/**\n * Input passed to an {@link EnterpriseAuthorizer}.\n *\n * Contains the acting user, the requested permission, and the resolved\n * enterprise/group scope for the operation being authorized.\n */\nexport type EnterpriseAdminAuthorizationInput = {\n /** The signed-in user's ID performing the admin action. */\n userId: string;\n /** The {@link EnterpriseAdminPermission} being requested. */\n permission: EnterpriseAdminPermission;\n /** Enterprise document ID, if the operation targets a specific enterprise. */\n enterpriseId?: string;\n /** Group document ID, if explicitly provided by the caller. */\n groupId?: string;\n /** Resolved group ID from the enterprise record, or `null` when no enterprise context. */\n resolvedGroupId: string | null;\n};\n\n/**\n * App-defined authorization hook for mounted enterprise admin APIs.\n *\n * Return `void` (or resolve) to allow the operation, or `{ ok: false }` to deny it.\n *\n * @param ctx - Convex context with `ctx.auth` for identity checks.\n * @param input - The {@link EnterpriseAdminAuthorizationInput} describing who is doing what.\n * @returns `void` to allow, `{ ok: false }` to deny.\n *\n * @example\n * ```ts\n * import { EnterpriseAuthorizer } from \"@robelest/convex-auth/server\";\n *\n * const authorized: EnterpriseAuthorizer = async (ctx, input) => {\n * const identity = await ctx.auth.getUserIdentity();\n * if (!identity) return { ok: false };\n * // Allow all admin ops for the org owner\n * };\n * ```\n */\nexport type EnterpriseAuthorizer = (\n ctx: { auth: import(\"convex/server\").Auth },\n input: EnterpriseAdminAuthorizationInput,\n) => Promise<void | { ok: false }>;\n\ntype RoleRef<TRoleId extends string> = { id: TRoleId };\n\ntype MountedEnterpriseOptions<TRoleId extends string = string> = {\n admin?: {\n authorized?: EnterpriseAuthorizer;\n roles?: Array<TRoleId | RoleRef<TRoleId>>;\n };\n};\n\n/**\n * Configuration for {@link enterprise}, {@link sso}, and {@link scim}\n * mounted admin APIs.\n *\n * @typeParam TRoleId - Role IDs that may be assigned to enterprise creators.\n *\n * @example\n * ```ts\n * import { enterprise, EnterpriseMountOptions } from \"@robelest/convex-auth/server\";\n *\n * const options: EnterpriseMountOptions = {\n * admin: {\n * authorized: async (ctx, input) => {\n * // Verify the user has permission for `input.permission`\n * },\n * roles: [\"admin\", \"owner\"],\n * },\n * };\n * ```\n */\nexport type EnterpriseMountOptions<TRoleId extends string = string> = {\n admin: {\n authorized: EnterpriseAuthorizer;\n roles?: Array<TRoleId | RoleRef<TRoleId>>;\n };\n};\n\ntype MountedEnterpriseTarget = {\n enterpriseId?: string;\n groupId?: string;\n domain?: string;\n};\n\nfunction requireSignedInUser(auth: Pick<AuthApi, \"user\">) {\n return async (ctx: {\n auth: import(\"convex/server\").Auth;\n }): Promise<string | null> => {\n return await auth.user.id(ctx as never);\n };\n}\n\nfunction normalizeCreatorRoleIds<TRoleId extends string>(\n roles?: Array<TRoleId | RoleRef<TRoleId>>,\n) {\n return roles?.map((role) => (typeof role === \"string\" ? role : role.id));\n}\n\nasync function resolveMountedEnterpriseTarget(\n auth: Pick<AuthApi, \"sso\">,\n ctx: { auth: import(\"convex/server\").Auth },\n target: MountedEnterpriseTarget,\n) {\n if (target.groupId !== undefined) {\n return {\n enterpriseId: target.enterpriseId,\n groupId: target.groupId,\n resolvedGroupId: target.groupId,\n };\n }\n\n if (target.enterpriseId !== undefined) {\n const enterprise = await auth.sso.admin.connection.get(\n ctx as never,\n target.enterpriseId,\n );\n if (enterprise === null) {\n throw new ConvexError({\n code: \"INVALID_PARAMETERS\",\n message: \"Enterprise not found.\",\n });\n }\n return {\n enterpriseId: enterprise._id,\n groupId: enterprise.groupId,\n resolvedGroupId: enterprise.groupId,\n };\n }\n\n if (target.domain !== undefined) {\n const resolved = await auth.sso.admin.connection.getByDomain(\n ctx as never,\n target.domain,\n );\n if (resolved?.enterprise === undefined) {\n throw new ConvexError({\n code: \"INVALID_PARAMETERS\",\n message: \"Enterprise not found.\",\n });\n }\n return {\n enterpriseId: resolved.enterprise._id,\n groupId: resolved.enterprise.groupId,\n resolvedGroupId: resolved.enterprise.groupId,\n };\n }\n\n return {\n enterpriseId: undefined,\n groupId: undefined,\n resolvedGroupId: null,\n };\n}\n\nfunction createMountedAdminAuthorizer(\n auth: Pick<AuthApi, \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions,\n) {\n const requireUserId = requireSignedInUser(auth);\n\n return async (\n ctx: { auth: import(\"convex/server\").Auth },\n permission: EnterpriseAdminPermission,\n target: MountedEnterpriseTarget = {},\n ) => {\n const userId = await requireUserId(ctx);\n if (userId === null) {\n return { ok: false as const, code: \"NOT_SIGNED_IN\" as const };\n }\n if (!options?.admin?.authorized) {\n return { ok: false as const, code: \"FORBIDDEN\" as const };\n }\n const resolved = await resolveMountedEnterpriseTarget(auth, ctx, target);\n const authResult = await options.admin.authorized(ctx, {\n userId,\n permission,\n enterpriseId: resolved.enterpriseId,\n groupId: resolved.groupId,\n resolvedGroupId: resolved.resolvedGroupId,\n });\n if (authResult && !authResult.ok) {\n return { ok: false as const, code: \"FORBIDDEN\" as const };\n }\n return { ok: true as const, userId, ...resolved };\n };\n}\n\n/**\n * Build optional public SSO management actions that apps can mount under\n * `convex/auth/sso/**` when they want client-callable enterprise APIs.\n *\n * `admin` is for tenant-admin control-plane operations and should be mounted\n * with an explicit authorization policy. `client` is for end-user sign-in\n * helpers and does not require tenant-admin authorization.\n *\n * @param auth - Auth API subset providing `group`, `member`, `sso`, and `user` namespaces.\n * @param options - Optional admin authorization config. See {@link EnterpriseMountOptions}.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns An object with `admin` (connection CRUD, OIDC/SAML protocol config, policy,\n * audit, webhooks, domain management) and `client` (signIn, metadata) namespaces.\n *\n * @example\n * ```ts\n * // convex/auth/sso.ts\n * import { sso } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const mounted = sso(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * },\n * });\n *\n * export const createConnection = mounted.admin.connection.create;\n * export const signIn = mounted.client.signIn;\n * ```\n *\n * @see {@link scim}\n * @see {@link enterprise}\n */\nexport function sso<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<AuthApi<TAuthorization>, \"group\" | \"member\" | \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions<AuthRoleId<TAuthorization>>,\n) {\n const authorize = createMountedAdminAuthorizer(auth, options);\n const adminRoleIds = normalizeCreatorRoleIds(options?.admin?.roles);\n\n return {\n admin: {\n connection: {\n create: mutationGeneric({\n args: {\n groupId: v.optional(v.string()),\n name: v.optional(v.string()),\n slug: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n domain: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const authResult = await authorize(ctx, \"sso.connection.create\", {\n groupId: args.groupId,\n });\n if (!authResult.ok)\n return { ok: false as const, code: authResult.code };\n const { userId } = authResult;\n const createsGroup = args.groupId === undefined;\n const groupId =\n args.groupId ??\n (\n await auth.group.create(ctx as never, {\n name: args.name?.trim() || args.slug?.trim() || \"Enterprise\",\n slug: args.slug,\n type: \"enterprise\",\n })\n ).groupId;\n if (createsGroup) {\n await auth.member.create(ctx as never, {\n groupId,\n userId,\n roleIds: adminRoleIds,\n });\n }\n const created = await auth.sso.admin.connection.create(\n ctx as never,\n {\n groupId,\n name: args.name,\n slug: args.slug,\n status: args.status,\n },\n );\n if (args.domain) {\n await auth.sso.admin.connection.domain.set(\n ctx as never,\n created.enterpriseId,\n [{ domain: args.domain, isPrimary: true }],\n );\n }\n return {\n ...created,\n groupId,\n createdGroup: createsGroup,\n };\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n getByGroup: queryGeneric({\n args: { groupId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n groupId: args.groupId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.getByGroup(\n ctx as never,\n args.groupId,\n );\n },\n }),\n getByDomain: queryGeneric({\n args: { domain: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n domain: args.domain,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.getByDomain(\n ctx as never,\n args.domain,\n );\n },\n }),\n list: queryGeneric({\n args: {\n where: v.optional(enterpriseConnectionWhereValidator),\n limit: v.optional(v.number()),\n cursor: v.optional(v.union(v.string(), v.null())),\n orderBy: v.optional(v.string()),\n order: v.optional(v.union(v.literal(\"asc\"), v.literal(\"desc\"))),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n groupId: args.where?.groupId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.list(\n ctx as never,\n args as never,\n );\n },\n }),\n update: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n data: v.object({\n name: v.optional(v.string()),\n slug: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n }),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n await auth.sso.admin.connection.update(\n ctx as never,\n args.enterpriseId,\n args.data,\n );\n return { ok: true as const, enterpriseId: args.enterpriseId };\n },\n }),\n delete: mutationGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.delete(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n status: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.status(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n domain: {\n list: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.domain.list(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.connection.domain.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n set: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n domains: v.array(enterpriseDomainInputValidator),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.domain.set(\n ctx as never,\n args.enterpriseId,\n args.domains,\n );\n },\n }),\n verification: {\n request: mutationGeneric({\n args: enterpriseDomainVerificationInputValidator,\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.domain.verification.request(\n ctx as never,\n args,\n );\n },\n }),\n confirm: actionGeneric({\n args: enterpriseDomainVerificationInputValidator,\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.domain.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.connection.domain.verification.confirm(\n ctx as never,\n args,\n );\n },\n }),\n },\n },\n },\n oidc: {\n configure: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n issuer: v.optional(v.string()),\n discoveryUrl: v.optional(v.string()),\n clientId: v.string(),\n clientSecret: v.optional(v.string()),\n scopes: v.optional(v.array(v.string())),\n authorizationParams: v.optional(v.record(v.string(), v.string())),\n clockToleranceSeconds: v.optional(v.number()),\n strictIssuer: v.optional(v.boolean()),\n extraFields: v.optional(v.record(v.string(), v.string())),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.oidc.configure(ctx as never, args);\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.oidc.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n validate: actionGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.oidc.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n saml: {\n configure: actionGeneric({\n args: {\n enterpriseId: v.string(),\n metadataXml: v.optional(v.string()),\n metadataUrl: v.optional(v.string()),\n domains: v.optional(v.array(v.string())),\n signAuthnRequests: v.optional(v.boolean()),\n attributeMapping: v.optional(\n enterpriseSamlAttributeMappingValidator,\n ),\n sp: v.optional(enterpriseSamlSpValidator),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.saml.configure(ctx as never, args);\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.protocol.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.saml.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n policy: {\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.connection.read\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.policy.get(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n update: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n patch: enterprisePolicyPatchValidator,\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.policy.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.policy.update(\n ctx as never,\n args.enterpriseId,\n args.patch,\n );\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.policy.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.policy.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n audit: {\n list: queryGeneric({\n args: {\n enterpriseId: v.optional(v.string()),\n groupId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.audit.read\", {\n enterpriseId: args.enterpriseId,\n groupId: args.groupId,\n });\n if (!_auth.ok) return null;\n return await auth.sso.admin.audit.list(ctx as never, args);\n },\n }),\n },\n webhook: {\n delivery: {\n list: queryGeneric({\n args: {\n enterpriseId: v.string(),\n limit: v.optional(v.number()),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await (auth.sso.admin.webhook as any).delivery.list(\n ctx as never,\n args,\n );\n },\n }),\n },\n endpoint: {\n create: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n url: v.string(),\n secret: v.string(),\n subscriptions: v.array(v.string()),\n createdByUserId: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const authResult = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!authResult.ok)\n return { ok: false as const, code: authResult.code };\n const { userId } = authResult;\n const result = await auth.sso.admin.webhook.endpoint.create(\n ctx as never,\n {\n ...args,\n createdByUserId: args.createdByUserId ?? userId,\n },\n );\n return {\n _id: result.endpointId,\n enterpriseId: args.enterpriseId,\n url: args.url,\n subscriptions: args.subscriptions,\n createdByUserId: args.createdByUserId ?? userId,\n status: \"active\",\n failureCount: 0,\n };\n },\n }),\n list: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n const endpoints = await auth.sso.admin.webhook.endpoint.list(\n ctx as never,\n args.enterpriseId,\n );\n return endpoints.map((endpoint: Record<string, unknown>) => {\n const { secretHash: _secretHash, ...rest } = endpoint;\n return rest;\n });\n },\n }),\n disable: mutationGeneric({\n args: { endpointId: v.string() },\n handler: async (ctx, args) => {\n const endpoint = await auth.sso.admin.webhook.endpoint.get(\n ctx as never,\n args.endpointId,\n );\n if (!endpoint) {\n return {\n ok: false as const,\n code: \"INVALID_PARAMETERS\" as const,\n };\n }\n const _auth = await authorize(ctx, \"sso.webhook.manage\", {\n enterpriseId: endpoint.enterpriseId,\n groupId: endpoint.groupId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.sso.admin.webhook.endpoint.disable(\n ctx as never,\n args.endpointId,\n );\n },\n }),\n },\n },\n },\n client: {\n signIn: queryGeneric({\n args: {\n enterpriseId: v.optional(v.string()),\n email: v.optional(v.string()),\n domain: v.optional(v.string()),\n redirectTo: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n return await auth.sso.client.signIn(ctx as never, args);\n },\n }),\n metadata: queryGeneric({\n args: {\n enterpriseId: v.string(),\n entityId: v.optional(v.string()),\n acsUrl: v.optional(v.string()),\n sloUrl: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n return await auth.sso.client.metadata(ctx as never, args);\n },\n }),\n },\n };\n}\n\n/**\n * Build optional public SCIM management actions that apps can mount under\n * `convex/auth/scim/**` when they want client-callable enterprise admin APIs.\n *\n * @param auth - Auth API subset providing `scim`, `sso`, and `user` namespaces.\n * @param options - Optional admin authorization config. See {@link EnterpriseMountOptions}.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns An object with `admin.configure`, `admin.get`, and `admin.validate` actions.\n *\n * @example\n * ```ts\n * // convex/auth/scim.ts\n * import { scim } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const mounted = scim(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * },\n * });\n *\n * export const configure = mounted.admin.configure;\n * export const get = mounted.admin.get;\n * export const validate = mounted.admin.validate;\n * ```\n *\n * @see {@link sso}\n * @see {@link enterprise}\n */\nexport function scim<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<AuthApi<TAuthorization>, \"scim\" | \"sso\" | \"user\">,\n options?: MountedEnterpriseOptions<AuthRoleId<TAuthorization>>,\n) {\n const authorize = createMountedAdminAuthorizer(auth, options);\n\n return {\n admin: {\n configure: mutationGeneric({\n args: {\n enterpriseId: v.string(),\n basePath: v.optional(v.string()),\n status: v.optional(enterpriseStatusValidator),\n },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return { ok: false as const, code: _auth.code };\n return await auth.scim.admin.configure(ctx as never, args);\n },\n }),\n get: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.scim.admin.get(ctx as never, args.enterpriseId);\n },\n }),\n validate: queryGeneric({\n args: { enterpriseId: v.string() },\n handler: async (ctx, args) => {\n const _auth = await authorize(ctx, \"scim.manage\", {\n enterpriseId: args.enterpriseId,\n });\n if (!_auth.ok) return null;\n return await auth.scim.admin.validate(\n ctx as never,\n args.enterpriseId,\n );\n },\n }),\n },\n };\n}\n\n/**\n * Build a flat mounted enterprise API surface for app-owned Convex exports.\n *\n * Combines {@link sso} and {@link scim} into a single flat object with\n * all SSO connection, protocol, policy, audit, webhook, and SCIM\n * management functions plus end-user sign-in helpers. The `authorized`\n * callback is required for all admin operations.\n *\n * @param auth - Auth API subset providing `group`, `member`, `scim`, `sso`, and `user` namespaces.\n * @param options - Required {@link EnterpriseMountOptions} with an `admin.authorized` callback.\n * @typeParam TAuthorization - Optional authorization config for typed role IDs.\n * @returns A flat object with all enterprise management functions (e.g. `createConnection`,\n * `configureOidc`, `configureScim`, `signIn`, etc.).\n *\n * @example\n * ```ts\n * // convex/auth/enterprise.ts\n * import { enterprise } from \"@robelest/convex-auth/server\";\n * import { auth } from \"../auth\";\n *\n * const api = enterprise(auth, {\n * admin: {\n * authorized: async (ctx, input) => { /* check permissions *\\/ },\n * roles: [\"admin\"],\n * },\n * });\n *\n * export const createConnection = api.createConnection;\n * export const configureOidc = api.configureOidc;\n * export const signIn = api.signIn;\n * ```\n *\n * @see {@link sso}\n * @see {@link scim}\n */\nexport function enterprise<\n TAuthorization extends AuthAuthorizationConfig | undefined = undefined,\n>(\n auth: Pick<\n AuthApi<TAuthorization>,\n \"group\" | \"member\" | \"scim\" | \"sso\" | \"user\"\n >,\n options: EnterpriseMountOptions<AuthRoleId<TAuthorization>>,\n) {\n const mountedSso = sso(auth, {\n admin: options.admin,\n });\n const mountedScim = scim(auth, {\n admin: { authorized: options.admin.authorized },\n });\n\n return {\n createConnection: mountedSso.admin.connection.create,\n getConnection: mountedSso.admin.connection.get,\n getConnectionByGroup: mountedSso.admin.connection.getByGroup,\n getConnectionByDomain: mountedSso.admin.connection.getByDomain,\n listConnections: mountedSso.admin.connection.list,\n updateConnection: mountedSso.admin.connection.update,\n deleteConnection: mountedSso.admin.connection.delete,\n getConnectionStatus: mountedSso.admin.connection.status,\n listDomains: mountedSso.admin.connection.domain.list,\n validateDomains: mountedSso.admin.connection.domain.validate,\n setDomains: mountedSso.admin.connection.domain.set,\n requestDomainVerification:\n mountedSso.admin.connection.domain.verification.request,\n confirmDomainVerification:\n mountedSso.admin.connection.domain.verification.confirm,\n configureOidc: mountedSso.admin.oidc.configure,\n getOidc: mountedSso.admin.oidc.get,\n validateOidc: mountedSso.admin.oidc.validate,\n configureSaml: mountedSso.admin.saml.configure,\n validateSaml: mountedSso.admin.saml.validate,\n getPolicy: mountedSso.admin.policy.get,\n updatePolicy: mountedSso.admin.policy.update,\n validatePolicy: mountedSso.admin.policy.validate,\n listAudit: mountedSso.admin.audit.list,\n createWebhookEndpoint: mountedSso.admin.webhook.endpoint.create,\n listWebhookEndpoints: mountedSso.admin.webhook.endpoint.list,\n listWebhookDeliveries: mountedSso.admin.webhook.delivery.list,\n disableWebhookEndpoint: mountedSso.admin.webhook.endpoint.disable,\n configureScim: mountedScim.admin.configure,\n getScim: mountedScim.admin.get,\n validateScim: mountedScim.admin.validate,\n signIn: mountedSso.client.signIn,\n metadata: mountedSso.client.metadata,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { MutationCtx } from "../types.js";
2
+ import { AuthError } from "../authError.js";
3
+ import { Config, GetProviderOrThrowFunc } from "../crypto.js";
4
+ import { Fx } from "@robelest/fx";
5
+ import { GenericActionCtx, GenericDataModel } from "convex/server";
6
+ import * as convex_values3 from "convex/values";
7
+ import { Infer } from "convex/values";
8
+
9
+ //#region src/server/mutations/account.d.ts
10
+ declare const modifyAccountArgs: convex_values3.VObject<{
11
+ provider: string;
12
+ account: {
13
+ id: string;
14
+ secret: string;
15
+ };
16
+ }, {
17
+ provider: convex_values3.VString<string, "required">;
18
+ account: convex_values3.VObject<{
19
+ id: string;
20
+ secret: string;
21
+ }, {
22
+ id: convex_values3.VString<string, "required">;
23
+ secret: convex_values3.VString<string, "required">;
24
+ }, "required", "id" | "secret">;
25
+ }, "required", "provider" | "account" | "account.id" | "account.secret">;
26
+ declare function modifyAccountImpl(ctx: MutationCtx, args: Infer<typeof modifyAccountArgs>, getProviderOrThrow: GetProviderOrThrowFunc, config: Config): Fx<void, AuthError>;
27
+ declare const callModifyAccount: <DataModel extends GenericDataModel>(ctx: GenericActionCtx<DataModel>, args: Infer<typeof modifyAccountArgs>) => Promise<void>;
28
+ //#endregion
29
+ export { callModifyAccount, modifyAccountArgs, modifyAccountImpl };
30
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","names":[],"sources":["../../../src/server/mutations/account.ts"],"mappings":";;;;;;;;;cAYa,iBAAA,iBAAiB,OAAA;;;;;;;YAG5B,cAAA,CAAA,OAAA;;;;;;;;;iBAEc,iBAAA,CACd,GAAA,EAAK,WAAA,EACL,IAAA,EAAM,KAAA,QAAa,iBAAA,GACnB,kBAAA,EAAoB,sBAAA,EACpB,MAAA,EAAQ,MAAA,GACP,EAAA,OAAS,SAAA;AAAA,cA2CC,iBAAA,qBAA6C,gBAAA,EACxD,GAAA,EAAK,gBAAA,CAAiB,SAAA,GACtB,IAAA,EAAM,KAAA,QAAa,iBAAA,MAClB,OAAA"}
@@ -0,0 +1,44 @@
1
+ import { AuthError } from "../authError.js";
2
+ import { LOG_LEVELS, logWithLevel, maybeRedact } from "../utils.js";
3
+ import { authDb } from "../db.js";
4
+ import { hash } from "../crypto.js";
5
+ import { AUTH_STORE_REF } from "./store/refs.js";
6
+ import { Fx } from "@robelest/fx";
7
+ import { v } from "convex/values";
8
+
9
+ //#region src/server/mutations/account.ts
10
+ const modifyAccountArgs = v.object({
11
+ provider: v.string(),
12
+ account: v.object({
13
+ id: v.string(),
14
+ secret: v.string()
15
+ })
16
+ });
17
+ function modifyAccountImpl(ctx, args, getProviderOrThrow, config) {
18
+ const { provider, account } = args;
19
+ const db = authDb(ctx, config);
20
+ logWithLevel(LOG_LEVELS.DEBUG, "modifyAccountImpl args:", {
21
+ provider,
22
+ account: {
23
+ id: account.id,
24
+ secret: maybeRedact(account.secret ?? "")
25
+ }
26
+ });
27
+ return Fx.from({
28
+ ok: () => db.accounts.get(provider, account.id),
29
+ err: () => new AuthError("ACCOUNT_NOT_FOUND", `Cannot modify account with ID ${account.id} because it does not exist`)
30
+ }).pipe(Fx.chain((doc) => doc === null ? Fx.fail(new AuthError("ACCOUNT_NOT_FOUND", `Cannot modify account with ID ${account.id} because it does not exist`)) : Fx.succeed(doc)), Fx.chain((existingAccount) => hash(getProviderOrThrow(provider), account.secret).pipe(Fx.chain((hashedSecret) => Fx.from({
31
+ ok: () => db.accounts.patch(existingAccount._id, { secret: hashedSecret }),
32
+ err: () => new AuthError("INTERNAL_ERROR", "Failed to patch account")
33
+ })))), Fx.map(() => void 0));
34
+ }
35
+ const callModifyAccount = async (ctx, args) => {
36
+ return ctx.runMutation(AUTH_STORE_REF, { args: {
37
+ type: "modifyAccount",
38
+ ...args
39
+ } });
40
+ };
41
+
42
+ //#endregion
43
+ export { callModifyAccount, modifyAccountArgs, modifyAccountImpl };
44
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","names":[],"sources":["../../../src/server/mutations/account.ts"],"sourcesContent":["import { Fx } from \"@robelest/fx\";\nimport type { GenericActionCtx, GenericDataModel } from \"convex/server\";\nimport { Infer, v } from \"convex/values\";\n\nimport { authDb } from \"../db\";\nimport { AuthError } from \"../authError\";\nimport { GetProviderOrThrowFunc, hash } from \"../crypto\";\nimport * as Provider from \"../crypto\";\nimport { MutationCtx } from \"../types\";\nimport { LOG_LEVELS, logWithLevel, maybeRedact } from \"../utils\";\nimport { AUTH_STORE_REF } from \"./store/refs\";\n\nexport const modifyAccountArgs = v.object({\n provider: v.string(),\n account: v.object({ id: v.string(), secret: v.string() }),\n});\n\nexport function modifyAccountImpl(\n ctx: MutationCtx,\n args: Infer<typeof modifyAccountArgs>,\n getProviderOrThrow: GetProviderOrThrowFunc,\n config: Provider.Config,\n): Fx<void, AuthError> {\n const { provider, account } = args;\n const db = authDb(ctx, config);\n\n logWithLevel(LOG_LEVELS.DEBUG, \"modifyAccountImpl args:\", {\n provider,\n account: { id: account.id, secret: maybeRedact(account.secret ?? \"\") },\n });\n\n return Fx.from({\n ok: () => db.accounts.get(provider, account.id),\n err: () =>\n new AuthError(\n \"ACCOUNT_NOT_FOUND\",\n `Cannot modify account with ID ${account.id} because it does not exist`,\n ),\n }).pipe(\n Fx.chain((doc) =>\n doc === null\n ? Fx.fail(\n new AuthError(\n \"ACCOUNT_NOT_FOUND\",\n `Cannot modify account with ID ${account.id} because it does not exist`,\n ),\n )\n : Fx.succeed(doc),\n ),\n Fx.chain((existingAccount) =>\n hash(getProviderOrThrow(provider), account.secret).pipe(\n Fx.chain((hashedSecret) =>\n Fx.from({\n ok: () =>\n db.accounts.patch(existingAccount._id, { secret: hashedSecret }),\n err: () =>\n new AuthError(\"INTERNAL_ERROR\", \"Failed to patch account\"),\n }),\n ),\n ),\n ),\n Fx.map(() => undefined),\n );\n}\n\nexport const callModifyAccount = async <DataModel extends GenericDataModel>(\n ctx: GenericActionCtx<DataModel>,\n args: Infer<typeof modifyAccountArgs>,\n): Promise<void> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"modifyAccount\",\n ...args,\n },\n });\n};\n"],"mappings":";;;;;;;;;AAYA,MAAa,oBAAoB,EAAE,OAAO;CACxC,UAAU,EAAE,QAAQ;CACpB,SAAS,EAAE,OAAO;EAAE,IAAI,EAAE,QAAQ;EAAE,QAAQ,EAAE,QAAQ;EAAE,CAAC;CAC1D,CAAC;AAEF,SAAgB,kBACd,KACA,MACA,oBACA,QACqB;CACrB,MAAM,EAAE,UAAU,YAAY;CAC9B,MAAM,KAAK,OAAO,KAAK,OAAO;AAE9B,cAAa,WAAW,OAAO,2BAA2B;EACxD;EACA,SAAS;GAAE,IAAI,QAAQ;GAAI,QAAQ,YAAY,QAAQ,UAAU,GAAG;GAAE;EACvE,CAAC;AAEF,QAAO,GAAG,KAAK;EACb,UAAU,GAAG,SAAS,IAAI,UAAU,QAAQ,GAAG;EAC/C,WACE,IAAI,UACF,qBACA,iCAAiC,QAAQ,GAAG,4BAC7C;EACJ,CAAC,CAAC,KACD,GAAG,OAAO,QACR,QAAQ,OACJ,GAAG,KACD,IAAI,UACF,qBACA,iCAAiC,QAAQ,GAAG,4BAC7C,CACF,GACD,GAAG,QAAQ,IAAI,CACpB,EACD,GAAG,OAAO,oBACR,KAAK,mBAAmB,SAAS,EAAE,QAAQ,OAAO,CAAC,KACjD,GAAG,OAAO,iBACR,GAAG,KAAK;EACN,UACE,GAAG,SAAS,MAAM,gBAAgB,KAAK,EAAE,QAAQ,cAAc,CAAC;EAClE,WACE,IAAI,UAAU,kBAAkB,0BAA0B;EAC7D,CAAC,CACH,CACF,CACF,EACD,GAAG,UAAU,OAAU,CACxB;;AAGH,MAAa,oBAAoB,OAC/B,KACA,SACkB;AAClB,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM;EACJ,MAAM;EACN,GAAG;EACJ,EACF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { MutationCtx } from "../types.js";
2
+ import { Config, GetProviderOrThrowFunc } from "../crypto.js";
3
+ import { GenericActionCtx, GenericDataModel } from "convex/server";
4
+ import * as convex_values8 from "convex/values";
5
+ import { Infer } from "convex/values";
6
+
7
+ //#region src/server/mutations/code.d.ts
8
+ declare const createVerificationCodeArgs: convex_values8.VObject<{
9
+ email?: string | undefined;
10
+ accountId?: string | undefined;
11
+ phone?: string | undefined;
12
+ provider: string;
13
+ code: string;
14
+ expirationTime: number;
15
+ allowExtraProviders: boolean;
16
+ }, {
17
+ accountId: convex_values8.VString<string | undefined, "optional">;
18
+ provider: convex_values8.VString<string, "required">;
19
+ email: convex_values8.VString<string | undefined, "optional">;
20
+ phone: convex_values8.VString<string | undefined, "optional">;
21
+ code: convex_values8.VString<string, "required">;
22
+ expirationTime: convex_values8.VFloat64<number, "required">;
23
+ allowExtraProviders: convex_values8.VBoolean<boolean, "required">;
24
+ }, "required", "email" | "provider" | "code" | "accountId" | "phone" | "expirationTime" | "allowExtraProviders">;
25
+ type ReturnType = string;
26
+ declare function createVerificationCodeImpl(ctx: MutationCtx, args: Infer<typeof createVerificationCodeArgs>, getProviderOrThrow: GetProviderOrThrowFunc, config: Config): Promise<ReturnType>;
27
+ declare const callCreateVerificationCode: <DataModel extends GenericDataModel>(ctx: GenericActionCtx<DataModel>, args: Infer<typeof createVerificationCodeArgs>) => Promise<ReturnType>;
28
+ //#endregion
29
+ export { callCreateVerificationCode, createVerificationCodeArgs, createVerificationCodeImpl };
30
+ //# sourceMappingURL=code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.d.ts","names":[],"sources":["../../../src/server/mutations/code.ts"],"mappings":";;;;;;;cAaa,0BAAA,iBAA0B,OAAA;;;;;;;;;aAQrC,cAAA,CAAA,OAAA;;;;;;;;KAEG,UAAA;AAAA,iBAEiB,0BAAA,CACpB,GAAA,EAAK,WAAA,EACL,IAAA,EAAM,KAAA,QAAa,0BAAA,GACnB,kBAAA,EAAoB,sBAAA,EACpB,MAAA,EAAQ,MAAA,GACP,OAAA,CAAQ,UAAA;AAAA,cAoDE,0BAAA,qBACO,gBAAA,EAElB,GAAA,EAAK,gBAAA,CAAiB,SAAA,GACtB,IAAA,EAAM,KAAA,QAAa,0BAAA,MAClB,OAAA,CAAQ,UAAA"}
@@ -1,11 +1,12 @@
1
+ import { AuthError } from "../authError.js";
1
2
  import { LOG_LEVELS, logWithLevel, sha256 } from "../utils.js";
2
3
  import { authDb } from "../db.js";
4
+ import { AUTH_STORE_REF } from "./store/refs.js";
3
5
  import { getAuthSessionId } from "../sessions.js";
4
- import { AUTH_STORE_REF } from "./store.js";
5
- import { getAccountOrThrow, upsertUserAndAccount } from "../users.js";
6
+ import { upsertUserAndAccount } from "../users.js";
6
7
  import { v } from "convex/values";
7
8
 
8
- //#region src/server/implementation/mutations/code.ts
9
+ //#region src/server/mutations/code.ts
9
10
  const createVerificationCodeArgs = v.object({
10
11
  accountId: v.optional(v.string()),
11
12
  provider: v.string(),
@@ -20,7 +21,9 @@ async function createVerificationCodeImpl(ctx, args, getProviderOrThrow, config)
20
21
  const { email, phone, code, expirationTime, provider: providerId, accountId: existingAccountId, allowExtraProviders } = args;
21
22
  const db = authDb(ctx, config);
22
23
  const typedExistingAccountId = existingAccountId;
23
- const existingAccount = typedExistingAccountId !== void 0 ? await getAccountOrThrow(ctx, typedExistingAccountId, config) : await db.accounts.get(providerId, email ?? phone);
24
+ const existingAccount = typedExistingAccountId !== void 0 ? await db.accounts.getById(typedExistingAccountId) ?? (() => {
25
+ throw new AuthError("ACCOUNT_NOT_FOUND", `Expected an account to exist for ID "${typedExistingAccountId}"`).toConvexError();
26
+ })() : await db.accounts.get(providerId, email ?? phone);
24
27
  const provider = getProviderOrThrow(providerId, allowExtraProviders);
25
28
  const { accountId } = await upsertUserAndAccount(ctx, await getAuthSessionId(ctx), existingAccount !== null ? { existingAccount } : { providerAccountId: email ?? phone }, provider.type === "email" ? {
26
29
  type: "email",
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","names":[],"sources":["../../../src/server/mutations/code.ts"],"sourcesContent":["import type { GenericActionCtx, GenericDataModel } from \"convex/server\";\nimport { GenericId, Infer, v } from \"convex/values\";\n\nimport { authDb } from \"../db\";\nimport { AuthError } from \"../authError\";\nimport * as Provider from \"../crypto\";\nimport { getAuthSessionId } from \"../sessions\";\nimport { MutationCtx } from \"../types\";\nimport { EmailConfig, PhoneConfig } from \"../types\";\nimport { upsertUserAndAccount } from \"../users\";\nimport { LOG_LEVELS, logWithLevel, sha256 } from \"../utils\";\nimport { AUTH_STORE_REF } from \"./store/refs\";\n\nexport const createVerificationCodeArgs = v.object({\n accountId: v.optional(v.string()),\n provider: v.string(),\n email: v.optional(v.string()),\n phone: v.optional(v.string()),\n code: v.string(),\n expirationTime: v.number(),\n allowExtraProviders: v.boolean(),\n});\n\ntype ReturnType = string;\n\nexport async function createVerificationCodeImpl(\n ctx: MutationCtx,\n args: Infer<typeof createVerificationCodeArgs>,\n getProviderOrThrow: Provider.GetProviderOrThrowFunc,\n config: Provider.Config,\n): Promise<ReturnType> {\n logWithLevel(LOG_LEVELS.DEBUG, \"createVerificationCodeImpl args:\", args);\n const {\n email,\n phone,\n code,\n expirationTime,\n provider: providerId,\n accountId: existingAccountId,\n allowExtraProviders,\n } = args;\n const db = authDb(ctx, config);\n const typedExistingAccountId = existingAccountId as\n | GenericId<\"Account\">\n | undefined;\n const existingAccount =\n typedExistingAccountId !== undefined\n ? ((await db.accounts.getById(typedExistingAccountId)) ??\n (() => {\n throw new AuthError(\n \"ACCOUNT_NOT_FOUND\",\n `Expected an account to exist for ID \"${typedExistingAccountId}\"`,\n ).toConvexError();\n })())\n : await db.accounts.get(providerId, email ?? phone!);\n\n const provider = getProviderOrThrow(providerId, allowExtraProviders) as\n | EmailConfig\n | PhoneConfig;\n const { accountId } = await upsertUserAndAccount(\n ctx,\n await getAuthSessionId(ctx),\n existingAccount !== null\n ? { existingAccount }\n : { providerAccountId: email ?? phone! },\n provider.type === \"email\"\n ? { type: \"email\", provider, profile: { email: email! } }\n : { type: \"phone\", provider, profile: { phone: phone! } },\n config,\n );\n await generateUniqueVerificationCode(\n ctx,\n accountId,\n providerId,\n code,\n expirationTime,\n { email, phone },\n config,\n );\n return email ?? phone!;\n}\n\nexport const callCreateVerificationCode = async <\n DataModel extends GenericDataModel,\n>(\n ctx: GenericActionCtx<DataModel>,\n args: Infer<typeof createVerificationCodeArgs>,\n): Promise<ReturnType> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"createVerificationCode\",\n ...args,\n },\n });\n};\n\nasync function generateUniqueVerificationCode(\n ctx: MutationCtx,\n accountId: GenericId<\"Account\">,\n provider: string,\n code: string,\n expirationTime: number,\n { email, phone }: { email?: string; phone?: string },\n config: Provider.Config,\n) {\n const db = authDb(ctx, config);\n const existingCode = await db.verificationCodes.getByAccountId(accountId);\n if (existingCode !== null) {\n await db.verificationCodes.delete(existingCode._id);\n }\n await db.verificationCodes.create({\n accountId,\n provider,\n code: await sha256(code),\n expirationTime,\n emailVerified: email,\n phoneVerified: phone,\n });\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,6BAA6B,EAAE,OAAO;CACjD,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;CACjC,UAAU,EAAE,QAAQ;CACpB,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC7B,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC7B,MAAM,EAAE,QAAQ;CAChB,gBAAgB,EAAE,QAAQ;CAC1B,qBAAqB,EAAE,SAAS;CACjC,CAAC;AAIF,eAAsB,2BACpB,KACA,MACA,oBACA,QACqB;AACrB,cAAa,WAAW,OAAO,oCAAoC,KAAK;CACxE,MAAM,EACJ,OACA,OACA,MACA,gBACA,UAAU,YACV,WAAW,mBACX,wBACE;CACJ,MAAM,KAAK,OAAO,KAAK,OAAO;CAC9B,MAAM,yBAAyB;CAG/B,MAAM,kBACJ,2BAA2B,SACrB,MAAM,GAAG,SAAS,QAAQ,uBAAuB,WAC5C;AACL,QAAM,IAAI,UACR,qBACA,wCAAwC,uBAAuB,GAChE,CAAC,eAAe;KACf,GACJ,MAAM,GAAG,SAAS,IAAI,YAAY,SAAS,MAAO;CAExD,MAAM,WAAW,mBAAmB,YAAY,oBAAoB;CAGpE,MAAM,EAAE,cAAc,MAAM,qBAC1B,KACA,MAAM,iBAAiB,IAAI,EAC3B,oBAAoB,OAChB,EAAE,iBAAiB,GACnB,EAAE,mBAAmB,SAAS,OAAQ,EAC1C,SAAS,SAAS,UACd;EAAE,MAAM;EAAS;EAAU,SAAS,EAAS,OAAQ;EAAE,GACvD;EAAE,MAAM;EAAS;EAAU,SAAS,EAAS,OAAQ;EAAE,EAC3D,OACD;AACD,OAAM,+BACJ,KACA,WACA,YACA,MACA,gBACA;EAAE;EAAO;EAAO,EAChB,OACD;AACD,QAAO,SAAS;;AAGlB,MAAa,6BAA6B,OAGxC,KACA,SACwB;AACxB,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM;EACJ,MAAM;EACN,GAAG;EACJ,EACF,CAAC;;AAGJ,eAAe,+BACb,KACA,WACA,UACA,MACA,gBACA,EAAE,OAAO,SACT,QACA;CACA,MAAM,KAAK,OAAO,KAAK,OAAO;CAC9B,MAAM,eAAe,MAAM,GAAG,kBAAkB,eAAe,UAAU;AACzE,KAAI,iBAAiB,KACnB,OAAM,GAAG,kBAAkB,OAAO,aAAa,IAAI;AAErD,OAAM,GAAG,kBAAkB,OAAO;EAChC;EACA;EACA,MAAM,MAAM,OAAO,KAAK;EACxB;EACA,eAAe;EACf,eAAe;EAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { callModifyAccount } from "./account.js";
2
+ import { callCreateVerificationCode } from "./code.js";
3
+ import { callInvalidateSessions } from "./invalidate.js";
4
+ import { callUserOAuth } from "./oauth.js";
5
+ import { callRefreshSession } from "./refresh.js";
6
+ import { callCreateAccountFromCredentials } from "./register.js";
7
+ import { callRetrieveAccountWithCredentials } from "./retrieve.js";
8
+ import { callVerifierSignature } from "./signature.js";
9
+ import { callSignIn } from "./signin.js";
10
+ import { callSignOut } from "./signout.js";
11
+ import { storeArgs, storeImpl } from "./store.js";
12
+ import { callVerifier } from "./verifier.js";
13
+ import { callVerifyCodeAndSignIn } from "./verify.js";
14
+ export { callCreateAccountFromCredentials, callCreateVerificationCode, callInvalidateSessions, callModifyAccount, callRefreshSession, callRetrieveAccountWithCredentials, callSignIn, callSignOut, callUserOAuth, callVerifier, callVerifierSignature, callVerifyCodeAndSignIn, storeArgs, storeImpl };
@@ -0,0 +1,15 @@
1
+ import { callModifyAccount } from "./account.js";
2
+ import { callCreateVerificationCode } from "./code.js";
3
+ import { callInvalidateSessions } from "./invalidate.js";
4
+ import { callUserOAuth } from "./oauth.js";
5
+ import { callRefreshSession } from "./refresh.js";
6
+ import { callCreateAccountFromCredentials } from "./register.js";
7
+ import { callRetrieveAccountWithCredentials } from "./retrieve.js";
8
+ import { callVerifierSignature } from "./signature.js";
9
+ import { callSignIn } from "./signin.js";
10
+ import { callSignOut } from "./signout.js";
11
+ import { callVerifier } from "./verifier.js";
12
+ import { callVerifyCodeAndSignIn } from "./verify.js";
13
+ import { storeArgs, storeImpl } from "./store.js";
14
+
15
+ export { callCreateAccountFromCredentials, callCreateVerificationCode, callInvalidateSessions, callModifyAccount, callRefreshSession, callRetrieveAccountWithCredentials, callSignIn, callSignOut, callUserOAuth, callVerifier, callVerifierSignature, callVerifyCodeAndSignIn, storeArgs, storeImpl };
@@ -0,0 +1,20 @@
1
+ import { MutationCtx } from "../types.js";
2
+ import { Config } from "../crypto.js";
3
+ import { Fx } from "@robelest/fx";
4
+ import { GenericActionCtx, GenericDataModel } from "convex/server";
5
+ import * as convex_values0 from "convex/values";
6
+ import { Infer } from "convex/values";
7
+
8
+ //#region src/server/mutations/invalidate.d.ts
9
+ declare const invalidateSessionsArgs: convex_values0.VObject<{
10
+ except?: string[] | undefined;
11
+ userId: string;
12
+ }, {
13
+ userId: convex_values0.VString<string, "required">;
14
+ except: convex_values0.VArray<string[] | undefined, convex_values0.VString<string, "required">, "optional">;
15
+ }, "required", "userId" | "except">;
16
+ declare const callInvalidateSessions: <DataModel extends GenericDataModel>(ctx: GenericActionCtx<DataModel>, args: Infer<typeof invalidateSessionsArgs>) => Promise<void>;
17
+ declare function invalidateSessionsImpl(ctx: MutationCtx, args: Infer<typeof invalidateSessionsArgs>, config: Config): Fx<void, never>;
18
+ //#endregion
19
+ export { callInvalidateSessions, invalidateSessionsArgs, invalidateSessionsImpl };
20
+ //# sourceMappingURL=invalidate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidate.d.ts","names":[],"sources":["../../../src/server/mutations/invalidate.ts"],"mappings":";;;;;;;;cAWa,sBAAA,iBAAsB,OAAA;;;;UAGjC,cAAA,CAAA,OAAA;;;cAEW,sBAAA,qBACO,gBAAA,EAElB,GAAA,EAAK,gBAAA,CAAiB,SAAA,GACtB,IAAA,EAAM,KAAA,QAAa,sBAAA,MAClB,OAAA;AAAA,iBASa,sBAAA,CACd,GAAA,EAAK,WAAA,EACL,IAAA,EAAM,KAAA,QAAa,sBAAA,GACnB,MAAA,EAAQ,MAAA,GACP,EAAA"}
@@ -0,0 +1,32 @@
1
+ import { LOG_LEVELS, logWithLevel } from "../utils.js";
2
+ import { authDb } from "../db.js";
3
+ import { AUTH_STORE_REF } from "./store/refs.js";
4
+ import { deleteSession } from "../sessions.js";
5
+ import { Fx } from "@robelest/fx";
6
+ import { v } from "convex/values";
7
+
8
+ //#region src/server/mutations/invalidate.ts
9
+ const invalidateSessionsArgs = v.object({
10
+ userId: v.string(),
11
+ except: v.optional(v.array(v.string()))
12
+ });
13
+ const callInvalidateSessions = async (ctx, args) => {
14
+ return ctx.runMutation(AUTH_STORE_REF, { args: {
15
+ type: "invalidateSessions",
16
+ ...args
17
+ } });
18
+ };
19
+ function invalidateSessionsImpl(ctx, args, config) {
20
+ return Fx.gen(function* () {
21
+ logWithLevel(LOG_LEVELS.DEBUG, "invalidateSessionsImpl args:", args);
22
+ const { userId, except } = args;
23
+ const exceptSet = new Set(except ?? []);
24
+ const typedUserId = userId;
25
+ const sessions = yield* Fx.promise(() => authDb(ctx, config).sessions.listByUser(typedUserId));
26
+ yield* Fx.each(sessions, (session) => exceptSet.has(session._id) ? Fx.unit : Fx.promise(() => deleteSession(ctx, session, config)));
27
+ });
28
+ }
29
+
30
+ //#endregion
31
+ export { callInvalidateSessions, invalidateSessionsArgs, invalidateSessionsImpl };
32
+ //# sourceMappingURL=invalidate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidate.js","names":[],"sources":["../../../src/server/mutations/invalidate.ts"],"sourcesContent":["import { Fx } from \"@robelest/fx\";\nimport type { GenericActionCtx, GenericDataModel } from \"convex/server\";\nimport { GenericId, Infer, v } from \"convex/values\";\n\nimport { authDb } from \"../db\";\nimport * as Provider from \"../crypto\";\nimport { deleteSession } from \"../sessions\";\nimport { Doc, MutationCtx } from \"../types\";\nimport { LOG_LEVELS, logWithLevel } from \"../utils\";\nimport { AUTH_STORE_REF } from \"./store/refs\";\n\nexport const invalidateSessionsArgs = v.object({\n userId: v.string(),\n except: v.optional(v.array(v.string())),\n});\n\nexport const callInvalidateSessions = async <\n DataModel extends GenericDataModel,\n>(\n ctx: GenericActionCtx<DataModel>,\n args: Infer<typeof invalidateSessionsArgs>,\n): Promise<void> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"invalidateSessions\",\n ...args,\n },\n });\n};\n\nexport function invalidateSessionsImpl(\n ctx: MutationCtx,\n args: Infer<typeof invalidateSessionsArgs>,\n config: Provider.Config,\n): Fx<void, never> {\n return Fx.gen(function* () {\n logWithLevel(LOG_LEVELS.DEBUG, \"invalidateSessionsImpl args:\", args);\n const { userId, except } = args;\n const exceptSet = new Set(except ?? []);\n const typedUserId = userId as GenericId<\"User\">;\n const sessions = (yield* Fx.promise(() =>\n authDb(ctx, config).sessions.listByUser(typedUserId),\n )) as Doc<\"Session\">[];\n yield* Fx.each(sessions, (session: Doc<\"Session\">) =>\n exceptSet.has(session._id)\n ? Fx.unit\n : Fx.promise(() => deleteSession(ctx, session, config)),\n );\n });\n}\n"],"mappings":";;;;;;;;AAWA,MAAa,yBAAyB,EAAE,OAAO;CAC7C,QAAQ,EAAE,QAAQ;CAClB,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;CACxC,CAAC;AAEF,MAAa,yBAAyB,OAGpC,KACA,SACkB;AAClB,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM;EACJ,MAAM;EACN,GAAG;EACJ,EACF,CAAC;;AAGJ,SAAgB,uBACd,KACA,MACA,QACiB;AACjB,QAAO,GAAG,IAAI,aAAa;AACzB,eAAa,WAAW,OAAO,gCAAgC,KAAK;EACpE,MAAM,EAAE,QAAQ,WAAW;EAC3B,MAAM,YAAY,IAAI,IAAI,UAAU,EAAE,CAAC;EACvC,MAAM,cAAc;EACpB,MAAM,WAAY,OAAO,GAAG,cAC1B,OAAO,KAAK,OAAO,CAAC,SAAS,WAAW,YAAY,CACrD;AACD,SAAO,GAAG,KAAK,WAAW,YACxB,UAAU,IAAI,QAAQ,IAAI,GACtB,GAAG,OACH,GAAG,cAAc,cAAc,KAAK,SAAS,OAAO,CAAC,CAC1D;GACD"}
@@ -0,0 +1,28 @@
1
+ import { MutationCtx } from "../types.js";
2
+ import { AuthError } from "../authError.js";
3
+ import { Config, GetProviderOrThrowFunc } from "../crypto.js";
4
+ import { Fx } from "@robelest/fx";
5
+ import { GenericActionCtx, GenericDataModel } from "convex/server";
6
+ import * as convex_values89 from "convex/values";
7
+ import { Infer } from "convex/values";
8
+
9
+ //#region src/server/mutations/oauth.d.ts
10
+ declare const userOAuthArgs: convex_values89.VObject<{
11
+ accountExtend?: any;
12
+ provider: string;
13
+ signature: string;
14
+ providerAccountId: string;
15
+ profile: any;
16
+ }, {
17
+ provider: convex_values89.VString<string, "required">;
18
+ providerAccountId: convex_values89.VString<string, "required">;
19
+ profile: convex_values89.VAny<any, "required", string>;
20
+ signature: convex_values89.VString<string, "required">;
21
+ accountExtend: convex_values89.VAny<any, "optional", string>;
22
+ }, "required", "provider" | "signature" | "providerAccountId" | "profile" | "accountExtend" | `profile.${string}` | `accountExtend.${string}`>;
23
+ type ReturnType = string;
24
+ declare function userOAuthImpl(ctx: MutationCtx, args: Infer<typeof userOAuthArgs>, getProviderOrThrow: GetProviderOrThrowFunc, config: Config): Fx<ReturnType, AuthError>;
25
+ declare const callUserOAuth: <DataModel extends GenericDataModel>(ctx: GenericActionCtx<DataModel>, args: Infer<typeof userOAuthArgs>) => Promise<ReturnType>;
26
+ //#endregion
27
+ export { callUserOAuth, userOAuthArgs, userOAuthImpl };
28
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","names":[],"sources":["../../../src/server/mutations/oauth.ts"],"mappings":";;;;;;;;;cAwBa,aAAA,kBAAa,OAAA;;;;;;;YAMxB,eAAA,CAAA,OAAA;;;;;;KA8CG,UAAA;AAAA,iBAEW,aAAA,CACd,GAAA,EAAK,WAAA,EACL,IAAA,EAAM,KAAA,QAAa,aAAA,GACnB,kBAAA,EAAoB,sBAAA,EACpB,MAAA,EAAQ,MAAA,GACP,EAAA,CAAG,UAAA,EAAY,SAAA;AAAA,cA+IL,aAAA,qBAAyC,gBAAA,EACpD,GAAA,EAAK,gBAAA,CAAiB,SAAA,GACtB,IAAA,EAAM,KAAA,QAAa,aAAA,MAClB,OAAA,CAAQ,UAAA"}
@@ -0,0 +1,110 @@
1
+ import { AuthError } from "../authError.js";
2
+ import { generateRandomString, logWithLevel, sha256 } from "../utils.js";
3
+ import { authDb } from "../db.js";
4
+ import { AUTH_STORE_REF } from "./store/refs.js";
5
+ import { upsertUserAndAccount } from "../users.js";
6
+ import { ENTERPRISE_OIDC_PROVIDER_PREFIX, ENTERPRISE_SAML_PROVIDER_PREFIX, isEnterpriseProviderId } from "../enterprise/shared.js";
7
+ import { createSyntheticOAuthMaterializedConfig } from "../enterprise/oidc.js";
8
+ import { normalizeEnterprisePolicy } from "../enterprise/policy.js";
9
+ import { Fx } from "@robelest/fx";
10
+ import { v } from "convex/values";
11
+
12
+ //#region src/server/mutations/oauth.ts
13
+ const OAUTH_SIGN_IN_EXPIRATION_MS = 1e3 * 60 * 2;
14
+ const userOAuthArgs = v.object({
15
+ provider: v.string(),
16
+ providerAccountId: v.string(),
17
+ profile: v.any(),
18
+ signature: v.string(),
19
+ accountExtend: v.optional(v.any())
20
+ });
21
+ function normalizeAccountExtend(provider, providerAccountId, accountExtend) {
22
+ const baseIdentity = {
23
+ type: "oauth",
24
+ provider,
25
+ providerAccountId
26
+ };
27
+ if (provider.startsWith(ENTERPRISE_OIDC_PROVIDER_PREFIX)) {
28
+ baseIdentity.type = "enterprise-oidc";
29
+ baseIdentity.enterpriseId = provider.slice(ENTERPRISE_OIDC_PROVIDER_PREFIX.length);
30
+ }
31
+ if (provider.startsWith(ENTERPRISE_SAML_PROVIDER_PREFIX)) {
32
+ baseIdentity.type = "enterprise-saml";
33
+ baseIdentity.enterpriseId = provider.slice(ENTERPRISE_SAML_PROVIDER_PREFIX.length);
34
+ }
35
+ const provided = typeof accountExtend === "object" && accountExtend !== null && !Array.isArray(accountExtend) ? accountExtend : void 0;
36
+ const providedIdentity = provided && typeof provided.identity === "object" && provided.identity !== null && !Array.isArray(provided.identity) ? provided.identity : void 0;
37
+ return {
38
+ ...provided,
39
+ identity: {
40
+ ...baseIdentity,
41
+ ...providedIdentity
42
+ }
43
+ };
44
+ }
45
+ function userOAuthImpl(ctx, args, getProviderOrThrow, config) {
46
+ return Fx.gen(function* () {
47
+ logWithLevel("DEBUG", "userOAuthImpl args:", args);
48
+ const { profile, provider, providerAccountId, signature, accountExtend } = args;
49
+ const db = authDb(ctx, config);
50
+ const existingAccount = yield* Fx.promise(() => db.accounts.get(provider, providerAccountId));
51
+ const enterpriseId = provider.startsWith(ENTERPRISE_OIDC_PROVIDER_PREFIX) ? provider.slice(ENTERPRISE_OIDC_PROVIDER_PREFIX.length) : provider.startsWith(ENTERPRISE_SAML_PROVIDER_PREFIX) ? provider.slice(ENTERPRISE_SAML_PROVIDER_PREFIX.length) : null;
52
+ const enterprise = enterpriseId !== null ? yield* Fx.promise(() => ctx.runQuery(config.component.public.enterpriseGet, { enterpriseId })) : null;
53
+ const enterprisePolicy = enterprise ? normalizeEnterprisePolicy(enterprise.policy) : null;
54
+ const enterpriseProtocol = provider.startsWith(ENTERPRISE_OIDC_PROVIDER_PREFIX) ? "oidc" : provider.startsWith(ENTERPRISE_SAML_PROVIDER_PREFIX) ? "saml" : null;
55
+ const existingScimIdentity = enterpriseId !== null && existingAccount === null && enterprisePolicy?.provisioning.scimReuse.user === "externalId" ? yield* Fx.promise(() => ctx.runQuery(config.component.public.enterpriseScimIdentityGet, {
56
+ enterpriseId,
57
+ resourceType: "user",
58
+ externalId: providerAccountId
59
+ })) : null;
60
+ const verifier = yield* Fx.from({
61
+ ok: () => db.verifiers.getBySignature(signature),
62
+ err: () => new AuthError("OAUTH_INVALID_STATE")
63
+ }).pipe(Fx.chain((doc) => doc === null ? Fx.fail(new AuthError("OAUTH_INVALID_STATE")) : Fx.succeed(doc)));
64
+ const { accountId } = yield* Fx.promise(() => upsertUserAndAccount(ctx, verifier.sessionId ?? null, existingAccount !== null ? { existingAccount } : { providerAccountId }, {
65
+ type: "oauth",
66
+ provider: isEnterpriseProviderId(provider) ? createSyntheticOAuthMaterializedConfig(provider, { accountLinking: enterpriseProtocol === "oidc" ? enterprisePolicy?.identity.accountLinking.oidc : enterpriseProtocol === "saml" ? enterprisePolicy?.identity.accountLinking.saml : void 0 }) : getProviderOrThrow(provider),
67
+ profile,
68
+ accountExtend: normalizeAccountExtend(provider, providerAccountId, accountExtend)
69
+ }, config, existingScimIdentity?.userId ? { existingUserId: existingScimIdentity.userId } : void 0));
70
+ if (enterpriseId !== null && enterprisePolicy?.provisioning.jit.mode === "createUserAndMembership") {
71
+ const userId = (yield* Fx.promise(() => db.accounts.getById(accountId)))?.userId;
72
+ if (userId) {
73
+ const groupId = enterprise?.groupId;
74
+ if (groupId) {
75
+ if ((yield* Fx.promise(() => ctx.runQuery(config.component.public.memberGetByGroupAndUser, {
76
+ userId,
77
+ groupId
78
+ }))) === null) yield* Fx.promise(() => ctx.runMutation(config.component.public.memberAdd, {
79
+ groupId,
80
+ userId,
81
+ roleIds: enterprisePolicy.provisioning.jit.defaultRoleIds,
82
+ status: "active"
83
+ }));
84
+ }
85
+ }
86
+ }
87
+ const code = generateRandomString(8, "0123456789");
88
+ yield* Fx.promise(() => db.verifiers.delete(verifier._id));
89
+ const existingVerificationCode = yield* Fx.promise(() => db.verificationCodes.getByAccountId(accountId));
90
+ if (existingVerificationCode !== null) yield* Fx.promise(() => db.verificationCodes.delete(existingVerificationCode._id));
91
+ yield* Fx.promise(async () => db.verificationCodes.create({
92
+ code: await sha256(code),
93
+ accountId,
94
+ provider,
95
+ expirationTime: Date.now() + OAUTH_SIGN_IN_EXPIRATION_MS,
96
+ verifier: verifier._id
97
+ }));
98
+ return code;
99
+ });
100
+ }
101
+ const callUserOAuth = async (ctx, args) => {
102
+ return ctx.runMutation(AUTH_STORE_REF, { args: {
103
+ type: "userOAuth",
104
+ ...args
105
+ } });
106
+ };
107
+
108
+ //#endregion
109
+ export { callUserOAuth, userOAuthArgs, userOAuthImpl };
110
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","names":[],"sources":["../../../src/server/mutations/oauth.ts"],"sourcesContent":["import { Fx } from \"@robelest/fx\";\nimport type { GenericActionCtx, GenericDataModel } from \"convex/server\";\nimport { Infer, v } from \"convex/values\";\n\nimport { authDb } from \"../db\";\nimport { AuthError } from \"../authError\";\nimport * as Provider from \"../crypto\";\nimport {\n createSyntheticOAuthMaterializedConfig,\n} from \"../enterprise/oidc\";\nimport { normalizeEnterprisePolicy } from \"../enterprise/policy\";\nimport {\n ENTERPRISE_OIDC_PROVIDER_PREFIX,\n ENTERPRISE_SAML_PROVIDER_PREFIX,\n isEnterpriseProviderId,\n} from \"../enterprise/shared\";\nimport { MutationCtx } from \"../types\";\nimport type { AuthProviderMaterializedConfig } from \"../types\";\nimport { upsertUserAndAccount } from \"../users\";\nimport { generateRandomString, logWithLevel, sha256 } from \"../utils\";\nimport { AUTH_STORE_REF } from \"./store/refs\";\n\nconst OAUTH_SIGN_IN_EXPIRATION_MS = 1000 * 60 * 2; // 2 minutes\n\nexport const userOAuthArgs = v.object({\n provider: v.string(),\n providerAccountId: v.string(),\n profile: v.any(),\n signature: v.string(),\n accountExtend: v.optional(v.any()),\n});\n\nfunction normalizeAccountExtend(\n provider: string,\n providerAccountId: string,\n accountExtend: unknown,\n) {\n const baseIdentity: Record<string, unknown> = {\n type: \"oauth\",\n provider,\n providerAccountId,\n };\n if (provider.startsWith(ENTERPRISE_OIDC_PROVIDER_PREFIX)) {\n baseIdentity.type = \"enterprise-oidc\";\n baseIdentity.enterpriseId = provider.slice(\n ENTERPRISE_OIDC_PROVIDER_PREFIX.length,\n );\n }\n if (provider.startsWith(ENTERPRISE_SAML_PROVIDER_PREFIX)) {\n baseIdentity.type = \"enterprise-saml\";\n baseIdentity.enterpriseId = provider.slice(\n ENTERPRISE_SAML_PROVIDER_PREFIX.length,\n );\n }\n const provided =\n typeof accountExtend === \"object\" &&\n accountExtend !== null &&\n !Array.isArray(accountExtend)\n ? (accountExtend as Record<string, unknown>)\n : undefined;\n const providedIdentity =\n provided &&\n typeof provided.identity === \"object\" &&\n provided.identity !== null &&\n !Array.isArray(provided.identity)\n ? (provided.identity as Record<string, unknown>)\n : undefined;\n return {\n ...provided,\n identity: {\n ...baseIdentity,\n ...providedIdentity,\n },\n };\n}\n\ntype ReturnType = string;\n\nexport function userOAuthImpl(\n ctx: MutationCtx,\n args: Infer<typeof userOAuthArgs>,\n getProviderOrThrow: Provider.GetProviderOrThrowFunc,\n config: Provider.Config,\n): Fx<ReturnType, AuthError> {\n return Fx.gen(function* () {\n logWithLevel(\"DEBUG\", \"userOAuthImpl args:\", args);\n const { profile, provider, providerAccountId, signature, accountExtend } =\n args;\n const db = authDb(ctx, config);\n const existingAccount = yield* Fx.promise(() =>\n db.accounts.get(provider, providerAccountId),\n );\n const enterpriseId = provider.startsWith(ENTERPRISE_OIDC_PROVIDER_PREFIX)\n ? provider.slice(ENTERPRISE_OIDC_PROVIDER_PREFIX.length)\n : provider.startsWith(ENTERPRISE_SAML_PROVIDER_PREFIX)\n ? provider.slice(ENTERPRISE_SAML_PROVIDER_PREFIX.length)\n : null;\n const enterprise =\n enterpriseId !== null\n ? yield* Fx.promise(() =>\n ctx.runQuery(config.component.public.enterpriseGet, {\n enterpriseId,\n }),\n )\n : null;\n const enterprisePolicy = enterprise\n ? normalizeEnterprisePolicy(enterprise.policy)\n : null;\n const enterpriseProtocol = provider.startsWith(\n ENTERPRISE_OIDC_PROVIDER_PREFIX,\n )\n ? \"oidc\"\n : provider.startsWith(ENTERPRISE_SAML_PROVIDER_PREFIX)\n ? \"saml\"\n : null;\n\n const existingScimIdentity =\n enterpriseId !== null &&\n existingAccount === null &&\n enterprisePolicy?.provisioning.scimReuse.user === \"externalId\"\n ? yield* Fx.promise(() =>\n ctx.runQuery(config.component.public.enterpriseScimIdentityGet, {\n enterpriseId,\n resourceType: \"user\",\n externalId: providerAccountId,\n }),\n )\n : null;\n\n const verifier = yield* Fx.from({\n ok: () => db.verifiers.getBySignature(signature),\n err: () => new AuthError(\"OAUTH_INVALID_STATE\"),\n }).pipe(\n Fx.chain((doc) =>\n doc === null\n ? Fx.fail(new AuthError(\"OAUTH_INVALID_STATE\"))\n : Fx.succeed(doc),\n ),\n );\n\n const { accountId } = yield* Fx.promise(() =>\n upsertUserAndAccount(\n ctx,\n verifier.sessionId ?? null,\n existingAccount !== null ? { existingAccount } : { providerAccountId },\n {\n type: \"oauth\",\n provider: (isEnterpriseProviderId(provider)\n ? createSyntheticOAuthMaterializedConfig(provider, {\n accountLinking:\n enterpriseProtocol === \"oidc\"\n ? enterprisePolicy?.identity.accountLinking.oidc\n : enterpriseProtocol === \"saml\"\n ? enterprisePolicy?.identity.accountLinking.saml\n : undefined,\n })\n : getProviderOrThrow(provider)) as AuthProviderMaterializedConfig,\n profile,\n accountExtend: normalizeAccountExtend(\n provider,\n providerAccountId,\n accountExtend,\n ),\n },\n config,\n existingScimIdentity?.userId\n ? { existingUserId: existingScimIdentity.userId }\n : undefined,\n ),\n );\n\n // JIT group provisioning: if this is an enterprise SSO sign-in and the\n // enterprise connection has a groupId, auto-add the user as a member of\n // that group if they aren't already a member.\n if (\n enterpriseId !== null &&\n enterprisePolicy?.provisioning.jit.mode === \"createUserAndMembership\"\n ) {\n const account = yield* Fx.promise(() => db.accounts.getById(accountId));\n const userId = account?.userId;\n if (userId) {\n const groupId = (enterprise as any)?.groupId as string | undefined;\n if (groupId) {\n const existingMembership = yield* Fx.promise(() =>\n ctx.runQuery(config.component.public.memberGetByGroupAndUser, {\n userId,\n groupId,\n }),\n );\n if (existingMembership === null) {\n yield* Fx.promise(() =>\n ctx.runMutation(config.component.public.memberAdd, {\n groupId,\n userId,\n roleIds: enterprisePolicy.provisioning.jit.defaultRoleIds,\n status: \"active\",\n }),\n );\n }\n }\n }\n }\n\n const code = generateRandomString(8, \"0123456789\");\n yield* Fx.promise(() => db.verifiers.delete(verifier._id));\n const existingVerificationCode = yield* Fx.promise(() =>\n db.verificationCodes.getByAccountId(accountId),\n );\n if (existingVerificationCode !== null) {\n yield* Fx.promise(() =>\n db.verificationCodes.delete(existingVerificationCode._id),\n );\n }\n yield* Fx.promise(async () =>\n db.verificationCodes.create({\n code: await sha256(code),\n accountId,\n provider,\n expirationTime: Date.now() + OAUTH_SIGN_IN_EXPIRATION_MS,\n verifier: verifier._id,\n }),\n );\n return code;\n });\n}\n\nexport const callUserOAuth = async <DataModel extends GenericDataModel>(\n ctx: GenericActionCtx<DataModel>,\n args: Infer<typeof userOAuthArgs>,\n): Promise<ReturnType> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"userOAuth\",\n ...args,\n },\n });\n};\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { MutationCtx } from "../types.js";
2
+ import { Config, GetProviderOrThrowFunc } from "../crypto.js";
3
+ import { GenericActionCtx, GenericDataModel } from "convex/server";
4
+ import * as convex_values109 from "convex/values";
5
+ import { Infer } from "convex/values";
6
+
7
+ //#region src/server/mutations/refresh.d.ts
8
+ declare const refreshSessionArgs: convex_values109.VObject<{
9
+ refreshToken: string;
10
+ }, {
11
+ refreshToken: convex_values109.VString<string, "required">;
12
+ }, "required", "refreshToken">;
13
+ type RefreshResult = null | {
14
+ token: string;
15
+ refreshToken: string;
16
+ };
17
+ declare function refreshSessionImpl(ctx: MutationCtx, args: Infer<typeof refreshSessionArgs>, _getProviderOrThrow: GetProviderOrThrowFunc, config: Config): Promise<RefreshResult>;
18
+ declare const callRefreshSession: <DataModel extends GenericDataModel>(ctx: GenericActionCtx<DataModel>, args: Infer<typeof refreshSessionArgs>) => Promise<RefreshResult>;
19
+ //#endregion
20
+ export { callRefreshSession, refreshSessionArgs, refreshSessionImpl };
21
+ //# sourceMappingURL=refresh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh.d.ts","names":[],"sources":["../../../src/server/mutations/refresh.ts"],"mappings":";;;;;;;cAkBa,kBAAA,EAEX,gBAAA,CAF6B,OAAA;;;gBAE7B,gBAAA,CAAA,OAAA;AAAA;AAAA,KAEG,aAAA;EACH,KAAA;EACA,YAAA;AAAA;AAAA,iBAiBoB,kBAAA,CACpB,GAAA,EAAK,WAAA,EACL,IAAA,EAAM,KAAA,QAAa,kBAAA,GACnB,mBAAA,EAAqB,sBAAA,EACrB,MAAA,EAAQ,MAAA,GACP,OAAA,CAAQ,aAAA;AAAA,cAiPE,kBAAA,qBAA8C,gBAAA,EACzD,GAAA,EAAK,gBAAA,CAAiB,SAAA,GACtB,IAAA,EAAM,KAAA,QAAa,kBAAA,MAClB,OAAA,CAAQ,aAAA"}