convex 1.46.0 → 1.48.0-alpha.0

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 (479) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/dist/browser.bundle.js +7 -1
  3. package/dist/browser.bundle.js.map +2 -2
  4. package/dist/cjs/bundler/context.js +7 -5
  5. package/dist/cjs/bundler/context.js.map +2 -2
  6. package/dist/cjs/bundler/fs.js +47 -6
  7. package/dist/cjs/bundler/fs.js.map +2 -2
  8. package/dist/cjs/bundler/index.js +5 -4
  9. package/dist/cjs/bundler/index.js.map +2 -2
  10. package/dist/cjs/cli/account.js +237 -0
  11. package/dist/cjs/cli/account.js.map +7 -0
  12. package/dist/cjs/cli/codegen.js +0 -4
  13. package/dist/cjs/cli/codegen.js.map +2 -2
  14. package/dist/cjs/cli/configure.js +28 -6
  15. package/dist/cjs/cli/configure.js.map +2 -2
  16. package/dist/cjs/cli/deploy.js +27 -2
  17. package/dist/cjs/cli/deploy.js.map +2 -2
  18. package/dist/cjs/cli/deploymentSelect.js +2 -2
  19. package/dist/cjs/cli/deploymentSelect.js.map +2 -2
  20. package/dist/cjs/cli/dev.js +6 -0
  21. package/dist/cjs/cli/dev.js.map +2 -2
  22. package/dist/cjs/cli/env.js +10 -5
  23. package/dist/cjs/cli/env.js.map +2 -2
  24. package/dist/cjs/cli/envDefault.js +7 -2
  25. package/dist/cjs/cli/envDefault.js.map +2 -2
  26. package/dist/cjs/cli/generatedApi.js.map +1 -1
  27. package/dist/cjs/cli/lib/api.js +2 -0
  28. package/dist/cjs/cli/lib/api.js.map +2 -2
  29. package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js +113 -0
  30. package/dist/cjs/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
  31. package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js +36 -47
  32. package/dist/cjs/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
  33. package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js +58 -39
  34. package/dist/cjs/cli/lib/checkForSlowSchemaValidation.js.map +2 -2
  35. package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js +90 -0
  36. package/dist/cjs/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
  37. package/dist/cjs/cli/lib/codegen.js.map +2 -2
  38. package/dist/cjs/cli/lib/command.js +2 -1
  39. package/dist/cjs/cli/lib/command.js.map +2 -2
  40. package/dist/cjs/cli/lib/components/definition/bundle.js +37 -11
  41. package/dist/cjs/cli/lib/components/definition/bundle.js.map +2 -2
  42. package/dist/cjs/cli/lib/components.js +48 -5
  43. package/dist/cjs/cli/lib/components.js.map +2 -2
  44. package/dist/cjs/cli/lib/config.js +56 -17
  45. package/dist/cjs/cli/lib/config.js.map +2 -2
  46. package/dist/cjs/cli/lib/deploy2.js +3 -1
  47. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  48. package/dist/cjs/cli/lib/deployApi/evaluateSchema.js +30 -2
  49. package/dist/cjs/cli/lib/deployApi/evaluateSchema.js.map +2 -2
  50. package/dist/cjs/cli/lib/deployKeyWarning.js +43 -0
  51. package/dist/cjs/cli/lib/deployKeyWarning.js.map +7 -0
  52. package/dist/cjs/cli/lib/deployment.js +2 -0
  53. package/dist/cjs/cli/lib/deployment.js.map +2 -2
  54. package/dist/cjs/cli/lib/deploymentSelection.js +27 -18
  55. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  56. package/dist/cjs/cli/lib/dev.js +5 -0
  57. package/dist/cjs/cli/lib/dev.js.map +2 -2
  58. package/dist/cjs/cli/lib/envvars.js +32 -0
  59. package/dist/cjs/cli/lib/envvars.js.map +2 -2
  60. package/dist/cjs/cli/lib/formatValidationProgress.js +47 -0
  61. package/dist/cjs/cli/lib/formatValidationProgress.js.map +7 -0
  62. package/dist/cjs/cli/lib/fsUtils.js +1 -1
  63. package/dist/cjs/cli/lib/fsUtils.js.map +2 -2
  64. package/dist/cjs/cli/lib/generateDocs.js +1 -1
  65. package/dist/cjs/cli/lib/generateDocs.js.map +1 -1
  66. package/dist/cjs/cli/lib/indexes.js.map +1 -1
  67. package/dist/cjs/cli/lib/login.js +28 -4
  68. package/dist/cjs/cli/lib/login.js.map +2 -2
  69. package/dist/cjs/cli/lib/mcp/requestContext.js +5 -1
  70. package/dist/cjs/cli/lib/mcp/requestContext.js.map +2 -2
  71. package/dist/cjs/cli/lib/mcp/tools/env.js +10 -3
  72. package/dist/cjs/cli/lib/mcp/tools/env.js.map +2 -2
  73. package/dist/cjs/cli/lib/profileManagement.js +196 -0
  74. package/dist/cjs/cli/lib/profileManagement.js.map +7 -0
  75. package/dist/cjs/cli/lib/profiles.js +333 -0
  76. package/dist/cjs/cli/lib/profiles.js.map +7 -0
  77. package/dist/cjs/cli/lib/run.js +4 -0
  78. package/dist/cjs/cli/lib/run.js.map +2 -2
  79. package/dist/cjs/cli/lib/schemaEvaluation.js +62 -0
  80. package/dist/cjs/cli/lib/schemaEvaluation.js.map +7 -0
  81. package/dist/cjs/cli/lib/usageLimits.js +4 -2
  82. package/dist/cjs/cli/lib/usageLimits.js.map +2 -2
  83. package/dist/cjs/cli/lib/utils/mutex.js +9 -24
  84. package/dist/cjs/cli/lib/utils/mutex.js.map +2 -2
  85. package/dist/cjs/cli/lib/utils/utils.js +66 -27
  86. package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
  87. package/dist/cjs/cli/login.js +213 -114
  88. package/dist/cjs/cli/login.js.map +3 -3
  89. package/dist/cjs/cli/logout.js +113 -12
  90. package/dist/cjs/cli/logout.js.map +3 -3
  91. package/dist/cjs/cli/mcp.js +43 -10
  92. package/dist/cjs/cli/mcp.js.map +3 -3
  93. package/dist/cjs/cli/program.js +2 -1
  94. package/dist/cjs/cli/program.js.map +2 -2
  95. package/dist/cjs/cli/projectCreate.js +1 -1
  96. package/dist/cjs/cli/projectCreate.js.map +1 -1
  97. package/dist/cjs/index.js +1 -1
  98. package/dist/cjs/index.js.map +1 -1
  99. package/dist/cjs/server/impl/actions_impl.js +8 -3
  100. package/dist/cjs/server/impl/actions_impl.js.map +2 -2
  101. package/dist/cjs/server/impl/storage_impl.js +29 -0
  102. package/dist/cjs/server/impl/storage_impl.js.map +2 -2
  103. package/dist/cjs/server/index.js +1 -0
  104. package/dist/cjs/server/index.js.map +2 -2
  105. package/dist/cjs/server/meta.js.map +1 -1
  106. package/dist/cjs/server/registration.js.map +1 -1
  107. package/dist/cjs/server/schema.js +34 -12
  108. package/dist/cjs/server/schema.js.map +2 -2
  109. package/dist/cjs/server/storage.js.map +1 -1
  110. package/dist/cjs/values/validators.js +1 -1
  111. package/dist/cjs/values/validators.js.map +2 -2
  112. package/dist/cjs/values/value.js +6 -0
  113. package/dist/cjs/values/value.js.map +2 -2
  114. package/dist/cjs-types/bundler/context.d.ts +5 -0
  115. package/dist/cjs-types/bundler/context.d.ts.map +1 -1
  116. package/dist/cjs-types/bundler/fs.d.ts +7 -2
  117. package/dist/cjs-types/bundler/fs.d.ts.map +1 -1
  118. package/dist/cjs-types/bundler/index.d.ts +9 -2
  119. package/dist/cjs-types/bundler/index.d.ts.map +1 -1
  120. package/dist/cjs-types/cli/account.d.ts +6 -0
  121. package/dist/cjs-types/cli/account.d.ts.map +1 -0
  122. package/dist/cjs-types/cli/codegen.d.ts.map +1 -1
  123. package/dist/cjs-types/cli/configure.d.ts +6 -0
  124. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  125. package/dist/cjs-types/cli/deploy.d.ts +2 -0
  126. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  127. package/dist/cjs-types/cli/deploymentCreate.d.ts +6 -6
  128. package/dist/cjs-types/cli/deploymentSelect.d.ts.map +1 -1
  129. package/dist/cjs-types/cli/dev.d.ts +1 -0
  130. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  131. package/dist/cjs-types/cli/env.d.ts.map +1 -1
  132. package/dist/cjs-types/cli/envDefault.d.ts.map +1 -1
  133. package/dist/cjs-types/cli/generatedApi.d.ts +1 -1
  134. package/dist/cjs-types/cli/generatedApi.d.ts.map +1 -1
  135. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  136. package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
  137. package/dist/cjs-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
  138. package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts +5 -7
  139. package/dist/cjs-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
  140. package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts +4 -10
  141. package/dist/cjs-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -1
  142. package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
  143. package/dist/cjs-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
  144. package/dist/cjs-types/cli/lib/codegen.d.ts +0 -3
  145. package/dist/cjs-types/cli/lib/codegen.d.ts.map +1 -1
  146. package/dist/cjs-types/cli/lib/command.d.ts +2 -0
  147. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  148. package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts +13 -0
  149. package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
  150. package/dist/cjs-types/cli/lib/components.d.ts +4 -0
  151. package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
  152. package/dist/cjs-types/cli/lib/config.d.ts +2 -1
  153. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  154. package/dist/cjs-types/cli/lib/deploy2.d.ts +2 -0
  155. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  156. package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts +460 -16
  157. package/dist/cjs-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -1
  158. package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts +3 -0
  159. package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
  160. package/dist/cjs-types/cli/lib/deployment.d.ts +2 -0
  161. package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
  162. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +2 -1
  163. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  164. package/dist/cjs-types/cli/lib/dev.d.ts +1 -0
  165. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  166. package/dist/cjs-types/cli/lib/envvars.d.ts +6 -0
  167. package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
  168. package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts +8 -0
  169. package/dist/cjs-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
  170. package/dist/cjs-types/cli/lib/fsUtils.d.ts +1 -0
  171. package/dist/cjs-types/cli/lib/fsUtils.d.ts.map +1 -1
  172. package/dist/cjs-types/cli/lib/login.d.ts +3 -1
  173. package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
  174. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
  175. package/dist/cjs-types/cli/lib/mcp/tools/env.d.ts +8 -5
  176. package/dist/cjs-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
  177. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  178. package/dist/cjs-types/cli/lib/profileManagement.d.ts +10 -0
  179. package/dist/cjs-types/cli/lib/profileManagement.d.ts.map +1 -0
  180. package/dist/cjs-types/cli/lib/profiles.d.ts +59 -0
  181. package/dist/cjs-types/cli/lib/profiles.d.ts.map +1 -0
  182. package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
  183. package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts +33 -0
  184. package/dist/cjs-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
  185. package/dist/cjs-types/cli/lib/usageLimits.d.ts +1 -1
  186. package/dist/cjs-types/cli/lib/usageLimits.d.ts.map +1 -1
  187. package/dist/cjs-types/cli/lib/utils/mutex.d.ts +1 -3
  188. package/dist/cjs-types/cli/lib/utils/mutex.d.ts.map +1 -1
  189. package/dist/cjs-types/cli/lib/utils/utils.d.ts +15 -2
  190. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  191. package/dist/cjs-types/cli/login.d.ts +21 -0
  192. package/dist/cjs-types/cli/login.d.ts.map +1 -1
  193. package/dist/cjs-types/cli/logout.d.ts +8 -1
  194. package/dist/cjs-types/cli/logout.d.ts.map +1 -1
  195. package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
  196. package/dist/cjs-types/cli/program.d.ts.map +1 -1
  197. package/dist/cjs-types/index.d.ts +1 -1
  198. package/dist/cjs-types/index.d.ts.map +1 -1
  199. package/dist/cjs-types/server/impl/actions_impl.d.ts +18 -3
  200. package/dist/cjs-types/server/impl/actions_impl.d.ts.map +1 -1
  201. package/dist/cjs-types/server/impl/storage_impl.d.ts.map +1 -1
  202. package/dist/cjs-types/server/index.d.ts +1 -1
  203. package/dist/cjs-types/server/index.d.ts.map +1 -1
  204. package/dist/cjs-types/server/meta.d.ts +63 -0
  205. package/dist/cjs-types/server/meta.d.ts.map +1 -1
  206. package/dist/cjs-types/server/registration.d.ts +10 -0
  207. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  208. package/dist/cjs-types/server/schema.d.ts +33 -0
  209. package/dist/cjs-types/server/schema.d.ts.map +1 -1
  210. package/dist/cjs-types/server/storage.d.ts.map +1 -1
  211. package/dist/cjs-types/values/value.d.ts.map +1 -1
  212. package/dist/cli.bundle.cjs +4889 -2980
  213. package/dist/cli.bundle.cjs.map +4 -4
  214. package/dist/esm/bundler/context.js +7 -5
  215. package/dist/esm/bundler/context.js.map +2 -2
  216. package/dist/esm/bundler/fs.js +47 -6
  217. package/dist/esm/bundler/fs.js.map +2 -2
  218. package/dist/esm/bundler/index.js +5 -4
  219. package/dist/esm/bundler/index.js.map +2 -2
  220. package/dist/esm/cli/account.js +221 -0
  221. package/dist/esm/cli/account.js.map +7 -0
  222. package/dist/esm/cli/codegen.js +0 -4
  223. package/dist/esm/cli/codegen.js.map +2 -2
  224. package/dist/esm/cli/configure.js +27 -6
  225. package/dist/esm/cli/configure.js.map +2 -2
  226. package/dist/esm/cli/deploy.js +27 -2
  227. package/dist/esm/cli/deploy.js.map +2 -2
  228. package/dist/esm/cli/deploymentSelect.js +6 -3
  229. package/dist/esm/cli/deploymentSelect.js.map +2 -2
  230. package/dist/esm/cli/dev.js +6 -0
  231. package/dist/esm/cli/dev.js.map +2 -2
  232. package/dist/esm/cli/env.js +11 -6
  233. package/dist/esm/cli/env.js.map +2 -2
  234. package/dist/esm/cli/envDefault.js +7 -2
  235. package/dist/esm/cli/envDefault.js.map +2 -2
  236. package/dist/esm/cli/lib/api.js +2 -0
  237. package/dist/esm/cli/lib/api.js.map +2 -2
  238. package/dist/esm/cli/lib/checkForLargeIndexBackfill.js +95 -0
  239. package/dist/esm/cli/lib/checkForLargeIndexBackfill.js.map +7 -0
  240. package/dist/esm/cli/lib/checkForLargeIndexDeletion.js +37 -48
  241. package/dist/esm/cli/lib/checkForLargeIndexDeletion.js.map +2 -2
  242. package/dist/esm/cli/lib/checkForSlowSchemaValidation.js +63 -41
  243. package/dist/esm/cli/lib/checkForSlowSchemaValidation.js.map +2 -2
  244. package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js +68 -0
  245. package/dist/esm/cli/lib/checkForStagedValidatorDeletion.js.map +7 -0
  246. package/dist/esm/cli/lib/codegen.js.map +2 -2
  247. package/dist/esm/cli/lib/command.js +2 -1
  248. package/dist/esm/cli/lib/command.js.map +2 -2
  249. package/dist/esm/cli/lib/components/definition/bundle.js +37 -11
  250. package/dist/esm/cli/lib/components/definition/bundle.js.map +2 -2
  251. package/dist/esm/cli/lib/components.js +55 -5
  252. package/dist/esm/cli/lib/components.js.map +2 -2
  253. package/dist/esm/cli/lib/config.js +55 -17
  254. package/dist/esm/cli/lib/config.js.map +2 -2
  255. package/dist/esm/cli/lib/deploy2.js +3 -1
  256. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  257. package/dist/esm/cli/lib/deployApi/evaluateSchema.js +28 -2
  258. package/dist/esm/cli/lib/deployApi/evaluateSchema.js.map +2 -2
  259. package/dist/esm/cli/lib/deployKeyWarning.js +27 -0
  260. package/dist/esm/cli/lib/deployKeyWarning.js.map +7 -0
  261. package/dist/esm/cli/lib/deployment.js +2 -2
  262. package/dist/esm/cli/lib/deployment.js.map +2 -2
  263. package/dist/esm/cli/lib/deploymentSelection.js +35 -20
  264. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  265. package/dist/esm/cli/lib/dev.js +5 -0
  266. package/dist/esm/cli/lib/dev.js.map +2 -2
  267. package/dist/esm/cli/lib/envvars.js +35 -1
  268. package/dist/esm/cli/lib/envvars.js.map +2 -2
  269. package/dist/esm/cli/lib/formatValidationProgress.js +24 -0
  270. package/dist/esm/cli/lib/formatValidationProgress.js.map +7 -0
  271. package/dist/esm/cli/lib/fsUtils.js +1 -1
  272. package/dist/esm/cli/lib/fsUtils.js.map +2 -2
  273. package/dist/esm/cli/lib/generateDocs.js +1 -1
  274. package/dist/esm/cli/lib/generateDocs.js.map +1 -1
  275. package/dist/esm/cli/lib/indexes.js.map +1 -1
  276. package/dist/esm/cli/lib/login.js +36 -4
  277. package/dist/esm/cli/lib/login.js.map +2 -2
  278. package/dist/esm/cli/lib/mcp/requestContext.js +5 -1
  279. package/dist/esm/cli/lib/mcp/requestContext.js.map +2 -2
  280. package/dist/esm/cli/lib/mcp/tools/env.js +10 -3
  281. package/dist/esm/cli/lib/mcp/tools/env.js.map +2 -2
  282. package/dist/esm/cli/lib/profileManagement.js +179 -0
  283. package/dist/esm/cli/lib/profileManagement.js.map +7 -0
  284. package/dist/esm/cli/lib/profiles.js +288 -0
  285. package/dist/esm/cli/lib/profiles.js.map +7 -0
  286. package/dist/esm/cli/lib/run.js +4 -0
  287. package/dist/esm/cli/lib/run.js.map +2 -2
  288. package/dist/esm/cli/lib/schemaEvaluation.js +39 -0
  289. package/dist/esm/cli/lib/schemaEvaluation.js.map +7 -0
  290. package/dist/esm/cli/lib/usageLimits.js +4 -2
  291. package/dist/esm/cli/lib/usageLimits.js.map +2 -2
  292. package/dist/esm/cli/lib/utils/mutex.js +9 -24
  293. package/dist/esm/cli/lib/utils/mutex.js.map +2 -2
  294. package/dist/esm/cli/lib/utils/utils.js +63 -27
  295. package/dist/esm/cli/lib/utils/utils.js.map +2 -2
  296. package/dist/esm/cli/login.js +225 -112
  297. package/dist/esm/cli/login.js.map +3 -3
  298. package/dist/esm/cli/logout.js +110 -13
  299. package/dist/esm/cli/logout.js.map +2 -2
  300. package/dist/esm/cli/mcp.js +34 -10
  301. package/dist/esm/cli/mcp.js.map +2 -2
  302. package/dist/esm/cli/program.js +2 -1
  303. package/dist/esm/cli/program.js.map +2 -2
  304. package/dist/esm/cli/projectCreate.js +1 -1
  305. package/dist/esm/cli/projectCreate.js.map +1 -1
  306. package/dist/esm/index.js +1 -1
  307. package/dist/esm/index.js.map +1 -1
  308. package/dist/esm/server/impl/actions_impl.js +7 -3
  309. package/dist/esm/server/impl/actions_impl.js.map +2 -2
  310. package/dist/esm/server/impl/storage_impl.js +29 -0
  311. package/dist/esm/server/impl/storage_impl.js.map +2 -2
  312. package/dist/esm/server/index.js +4 -1
  313. package/dist/esm/server/index.js.map +2 -2
  314. package/dist/esm/server/schema.js +34 -12
  315. package/dist/esm/server/schema.js.map +2 -2
  316. package/dist/esm/values/validators.js +1 -1
  317. package/dist/esm/values/validators.js.map +2 -2
  318. package/dist/esm/values/value.js +6 -0
  319. package/dist/esm/values/value.js.map +2 -2
  320. package/dist/esm-types/bundler/context.d.ts +5 -0
  321. package/dist/esm-types/bundler/context.d.ts.map +1 -1
  322. package/dist/esm-types/bundler/fs.d.ts +7 -2
  323. package/dist/esm-types/bundler/fs.d.ts.map +1 -1
  324. package/dist/esm-types/bundler/index.d.ts +9 -2
  325. package/dist/esm-types/bundler/index.d.ts.map +1 -1
  326. package/dist/esm-types/cli/account.d.ts +6 -0
  327. package/dist/esm-types/cli/account.d.ts.map +1 -0
  328. package/dist/esm-types/cli/codegen.d.ts.map +1 -1
  329. package/dist/esm-types/cli/configure.d.ts +6 -0
  330. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  331. package/dist/esm-types/cli/deploy.d.ts +2 -0
  332. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  333. package/dist/esm-types/cli/deploymentCreate.d.ts +6 -6
  334. package/dist/esm-types/cli/deploymentSelect.d.ts.map +1 -1
  335. package/dist/esm-types/cli/dev.d.ts +1 -0
  336. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  337. package/dist/esm-types/cli/env.d.ts.map +1 -1
  338. package/dist/esm-types/cli/envDefault.d.ts.map +1 -1
  339. package/dist/esm-types/cli/generatedApi.d.ts +1 -1
  340. package/dist/esm-types/cli/generatedApi.d.ts.map +1 -1
  341. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  342. package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts +30 -0
  343. package/dist/esm-types/cli/lib/checkForLargeIndexBackfill.d.ts.map +1 -0
  344. package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts +5 -7
  345. package/dist/esm-types/cli/lib/checkForLargeIndexDeletion.d.ts.map +1 -1
  346. package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts +4 -10
  347. package/dist/esm-types/cli/lib/checkForSlowSchemaValidation.d.ts.map +1 -1
  348. package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts +17 -0
  349. package/dist/esm-types/cli/lib/checkForStagedValidatorDeletion.d.ts.map +1 -0
  350. package/dist/esm-types/cli/lib/codegen.d.ts +0 -3
  351. package/dist/esm-types/cli/lib/codegen.d.ts.map +1 -1
  352. package/dist/esm-types/cli/lib/command.d.ts +2 -0
  353. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  354. package/dist/esm-types/cli/lib/components/definition/bundle.d.ts +13 -0
  355. package/dist/esm-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
  356. package/dist/esm-types/cli/lib/components.d.ts +4 -0
  357. package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
  358. package/dist/esm-types/cli/lib/config.d.ts +2 -1
  359. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  360. package/dist/esm-types/cli/lib/deploy2.d.ts +2 -0
  361. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  362. package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts +460 -16
  363. package/dist/esm-types/cli/lib/deployApi/evaluateSchema.d.ts.map +1 -1
  364. package/dist/esm-types/cli/lib/deployKeyWarning.d.ts +3 -0
  365. package/dist/esm-types/cli/lib/deployKeyWarning.d.ts.map +1 -0
  366. package/dist/esm-types/cli/lib/deployment.d.ts +2 -0
  367. package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
  368. package/dist/esm-types/cli/lib/deploymentSelection.d.ts +2 -1
  369. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  370. package/dist/esm-types/cli/lib/dev.d.ts +1 -0
  371. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  372. package/dist/esm-types/cli/lib/envvars.d.ts +6 -0
  373. package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
  374. package/dist/esm-types/cli/lib/formatValidationProgress.d.ts +8 -0
  375. package/dist/esm-types/cli/lib/formatValidationProgress.d.ts.map +1 -0
  376. package/dist/esm-types/cli/lib/fsUtils.d.ts +1 -0
  377. package/dist/esm-types/cli/lib/fsUtils.d.ts.map +1 -1
  378. package/dist/esm-types/cli/lib/login.d.ts +3 -1
  379. package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
  380. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
  381. package/dist/esm-types/cli/lib/mcp/tools/env.d.ts +8 -5
  382. package/dist/esm-types/cli/lib/mcp/tools/env.d.ts.map +1 -1
  383. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  384. package/dist/esm-types/cli/lib/profileManagement.d.ts +10 -0
  385. package/dist/esm-types/cli/lib/profileManagement.d.ts.map +1 -0
  386. package/dist/esm-types/cli/lib/profiles.d.ts +59 -0
  387. package/dist/esm-types/cli/lib/profiles.d.ts.map +1 -0
  388. package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
  389. package/dist/esm-types/cli/lib/schemaEvaluation.d.ts +33 -0
  390. package/dist/esm-types/cli/lib/schemaEvaluation.d.ts.map +1 -0
  391. package/dist/esm-types/cli/lib/usageLimits.d.ts +1 -1
  392. package/dist/esm-types/cli/lib/usageLimits.d.ts.map +1 -1
  393. package/dist/esm-types/cli/lib/utils/mutex.d.ts +1 -3
  394. package/dist/esm-types/cli/lib/utils/mutex.d.ts.map +1 -1
  395. package/dist/esm-types/cli/lib/utils/utils.d.ts +15 -2
  396. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  397. package/dist/esm-types/cli/login.d.ts +21 -0
  398. package/dist/esm-types/cli/login.d.ts.map +1 -1
  399. package/dist/esm-types/cli/logout.d.ts +8 -1
  400. package/dist/esm-types/cli/logout.d.ts.map +1 -1
  401. package/dist/esm-types/cli/mcp.d.ts.map +1 -1
  402. package/dist/esm-types/cli/program.d.ts.map +1 -1
  403. package/dist/esm-types/index.d.ts +1 -1
  404. package/dist/esm-types/index.d.ts.map +1 -1
  405. package/dist/esm-types/server/impl/actions_impl.d.ts +18 -3
  406. package/dist/esm-types/server/impl/actions_impl.d.ts.map +1 -1
  407. package/dist/esm-types/server/impl/storage_impl.d.ts.map +1 -1
  408. package/dist/esm-types/server/index.d.ts +1 -1
  409. package/dist/esm-types/server/index.d.ts.map +1 -1
  410. package/dist/esm-types/server/meta.d.ts +63 -0
  411. package/dist/esm-types/server/meta.d.ts.map +1 -1
  412. package/dist/esm-types/server/registration.d.ts +10 -0
  413. package/dist/esm-types/server/registration.d.ts.map +1 -1
  414. package/dist/esm-types/server/schema.d.ts +33 -0
  415. package/dist/esm-types/server/schema.d.ts.map +1 -1
  416. package/dist/esm-types/server/storage.d.ts.map +1 -1
  417. package/dist/esm-types/values/value.d.ts.map +1 -1
  418. package/dist/react.bundle.js +7 -1
  419. package/dist/react.bundle.js.map +2 -2
  420. package/package.json +5 -5
  421. package/schemas/convex.schema.json +5 -5
  422. package/src/bundler/context.ts +9 -5
  423. package/src/bundler/fs.ts +54 -5
  424. package/src/bundler/index.ts +9 -4
  425. package/src/cli/account.ts +320 -0
  426. package/src/cli/codegen.ts +0 -2
  427. package/src/cli/configure.ts +45 -9
  428. package/src/cli/deploy.ts +36 -5
  429. package/src/cli/deploymentSelect.ts +7 -4
  430. package/src/cli/dev.ts +9 -0
  431. package/src/cli/env.ts +12 -6
  432. package/src/cli/envDefault.ts +8 -2
  433. package/src/cli/generatedApi.ts +1 -1
  434. package/src/cli/lib/api.ts +5 -1
  435. package/src/cli/lib/checkForLargeIndexBackfill.ts +173 -0
  436. package/src/cli/lib/checkForLargeIndexDeletion.ts +45 -58
  437. package/src/cli/lib/checkForSlowSchemaValidation.ts +76 -65
  438. package/src/cli/lib/checkForStagedValidatorDeletion.ts +104 -0
  439. package/src/cli/lib/codegen.ts +0 -3
  440. package/src/cli/lib/command.ts +3 -0
  441. package/src/cli/lib/components/definition/bundle.ts +68 -14
  442. package/src/cli/lib/components.ts +71 -4
  443. package/src/cli/lib/config.ts +85 -18
  444. package/src/cli/lib/deploy2.ts +10 -1
  445. package/src/cli/lib/deployApi/evaluateSchema.ts +35 -0
  446. package/src/cli/lib/deployKeyWarning.ts +43 -0
  447. package/src/cli/lib/deployment.ts +2 -2
  448. package/src/cli/lib/deploymentSelection.ts +37 -18
  449. package/src/cli/lib/dev.ts +14 -0
  450. package/src/cli/lib/envvars.ts +43 -1
  451. package/src/cli/lib/formatValidationProgress.ts +35 -0
  452. package/src/cli/lib/fsUtils.ts +5 -2
  453. package/src/cli/lib/generateDocs.ts +1 -1
  454. package/src/cli/lib/indexes.ts +1 -1
  455. package/src/cli/lib/login.ts +47 -3
  456. package/src/cli/lib/mcp/requestContext.ts +7 -1
  457. package/src/cli/lib/mcp/tools/env.ts +17 -3
  458. package/src/cli/lib/profileManagement.ts +262 -0
  459. package/src/cli/lib/profiles.ts +398 -0
  460. package/src/cli/lib/run.ts +2 -0
  461. package/src/cli/lib/schemaEvaluation.ts +88 -0
  462. package/src/cli/lib/usageLimits.ts +2 -0
  463. package/src/cli/lib/utils/mutex.ts +9 -27
  464. package/src/cli/lib/utils/utils.ts +83 -36
  465. package/src/cli/login.ts +293 -168
  466. package/src/cli/logout.ts +142 -17
  467. package/src/cli/mcp.ts +48 -11
  468. package/src/cli/program.ts +2 -0
  469. package/src/cli/projectCreate.ts +1 -1
  470. package/src/index.ts +1 -1
  471. package/src/server/impl/actions_impl.ts +26 -6
  472. package/src/server/impl/storage_impl.ts +30 -0
  473. package/src/server/index.ts +5 -1
  474. package/src/server/meta.ts +56 -2
  475. package/src/server/registration.ts +10 -0
  476. package/src/server/schema.ts +37 -15
  477. package/src/server/storage.ts +17 -0
  478. package/src/values/validators.ts +1 -1
  479. package/src/values/value.ts +9 -5
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,22 +15,14 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
  var login_exports = {};
