convex 1.40.0 → 1.41.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 (290) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/aiFiles.js +2 -2
  5. package/dist/cjs/cli/aiFiles.js.map +1 -1
  6. package/dist/cjs/cli/configure.js +1 -4
  7. package/dist/cjs/cli/configure.js.map +2 -2
  8. package/dist/cjs/cli/convexExport.js +3 -3
  9. package/dist/cjs/cli/convexExport.js.map +1 -1
  10. package/dist/cjs/cli/convexImport.js +2 -2
  11. package/dist/cjs/cli/convexImport.js.map +1 -1
  12. package/dist/cjs/cli/dashboard.js +19 -6
  13. package/dist/cjs/cli/dashboard.js.map +3 -3
  14. package/dist/cjs/cli/data.js +2 -2
  15. package/dist/cjs/cli/data.js.map +1 -1
  16. package/dist/cjs/cli/deploy.js +5 -5
  17. package/dist/cjs/cli/deploy.js.map +2 -2
  18. package/dist/cjs/cli/deploymentCreate.js +11 -5
  19. package/dist/cjs/cli/deploymentCreate.js.map +2 -2
  20. package/dist/cjs/cli/deploymentSelect.js +5 -5
  21. package/dist/cjs/cli/deploymentSelect.js.map +1 -1
  22. package/dist/cjs/cli/deploymentTokenCreate.js +5 -13
  23. package/dist/cjs/cli/deploymentTokenCreate.js.map +2 -2
  24. package/dist/cjs/cli/deploymentTokenDelete.js +4 -11
  25. package/dist/cjs/cli/deploymentTokenDelete.js.map +2 -2
  26. package/dist/cjs/cli/dev.js +6 -5
  27. package/dist/cjs/cli/dev.js.map +2 -2
  28. package/dist/cjs/cli/env.js +16 -16
  29. package/dist/cjs/cli/env.js.map +2 -2
  30. package/dist/cjs/cli/envDefault.js +10 -10
  31. package/dist/cjs/cli/envDefault.js.map +1 -1
  32. package/dist/cjs/cli/insights.js +3 -3
  33. package/dist/cjs/cli/insights.js.map +1 -1
  34. package/dist/cjs/cli/lib/aiFiles/skills.js +2 -2
  35. package/dist/cjs/cli/lib/aiFiles/skills.js.map +2 -2
  36. package/dist/cjs/cli/lib/command.js +1 -1
  37. package/dist/cjs/cli/lib/command.js.map +1 -1
  38. package/dist/cjs/cli/lib/deployment.js.map +1 -1
  39. package/dist/cjs/cli/lib/deploymentSelection.js +39 -0
  40. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  41. package/dist/cjs/cli/lib/dev.js +31 -0
  42. package/dist/cjs/cli/lib/dev.js.map +2 -2
  43. package/dist/cjs/cli/lib/generateDocs.js +256 -0
  44. package/dist/cjs/cli/lib/generateDocs.js.map +7 -0
  45. package/dist/cjs/cli/lib/localDeployment/anonymous.js +24 -49
  46. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +3 -3
  47. package/dist/cjs/cli/lib/localDeployment/bigBrain.js +0 -9
  48. package/dist/cjs/cli/lib/localDeployment/bigBrain.js.map +2 -2
  49. package/dist/cjs/cli/lib/localDeployment/dashboard.js +30 -68
  50. package/dist/cjs/cli/lib/localDeployment/dashboard.js.map +2 -2
  51. package/dist/cjs/cli/lib/localDeployment/download.js +14 -1
  52. package/dist/cjs/cli/lib/localDeployment/download.js.map +2 -2
  53. package/dist/cjs/cli/lib/localDeployment/filePaths.js +33 -4
  54. package/dist/cjs/cli/lib/localDeployment/filePaths.js.map +2 -2
  55. package/dist/cjs/cli/lib/localDeployment/localDeployment.js +37 -126
  56. package/dist/cjs/cli/lib/localDeployment/localDeployment.js.map +3 -3
  57. package/dist/cjs/cli/lib/localDeployment/secrets.js +91 -0
  58. package/dist/cjs/cli/lib/localDeployment/secrets.js.map +7 -0
  59. package/dist/cjs/cli/lib/localDeployment/upgrade.js +43 -28
  60. package/dist/cjs/cli/lib/localDeployment/upgrade.js.map +3 -3
  61. package/dist/cjs/cli/lib/localDeployment/utils.js +0 -19
  62. package/dist/cjs/cli/lib/localDeployment/utils.js.map +3 -3
  63. package/dist/cjs/cli/lib/runTestFunction.js +3 -3
  64. package/dist/cjs/cli/lib/runTestFunction.js.map +1 -1
  65. package/dist/cjs/cli/run.js +5 -5
  66. package/dist/cjs/cli/run.js.map +1 -1
  67. package/dist/cjs/index.js +1 -1
  68. package/dist/cjs/index.js.map +1 -1
  69. package/dist/cjs/server/impl/registration_impl.js +0 -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-types/cli/configure.d.ts +3 -2
  75. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  76. package/dist/cjs-types/cli/dashboard.d.ts.map +1 -1
  77. package/dist/cjs-types/cli/deploymentCreate.d.ts.map +1 -1
  78. package/dist/cjs-types/cli/deploymentTokenCreate.d.ts.map +1 -1
  79. package/dist/cjs-types/cli/deploymentTokenDelete.d.ts.map +1 -1
  80. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  81. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
  82. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +16 -16
  83. package/dist/cjs-types/cli/lib/deployment.d.ts +0 -2
  84. package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
  85. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts +7 -0
  86. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  87. package/dist/cjs-types/cli/lib/dev.d.ts +2 -1
  88. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  89. package/dist/cjs-types/cli/lib/generateDocs.d.ts +20 -0
  90. package/dist/cjs-types/cli/lib/generateDocs.d.ts.map +1 -0
  91. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts +2 -0
  92. package/dist/cjs-types/cli/lib/generateDocs.test.d.ts.map +1 -0
  93. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
  94. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  95. package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
  96. package/dist/cjs-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
  97. package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
  98. package/dist/cjs-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
  99. package/dist/cjs-types/cli/lib/localDeployment/download.d.ts +11 -1
  100. package/dist/cjs-types/cli/lib/localDeployment/download.d.ts.map +1 -1
  101. package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
  102. package/dist/cjs-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
  103. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
  104. package/dist/cjs-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  105. package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts +31 -0
  106. package/dist/cjs-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
  107. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
  108. package/dist/cjs-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
  109. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
  110. package/dist/cjs-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  111. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts +0 -2
  112. package/dist/cjs-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  113. package/dist/cjs-types/cli/lib/versionApi.d.ts +2 -2
  114. package/dist/cjs-types/index.d.ts +1 -1
  115. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  116. package/dist/cjs-types/server/index.d.ts +1 -1
  117. package/dist/cjs-types/server/index.d.ts.map +1 -1
  118. package/dist/cjs-types/server/meta.d.ts +16 -0
  119. package/dist/cjs-types/server/meta.d.ts.map +1 -1
  120. package/dist/cjs-types/server/registration.d.ts +11 -5
  121. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  122. package/dist/cli.bundle.cjs +66405 -67923
  123. package/dist/cli.bundle.cjs.map +4 -4
  124. package/dist/esm/cli/aiFiles.js +2 -2
  125. package/dist/esm/cli/aiFiles.js.map +1 -1
  126. package/dist/esm/cli/configure.js +1 -4
  127. package/dist/esm/cli/configure.js.map +2 -2
  128. package/dist/esm/cli/convexExport.js +3 -3
  129. package/dist/esm/cli/convexExport.js.map +1 -1
  130. package/dist/esm/cli/convexImport.js +2 -2
  131. package/dist/esm/cli/convexImport.js.map +1 -1
  132. package/dist/esm/cli/dashboard.js +16 -3
  133. package/dist/esm/cli/dashboard.js.map +2 -2
  134. package/dist/esm/cli/data.js +2 -2
  135. package/dist/esm/cli/data.js.map +1 -1
  136. package/dist/esm/cli/deploy.js +5 -5
  137. package/dist/esm/cli/deploy.js.map +2 -2
  138. package/dist/esm/cli/deploymentCreate.js +13 -9
  139. package/dist/esm/cli/deploymentCreate.js.map +2 -2
  140. package/dist/esm/cli/deploymentSelect.js +5 -5
  141. package/dist/esm/cli/deploymentSelect.js.map +1 -1
  142. package/dist/esm/cli/deploymentTokenCreate.js +9 -15
  143. package/dist/esm/cli/deploymentTokenCreate.js.map +2 -2
  144. package/dist/esm/cli/deploymentTokenDelete.js +8 -16
  145. package/dist/esm/cli/deploymentTokenDelete.js.map +2 -2
  146. package/dist/esm/cli/dev.js +6 -5
  147. package/dist/esm/cli/dev.js.map +2 -2
  148. package/dist/esm/cli/env.js +16 -16
  149. package/dist/esm/cli/env.js.map +2 -2
  150. package/dist/esm/cli/envDefault.js +10 -10
  151. package/dist/esm/cli/envDefault.js.map +1 -1
  152. package/dist/esm/cli/insights.js +3 -3
  153. package/dist/esm/cli/insights.js.map +1 -1
  154. package/dist/esm/cli/lib/aiFiles/skills.js +2 -2
  155. package/dist/esm/cli/lib/aiFiles/skills.js.map +2 -2
  156. package/dist/esm/cli/lib/command.js +1 -1
  157. package/dist/esm/cli/lib/command.js.map +1 -1
  158. package/dist/esm/cli/lib/deployment.js.map +1 -1
  159. package/dist/esm/cli/lib/deploymentSelection.js +38 -0
  160. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  161. package/dist/esm/cli/lib/dev.js +31 -0
  162. package/dist/esm/cli/lib/dev.js.map +2 -2
  163. package/dist/esm/cli/lib/generateDocs.js +233 -0
  164. package/dist/esm/cli/lib/generateDocs.js.map +7 -0
  165. package/dist/esm/cli/lib/localDeployment/anonymous.js +30 -61
  166. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +3 -3
  167. package/dist/esm/cli/lib/localDeployment/bigBrain.js +0 -8
  168. package/dist/esm/cli/lib/localDeployment/bigBrain.js.map +2 -2
  169. package/dist/esm/cli/lib/localDeployment/dashboard.js +36 -69
  170. package/dist/esm/cli/lib/localDeployment/dashboard.js.map +2 -2
  171. package/dist/esm/cli/lib/localDeployment/download.js +15 -2
  172. package/dist/esm/cli/lib/localDeployment/download.js.map +2 -2
  173. package/dist/esm/cli/lib/localDeployment/filePaths.js +29 -2
  174. package/dist/esm/cli/lib/localDeployment/filePaths.js.map +2 -2
  175. package/dist/esm/cli/lib/localDeployment/localDeployment.js +40 -134
  176. package/dist/esm/cli/lib/localDeployment/localDeployment.js.map +3 -3
  177. package/dist/esm/cli/lib/localDeployment/secrets.js +57 -0
  178. package/dist/esm/cli/lib/localDeployment/secrets.js.map +7 -0
  179. package/dist/esm/cli/lib/localDeployment/upgrade.js +45 -28
  180. package/dist/esm/cli/lib/localDeployment/upgrade.js.map +3 -3
  181. package/dist/esm/cli/lib/localDeployment/utils.js +0 -7
  182. package/dist/esm/cli/lib/localDeployment/utils.js.map +2 -2
  183. package/dist/esm/cli/lib/runTestFunction.js +3 -3
  184. package/dist/esm/cli/lib/runTestFunction.js.map +1 -1
  185. package/dist/esm/cli/run.js +5 -5
  186. package/dist/esm/cli/run.js.map +1 -1
  187. package/dist/esm/index.js +1 -1
  188. package/dist/esm/index.js.map +1 -1
  189. package/dist/esm/server/impl/registration_impl.js +0 -1
  190. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  191. package/dist/esm/server/index.js.map +2 -2
  192. package/dist/esm-types/cli/configure.d.ts +3 -2
  193. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  194. package/dist/esm-types/cli/dashboard.d.ts.map +1 -1
  195. package/dist/esm-types/cli/deploymentCreate.d.ts.map +1 -1
  196. package/dist/esm-types/cli/deploymentTokenCreate.d.ts.map +1 -1
  197. package/dist/esm-types/cli/deploymentTokenDelete.d.ts.map +1 -1
  198. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  199. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +4 -4
  200. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +16 -16
  201. package/dist/esm-types/cli/lib/deployment.d.ts +0 -2
  202. package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
  203. package/dist/esm-types/cli/lib/deploymentSelection.d.ts +7 -0
  204. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  205. package/dist/esm-types/cli/lib/dev.d.ts +2 -1
  206. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  207. package/dist/esm-types/cli/lib/generateDocs.d.ts +20 -0
  208. package/dist/esm-types/cli/lib/generateDocs.d.ts.map +1 -0
  209. package/dist/esm-types/cli/lib/generateDocs.test.d.ts +2 -0
  210. package/dist/esm-types/cli/lib/generateDocs.test.d.ts.map +1 -0
  211. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts +1 -1
  212. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  213. package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts +2 -4
  214. package/dist/esm-types/cli/lib/localDeployment/bigBrain.d.ts.map +1 -1
  215. package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts +9 -4
  216. package/dist/esm-types/cli/lib/localDeployment/dashboard.d.ts.map +1 -1
  217. package/dist/esm-types/cli/lib/localDeployment/download.d.ts +11 -1
  218. package/dist/esm-types/cli/lib/localDeployment/download.d.ts.map +1 -1
  219. package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts +16 -5
  220. package/dist/esm-types/cli/lib/localDeployment/filePaths.d.ts.map +1 -1
  221. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts +1 -9
  222. package/dist/esm-types/cli/lib/localDeployment/localDeployment.d.ts.map +1 -1
  223. package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts +31 -0
  224. package/dist/esm-types/cli/lib/localDeployment/secrets.d.ts.map +1 -0
  225. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts +2 -0
  226. package/dist/esm-types/cli/lib/localDeployment/secrets.test.d.ts.map +1 -0
  227. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts +6 -3
  228. package/dist/esm-types/cli/lib/localDeployment/upgrade.d.ts.map +1 -1
  229. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts +0 -2
  230. package/dist/esm-types/cli/lib/localDeployment/utils.d.ts.map +1 -1
  231. package/dist/esm-types/cli/lib/versionApi.d.ts +2 -2
  232. package/dist/esm-types/index.d.ts +1 -1
  233. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  234. package/dist/esm-types/server/index.d.ts +1 -1
  235. package/dist/esm-types/server/index.d.ts.map +1 -1
  236. package/dist/esm-types/server/meta.d.ts +16 -0
  237. package/dist/esm-types/server/meta.d.ts.map +1 -1
  238. package/dist/esm-types/server/registration.d.ts +11 -5
  239. package/dist/esm-types/server/registration.d.ts.map +1 -1
  240. package/dist/react.bundle.js +1 -1
  241. package/dist/react.bundle.js.map +1 -1
  242. package/package.json +4 -2
  243. package/src/browser/sync/request_manager.test.ts +2 -2
  244. package/src/cli/aiFiles.ts +2 -2
  245. package/src/cli/configure.ts +4 -6
  246. package/src/cli/convexExport.ts +3 -3
  247. package/src/cli/convexImport.ts +2 -2
  248. package/src/cli/dashboard.ts +29 -3
  249. package/src/cli/data.ts +2 -2
  250. package/src/cli/deploy.ts +5 -5
  251. package/src/cli/deploymentCreate.test.ts +151 -24
  252. package/src/cli/deploymentCreate.ts +21 -11
  253. package/src/cli/deploymentSelect.ts +5 -5
  254. package/src/cli/deploymentSelection.test.ts +0 -3
  255. package/src/cli/deploymentToken.test.ts +34 -23
  256. package/src/cli/deploymentTokenCreate.ts +9 -21
  257. package/src/cli/deploymentTokenDelete.ts +8 -23
  258. package/src/cli/dev.ts +5 -4
  259. package/src/cli/env.ts +16 -16
  260. package/src/cli/envDefault.ts +10 -10
  261. package/src/cli/insights.ts +3 -3
  262. package/src/cli/lib/aiFiles/integration.test.ts +2 -0
  263. package/src/cli/lib/aiFiles/skills.ts +3 -3
  264. package/src/cli/lib/command.ts +2 -2
  265. package/src/cli/lib/deployment.ts +0 -5
  266. package/src/cli/lib/deploymentSelection.ts +67 -0
  267. package/src/cli/lib/dev.ts +39 -0
  268. package/src/cli/lib/generateDocs.test.ts +326 -0
  269. package/src/cli/lib/generateDocs.ts +393 -0
  270. package/src/cli/lib/localDeployment/anonymous.ts +48 -72
  271. package/src/cli/lib/localDeployment/bigBrain.ts +7 -15
  272. package/src/cli/lib/localDeployment/dashboard.ts +48 -80
  273. package/src/cli/lib/localDeployment/download.ts +34 -3
  274. package/src/cli/lib/localDeployment/filePaths.ts +66 -6
  275. package/src/cli/lib/localDeployment/localDeployment.ts +46 -184
  276. package/src/cli/lib/localDeployment/run.test.ts +6 -6
  277. package/src/cli/lib/localDeployment/secrets.test.ts +53 -0
  278. package/src/cli/lib/localDeployment/secrets.ts +93 -0
  279. package/src/cli/lib/localDeployment/tests/keygenFailure.mjs +9 -0
  280. package/src/cli/lib/localDeployment/tests/keygenSuccess.mjs +31 -0
  281. package/src/cli/lib/localDeployment/upgrade.ts +52 -38
  282. package/src/cli/lib/localDeployment/utils.ts +0 -10
  283. package/src/cli/lib/runTestFunction.ts +3 -3
  284. package/src/cli/run.ts +5 -5
  285. package/src/index.ts +1 -1
  286. package/src/server/impl/registration_impl.ts +0 -2
  287. package/src/server/index.ts +1 -0
  288. package/src/server/meta.ts +17 -0
  289. package/src/server/registration.test.ts +2 -35
  290. package/src/server/registration.ts +10 -19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "convex",
