convex 1.48.0-alpha.0 → 1.48.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 (353) hide show
  1. package/CHANGELOG.md +28 -4
  2. package/README.md +1 -1
  3. package/dist/browser.bundle.js +1 -1
  4. package/dist/browser.bundle.js.map +1 -1
  5. package/dist/cjs/bundler/context.js +5 -7
  6. package/dist/cjs/bundler/context.js.map +2 -2
  7. package/dist/cjs/bundler/fs.js +6 -47
  8. package/dist/cjs/bundler/fs.js.map +2 -2
  9. package/dist/cjs/cli/aiFiles.js +26 -4
  10. package/dist/cjs/cli/aiFiles.js.map +2 -2
  11. package/dist/cjs/cli/configure.js +2 -15
  12. package/dist/cjs/cli/configure.js.map +2 -2
  13. package/dist/cjs/cli/env.js +6 -3
  14. package/dist/cjs/cli/env.js.map +2 -2
  15. package/dist/cjs/cli/envDefault.js +5 -2
  16. package/dist/cjs/cli/envDefault.js.map +2 -2
  17. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js +2 -1
  18. package/dist/cjs/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  19. package/dist/cjs/cli/lib/aiFiles/index.js +13 -2
  20. package/dist/cjs/cli/lib/aiFiles/index.js.map +2 -2
  21. package/dist/cjs/cli/lib/aiFiles/skills.js +6 -5
  22. package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
  23. package/dist/cjs/cli/lib/aiFiles/state.js +1 -1
  24. package/dist/cjs/cli/lib/aiFiles/state.js.map +1 -1
  25. package/dist/cjs/cli/lib/components.js +12 -2
  26. package/dist/cjs/cli/lib/components.js.map +2 -2
  27. package/dist/cjs/cli/lib/deployApi/startPush.js +42 -1
  28. package/dist/cjs/cli/lib/deployApi/startPush.js.map +2 -2
  29. package/dist/cjs/cli/lib/deployment.js +0 -2
  30. package/dist/cjs/cli/lib/deployment.js.map +2 -2
  31. package/dist/cjs/cli/lib/deploymentSelection.js +18 -27
  32. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  33. package/dist/cjs/cli/lib/env.js +9 -1
  34. package/dist/cjs/cli/lib/env.js.map +2 -2
  35. package/dist/cjs/cli/lib/envvars.js +0 -32
  36. package/dist/cjs/cli/lib/envvars.js.map +2 -2
  37. package/dist/cjs/cli/lib/fsUtils.js +1 -1
  38. package/dist/cjs/cli/lib/fsUtils.js.map +2 -2
  39. package/dist/cjs/cli/lib/generateDocs.js +1 -1
  40. package/dist/cjs/cli/lib/generateDocs.js.map +1 -1
  41. package/dist/cjs/cli/lib/localDeployment/dashboard.js +11 -1
  42. package/dist/cjs/cli/lib/localDeployment/dashboard.js.map +2 -2
  43. package/dist/cjs/cli/lib/localDeployment/download.js +16 -1
  44. package/dist/cjs/cli/lib/localDeployment/download.js.map +2 -2
  45. package/dist/cjs/cli/lib/localDeployment/utils.js +4 -0
  46. package/dist/cjs/cli/lib/localDeployment/utils.js.map +2 -2
  47. package/dist/cjs/cli/lib/login.js +4 -28
  48. package/dist/cjs/cli/lib/login.js.map +2 -2
  49. package/dist/cjs/cli/lib/mcp/requestContext.js +1 -5
  50. package/dist/cjs/cli/lib/mcp/requestContext.js.map +2 -2
  51. package/dist/cjs/cli/lib/utils/aiAgent.js +32 -0
  52. package/dist/cjs/cli/lib/utils/aiAgent.js.map +7 -0
  53. package/dist/cjs/cli/lib/utils/utils.js +9 -18
  54. package/dist/cjs/cli/lib/utils/utils.js.map +2 -2
  55. package/dist/cjs/cli/login.js +114 -213
  56. package/dist/cjs/cli/login.js.map +3 -3
  57. package/dist/cjs/cli/logout.js +12 -113
  58. package/dist/cjs/cli/logout.js.map +3 -3
  59. package/dist/cjs/cli/mcp.js +10 -43
  60. package/dist/cjs/cli/mcp.js.map +3 -3
  61. package/dist/cjs/cli/program.js +1 -2
  62. package/dist/cjs/cli/program.js.map +2 -2
  63. package/dist/cjs/index.js +1 -1
  64. package/dist/cjs/index.js.map +1 -1
  65. package/dist/cjs/server/authentication.js.map +1 -1
  66. package/dist/cjs/server/components/index.js.map +2 -2
  67. package/dist/cjs/server/impl/authentication_impl.js +15 -1
  68. package/dist/cjs/server/impl/authentication_impl.js.map +2 -2
  69. package/dist/cjs/server/impl/registration_impl.js +1 -1
  70. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  71. package/dist/cjs/server/index.js.map +2 -2
  72. package/dist/cjs/server/meta.js.map +1 -1
  73. package/dist/cjs/server/registration.js.map +1 -1
  74. package/dist/cjs/server/schema.js +0 -2
  75. package/dist/cjs/server/schema.js.map +2 -2
  76. package/dist/cjs/server/storage.js.map +1 -1
  77. package/dist/cjs-types/bundler/context.d.ts +0 -5
  78. package/dist/cjs-types/bundler/context.d.ts.map +1 -1
  79. package/dist/cjs-types/bundler/fs.d.ts +2 -7
  80. package/dist/cjs-types/bundler/fs.d.ts.map +1 -1
  81. package/dist/cjs-types/cli/aiFiles.d.ts.map +1 -1
  82. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  83. package/dist/cjs-types/cli/env.d.ts.map +1 -1
  84. package/dist/cjs-types/cli/envDefault.d.ts.map +1 -1
  85. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -1
  86. package/dist/cjs-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  87. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts +11 -1
  88. package/dist/cjs-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  89. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts +4 -1
  90. package/dist/cjs-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  91. package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
  92. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +13 -0
  93. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  94. package/dist/cjs-types/cli/lib/deployment.d.ts +0 -2
  95. package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
  96. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +1 -2
  97. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  98. package/dist/cjs-types/cli/lib/env.d.ts +1 -0
  99. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  100. package/dist/cjs-types/cli/lib/envvars.d.ts +0 -6
  101. package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
  102. package/dist/cjs-types/cli/lib/fsUtils.d.ts +0 -1
  103. package/dist/cjs-types/cli/lib/fsUtils.d.ts.map +1 -1
  104. package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts +6 -0
  105. package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
  106. package/dist/cjs-types/cli/lib/localDeployment/download.d.ts.map +1 -1
  107. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +1 -0
  108. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  109. package/dist/cjs-types/cli/lib/login.d.ts +1 -3
  110. package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
  111. package/dist/cjs-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
  112. package/dist/cjs-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  113. package/dist/cjs-types/cli/lib/utils/aiAgent.d.ts +8 -0
  114. package/dist/cjs-types/cli/lib/utils/aiAgent.d.ts.map +1 -0
  115. package/dist/cjs-types/cli/lib/utils/utils.d.ts +0 -5
  116. package/dist/cjs-types/cli/lib/utils/utils.d.ts.map +1 -1
  117. package/dist/cjs-types/cli/login.d.ts +0 -21
  118. package/dist/cjs-types/cli/login.d.ts.map +1 -1
  119. package/dist/cjs-types/cli/logout.d.ts +1 -8
  120. package/dist/cjs-types/cli/logout.d.ts.map +1 -1
  121. package/dist/cjs-types/cli/mcp.d.ts.map +1 -1
  122. package/dist/cjs-types/cli/program.d.ts.map +1 -1
  123. package/dist/cjs-types/index.d.ts +1 -1
  124. package/dist/cjs-types/index.d.ts.map +1 -1
  125. package/dist/cjs-types/server/authentication.d.ts +65 -0
  126. package/dist/cjs-types/server/authentication.d.ts.map +1 -1
  127. package/dist/cjs-types/server/components/index.d.ts +6 -0
  128. package/dist/cjs-types/server/components/index.d.ts.map +1 -1
  129. package/dist/cjs-types/server/impl/authentication_impl.d.ts +2 -1
  130. package/dist/cjs-types/server/impl/authentication_impl.d.ts.map +1 -1
  131. package/dist/cjs-types/server/index.d.ts +2 -2
  132. package/dist/cjs-types/server/index.d.ts.map +1 -1
  133. package/dist/cjs-types/server/meta.d.ts +8 -0
  134. package/dist/cjs-types/server/meta.d.ts.map +1 -1
  135. package/dist/cjs-types/server/registration.d.ts +5 -3
  136. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  137. package/dist/cjs-types/server/schema.d.ts +0 -2
  138. package/dist/cjs-types/server/schema.d.ts.map +1 -1
  139. package/dist/cjs-types/server/storage.d.ts +28 -25
  140. package/dist/cjs-types/server/storage.d.ts.map +1 -1
  141. package/dist/cli.bundle.cjs +1379 -2142
  142. package/dist/cli.bundle.cjs.map +4 -4
  143. package/dist/esm/bundler/context.js +5 -7
  144. package/dist/esm/bundler/context.js.map +2 -2
  145. package/dist/esm/bundler/fs.js +6 -47
  146. package/dist/esm/bundler/fs.js.map +2 -2
  147. package/dist/esm/cli/aiFiles.js +26 -4
  148. package/dist/esm/cli/aiFiles.js.map +2 -2
  149. package/dist/esm/cli/configure.js +2 -15
  150. package/dist/esm/cli/configure.js.map +2 -2
  151. package/dist/esm/cli/env.js +6 -3
  152. package/dist/esm/cli/env.js.map +2 -2
  153. package/dist/esm/cli/envDefault.js +5 -2
  154. package/dist/esm/cli/envDefault.js.map +2 -2
  155. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js +2 -1
  156. package/dist/esm/cli/lib/aiFiles/guidelinesmd.js.map +2 -2
  157. package/dist/esm/cli/lib/aiFiles/index.js +13 -2
  158. package/dist/esm/cli/lib/aiFiles/index.js.map +2 -2
  159. package/dist/esm/cli/lib/aiFiles/skills.js +6 -5
  160. package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
  161. package/dist/esm/cli/lib/aiFiles/state.js +1 -1
  162. package/dist/esm/cli/lib/aiFiles/state.js.map +1 -1
  163. package/dist/esm/cli/lib/components.js +15 -2
  164. package/dist/esm/cli/lib/components.js.map +2 -2
  165. package/dist/esm/cli/lib/deployApi/startPush.js +39 -0
  166. package/dist/esm/cli/lib/deployApi/startPush.js.map +2 -2
  167. package/dist/esm/cli/lib/deployment.js +2 -2
  168. package/dist/esm/cli/lib/deployment.js.map +2 -2
  169. package/dist/esm/cli/lib/deploymentSelection.js +20 -35
  170. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  171. package/dist/esm/cli/lib/env.js +9 -1
  172. package/dist/esm/cli/lib/env.js.map +2 -2
  173. package/dist/esm/cli/lib/envvars.js +1 -35
  174. package/dist/esm/cli/lib/envvars.js.map +2 -2
  175. package/dist/esm/cli/lib/fsUtils.js +1 -1
  176. package/dist/esm/cli/lib/fsUtils.js.map +2 -2
  177. package/dist/esm/cli/lib/generateDocs.js +1 -1
  178. package/dist/esm/cli/lib/generateDocs.js.map +1 -1
  179. package/dist/esm/cli/lib/localDeployment/dashboard.js +9 -0
  180. package/dist/esm/cli/lib/localDeployment/dashboard.js.map +2 -2
  181. package/dist/esm/cli/lib/localDeployment/download.js +16 -1
  182. package/dist/esm/cli/lib/localDeployment/download.js.map +2 -2
  183. package/dist/esm/cli/lib/localDeployment/utils.js +3 -0
  184. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  185. package/dist/esm/cli/lib/login.js +4 -36
  186. package/dist/esm/cli/lib/login.js.map +2 -2
  187. package/dist/esm/cli/lib/mcp/requestContext.js +1 -5
  188. package/dist/esm/cli/lib/mcp/requestContext.js.map +2 -2
  189. package/dist/esm/cli/lib/utils/aiAgent.js +10 -0
  190. package/dist/esm/cli/lib/utils/aiAgent.js.map +7 -0
  191. package/dist/esm/cli/lib/utils/utils.js +9 -16
  192. package/dist/esm/cli/lib/utils/utils.js.map +2 -2
  193. package/dist/esm/cli/login.js +112 -225
  194. package/dist/esm/cli/login.js.map +3 -3
  195. package/dist/esm/cli/logout.js +13 -110
  196. package/dist/esm/cli/logout.js.map +2 -2
  197. package/dist/esm/cli/mcp.js +10 -34
  198. package/dist/esm/cli/mcp.js.map +2 -2
  199. package/dist/esm/cli/program.js +1 -2
  200. package/dist/esm/cli/program.js.map +2 -2
  201. package/dist/esm/index.js +1 -1
  202. package/dist/esm/index.js.map +1 -1
  203. package/dist/esm/server/components/index.js.map +2 -2
  204. package/dist/esm/server/impl/authentication_impl.js +13 -0
  205. package/dist/esm/server/impl/authentication_impl.js.map +2 -2
  206. package/dist/esm/server/impl/registration_impl.js +2 -2
  207. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  208. package/dist/esm/server/index.js.map +2 -2
  209. package/dist/esm/server/schema.js +0 -2
  210. package/dist/esm/server/schema.js.map +2 -2
  211. package/dist/esm-types/bundler/context.d.ts +0 -5
  212. package/dist/esm-types/bundler/context.d.ts.map +1 -1
  213. package/dist/esm-types/bundler/fs.d.ts +2 -7
  214. package/dist/esm-types/bundler/fs.d.ts.map +1 -1
  215. package/dist/esm-types/cli/aiFiles.d.ts.map +1 -1
  216. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  217. package/dist/esm-types/cli/env.d.ts.map +1 -1
  218. package/dist/esm-types/cli/envDefault.d.ts.map +1 -1
  219. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts +3 -1
  220. package/dist/esm-types/cli/lib/aiFiles/guidelinesmd.d.ts.map +1 -1
  221. package/dist/esm-types/cli/lib/aiFiles/index.d.ts +11 -1
  222. package/dist/esm-types/cli/lib/aiFiles/index.d.ts.map +1 -1
  223. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts +4 -1
  224. package/dist/esm-types/cli/lib/aiFiles/skills.d.ts.map +1 -1
  225. package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
  226. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +13 -0
  227. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  228. package/dist/esm-types/cli/lib/deployment.d.ts +0 -2
  229. package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
  230. package/dist/esm-types/cli/lib/deploymentSelection.d.ts +1 -2
  231. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  232. package/dist/esm-types/cli/lib/env.d.ts +1 -0
  233. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  234. package/dist/esm-types/cli/lib/envvars.d.ts +0 -6
  235. package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
  236. package/dist/esm-types/cli/lib/fsUtils.d.ts +0 -1
  237. package/dist/esm-types/cli/lib/fsUtils.d.ts.map +1 -1
  238. package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts +6 -0
  239. package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
  240. package/dist/esm-types/cli/lib/localDeployment/download.d.ts.map +1 -1
  241. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +1 -0
  242. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  243. package/dist/esm-types/cli/lib/login.d.ts +1 -3
  244. package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
  245. package/dist/esm-types/cli/lib/mcp/requestContext.d.ts.map +1 -1
  246. package/dist/esm-types/cli/lib/mcp/tools/insights.d.ts +2 -2
  247. package/dist/esm-types/cli/lib/utils/aiAgent.d.ts +8 -0
  248. package/dist/esm-types/cli/lib/utils/aiAgent.d.ts.map +1 -0
  249. package/dist/esm-types/cli/lib/utils/utils.d.ts +0 -5
  250. package/dist/esm-types/cli/lib/utils/utils.d.ts.map +1 -1
  251. package/dist/esm-types/cli/login.d.ts +0 -21
  252. package/dist/esm-types/cli/login.d.ts.map +1 -1
  253. package/dist/esm-types/cli/logout.d.ts +1 -8
  254. package/dist/esm-types/cli/logout.d.ts.map +1 -1
  255. package/dist/esm-types/cli/mcp.d.ts.map +1 -1
  256. package/dist/esm-types/cli/program.d.ts.map +1 -1
  257. package/dist/esm-types/index.d.ts +1 -1
  258. package/dist/esm-types/index.d.ts.map +1 -1
  259. package/dist/esm-types/server/authentication.d.ts +65 -0
  260. package/dist/esm-types/server/authentication.d.ts.map +1 -1
  261. package/dist/esm-types/server/components/index.d.ts +6 -0
  262. package/dist/esm-types/server/components/index.d.ts.map +1 -1
  263. package/dist/esm-types/server/impl/authentication_impl.d.ts +2 -1
  264. package/dist/esm-types/server/impl/authentication_impl.d.ts.map +1 -1
  265. package/dist/esm-types/server/index.d.ts +2 -2
  266. package/dist/esm-types/server/index.d.ts.map +1 -1
  267. package/dist/esm-types/server/meta.d.ts +8 -0
  268. package/dist/esm-types/server/meta.d.ts.map +1 -1
  269. package/dist/esm-types/server/registration.d.ts +5 -3
  270. package/dist/esm-types/server/registration.d.ts.map +1 -1
  271. package/dist/esm-types/server/schema.d.ts +0 -2
  272. package/dist/esm-types/server/schema.d.ts.map +1 -1
  273. package/dist/esm-types/server/storage.d.ts +28 -25
  274. package/dist/esm-types/server/storage.d.ts.map +1 -1
  275. package/dist/react.bundle.js +1 -1
  276. package/dist/react.bundle.js.map +1 -1
  277. package/package.json +3 -2
  278. package/schemas/convex.schema.json +1 -2
  279. package/src/bundler/context.ts +5 -9
  280. package/src/bundler/fs.ts +5 -54
  281. package/src/cli/aiFiles.ts +30 -4
  282. package/src/cli/configure.ts +2 -18
  283. package/src/cli/env.ts +4 -1
  284. package/src/cli/envDefault.ts +4 -1
  285. package/src/cli/lib/aiFiles/guidelinesmd.ts +7 -2
  286. package/src/cli/lib/aiFiles/index.ts +23 -3
  287. package/src/cli/lib/aiFiles/skills.ts +11 -7
  288. package/src/cli/lib/aiFiles/state.ts +1 -1
  289. package/src/cli/lib/components.ts +18 -3
  290. package/src/cli/lib/deployApi/startPush.ts +64 -0
  291. package/src/cli/lib/deployment.ts +2 -2
  292. package/src/cli/lib/deploymentSelection.ts +18 -37
  293. package/src/cli/lib/env.ts +13 -2
  294. package/src/cli/lib/envvars.ts +1 -43
  295. package/src/cli/lib/fsUtils.ts +2 -5
  296. package/src/cli/lib/generateDocs.ts +1 -1
  297. package/src/cli/lib/localDeployment/dashboard.ts +19 -0
  298. package/src/cli/lib/localDeployment/download.ts +17 -1
  299. package/src/cli/lib/localDeployment/utils.ts +4 -0
  300. package/src/cli/lib/login.ts +3 -47
  301. package/src/cli/lib/mcp/requestContext.ts +1 -7
  302. package/src/cli/lib/utils/aiAgent.ts +15 -0
  303. package/src/cli/lib/utils/utils.ts +15 -19
  304. package/src/cli/login.ts +168 -293
  305. package/src/cli/logout.ts +17 -142
  306. package/src/cli/mcp.ts +11 -48
  307. package/src/cli/program.ts +0 -2
  308. package/src/index.ts +1 -1
  309. package/src/server/authentication.ts +79 -0
  310. package/src/server/components/index.ts +11 -0
  311. package/src/server/impl/authentication_impl.ts +15 -1
  312. package/src/server/impl/registration_impl.ts +2 -2
  313. package/src/server/index.ts +6 -0
  314. package/src/server/meta.ts +0 -8
  315. package/src/server/registration.ts +5 -2
  316. package/src/server/schema.ts +0 -2
  317. package/src/server/storage.ts +29 -42
  318. package/dist/cjs/cli/account.js +0 -237
  319. package/dist/cjs/cli/account.js.map +0 -7
  320. package/dist/cjs/cli/lib/deployKeyWarning.js +0 -43
  321. package/dist/cjs/cli/lib/deployKeyWarning.js.map +0 -7
  322. package/dist/cjs/cli/lib/profileManagement.js +0 -196
  323. package/dist/cjs/cli/lib/profileManagement.js.map +0 -7
  324. package/dist/cjs/cli/lib/profiles.js +0 -333
  325. package/dist/cjs/cli/lib/profiles.js.map +0 -7
  326. package/dist/cjs-types/cli/account.d.ts +0 -6
  327. package/dist/cjs-types/cli/account.d.ts.map +0 -1
  328. package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts +0 -3
  329. package/dist/cjs-types/cli/lib/deployKeyWarning.d.ts.map +0 -1
  330. package/dist/cjs-types/cli/lib/profileManagement.d.ts +0 -10
  331. package/dist/cjs-types/cli/lib/profileManagement.d.ts.map +0 -1
  332. package/dist/cjs-types/cli/lib/profiles.d.ts +0 -59
  333. package/dist/cjs-types/cli/lib/profiles.d.ts.map +0 -1
  334. package/dist/esm/cli/account.js +0 -221
  335. package/dist/esm/cli/account.js.map +0 -7
  336. package/dist/esm/cli/lib/deployKeyWarning.js +0 -27
  337. package/dist/esm/cli/lib/deployKeyWarning.js.map +0 -7
  338. package/dist/esm/cli/lib/profileManagement.js +0 -179
  339. package/dist/esm/cli/lib/profileManagement.js.map +0 -7
  340. package/dist/esm/cli/lib/profiles.js +0 -288
  341. package/dist/esm/cli/lib/profiles.js.map +0 -7
  342. package/dist/esm-types/cli/account.d.ts +0 -6
  343. package/dist/esm-types/cli/account.d.ts.map +0 -1
  344. package/dist/esm-types/cli/lib/deployKeyWarning.d.ts +0 -3
  345. package/dist/esm-types/cli/lib/deployKeyWarning.d.ts.map +0 -1
  346. package/dist/esm-types/cli/lib/profileManagement.d.ts +0 -10
  347. package/dist/esm-types/cli/lib/profileManagement.d.ts.map +0 -1
  348. package/dist/esm-types/cli/lib/profiles.d.ts +0 -59
  349. package/dist/esm-types/cli/lib/profiles.d.ts.map +0 -1
  350. package/src/cli/account.ts +0 -320
  351. package/src/cli/lib/deployKeyWarning.ts +0 -43
  352. package/src/cli/lib/profileManagement.ts +0 -262
  353. package/src/cli/lib/profiles.ts +0 -398