30
20
  __export(login_exports, {
21
+ createLoginCommand: () => createLoginCommand,
31
22
  login: () => login
32
23
  });
33
24
  module.exports = __toCommonJS(login_exports);
34
25
  var import_extra_typings = require("@commander-js/extra-typings");
35
- var dotenv = __toESM(require("dotenv"), 1);
36
26
  var import_context = require("../bundler/context.js");
37
27
  var import_log = require("../bundler/log.js");
38
28
  var import_login = require("./lib/login.js");
@@ -46,25 +36,16 @@ var import_deploymentSelection = require("./lib/deploymentSelection.js");
46
36
  var import_deployment = require("./lib/deployment.js");
47
37
  var import_globalConfig = require("./lib/utils/globalConfig.js");
48
38
  var import_api = require("./lib/api.js");
49
- function deployKeyEnvFile(ctx, envVarName, value) {
50
- for (const file of [import_utils.ENV_VAR_FILE_PATH, ".env"]) {
51
- if (!ctx.fs.exists(file)) {
52
- continue;
53
- }
54
- if (dotenv.parse(ctx.fs.readUtf8File(file))[envVarName] === value) {
55
- return file;
56
- }
57
- }
58
- return null;
59
- }
39
+ var import_profiles = require("./lib/profiles.js");
40
+ var import_envvars = require("./lib/envvars.js");
41
+ var import_profileManagement = require("./lib/profileManagement.js");
42
+ var import_deployKeyWarning = require("./lib/deployKeyWarning.js");
60
43
  async function reportDeployKeyInWorkingDirectory(ctx, auth) {
61
44
  if (auth === null || auth.kind === "accessToken" || auth.kind === "previewDeployKey") {
62
45
  return;
63
46
  }
64
47
  const key = auth.kind === "projectKey" ? auth.projectKey : auth.deploymentKey;
65
- const envVarName = process.env[import_utils.CONVEX_DEPLOY_KEY_ENV_VAR_NAME] ? import_utils.CONVEX_DEPLOY_KEY_ENV_VAR_NAME : import_utils.CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;
66
- const envFile = deployKeyEnvFile(ctx, envVarName, key);
67
- const source = envFile ?? "shell environment";
48
+ const { envVarName, source } = (0, import_envvars.getDeployKeySource)(key);
68
49
  const secret = key.slice(key.indexOf("|") + 1);
69
50
  if (await (0, import_login.isAuthorizedHeader)(ctx, `Bearer ${secret}`)) {
70
51
  (0, import_log.logMessage)(`Working Directory: Valid ${envVarName} in ${source}`);
@@ -72,103 +53,221 @@ async function reportDeployKeyInWorkingDirectory(ctx, auth) {
72
53
  }
73
54
  (0, import_log.logWarning)(`Working Directory: Invalid ${envVarName} in ${source}`);
74
55
  }
75
- const loginStatus = new import_extra_typings.Command("status").description("Check login status and list accessible teams").allowExcessArguments(false).action(async () => {
76
- const ctx = await (0, import_context.oneoffContext)({
77
- url: void 0,
78
- adminKey: void 0,
79
- envFile: void 0
80
- });
81
- const auth = ctx.bigBrainAuth();
82
- const globalConfig = (0, import_globalConfig.readGlobalConfig)(ctx);
83
- if (globalConfig === null) {
84
- (0, import_log.logMessage)(`No Convex account token found in: ${(0, import_globalConfig.globalConfigPath)()}`);
85
- (0, import_log.logMessage)("Status: Not logged in");
86
- await reportDeployKeyInWorkingDirectory(ctx, auth);
87
- return;
88
- }
89
- (0, import_log.logMessage)(`Convex account token found in: ${(0, import_globalConfig.globalConfigPath)()}`);
90
- const accessToken = globalConfig.accessToken;
91
- if (!await (0, import_login.isAuthorizedHeader)(ctx, `Bearer ${accessToken}`)) {
92
- (0, import_log.logMessage)("Status: Not logged in");
93
- await reportDeployKeyInWorkingDirectory(ctx, auth);
94
- return;
95
- }
96
- (0, import_log.logMessage)("Status: Logged in");
97
- ctx._updateBigBrainAuth({
98
- kind: "accessToken",
99
- header: `Bearer ${accessToken}`,
100
- accessToken
101
- });
102
- const teams = await (0, import_api.getTeamsForUser)(ctx);
103
- (0, import_log.logMessage)(
104
- `Teams: ${teams.length} team${teams.length === 1 ? "" : "s"} accessible`
105
- );
106
- for (const team of teams) {
107
- (0, import_log.logMessage)(` - ${team.name} (${team.slug})`);
108
- }
109
- await reportDeployKeyInWorkingDirectory(ctx, auth);
110
- });
111
- const login = new import_extra_typings.Command("login").description("Login to Convex").allowExcessArguments(false).option(
112
- "--device-name <name>",
113
- "Provide a name for the device being authorized"
114
- ).option(
115
- "-f, --force",
116
- "Proceed with login even if a valid access token already exists for this device"
117
- ).option(
118
- "--no-open",
119
- "Don't automatically open the login link in the default browser"
120
- ).addOption(
121
- new import_extra_typings.Option(
122
- "--login-flow <mode>",
123
- `How to log in; defaults to guessing based on the environment.`
124
- ).choices(["paste", "auto", "poll"]).default("auto")
125
- ).addOption(new import_extra_typings.Option("--link-deployments").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-url <url>").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-client <id>").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-username <username>").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-password <password>").hideHelp()).addOption(new import_extra_typings.Option("--override-access-token <token>").hideHelp()).addOption(new import_extra_typings.Option("--accept-opt-ins").hideHelp()).addOption(new import_extra_typings.Option("--dump-access-token").hideHelp()).addOption(new import_extra_typings.Option("--check-login").hideHelp()).addOption(
126
- new import_extra_typings.Option(
127
- "--vercel",
128
- "Redirect to Vercel SSO integration for login"
129
- ).hideHelp()
130
- ).addOption(new import_extra_typings.Option("--vercel-override <slug>").hideHelp()).addCommand(loginStatus).addHelpCommand(false).action(async (options, cmd) => {
131
- const ctx = await (0, import_context.oneoffContext)({
132
- url: void 0,
133
- adminKey: void 0,
134
- envFile: void 0
135
- });
136
- if (!options.force && await (0, import_login.checkAuthorization)(ctx, !!options.acceptOptIns)) {
137
- (0, import_log.logFinishedStep)(
138
- "This device has previously been authorized and is ready for use with Convex."
139
- );
140
- await handleLinkingDeployments(ctx, {
141
- interactive: !!options.linkDeployments
56
+ function createLoginStatusCommand() {
57
+ return new import_extra_typings.Command("status").description(
58
+ "Check login status and list accessible teams. Exits with code 1 when not logged in."
59
+ ).allowExcessArguments(false).action(async () => {
60
+ const ctx = await (0, import_context.oneoffContext)({
61
+ url: void 0,
62
+ adminKey: void 0,
63
+ envFile: void 0
142
64
  });
143
- return;
144
- }
145
- if (!options.force && options.checkLogin) {
146
- const isLoggedIn = await (0, import_login.checkAuthorization)(ctx, !!options.acceptOptIns);
147
- if (!isLoggedIn) {
148
- return ctx.crash({
65
+ const auth = ctx.bigBrainAuth();
66
+ let accountAuth = auth?.kind === "accessToken" ? auth : null;
67
+ if (accountAuth === null) {
68
+ const profile = await (0, import_profiles.getProfileSelection)(ctx);
69
+ if (profile !== null) {
70
+ accountAuth = await (0, import_profiles.readProfileAuth)(ctx, profile);
71
+ } else {
72
+ const globalConfig = (0, import_globalConfig.readGlobalConfig)(ctx);
73
+ if (globalConfig !== null) {
74
+ accountAuth = {
75
+ kind: "accessToken",
76
+ accessToken: globalConfig.accessToken,
77
+ header: `Bearer ${globalConfig.accessToken}`,
78
+ profile: null
79
+ };
80
+ }
81
+ }
82
+ }
83
+ if (accountAuth === null) {
84
+ (0, import_log.logMessage)(`No Convex account token found in: ${(0, import_globalConfig.globalConfigPath)()}`);
85
+ (0, import_log.logMessage)("Status: Not logged in");
86
+ await reportDeployKeyInWorkingDirectory(ctx, auth);
87
+ return await ctx.crash({
149
88
  exitCode: 1,
150
89
  errorType: "fatal",
151
- errForSentry: "You are not logged in.",
152
- printedMessage: "You are not logged in."
90
+ printedMessage: null
153
91
  });
154
92
  }
155
- }
156
- if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {
157
- cmd.error(
158
- "If overriding credentials, both username and password must be provided"
93
+ (0, import_deployKeyWarning.warnIfDeployKeyOverridesLogin)(ctx, true);
94
+ if (accountAuth.profile) {
95
+ (0, import_log.logMessage)(`Account: ${accountAuth.profile.name}`);
96
+ (0, import_log.logMessage)(`Selected by: ${accountAuth.profile.source}`);
97
+ (0, import_log.logMessage)(
98
+ `Convex account token found in: ${(0, import_profiles.profileConfigPath)(accountAuth.profile.name)}`
99
+ );
100
+ } else if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {
101
+ (0, import_log.logMessage)("Using CONVEX_OVERRIDE_ACCESS_TOKEN from the environment");
102
+ } else {
103
+ (0, import_log.logMessage)(`Convex account token found in: ${(0, import_globalConfig.globalConfigPath)()}`);
104
+ }
105
+ if (!await (0, import_login.isAuthorizedHeader)(ctx, accountAuth.header)) {
106
+ (0, import_log.logMessage)("Status: Not logged in");
107
+ await reportDeployKeyInWorkingDirectory(ctx, auth);
108
+ return await ctx.crash({
109
+ exitCode: 1,
110
+ errorType: "fatal",
111
+ printedMessage: null
112
+ });
113
+ }
114
+ (0, import_log.logMessage)("Status: Logged in");
115
+ ctx._updateBigBrainAuth(accountAuth);
116
+ const teams = await (0, import_api.getTeamsForUser)(ctx);
117
+ (0, import_log.logMessage)(
118
+ `Teams: ${teams.length} team${teams.length === 1 ? "" : "s"} accessible`
159
119
  );
160
- }
161
- const uuid = (0, import_filePaths.loadUuidForAnonymousUser)(ctx);
162
- await (0, import_login.performLogin)(ctx, {
163
- ...options,
164
- anonymousId: uuid,
165
- vercel: options.vercel,
166
- vercelOverride: options.vercelOverride
120
+ for (const team of teams) {
121
+ (0, import_log.logMessage)(` - ${team.name} (${team.slug})`);
122
+ }
123
+ await reportDeployKeyInWorkingDirectory(ctx, auth);
167
124
  });
168
- await handleLinkingDeployments(ctx, {
169
- interactive: !!options.linkDeployments
125
+ }
126
+ function createLoginCommand() {
127
+ return new import_extra_typings.Command("login").description("Login to Convex").allowExcessArguments(false).option("--account <name>", "Log in to a named account").option(
128
+ "--select",
129
+ "Select this account for this directory and its subdirectories"
130
+ ).option(
131
+ "--device-name <name>",
132
+ "Provide a name for the device being authorized"
133
+ ).option(
134
+ "-f, --force",
135
+ "Proceed with login even if a valid access token already exists for this device"
136
+ ).option(
137
+ "--no-open",
138
+ "Don't automatically open the login link in the default browser"
139
+ ).addOption(
140
+ new import_extra_typings.Option(
141
+ "--login-flow <mode>",
142
+ `How to log in; defaults to guessing based on the environment.`
143
+ ).choices(["paste", "auto", "poll"]).default("auto")
144
+ ).addOption(new import_extra_typings.Option("--link-deployments").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-url <url>").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-client <id>").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-username <username>").hideHelp()).addOption(new import_extra_typings.Option("--override-auth-password <password>").hideHelp()).addOption(new import_extra_typings.Option("--override-access-token <token>").hideHelp()).addOption(new import_extra_typings.Option("--accept-opt-ins").hideHelp()).addOption(new import_extra_typings.Option("--dump-access-token").hideHelp()).addOption(new import_extra_typings.Option("--check-login").hideHelp()).addOption(
145
+ new import_extra_typings.Option(
146
+ "--vercel",
147
+ "Redirect to Vercel SSO integration for login"
148
+ ).hideHelp()
149
+ ).addOption(new import_extra_typings.Option("--vercel-override <slug>").hideHelp()).addCommand(createLoginStatusCommand()).addHelpCommand(false).action(async (options, cmd) => {
150
+ const ctx = await (0, import_context.oneoffContext)({
151
+ url: void 0,
152
+ adminKey: void 0,
153
+ envFile: void 0,
154
+ skipAuth: true
155
+ });
156
+ const profile = await (0, import_profiles.getProfileSelection)(ctx, {
157
+ name: options.account
158
+ });
159
+ if (options.select && profile === null) {
160
+ cmd.error("Pass --account <name> with --select to name this login.");
161
+ }
162
+ (0, import_envvars.loadProjectEnvironmentVariables)();
163
+ let namingLegacyAccount = false;
164
+ if (profile !== null) {
165
+ let auth2 = options.force ? null : await (0, import_profiles.readProfileAuth)(ctx, profile, true);
166
+ if (auth2 === null && !options.force && !options.overrideAccessToken && !options.overrideAuthUsername && !process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {
167
+ auth2 = await (0, import_profiles.legacyAuthForFirstProfile)(ctx, profile);
168
+ namingLegacyAccount = auth2 !== null;
169
+ }
170
+ ctx._updateBigBrainAuth(auth2);
171
+ } else {
172
+ const accessToken = process.env.CONVEX_OVERRIDE_ACCESS_TOKEN || (0, import_globalConfig.readGlobalConfig)(ctx)?.accessToken;
173
+ ctx._updateBigBrainAuth(
174
+ accessToken ? {
175
+ kind: "accessToken",
176
+ accessToken,
177
+ header: `Bearer ${accessToken}`,
178
+ profile: null
179
+ } : null
180
+ );
181
+ }
182
+ (0, import_deployKeyWarning.warnIfDeployKeyOverridesLogin)(ctx, ctx.bigBrainAuth() !== null);
183
+ if (!options.force && await (0, import_login.checkAuthorization)(ctx, !!options.acceptOptIns)) {
184
+ const auth2 = ctx.bigBrainAuth();
185
+ if (namingLegacyAccount && profile !== null && auth2?.kind === "accessToken") {
186
+ await (0, import_profiles.writeProfileCredentials)(
187
+ ctx,
188
+ profile.name,
189
+ auth2.accessToken,
190
+ {},
191
+ null
192
+ );
193
+ }
194
+ (0, import_log.logFinishedStep)(
195
+ profile !== null ? namingLegacyAccount ? `Saved account "${profile.name}" using your existing login.` : `Account "${profile.name}" is already logged in.` : "This device has previously been authorized and is ready for use with Convex."
196
+ );
197
+ if (profile !== null && auth2?.kind === "accessToken") {
198
+ await (0, import_profiles.initializeDefaultProfile)(
199
+ ctx,
200
+ profile,
201
+ namingLegacyAccount,
202
+ !!options.select
203
+ );
204
+ }
205
+ if (options.select && profile !== null) {
206
+ if (!await (0, import_profileManagement.bindProfileToDirectory)(ctx, profile.name)) {
207
+ return await ctx.crash({
208
+ exitCode: 1,
209
+ errorType: "fatal",
210
+ printedMessage: `Logged in as "${profile.name}", but the directory selection could not be changed.`
211
+ });
212
+ }
213
+ }
214
+ await handleLinkingDeployments(ctx, {
215
+ interactive: !!options.linkDeployments
216
+ });
217
+ return;
218
+ }
219
+ if (!options.force && options.checkLogin) {
220
+ const isLoggedIn = await (0, import_login.checkAuthorization)(
221
+ ctx,
222
+ !!options.acceptOptIns
223
+ );
224
+ if (!isLoggedIn) {
225
+ return ctx.crash({
226
+ exitCode: 1,
227
+ errorType: "fatal",
228
+ errForSentry: "You are not logged in.",
229
+ printedMessage: "You are not logged in."
230
+ });
231
+ }
232
+ }
233
+ if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {
234
+ cmd.error(
235
+ "If overriding credentials, both username and password must be provided"
236
+ );
237
+ }
238
+ const uuid = (0, import_filePaths.loadUuidForAnonymousUser)(ctx);
239
+ await (0, import_login.performLogin)(ctx, {
240
+ ...options,
241
+ profile,
242
+ anonymousId: uuid,
243
+ vercel: options.vercel,
244
+ vercelOverride: options.vercelOverride
245
+ });
246
+ const auth = ctx.bigBrainAuth();
247
+ if (profile !== null && auth?.kind === "accessToken") {
248
+ await (0, import_profiles.initializeDefaultProfile)(
249
+ ctx,
250
+ profile,
251
+ namingLegacyAccount,
252
+ !!options.select
253
+ );
254
+ }
255
+ if (options.select && profile !== null) {
256
+ if (!await (0, import_profileManagement.bindProfileToDirectory)(ctx, profile.name)) {
257
+ return await ctx.crash({
258
+ exitCode: 1,
259
+ errorType: "fatal",
260
+ printedMessage: `Logged in as "${profile.name}", but the directory selection could not be changed.`
261
+ });
262
+ }
263
+ }
264
+ (0, import_deployKeyWarning.warnIfDeployKeyOverridesLogin)(ctx, true);
265
+ await handleLinkingDeployments(ctx, {
266
+ interactive: !!options.linkDeployments
267
+ });
170
268
  });
171
- });
269
+ }
270
+ const login = createLoginCommand();
172
271
  async function handleLinkingDeployments(ctx, args) {
173
272
  if (!(0, import_deploymentSelection.shouldAllowAnonymousDevelopment)()) {
174
273
  return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/login.ts"],
4
- "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport * as dotenv from \"dotenv\";\nimport { BigBrainAuth, Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, logWarning } from \"../bundler/log.js\";\nimport {\n checkAuthorization,\n isAuthorizedHeader,\n performLogin,\n} from \"./lib/login.js\";\nimport {\n loadProjectLocalConfig,\n loadUuidForAnonymousUser,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n handleLinkToProject,\n listLegacyAnonymousDeployments,\n} from \"./lib/localDeployment/anonymous.js\";\nimport {\n DASHBOARD_HOST,\n deploymentDashboardUrlPage,\n teamDashboardUrl,\n} from \"./lib/dashboard.js\";\nimport { promptSearch, promptYesNo } from \"./lib/utils/prompts.js\";\nimport {\n CONVEX_DEPLOY_KEY_ENV_VAR_NAME,\n CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,\n ENV_VAR_FILE_PATH,\n validateOrSelectTeam,\n} from \"./lib/utils/utils.js\";\nimport {\n selectProject,\n updateEnvAndConfigForDeploymentSelection,\n} from \"./configure.js\";\nimport {\n getDeploymentSelection,\n shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport {\n isAnonymousDeployment,\n removeAnonymousPrefix,\n} from \"./lib/deployment.js\";\nimport {\n readGlobalConfig,\n globalConfigPath,\n} from \"./lib/utils/globalConfig.js\";\nimport { getTeamsForUser } from \"./lib/api.js\";\n\n/**\n * The env file a deploy key came from, or null if it came from the shell.\n * `dotenv` doesn't overwrite variables that are already set, so a value from\n * the shell outranks these files -- match on the value to tell them apart.\n */\nfunction deployKeyEnvFile(\n ctx: Context,\n envVarName: string,\n value: string,\n): string | null {\n for (const file of [ENV_VAR_FILE_PATH, \".env\"]) {\n if (!ctx.fs.exists(file)) {\n continue;\n }\n if (dotenv.parse(ctx.fs.readUtf8File(file))[envVarName] === value) {\n return file;\n }\n }\n return null;\n}\n\n/**\n * A project or deployment key in the environment outranks the account token for\n * commands run from this directory, and an expired one makes the CLI look\n * logged out, so report it separately from the account.\n */\nasync function reportDeployKeyInWorkingDirectory(\n ctx: Context,\n auth: BigBrainAuth | null,\n) {\n // A preview deploy key is only used when there's no account token at all.\n if (\n auth === null ||\n auth.kind === \"accessToken\" ||\n auth.kind === \"previewDeployKey\"\n ) {\n return;\n }\n const key = auth.kind === \"projectKey\" ? auth.projectKey : auth.deploymentKey;\n const envVarName = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]\n ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME\n : CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;\n const envFile = deployKeyEnvFile(ctx, envVarName, key);\n const source = envFile ?? \"shell environment\";\n // Big Brain only strips a `project:`/`team:` prefix itself, so a deployment\n // key authorizes only without its `dev:`/`prod:` prefix. Split on the first\n // `|` like the server does, so a secret containing one survives.\n const secret = key.slice(key.indexOf(\"|\") + 1);\n if (await isAuthorizedHeader(ctx, `Bearer ${secret}`)) {\n logMessage(`Working Directory: Valid ${envVarName} in ${source}`);\n return;\n }\n logWarning(`Working Directory: Invalid ${envVarName} in ${source}`);\n}\n\nconst loginStatus = new Command(\"status\")\n .description(\"Check login status and list accessible teams\")\n .allowExcessArguments(false)\n .action(async () => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n // `_updateBigBrainAuth` below replaces any deploy key in `ctx` with the\n // account token, so read the deploy key first.\n const auth = ctx.bigBrainAuth();\n\n const globalConfig = readGlobalConfig(ctx);\n if (globalConfig === null) {\n logMessage(`No Convex account token found in: ${globalConfigPath()}`);\n logMessage(\"Status: Not logged in\");\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n return;\n }\n logMessage(`Convex account token found in: ${globalConfigPath()}`);\n\n const accessToken = globalConfig.accessToken;\n if (!(await isAuthorizedHeader(ctx, `Bearer ${accessToken}`))) {\n logMessage(\"Status: Not logged in\");\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n return;\n }\n\n logMessage(\"Status: Logged in\");\n // Describe the account, even if a deploy key outranks it for other commands.\n ctx._updateBigBrainAuth({\n kind: \"accessToken\",\n header: `Bearer ${accessToken}`,\n accessToken,\n });\n const teams = await getTeamsForUser(ctx);\n logMessage(\n `Teams: ${teams.length} team${teams.length === 1 ? \"\" : \"s\"} accessible`,\n );\n for (const team of teams) {\n logMessage(` - ${team.name} (${team.slug})`);\n }\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n });\n\nexport const login = new Command(\"login\")\n .description(\"Login to Convex\")\n .allowExcessArguments(false)\n .option(\n \"--device-name <name>\",\n \"Provide a name for the device being authorized\",\n )\n .option(\n \"-f, --force\",\n \"Proceed with login even if a valid access token already exists for this device\",\n )\n .option(\n \"--no-open\",\n \"Don't automatically open the login link in the default browser\",\n )\n .addOption(\n new Option(\n \"--login-flow <mode>\",\n `How to log in; defaults to guessing based on the environment.`,\n )\n .choices([\"paste\", \"auto\", \"poll\"] as const)\n .default(\"auto\" as const),\n )\n .addOption(new Option(\"--link-deployments\").hideHelp())\n // These options are hidden from the help/usage message, but allow overriding settings for testing.\n // Change the auth credentials with the auth provider\n .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n // Skip the auth provider login and directly use this access token\n .addOption(new Option(\"--override-access-token <token>\").hideHelp())\n // Automatically accept opt ins without prompting\n .addOption(new Option(\"--accept-opt-ins\").hideHelp())\n // Dump the access token from the auth provider and skip authorization with Convex\n .addOption(new Option(\"--dump-access-token\").hideHelp())\n // Hidden option for tests to check if the user is logged in.\n .addOption(new Option(\"--check-login\").hideHelp())\n // Redirect to Vercel SSO integration URL\n .addOption(\n new Option(\n \"--vercel\",\n \"Redirect to Vercel SSO integration for login\",\n ).hideHelp(),\n )\n // Override the Vercel URL slug (defaults to 'convex')\n .addOption(new Option(\"--vercel-override <slug>\").hideHelp())\n .addCommand(loginStatus)\n .addHelpCommand(false)\n .action(async (options, cmd: Command) => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n if (\n !options.force &&\n (await checkAuthorization(ctx, !!options.acceptOptIns))\n ) {\n logFinishedStep(\n \"This device has previously been authorized and is ready for use with Convex.\",\n );\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n return;\n }\n if (!options.force && options.checkLogin) {\n const isLoggedIn = await checkAuthorization(ctx, !!options.acceptOptIns);\n if (!isLoggedIn) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: \"You are not logged in.\",\n printedMessage: \"You are not logged in.\",\n });\n }\n }\n if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {\n cmd.error(\n \"If overriding credentials, both username and password must be provided\",\n );\n }\n\n const uuid = loadUuidForAnonymousUser(ctx);\n await performLogin(ctx, {\n ...options,\n anonymousId: uuid,\n vercel: options.vercel,\n vercelOverride: options.vercelOverride,\n });\n\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n });\n\nasync function handleLinkingDeployments(\n ctx: Context,\n args: {\n interactive: boolean;\n },\n) {\n if (!shouldAllowAnonymousDevelopment()) {\n return;\n }\n\n // Check for project-local anonymous deployment first - this takes priority\n const projectLocal = loadProjectLocalConfig(ctx);\n if (\n projectLocal !== null &&\n isAnonymousDeployment(projectLocal.deploymentName)\n ) {\n const shouldLink = await promptYesNo(ctx, {\n message: `Would you like to link your existing deployment to your account? (\"${projectLocal.deploymentName}\")`,\n default: true,\n });\n if (!shouldLink) {\n logMessage(\n \"Not linking your existing deployment. If you want to link it later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const { dashboardUrl } = await linkSingleDeployment(\n ctx,\n projectLocal.deploymentName,\n projectLocal.deploymentName,\n );\n logFinishedStep(`Visit ${dashboardUrl} to get started.`);\n return;\n }\n\n // No project-local deployment - check for legacy deployments\n const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (legacyDeployments.length === 0) {\n if (args.interactive) {\n logMessage(\n \"It doesn't look like you have any deployments to link. You can run `npx convex dev` to set up a new project or select an existing one.\",\n );\n }\n return;\n }\n\n // Get the currently configured deployment (if any) for env var updates\n const deploymentSelection = await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n const configuredDeployment =\n deploymentSelection.kind === \"anonymous\"\n ? deploymentSelection.deploymentName\n : null;\n\n if (!args.interactive) {\n // Non-interactive: link all legacy deployments automatically\n const message = getMessage(legacyDeployments.map((d) => d.deploymentName));\n const createProjects = await promptYesNo(ctx, {\n message,\n default: true,\n });\n if (!createProjects) {\n logMessage(\n \"Not linking your existing deployments. If you want to link them later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const {\n team: { slug: teamSlug },\n } = await validateOrSelectTeam(\n ctx,\n undefined,\n \"Choose a team for your deployments:\",\n );\n let dashboardUrl = teamDashboardUrl(teamSlug);\n for (const deployment of legacyDeployments) {\n const result = await linkSingleDeployment(\n ctx,\n deployment.deploymentName,\n configuredDeployment,\n { teamSlug, projectSlug: null },\n );\n if (deployment.deploymentName === configuredDeployment) {\n dashboardUrl = result.dashboardUrl;\n }\n }\n logFinishedStep(\n `Successfully linked your deployments! Visit ${dashboardUrl} to get started.`,\n );\n return;\n }\n\n // Interactive mode: let user choose which legacy deployments to link\n while (true) {\n const currentLegacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (currentLegacyDeployments.length === 0) {\n logMessage(\"All deployments have been linked.\");\n break;\n }\n logMessage(\n getDeploymentListMessage(\n currentLegacyDeployments.map((d) => d.deploymentName),\n ),\n );\n const deploymentToLink = await promptSearch(ctx, {\n message: \"Which deployment would you like to link to your account?\",\n choices: currentLegacyDeployments.map((d) => ({\n name: d.deploymentName,\n value: d.deploymentName,\n })),\n });\n\n await linkSingleDeployment(ctx, deploymentToLink, configuredDeployment);\n\n const shouldContinue = await promptYesNo(ctx, {\n message: \"Would you like to link another deployment?\",\n default: true,\n });\n if (!shouldContinue) {\n break;\n }\n }\n}\n\n/**\n * Link a single deployment to a project, prompting for team and project selection.\n * Updates env vars if this is the currently configured deployment.\n */\nasync function linkSingleDeployment(\n ctx: Context,\n deploymentName: string,\n configuredDeployment: string | null,\n options?: {\n teamSlug?: string;\n projectSlug?: string | null;\n },\n): Promise<{ dashboardUrl: string }> {\n const { team } = await validateOrSelectTeam(\n ctx,\n options?.teamSlug,\n \"Choose a team for your deployment:\",\n );\n\n const projectSlug =\n options?.projectSlug ??\n (\n await selectProject(ctx, \"ask\", {\n team: team.slug,\n devDeployment: \"local\",\n defaultProjectName: removeAnonymousPrefix(deploymentName),\n })\n ).projectSlug;\n\n const linkedDeployment = await handleLinkToProject(ctx, {\n deploymentName,\n teamSlug: team.slug,\n teamId: team.id,\n projectSlug,\n });\n\n if (deploymentName === configuredDeployment) {\n await updateEnvAndConfigForDeploymentSelection(\n ctx,\n {\n url: linkedDeployment.deploymentUrl,\n deploymentName: linkedDeployment.deploymentName,\n teamSlug: team.slug,\n projectSlug: linkedDeployment.projectSlug,\n deploymentType: \"local\",\n },\n configuredDeployment,\n );\n }\n\n return {\n dashboardUrl: deploymentDashboardUrlPage(\n linkedDeployment.deploymentName,\n \"\",\n ),\n };\n}\n\nfunction getDeploymentListMessage(anonymousDeploymentNames: string[]) {\n let message = `You have ${anonymousDeploymentNames.length} existing deployments.`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n return message;\n}\n\nfunction getMessage(anonymousDeploymentNames: string[]) {\n if (anonymousDeploymentNames.length === 1) {\n return `Would you like to link your existing deployment to your account? (\"${anonymousDeploymentNames[0]}\")`;\n }\n let message = `You have ${anonymousDeploymentNames.length} existing deployments. Would you like to link them to your account?`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n message += `\\n\\nYou can alternatively run \\`npx convex login --link-deployments\\` to interactively choose which deployments to add.`;\n return message;\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { BigBrainAuth, Context, oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, logWarning } from \"../bundler/log.js\";\nimport {\n checkAuthorization,\n isAuthorizedHeader,\n performLogin,\n} from \"./lib/login.js\";\nimport {\n loadProjectLocalConfig,\n loadUuidForAnonymousUser,\n} from \"./lib/localDeployment/filePaths.js\";\nimport {\n handleLinkToProject,\n listLegacyAnonymousDeployments,\n} from \"./lib/localDeployment/anonymous.js\";\nimport {\n DASHBOARD_HOST,\n deploymentDashboardUrlPage,\n teamDashboardUrl,\n} from \"./lib/dashboard.js\";\nimport { promptSearch, promptYesNo } from \"./lib/utils/prompts.js\";\nimport { validateOrSelectTeam } from \"./lib/utils/utils.js\";\nimport {\n selectProject,\n updateEnvAndConfigForDeploymentSelection,\n} from \"./configure.js\";\nimport {\n getDeploymentSelection,\n shouldAllowAnonymousDevelopment,\n} from \"./lib/deploymentSelection.js\";\nimport {\n isAnonymousDeployment,\n removeAnonymousPrefix,\n} from \"./lib/deployment.js\";\nimport {\n globalConfigPath,\n readGlobalConfig,\n} from \"./lib/utils/globalConfig.js\";\nimport { getTeamsForUser } from \"./lib/api.js\";\nimport {\n getProfileSelection,\n initializeDefaultProfile,\n legacyAuthForFirstProfile,\n profileConfigPath,\n readProfileAuth,\n writeProfileCredentials,\n} from \"./lib/profiles.js\";\nimport {\n getDeployKeySource,\n loadProjectEnvironmentVariables,\n} from \"./lib/envvars.js\";\nimport { bindProfileToDirectory } from \"./lib/profileManagement.js\";\nimport { warnIfDeployKeyOverridesLogin } from \"./lib/deployKeyWarning.js\";\n\n/**\n * A project or deployment key in the environment outranks the account token for\n * commands run from this directory, and an expired one makes the CLI look\n * logged out, so report it separately from the account.\n */\nasync function reportDeployKeyInWorkingDirectory(\n ctx: Context,\n auth: BigBrainAuth | null,\n) {\n // A preview deploy key is only used when there's no account token at all.\n if (\n auth === null ||\n auth.kind === \"accessToken\" ||\n auth.kind === \"previewDeployKey\"\n ) {\n return;\n }\n const key = auth.kind === \"projectKey\" ? auth.projectKey : auth.deploymentKey;\n const { envVarName, source } = getDeployKeySource(key);\n // Big Brain only strips a `project:`/`team:` prefix itself, so a deployment\n // key authorizes only without its `dev:`/`prod:` prefix. Split on the first\n // `|` like the server does, so a secret containing one survives.\n const secret = key.slice(key.indexOf(\"|\") + 1);\n if (await isAuthorizedHeader(ctx, `Bearer ${secret}`)) {\n logMessage(`Working Directory: Valid ${envVarName} in ${source}`);\n return;\n }\n logWarning(`Working Directory: Invalid ${envVarName} in ${source}`);\n}\n\nfunction createLoginStatusCommand() {\n return new Command(\"status\")\n .description(\n \"Check login status and list accessible teams. Exits with code 1 when not logged in.\",\n )\n .allowExcessArguments(false)\n .action(async () => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n // Keep the directory's deploy key for separate reporting after selecting\n // the account whose teams will be listed.\n const auth = ctx.bigBrainAuth();\n let accountAuth = auth?.kind === \"accessToken\" ? auth : null;\n if (accountAuth === null) {\n const profile = await getProfileSelection(ctx);\n if (profile !== null) {\n accountAuth = await readProfileAuth(ctx, profile);\n } else {\n const globalConfig = readGlobalConfig(ctx);\n if (globalConfig !== null) {\n accountAuth = {\n kind: \"accessToken\",\n accessToken: globalConfig.accessToken,\n header: `Bearer ${globalConfig.accessToken}`,\n profile: null,\n };\n }\n }\n }\n if (accountAuth === null) {\n logMessage(`No Convex account token found in: ${globalConfigPath()}`);\n logMessage(\"Status: Not logged in\");\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n warnIfDeployKeyOverridesLogin(ctx, true);\n if (accountAuth.profile) {\n logMessage(`Account: ${accountAuth.profile.name}`);\n logMessage(`Selected by: ${accountAuth.profile.source}`);\n logMessage(\n `Convex account token found in: ${profileConfigPath(accountAuth.profile.name)}`,\n );\n } else if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {\n logMessage(\"Using CONVEX_OVERRIDE_ACCESS_TOKEN from the environment\");\n } else {\n logMessage(`Convex account token found in: ${globalConfigPath()}`);\n }\n\n if (!(await isAuthorizedHeader(ctx, accountAuth.header))) {\n logMessage(\"Status: Not logged in\");\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: null,\n });\n }\n\n logMessage(\"Status: Logged in\");\n ctx._updateBigBrainAuth(accountAuth);\n const teams = await getTeamsForUser(ctx);\n logMessage(\n `Teams: ${teams.length} team${teams.length === 1 ? \"\" : \"s\"} accessible`,\n );\n for (const team of teams) {\n logMessage(` - ${team.name} (${team.slug})`);\n }\n await reportDeployKeyInWorkingDirectory(ctx, auth);\n });\n}\n\nexport function createLoginCommand() {\n return (\n new Command(\"login\")\n .description(\"Login to Convex\")\n .allowExcessArguments(false)\n .option(\"--account <name>\", \"Log in to a named account\")\n .option(\n \"--select\",\n \"Select this account for this directory and its subdirectories\",\n )\n .option(\n \"--device-name <name>\",\n \"Provide a name for the device being authorized\",\n )\n .option(\n \"-f, --force\",\n \"Proceed with login even if a valid access token already exists for this device\",\n )\n .option(\n \"--no-open\",\n \"Don't automatically open the login link in the default browser\",\n )\n .addOption(\n new Option(\n \"--login-flow <mode>\",\n `How to log in; defaults to guessing based on the environment.`,\n )\n .choices([\"paste\", \"auto\", \"poll\"] as const)\n .default(\"auto\" as const),\n )\n .addOption(new Option(\"--link-deployments\").hideHelp())\n // These options are hidden from the help/usage message, but allow overriding settings for testing.\n // Change the auth credentials with the auth provider\n .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n // Skip the auth provider login and directly use this access token\n .addOption(new Option(\"--override-access-token <token>\").hideHelp())\n // Automatically accept opt ins without prompting\n .addOption(new Option(\"--accept-opt-ins\").hideHelp())\n // Dump the access token from the auth provider and skip authorization with Convex\n .addOption(new Option(\"--dump-access-token\").hideHelp())\n // Hidden option for tests to check if the user is logged in.\n .addOption(new Option(\"--check-login\").hideHelp())\n // Redirect to Vercel SSO integration URL\n .addOption(\n new Option(\n \"--vercel\",\n \"Redirect to Vercel SSO integration for login\",\n ).hideHelp(),\n )\n // Override the Vercel URL slug (defaults to 'convex')\n .addOption(new Option(\"--vercel-override <slug>\").hideHelp())\n .addCommand(createLoginStatusCommand())\n .addHelpCommand(false)\n .action(async (options, cmd: Command) => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n skipAuth: true,\n });\n const profile = await getProfileSelection(ctx, {\n name: options.account,\n });\n if (options.select && profile === null) {\n cmd.error(\"Pass --account <name> with --select to name this login.\");\n }\n loadProjectEnvironmentVariables();\n let namingLegacyAccount = false;\n if (profile !== null) {\n let auth = options.force\n ? null\n : await readProfileAuth(ctx, profile, true);\n if (\n auth === null &&\n !options.force &&\n !options.overrideAccessToken &&\n !options.overrideAuthUsername &&\n !process.env.CONVEX_OVERRIDE_ACCESS_TOKEN\n ) {\n auth = await legacyAuthForFirstProfile(ctx, profile);\n namingLegacyAccount = auth !== null;\n }\n ctx._updateBigBrainAuth(auth);\n } else {\n const accessToken =\n process.env.CONVEX_OVERRIDE_ACCESS_TOKEN ||\n readGlobalConfig(ctx)?.accessToken;\n ctx._updateBigBrainAuth(\n accessToken\n ? {\n kind: \"accessToken\",\n accessToken,\n header: `Bearer ${accessToken}`,\n profile: null,\n }\n : null,\n );\n }\n warnIfDeployKeyOverridesLogin(ctx, ctx.bigBrainAuth() !== null);\n if (\n !options.force &&\n (await checkAuthorization(ctx, !!options.acceptOptIns))\n ) {\n const auth = ctx.bigBrainAuth();\n if (\n namingLegacyAccount &&\n profile !== null &&\n auth?.kind === \"accessToken\"\n ) {\n await writeProfileCredentials(\n ctx,\n profile.name,\n auth.accessToken,\n {},\n null,\n );\n }\n logFinishedStep(\n profile !== null\n ? namingLegacyAccount\n ? `Saved account \"${profile.name}\" using your existing login.`\n : `Account \"${profile.name}\" is already logged in.`\n : \"This device has previously been authorized and is ready for use with Convex.\",\n );\n if (profile !== null && auth?.kind === \"accessToken\") {\n await initializeDefaultProfile(\n ctx,\n profile,\n namingLegacyAccount,\n !!options.select,\n );\n }\n if (options.select && profile !== null) {\n if (!(await bindProfileToDirectory(ctx, profile.name))) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Logged in as \"${profile.name}\", but the directory selection could not be changed.`,\n });\n }\n }\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n return;\n }\n if (!options.force && options.checkLogin) {\n const isLoggedIn = await checkAuthorization(\n ctx,\n !!options.acceptOptIns,\n );\n if (!isLoggedIn) {\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: \"You are not logged in.\",\n printedMessage: \"You are not logged in.\",\n });\n }\n }\n if (!!options.overrideAuthUsername !== !!options.overrideAuthPassword) {\n cmd.error(\n \"If overriding credentials, both username and password must be provided\",\n );\n }\n\n const uuid = loadUuidForAnonymousUser(ctx);\n await performLogin(ctx, {\n ...options,\n profile,\n anonymousId: uuid,\n vercel: options.vercel,\n vercelOverride: options.vercelOverride,\n });\n\n const auth = ctx.bigBrainAuth();\n if (profile !== null && auth?.kind === \"accessToken\") {\n await initializeDefaultProfile(\n ctx,\n profile,\n namingLegacyAccount,\n !!options.select,\n );\n }\n if (options.select && profile !== null) {\n if (!(await bindProfileToDirectory(ctx, profile.name))) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Logged in as \"${profile.name}\", but the directory selection could not be changed.`,\n });\n }\n }\n warnIfDeployKeyOverridesLogin(ctx, true);\n\n await handleLinkingDeployments(ctx, {\n interactive: !!options.linkDeployments,\n });\n })\n );\n}\n\nexport const login = createLoginCommand();\n\nasync function handleLinkingDeployments(\n ctx: Context,\n args: {\n interactive: boolean;\n },\n) {\n if (!shouldAllowAnonymousDevelopment()) {\n return;\n }\n\n // Check for project-local anonymous deployment first - this takes priority\n const projectLocal = loadProjectLocalConfig(ctx);\n if (\n projectLocal !== null &&\n isAnonymousDeployment(projectLocal.deploymentName)\n ) {\n const shouldLink = await promptYesNo(ctx, {\n message: `Would you like to link your existing deployment to your account? (\"${projectLocal.deploymentName}\")`,\n default: true,\n });\n if (!shouldLink) {\n logMessage(\n \"Not linking your existing deployment. If you want to link it later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const { dashboardUrl } = await linkSingleDeployment(\n ctx,\n projectLocal.deploymentName,\n projectLocal.deploymentName,\n );\n logFinishedStep(`Visit ${dashboardUrl} to get started.`);\n return;\n }\n\n // No project-local deployment - check for legacy deployments\n const legacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (legacyDeployments.length === 0) {\n if (args.interactive) {\n logMessage(\n \"It doesn't look like you have any deployments to link. You can run `npx convex dev` to set up a new project or select an existing one.\",\n );\n }\n return;\n }\n\n // Get the currently configured deployment (if any) for env var updates\n const deploymentSelection = await getDeploymentSelection(ctx, {\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n const configuredDeployment =\n deploymentSelection.kind === \"anonymous\"\n ? deploymentSelection.deploymentName\n : null;\n\n if (!args.interactive) {\n // Non-interactive: link all legacy deployments automatically\n const message = getMessage(legacyDeployments.map((d) => d.deploymentName));\n const createProjects = await promptYesNo(ctx, {\n message,\n default: true,\n });\n if (!createProjects) {\n logMessage(\n \"Not linking your existing deployments. If you want to link them later, run `npx convex login --link-deployments`.\",\n );\n logMessage(\n `Visit ${DASHBOARD_HOST} or run \\`npx convex dev\\` to get started with your new account.`,\n );\n return;\n }\n\n const {\n team: { slug: teamSlug },\n } = await validateOrSelectTeam(\n ctx,\n undefined,\n \"Choose a team for your deployments:\",\n );\n let dashboardUrl = teamDashboardUrl(teamSlug);\n for (const deployment of legacyDeployments) {\n const result = await linkSingleDeployment(\n ctx,\n deployment.deploymentName,\n configuredDeployment,\n { teamSlug, projectSlug: null },\n );\n if (deployment.deploymentName === configuredDeployment) {\n dashboardUrl = result.dashboardUrl;\n }\n }\n logFinishedStep(\n `Successfully linked your deployments! Visit ${dashboardUrl} to get started.`,\n );\n return;\n }\n\n // Interactive mode: let user choose which legacy deployments to link\n while (true) {\n const currentLegacyDeployments = listLegacyAnonymousDeployments(ctx);\n if (currentLegacyDeployments.length === 0) {\n logMessage(\"All deployments have been linked.\");\n break;\n }\n logMessage(\n getDeploymentListMessage(\n currentLegacyDeployments.map((d) => d.deploymentName),\n ),\n );\n const deploymentToLink = await promptSearch(ctx, {\n message: \"Which deployment would you like to link to your account?\",\n choices: currentLegacyDeployments.map((d) => ({\n name: d.deploymentName,\n value: d.deploymentName,\n })),\n });\n\n await linkSingleDeployment(ctx, deploymentToLink, configuredDeployment);\n\n const shouldContinue = await promptYesNo(ctx, {\n message: \"Would you like to link another deployment?\",\n default: true,\n });\n if (!shouldContinue) {\n break;\n }\n }\n}\n\n/**\n * Link a single deployment to a project, prompting for team and project selection.\n * Updates env vars if this is the currently configured deployment.\n */\nasync function linkSingleDeployment(\n ctx: Context,\n deploymentName: string,\n configuredDeployment: string | null,\n options?: {\n teamSlug?: string;\n projectSlug?: string | null;\n },\n): Promise<{ dashboardUrl: string }> {\n const { team } = await validateOrSelectTeam(\n ctx,\n options?.teamSlug,\n \"Choose a team for your deployment:\",\n );\n\n const projectSlug =\n options?.projectSlug ??\n (\n await selectProject(ctx, \"ask\", {\n team: team.slug,\n devDeployment: \"local\",\n defaultProjectName: removeAnonymousPrefix(deploymentName),\n })\n ).projectSlug;\n\n const linkedDeployment = await handleLinkToProject(ctx, {\n deploymentName,\n teamSlug: team.slug,\n teamId: team.id,\n projectSlug,\n });\n\n if (deploymentName === configuredDeployment) {\n await updateEnvAndConfigForDeploymentSelection(\n ctx,\n {\n url: linkedDeployment.deploymentUrl,\n deploymentName: linkedDeployment.deploymentName,\n teamSlug: team.slug,\n projectSlug: linkedDeployment.projectSlug,\n deploymentType: \"local\",\n },\n configuredDeployment,\n );\n }\n\n return {\n dashboardUrl: deploymentDashboardUrlPage(\n linkedDeployment.deploymentName,\n \"\",\n ),\n };\n}\n\nfunction getDeploymentListMessage(anonymousDeploymentNames: string[]) {\n let message = `You have ${anonymousDeploymentNames.length} existing deployments.`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n return message;\n}\n\nfunction getMessage(anonymousDeploymentNames: string[]) {\n if (anonymousDeploymentNames.length === 1) {\n return `Would you like to link your existing deployment to your account? (\"${anonymousDeploymentNames[0]}\")`;\n }\n let message = `You have ${anonymousDeploymentNames.length} existing deployments. Would you like to link them to your account?`;\n message += `\\n\\nDeployments:`;\n for (const deploymentName of anonymousDeploymentNames) {\n message += `\\n- ${deploymentName}`;\n }\n message += `\\n\\nYou can alternatively run \\`npx convex login --link-deployments\\` to interactively choose which deployments to add.`;\n return message;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["auth"]
7
7
  }