3
3
  "description": "Client for the Convex Cloud",
4
- "version": "1.40.0",
4
+ "version": "1.41.0",
5
5
  "author": "Convex, Inc. <no-reply@convex.dev>",
6
6
  "homepage": "https://convex.dev",
7
7
  "repository": {
@@ -199,6 +199,7 @@
199
199
  ],
200
200
  "devDependencies": {
201
201
  "@auth0/auth0-react": "2.15.1",
202
+ "@babel/code-frame": "^7.27.1",
202
203
  "@babel/parser": "^7.27.1",
203
204
  "@babel/types": "^7.27.1",
204
205
  "@clerk/react": "^6.4.3",
@@ -214,6 +215,7 @@
214
215
  "@swc/core": "1.15.8",
215
216
  "@testing-library/react": "~16.3.0",
216
217
  "@types/adm-zip": "^0.5.7",
218
+ "@types/babel__code-frame": "^7.0.6",
217
219
  "@types/deep-equal": "1.0.4",
218
220
  "@inquirer/confirm": "^6.0.4",
219
221
  "@inquirer/input": "^5.0.4",
@@ -269,7 +271,7 @@
269
271
  "typedoc": "^0.24.6",
270
272
  "typescript": "~5.0.3",
271
273
  "typescript-eslint": "~8.57.0",
272
- "vitest": "^3.2.4",
274
+ "vitest": "^4.1.0",
273
275
  "undici": "7.24.0",
274
276
  "wait-for-expect": "~4.0.0",
275
277
  "zod": "^3.24.0",
@@ -5,10 +5,10 @@ import { ActionRequest, MutationRequest } from "./protocol.js";
5
5
  import { instantiateDefaultLogger } from "../logging.js";
6
6
 
7
7
  let requestManager: RequestManager;
8
- let markConnectionStateDirty: ReturnType<typeof vi.fn>;
8
+ let markConnectionStateDirty: ReturnType<typeof vi.fn<() => void>>;
9
9
 
10
10
  beforeEach(() => {
11
- markConnectionStateDirty = vi.fn();
11
+ markConnectionStateDirty = vi.fn<() => void>();
12
12
  requestManager = new RequestManager(
13
13
  instantiateDefaultLogger({ verbose: false }),
14
14
  markConnectionStateDirty,
@@ -68,7 +68,7 @@ const aiUpdate = new Command("update")
68
68
  " - convex/_generated/ai/guidelines.md\n" +
69
69
  " - AGENTS.md (Convex section only)\n" +
70
70
  " - CLAUDE.md (Convex section only)\n" +
71
- " - Agent skills (installed to each coding agent's native path, configured via convex.json)\n\n",
71
+ " - Agent skills (installed to each coding agent's native path, configured via convex.json)",
72
72
  )
73
73
  .allowExcessArguments(false)
74
74
  .action(async () => {
@@ -130,7 +130,7 @@ const aiRemove = new Command("remove")
130
130
  "Removes the following:\n" +
131
131
  " - convex/_generated/ai/ directory (guidelines.md, ai-files.state.json)\n" +
132
132
  " - Convex sections from AGENTS.md and CLAUDE.md\n" +
133
- " - Agent skills installed by `convex ai-files install`\n\n" +
133
+ " - Agent skills installed by `npx convex ai-files install`\n\n" +
134
134
  "If removing the managed section leaves AGENTS.md or CLAUDE.md empty, the\n" +
135
135
  "empty file is deleted. Otherwise the rest of the file is kept.\n\n" +
136
136
  "Skills installed from other sources are not affected.\n\n" +
@@ -93,9 +93,10 @@ type ConfigureCmdOptions = {
93
93
  /**
94
94
  * As of writing, this is used by:
95
95
  * - `npx convex dev`
96
- * - `npx convex codegen`
96
+ * - `npx convex init`
97
97
  *
98
- * But is not used by `npx convex deploy` or other commands.
98
+ * But is not used by `npx convex deploy`, `npx convex codegen`,
99
+ * `npx convex env`, or other commands.
99
100
  */
100
101
  export async function deploymentCredentialsOrConfigure(
101
102
  ctx: Context,
@@ -692,10 +693,7 @@ async function ensureDeploymentProvisioned(
692
693
  },
693
694
  options.deploymentOptions.kind,
694
695
  );
695
- return {
696
- ...credentials,
697
- onActivity: null,
698
- };
696
+ return credentials;
699
697
  }
700
698
  case "local": {
701
699
  const credentials = await handleLocalDeployment(ctx, {
@@ -13,9 +13,9 @@ export const convexExport = new Command("export")
13
13
  [
14
14
  "Export data, and optionally file storage, from your Convex deployment to a ZIP file.",
15
15
  "",
16
- "- Export to a directory: `npx convex export --path dir/`",
17
- "- Export to a ZIP file: `npx convex export --path snapshot.zip`",
18
- "- Include file storage: `npx convex export --include-file-storage --path dir/`",
16
+ " Export to a directory: `npx convex export --path dir/`",
17
+ " Export to a ZIP file: `npx convex export --path snapshot.zip`",
18
+ " Include file storage: `npx convex export --include-file-storage --path dir/`",
19
19
  "",
20
20
  "By default, this exports from your dev deployment.",
21
21
  "",
@@ -14,8 +14,8 @@ export const convexImport = new Command("import")
14
14
  [
15
15
  "Import data from a file to your Convex deployment.",
16
16
  "",
17
- "- From a snapshot: `npx convex import snapshot.zip`",
18
- "- For a single table: `npx convex import --table tableName file.json`",
17
+ " From a snapshot: `npx convex import snapshot.zip`",
18
+ " For a single table: `npx convex import --table tableName file.json`",
19
19
  "",
20
20
  "By default, this imports into your dev deployment.",
21
21
  "",
@@ -6,7 +6,6 @@ import { logMessage, logOutput, logWarning } from "../bundler/log.js";
6
6
  import { loadSelectedDeploymentCredentials } from "./lib/api.js";
7
7
  import { actionDescription } from "./lib/command.js";
8
8
  import { getDeploymentSelection } from "./lib/deploymentSelection.js";
9
- import { checkIfDashboardIsRunning } from "./lib/localDeployment/dashboard.js";
10
9
  import { DASHBOARD_HOST, getDashboardUrl } from "./lib/dashboard.js";
11
10
  import { isAnonymousDeployment } from "./lib/deployment.js";
12
11
 
@@ -45,8 +44,15 @@ export const dashboard = new Command("dashboard")
45
44
  logWarning(warningMessage);
46
45
  return;
47
46
  }
48
- const isLocalDashboardRunning = await checkIfDashboardIsRunning(ctx);
49
- if (!isLocalDashboardRunning) {
47
+ // The anonymous-mode dashboard is a separate local HTTP server; confirm
48
+ // it's actually serving by hitting its API rather than inferring from the
49
+ // backend.
50
+ if (
51
+ !(await isAnonymousDashboardRunning(
52
+ dashboardUrl,
53
+ deployment.deploymentFields.deploymentName,
54
+ ))
55
+ ) {
50
56
  logWarning(warningMessage);
51
57
  return;
52
58
  }
@@ -57,6 +63,26 @@ export const dashboard = new Command("dashboard")
57
63
  await logOrOpenUrl(ctx, dashboardUrl ?? DASHBOARD_HOST, options.open);
58
64
  });
59
65
 
66
+ async function isAnonymousDashboardRunning(
67
+ dashboardUrl: string,
68
+ deploymentName: string,
69
+ ): Promise<boolean> {
70
+ try {
71
+ // `dashboardUrl` ends with a trailing slash.
72
+ const resp = await fetch(`${dashboardUrl}api/current_deployment`);
73
+ if (resp.status !== 200) {
74
+ return false;
75
+ }
76
+ // The dashboard port is stored per deployment but can be reused by a
77
+ // different anonymous dev session, so confirm this dashboard is actually
78
+ // serving the selected deployment.
79
+ const currentDeployment = (await resp.json()) as { name?: unknown };
80
+ return currentDeployment.name === deploymentName;
81
+ } catch {
82
+ return false;
83
+ }
84
+ }
85
+
60
86
  async function logOrOpenUrl(ctx: Context, url: string, shouldOpen: boolean) {
61
87
  if (shouldOpen) {
62
88
  logMessage(chalkStderr.gray(`Opening ${url} in the default browser...`));
package/src/cli/data.ts CHANGED
@@ -12,8 +12,8 @@ export const data = new Command("data")
12
12
  [
13
13
  "Inspect your Convex deployment's database.",
14
14
  "",
15
- "- List tables: `npx convex data`",
16
- "- List documents in a table: `npx convex data tableName`",
15
+ " List tables: `npx convex data`",
16
+ " List documents in a table: `npx convex data tableName`",
17
17
  "",
18
18
  "By default, this inspects your dev deployment.",
19
19
  "",
package/src/cli/deploy.ts CHANGED
@@ -42,11 +42,11 @@ export const deploy = new Command("deploy")
42
42
  "This is typically used for deploying to a prod or preview deployment manually or from CI; to deploy to your dev deployment when developing, use `npx convex dev`.",
43
43
  "",
44
44
  "The target deployment is chosen like this:",
45
- `- If the \`${CONVEX_DEPLOYMENT_ENV_VAR_NAME}\` environment variable is set (typical during local development), the target is the project’s default production deployment.`,
46
- `- If the \`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\` environment variable is set (typical in CI), it is the deployment associated with that key.`,
47
- ` - When it’s set to a preview deploy key, it will deploy to a preview deployment:`,
48
- ` - with the name of the current Git branch when running in CI (Vercel, Netlify, Cloudflare Pages, GitHub)`,
49
- ` - or with the name specified by the \`--preview-name\` or \`--preview-create\` flags`,
45
+ `• If the \`${CONVEX_DEPLOYMENT_ENV_VAR_NAME}\` environment variable is set (typical during local development), the target is the project’s default production deployment.`,
46
+ `• If the \`${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}\` environment variable is set (typical in CI), it is the deployment associated with that key.`,
47
+ ` When it’s set to a preview deploy key, it will deploy to a preview deployment:`,
48
+ ` with the name of the current Git branch when running in CI (Vercel, Netlify, Cloudflare Pages, GitHub)`,
49
+ ` or with the name specified by the \`--preview-name\` or \`--preview-create\` flags`,
50
50
  "",
51
51
  "`npx convex deploy` will:",
52
52
  " 1. Run a command if specified with `--cmd`, with the deployment URL available as an environment variable.",
@@ -1,6 +1,8 @@
1
1
  import { describe, test, expect, vi, beforeEach, afterEach } from "vitest";
2
2
  // @inquirer/testing/vitest must be imported before modules that use @inquirer/*
3
3
  import { screen } from "@inquirer/testing/vitest";
4
+ import { fileURLToPath } from "url";
5
+ import path from "path";
4
6
  import {
5
7
  typedPlatformClient,
6
8
  typedBigBrainClient,
@@ -13,7 +15,9 @@ import {
13
15
  getDeploymentSelection,
14
16
  getProjectDetails,
15
17
  deploymentNameFromSelection,
18
+ initializeBigBrainAuth,
16
19
  } from "./lib/deploymentSelection.js";
20
+ import type { Context } from "../bundler/context.js";
17
21
  import { saveSelectedDeployment } from "./deploymentSelect.js";
18
22
  import {
19
23
  deploymentCreate,
@@ -25,10 +29,7 @@ import {
25
29
  loadProjectLocalConfig,
26
30
  saveDeploymentConfig,
27
31
  } from "./lib/localDeployment/filePaths.js";
28
- import {
29
- chooseLocalBackendPorts,
30
- LOCAL_BACKEND_INSTANCE_SECRET,
31
- } from "./lib/localDeployment/utils.js";
32
+ import { chooseLocalBackendPorts } from "./lib/localDeployment/utils.js";
32
33
  import { bigBrainStart } from "./lib/localDeployment/bigBrain.js";
33
34
 
34
35
  vi.mock("@sentry/node", () => ({
@@ -36,19 +37,28 @@ vi.mock("@sentry/node", () => ({
36
37
  close: vi.fn(),
37
38
  }));
38
39
 
39
- vi.mock("./lib/utils/utils.js", () => ({
40
- typedPlatformClient: vi.fn(),
41
- typedBigBrainClient: vi.fn(),
42
- selectRegion: vi.fn(),
43
- logNoDefaultRegionMessage: vi.fn(),
44
- }));
40
+ vi.mock("./lib/utils/utils.js", async (importOriginal) => {
41
+ const actual = await importOriginal<typeof import("./lib/utils/utils.js")>();
42
+ return {
43
+ ...actual,
44
+ typedPlatformClient: vi.fn(),
45
+ typedBigBrainClient: vi.fn(),
46
+ selectRegion: vi.fn(),
47
+ logNoDefaultRegionMessage: vi.fn(),
48
+ };
49
+ });
45
50
 
46
- vi.mock("./lib/deploymentSelection.js", () => ({
47
- initializeBigBrainAuth: vi.fn(),
48
- getDeploymentSelection: vi.fn(),
49
- getProjectDetails: vi.fn(),
50
- deploymentNameFromSelection: vi.fn().mockReturnValue(null),
51
- }));
51
+ vi.mock("./lib/deploymentSelection.js", async (importOriginal) => {
52
+ const actual =
53
+ await importOriginal<typeof import("./lib/deploymentSelection.js")>();
54
+ return {
55
+ ...actual,
56
+ initializeBigBrainAuth: vi.fn(),
57
+ getDeploymentSelection: vi.fn(),
58
+ getProjectDetails: vi.fn(),
59
+ deploymentNameFromSelection: vi.fn().mockReturnValue(null),
60
+ };
61
+ });
52
62
 
53
63
  vi.mock("./deploymentSelect.js", () => ({
54
64
  saveSelectedDeployment: vi.fn(),
@@ -65,13 +75,17 @@ vi.mock("./lib/localDeployment/filePaths.js", () => ({
65
75
 
66
76
  vi.mock("./lib/localDeployment/utils.js", () => ({
67
77
  chooseLocalBackendPorts: vi.fn(),
68
- LOCAL_BACKEND_INSTANCE_SECRET: "MockSecret123",
69
78
  }));
70
79
 
71
80
  vi.mock("./lib/localDeployment/bigBrain.js", () => ({
72
81
  bigBrainStart: vi.fn(),
73
82
  }));
74
83
 
84
+ const fakeLocalDevBinary = path.join(
85
+ path.dirname(fileURLToPath(import.meta.url)),
86
+ "lib/localDeployment/tests/keygenSuccess.mjs",
87
+ );
88
+
75
89
  const mockRegions = [
76
90
  {
77
91
  name: "aws-us-east-1" as const,
@@ -104,6 +118,44 @@ const mockPlatformGet = vi.fn();
104
118
  const mockPlatformPost = vi.fn();
105
119
  const mockBigBrainGet = vi.fn();
106
120
 
121
+ function setAuthKind(
122
+ kind: "accessToken" | "deploymentKey" | "projectKey" | "previewDeployKey",
123
+ ) {
124
+ vi.mocked(initializeBigBrainAuth).mockImplementation(async (ctx) => {
125
+ const fakeAuth =
126
+ kind === "accessToken"
127
+ ? {
128
+ kind: "accessToken" as const,
129
+ accessToken: "test-token",
130
+ header: "Bearer test-token",
131
+ }
132
+ : kind === "deploymentKey"
133
+ ? {
134
+ kind: "deploymentKey" as const,
135
+ deploymentKey: "dev:foo|secret",
136
+ header: "Bearer dev:foo|secret",
137
+ }
138
+ : kind === "projectKey"
139
+ ? {
140
+ kind: "projectKey" as const,
141
+ projectKey: "project:foo|secret",
142
+ header: "Bearer project:foo|secret",
143
+ }
144
+ : {
145
+ kind: "previewDeployKey" as const,
146
+ previewDeployKey: "preview:t:p|secret",
147
+ header: "Bearer preview:t:p|secret",
148
+ };
149
+ (ctx as Context)._updateBigBrainAuth(fakeAuth);
150
+ });
151
+ }
152
+
153
+ function setNoAuth() {
154
+ vi.mocked(initializeBigBrainAuth).mockImplementation(async (ctx) => {
155
+ (ctx as Context)._updateBigBrainAuth(null);
156
+ });
157
+ }
158
+
107
159
  function setupPlatformClient() {
108
160
  vi.mocked(typedPlatformClient).mockReturnValue({
109
161
  GET: mockPlatformGet,
@@ -123,6 +175,8 @@ beforeEach(() => {
123
175
  mockPlatformGet.mockReset();
124
176
  mockPlatformPost.mockReset();
125
177
  mockBigBrainGet.mockReset();
178
+ // Default to a logged-in personal access token; guard tests override this.
179
+ setAuthKind("accessToken");
126
180
  });
127
181
 
128
182
  afterEach(() => {
@@ -161,6 +215,60 @@ function setupPlatformForCreate(overrides?: Record<string, unknown>) {
161
215
  });
162
216
  }
163
217
 
218
+ describe("deploy key guard", () => {
219
+ test.each(["deploymentKey", "previewDeployKey"] as const)(
220
+ "crashes before any platform call when authed with a %s",
221
+ async (kind) => {
222
+ setAuthKind(kind);
223
+ setupPlatformClient();
224
+
225
+ await expect(
226
+ deploymentCreate.parseAsync(["my-deployment", "--type", "dev"], {
227
+ from: "user",
228
+ }),
229
+ ).rejects.toThrow();
230
+
231
+ expect(process.stderr.write).toHaveBeenCalledWith(
232
+ expect.stringContaining("isn't supported with a deploy key"),
233
+ );
234
+ expect(mockPlatformGet).not.toHaveBeenCalled();
235
+ expect(mockPlatformPost).not.toHaveBeenCalled();
236
+ },
237
+ );
238
+
239
+ test("crashes when no auth is configured at all", async () => {
240
+ setNoAuth();
241
+ setupPlatformClient();
242
+
243
+ await expect(
244
+ deploymentCreate.parseAsync(["my-deployment", "--type", "dev"], {
245
+ from: "user",
246
+ }),
247
+ ).rejects.toThrow();
248
+
249
+ expect(process.stderr.write).toHaveBeenCalledWith(
250
+ expect.stringContaining("Creating a deployment requires logging in"),
251
+ );
252
+ expect(mockPlatformGet).not.toHaveBeenCalled();
253
+ expect(mockPlatformPost).not.toHaveBeenCalled();
254
+ });
255
+
256
+ test("also guards local deployment creation", async () => {
257
+ setAuthKind("deploymentKey");
258
+ setupPlatformClient();
259
+
260
+ await expect(
261
+ deploymentCreate.parseAsync(["local"], { from: "user" }),
262
+ ).rejects.toThrow();
263
+
264
+ expect(process.stderr.write).toHaveBeenCalledWith(
265
+ expect.stringContaining("isn't supported with a deploy key"),
266
+ );
267
+ expect(mockPlatformGet).not.toHaveBeenCalled();
268
+ expect(mockPlatformPost).not.toHaveBeenCalled();
269
+ });
270
+ });
271
+
164
272
  describe("non-interactive create flow", () => {
165
273
  beforeEach(() => {
166
274
  vi.mocked(getDeploymentSelection).mockReset();
@@ -209,7 +317,7 @@ describe("non-interactive create flow", () => {
209
317
  vi.mocked(getProjectDetails).mockResolvedValue(fakeProject);
210
318
  vi.mocked(loadProjectLocalConfig).mockReturnValue(null);
211
319
  vi.mocked(ensureBackendBinaryDownloaded).mockResolvedValue({
212
- binaryPath: "/path",
320
+ binaryPath: fakeLocalDevBinary,
213
321
  version: "1.0.0",
214
322
  });
215
323
  vi.mocked(chooseLocalBackendPorts).mockResolvedValue({
@@ -233,8 +341,8 @@ describe("non-interactive create flow", () => {
233
341
  {
234
342
  backendVersion: "1.0.0",
235
343
  ports: { cloud: 3210, site: 3211 },
236
- adminKey: "test-key",
237
- instanceSecret: LOCAL_BACKEND_INSTANCE_SECRET,
344
+ adminKey: "local-test-123|mock_admin_key",
345
+ instanceSecret: expect.anything(),
238
346
  cloudProjectId: fakeProject.id,
239
347
  },
240
348
  );
@@ -261,7 +369,7 @@ describe("non-interactive create flow", () => {
261
369
  vi.mocked(getProjectDetails).mockResolvedValue(fakeProject);
262
370
  vi.mocked(loadProjectLocalConfig).mockReturnValue(null);
263
371
  vi.mocked(ensureBackendBinaryDownloaded).mockResolvedValue({
264
- binaryPath: "/path",
372
+ binaryPath: fakeLocalDevBinary,
265
373
  version: "1.0.0",
266
374
  });
267
375
  vi.mocked(chooseLocalBackendPorts).mockResolvedValue({
@@ -405,6 +513,25 @@ describe("non-interactive create flow", () => {
405
513
  );
406
514
  });
407
515
 
516
+ test("allows a project key (creates the deployment)", async () => {
517
+ setAuthKind("projectKey");
518
+ setupPlatformForCreate();
519
+
520
+ await deploymentCreate.parseAsync(["my-deployment", "--type", "dev"], {
521
+ from: "user",
522
+ });
523
+
524
+ expect(mockPlatformPost).toHaveBeenCalledWith(
525
+ "/projects/{project_id}/create_deployment",
526
+ expect.objectContaining({
527
+ body: expect.objectContaining({
528
+ type: "dev",
529
+ reference: "my-deployment",
530
+ }),
531
+ }),
532
+ );
533
+ });
534
+
408
535
  test("creates a prod deployment with ref and --type prod", async () => {
409
536
  setupPlatformForCreate({
410
537
  deploymentType: "prod",
@@ -661,7 +788,7 @@ describe("non-interactive create flow", () => {
661
788
  });
662
789
  vi.mocked(loadProjectLocalConfig).mockReturnValue(null);
663
790
  vi.mocked(ensureBackendBinaryDownloaded).mockResolvedValue({
664
- binaryPath: "/path",
791
+ binaryPath: fakeLocalDevBinary,
665
792
  version: "1.0.0",
666
793
  });
667
794
  vi.mocked(chooseLocalBackendPorts).mockResolvedValue({
@@ -697,7 +824,7 @@ describe("non-interactive create flow", () => {
697
824
  "local",
698
825
  "local-other_team-other_project-xyz",
699
826
  expect.objectContaining({
700
- adminKey: "other-key",
827
+ adminKey: "local-other_team-other_project-xyz|mock_admin_key",
701
828
  cloudProjectId: 999,
702
829
  }),
703
830
  );
@@ -730,7 +857,7 @@ describe("non-interactive create flow", () => {
730
857
  });
731
858
  vi.mocked(loadProjectLocalConfig).mockReturnValue(null);
732
859
  vi.mocked(ensureBackendBinaryDownloaded).mockResolvedValue({
733
- binaryPath: "/path",
860
+ binaryPath: fakeLocalDevBinary,
734
861
  version: "1.0.0",
735
862
  });
736
863
  vi.mocked(chooseLocalBackendPorts).mockResolvedValue({
@@ -9,6 +9,7 @@ import {
9
9
  } from "../bundler/log.js";
10
10
  import {
11
11
  DeploymentSelection,
12
+ ensureAuthCanCreateDeployment,
12
13
  getDeploymentSelection,
13
14
  getProjectDetails,
14
15
  deploymentNameFromSelection,
@@ -35,14 +36,12 @@ import {
35
36
  loadProjectLocalConfig,
36
37
  saveDeploymentConfig,
37
38
  } from "./lib/localDeployment/filePaths.js";
38
- import {
39
- chooseLocalBackendPorts,
40
- LOCAL_BACKEND_INSTANCE_SECRET,
41
- } from "./lib/localDeployment/utils.js";
39
+ import { chooseLocalBackendPorts } from "./lib/localDeployment/utils.js";
42
40
  import { bigBrainStart } from "./lib/localDeployment/bigBrain.js";
43
41
  import { importDefaultEnvVars } from "./lib/localDeployment/localDeployment.js";
44
42
  import { localDeploymentUrl } from "./lib/localDeployment/run.js";
45
43
  import { announceDeploymentTarget } from "./lib/announceDeploymentTarget.js";
44
+ import { generateLocalDevSecrets } from "./lib/localDeployment/secrets.js";
46
45
 
47
46
  const SUPPORTED_TYPES = ["dev", "prod", "preview"] as const;
48
47
 
@@ -52,8 +51,8 @@ export const deploymentCreate = new Command("create")
52
51
  [
53
52
  "Create a new deployment for a project.",
54
53
  "",
55
- "- Create a dev deployment and select it: `npx convex deployment create dev/my-new-feature --type dev --select`",
56
- "- Create a prod deployment named “staging”: `npx convex deployment create staging --type prod`",
54
+ " Create a dev deployment and select it: `npx convex deployment create dev/my-new-feature --type dev --select`",
55
+ " Create a prod deployment named “staging”: `npx convex deployment create staging --type prod`",
57
56
  ].join("\n"),
58
57
  )
59
58
  .argument(
@@ -91,6 +90,12 @@ export const deploymentCreate = new Command("create")
91
90
  envFile: undefined,
92
91
  });
93
92
 
93
+ // Creating a deployment goes through the platform API, which accepts
94
+ // personal access tokens and project keys but not deployment/preview deploy
95
+ // keys. Fail fast (and clearly) for the unsupported keys rather than
96
+ // surfacing an opaque 401 from the lookup below.
97
+ await ensureAuthCanCreateDeployment(ctx);
98
+
94
99
  const currentDeployment = await getDeploymentSelection(ctx, {
95
100
  url: undefined,
96
101
  adminKey: undefined,
@@ -282,25 +287,30 @@ export async function createLocalDeployment(
282
287
  : await resolveProject(ctx, currentDeployment);
283
288
 
284
289
  showSpinner("Downloading local backend...");
285
- const { version } = await ensureBackendBinaryDownloaded(ctx, {
286
- kind: "latest",
287
- });
290
+ const { version, binaryPath: latestBinaryPath } =
291
+ await ensureBackendBinaryDownloaded(ctx, {
292
+ kind: "latest",
293
+ });
288
294
 
289
295
  const { cloudPort, sitePort } = await chooseLocalBackendPorts(ctx);
290
296
 
291
297
  showSpinner("Registering local deployment...");
292
- const { deploymentName, adminKey } = await bigBrainStart(ctx, {
298
+ const { deploymentName } = await bigBrainStart(ctx, {
293
299
  port: cloudPort,
294
300
  projectSlug,
295
301
  teamSlug,
296
302
  instanceName: null,
297
303
  });
304
+ const { instanceSecret, adminKey } = await generateLocalDevSecrets(ctx, {
305
+ deploymentName,
306
+ latestBinaryPath,
307
+ });
298
308
 
299
309
  saveDeploymentConfig(ctx, "local", deploymentName, {
300
310
  backendVersion: version,
301
311
  ports: { cloud: cloudPort, site: sitePort },
302
312
  adminKey,
303
- instanceSecret: LOCAL_BACKEND_INSTANCE_SECRET,
313
+ instanceSecret,
304
314
  cloudProjectId,
305
315
  });
306
316
 
@@ -38,11 +38,11 @@ export const deploymentSelect = new Command("select")
38
38
  "",
39
39
  "The deployment will be used by all `npx convex` commands, except `npx convex deploy`. You can also run individual commands on another deployment by using the --deployment flag on that command.",
40
40
  "",
41
- "- Select your personal cloud dev deployment in the current project: `npx convex deployment select dev`",
42
- "- Select your local deployment: `npx convex deployment select local`",
43
- "- Select a deployment in the same project by its reference: `npx convex deployment select dev/james`",
44
- "- Select a deployment in another project in the same team: `npx convex deployment select some-project:dev/james`",
45
- "- Select a deployment in a particular team/project: `npx convex deployment select some-team:some-project:dev/james`",
41
+ " Select your personal cloud dev deployment in the current project: `npx convex deployment select dev`",
42
+ " Select your local deployment: `npx convex deployment select local`",
43
+ " Select a deployment in the same project by its reference: `npx convex deployment select dev/james`",
44
+ " Select a deployment in another project in the same team: `npx convex deployment select some-project:dev/james`",
45
+ " Select a deployment in a particular team/project: `npx convex deployment select some-team:some-project:dev/james`",
46
46
  ].join("\n"),
47
47
  )
48
48
  .argument("<deployment>", "The deployment to use")
@@ -271,7 +271,6 @@ describe("deployment selection flows", () => {
271
271
  deploymentName: "local-test",
272
272
  deploymentUrl: "http://127.0.0.1:3210",
273
273
  adminKey: "local|admin|key",
274
- onActivity: async () => {},
275
274
  } as any);
276
275
  vi.mocked(loadLocalDeploymentCredentials).mockResolvedValue({
277
276
  deploymentName: "local-test",
@@ -291,7 +290,6 @@ describe("deployment selection flows", () => {
291
290
  adminKey: "anon|admin|key",
292
291
  reference: null,
293
292
  isDefault: false,
294
- onActivity: async () => {},
295
293
  });
296
294
  });
297
295
 
@@ -2295,7 +2293,6 @@ describe("deployment selection flows", () => {
2295
2293
  deploymentName: "my-local-deployment",
2296
2294
  deploymentUrl: "http://127.0.0.1:3210",
2297
2295
  adminKey: "fresh|admin|key",
2298
- onActivity: async () => {},
2299
2296
  } as any);
2300
2297
 
2301
2298
  setupBigBrainRoutes({