@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
@@ -1,50 +0,0 @@
1
- import { LOG_LEVELS, logWithLevel, maybeRedact } from "../utils.js";
2
- import { authDb } from "../db.js";
3
- import { AUTH_STORE_REF } from "./store.js";
4
- import { isSignInRateLimited, recordFailedSignIn, resetSignInRateLimit } from "../ratelimit.js";
5
- import { verify } from "../provider.js";
6
- import { v } from "convex/values";
7
-
8
- //#region src/server/implementation/mutations/retrieve.ts
9
- const retrieveAccountWithCredentialsArgs = v.object({
10
- provider: v.string(),
11
- account: v.object({
12
- id: v.string(),
13
- secret: v.optional(v.string())
14
- })
15
- });
16
- async function retrieveAccountWithCredentialsImpl(ctx, args, getProviderOrThrow, config) {
17
- const { provider: providerId, account } = args;
18
- const db = authDb(ctx, config);
19
- logWithLevel(LOG_LEVELS.DEBUG, "retrieveAccountWithCredentialsImpl args:", {
20
- provider: providerId,
21
- account: {
22
- id: account.id,
23
- secret: maybeRedact(account.secret ?? "")
24
- }
25
- });
26
- const existingAccount = await db.accounts.get(providerId, account.id);
27
- if (existingAccount === null) return "InvalidAccountId";
28
- if (account.secret !== void 0) {
29
- if (await isSignInRateLimited(ctx, existingAccount._id, config)) return "TooManyFailedAttempts";
30
- if (!await verify(getProviderOrThrow(providerId), account.secret, existingAccount.secret ?? "")) {
31
- await recordFailedSignIn(ctx, existingAccount._id, config);
32
- return "InvalidSecret";
33
- }
34
- await resetSignInRateLimit(ctx, existingAccount._id, config);
35
- }
36
- return {
37
- account: existingAccount,
38
- user: await db.users.getById(existingAccount.userId)
39
- };
40
- }
41
- const callRetreiveAccountWithCredentials = async (ctx, args) => {
42
- return ctx.runMutation(AUTH_STORE_REF, { args: {
43
- type: "retrieveAccountWithCredentials",
44
- ...args
45
- } });
46
- };
47
-
48
- //#endregion
49
- export { callRetreiveAccountWithCredentials, retrieveAccountWithCredentialsArgs, retrieveAccountWithCredentialsImpl };
50
- //# sourceMappingURL=retrieve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retrieve.js","names":["Provider.verify"],"sources":["../../../../../src/server/implementation/mutations/retrieve.ts"],"sourcesContent":["import { Infer, v } from \"convex/values\";\nimport { ActionCtx, Doc, MutationCtx } from \"../types\";\nimport {\n isSignInRateLimited,\n recordFailedSignIn,\n resetSignInRateLimit,\n} from \"../ratelimit\";\nimport * as Provider from \"../provider\";\nimport { LOG_LEVELS, logWithLevel, maybeRedact } from \"../utils\";\nimport { authDb } from \"../db\";\nimport { AUTH_STORE_REF } from \"./store\";\n\nexport const retrieveAccountWithCredentialsArgs = v.object({\n provider: v.string(),\n account: v.object({ id: v.string(), secret: v.optional(v.string()) }),\n});\n\ntype ReturnType =\n | \"InvalidAccountId\"\n | \"TooManyFailedAttempts\"\n | \"InvalidSecret\"\n | { account: Doc<\"account\">; user: Doc<\"user\"> };\n\nexport async function retrieveAccountWithCredentialsImpl(\n ctx: MutationCtx,\n args: Infer<typeof retrieveAccountWithCredentialsArgs>,\n getProviderOrThrow: Provider.GetProviderOrThrowFunc,\n config: Provider.Config,\n): Promise<ReturnType> {\n const { provider: providerId, account } = args;\n const db = authDb(ctx, config);\n logWithLevel(LOG_LEVELS.DEBUG, \"retrieveAccountWithCredentialsImpl args:\", {\n provider: providerId,\n account: {\n id: account.id,\n secret: maybeRedact(account.secret ?? \"\"),\n },\n });\n const existingAccount = (await db.accounts.get(\n providerId,\n account.id,\n )) as Doc<\"account\"> | null;\n if (existingAccount === null) {\n return \"InvalidAccountId\";\n }\n if (account.secret !== undefined) {\n if (await isSignInRateLimited(ctx, existingAccount._id, config)) {\n return \"TooManyFailedAttempts\";\n }\n if (\n !(await Provider.verify(\n getProviderOrThrow(providerId),\n account.secret,\n existingAccount.secret ?? \"\",\n ))\n ) {\n await recordFailedSignIn(ctx, existingAccount._id, config);\n return \"InvalidSecret\";\n }\n await resetSignInRateLimit(ctx, existingAccount._id, config);\n }\n return {\n account: existingAccount,\n // TODO: Ian removed this\n user: (await db.users.getById(existingAccount.userId)) as unknown as Doc<\"user\">,\n };\n}\n\nexport const callRetreiveAccountWithCredentials = async (\n ctx: ActionCtx,\n args: Infer<typeof retrieveAccountWithCredentialsArgs>,\n): Promise<ReturnType> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"retrieveAccountWithCredentials\",\n ...args,\n },\n });\n};\n"],"mappings":";;;;;;;;AAYA,MAAa,qCAAqC,EAAE,OAAO;CACzD,UAAU,EAAE,QAAQ;CACpB,SAAS,EAAE,OAAO;EAAE,IAAI,EAAE,QAAQ;EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;EAAE,CAAC;CACtE,CAAC;AAQF,eAAsB,mCACpB,KACA,MACA,oBACA,QACqB;CACrB,MAAM,EAAE,UAAU,YAAY,YAAY;CAC1C,MAAM,KAAK,OAAO,KAAK,OAAO;AAC9B,cAAa,WAAW,OAAO,4CAA4C;EACzE,UAAU;EACV,SAAS;GACP,IAAI,QAAQ;GACZ,QAAQ,YAAY,QAAQ,UAAU,GAAG;GAC1C;EACF,CAAC;CACF,MAAM,kBAAmB,MAAM,GAAG,SAAS,IACzC,YACA,QAAQ,GACT;AACD,KAAI,oBAAoB,KACtB,QAAO;AAET,KAAI,QAAQ,WAAW,QAAW;AAChC,MAAI,MAAM,oBAAoB,KAAK,gBAAgB,KAAK,OAAO,CAC7D,QAAO;AAET,MACE,CAAE,MAAMA,OACN,mBAAmB,WAAW,EAC9B,QAAQ,QACR,gBAAgB,UAAU,GAC3B,EACD;AACA,SAAM,mBAAmB,KAAK,gBAAgB,KAAK,OAAO;AAC1D,UAAO;;AAET,QAAM,qBAAqB,KAAK,gBAAgB,KAAK,OAAO;;AAE9D,QAAO;EACL,SAAS;EAET,MAAO,MAAM,GAAG,MAAM,QAAQ,gBAAgB,OAAO;EACtD;;AAGH,MAAa,qCAAqC,OAChD,KACA,SACwB;AACxB,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM;EACJ,MAAM;EACN,GAAG;EACJ,EACF,CAAC"}
@@ -1,27 +0,0 @@
1
- import { throwAuthError } from "../../errors.js";
2
- import { authDb } from "../db.js";
3
- import { AUTH_STORE_REF } from "./store.js";
4
- import { v } from "convex/values";
5
-
6
- //#region src/server/implementation/mutations/signature.ts
7
- const verifierSignatureArgs = v.object({
8
- verifier: v.string(),
9
- signature: v.string()
10
- });
11
- async function verifierSignatureImpl(ctx, args, config) {
12
- const { verifier, signature } = args;
13
- const db = authDb(ctx, config);
14
- const verifierDoc = await db.verifiers.getById(verifier);
15
- if (verifierDoc === null) throwAuthError("INVALID_VERIFIER");
16
- return await db.verifiers.patch(verifierDoc._id, { signature });
17
- }
18
- const callVerifierSignature = async (ctx, args) => {
19
- return ctx.runMutation(AUTH_STORE_REF, { args: {
20
- type: "verifierSignature",
21
- ...args
22
- } });
23
- };
24
-
25
- //#endregion
26
- export { callVerifierSignature, verifierSignatureArgs, verifierSignatureImpl };
27
- //# sourceMappingURL=signature.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signature.js","names":[],"sources":["../../../../../src/server/implementation/mutations/signature.ts"],"sourcesContent":["import { GenericId, Infer, v } from \"convex/values\";\nimport { ActionCtx, MutationCtx } from \"../types\";\nimport * as Provider from \"../provider\";\nimport { authDb } from \"../db\";\nimport { AUTH_STORE_REF } from \"./store\";\nimport { throwAuthError } from \"../../errors\";\n\nexport const verifierSignatureArgs = v.object({\n verifier: v.string(),\n signature: v.string(),\n});\n\ntype ReturnType = void;\n\nexport async function verifierSignatureImpl(\n ctx: MutationCtx,\n args: Infer<typeof verifierSignatureArgs>,\n config: Provider.Config,\n): Promise<ReturnType> {\n const { verifier, signature } = args;\n const db = authDb(ctx, config);\n const verifierDoc = await db.verifiers.getById(verifier as GenericId<\"verifier\">);\n if (verifierDoc === null) {\n throwAuthError(\"INVALID_VERIFIER\");\n }\n return await db.verifiers.patch(verifierDoc._id, { signature });\n}\n\nexport const callVerifierSignature = async (\n ctx: ActionCtx,\n args: Infer<typeof verifierSignatureArgs>,\n): Promise<void> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"verifierSignature\",\n ...args,\n },\n });\n};\n"],"mappings":";;;;;;AAOA,MAAa,wBAAwB,EAAE,OAAO;CAC5C,UAAU,EAAE,QAAQ;CACpB,WAAW,EAAE,QAAQ;CACtB,CAAC;AAIF,eAAsB,sBACpB,KACA,MACA,QACqB;CACrB,MAAM,EAAE,UAAU,cAAc;CAChC,MAAM,KAAK,OAAO,KAAK,OAAO;CAC9B,MAAM,cAAc,MAAM,GAAG,UAAU,QAAQ,SAAkC;AACjF,KAAI,gBAAgB,KAClB,gBAAe,mBAAmB;AAEpC,QAAO,MAAM,GAAG,UAAU,MAAM,YAAY,KAAK,EAAE,WAAW,CAAC;;AAGjE,MAAa,wBAAwB,OACnC,KACA,SACkB;AAClB,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM;EACJ,MAAM;EACN,GAAG;EACJ,EACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"signin.js","names":[],"sources":["../../../../../src/server/implementation/mutations/signin.ts"],"sourcesContent":["import { GenericId, Infer, v } from \"convex/values\";\nimport { ActionCtx, MutationCtx, SessionInfo } from \"../types\";\nimport * as Provider from \"../provider\";\nimport {\n createNewAndDeleteExistingSession,\n maybeGenerateTokensForSession,\n} from \"../sessions\";\nimport { LOG_LEVELS, logWithLevel } from \"../utils\";\nimport { AUTH_STORE_REF } from \"./store\";\n\nexport const signInArgs = v.object({\n userId: v.string(),\n sessionId: v.optional(v.string()),\n generateTokens: v.boolean(),\n});\n\ntype ReturnType = SessionInfo;\n\nexport async function signInImpl(\n ctx: MutationCtx,\n args: Infer<typeof signInArgs>,\n config: Provider.Config,\n): Promise<ReturnType> {\n logWithLevel(LOG_LEVELS.DEBUG, \"signInImpl args:\", args);\n const { userId, sessionId: existingSessionId, generateTokens } = args;\n const typedUserId = userId as GenericId<\"user\">;\n const typedExistingSessionId = existingSessionId as\n | GenericId<\"session\">\n | undefined;\n const sessionId =\n typedExistingSessionId ??\n (await createNewAndDeleteExistingSession(ctx, config, typedUserId));\n return await maybeGenerateTokensForSession(\n ctx,\n config,\n typedUserId,\n sessionId,\n generateTokens,\n );\n}\n\nexport const callSignIn = async (\n ctx: ActionCtx,\n args: Infer<typeof signInArgs>,\n): Promise<ReturnType> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"signIn\",\n ...args,\n },\n });\n};\n"],"mappings":";;;;;;AAUA,MAAa,aAAa,EAAE,OAAO;CACjC,QAAQ,EAAE,QAAQ;CAClB,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC;CACjC,gBAAgB,EAAE,SAAS;CAC5B,CAAC;AAIF,eAAsB,WACpB,KACA,MACA,QACqB;AACrB,cAAa,WAAW,OAAO,oBAAoB,KAAK;CACxD,MAAM,EAAE,QAAQ,WAAW,mBAAmB,mBAAmB;CACjE,MAAM,cAAc;AAOpB,QAAO,MAAM,8BACX,KACA,QACA,aAT6B,qBAK5B,MAAM,kCAAkC,KAAK,QAAQ,YAAY,EAMlE,eACD;;AAGH,MAAa,aAAa,OACxB,KACA,SACwB;AACxB,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM;EACJ,MAAM;EACN,GAAG;EACJ,EACF,CAAC"}
@@ -1,27 +0,0 @@
1
- import { authDb } from "../db.js";
2
- import { deleteSession, getAuthSessionId } from "../sessions.js";
3
- import { AUTH_STORE_REF } from "./store.js";
4
-
5
- //#region src/server/implementation/mutations/signout.ts
6
- async function signOutImpl(ctx, config) {
7
- const db = authDb(ctx, config);
8
- const sessionId = await getAuthSessionId(ctx);
9
- if (sessionId !== null) {
10
- const session = await db.sessions.getById(sessionId);
11
- if (session !== null) {
12
- await deleteSession(ctx, session, config);
13
- return {
14
- userId: session.userId,
15
- sessionId: session._id
16
- };
17
- }
18
- }
19
- return null;
20
- }
21
- const callSignOut = async (ctx) => {
22
- return ctx.runMutation(AUTH_STORE_REF, { args: { type: "signOut" } });
23
- };
24
-
25
- //#endregion
26
- export { callSignOut, signOutImpl };
27
- //# sourceMappingURL=signout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signout.js","names":[],"sources":["../../../../../src/server/implementation/mutations/signout.ts"],"sourcesContent":["import { GenericId } from \"convex/values\";\nimport { ActionCtx, MutationCtx } from \"../types\";\nimport { deleteSession, getAuthSessionId } from \"../sessions\";\nimport * as Provider from \"../provider\";\nimport { authDb } from \"../db\";\nimport { AUTH_STORE_REF } from \"./store\";\n\ntype ReturnType = {\n userId: GenericId<\"user\">;\n sessionId: GenericId<\"session\">;\n} | null;\n\nexport async function signOutImpl(\n ctx: MutationCtx,\n config: Provider.Config,\n): Promise<ReturnType> {\n const db = authDb(ctx, config);\n const sessionId = await getAuthSessionId(ctx);\n if (sessionId !== null) {\n const session = await db.sessions.getById(sessionId);\n if (session !== null) {\n await deleteSession(ctx, session, config);\n return { userId: session.userId, sessionId: session._id };\n }\n }\n return null;\n}\n\nexport const callSignOut = async (ctx: ActionCtx): Promise<void> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"signOut\",\n },\n });\n};\n"],"mappings":";;;;;AAYA,eAAsB,YACpB,KACA,QACqB;CACrB,MAAM,KAAK,OAAO,KAAK,OAAO;CAC9B,MAAM,YAAY,MAAM,iBAAiB,IAAI;AAC7C,KAAI,cAAc,MAAM;EACtB,MAAM,UAAU,MAAM,GAAG,SAAS,QAAQ,UAAU;AACpD,MAAI,YAAY,MAAM;AACpB,SAAM,cAAc,KAAK,SAAS,OAAO;AACzC,UAAO;IAAE,QAAQ,QAAQ;IAAQ,WAAW,QAAQ;IAAK;;;AAG7D,QAAO;;AAGT,MAAa,cAAc,OAAO,QAAkC;AAClE,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM,EACJ,MAAM,WACP,EACF,CAAC"}
@@ -1,12 +0,0 @@
1
- //#region src/server/implementation/mutations/store.ts
2
- /**
3
- * Internal function reference for the library's store dispatch mutation.
4
- *
5
- * This remains string-based because the library code cannot import the
6
- * consumer app's generated `internal` API module.
7
- */
8
- const AUTH_STORE_REF = "auth:store";
9
-
10
- //#endregion
11
- export { AUTH_STORE_REF };
12
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","names":[],"sources":["../../../../../src/server/implementation/mutations/store.ts"],"sourcesContent":["/**\n * Internal function reference for the library's store dispatch mutation.\n *\n * This remains string-based because the library code cannot import the\n * consumer app's generated `internal` API module.\n */\nexport const AUTH_STORE_REF = \"auth:store\" as any;\n"],"mappings":";;;;;;;AAMA,MAAa,iBAAiB"}
@@ -1,16 +0,0 @@
1
- import { authDb } from "../db.js";
2
- import { getAuthSessionId } from "../sessions.js";
3
- import { AUTH_STORE_REF } from "./store.js";
4
-
5
- //#region src/server/implementation/mutations/verifier.ts
6
- async function verifierImpl(ctx, config) {
7
- const sessionId = await getAuthSessionId(ctx) ?? void 0;
8
- return await authDb(ctx, config).verifiers.create(sessionId);
9
- }
10
- const callVerifier = async (ctx) => {
11
- return ctx.runMutation(AUTH_STORE_REF, { args: { type: "verifier" } });
12
- };
13
-
14
- //#endregion
15
- export { callVerifier, verifierImpl };
16
- //# sourceMappingURL=verifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verifier.js","names":[],"sources":["../../../../../src/server/implementation/mutations/verifier.ts"],"sourcesContent":["import { GenericId } from \"convex/values\";\nimport { ActionCtx, MutationCtx } from \"../types\";\nimport { getAuthSessionId } from \"../sessions\";\nimport * as Provider from \"../provider\";\nimport { authDb } from \"../db\";\nimport { AUTH_STORE_REF } from \"./store\";\n\ntype ReturnType = GenericId<\"verifier\">;\n\nexport async function verifierImpl(\n ctx: MutationCtx,\n config: Provider.Config,\n): Promise<ReturnType> {\n const sessionId = (await getAuthSessionId(ctx)) ?? undefined;\n return (await authDb(ctx, config).verifiers.create(sessionId)) as ReturnType;\n}\n\nexport const callVerifier = async (ctx: ActionCtx): Promise<ReturnType> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"verifier\",\n },\n });\n};\n"],"mappings":";;;;;AASA,eAAsB,aACpB,KACA,QACqB;CACrB,MAAM,YAAa,MAAM,iBAAiB,IAAI,IAAK;AACnD,QAAQ,MAAM,OAAO,KAAK,OAAO,CAAC,UAAU,OAAO,UAAU;;AAG/D,MAAa,eAAe,OAAO,QAAwC;AACzE,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM,EACJ,MAAM,YACP,EACF,CAAC"}
@@ -1,105 +0,0 @@
1
- import { LOG_LEVELS, logWithLevel, sha256 } from "../utils.js";
2
- import { authDb } from "../db.js";
3
- import { createNewAndDeleteExistingSession, getAuthSessionId, maybeGenerateTokensForSession } from "../sessions.js";
4
- import { AUTH_STORE_REF } from "./store.js";
5
- import { isSignInRateLimited, recordFailedSignIn, resetSignInRateLimit } from "../ratelimit.js";
6
- import { upsertUserAndAccount } from "../users.js";
7
- import { v } from "convex/values";
8
-
9
- //#region src/server/implementation/mutations/verify.ts
10
- const verifyCodeAndSignInArgs = v.object({
11
- params: v.any(),
12
- provider: v.optional(v.string()),
13
- verifier: v.optional(v.string()),
14
- generateTokens: v.boolean(),
15
- allowExtraProviders: v.boolean()
16
- });
17
- async function verifyCodeAndSignInImpl(ctx, args, getProviderOrThrow, config) {
18
- logWithLevel(LOG_LEVELS.DEBUG, "verifyCodeAndSignInImpl args:", {
19
- params: {
20
- email: args.params.email,
21
- phone: args.params.phone
22
- },
23
- provider: args.provider,
24
- verifier: args.verifier,
25
- generateTokens: args.generateTokens,
26
- allowExtraProviders: args.allowExtraProviders
27
- });
28
- const { generateTokens, provider, allowExtraProviders } = args;
29
- const identifier = args.params.email ?? args.params.phone;
30
- if (identifier !== void 0) {
31
- if (await isSignInRateLimited(ctx, identifier, config)) {
32
- logWithLevel(LOG_LEVELS.ERROR, "Too many failed attempts to verify code for this email");
33
- return null;
34
- }
35
- }
36
- const verifyResult = await verifyCodeOnly(ctx, args, provider ?? null, getProviderOrThrow, allowExtraProviders, config, await getAuthSessionId(ctx));
37
- if (verifyResult === null) {
38
- if (identifier !== void 0) await recordFailedSignIn(ctx, identifier, config);
39
- return null;
40
- }
41
- if (identifier !== void 0) await resetSignInRateLimit(ctx, identifier, config);
42
- const { userId } = verifyResult;
43
- return await maybeGenerateTokensForSession(ctx, config, userId, await createNewAndDeleteExistingSession(ctx, config, userId), generateTokens);
44
- }
45
- const callVerifyCodeAndSignIn = async (ctx, args) => {
46
- return ctx.runMutation(AUTH_STORE_REF, { args: {
47
- type: "verifyCodeAndSignIn",
48
- ...args
49
- } });
50
- };
51
- async function verifyCodeOnly(ctx, args, methodProviderId, getProviderOrThrow, allowExtraProviders, config, sessionId) {
52
- const db = authDb(ctx, config);
53
- const { params, verifier } = args;
54
- const codeHash = await sha256(params.code);
55
- const verificationCode = await db.verificationCodes.getByCode(codeHash);
56
- if (verificationCode === null) {
57
- logWithLevel(LOG_LEVELS.ERROR, "Invalid verification code");
58
- return null;
59
- }
60
- await db.verificationCodes.delete(verificationCode._id);
61
- if (verificationCode.verifier !== verifier) {
62
- logWithLevel(LOG_LEVELS.ERROR, "Invalid verifier");
63
- return null;
64
- }
65
- if (verificationCode.expirationTime < Date.now()) {
66
- logWithLevel(LOG_LEVELS.ERROR, "Expired verification code");
67
- return null;
68
- }
69
- const { accountId, emailVerified, phoneVerified } = verificationCode;
70
- const account = await db.accounts.getById(accountId);
71
- if (account === null) {
72
- logWithLevel(LOG_LEVELS.ERROR, "Account associated with this email has been deleted");
73
- return null;
74
- }
75
- if (methodProviderId !== null && verificationCode.provider !== methodProviderId) {
76
- logWithLevel(LOG_LEVELS.ERROR, `Invalid provider "${methodProviderId}" for given \`code\`, which was generated by provider "${verificationCode.provider}"`);
77
- return null;
78
- }
79
- const methodProvider = getProviderOrThrow(verificationCode.provider, allowExtraProviders);
80
- if (methodProvider !== null && (methodProvider.type === "email" || methodProvider.type === "phone") && methodProvider.authorize !== void 0) await methodProvider.authorize(args.params, account);
81
- let userId = account.userId;
82
- const provider = getProviderOrThrow(account.provider);
83
- if (provider.type !== "oauth") ({userId} = await upsertUserAndAccount(ctx, sessionId, { existingAccount: account }, {
84
- type: "verification",
85
- provider,
86
- profile: {
87
- ...emailVerified !== void 0 ? {
88
- email: emailVerified,
89
- emailVerified: true
90
- } : {},
91
- ...phoneVerified !== void 0 ? {
92
- phone: phoneVerified,
93
- phoneVerified: true
94
- } : {}
95
- }
96
- }, config));
97
- return {
98
- providerAccountId: account.providerAccountId,
99
- userId
100
- };
101
- }
102
-
103
- //#endregion
104
- export { callVerifyCodeAndSignIn, verifyCodeAndSignInArgs, verifyCodeAndSignInImpl };
105
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","names":[],"sources":["../../../../../src/server/implementation/mutations/verify.ts"],"sourcesContent":["import { GenericId, Infer, v } from \"convex/values\";\nimport { ActionCtx, MutationCtx, SessionInfo } from \"../types\";\nimport {\n isSignInRateLimited,\n recordFailedSignIn,\n resetSignInRateLimit,\n} from \"../ratelimit\";\nimport * as Provider from \"../provider\";\nimport {\n createNewAndDeleteExistingSession,\n getAuthSessionId,\n maybeGenerateTokensForSession,\n} from \"../sessions\";\nimport { ConvexAuthConfig } from \"../../types\";\nimport { LOG_LEVELS, logWithLevel, sha256 } from \"../utils\";\nimport { upsertUserAndAccount } from \"../users\";\nimport { authDb } from \"../db\";\nimport { AUTH_STORE_REF } from \"./store\";\n\nexport const verifyCodeAndSignInArgs = v.object({\n params: v.any(),\n provider: v.optional(v.string()),\n verifier: v.optional(v.string()),\n generateTokens: v.boolean(),\n allowExtraProviders: v.boolean(),\n});\n\ntype ReturnType = null | SessionInfo;\n\nexport async function verifyCodeAndSignInImpl(\n ctx: MutationCtx,\n args: Infer<typeof verifyCodeAndSignInArgs>,\n getProviderOrThrow: Provider.GetProviderOrThrowFunc,\n config: Provider.Config,\n): Promise<ReturnType> {\n logWithLevel(LOG_LEVELS.DEBUG, \"verifyCodeAndSignInImpl args:\", {\n params: { email: args.params.email, phone: args.params.phone },\n provider: args.provider,\n verifier: args.verifier,\n generateTokens: args.generateTokens,\n allowExtraProviders: args.allowExtraProviders,\n });\n const { generateTokens, provider, allowExtraProviders } = args;\n const identifier = args.params.email ?? args.params.phone;\n if (identifier !== undefined) {\n if (await isSignInRateLimited(ctx, identifier, config)) {\n logWithLevel(\n LOG_LEVELS.ERROR,\n \"Too many failed attempts to verify code for this email\",\n );\n return null;\n }\n }\n const verifyResult = await verifyCodeOnly(\n ctx,\n args,\n provider ?? null,\n getProviderOrThrow,\n allowExtraProviders,\n config,\n await getAuthSessionId(ctx),\n );\n if (verifyResult === null) {\n if (identifier !== undefined) {\n await recordFailedSignIn(ctx, identifier, config);\n }\n return null;\n }\n if (identifier !== undefined) {\n await resetSignInRateLimit(ctx, identifier, config);\n }\n const { userId } = verifyResult;\n const sessionId = await createNewAndDeleteExistingSession(\n ctx,\n config,\n userId,\n );\n return await maybeGenerateTokensForSession(\n ctx,\n config,\n userId,\n sessionId,\n generateTokens,\n );\n}\n\nexport const callVerifyCodeAndSignIn = async (\n ctx: ActionCtx,\n args: Infer<typeof verifyCodeAndSignInArgs>,\n): Promise<ReturnType> => {\n return ctx.runMutation(AUTH_STORE_REF, {\n args: {\n type: \"verifyCodeAndSignIn\",\n ...args,\n },\n });\n};\n\nasync function verifyCodeOnly(\n ctx: MutationCtx,\n args: {\n params: any;\n verifier?: string;\n identifier?: string;\n },\n /**\n * There are two providers at play:\n * 1. the provider that generated the code\n * 2. the provider the account is tied to.\n * This is because we allow signing into an account\n * via another provider, see {@link signInViaProvider}.\n * This is the first provider.\n */\n methodProviderId: string | null,\n getProviderOrThrow: Provider.GetProviderOrThrowFunc,\n allowExtraProviders: boolean,\n config: ConvexAuthConfig,\n sessionId: GenericId<\"session\"> | null,\n) {\n const db = authDb(ctx, config);\n const { params, verifier } = args;\n const codeHash = await sha256(params.code);\n const verificationCode = await db.verificationCodes.getByCode(codeHash);\n if (verificationCode === null) {\n logWithLevel(LOG_LEVELS.ERROR, \"Invalid verification code\");\n return null;\n }\n await db.verificationCodes.delete(verificationCode._id);\n if (verificationCode.verifier !== verifier) {\n logWithLevel(LOG_LEVELS.ERROR, \"Invalid verifier\");\n return null;\n }\n if (verificationCode.expirationTime < Date.now()) {\n logWithLevel(LOG_LEVELS.ERROR, \"Expired verification code\");\n return null;\n }\n const { accountId, emailVerified, phoneVerified } = verificationCode;\n const account = await db.accounts.getById(accountId);\n if (account === null) {\n logWithLevel(\n LOG_LEVELS.ERROR,\n \"Account associated with this email has been deleted\",\n );\n return null;\n }\n if (\n methodProviderId !== null &&\n verificationCode.provider !== methodProviderId\n ) {\n logWithLevel(\n LOG_LEVELS.ERROR,\n `Invalid provider \"${methodProviderId}\" for given \\`code\\`, ` +\n `which was generated by provider \"${verificationCode.provider}\"`,\n );\n return null;\n }\n // OTP providers perform an additional check against the provided\n // params.\n const methodProvider = getProviderOrThrow(\n verificationCode.provider,\n allowExtraProviders,\n );\n if (\n methodProvider !== null &&\n (methodProvider.type === \"email\" || methodProvider.type === \"phone\") &&\n methodProvider.authorize !== undefined\n ) {\n await methodProvider.authorize(args.params, account);\n }\n let userId = account.userId;\n const provider = getProviderOrThrow(account.provider);\n if (provider.type !== \"oauth\") {\n ({ userId } = await upsertUserAndAccount(\n ctx,\n sessionId,\n { existingAccount: account },\n {\n type: \"verification\",\n provider,\n profile: {\n ...(emailVerified !== undefined\n ? { email: emailVerified, emailVerified: true }\n : {}),\n ...(phoneVerified !== undefined\n ? { phone: phoneVerified, phoneVerified: true }\n : {}),\n },\n },\n config,\n ));\n }\n\n return { providerAccountId: account.providerAccountId, userId };\n}\n"],"mappings":";;;;;;;;;AAmBA,MAAa,0BAA0B,EAAE,OAAO;CAC9C,QAAQ,EAAE,KAAK;CACf,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;CAChC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC;CAChC,gBAAgB,EAAE,SAAS;CAC3B,qBAAqB,EAAE,SAAS;CACjC,CAAC;AAIF,eAAsB,wBACpB,KACA,MACA,oBACA,QACqB;AACrB,cAAa,WAAW,OAAO,iCAAiC;EAC9D,QAAQ;GAAE,OAAO,KAAK,OAAO;GAAO,OAAO,KAAK,OAAO;GAAO;EAC9D,UAAU,KAAK;EACf,UAAU,KAAK;EACf,gBAAgB,KAAK;EACrB,qBAAqB,KAAK;EAC3B,CAAC;CACF,MAAM,EAAE,gBAAgB,UAAU,wBAAwB;CAC1D,MAAM,aAAa,KAAK,OAAO,SAAS,KAAK,OAAO;AACpD,KAAI,eAAe,QACjB;MAAI,MAAM,oBAAoB,KAAK,YAAY,OAAO,EAAE;AACtD,gBACE,WAAW,OACX,yDACD;AACD,UAAO;;;CAGX,MAAM,eAAe,MAAM,eACzB,KACA,MACA,YAAY,MACZ,oBACA,qBACA,QACA,MAAM,iBAAiB,IAAI,CAC5B;AACD,KAAI,iBAAiB,MAAM;AACzB,MAAI,eAAe,OACjB,OAAM,mBAAmB,KAAK,YAAY,OAAO;AAEnD,SAAO;;AAET,KAAI,eAAe,OACjB,OAAM,qBAAqB,KAAK,YAAY,OAAO;CAErD,MAAM,EAAE,WAAW;AAMnB,QAAO,MAAM,8BACX,KACA,QACA,QARgB,MAAM,kCACtB,KACA,QACA,OACD,EAMC,eACD;;AAGH,MAAa,0BAA0B,OACrC,KACA,SACwB;AACxB,QAAO,IAAI,YAAY,gBAAgB,EACrC,MAAM;EACJ,MAAM;EACN,GAAG;EACJ,EACF,CAAC;;AAGJ,eAAe,eACb,KACA,MAaA,kBACA,oBACA,qBACA,QACA,WACA;CACA,MAAM,KAAK,OAAO,KAAK,OAAO;CAC9B,MAAM,EAAE,QAAQ,aAAa;CAC7B,MAAM,WAAW,MAAM,OAAO,OAAO,KAAK;CAC1C,MAAM,mBAAmB,MAAM,GAAG,kBAAkB,UAAU,SAAS;AACvE,KAAI,qBAAqB,MAAM;AAC7B,eAAa,WAAW,OAAO,4BAA4B;AAC3D,SAAO;;AAET,OAAM,GAAG,kBAAkB,OAAO,iBAAiB,IAAI;AACvD,KAAI,iBAAiB,aAAa,UAAU;AAC1C,eAAa,WAAW,OAAO,mBAAmB;AAClD,SAAO;;AAET,KAAI,iBAAiB,iBAAiB,KAAK,KAAK,EAAE;AAChD,eAAa,WAAW,OAAO,4BAA4B;AAC3D,SAAO;;CAET,MAAM,EAAE,WAAW,eAAe,kBAAkB;CACpD,MAAM,UAAU,MAAM,GAAG,SAAS,QAAQ,UAAU;AACpD,KAAI,YAAY,MAAM;AACpB,eACE,WAAW,OACX,sDACD;AACD,SAAO;;AAET,KACE,qBAAqB,QACrB,iBAAiB,aAAa,kBAC9B;AACA,eACE,WAAW,OACX,qBAAqB,iBAAiB,yDACA,iBAAiB,SAAS,GACjE;AACD,SAAO;;CAIT,MAAM,iBAAiB,mBACrB,iBAAiB,UACjB,oBACD;AACD,KACE,mBAAmB,SAClB,eAAe,SAAS,WAAW,eAAe,SAAS,YAC5D,eAAe,cAAc,OAE7B,OAAM,eAAe,UAAU,KAAK,QAAQ,QAAQ;CAEtD,IAAI,SAAS,QAAQ;CACrB,MAAM,WAAW,mBAAmB,QAAQ,SAAS;AACrD,KAAI,SAAS,SAAS,QACpB,EAAC,CAAE,UAAW,MAAM,qBAClB,KACA,WACA,EAAE,iBAAiB,SAAS,EAC5B;EACE,MAAM;EACN;EACA,SAAS;GACP,GAAI,kBAAkB,SAClB;IAAE,OAAO;IAAe,eAAe;IAAM,GAC7C,EAAE;GACN,GAAI,kBAAkB,SAClB;IAAE,OAAO;IAAe,eAAe;IAAM,GAC7C,EAAE;GACP;EACF,EACD,OACD;AAGH,QAAO;EAAE,mBAAmB,QAAQ;EAAmB;EAAQ"}
@@ -1,307 +0,0 @@
1
- import { throwAuthError } from "../errors.js";
2
- import { authDb } from "./db.js";
3
- import { callSignIn } from "./mutations/signin.js";
4
- import { callVerifierSignature } from "./mutations/signature.js";
5
- import { callVerifier } from "./mutations/verifier.js";
6
- import { mutatePasskeyInsert, mutatePasskeyUpdateCounter, mutateVerifierDelete, queryPasskeyByCredentialId, queryPasskeysByUserId, queryUserById, queryUserByVerifiedEmail, queryVerifierById } from "./types.js";
7
- import { sha256 } from "@oslojs/crypto/sha2";
8
- import { decodeBase64urlIgnorePadding, encodeBase64urlNoPadding } from "@oslojs/encoding";
9
- import { COSEKeyType, ClientDataType, coseAlgorithmES256, coseAlgorithmRS256, createAssertionSignatureMessage, parseAttestationObject, parseAuthenticatorData, parseClientDataJSON } from "@oslojs/webauthn";
10
- import { decodePKIXECDSASignature, decodeSEC1PublicKey, p256, verifyECDSASignature } from "@oslojs/crypto/ecdsa";
11
- import { RSAPublicKey, decodePKCS1RSAPublicKey, sha256ObjectIdentifier, verifyRSASSAPKCS1v15Signature } from "@oslojs/crypto/rsa";
12
-
13
- //#region src/server/implementation/passkey.ts
14
- /**
15
- * Server-side WebAuthn ceremony logic for passkey authentication.
16
- *
17
- * Handles the four phases of the WebAuthn flow:
18
- * 1. register-options — generate PublicKeyCredentialCreationOptions
19
- * 2. register-verify — verify attestation and store credential
20
- * 3. auth-options — generate PublicKeyCredentialRequestOptions
21
- * 4. auth-verify — verify assertion signature and sign in
22
- *
23
- * Uses `@oslojs/webauthn` for attestation/assertion parsing and
24
- * `@oslojs/crypto` for signature verification.
25
- */
26
- /**
27
- * Resolve passkey relying party options from provider config and environment.
28
- */
29
- function resolveRpOptions(provider) {
30
- const siteUrl = process.env.SITE_URL;
31
- if (!siteUrl && !provider.options.rpId) throwAuthError("PASSKEY_MISSING_CONFIG", "Passkey provider requires SITE_URL env var (your frontend URL) or explicit rpId / origin in the provider config. CONVEX_SITE_URL cannot be used because WebAuthn RP ID must match the frontend domain.");
32
- const siteHostname = siteUrl ? new URL(siteUrl).hostname : void 0;
33
- return {
34
- rpName: provider.options.rpName ?? siteHostname ?? "localhost",
35
- rpId: provider.options.rpId ?? siteHostname ?? "localhost",
36
- origin: provider.options.origin ?? siteUrl ?? "http://localhost",
37
- attestation: provider.options.attestation ?? "none",
38
- userVerification: provider.options.userVerification ?? "required",
39
- residentKey: provider.options.residentKey ?? "preferred",
40
- authenticatorAttachment: provider.options.authenticatorAttachment,
41
- algorithms: provider.options.algorithms ?? [coseAlgorithmES256, coseAlgorithmRS256],
42
- challengeExpirationMs: provider.options.challengeExpirationMs ?? 3e5
43
- };
44
- }
45
- /**
46
- * Generate a cryptographically random challenge.
47
- */
48
- function generateChallenge() {
49
- const challenge = new Uint8Array(32);
50
- crypto.getRandomValues(challenge);
51
- return challenge;
52
- }
53
- /**
54
- * Hash a challenge for storage in the verifier table's `signature` field.
55
- */
56
- function hashChallenge(challenge) {
57
- return encodeBase64urlNoPadding(new Uint8Array(sha256(challenge)));
58
- }
59
- /**
60
- * Phase 1: Generate registration options.
61
- *
62
- * Requires an authenticated user — passkey registration always adds a
63
- * credential to an existing account. The userId is taken from the
64
- * current session identity.
65
- */
66
- async function handleRegisterOptions(ctx, provider, params) {
67
- const identity = await ctx.auth.getUserIdentity();
68
- if (identity === null) throwAuthError("PASSKEY_AUTH_REQUIRED");
69
- const [userId] = identity.subject.split("|");
70
- const rp = resolveRpOptions(provider);
71
- const challenge = generateChallenge();
72
- const challengeHash = hashChallenge(challenge);
73
- const verifier = await callVerifier(ctx);
74
- await callVerifierSignature(ctx, {
75
- verifier,
76
- signature: challengeHash
77
- });
78
- const user = await queryUserById(ctx, userId);
79
- const userName = params.userName ?? user?.email ?? "user";
80
- const userDisplayName = params.userDisplayName ?? user?.name ?? userName;
81
- const excludeCredentials = (await queryPasskeysByUserId(ctx, userId)).map((pk) => ({
82
- id: pk.credentialId,
83
- transports: pk.transports
84
- }));
85
- const userHandle = encodeBase64urlNoPadding(new TextEncoder().encode(userId));
86
- return {
87
- kind: "passkeyOptions",
88
- options: {
89
- rp: {
90
- name: rp.rpName,
91
- id: rp.rpId
92
- },
93
- user: {
94
- id: userHandle,
95
- name: userName,
96
- displayName: userDisplayName
97
- },
98
- challenge: encodeBase64urlNoPadding(challenge),
99
- pubKeyCredParams: rp.algorithms.map((alg) => ({
100
- type: "public-key",
101
- alg
102
- })),
103
- timeout: rp.challengeExpirationMs,
104
- attestation: rp.attestation,
105
- authenticatorSelection: {
106
- residentKey: rp.residentKey,
107
- requireResidentKey: rp.residentKey === "required",
108
- userVerification: rp.userVerification,
109
- ...rp.authenticatorAttachment ? { authenticatorAttachment: rp.authenticatorAttachment } : {}
110
- },
111
- excludeCredentials
112
- },
113
- verifier
114
- };
115
- }
116
- /**
117
- * Phase 2: Verify registration attestation and store the credential.
118
- *
119
- * Requires an authenticated user. Parses the attestation, verifies the
120
- * challenge, extracts the public key, creates an account + passkey record
121
- * linked to the current user, and returns auth tokens.
122
- */
123
- async function handleRegisterVerify(ctx, provider, params, verifierValue) {
124
- const identity = await ctx.auth.getUserIdentity();
125
- if (identity === null) throwAuthError("PASSKEY_AUTH_REQUIRED");
126
- const [userId] = identity.subject.split("|");
127
- const rp = resolveRpOptions(provider);
128
- if (!verifierValue) throwAuthError("PASSKEY_MISSING_VERIFIER");
129
- const clientData = parseClientDataJSON(decodeBase64urlIgnorePadding(params.clientDataJSON));
130
- if (clientData.type !== ClientDataType.Create) throwAuthError("PASSKEY_INVALID_CLIENT_DATA", "Invalid client data type: expected webauthn.create");
131
- const allowedOrigins = Array.isArray(rp.origin) ? rp.origin : [rp.origin];
132
- if (!allowedOrigins.includes(clientData.origin)) throwAuthError("PASSKEY_INVALID_ORIGIN", `Invalid origin: ${clientData.origin}, expected one of: ${allowedOrigins.join(", ")}`);
133
- const challengeHash = encodeBase64urlNoPadding(new Uint8Array(sha256(clientData.challenge)));
134
- const verifierDoc = await queryVerifierById(ctx, verifierValue);
135
- if (!verifierDoc || verifierDoc.signature !== challengeHash) throwAuthError("PASSKEY_INVALID_CHALLENGE");
136
- await mutateVerifierDelete(ctx, verifierValue);
137
- const authenticatorData = parseAttestationObject(decodeBase64urlIgnorePadding(params.attestationObject)).authenticatorData;
138
- if (!authenticatorData.verifyRelyingPartyIdHash(rp.rpId)) throwAuthError("PASSKEY_RP_MISMATCH");
139
- if (!authenticatorData.userPresent) throwAuthError("PASSKEY_USER_PRESENCE");
140
- if (rp.userVerification === "required" && !authenticatorData.userVerified) throwAuthError("PASSKEY_USER_VERIFICATION");
141
- const credential = authenticatorData.credential;
142
- if (!credential) throwAuthError("PASSKEY_NO_CREDENTIAL");
143
- const credentialId = encodeBase64urlNoPadding(credential.id);
144
- const publicKey = credential.publicKey;
145
- let algorithm;
146
- let publicKeyBytes;
147
- if (publicKey.isAlgorithmDefined()) algorithm = publicKey.algorithm();
148
- else {
149
- const keyType = publicKey.type();
150
- algorithm = keyType === COSEKeyType.EC2 ? coseAlgorithmES256 : keyType === COSEKeyType.RSA ? coseAlgorithmRS256 : coseAlgorithmES256;
151
- }
152
- if (algorithm === coseAlgorithmES256) {
153
- const ec2 = publicKey.ec2();
154
- const xBytes = bigintToBytes(ec2.x, 32);
155
- const yBytes = bigintToBytes(ec2.y, 32);
156
- publicKeyBytes = new Uint8Array(65);
157
- publicKeyBytes[0] = 4;
158
- publicKeyBytes.set(xBytes, 1);
159
- publicKeyBytes.set(yBytes, 33);
160
- } else if (algorithm === coseAlgorithmRS256) {
161
- const rsa = publicKey.rsa();
162
- publicKeyBytes = new RSAPublicKey(rsa.n, rsa.e).encodePKCS1();
163
- } else throwAuthError("PASSKEY_UNSUPPORTED_ALGORITHM", `Unsupported algorithm: ${algorithm}`);
164
- const deviceType = params.deviceType ?? "single-device";
165
- const backedUp = params.backedUp ?? false;
166
- await authDb(ctx, ctx.auth.config).accounts.create({
167
- userId,
168
- provider: provider.id,
169
- providerAccountId: credentialId
170
- });
171
- await mutatePasskeyInsert(ctx, {
172
- userId,
173
- credentialId,
174
- publicKey: publicKeyBytes.buffer.slice(publicKeyBytes.byteOffset, publicKeyBytes.byteOffset + publicKeyBytes.byteLength),
175
- algorithm,
176
- counter: authenticatorData.signatureCounter,
177
- transports: params.transports,
178
- deviceType,
179
- backedUp,
180
- name: params.passkeyName,
181
- createdAt: Date.now()
182
- });
183
- return {
184
- kind: "signedIn",
185
- signedIn: await callSignIn(ctx, {
186
- userId,
187
- generateTokens: true
188
- })
189
- };
190
- }
191
- /**
192
- * Phase 3: Generate authentication options.
193
- *
194
- * Creates a challenge and returns PublicKeyCredentialRequestOptions.
195
- * If an email is provided, scopes allowCredentials to that user's passkeys.
196
- */
197
- async function handleAuthOptions(ctx, provider, params) {
198
- const rp = resolveRpOptions(provider);
199
- const challenge = generateChallenge();
200
- const challengeHash = hashChallenge(challenge);
201
- const verifier = await callVerifier(ctx);
202
- await callVerifierSignature(ctx, {
203
- verifier,
204
- signature: challengeHash
205
- });
206
- let allowCredentials;
207
- if (params.email) {
208
- const user = await queryUserByVerifiedEmail(ctx, params.email);
209
- if (user) {
210
- const passkeys = await queryPasskeysByUserId(ctx, user._id);
211
- if (passkeys.length > 0) allowCredentials = passkeys.map((pk) => ({
212
- type: "public-key",
213
- id: pk.credentialId,
214
- transports: pk.transports
215
- }));
216
- }
217
- }
218
- const options = {
219
- challenge: encodeBase64urlNoPadding(challenge),
220
- timeout: rp.challengeExpirationMs,
221
- rpId: rp.rpId,
222
- userVerification: rp.userVerification
223
- };
224
- if (allowCredentials) options.allowCredentials = allowCredentials;
225
- return {
226
- kind: "passkeyOptions",
227
- options,
228
- verifier
229
- };
230
- }
231
- /**
232
- * Phase 4: Verify authentication assertion and sign in.
233
- *
234
- * Verifies the signature against the stored public key, checks the counter,
235
- * and creates a session.
236
- */
237
- async function handleAuthVerify(ctx, provider, params, verifierValue) {
238
- const rp = resolveRpOptions(provider);
239
- if (!verifierValue) throwAuthError("PASSKEY_MISSING_VERIFIER");
240
- const clientDataJSON = decodeBase64urlIgnorePadding(params.clientDataJSON);
241
- const clientData = parseClientDataJSON(clientDataJSON);
242
- if (clientData.type !== ClientDataType.Get) throwAuthError("PASSKEY_INVALID_CLIENT_DATA", "Invalid client data type: expected webauthn.get");
243
- const allowedOrigins = Array.isArray(rp.origin) ? rp.origin : [rp.origin];
244
- if (!allowedOrigins.includes(clientData.origin)) throwAuthError("PASSKEY_INVALID_ORIGIN", `Invalid origin: ${clientData.origin}, expected one of: ${allowedOrigins.join(", ")}`);
245
- const challengeHash = encodeBase64urlNoPadding(new Uint8Array(sha256(clientData.challenge)));
246
- const verifierDoc = await queryVerifierById(ctx, verifierValue);
247
- if (!verifierDoc || verifierDoc.signature !== challengeHash) throwAuthError("PASSKEY_INVALID_CHALLENGE");
248
- await mutateVerifierDelete(ctx, verifierValue);
249
- const credentialId = params.credentialId;
250
- if (!credentialId) throwAuthError("PASSKEY_UNKNOWN_CREDENTIAL", "Missing credential ID");
251
- const passkey = await queryPasskeyByCredentialId(ctx, credentialId);
252
- if (!passkey) throwAuthError("PASSKEY_UNKNOWN_CREDENTIAL", "Unknown credential");
253
- const authenticatorDataBytes = decodeBase64urlIgnorePadding(params.authenticatorData);
254
- const authenticatorData = parseAuthenticatorData(authenticatorDataBytes);
255
- if (!authenticatorData.verifyRelyingPartyIdHash(rp.rpId)) throwAuthError("PASSKEY_RP_MISMATCH");
256
- if (!authenticatorData.userPresent) throwAuthError("PASSKEY_USER_PRESENCE");
257
- if (rp.userVerification === "required" && !authenticatorData.userVerified) throwAuthError("PASSKEY_USER_VERIFICATION");
258
- const signature = decodeBase64urlIgnorePadding(params.signature);
259
- const messageHash = sha256(createAssertionSignatureMessage(authenticatorDataBytes, clientDataJSON));
260
- const storedPublicKeyBytes = new Uint8Array(passkey.publicKey);
261
- if (passkey.algorithm === coseAlgorithmES256) {
262
- if (!verifyECDSASignature(decodeSEC1PublicKey(p256, storedPublicKeyBytes), messageHash, decodePKIXECDSASignature(signature))) throwAuthError("PASSKEY_INVALID_SIGNATURE");
263
- } else if (passkey.algorithm === coseAlgorithmRS256) {
264
- if (!verifyRSASSAPKCS1v15Signature(decodePKCS1RSAPublicKey(storedPublicKeyBytes), sha256ObjectIdentifier, messageHash, signature)) throwAuthError("PASSKEY_INVALID_SIGNATURE");
265
- } else throwAuthError("PASSKEY_UNSUPPORTED_ALGORITHM", `Unsupported algorithm: ${passkey.algorithm}`);
266
- if (passkey.counter !== 0 && authenticatorData.signatureCounter !== 0 && authenticatorData.signatureCounter <= passkey.counter) throwAuthError("PASSKEY_COUNTER_ERROR");
267
- await mutatePasskeyUpdateCounter(ctx, passkey._id, authenticatorData.signatureCounter, Date.now());
268
- return {
269
- kind: "signedIn",
270
- signedIn: await callSignIn(ctx, {
271
- userId: passkey.userId,
272
- generateTokens: true
273
- })
274
- };
275
- }
276
- /**
277
- * Main passkey handler dispatched from signIn.ts.
278
- *
279
- * Routes to the appropriate phase based on `params.flow`.
280
- */
281
- async function handlePasskey(ctx, provider, args) {
282
- const flow = args.params?.flow;
283
- if (!flow) throwAuthError("PASSKEY_MISSING_FLOW", "Missing `flow` parameter. Expected one of: register-options, register-verify, auth-options, auth-verify");
284
- switch (flow) {
285
- case "register-options": return handleRegisterOptions(ctx, provider, args.params ?? {});
286
- case "register-verify": return handleRegisterVerify(ctx, provider, args.params ?? {}, args.verifier);
287
- case "auth-options": return handleAuthOptions(ctx, provider, args.params ?? {});
288
- case "auth-verify": return handleAuthVerify(ctx, provider, args.params ?? {}, args.verifier);
289
- default: throwAuthError("PASSKEY_UNKNOWN_FLOW", `Unknown passkey flow: ${flow}. Expected one of: register-options, register-verify, auth-options, auth-verify`);
290
- }
291
- }
292
- /**
293
- * Convert a bigint to a fixed-size big-endian byte array.
294
- */
295
- function bigintToBytes(value, length) {
296
- const bytes = new Uint8Array(length);
297
- let v = value;
298
- for (let i = length - 1; i >= 0; i--) {
299
- bytes[i] = Number(v & 255n);
300
- v >>= 8n;
301
- }
302
- return bytes;
303
- }
304
-
305
- //#endregion
306
- export { handlePasskey };
307
- //# sourceMappingURL=passkey.js.map