@@ -31,26 +31,18 @@ import {
31
31
  targetProjectForLocalSelector,
32
32
  } from "./localDeployment/projectMismatch.js";
33
33
  import { chalkStderr } from "chalk";
34
- import {
35
- getBuildEnvironment,
36
- loadProjectEnvironmentVariables,
37
- } from "./envvars.js";
34
+ import { getBuildEnvironment } from "./envvars.js";
38
35
  import { readGlobalConfig } from "./utils/globalConfig.js";
39
- import {
40
- getProfileSelection,
41
- ProfileSelection,
42
- readProfileAuth,
43
- } from "./profiles.js";
44
36
  import {
45
37
  CONVEX_DEPLOYMENT_ENV_VAR_NAME,
46
38
  CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
47
39
  CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
48
40
  CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME,
49
41
  CONVEX_SELF_HOSTED_URL_VAR_NAME,
42
+ ENV_VAR_FILE_PATH,
50
43
  bigBrainAPI,
51
44
  processDeployKeyValue,
52
45
  readDeployKeyFromEnv,
53
- readDeployKeyEnvVar,
54
46
  typedPlatformClient,
55
47
  } from "./utils/utils.js";
56
48
  import * as dotenv from "dotenv";
@@ -91,11 +83,10 @@ export async function initializeBigBrainAuth(
91
83
  if (initialArgs.url !== undefined && initialArgs.adminKey !== undefined) {
92
84
  // Do not check any env vars if `url` and `adminKey` are specified via CLI
93
85
  ctx._updateBigBrainAuth(
94
- await getBigBrainAuth(ctx, {
86
+ getBigBrainAuth(ctx, {
95
87
  previewDeployKey: null,
96
88
  projectKey: null,
97
89
  deploymentKey: null,
98
- skipProfile: true,
99
90
  }),
100
91
  );
101
92
  return;
@@ -115,31 +106,30 @@ export async function initializeBigBrainAuth(
115
106
  const rawDeployKey = readDeployKeyFromEnv((name) => config[name]);
116
107
  const deployKey = await processDeployKeyValue(ctx, rawDeployKey);
117
108
  if (deployKey !== undefined) {
118
- const bigBrainAuth = await getBigBrainAuth(ctx, {
109
+ const bigBrainAuth = getBigBrainAuth(ctx, {
119
110
  previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,
120
111
  projectKey: isProjectKey(deployKey) ? deployKey : null,
121
112
  deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,
122
- envFile: initialArgs.envFile,
123
113
  });
124
114
  ctx._updateBigBrainAuth(bigBrainAuth);
125
115
  return;
126
116
  }
127
117
  // No deploy key was found in the env file, so fall back on using the global config
128
118
  ctx._updateBigBrainAuth(
129
- await getBigBrainAuth(ctx, {
119
+ getBigBrainAuth(ctx, {
130
120
  previewDeployKey: null,
131
121
  projectKey: null,
132
122
  deploymentKey: null,
133
- envFile: initialArgs.envFile,
134
123
  }),
135
124
  );
136
125
  return;
137
126
  }
138
- loadProjectEnvironmentVariables();
127
+ dotenv.config({ path: ENV_VAR_FILE_PATH });
128
+ dotenv.config();
139
129
  const rawDeployKey = readDeployKeyFromEnv((name) => process.env[name]);
140
130
  const deployKey = await processDeployKeyValue(ctx, rawDeployKey);
141
131
  if (deployKey !== undefined) {
142
- const bigBrainAuth = await getBigBrainAuth(ctx, {
132
+ const bigBrainAuth = getBigBrainAuth(ctx, {
143
133
  previewDeployKey: isPreviewDeployKey(deployKey) ? deployKey : null,
144
134
  projectKey: isProjectKey(deployKey) ? deployKey : null,
145
135
  deploymentKey: isDeploymentKey(deployKey) ? deployKey : null,
@@ -148,7 +138,7 @@ export async function initializeBigBrainAuth(
148
138
  return;
149
139
  }
150
140
  ctx._updateBigBrainAuth(
151
- await getBigBrainAuth(ctx, {
141
+ getBigBrainAuth(ctx, {
152
142
  previewDeployKey: null,
153
143
  projectKey: null,
154
144
  deploymentKey: null,
@@ -160,7 +150,6 @@ export async function initializeBigBrainAuth(
160
150
  export async function updateBigBrainAuthAfterLogin(
161
151
  ctx: Context,
162
152
  accessToken: string,
163
- profile?: ProfileSelection,
164
153
  ) {
165
154
  const existingAuth = ctx.bigBrainAuth();
166
155
  if (existingAuth !== null && existingAuth.kind === "projectKey") {
@@ -173,7 +162,6 @@ export async function updateBigBrainAuthAfterLogin(
173
162
  accessToken: accessToken,
174
163
  kind: "accessToken",
175
164
  header: `Bearer ${accessToken}`,
176
- ...(profile ? { profile } : {}),
177
165
  });
178
166
  }
179
167
 
@@ -181,22 +169,19 @@ export async function clearBigBrainAuth(ctx: Context) {
181
169
  ctx._updateBigBrainAuth(null);
182
170
  }
183
171
 
184
- async function getBigBrainAuth(
172
+ function getBigBrainAuth(
185
173
  ctx: Context,
186
174
  opts: {
187
175
  previewDeployKey: string | null;
188
176
  projectKey: string | null;
189
177
  deploymentKey: string | null;
190
- envFile?: string;
191
- skipProfile?: boolean;
192
178
  },
193
- ): Promise<BigBrainAuth | null> {
179
+ ): BigBrainAuth | null {
194
180
  if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {
195
181
  return {
196
182
  accessToken: process.env.CONVEX_OVERRIDE_ACCESS_TOKEN,
197
183
  kind: "accessToken",
198
184
  header: `Bearer ${process.env.CONVEX_OVERRIDE_ACCESS_TOKEN}`,
199
- profile: null,
200
185
  };
201
186
  }
202
187
  if (opts.projectKey !== null) {
@@ -215,19 +200,12 @@ async function getBigBrainAuth(
215
200
  deploymentKey: opts.deploymentKey,
216
201
  };
217
202
  }
218
- const profile = opts.skipProfile
219
- ? null
220
- : await getProfileSelection(ctx, { envFile: opts.envFile });
221
- if (profile !== null) {
222
- return await readProfileAuth(ctx, profile);
223
- }
224
203
  const globalConfig = readGlobalConfig(ctx);
225
204
  if (globalConfig) {
226
205
  return {
227
206
  kind: "accessToken",
228
207
  header: `Bearer ${globalConfig.accessToken}`,
229
208
  accessToken: globalConfig.accessToken,
230
- profile: null,
231
209
  };
232
210
  }
233
211
  if (opts.previewDeployKey !== null) {
@@ -294,9 +272,9 @@ export async function ensureAuthCanCreateDeployment(
294
272
  )} and try again.`,
295
273
  });
296
274
  }
297
- const envVar =
298
- readDeployKeyEnvVar((name) => process.env[name])?.name ??
299
- CONVEX_DEPLOY_KEY_ENV_VAR_NAME;
275
+ const envVar = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
276
+ ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME
277
+ : CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME;
300
278
  return await ctx.crash({
301
279
  exitCode: 1,
302
280
  errorType: "fatal",
@@ -591,7 +569,10 @@ async function resolveBaseDeploymentSelection(
591
569
  }
592
570
  return result.metadata;
593
571
  }
594
- loadProjectEnvironmentVariables();
572
+ // start with .env.local (but doesn't override existing)
573
+ dotenv.config({ path: ENV_VAR_FILE_PATH });
574
+ // for variables not already set, use .env values
575
+ dotenv.config();
595
576
  const result = await getDeploymentSelectionFromEnv(
596
577
  ctx,
597
578
  selectionWithinProject,
@@ -11,6 +11,7 @@ import { runSystemQuery } from "./run.js";
11
11
  import { deploymentFetch, logAndHandleFetchError } from "./utils/utils.js";
12
12
  import { readFromStdin } from "./utils/stdin.js";
13
13
  import { promptSecret } from "./utils/prompts.js";
14
+ import { detectAiAgent } from "./utils/aiAgent.js";
14
15
  import {
15
16
  EXPECTED_CONVEX_URL_NAMES,
16
17
  EXPECTED_SITE_URL_NAMES,
@@ -174,15 +175,20 @@ export async function envRemove(
174
175
  export async function envList(
175
176
  ctx: Context,
176
177
  backend: EnvVarBackend,
177
- options?: { namesOnly?: boolean },
178
+ options?: { namesOnly?: boolean; includeValues?: boolean },
178
179
  ) {
179
180
  const envs = await backend.list();
180
181
  if (envs.length === 0) {
181
182
  logMessage(`No environment variables set${backend.notice}`);
182
183
  return;
183
184
  }
185
+ // Agents tend to run `env list` to check what is set, which copies every
186
+ // secret into their context. They get names unless they ask for values.
187
+ const agent =
188
+ options?.namesOnly || options?.includeValues ? null : await detectAiAgent();
189
+ const namesOnly = options?.namesOnly || agent !== null;
184
190
  for (const { name, value } of envs) {
185
- if (options?.namesOnly) {
191
+ if (namesOnly) {
186
192
  logOutput(name);
187
193
  continue;
188
194
  }
@@ -192,6 +198,11 @@ export async function envList(
192
198
  }
193
199
  logOutput(`${name}=${formatted}`);
194
200
  }
201
+ if (agent !== null) {
202
+ logMessage(
203
+ `Listed names only because an AI agent (${agent}) appears to be running this command. Pass --include-values to print the values too.`,
204
+ );
205
+ }
195
206
  }
196
207
 
197
208
  async function getFileContents(
@@ -6,49 +6,7 @@ import * as dotenv from "dotenv";
6
6
 
7
7
  import { Context } from "../../bundler/context.js";
8
8
  import { logWarning } from "../../bundler/log.js";
9
- import {
10
- CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
11
- readDeployKeyEnvVar,
12
- ENV_VAR_FILE_PATH,
13
- loadPackageJson,
14
- } from "./utils/utils.js";
15
-
16
- export const CONVEX_ACCOUNT_ENV_VAR = "CONVEX_ACCOUNT";
17
-
18
- const loadedEnvironment = new Map<string, { value: string; source: string }>();
19
-
20
- export function loadProjectEnvironmentVariables() {
21
- // Only remove values supplied by our previous load; later shell overrides win.
22
- for (const [name, { value }] of loadedEnvironment) {
23
- if (process.env[name] === value) delete process.env[name];
24
- }
25
- loadedEnvironment.clear();
26
- const environment: Record<string, string> = {};
27
- for (const [name, value] of Object.entries(process.env)) {
28
- if (value !== undefined) environment[name] = value;
29
- }
30
- for (const file of [ENV_VAR_FILE_PATH, ".env"]) {
31
- dotenv.config({ path: file, processEnv: environment });
32
- for (const [name, value] of Object.entries(environment)) {
33
- // Account selection reads the current project's files directly.
34
- if (name !== CONVEX_ACCOUNT_ENV_VAR && process.env[name] === undefined) {
35
- process.env[name] = value;
36
- loadedEnvironment.set(name, { value, source: file });
37
- }
38
- }
39
- }
40
- }
41
-
42
- export function getDeployKeySource(key: string) {
43
- const envVarName =
44
- readDeployKeyEnvVar((name) => process.env[name])?.name ??
45
- CONVEX_DEPLOY_KEY_ENV_VAR_NAME;
46
- const loaded = loadedEnvironment.get(envVarName);
47
- return {
48
- envVarName,
49
- source: loaded?.value === key ? loaded.source : "shell environment",
50
- };
51
- }
9
+ import { loadPackageJson } from "./utils/utils.js";
52
10
 
53
11
  const _FRAMEWORKS = [
54
12
  "create-react-app",
@@ -6,15 +6,12 @@ import { NodeFs } from "../../bundler/fs.js";
6
6
  export function recursivelyDelete(
7
7
  ctx: Context,
8
8
  deletePath: string,
9
- opts?: { force?: boolean; dryRun?: boolean; followSymlinks?: boolean },
9
+ opts?: { force?: boolean; dryRun?: boolean },
10
10
  ) {
11
11
  const dryRun = !!opts?.dryRun;
12
12
  let st;
13
13
  try {
14
- st =
15
- opts?.followSymlinks === false
16
- ? ctx.fs.lstat(deletePath)
17
- : ctx.fs.stat(deletePath);
14
+ st = ctx.fs.stat(deletePath);
18
15
  } catch (err: any) {
19
16
  if (err.code === "ENOENT" && opts?.force) {
20
17
  return;
@@ -299,7 +299,7 @@ function renderCopyableCommands(text: string): string {
299
299
  .map((line) =>
300
300
  /^- /.test(line)
301
301
  ? line.replace(
302
- /`(npx convex(?:@[^\s`]+)? [^`]*)`/g,
302
+ /`(npx convex [^`]*)`/g,
303
303
  (_, command) =>
304
304
  `<CodeWithCopyButton text={${JSON.stringify(command)}} />`,
305
305
  )
@@ -57,6 +57,12 @@ export async function handleDashboard(
57
57
  ctx,
58
58
  dashboardPort,
59
59
  async (request, response) => {
60
+ if (!isLoopbackHost(request.headers.host, dashboardPort)) {
61
+ response.statusCode = 403;
62
+ response.end();
63
+ return;
64
+ }
65
+
60
66
  const pathname = new URL(
61
67
  request.url ?? "/",
62
68
  // We only want to extract the pathname so the base doesn’t matter
@@ -96,6 +102,19 @@ export async function handleDashboard(
96
102
  };
97
103
  }
98
104
 
105
+ /**
106
+ * The dashboard is only meant to be opened at the URL the CLI prints, so
107
+ * requests addressed to any other hostname are not served, even if that
108
+ * hostname resolves to 127.0.0.1.
109
+ */
110
+ export function isLoopbackHost(host: string | undefined, port: number) {
111
+ const normalizedHost = host?.toLowerCase();
112
+ return (
113
+ normalizedHost === `127.0.0.1:${port}` ||
114
+ normalizedHost === `localhost:${port}`
115
+ );
116
+ }
117
+
99
118
  async function reportSelfHostedEvent(
100
119
  ctx: Context,
101
120
  {
@@ -27,6 +27,7 @@ import { recursivelyDelete, recursivelyCopy } from "../fsUtils.js";
27
27
  import { LocalDeploymentError } from "./errors.js";
28
28
  import type { ProgressBarInstance } from "../../../vendor/progress/index.js";
29
29
  import path from "path";
30
+ import { isValidBackendVersion } from "./utils.js";
30
31
 
31
32
  async function makeExecutable(p: string) {
32
33
  switch (process.platform) {
@@ -67,6 +68,7 @@ async function _ensureBackendBinaryDownloaded(
67
68
  ctx: Context,
68
69
  version: string,
69
70
  ): Promise<{ binaryPath: string; version: string }> {
71
+ await assertValidBackendVersion(ctx, version);
70
72
  logVerbose(`Ensuring backend binary downloaded for version ${version}`);
71
73
  const existingDownload = await checkForExistingDownload(ctx, version);
72
74
  if (existingDownload !== null) {
@@ -80,6 +82,19 @@ async function _ensureBackendBinaryDownloaded(
80
82
  return { version, binaryPath };
81
83
  }
82
84
 
85
+ async function assertValidBackendVersion(ctx: Context, version: string) {
86
+ if (!isValidBackendVersion(version)) {
87
+ return await ctx.crash({
88
+ exitCode: 1,
89
+ errorType: "fatal",
90
+ printedMessage: "Invalid local backend version",
91
+ errForSentry: new LocalDeploymentError(
92
+ `Invalid local backend version: ${JSON.stringify(version)}`,
93
+ ),
94
+ });
95
+ }
96
+ }
97
+
83
98
  let cachedLatestVersion: string | null = null;
84
99
 
85
100
  /**
@@ -259,7 +274,7 @@ function getDownloadPath() {
259
274
  }
260
275
 
261
276
  function getGithubDownloadUrl(version: string, filename: string) {
262
- return `https://github.com/get-convex/convex-backend/releases/download/${version}/${filename}`;
277
+ return `https://github.com/convex/convex-backend/releases/download/${version}/${filename}`;
263
278
  }
264
279
 
265
280
  async function downloadZipFile(
@@ -326,6 +341,7 @@ async function downloadZipFile(
326
341
  }
327
342
 
328
343
  export async function ensureDashboardDownloaded(ctx: Context, version: string) {
344
+ await assertValidBackendVersion(ctx, version);
329
345
  const config = loadGlobalDashboardConfig(ctx);
330
346
  if (config !== null && config.version === version) {
331
347
  return;
@@ -98,3 +98,7 @@ export const LOCAL_BACKEND_INSTANCE_SECRET =
98
98
  export function releaseDate(version: string): string | null {
99
99
  return /^precompiled-(\d{4}-\d{2}-\d{2})-/.exec(version)?.[1] ?? null;
100
100
  }
101
+
102
+ export function isValidBackendVersion(version: string): boolean {
103
+ return /^precompiled-\d{4}-\d{2}-\d{2}-[\w.-]+$/.test(version);
104
+ }
@@ -32,17 +32,6 @@ import {
32
32
  modifyGlobalConfig,
33
33
  } from "./utils/globalConfig.js";
34
34
  import { updateBigBrainAuthAfterLogin } from "./deploymentSelection.js";
35
- import {
36
- getProfileSelection,
37
- ProfileSelection,
38
- profileConfigPath,
39
- writeProfileCredentials,
40
- readProfileCredentials,
41
- } from "./profiles.js";
42
- import {
43
- profileLoginMetadata,
44
- revokeReplacedProfileToken,
45
- } from "./profileManagement.js";
46
35
 
47
36
  // Per https://github.com/panva/node-openid-client/tree/main/docs#customizing
48
37
  custom.setHttpOptionsDefaults({
@@ -302,7 +291,6 @@ export async function performLogin(
302
291
  anonymousId,
303
292
  vercel,
304
293
  vercelOverride,
305
- profile: selectedProfile,
306
294
  }: {
307
295
  overrideAuthUrl?: string | undefined;
308
296
  overrideAuthClient?: string | undefined;
@@ -319,16 +307,8 @@ export async function performLogin(
319
307
  anonymousId?: string | undefined;
320
308
  vercel?: boolean | undefined;
321
309
  vercelOverride?: string | undefined;
322
- profile?: ProfileSelection | null;
323
310
  } = {},
324
311
  ) {
325
- const auth = ctx.bigBrainAuth();
326
- const profile =
327
- selectedProfile !== undefined
328
- ? selectedProfile
329
- : auth?.kind === "accessToken" && auth.profile !== undefined
330
- ? auth.profile
331
- : await getProfileSelection(ctx);
332
312
  loginFlow = loginFlow || "auto";
333
313
  // Get access token from big-brain
334
314
  // Default the device name to the hostname, but allow the user to change this if the terminal is interactive.
@@ -420,12 +400,6 @@ export async function performLogin(
420
400
  }
421
401
 
422
402
  // Exchange the WorkOS access token for a Convex personal access token.
423
- const previous =
424
- profile === null ? null : await readProfileCredentials(ctx, profile, true);
425
- const metadata =
426
- profile === null
427
- ? {}
428
- : await profileLoginMetadata(ctx, profile, accessToken, previous);
429
403
  ctx._updateBigBrainAuth({
430
404
  accessToken: accessToken,
431
405
  kind: "accessToken",
@@ -443,19 +417,8 @@ export async function performLogin(
443
417
  const newAccessToken = response.data!.accessToken;
444
418
  const globalConfig = { accessToken: newAccessToken };
445
419
  try {
446
- if (profile !== null) {
447
- await writeProfileCredentials(
448
- ctx,
449
- profile.name,
450
- newAccessToken,
451
- metadata,
452
- previous,
453
- );
454
- } else {
455
- await modifyGlobalConfig(ctx, globalConfig);
456
- }
457
- const path =
458
- profile !== null ? profileConfigPath(profile.name) : globalConfigPath();
420
+ await modifyGlobalConfig(ctx, globalConfig);
421
+ const path = globalConfigPath();
459
422
  logFinishedStep(`Saved credentials to ${formatPathForPrinting(path)}`);
460
423
  } catch (err: unknown) {
461
424
  return await ctx.crash({
@@ -466,15 +429,8 @@ export async function performLogin(
466
429
  });
467
430
  }
468
431
 
469
- if (profile !== null) {
470
- await revokeReplacedProfileToken(
471
- ctx,
472
- previous?.accessToken,
473
- newAccessToken,
474
- );
475
- }
476
432
  logVerbose(`performLogin: updating big brain auth after login`);
477
- await updateBigBrainAuthAfterLogin(ctx, newAccessToken, profile ?? undefined);
433
+ await updateBigBrainAuthAfterLogin(ctx, newAccessToken);
478
434
 
479
435
  logVerbose(`performLogin: checking opt ins, acceptOptIns: ${acceptOptIns}`);
480
436
  // Do opt in to TOS and Privacy Policy stuff
@@ -149,13 +149,7 @@ export function encodeDeploymentSelector(
149
149
  projectDir,
150
150
  deployment,
151
151
  };
152
- // ASCII JSON escapes support Unicode paths with the existing Latin-1 decoder.
153
- const serialized = JSON.stringify(payload).replace(
154
- /[\u0080-\uffff]/g,
155
- (character) =>
156
- `\\u${character.charCodeAt(0).toString(16).padStart(4, "0")}`,
157
- );
158
- return `${deployment.kind}:${btoa(serialized)}`;
152
+ return `${deployment.kind}:${btoa(JSON.stringify(payload))}`;
159
153
  }
160
154
 
161
155
  const payloadSchema = z.object({
@@ -0,0 +1,15 @@
1
+ import { determineAgent } from "@vercel/detect-agent";
2
+
3
+ /**
4
+ * Returns the name of the AI agent running this process, or null if none is
5
+ * detected. `@vercel/detect-agent` recognizes the environment variables that
6
+ * agents like Claude Code, Codex and Cursor set; `CONVEX_AGENT_MODE` is
7
+ * Convex's own.
8
+ */
9
+ export async function detectAiAgent(): Promise<string | null> {
10
+ if (process.env.CONVEX_AGENT_MODE) {
11
+ return "CONVEX_AGENT_MODE";
12
+ }
13
+ const result = await determineAgent();
14
+ return result.isAgent ? result.agent.name : null;
15
+ }
@@ -45,7 +45,6 @@ export const CONVEX_DEPLOYMENT_ENV_VAR_NAME = "CONVEX_DEPLOYMENT";
45
45
  export const CONVEX_SELF_HOSTED_URL_VAR_NAME = "CONVEX_SELF_HOSTED_URL";
46
46
  export const CONVEX_SELF_HOSTED_ADMIN_KEY_VAR_NAME =
47
47
  "CONVEX_SELF_HOSTED_ADMIN_KEY";
48
- export const IGNORED_DEPLOY_KEY = "<ignore_deploy_key>";
49
48
  const MAX_RETRIES = 6;
50
49
  // After 3 retries, log a progress message that we're retrying the request
51
50
  const RETRY_LOG_THRESHOLD = 3;
@@ -70,7 +69,7 @@ export async function processDeployKeyValue(
70
69
  }
71
70
 
72
71
  // Check for <ignore_deploy_key> sentinel
73
- if (deployKey === IGNORED_DEPLOY_KEY) {
72
+ if (deployKey === "<ignore_deploy_key>") {
74
73
  return undefined;
75
74
  }
76
75
 
@@ -97,20 +96,9 @@ export async function processDeployKeyValue(
97
96
  export function readDeployKeyFromEnv(
98
97
  getEnv: (name: string) => string | undefined | null,
99
98
  ): string | undefined {
100
- return readDeployKeyEnvVar(getEnv)?.value;
101
- }
102
-
103
- export function readDeployKeyEnvVar(
104
- getEnv: (name: string) => string | undefined | null,
105
- ): { name: string; value: string } | undefined {
106
- for (const name of [
107
- CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
108
- CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME,
109
- ]) {
110
- const value = getEnv(name);
111
- if (value) return { name, value };
112
- }
113
- return undefined;
99
+ const fromDeployKey = getEnv(CONVEX_DEPLOY_KEY_ENV_VAR_NAME);
100
+ const fromToken = getEnv(CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME);
101
+ return fromDeployKey || fromToken || undefined;
114
102
  }
115
103
 
116
104
  // The prefix the backend's `require_operation` checks use when an identity
@@ -120,9 +108,17 @@ const PERMISSION_DENIED_MESSAGE_PREFIX =
120
108
  "You do not have permission to perform this operation";
121
109
 
122
110
  function deployKeyPermissionAdvice(): string | null {
123
- const envVar = readDeployKeyEnvVar((name) => process.env[name]);
124
- if (envVar === undefined || envVar.value === IGNORED_DEPLOY_KEY) return null;
125
- return `This is determined by the permissions granted to ${envVar.name}.`;
111
+ // Name whichever env var is actually set. `CONVEX_DEPLOY_KEY` takes
112
+ // precedence over `CONVEX_DEPLOYMENT_TOKEN` when both are present.
113
+ const envVarName = process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME]
114
+ ? CONVEX_DEPLOY_KEY_ENV_VAR_NAME
115
+ : process.env[CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME]
116
+ ? CONVEX_DEPLOYMENT_TOKEN_ENV_VAR_NAME
117
+ : null;
118
+ if (envVarName === null) {
119
+ return null;
120
+ }
121
+ return `This is determined by the permissions granted to ${envVarName}.`;
126
122
  }
127
123
 
128
124
  /**