@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,148 @@
1
+ import { v } from "convex/values";
2
+ import { mutation, query } from "../../functions";
3
+ import { vVerificationCodeDoc } from "../../model";
4
+
5
+ /**
6
+ * Find a verification code by its associated account ID.
7
+ *
8
+ * Queries the `VerificationCode` table using the `account_id` index to locate
9
+ * the unique verification code linked to the given account. Each account has at
10
+ * most one active verification code at a time.
11
+ *
12
+ * @param args.accountId - The document ID of the account whose verification code should be retrieved.
13
+ * @returns The verification code document if one exists for the account, or `null` otherwise.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const code = await ctx.runQuery(
18
+ * component.identity.codes.verificationCodeGetByAccountId,
19
+ * { accountId: account._id },
20
+ * );
21
+ * if (code !== null && code.expirationTime > Date.now()) {
22
+ * console.log("Active verification code exists");
23
+ * }
24
+ * ```
25
+ */
26
+ export const verificationCodeGetByAccountId = query({
27
+ args: { accountId: v.id("Account") },
28
+ returns: v.union(vVerificationCodeDoc, v.null()),
29
+ handler: async (ctx, { accountId }) => {
30
+ return await ctx.db
31
+ .query("VerificationCode")
32
+ .withIndex("account_id", (q) => q.eq("accountId", accountId as any))
33
+ .unique();
34
+ },
35
+ });
36
+
37
+ /**
38
+ * Find a verification code by its code string value.
39
+ *
40
+ * Queries the `VerificationCode` table using the `code` index to locate the
41
+ * unique verification code document matching the given code string. This is
42
+ * the primary lookup used when a user submits an OTP or clicks a magic link.
43
+ *
44
+ * @param args.code - The verification code string to look up (e.g. a 6-digit OTP or a magic-link token).
45
+ * @returns The verification code document if a match is found, or `null` otherwise.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const codeDoc = await ctx.runQuery(
50
+ * component.identity.codes.verificationCodeGetByCode,
51
+ * { code: "482910" },
52
+ * );
53
+ * if (codeDoc !== null && codeDoc.expirationTime > Date.now()) {
54
+ * console.log(`Code is valid for account: ${codeDoc.accountId}`);
55
+ * }
56
+ * ```
57
+ */
58
+ export const verificationCodeGetByCode = query({
59
+ args: { code: v.string() },
60
+ returns: v.union(vVerificationCodeDoc, v.null()),
61
+ handler: async (ctx, { code }) => {
62
+ return await ctx.db
63
+ .query("VerificationCode")
64
+ .withIndex("code", (q) => q.eq("code", code))
65
+ .unique();
66
+ },
67
+ });
68
+
69
+ /**
70
+ * Create a new verification code for OTP, magic link, or OAuth flows.
71
+ *
72
+ * Inserts a document into the `VerificationCode` table that ties a short-lived
73
+ * code to a specific account and provider. The code can be used for email OTP,
74
+ * phone OTP, magic link, or OAuth state verification depending on the flow.
75
+ *
76
+ * @param args.accountId - The document ID of the account this verification code is associated with.
77
+ * @param args.provider - The name of the authentication provider initiating the verification
78
+ * (e.g. `"resend-otp"`, `"twilio-otp"`, `"google"`).
79
+ * @param args.code - The verification code string (e.g. a random OTP or an opaque token for magic links).
80
+ * @param args.expirationTime - The Unix timestamp (in milliseconds) at which this code expires.
81
+ * @param args.verifier - An optional PKCE verifier string used in OAuth/OIDC flows to prevent CSRF attacks.
82
+ * @param args.emailVerified - An optional email address that will be marked as verified upon successful
83
+ * code redemption.
84
+ * @param args.phoneVerified - An optional phone number that will be marked as verified upon successful
85
+ * code redemption.
86
+ * @returns The document ID of the newly created verification code.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * const codeId = await ctx.runMutation(
91
+ * component.identity.codes.verificationCodeCreate,
92
+ * {
93
+ * accountId: account._id,
94
+ * provider: "resend-otp",
95
+ * code: "482910",
96
+ * expirationTime: Date.now() + 10 * 60 * 1000, // 10 minutes
97
+ * emailVerified: "alice@example.com",
98
+ * },
99
+ * );
100
+ * ```
101
+ */
102
+ export const verificationCodeCreate = mutation({
103
+ args: {
104
+ accountId: v.id("Account"),
105
+ provider: v.string(),
106
+ code: v.string(),
107
+ expirationTime: v.number(),
108
+ verifier: v.optional(v.string()),
109
+ emailVerified: v.optional(v.string()),
110
+ phoneVerified: v.optional(v.string()),
111
+ },
112
+ returns: v.id("VerificationCode"),
113
+ handler: async (ctx, args) => {
114
+ return await ctx.db.insert("VerificationCode", args as any);
115
+ },
116
+ });
117
+
118
+ /**
119
+ * Delete a verification code document permanently.
120
+ *
121
+ * Removes the verification code from the `VerificationCode` table. This is
122
+ * typically called after the code has been successfully redeemed or when it
123
+ * needs to be invalidated (e.g. replaced by a new code).
124
+ *
125
+ * @param args.verificationCodeId - The document ID of the verification code to delete.
126
+ * @returns `null` on success.
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * // Delete the code after successful verification
131
+ * await ctx.runMutation(
132
+ * component.identity.codes.verificationCodeDelete,
133
+ * { verificationCodeId: codeDoc._id },
134
+ * );
135
+ * ```
136
+ */
137
+ export const verificationCodeDelete = mutation({
138
+ args: { verificationCodeId: v.id("VerificationCode") },
139
+ returns: v.null(),
140
+ handler: async (ctx, { verificationCodeId }) => {
141
+ await ctx.db.delete("VerificationCode", verificationCodeId);
142
+ return null;
143
+ },
144
+ });
145
+
146
+ // ============================================================================
147
+ // Refresh Tokens
148
+ // ============================================================================
@@ -0,0 +1,209 @@
1
+ import { v } from "convex/values";
2
+ import { mutation, query } from "../../functions";
3
+ import { vPaginated, vSessionDoc } from "../../model";
4
+
5
+ /**
6
+ * List sessions with optional filtering and cursor-based pagination.
7
+ *
8
+ * Supports filtering by `userId` to retrieve only sessions belonging to a
9
+ * specific user. When a `userId` filter is provided, the `user_id` index is
10
+ * used for efficient lookup. Results are returned as a paginated response
11
+ * `{ items, nextCursor }` -- pass `nextCursor` back as `cursor` to fetch the
12
+ * next page, or receive `null` when all results have been exhausted.
13
+ *
14
+ * @param args.where - Optional filter object. Currently supports `userId` to
15
+ * restrict results to sessions for a specific user.
16
+ * @param args.limit - Maximum number of sessions to return per page (1--100, default 50).
17
+ * @param args.cursor - An opaque cursor string from a previous response's `nextCursor`
18
+ * to continue pagination, or `null` / omitted to start from the beginning.
19
+ * @param args.order - Sort direction: `"asc"` or `"desc"` (default `"desc"`).
20
+ * @returns An object with `items` (array of session documents) and `nextCursor`
21
+ * (`string | null`) for fetching subsequent pages.
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * // List the 10 most recent sessions for a user
26
+ * const page = await ctx.runQuery(
27
+ * component.identity.sessions.sessionList,
28
+ * { where: { userId: user._id }, limit: 10, order: "desc" },
29
+ * );
30
+ * for (const session of page.items) {
31
+ * console.log(`Session ${session._id} expires at ${session.expirationTime}`);
32
+ * }
33
+ * ```
34
+ */
35
+ export const sessionList = query({
36
+ args: {
37
+ where: v.optional(
38
+ v.object({
39
+ userId: v.optional(v.id("User")),
40
+ }),
41
+ ),
42
+ limit: v.optional(v.number()),
43
+ cursor: v.optional(v.union(v.string(), v.null())),
44
+ order: v.optional(v.union(v.literal("asc"), v.literal("desc"))),
45
+ },
46
+ returns: vPaginated(vSessionDoc),
47
+ handler: async (ctx, args) => {
48
+ const where = args.where ?? {};
49
+ const limit = Math.min(Math.max(args.limit ?? 50, 1), 100);
50
+ const order = args.order ?? "desc";
51
+
52
+ let q;
53
+ if (where.userId !== undefined) {
54
+ q = ctx.db
55
+ .query("Session")
56
+ .withIndex("user_id", (idx) => idx.eq("userId", where.userId!));
57
+ } else {
58
+ q = ctx.db.query("Session");
59
+ }
60
+
61
+ q = q.order(order);
62
+
63
+ const all = await q.collect();
64
+ let startIdx = 0;
65
+ if (args.cursor) {
66
+ const cursorIdx = all.findIndex((doc) => doc._id === args.cursor);
67
+ if (cursorIdx !== -1) {
68
+ startIdx = cursorIdx + 1;
69
+ }
70
+ }
71
+ const page = all.slice(startIdx, startIdx + limit + 1);
72
+ const hasMore = page.length > limit;
73
+ const items = hasMore ? page.slice(0, limit) : page;
74
+ const nextCursor = hasMore ? items[items.length - 1]._id : null;
75
+ return { items, nextCursor };
76
+ },
77
+ });
78
+
79
+ /**
80
+ * Create a new session for a user with a specified expiration time.
81
+ *
82
+ * Inserts a new document into the `Session` table, linking it to the given user.
83
+ * The session represents an active authenticated context and is typically created
84
+ * after a successful sign-in or token refresh.
85
+ *
86
+ * @param args.userId - The document ID of the user this session belongs to.
87
+ * @param args.expirationTime - The Unix timestamp (in milliseconds) at which this session expires.
88
+ * @returns The document ID of the newly created session.
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * const sessionId = await ctx.runMutation(
93
+ * component.identity.sessions.sessionCreate,
94
+ * {
95
+ * userId: user._id,
96
+ * expirationTime: Date.now() + 30 * 24 * 60 * 60 * 1000, // 30 days
97
+ * },
98
+ * );
99
+ * ```
100
+ */
101
+ export const sessionCreate = mutation({
102
+ args: { userId: v.id("User"), expirationTime: v.number() },
103
+ returns: v.id("Session"),
104
+ handler: async (ctx, { userId, expirationTime }) => {
105
+ return await ctx.db.insert("Session", {
106
+ userId: userId as any,
107
+ expirationTime,
108
+ });
109
+ },
110
+ });
111
+
112
+ /**
113
+ * Retrieve a single session by its Convex document ID.
114
+ *
115
+ * Performs a direct point lookup on the `Session` table. Returns `null` if the
116
+ * session has been deleted or never existed. This does not check whether the
117
+ * session has expired -- callers should compare `expirationTime` to the current
118
+ * time if needed.
119
+ *
120
+ * @param args.sessionId - The Convex document ID (`Id<"Session">`) of the session to retrieve.
121
+ * @returns The session document if it exists, or `null` otherwise.
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * const session = await ctx.runQuery(
126
+ * component.identity.sessions.sessionGetById,
127
+ * { sessionId: refreshToken.sessionId },
128
+ * );
129
+ * if (session !== null && session.expirationTime > Date.now()) {
130
+ * console.log("Session is still active");
131
+ * }
132
+ * ```
133
+ */
134
+ export const sessionGetById = query({
135
+ args: { sessionId: v.id("Session") },
136
+ returns: v.union(vSessionDoc, v.null()),
137
+ handler: async (ctx, { sessionId }) => {
138
+ return await ctx.db.get("Session", sessionId);
139
+ },
140
+ });
141
+
142
+ /**
143
+ * Delete a session document.
144
+ *
145
+ * Removes the session from the `Session` table. This is a no-op if the session
146
+ * does not exist (i.e. was already deleted). Callers should also clean up
147
+ * related refresh tokens via `refreshTokenDeleteAll` to fully invalidate the
148
+ * session.
149
+ *
150
+ * @param args.sessionId - The document ID of the session to delete.
151
+ * @returns `null` on success (including when the session was already absent).
152
+ *
153
+ * @example
154
+ * ```ts
155
+ * // Revoke a session and its tokens
156
+ * await ctx.runMutation(
157
+ * component.identity.sessions.sessionDelete,
158
+ * { sessionId: session._id },
159
+ * );
160
+ * await ctx.runMutation(
161
+ * component.identity.tokens.refreshTokenDeleteAll,
162
+ * { sessionId: session._id },
163
+ * );
164
+ * ```
165
+ */
166
+ export const sessionDelete = mutation({
167
+ args: { sessionId: v.id("Session") },
168
+ returns: v.null(),
169
+ handler: async (ctx, { sessionId }) => {
170
+ if ((await ctx.db.get("Session", sessionId)) !== null) {
171
+ await ctx.db.delete("Session", sessionId);
172
+ }
173
+ return null;
174
+ },
175
+ });
176
+
177
+ /**
178
+ * List all sessions belonging to a specific user.
179
+ *
180
+ * Queries the `Session` table using the `user_id` index to efficiently retrieve
181
+ * every session document for the given user. Unlike `sessionList`, this returns
182
+ * all matching sessions without pagination.
183
+ *
184
+ * @param args.userId - The document ID of the user whose sessions should be retrieved.
185
+ * @returns An array of session documents for the specified user.
186
+ *
187
+ * @example
188
+ * ```ts
189
+ * const sessions = await ctx.runQuery(
190
+ * component.identity.sessions.sessionListByUser,
191
+ * { userId: user._id },
192
+ * );
193
+ * console.log(`User has ${sessions.length} active session(s)`);
194
+ * ```
195
+ */
196
+ export const sessionListByUser = query({
197
+ args: { userId: v.id("User") },
198
+ returns: v.array(vSessionDoc),
199
+ handler: async (ctx, { userId }) => {
200
+ return await ctx.db
201
+ .query("Session")
202
+ .withIndex("user_id", (q) => q.eq("userId", userId as any))
203
+ .collect();
204
+ },
205
+ });
206
+
207
+ // ============================================================================
208
+ // Verifiers
209
+ // ============================================================================
@@ -0,0 +1,250 @@
1
+ import { v } from "convex/values";
2
+ import { mutation, query } from "../../functions";
3
+ import { vRefreshTokenDoc } from "../../model";
4
+
5
+ /**
6
+ * Create a new refresh token for a session.
7
+ *
8
+ * Inserts a document into the `RefreshToken` table. Refresh tokens are used to
9
+ * obtain new access tokens without requiring the user to re-authenticate. When
10
+ * a refresh token is rotated, the new token references the old one via
11
+ * `parentRefreshTokenId` to form a token chain for replay detection.
12
+ *
13
+ * @param args.sessionId - The document ID of the session this refresh token belongs to.
14
+ * @param args.expirationTime - The Unix timestamp (in milliseconds) at which this refresh token expires.
15
+ * @param args.parentRefreshTokenId - The document ID of the parent refresh token that was
16
+ * exchanged to create this one. Omitted for the initial token in a session.
17
+ * @returns The document ID of the newly created refresh token.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const tokenId = await ctx.runMutation(
22
+ * component.identity.tokens.refreshTokenCreate,
23
+ * {
24
+ * sessionId: session._id,
25
+ * expirationTime: Date.now() + 7 * 24 * 60 * 60 * 1000, // 7 days
26
+ * },
27
+ * );
28
+ * ```
29
+ */
30
+ export const refreshTokenCreate = mutation({
31
+ args: {
32
+ sessionId: v.id("Session"),
33
+ expirationTime: v.number(),
34
+ parentRefreshTokenId: v.optional(v.id("RefreshToken")),
35
+ },
36
+ returns: v.id("RefreshToken"),
37
+ handler: async (ctx, args) => {
38
+ return await ctx.db.insert("RefreshToken", args as any);
39
+ },
40
+ });
41
+
42
+ /**
43
+ * Retrieve a single refresh token by its Convex document ID.
44
+ *
45
+ * Performs a direct point lookup on the `RefreshToken` table. Returns `null` if
46
+ * the token has been deleted or never existed.
47
+ *
48
+ * @param args.refreshTokenId - The Convex document ID (`Id<"RefreshToken">`) of the token to retrieve.
49
+ * @returns The refresh token document if it exists, or `null` otherwise.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const token = await ctx.runQuery(
54
+ * component.identity.tokens.refreshTokenGetById,
55
+ * { refreshTokenId: storedTokenId },
56
+ * );
57
+ * if (token !== null && token.expirationTime > Date.now()) {
58
+ * console.log("Refresh token is still valid");
59
+ * }
60
+ * ```
61
+ */
62
+ export const refreshTokenGetById = query({
63
+ args: { refreshTokenId: v.id("RefreshToken") },
64
+ returns: v.union(vRefreshTokenDoc, v.null()),
65
+ handler: async (ctx, { refreshTokenId }) => {
66
+ return await ctx.db.get("RefreshToken", refreshTokenId);
67
+ },
68
+ });
69
+
70
+ /**
71
+ * Patch a refresh token document with partial data.
72
+ *
73
+ * Merges the provided fields into the existing refresh token document. This is
74
+ * primarily used to record `firstUsedTime` when a refresh token is first
75
+ * exchanged, marking it as consumed for replay detection.
76
+ *
77
+ * @param args.refreshTokenId - The document ID of the refresh token to update.
78
+ * @param args.data - A partial object containing the fields to merge (e.g. `{ firstUsedTime: number }`).
79
+ * @returns `null` on success.
80
+ *
81
+ * @example
82
+ * ```ts
83
+ * // Mark the refresh token as used
84
+ * await ctx.runMutation(
85
+ * component.identity.tokens.refreshTokenPatch,
86
+ * {
87
+ * refreshTokenId: token._id,
88
+ * data: { firstUsedTime: Date.now() },
89
+ * },
90
+ * );
91
+ * ```
92
+ */
93
+ export const refreshTokenPatch = mutation({
94
+ args: { refreshTokenId: v.id("RefreshToken"), data: v.any() },
95
+ returns: v.null(),
96
+ handler: async (ctx, { refreshTokenId, data }) => {
97
+ await ctx.db.patch("RefreshToken", refreshTokenId, data);
98
+ return null;
99
+ },
100
+ });
101
+
102
+ /**
103
+ * Get child tokens that were created by exchanging a specific parent token.
104
+ *
105
+ * Queries the `RefreshToken` table using the `session_id_parent_refresh_token_id`
106
+ * index to find all tokens whose `parentRefreshTokenId` matches the provided
107
+ * parent. This is used for replay detection: if a parent token has more than
108
+ * one child, it indicates a potential token reuse attack.
109
+ *
110
+ * @param args.sessionId - The document ID of the session the tokens belong to.
111
+ * @param args.parentRefreshTokenId - The document ID of the parent refresh token whose children to retrieve.
112
+ * @returns An array of refresh token documents that were derived from the specified parent token.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * const children = await ctx.runQuery(
117
+ * component.identity.tokens.refreshTokenGetChildren,
118
+ * {
119
+ * sessionId: session._id,
120
+ * parentRefreshTokenId: parentToken._id,
121
+ * },
122
+ * );
123
+ * if (children.length > 1) {
124
+ * console.warn("Possible token reuse detected!");
125
+ * }
126
+ * ```
127
+ */
128
+ export const refreshTokenGetChildren = query({
129
+ args: {
130
+ sessionId: v.id("Session"),
131
+ parentRefreshTokenId: v.id("RefreshToken"),
132
+ },
133
+ returns: v.array(vRefreshTokenDoc),
134
+ handler: async (ctx, { sessionId, parentRefreshTokenId }) => {
135
+ return await ctx.db
136
+ .query("RefreshToken")
137
+ .withIndex("session_id_parent_refresh_token_id", (q) =>
138
+ q
139
+ .eq("sessionId", sessionId as any)
140
+ .eq("parentRefreshTokenId", parentRefreshTokenId as any),
141
+ )
142
+ .collect();
143
+ },
144
+ });
145
+
146
+ /**
147
+ * List all refresh tokens belonging to a specific session.
148
+ *
149
+ * Queries the `RefreshToken` table using the `session_id_parent_refresh_token_id`
150
+ * index to efficiently retrieve every refresh token associated with the given
151
+ * session, including both active and consumed tokens.
152
+ *
153
+ * @param args.sessionId - The document ID of the session whose refresh tokens should be retrieved.
154
+ * @returns An array of all refresh token documents for the specified session.
155
+ *
156
+ * @example
157
+ * ```ts
158
+ * const tokens = await ctx.runQuery(
159
+ * component.identity.tokens.refreshTokenListBySession,
160
+ * { sessionId: session._id },
161
+ * );
162
+ * console.log(`Session has ${tokens.length} refresh token(s)`);
163
+ * ```
164
+ */
165
+ export const refreshTokenListBySession = query({
166
+ args: { sessionId: v.id("Session") },
167
+ returns: v.array(vRefreshTokenDoc),
168
+ handler: async (ctx, { sessionId }) => {
169
+ return await ctx.db
170
+ .query("RefreshToken")
171
+ .withIndex("session_id_parent_refresh_token_id", (q) =>
172
+ q.eq("sessionId", sessionId as any),
173
+ )
174
+ .collect();
175
+ },
176
+ });
177
+
178
+ /**
179
+ * Delete all refresh tokens for a session.
180
+ *
181
+ * Queries the `RefreshToken` table for all tokens belonging to the given session
182
+ * and deletes them in parallel. This is typically called when a session is
183
+ * revoked or when token reuse is detected, effectively invalidating the entire
184
+ * token chain for that session.
185
+ *
186
+ * @param args.sessionId - The document ID of the session whose refresh tokens should be deleted.
187
+ * @returns `null` on success.
188
+ *
189
+ * @example
190
+ * ```ts
191
+ * // Invalidate all tokens for a compromised session
192
+ * await ctx.runMutation(
193
+ * component.identity.tokens.refreshTokenDeleteAll,
194
+ * { sessionId: session._id },
195
+ * );
196
+ * ```
197
+ */
198
+ export const refreshTokenDeleteAll = mutation({
199
+ args: { sessionId: v.id("Session") },
200
+ returns: v.null(),
201
+ handler: async (ctx, { sessionId }) => {
202
+ const tokens = await ctx.db
203
+ .query("RefreshToken")
204
+ .withIndex("session_id_parent_refresh_token_id", (q) =>
205
+ q.eq("sessionId", sessionId as any),
206
+ )
207
+ .collect();
208
+ await Promise.all(
209
+ tokens.map((token) => ctx.db.delete("RefreshToken", token._id)),
210
+ );
211
+ return null;
212
+ },
213
+ });
214
+
215
+ /**
216
+ * Get the active (unused) refresh token for a session.
217
+ *
218
+ * Queries the `RefreshToken` table using the `session_id_first_used` index to
219
+ * find the most recently created token for the session that has not yet been
220
+ * exchanged (i.e. `firstUsedTime` is `undefined`). This represents the current
221
+ * valid refresh token the client should be holding.
222
+ *
223
+ * @param args.sessionId - The document ID of the session whose active refresh token should be retrieved.
224
+ * @returns The most recent unused refresh token document, or `null` if no active token exists
225
+ * (e.g. all tokens have been consumed or the session has no tokens).
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * const activeToken = await ctx.runQuery(
230
+ * component.identity.tokens.refreshTokenGetActive,
231
+ * { sessionId: session._id },
232
+ * );
233
+ * if (activeToken !== null) {
234
+ * console.log(`Active token expires at: ${activeToken.expirationTime}`);
235
+ * }
236
+ * ```
237
+ */
238
+ export const refreshTokenGetActive = query({
239
+ args: { sessionId: v.id("Session") },
240
+ returns: v.union(vRefreshTokenDoc, v.null()),
241
+ handler: async (ctx, { sessionId }) => {
242
+ return await ctx.db
243
+ .query("RefreshToken")
244
+ .withIndex("session_id_first_used", (q) =>
245
+ q.eq("sessionId", sessionId as any).eq("firstUsedTime", undefined),
246
+ )
247
+ .order("desc")
248
+ .first();
249
+ },
250
+ });