@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
package/src/cli/index.ts CHANGED
@@ -1,18 +1,98 @@
1
- #!/usr/bin/env node
1
+ import { execFileSync } from "child_process";
2
+ import {
3
+ existsSync,
4
+ mkdtempSync,
5
+ readFileSync,
6
+ writeFileSync,
7
+ unlinkSync,
8
+ } from "fs";
9
+ import { tmpdir } from "os";
10
+ import path from "path";
2
11
 
12
+ import * as p from "@clack/prompts";
3
13
  import { Command } from "@commander-js/extra-typings";
4
- import chalk from "chalk";
5
- import { execSync } from "child_process";
6
14
  import { config as loadEnvFile } from "dotenv";
7
- import { existsSync, readFileSync, writeFileSync } from "fs";
8
- import inquirer from "inquirer";
9
- import path from "path";
10
15
  import * as v from "valibot";
16
+
11
17
  import { actionDescription } from "./command";
12
18
  import { generateKeys } from "./keys";
13
19
 
14
- const program = new Command()
20
+ // ---------------------------------------------------------------------------
21
+ // Package version
22
+ // ---------------------------------------------------------------------------
23
+
24
+ function getPackageVersion(): string {
25
+ // When bundled to dist/bin.cjs the package.json is one level up
26
+ for (const relative of ["..", "../.."]) {
27
+ try {
28
+ const pkgPath = path.resolve(__dirname, relative, "package.json");
29
+ return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
30
+ } catch {
31
+ // try next
32
+ }
33
+ }
34
+ return "unknown";
35
+ }
36
+
37
+ const version = getPackageVersion();
38
+
39
+ // ---------------------------------------------------------------------------
40
+ // Package-manager detection
41
+ // ---------------------------------------------------------------------------
42
+
43
+ type PackageRunner = { cmd: string; args: string[] };
44
+
45
+ function detectPackageRunner(): PackageRunner {
46
+ // Walk up from cwd to find lockfiles or packageManager field
47
+ let dir = process.cwd();
48
+ const root = path.parse(dir).root;
49
+
50
+ while (dir !== root) {
51
+ const pkgPath = path.join(dir, "package.json");
52
+ if (existsSync(pkgPath)) {
53
+ try {
54
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
55
+ if (typeof pkg.packageManager === "string") {
56
+ const name = pkg.packageManager.split("@")[0];
57
+ if (name === "pnpm") return { cmd: "pnpm", args: ["exec"] };
58
+ if (name === "bun") return { cmd: "bunx", args: [] };
59
+ if (name === "yarn") return { cmd: "yarn", args: ["dlx"] };
60
+ }
61
+ } catch {
62
+ // ignore parse errors
63
+ }
64
+ }
65
+
66
+ if (existsSync(path.join(dir, "pnpm-lock.yaml")))
67
+ return { cmd: "pnpm", args: ["exec"] };
68
+ if (
69
+ existsSync(path.join(dir, "bun.lockb")) ||
70
+ existsSync(path.join(dir, "bun.lock"))
71
+ )
72
+ return { cmd: "bunx", args: [] };
73
+ if (existsSync(path.join(dir, "yarn.lock")))
74
+ return { cmd: "yarn", args: ["dlx"] };
75
+
76
+ dir = path.dirname(dir);
77
+ }
78
+
79
+ return { cmd: "npx", args: [] };
80
+ }
81
+
82
+ const runner = detectPackageRunner();
83
+
84
+ /** Build the full command + args to invoke `convex` via the detected runner. */
85
+ function convexCmd(...subArgs: string[]): { file: string; args: string[] } {
86
+ return { file: runner.cmd, args: [...runner.args, "convex", ...subArgs] };
87
+ }
88
+
89
+ // ---------------------------------------------------------------------------
90
+ // Commander program
91
+ // ---------------------------------------------------------------------------
92
+
93
+ export const program = new Command()
15
94
  .name("@robelest/convex-auth")
95
+ .version(version)
16
96
  .description(
17
97
  "Add code and set environment variables for @robelest/convex-auth.\n\n" +
18
98
  "Full docs: https://deepwiki.com/robelest/convex-auth",
@@ -34,6 +114,8 @@ program
34
114
  actionDescription("Set environment variables on"),
35
115
  )
36
116
  .action(async (options) => {
117
+ p.intro("@robelest/convex-auth");
118
+
37
119
  await checkSourceControl(options);
38
120
 
39
121
  const packageJson = readPackageJson();
@@ -52,7 +134,7 @@ program
52
134
  const isExpo = !!(
53
135
  packageJson.dependencies?.expo || packageJson.devDependencies?.expo
54
136
  );
55
- const config = {
137
+ const config: ProjectConfig = {
56
138
  isNextjs,
57
139
  isVite,
58
140
  isExpo,
@@ -63,31 +145,21 @@ program
63
145
  };
64
146
 
65
147
  // Step 1: Configure SITE_URL
66
- // We check for existing config.
67
- // We default to localhost and port depending on framework
68
148
  await configureSiteUrl(config, options.siteUrl);
69
149
 
70
150
  // Step 2: Configure private and public key
71
- // We ask if we would overwrite existing keys
72
151
  await configureKeys(config);
73
152
 
74
- // Step 3: Change moduleResolution to "bundler"
75
- // and turn on skipLibCheck
76
- // Skipped if there's no tsconfig.json
153
+ // Step 3: Change moduleResolution to "bundler" and turn on skipLibCheck
77
154
  await modifyTsConfig(config);
78
155
 
79
156
  // Step 4: Configure convex.config.ts
80
- // Ensure the auth component is registered via app.use(auth).
81
157
  await configureConvexConfig(config);
82
158
 
83
159
  // Step 5: Initialize auth.ts
84
- // We do nothing if the file already contains the code,
85
- // and give instructions otherwise
86
160
  await initializeAuth(config);
87
161
 
88
162
  // Step 6: Configure http.ts
89
- // We do nothing if the file already contains the code,
90
- // and give instructions otherwise
91
163
  await configureHttp(config);
92
164
 
93
165
  // Extra: Configure providers interactively.
@@ -96,9 +168,13 @@ program
96
168
  } else {
97
169
  printFinalSuccessMessage(config);
98
170
  }
171
+
172
+ p.outro("Done!");
99
173
  });
100
174
 
101
- program.parse(process.argv);
175
+ // ---------------------------------------------------------------------------
176
+ // Types
177
+ // ---------------------------------------------------------------------------
102
178
 
103
179
  type ProjectConfig = {
104
180
  isExpo: boolean;
@@ -121,10 +197,14 @@ type ProjectConfig = {
121
197
  step: number;
122
198
  };
123
199
 
200
+ // ---------------------------------------------------------------------------
201
+ // Step 1: SITE_URL
202
+ // ---------------------------------------------------------------------------
203
+
124
204
  async function configureSiteUrl(config: ProjectConfig, forcedValue?: string) {
125
205
  logStep(config, "Configure SITE_URL");
126
206
  if (config.isExpo) {
127
- logInfo("React Native projects don't require a SITE_URL.");
207
+ p.log.info("React Native projects don't require a SITE_URL.");
128
208
  return;
129
209
  }
130
210
 
@@ -157,6 +237,10 @@ async function configureSiteUrl(config: ProjectConfig, forcedValue?: string) {
157
237
  });
158
238
  }
159
239
 
240
+ // ---------------------------------------------------------------------------
241
+ // Generic env var configuration
242
+ // ---------------------------------------------------------------------------
243
+
160
244
  async function configureEnvVar(
161
245
  config: ProjectConfig,
162
246
  variable: {
@@ -174,14 +258,13 @@ async function configureEnvVar(
174
258
  await setEnvVar(config, variable.name, variable.forcedValue);
175
259
  return;
176
260
  }
177
- const existing = await backendEnvVar(config, variable.name);
261
+ const existing = backendEnvVar(config, variable.name);
178
262
  if (existing !== "") {
179
- if (
180
- !(await promptForConfirmation(
181
- `The ${printDeployment(config)} already has ${variable.name} configured to ${chalk.bold(existing)}. Do you want to change it?`,
182
- { default: false },
183
- ))
184
- ) {
263
+ const shouldChange = await promptForConfirmation(
264
+ `The ${printDeployment(config)} already has ${variable.name} configured to "${existing}". Do you want to change it?`,
265
+ { default: false },
266
+ );
267
+ if (!shouldChange) {
185
268
  return;
186
269
  }
187
270
  }
@@ -192,41 +275,61 @@ async function configureEnvVar(
192
275
  await setEnvVar(config, variable.name, chosenValue);
193
276
  }
194
277
 
278
+ // ---------------------------------------------------------------------------
279
+ // Step 2: Keys
280
+ // ---------------------------------------------------------------------------
281
+
195
282
  async function configureKeys(config: ProjectConfig) {
196
- logStep(config, "Configure private and public key");
197
- const { JWT_PRIVATE_KEY, JWKS } = await generateKeys();
198
- // TODO: We should just list all the 3 env vars in one command
199
- // to speed things up, but the convex CLI doesn't quote the
200
- // values correctly right now, so we can't.
201
- const existingPrivateKey = await backendEnvVar(config, "JWT_PRIVATE_KEY");
202
- const existingJwks = await backendEnvVar(config, "JWKS");
203
- if (existingPrivateKey !== "" || existingJwks !== "") {
204
- if (
205
- !(await promptForConfirmation(
206
- `The ${printDeployment(config)} already has JWT_PRIVATE_KEY or JWKS configured. Overwrite them?`,
207
- { default: false },
208
- ))
209
- ) {
283
+ logStep(config, "Configure signing and encryption keys");
284
+ const { JWT_PRIVATE_KEY, JWKS, AUTH_SECRET_ENCRYPTION_KEY } =
285
+ await generateKeys();
286
+ const existingPrivateKey = backendEnvVar(config, "JWT_PRIVATE_KEY");
287
+ const existingJwks = backendEnvVar(config, "JWKS");
288
+ const existingSecretEncryptionKey = backendEnvVar(
289
+ config,
290
+ "AUTH_SECRET_ENCRYPTION_KEY",
291
+ );
292
+ if (
293
+ existingPrivateKey !== "" ||
294
+ existingJwks !== "" ||
295
+ existingSecretEncryptionKey !== ""
296
+ ) {
297
+ const shouldOverwrite = await promptForConfirmation(
298
+ `The ${printDeployment(config)} already has JWT_PRIVATE_KEY, JWKS, or AUTH_SECRET_ENCRYPTION_KEY configured. Overwrite them?`,
299
+ { default: false },
300
+ );
301
+ if (!shouldOverwrite) {
210
302
  return;
211
303
  }
212
304
  }
213
- // TODO: We should set both env vars in one command, but the convex CLI doesn't
214
- // support setting multiple env vars.
215
- await setEnvVar(config, "JWT_PRIVATE_KEY", JWT_PRIVATE_KEY, {
216
- hideValue: true,
217
- });
218
- await setEnvVar(config, "JWKS", JWKS, { hideValue: true });
305
+ // Use --from-file to avoid shell quoting issues with multiline values
306
+ await setEnvVarFromFile(config, "JWT_PRIVATE_KEY", JWT_PRIVATE_KEY);
307
+ await setEnvVarFromFile(config, "JWKS", JWKS);
308
+ await setEnvVar(
309
+ config,
310
+ "AUTH_SECRET_ENCRYPTION_KEY",
311
+ AUTH_SECRET_ENCRYPTION_KEY,
312
+ {
313
+ hideValue: true,
314
+ },
315
+ );
219
316
  }
220
317
 
221
- async function backendEnvVar(config: ProjectConfig, name: string) {
222
- return (
223
- execSync(`npx convex env get ${deploymentOptions(config)} ${name}`, {
224
- stdio: "pipe",
225
- })
226
- .toString()
227
- // Remove trailing newline
228
- .slice(0, -1)
318
+ // ---------------------------------------------------------------------------
319
+ // Convex env helpers (no shell injection — argument arrays only)
320
+ // ---------------------------------------------------------------------------
321
+
322
+ function backendEnvVar(config: ProjectConfig, name: string): string {
323
+ const { file, args } = convexCmd(
324
+ "env",
325
+ "get",
326
+ ...deploymentArgs(config),
327
+ name,
229
328
  );
329
+ return execFileSync(file, args, {
330
+ stdio: "pipe",
331
+ encoding: "utf-8",
332
+ }).slice(0, -1);
230
333
  }
231
334
 
232
335
  async function setEnvVar(
@@ -235,59 +338,91 @@ async function setEnvVar(
235
338
  value: string,
236
339
  options?: { hideValue: boolean },
237
340
  ) {
238
- const valueEscaped = value.replace(/"/g, '\\"');
239
- execSync(
240
- `npx convex env set ${deploymentOptions(config)} -- ${name} "${valueEscaped}"`,
241
- {
242
- stdio: options?.hideValue ? "ignore" : "inherit",
243
- },
341
+ const { file, args } = convexCmd(
342
+ "env",
343
+ "set",
344
+ ...deploymentArgs(config),
345
+ "--",
346
+ name,
347
+ value,
244
348
  );
349
+ execFileSync(file, args, {
350
+ stdio: options?.hideValue ? "ignore" : "inherit",
351
+ });
245
352
  if (options?.hideValue) {
246
- logSuccess(
247
- `Successfully set ${chalk.bold(name)} (on ${printDeployment(config)})`,
248
- );
353
+ p.log.success(`Successfully set ${name} (on ${printDeployment(config)})`);
249
354
  }
250
355
  }
251
356
 
252
- function deploymentOptions(config: ProjectConfig) {
253
- const {
254
- deployment: {
255
- options: { adminKey },
256
- },
257
- } = config;
258
- const adminKeyOption =
259
- adminKey !== undefined ? `--admin-key '${adminKey}' ` : "";
260
- return adminKeyOption + deploymentNameOptions(config);
357
+ /**
358
+ * Write value to a temp file and use `convex env set KEY --from-file tmpfile`.
359
+ * This avoids shell-quoting issues with multiline values like private keys.
360
+ */
361
+ async function setEnvVarFromFile(
362
+ config: ProjectConfig,
363
+ name: string,
364
+ value: string,
365
+ ) {
366
+ const tmpDir = mkdtempSync(path.join(tmpdir(), "convex-auth-"));
367
+ const tmpFile = path.join(tmpDir, `${name}.tmp`);
368
+ try {
369
+ writeFileSync(tmpFile, value, "utf-8");
370
+ const { file, args } = convexCmd(
371
+ "env",
372
+ "set",
373
+ ...deploymentArgs(config),
374
+ name,
375
+ "--from-file",
376
+ tmpFile,
377
+ );
378
+ execFileSync(file, args, { stdio: "ignore" });
379
+ p.log.success(`Successfully set ${name} (on ${printDeployment(config)})`);
380
+ } finally {
381
+ try {
382
+ unlinkSync(tmpFile);
383
+ } catch {
384
+ // cleanup is best-effort
385
+ }
386
+ }
261
387
  }
262
388
 
263
- function deploymentNameOptions(config: ProjectConfig) {
389
+ function deploymentArgs(config: ProjectConfig): string[] {
264
390
  const {
265
391
  deployment: {
266
- options: { url, prod, previewName, deploymentName },
392
+ options: { adminKey, url, prod, previewName, deploymentName },
267
393
  },
268
394
  } = config;
269
- if (url) {
270
- return `--url ${url}`;
271
- } else if (prod) {
272
- return "--prod";
273
- } else if (previewName) {
274
- return `--preview-name ${previewName}`;
275
- } else if (deploymentName) {
276
- return `--deployment-name ${deploymentName}`;
277
- } else {
278
- return "";
395
+ const args: string[] = [];
396
+
397
+ if (adminKey !== undefined) {
398
+ args.push("--admin-key", adminKey);
279
399
  }
400
+
401
+ const selectionArgs =
402
+ [
403
+ url ? ["--url", url] : null,
404
+ prod ? ["--prod"] : null,
405
+ previewName ? ["--preview-name", previewName] : null,
406
+ deploymentName ? ["--deployment-name", deploymentName] : null,
407
+ ].find((s): s is string[] => s !== null) ?? [];
408
+
409
+ args.push(...selectionArgs);
410
+ return args;
280
411
  }
281
412
 
282
- function printDeployment(config: ProjectConfig) {
413
+ function printDeployment(config: ProjectConfig): string {
283
414
  const { name, type } = config.deployment;
284
415
  return (
285
- (type !== null ? `${chalk.bold(type)} ` : "") +
416
+ (type !== null ? `${type} ` : "") +
286
417
  "deployment" +
287
- (name !== null ? ` ${chalk.bold(name)}` : "")
418
+ (name !== null ? ` ${name}` : "")
288
419
  );
289
420
  }
290
421
 
422
+ // ---------------------------------------------------------------------------
423
+ // Step 3: tsconfig
424
+ // ---------------------------------------------------------------------------
425
+
291
426
  // Match `"compilerOptions": {"`
292
427
  // ignore comments after the bracket
293
428
  // and capture the space between the bracket/last comment
@@ -331,13 +466,13 @@ async function modifyTsConfig(config: ProjectConfig) {
331
466
  if (existsSync(projectLevelTsConfigPath)) {
332
467
  if (config.isExpo) {
333
468
  writeFileSync(tsConfigPath, validTsConfig);
334
- logSuccess(`Added ${chalk.bold(tsConfigPath)}`);
469
+ p.log.success(`Added ${tsConfigPath}`);
335
470
  return;
336
471
  }
337
472
  // else assume that the project-level tsconfig already
338
473
  // has the right settings, which is true for Vite and Next.js
339
474
  }
340
- logInfo(`No ${chalk.bold(tsConfigPath)} found. Skipping.`);
475
+ p.log.info(`No ${tsConfigPath} found. Skipping.`);
341
476
  return;
342
477
  }
343
478
  const existingTsConfig = readFileSync(tsConfigPath, "utf8");
@@ -351,14 +486,12 @@ async function modifyTsConfig(config: ProjectConfig) {
351
486
  /Bundler/i.test(existingModuleResolution) &&
352
487
  existingSkipLibCheck === "true"
353
488
  ) {
354
- logSuccess(`The ${chalk.bold(tsConfigPath)} is already set up.`);
489
+ p.log.success(`The ${tsConfigPath} is already set up.`);
355
490
  return;
356
491
  }
357
492
 
358
493
  if (!compilerOptionsPattern.test(existingTsConfig)) {
359
- logInfo(
360
- `Modify your ${chalk.bold(tsConfigPath)} to include the following:`,
361
- );
494
+ p.log.info(`Modify your ${tsConfigPath} to include the following:`);
362
495
  const source = `\
363
496
  {
364
497
  "compilerOptions": {
@@ -367,7 +500,7 @@ async function modifyTsConfig(config: ProjectConfig) {
367
500
  }
368
501
  }
369
502
  `;
370
- print(indent(`\n${source}\n`));
503
+ p.log.message(indent(`\n${source}\n`));
371
504
  await promptForConfirmationOrExit("Ready to continue?");
372
505
  }
373
506
  const changedTsConfig = addCompilerOption(
@@ -382,7 +515,7 @@ async function modifyTsConfig(config: ProjectConfig) {
382
515
  '"skipLibCheck": true',
383
516
  );
384
517
  writeFileSync(tsConfigPath, changedTsConfig);
385
- logSuccess(`Modified ${chalk.bold(tsConfigPath)}`);
518
+ p.log.success(`Modified ${tsConfigPath}`);
386
519
  }
387
520
 
388
521
  function addCompilerOption(
@@ -398,6 +531,10 @@ function addCompilerOption(
398
531
  }
399
532
  }
400
533
 
534
+ // ---------------------------------------------------------------------------
535
+ // Step 4: convex.config
536
+ // ---------------------------------------------------------------------------
537
+
401
538
  async function configureConvexConfig(config: ProjectConfig) {
402
539
  logStep(config, "Configure convex config file");
403
540
  const sourceTemplate = `\
@@ -412,16 +549,16 @@ export default app;
412
549
  `;
413
550
  const source = templateToSource(sourceTemplate);
414
551
  const convexConfigPath = path.join(config.convexFolderPath, "convex.config");
415
- const existingConfigPath = await existingNonEmptySourcePath(convexConfigPath);
552
+ const existingConfigPath = existingNonEmptySourcePath(convexConfigPath);
416
553
  if (existingConfigPath !== null) {
417
554
  const existingConfig = readFileSync(existingConfigPath, "utf8");
418
555
  if (doesAlreadyMatchTemplate(existingConfig, sourceTemplate)) {
419
- logSuccess(`The ${chalk.bold(existingConfigPath)} is already set up.`);
556
+ p.log.success(`The ${existingConfigPath} is already set up.`);
420
557
  } else {
421
- logInfo(
422
- `You already have a ${chalk.bold(existingConfigPath)}, make sure it registers the auth component like this:`,
558
+ p.log.info(
559
+ `You already have a ${existingConfigPath}, make sure it registers the auth component like this:`,
423
560
  );
424
- print(indent(`\n${source}\n`));
561
+ p.log.message(indent(`\n${source}\n`));
425
562
  await promptForConfirmationOrExit("Ready to continue?");
426
563
  }
427
564
  } else {
@@ -429,17 +566,21 @@ export default app;
429
566
  ? `${convexConfigPath}.ts`
430
567
  : `${convexConfigPath}.js`;
431
568
  writeFileSync(newConfigPath, source);
432
- logSuccess(`Created ${chalk.bold(newConfigPath)}`);
569
+ p.log.success(`Created ${newConfigPath}`);
433
570
  }
434
571
  }
435
572
 
573
+ // ---------------------------------------------------------------------------
574
+ // Step 5: auth.ts
575
+ // ---------------------------------------------------------------------------
576
+
436
577
  async function initializeAuth(config: ProjectConfig) {
437
578
  logStep(config, "Initialize auth file");
438
579
  const sourceTemplate = `\
439
- import { Auth } from "@robelest/convex-auth/component";
580
+ import { createAuth } from "@robelest/convex-auth/component";
440
581
  import { components } from "./_generated/api";
441
582
 
442
- const auth = new Auth(components.auth, {$$
583
+ const auth = createAuth(components.auth, {$$
443
584
  providers: [$$],$$
444
585
  });
445
586
 
@@ -448,16 +589,16 @@ export const { signIn, signOut, store } = auth;
448
589
  `;
449
590
  const source = templateToSource(sourceTemplate);
450
591
  const authPath = path.join(config.convexFolderPath, "auth");
451
- const existingAuthPath = await existingNonEmptySourcePath(authPath);
592
+ const existingAuthPath = existingNonEmptySourcePath(authPath);
452
593
  if (existingAuthPath !== null) {
453
594
  const existingAuth = readFileSync(existingAuthPath, "utf8");
454
595
  if (doesAlreadyMatchTemplate(existingAuth, sourceTemplate)) {
455
- logSuccess(`The ${chalk.bold(existingAuthPath)} is already set up.`);
596
+ p.log.success(`The ${existingAuthPath} is already set up.`);
456
597
  } else {
457
- logInfo(
458
- `You already have a ${chalk.bold(existingAuthPath)}, make sure it initializes \`Auth\` like this:`,
598
+ p.log.info(
599
+ `You already have a ${existingAuthPath}, make sure it initializes auth with \`createAuth\` like this:`,
459
600
  );
460
- print(indent(`\n${source}\n`));
601
+ p.log.message(indent(`\n${source}\n`));
461
602
  await promptForConfirmationOrExit("Ready to continue?");
462
603
  }
463
604
  } else {
@@ -465,10 +606,14 @@ export const { signIn, signOut, store } = auth;
465
606
  ? `${authPath}.ts`
466
607
  : `${authPath}.js`;
467
608
  writeFileSync(newAuthPath, source);
468
- logSuccess(`Created ${chalk.bold(newAuthPath)}`);
609
+ p.log.success(`Created ${newAuthPath}`);
469
610
  }
470
611
  }
471
612
 
613
+ // ---------------------------------------------------------------------------
614
+ // Step 6: http.ts
615
+ // ---------------------------------------------------------------------------
616
+
472
617
  async function configureHttp(config: ProjectConfig) {
473
618
  logStep(config, "Configure http file");
474
619
  const sourceTemplate = `\
@@ -483,16 +628,16 @@ export default http;
483
628
  `;
484
629
  const source = templateToSource(sourceTemplate);
485
630
  const httpPath = path.join(config.convexFolderPath, "http");
486
- const existingHttpPath = await existingNonEmptySourcePath(httpPath);
631
+ const existingHttpPath = existingNonEmptySourcePath(httpPath);
487
632
  if (existingHttpPath !== null) {
488
633
  const existingHttp = readFileSync(existingHttpPath, "utf8");
489
634
  if (doesAlreadyMatchTemplate(existingHttp, sourceTemplate)) {
490
- logSuccess(`The ${chalk.bold(existingHttpPath)} is already set up.`);
635
+ p.log.success(`The ${existingHttpPath} is already set up.`);
491
636
  } else {
492
- logInfo(
493
- `You already have a ${chalk.bold(existingHttpPath)}, make sure it includes the call to \`auth.http.add\`:`,
637
+ p.log.info(
638
+ `You already have a ${existingHttpPath}, make sure it includes the call to \`auth.http.add\`:`,
494
639
  );
495
- print(indent(`\n${source}\n`));
640
+ p.log.message(indent(`\n${source}\n`));
496
641
  await promptForConfirmationOrExit("Ready to continue?");
497
642
  }
498
643
  } else {
@@ -500,10 +645,14 @@ export default http;
500
645
  ? `${httpPath}.ts`
501
646
  : `${httpPath}.js`;
502
647
  writeFileSync(newHttpPath, source);
503
- logSuccess(`Created ${chalk.bold(newHttpPath)}`);
648
+ p.log.success(`Created ${newHttpPath}`);
504
649
  }
505
650
  }
506
651
 
652
+ // ---------------------------------------------------------------------------
653
+ // Extra: --variables
654
+ // ---------------------------------------------------------------------------
655
+
507
656
  const VariablesSchema = v.object({
508
657
  help: v.optional(v.string()),
509
658
  providers: v.array(
@@ -522,23 +671,30 @@ const VariablesSchema = v.object({
522
671
  });
523
672
 
524
673
  async function configureOtherVariables(config: ProjectConfig, json: string) {
525
- const variables = v.parse(VariablesSchema, JSON.parse(json));
674
+ let parsed: unknown;
675
+ try {
676
+ parsed = JSON.parse(json);
677
+ } catch (err) {
678
+ logErrorAndExit(
679
+ "The --variables flag must be valid JSON.",
680
+ err instanceof Error ? err.message : String(err),
681
+ );
682
+ }
683
+
684
+ const variables = v.parse(VariablesSchema, parsed);
526
685
  logStep(config, "Configure extra environment variables");
527
- // Ex: The default setup includes sign-in with GitHub OAuth
528
- // and sending magic links via Resend.
529
686
  if (variables.help !== undefined) {
530
- print(variables.help);
687
+ p.log.message(variables.help);
531
688
  }
532
689
  for (const provider of variables.providers) {
533
- if (
534
- !(await promptForConfirmation(
535
- `Do you want to configure ${provider.name}?`,
536
- ))
537
- ) {
690
+ const shouldConfigure = await promptForConfirmation(
691
+ `Do you want to configure ${provider.name}?`,
692
+ );
693
+ if (!shouldConfigure) {
538
694
  continue;
539
695
  }
540
696
  if (provider.help !== undefined) {
541
- print(provider.help);
697
+ p.log.message(provider.help);
542
698
  }
543
699
  for (const variable of provider.variables) {
544
700
  await configureEnvVar(config, {
@@ -548,11 +704,15 @@ async function configureOtherVariables(config: ProjectConfig, json: string) {
548
704
  }
549
705
  }
550
706
  if (variables.success !== undefined) {
551
- logSuccess(variables.success);
707
+ p.log.success(variables.success);
552
708
  }
553
709
  }
554
710
 
555
- function doesAlreadyMatchTemplate(existing: string, template: string) {
711
+ // ---------------------------------------------------------------------------
712
+ // Template helpers
713
+ // ---------------------------------------------------------------------------
714
+
715
+ export function doesAlreadyMatchTemplate(existing: string, template: string) {
556
716
  const regex = new RegExp(
557
717
  template
558
718
  .replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
@@ -563,29 +723,34 @@ function doesAlreadyMatchTemplate(existing: string, template: string) {
563
723
  return regex.test(existing);
564
724
  }
565
725
 
566
- function templateToSource(template: string) {
726
+ export function templateToSource(template: string) {
567
727
  return template.replace(/\$\$/g, "");
568
728
  }
569
729
 
570
- async function existingNonEmptySourcePath(path: string) {
571
- return (await existsAndNotEmpty(`${path}.ts`))
572
- ? `${path}.ts`
573
- : (await existsAndNotEmpty(`${path}.js`))
574
- ? `${path}.js`
730
+ function existingNonEmptySourcePath(filePath: string): string | null {
731
+ return existsAndNotEmpty(`${filePath}.ts`)
732
+ ? `${filePath}.ts`
733
+ : existsAndNotEmpty(`${filePath}.js`)
734
+ ? `${filePath}.js`
575
735
  : null;
576
736
  }
577
737
 
578
- async function existsAndNotEmpty(path: string) {
579
- return existsSync(path) && readFileSync(path, "utf8").trim() !== "";
738
+ function existsAndNotEmpty(filePath: string): boolean {
739
+ return existsSync(filePath) && readFileSync(filePath, "utf8").trim() !== "";
580
740
  }
581
741
 
742
+ // ---------------------------------------------------------------------------
743
+ // Logging
744
+ // ---------------------------------------------------------------------------
745
+
582
746
  function logStep(config: ProjectConfig, message: string) {
583
- if (config.step > 1) {
584
- print();
585
- }
586
- logInfo(chalk.bold(`Step ${config.step++}: ${message}`));
747
+ p.log.step(`Step ${config.step++}: ${message}`);
587
748
  }
588
749
 
750
+ // ---------------------------------------------------------------------------
751
+ // Source control check
752
+ // ---------------------------------------------------------------------------
753
+
589
754
  async function checkSourceControl(options: {
590
755
  skipGitCheck?: boolean;
591
756
  allowDirtyGitState?: boolean;
@@ -595,14 +760,25 @@ async function checkSourceControl(options: {
595
760
  }
596
761
  const isGit = existsSync(".git");
597
762
  if (isGit) {
598
- const gitStatus = execSync("git status --porcelain").toString();
763
+ let gitStatus: string;
764
+ try {
765
+ gitStatus = execFileSync("git", ["status", "--porcelain"], {
766
+ encoding: "utf-8",
767
+ });
768
+ } catch {
769
+ // git not available — skip check
770
+ return;
771
+ }
599
772
  const changedFiles = gitStatus
600
773
  .split("\n")
601
774
  .filter(
602
- (line) => !/\bpackage(-lock)?.json/.test(line) && line.length > 0,
775
+ (line) =>
776
+ !/\bpackage(-lock)?.json/.test(line) &&
777
+ !/\benv\.d\.ts$/.test(line) &&
778
+ line.length > 0,
603
779
  );
604
780
  if (changedFiles.length > 0) {
605
- logError(
781
+ p.log.error(
606
782
  "There are unstaged or uncommitted changes in the working directory. " +
607
783
  "Please commit or stash them before proceeding.",
608
784
  );
@@ -612,13 +788,17 @@ async function checkSourceControl(options: {
612
788
  if (options.skipGitCheck) {
613
789
  return;
614
790
  }
615
- logWarning(
791
+ p.log.warn(
616
792
  "No source control detected. We strongly recommend committing the current state of your code before proceeding.",
617
793
  );
618
794
  await promptForConfirmationOrExit("Continue anyway?");
619
795
  }
620
796
  }
621
797
 
798
+ // ---------------------------------------------------------------------------
799
+ // Project file readers
800
+ // ---------------------------------------------------------------------------
801
+
622
802
  type PackageJSON = { __isPackageJSON: true; [key: string]: any };
623
803
 
624
804
  function readPackageJson(): PackageJSON {
@@ -652,7 +832,11 @@ function readConvexJson(): ConvexJSON {
652
832
  }
653
833
  }
654
834
 
655
- function readConvexDeployment(options: {
835
+ // ---------------------------------------------------------------------------
836
+ // Deployment selection
837
+ // ---------------------------------------------------------------------------
838
+
839
+ export function readConvexDeployment(options: {
656
840
  url?: string;
657
841
  adminKey?: string;
658
842
  prod?: boolean;
@@ -660,30 +844,45 @@ function readConvexDeployment(options: {
660
844
  deploymentName?: string;
661
845
  }) {
662
846
  const { adminKey, url, prod, previewName, deploymentName } = options;
663
- const adminKeyName = adminKey ? deploymentNameFromAdminKey(adminKey) : null;
664
- const adminKeyType = adminKey ? deploymentTypeFromAdminKey(adminKey) : null;
847
+
665
848
  if (url) {
666
- return { name: adminKeyName ?? url, type: adminKeyType, options };
667
- } else if (prod) {
668
- return { name: adminKeyName, type: "prod", options };
669
- }
670
- if (previewName) {
671
- return { name: previewName, type: "preview", options };
672
- }
673
- if (deploymentName) {
674
- return { name: deploymentName, type: adminKeyType, options };
849
+ return {
850
+ name: url,
851
+ type: null,
852
+ options,
853
+ };
675
854
  }
676
- if (adminKey) {
677
- return { name: adminKeyName, type: adminKeyType, options };
855
+
856
+ const adminKeyName = adminKey ? deploymentNameFromAdminKey(adminKey) : null;
857
+ const adminKeyType = adminKey ? deploymentTypeFromAdminKey(adminKey) : null;
858
+
859
+ const explicitSelection = [
860
+ prod ? { name: adminKeyName, type: "prod" as const } : null,
861
+ previewName ? { name: previewName, type: "preview" as const } : null,
862
+ deploymentName ? { name: deploymentName, type: adminKeyType } : null,
863
+ adminKey ? { name: adminKeyName, type: adminKeyType } : null,
864
+ ].find(
865
+ (
866
+ selection,
867
+ ): selection is {
868
+ name: string | null;
869
+ type: string | null;
870
+ } => selection !== null,
871
+ );
872
+
873
+ if (explicitSelection !== undefined) {
874
+ return { ...explicitSelection, options };
678
875
  }
876
+
679
877
  loadEnvFile({ path: ".env.local" });
680
878
  loadEnvFile();
681
879
  if (process.env.CONVEX_DEPLOYMENT) {
880
+ const type = getDeploymentTypeFromConfiguredDeployment(
881
+ process.env.CONVEX_DEPLOYMENT,
882
+ );
682
883
  return {
683
884
  name: stripDeploymentTypePrefix(process.env.CONVEX_DEPLOYMENT),
684
- type: getDeploymentTypeFromConfiguredDeployment(
685
- process.env.CONVEX_DEPLOYMENT,
686
- ),
885
+ type,
687
886
  options,
688
887
  };
689
888
  }
@@ -696,50 +895,52 @@ function readConvexDeployment(options: {
696
895
  // NOTE: CONVEX CLI DEP
697
896
  // Given a deployment string like "dev:tall-forest-1234"
698
897
  // returns only the slug "tall-forest-1234".
699
- // If there's no prefix returns the original string.
700
898
  export function stripDeploymentTypePrefix(deployment: string) {
701
- return deployment.split(":").at(-1)!;
899
+ const [type, name] = deployment.split(":");
900
+ if ((type !== "prod" && type !== "dev" && type !== "preview") || !name) {
901
+ logErrorAndExit(
902
+ "Invalid CONVEX_DEPLOYMENT.",
903
+ 'Expected a typed deployment like "dev:my-deployment", "prod:my-deployment", or "preview:my-deployment".',
904
+ );
905
+ }
906
+ return name;
702
907
  }
703
908
 
704
909
  // NOTE: CONVEX CLI DEP
705
- // Handling legacy CONVEX_DEPLOYMENT without type prefix as well
706
910
  function getDeploymentTypeFromConfiguredDeployment(raw: string) {
707
911
  const typeRaw = raw.split(":")[0];
708
- const type =
709
- typeRaw === "prod" || typeRaw === "dev" || typeRaw === "preview"
710
- ? typeRaw
711
- : null;
712
- return type;
912
+ if (typeRaw === "prod" || typeRaw === "dev" || typeRaw === "preview") {
913
+ return typeRaw;
914
+ }
915
+ logErrorAndExit(
916
+ "Invalid CONVEX_DEPLOYMENT.",
917
+ 'Expected a typed deployment like "dev:my-deployment", "prod:my-deployment", or "preview:my-deployment".',
918
+ );
713
919
  }
714
920
 
715
921
  // NOTE: CONVEX CLI DEP
716
922
  function deploymentNameFromAdminKey(adminKey: string) {
717
923
  const parts = adminKey.split("|");
718
- if (parts.length === 1) {
719
- return null;
720
- }
721
- if (isPreviewDeployKey(adminKey)) {
722
- // Preview deploy keys do not contain a deployment name.
723
- return null;
724
- }
725
- return stripDeploymentTypePrefix(parts[0]);
924
+ const hasDeployment = parts.length > 1;
925
+ return hasDeployment && !isPreviewDeployKey(adminKey)
926
+ ? stripDeploymentTypePrefix(parts[0])
927
+ : null;
726
928
  }
727
929
 
728
- // NOTE: CONVEX CLI DEP - but modified to not default to "prod"
729
- //
730
- // For current keys returns prod|dev|preview,
731
- // for legacy keys returns "prod".
930
+ // NOTE: CONVEX CLI DEP
732
931
  // Examples:
733
932
  // "prod:deploymentName|key" -> "prod"
734
933
  // "preview:deploymentName|key" -> "preview"
735
934
  // "dev:deploymentName|key" -> "dev"
736
- // "key" -> "prod"
737
935
  export function deploymentTypeFromAdminKey(adminKey: string) {
738
- const parts = adminKey.split(":");
739
- if (parts.length === 1) {
740
- return null;
936
+ const type = adminKey.split(":")[0];
937
+ if (type === "prod" || type === "dev" || type === "preview") {
938
+ return type;
741
939
  }
742
- return parts.at(0)!;
940
+ logErrorAndExit(
941
+ "Invalid admin key.",
942
+ 'Expected a typed key like "dev:deployment|...", "prod:deployment|...", or "preview:...".',
943
+ );
743
944
  }
744
945
 
745
946
  // NOTE: CONVEX CLI DEP
@@ -757,11 +958,16 @@ export function isPreviewDeployKey(adminKey: string) {
757
958
  return prefixParts[0] === "preview" && prefixParts.length === 3;
758
959
  }
759
960
 
961
+ // ---------------------------------------------------------------------------
962
+ // Prompts (using @clack/prompts, with TTY detection on stdin)
963
+ // ---------------------------------------------------------------------------
964
+
760
965
  async function promptForConfirmationOrExit(
761
966
  message: string,
762
967
  options: { default?: boolean } = {},
763
968
  ) {
764
969
  if (!(await promptForConfirmation(message, options))) {
970
+ p.cancel("Setup cancelled.");
765
971
  process.exit(1);
766
972
  }
767
973
  }
@@ -769,17 +975,17 @@ async function promptForConfirmationOrExit(
769
975
  async function promptForConfirmation(
770
976
  message: string,
771
977
  options: { default?: boolean } = {},
772
- ) {
773
- if (process.stdout.isTTY) {
774
- const { confirmed } = await inquirer.prompt<{ confirmed: boolean }>([
775
- {
776
- type: "confirm",
777
- name: "confirmed",
778
- message,
779
- default: options.default ?? true,
780
- },
781
- ]);
782
- return confirmed;
978
+ ): Promise<boolean> {
979
+ if (process.stdin.isTTY) {
980
+ const result = await p.confirm({
981
+ message,
982
+ initialValue: options.default ?? true,
983
+ });
984
+ if (p.isCancel(result)) {
985
+ p.cancel("Setup cancelled.");
986
+ process.exit(1);
987
+ }
988
+ return result;
783
989
  } else {
784
990
  return options.default ?? true;
785
991
  }
@@ -787,19 +993,30 @@ async function promptForConfirmation(
787
993
 
788
994
  async function promptForInput(
789
995
  message: string,
790
- options: { default?: string; validate?: (input: string) => true | string },
791
- ) {
792
- if (process.stdout.isTTY) {
793
- const { input } = await inquirer.prompt<{ input: string }>([
794
- {
795
- type: "input",
796
- name: "input",
797
- message,
798
- default: options.default,
799
- validate: options.validate,
800
- },
801
- ]);
802
- return input;
996
+ options: {
997
+ default?: string;
998
+ validate?: (input: string) => true | string;
999
+ },
1000
+ ): Promise<string> {
1001
+ if (process.stdin.isTTY) {
1002
+ const result = await p.text({
1003
+ message,
1004
+ defaultValue: options.default,
1005
+ placeholder: options.default,
1006
+ validate: options.validate
1007
+ ? (val: string | undefined) => {
1008
+ if (val === undefined) return "Input is required";
1009
+ const check = options.validate!(val);
1010
+ if (check === true) return undefined;
1011
+ return check;
1012
+ }
1013
+ : undefined,
1014
+ });
1015
+ if (p.isCancel(result)) {
1016
+ p.cancel("Setup cancelled.");
1017
+ process.exit(1);
1018
+ }
1019
+ return result;
803
1020
  } else {
804
1021
  if (options.default !== undefined) {
805
1022
  return options.default;
@@ -811,56 +1028,47 @@ async function promptForInput(
811
1028
  }
812
1029
  }
813
1030
 
1031
+ // ---------------------------------------------------------------------------
1032
+ // Final success message
1033
+ // ---------------------------------------------------------------------------
1034
+
814
1035
  function printFinalSuccessMessage(config: ProjectConfig) {
815
1036
  const isProd = config.deployment.type === "prod";
816
1037
  const deploymentName = config.deployment.name ?? "your deployment";
817
1038
 
818
1039
  if (isProd) {
819
- logSuccess(`Production setup complete for ${deploymentName}.`);
820
- print("");
821
- print(` Full docs: ${chalk.cyan("https://deepwiki.com/robelest/convex-auth")}`);
1040
+ p.log.success(`Production setup complete for ${deploymentName}.`);
1041
+ p.log.message(" Full docs: https://deepwiki.com/robelest/convex-auth");
822
1042
  } else {
823
- logSuccess(`Setup complete for ${deploymentName}.`);
824
- print("");
825
- print(` ${chalk.bold("To set up production")}, run this command with your production URL:`);
826
- print(` ${chalk.cyan("npx @robelest/convex-auth --prod --site-url \"https://myapp.com\"")}`);
827
- print("");
828
- print(` ${chalk.bold("Don't forget")} to set provider secrets on production too:`);
829
- print(` ${chalk.grey("npx convex env set --prod AUTH_GITHUB_ID \"...\"")}`);
830
- print(` ${chalk.grey("npx convex env set --prod AUTH_GITHUB_SECRET \"...\"")}`);
831
- print("");
832
- print(` Full docs: ${chalk.cyan("https://deepwiki.com/robelest/convex-auth")}`);
1043
+ p.log.success(`Setup complete for ${deploymentName}.`);
1044
+ p.log.message("");
1045
+ p.log.message(
1046
+ " To set up production, run this command with your production URL:",
1047
+ );
1048
+ p.log.message(
1049
+ ' npx @robelest/convex-auth --prod --site-url "https://myapp.com"',
1050
+ );
1051
+ p.log.message("");
1052
+ p.log.message(" Don't forget to set provider secrets on production too:");
1053
+ p.log.message(' npx convex env set --prod AUTH_GITHUB_ID "..."');
1054
+ p.log.message(' npx convex env set --prod AUTH_GITHUB_SECRET "..."');
1055
+ p.log.message("");
1056
+ p.log.message(" Full docs: https://deepwiki.com/robelest/convex-auth");
833
1057
  }
834
1058
  }
835
1059
 
1060
+ // ---------------------------------------------------------------------------
1061
+ // Error helpers
1062
+ // ---------------------------------------------------------------------------
1063
+
836
1064
  function logErrorAndExit(message: string, error?: string): never {
837
- logError(message, error);
1065
+ p.log.error(`${message}${error !== undefined ? `\n Error: ${error}` : ""}`);
838
1066
  process.exit(1);
839
1067
  }
840
1068
 
841
- function logError(message: string, error?: string) {
842
- print(
843
- `${chalk.red(`✖`)} ${indent(message)}${
844
- error !== undefined ? `\n ${chalk.grey(`Error: ${indent(error)}`)}` : ""
845
- }`,
846
- );
847
- }
848
-
849
- function logWarning(message: string) {
850
- print(`${chalk.yellow.bold(`!`)} ${indent(message)}`);
851
- }
852
-
853
- function logInfo(message: string) {
854
- print(`${chalk.blue.bold(`i`)} ${indent(message)}`);
855
- }
856
-
857
- function logSuccess(message: string) {
858
- print(`${chalk.green(`✔`)} ${indent(message)}`);
859
- }
860
-
861
- function print(message?: string) {
862
- process.stderr.write((message ?? "") + "\n");
863
- }
1069
+ // ---------------------------------------------------------------------------
1070
+ // String helpers
1071
+ // ---------------------------------------------------------------------------
864
1072
 
865
1073
  function indent(string: string) {
866
1074
  return string.replace(/^/gm, " ").slice(2);