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,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,9 +17,18 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
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
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var logout_exports = {};
20
30
  __export(logout_exports, {
31
+ createLogoutCommand: () => createLogoutCommand,
21
32
  logout: () => logout
22
33
  });
23
34
  module.exports = __toCommonJS(logout_exports);
@@ -26,17 +37,107 @@ var import_context = require("../bundler/context.js");
26
37
  var import_log = require("../bundler/log.js");
27
38
  var import_fsUtils = require("./lib/fsUtils.js");
28
39
  var import_globalConfig = require("./lib/utils/globalConfig.js");
29
- const logout = new import_extra_typings.Command("logout").description("Log out of Convex on this machine").allowExcessArguments(false).action(async () => {
30
- const ctx = await (0, import_context.oneoffContext)({
31
- url: void 0,
32
- adminKey: void 0,
33
- envFile: void 0
40
+ var import_profiles = require("./lib/profiles.js");
41
+ var import_path = __toESM(require("path"), 1);
42
+ var import_utils = require("./lib/utils/utils.js");
43
+ var import_prompts = require("./lib/utils/prompts.js");
44
+ function createLogoutCommand() {
45
+ return new import_extra_typings.Command("logout").description(
46
+ "Log out of the selected account. Directory selections are preserved."
47
+ ).option("--account <name>", "Remove only this account's saved credentials").option(
48
+ "--all",
49
+ "Remove all saved account credentials, preserving account selections"
50
+ ).allowExcessArguments(false).action(async (options, cmd) => {
51
+ if (options.all && options.account !== void 0)
52
+ cmd.error("Pass either --account or --all, not both.");
53
+ const ctx = await (0, import_context.oneoffContext)({
54
+ url: void 0,
55
+ adminKey: void 0,
56
+ envFile: void 0,
57
+ skipAuth: true
58
+ });
59
+ let all = !!options.all;
60
+ let profile = all ? null : await (0, import_profiles.getProfileSelection)(ctx, { name: options.account });
61
+ if (!all && options.account === void 0 && process.stdin.isTTY && profile !== null) {
62
+ const token = (0, import_profiles.readProfileToken)(ctx, profile.name);
63
+ const settings = await (0, import_profiles.readProfileSettings)(ctx);
64
+ const selectedName = profile.name;
65
+ const hasOtherLogins = (0, import_profiles.savedProfileNames)(ctx).some((name) => name !== selectedName) || typeof settings.accessToken === "string" && settings.accessToken.length > 0 && settings.accessToken !== token;
66
+ if (hasOtherLogins) {
67
+ const scope = await (0, import_prompts.promptOptions)(ctx, {
68
+ message: "Which saved logins would you like to log out of?",
69
+ choices: [
70
+ { name: `Only account "${profile.name}"`, value: "profile" },
71
+ { name: "All saved logins on this device", value: "all" }
72
+ ],
73
+ default: "profile"
74
+ });
75
+ if (scope === "all") {
76
+ profile = null;
77
+ all = true;
78
+ }
79
+ }
80
+ }
81
+ let warnAboutLegacyCredentials = false;
82
+ if (profile !== null) {
83
+ const selectedName = profile.name;
84
+ await (0, import_profiles.updateProfileSettings)(
85
+ ctx,
86
+ (settings) => {
87
+ const token = (0, import_profiles.readProfileToken)(ctx, selectedName);
88
+ if (token !== null && settings.accessToken === token) {
89
+ delete settings.accessToken;
90
+ } else if (settings.defaultProfile === selectedName && typeof settings.accessToken === "string" && settings.accessToken.length > 0) {
91
+ warnAboutLegacyCredentials = true;
92
+ }
93
+ },
94
+ () => {
95
+ const configPath = (0, import_profiles.profileConfigPath)(selectedName);
96
+ (0, import_fsUtils.recursivelyDelete)(ctx, configPath, {
97
+ force: true,
98
+ followSymlinks: false
99
+ });
100
+ }
101
+ );
102
+ } else {
103
+ await (0, import_profiles.updateProfileSettings)(
104
+ ctx,
105
+ async (settings) => {
106
+ if (!all && (0, import_profiles.savedProfileNames)(ctx).length > 0 && settings.accessToken === void 0) {
107
+ return await ctx.crash({
108
+ exitCode: 1,
109
+ errorType: "fatal",
110
+ printedMessage: "No account is selected. Use `npx convex logout --account <name>` or `npx convex logout --all`."
111
+ });
112
+ }
113
+ delete settings.accessToken;
114
+ },
115
+ () => {
116
+ const profilesDir = import_path.default.join((0, import_utils.rootDirectory)(), "profiles");
117
+ if (all)
118
+ (0, import_fsUtils.recursivelyDelete)(ctx, profilesDir, {
119
+ force: true,
120
+ followSymlinks: false
121
+ });
122
+ }
123
+ );
124
+ }
125
+ (0, import_log.logFinishedStep)(
126
+ profile !== null ? `Removed credentials for account "${profile.name}".
127
+ Run \`npx convex login --account ${profile.name}\` to log in.` : `${all ? "Removed all saved Convex account credentials." : "Removed your saved Convex login credentials."}
128
+ Run \`npx convex login\` to log in.`
129
+ );
130
+ if (warnAboutLegacyCredentials) {
131
+ (0, import_log.logWarning)(
132
+ `Saved credentials remain in ${(0, import_globalConfig.globalConfigPath)()} for older CLI versions. To remove all saved account credentials, run \`npx convex logout --all\`.`
133
+ );
134
+ }
135
+ if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {
136
+ (0, import_log.logMessage)(
137
+ "CONVEX_OVERRIDE_ACCESS_TOKEN still supplies credentials. Unset it to stop using that token."
138
+ );
139
+ }
34
140
  });
35
- if (ctx.fs.exists((0, import_globalConfig.globalConfigPath)())) {
36
- (0, import_fsUtils.recursivelyDelete)(ctx, (0, import_globalConfig.globalConfigPath)());
37
- }
38
- (0, import_log.logFinishedStep)(
39
- "You have been logged out of Convex.\n Run `npx convex dev` to log in."
40
- );
41
- });
141
+ }
142
+ const logout = createLogoutCommand();
42
143
  //# sourceMappingURL=logout.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/logout.ts"],
4
- "sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep } from \"../bundler/log.js\";\nimport { recursivelyDelete } from \"./lib/fsUtils.js\";\nimport { globalConfigPath } from \"./lib/utils/globalConfig.js\";\n\nexport const logout = new Command(\"logout\")\n .description(\"Log out of Convex on this machine\")\n .allowExcessArguments(false)\n .action(async () => {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n if (ctx.fs.exists(globalConfigPath())) {\n recursivelyDelete(ctx, globalConfigPath());\n }\n\n logFinishedStep(\n \"You have been logged out of Convex.\\n Run `npx convex dev` to log in.\",\n );\n });\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwB;AACxB,qBAA8B;AAC9B,iBAAgC;AAChC,qBAAkC;AAClC,0BAAiC;AAE1B,MAAM,SAAS,IAAI,6BAAQ,QAAQ,EACvC,YAAY,mCAAmC,EAC/C,qBAAqB,KAAK,EAC1B,OAAO,YAAY;AAClB,QAAM,MAAM,UAAM,8BAAc;AAAA,IAC9B,KAAK;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EACX,CAAC;AAED,MAAI,IAAI,GAAG,WAAO,sCAAiB,CAAC,GAAG;AACrC,0CAAkB,SAAK,sCAAiB,CAAC;AAAA,EAC3C;AAEA;AAAA,IACE;AAAA,EACF;AACF,CAAC;",
6
- "names": []
4
+ "sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, logWarning } from \"../bundler/log.js\";\nimport { recursivelyDelete } from \"./lib/fsUtils.js\";\nimport { globalConfigPath } from \"./lib/utils/globalConfig.js\";\nimport {\n getProfileSelection,\n profileConfigPath,\n readProfileToken,\n readProfileSettings,\n updateProfileSettings,\n savedProfileNames,\n} from \"./lib/profiles.js\";\nimport path from \"path\";\nimport { rootDirectory } from \"./lib/utils/utils.js\";\nimport { promptOptions } from \"./lib/utils/prompts.js\";\n\nexport function createLogoutCommand() {\n return new Command(\"logout\")\n .description(\n \"Log out of the selected account. Directory selections are preserved.\",\n )\n .option(\"--account <name>\", \"Remove only this account's saved credentials\")\n .option(\n \"--all\",\n \"Remove all saved account credentials, preserving account selections\",\n )\n .allowExcessArguments(false)\n .action(async (options, cmd) => {\n if (options.all && options.account !== undefined)\n cmd.error(\"Pass either --account or --all, not both.\");\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n skipAuth: true,\n });\n\n let all = !!options.all;\n let profile = all\n ? null\n : await getProfileSelection(ctx, { name: options.account });\n if (\n !all &&\n options.account === undefined &&\n process.stdin.isTTY &&\n profile !== null\n ) {\n const token = readProfileToken(ctx, profile.name);\n const settings = await readProfileSettings(ctx);\n const selectedName = profile.name;\n // A matching compatibility token is another copy of this account's login.\n const hasOtherLogins =\n savedProfileNames(ctx).some((name) => name !== selectedName) ||\n (typeof settings.accessToken === \"string\" &&\n settings.accessToken.length > 0 &&\n settings.accessToken !== token);\n if (hasOtherLogins) {\n const scope = await promptOptions(ctx, {\n message: \"Which saved logins would you like to log out of?\",\n choices: [\n { name: `Only account \"${profile.name}\"`, value: \"profile\" },\n { name: \"All saved logins on this device\", value: \"all\" },\n ],\n default: \"profile\",\n });\n if (scope === \"all\") {\n profile = null;\n all = true;\n }\n }\n }\n\n let warnAboutLegacyCredentials = false;\n if (profile !== null) {\n const selectedName = profile.name;\n await updateProfileSettings(\n ctx,\n (settings) => {\n const token = readProfileToken(ctx, selectedName);\n // A migrated account can share its token with old CLI versions.\n if (token !== null && settings.accessToken === token) {\n delete settings.accessToken;\n } else if (\n settings.defaultProfile === selectedName &&\n typeof settings.accessToken === \"string\" &&\n settings.accessToken.length > 0\n ) {\n // Editing the default or logging in with an older CLI can leave this\n // token belonging to a different account.\n warnAboutLegacyCredentials = true;\n }\n },\n () => {\n const configPath = profileConfigPath(selectedName);\n recursivelyDelete(ctx, configPath, {\n force: true,\n followSymlinks: false,\n });\n },\n );\n } else {\n await updateProfileSettings(\n ctx,\n async (settings) => {\n if (\n !all &&\n savedProfileNames(ctx).length > 0 &&\n settings.accessToken === undefined\n ) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"No account is selected. Use `npx convex logout --account <name>` or `npx convex logout --all`.\",\n });\n }\n delete settings.accessToken;\n },\n () => {\n const profilesDir = path.join(rootDirectory(), \"profiles\");\n if (all)\n recursivelyDelete(ctx, profilesDir, {\n force: true,\n followSymlinks: false,\n });\n },\n );\n }\n\n logFinishedStep(\n profile !== null\n ? `Removed credentials for account \"${profile.name}\".\\n Run \\`npx convex login --account ${profile.name}\\` to log in.`\n : `${all ? \"Removed all saved Convex account credentials.\" : \"Removed your saved Convex login credentials.\"}\\n Run \\`npx convex login\\` to log in.`,\n );\n if (warnAboutLegacyCredentials) {\n logWarning(\n `Saved credentials remain in ${globalConfigPath()} for older CLI versions. To remove all saved account credentials, run \\`npx convex logout --all\\`.`,\n );\n }\n if (process.env.CONVEX_OVERRIDE_ACCESS_TOKEN) {\n logMessage(\n \"CONVEX_OVERRIDE_ACCESS_TOKEN still supplies credentials. Unset it to stop using that token.\",\n );\n }\n });\n}\n\nexport const logout = createLogoutCommand();\n"],
5
+ "mappings": "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",
6
+ "names": ["path"]
7
7
  }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
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
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var mcp_exports = {};
20
30
  __export(mcp_exports, {
@@ -22,6 +32,7 @@ __export(mcp_exports, {
22
32
  mcp: () => mcp
23
33
  });
24
34
  module.exports = __toCommonJS(mcp_exports);
35
+ var import_path = __toESM(require("path"), 1);
25
36
  var import_extra_typings = require("@commander-js/extra-typings");
26
37
  var import_context = require("../bundler/context.js");
27
38
  var import_log = require("../bundler/log.js");
@@ -99,6 +110,11 @@ function enabledTools(options) {
99
110
  function makeServer(options) {
100
111
  const enabledToolsByName = enabledTools(options);
101
112
  const mutex = new import_mutex.Mutex();
113
+ const serverDirectory = process.cwd();
114
+ options = {
115
+ ...options,
116
+ envFile: options.envFile === void 0 ? void 0 : import_path.default.resolve(serverDirectory, options.envFile)
117
+ };
102
118
  const server = new import_server.Server(
103
119
  {
104
120
  name: "Convex MCP Server",
@@ -112,16 +128,7 @@ function makeServer(options) {
112
128
  );
113
129
  server.setRequestHandler("tools/call", async (request) => {
114
130
  const ctx = new import_requestContext.RequestContext(options);
115
- await (0, import_deploymentSelection.initializeBigBrainAuth)(ctx, options);
116
131
  try {
117
- const authorized = await (0, import_login.checkAuthorization)(ctx, false);
118
- if (!authorized) {
119
- await ctx.crash({
120
- exitCode: 1,
121
- errorType: "fatal",
122
- printedMessage: "Not Authorized: Run `npx convex dev` to login to your Convex project."
123
- });
124
- }
125
132
  if (!request.params.arguments) {
126
133
  await ctx.crash({
127
134
  exitCode: 1,
@@ -139,7 +146,33 @@ function makeServer(options) {
139
146
  }
140
147
  const input = convexTool.inputSchema.parse(request.params.arguments);
141
148
  const result = await mutex.runExclusive(async () => {
142
- return await convexTool.handler(ctx, input);
149
+ const projectDir = "deploymentSelector" in input ? ctx.decodeDeploymentSelectorUnchecked(input.deploymentSelector).projectDir : ("projectDir" in input ? input.projectDir : void 0) ?? options.projectDir;
150
+ const previousDirectory = process.cwd();
151
+ try {
152
+ if (projectDir !== void 0)
153
+ process.chdir(import_path.default.resolve(serverDirectory, projectDir));
154
+ await (0, import_deploymentSelection.initializeBigBrainAuth)(ctx, options);
155
+ if (!await (0, import_login.checkAuthorization)(ctx, false)) {
156
+ await ctx.crash({
157
+ exitCode: 1,
158
+ errorType: "fatal",
159
+ printedMessage: "Not Authorized: Run `npx convex dev` to login to your Convex project."
160
+ });
161
+ }
162
+ const absoluteDirectory = process.cwd();
163
+ const resolvedInput = "deploymentSelector" in input ? {
164
+ ...input,
165
+ deploymentSelector: (0, import_requestContext.encodeDeploymentSelector)(
166
+ absoluteDirectory,
167
+ ctx.decodeDeploymentSelectorUnchecked(
168
+ input.deploymentSelector
169
+ ).deployment
170
+ )
171
+ } : projectDir === void 0 ? input : { ...input, projectDir: absoluteDirectory };
172
+ return await convexTool.handler(ctx, resolvedInput);
173
+ } finally {
174
+ process.chdir(previousDirectory);
175
+ }
143
176
  });
144
177
  return {
145
178
  content: [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/mcp.ts"],
4
- "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logError } from \"../bundler/log.js\";\nimport { CallToolRequest, Server } from \"@modelcontextprotocol/server\";\nimport { serveStdio } from \"@modelcontextprotocol/server/stdio\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n McpOptions,\n RequestContext,\n RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n .description(\n \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n \"This server exposes your Convex codebase to AI tools in a structured way.\",\n )\n .allowExcessArguments(false);\n\nmcp\n .command(\"start\")\n .summary(\"Start the MCP server\")\n .description(\n \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n )\n .option(\n \"--project-dir <project-dir>\",\n \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n )\n .option(\n \"--disable-tools <tool-names>\",\n `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n )\n .option(\n \"--cautiously-allow-production-pii\",\n \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n false,\n )\n .option(\n \"--dangerously-enable-production-deployments\",\n \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n false,\n )\n // Deprecated option, we swapped the default. no-op.\n .addOption(\n new Option(\"--disable-production-deployments\")\n .conflicts(\"--dangerously-enable-production-deployments\")\n .hideHelp(),\n )\n .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n .action(async (options) => {\n const ctx = await oneoffContext(options);\n try {\n // `serveStdio` only calls the factory once a client connects, and answers\n // a factory throw with an opaque `-32603`, so reject a bad\n // `--disable-tools` here instead.\n enabledTools(options);\n } catch (error: any) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Failed to start MCP server: ${error}`,\n printedMessage: `Failed to start MCP server: ${error}`,\n });\n }\n // The SDK picks the era from the client's opening message: a request\n // carrying the 2026-07-28 `_meta` envelope pins a stateless connection,\n // while an `initialize` is still served by the same factory over the legacy\n // protocol.\n // The returned handle's `close()` is intentionally never called: the\n // server lives until the client kills the process, and process exit tears\n // the transport down.\n serveStdio(() => makeServer(options), {\n legacy: \"serve\",\n // The only channel for out-of-band failures (transport errors, dropped\n // malformed notifications). stdout carries the protocol, so they go to\n // stderr.\n onerror: (error) => logError(`MCP server error: ${error.message}`),\n });\n // Keep the process running\n await new Promise(() => {});\n });\n\nfunction enabledTools(\n options: McpOptions,\n): Record<string, ConvexTool<any, any>> {\n const disabledToolNames = new Set<string>();\n for (const toolName of options.disableTools?.split(\",\") ?? []) {\n const name = toolName.trim();\n if (!allToolNames.includes(name)) {\n // eslint-disable-next-line no-restricted-syntax\n throw new Error(\n `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n );\n }\n disabledToolNames.add(name);\n }\n\n const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n for (const tool of convexTools) {\n if (!disabledToolNames.has(tool.name)) {\n enabledToolsByName[tool.name] = tool;\n }\n }\n return enabledToolsByName;\n}\n\nexport function makeServer(options: McpOptions) {\n const enabledToolsByName = enabledTools(options);\n const mutex = new Mutex();\n const server = new Server(\n {\n name: \"Convex MCP Server\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n server.setRequestHandler(\"tools/call\", async (request: CallToolRequest) => {\n const ctx = new RequestContext(options);\n await initializeBigBrainAuth(ctx, options);\n try {\n const authorized = await checkAuthorization(ctx, false);\n if (!authorized) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n });\n }\n if (!request.params.arguments) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No arguments provided\",\n });\n }\n const convexTool = enabledToolsByName[request.params.name];\n if (!convexTool) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Tool ${request.params.name} not found`,\n });\n }\n const input = convexTool.inputSchema.parse(request.params.arguments);\n\n // Serialize tool handlers since they're mutating the current working directory.\n const result = await mutex.runExclusive(async () => {\n return await convexTool.handler(ctx, input);\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n let message: string;\n if (error instanceof RequestCrash) {\n message = error.printedMessage;\n } else if (error instanceof Error) {\n message = error.message;\n } else {\n message = String(error);\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }),\n },\n ],\n isError: true,\n };\n }\n });\n server.setRequestHandler(\"tools/list\", async () => {\n return {\n tools: Object.values(enabledToolsByName).map(mcpTool),\n };\n });\n return server;\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import path from \"path\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logError } from \"../bundler/log.js\";\nimport { CallToolRequest, Server } from \"@modelcontextprotocol/server\";\nimport { serveStdio } from \"@modelcontextprotocol/server/stdio\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { checkAuthorization } from \"./lib/login.js\";\nimport {\n encodeDeploymentSelector,\n McpOptions,\n RequestContext,\n RequestCrash,\n} from \"./lib/mcp/requestContext.js\";\nimport { mcpTool, convexTools, ConvexTool } from \"./lib/mcp/tools/index.js\";\nimport { Mutex } from \"./lib/utils/mutex.js\";\nimport { initializeBigBrainAuth } from \"./lib/deploymentSelection.js\";\n\nconst allToolNames = convexTools.map((t) => t.name).sort();\n\nexport const mcp = new Command(\"mcp\")\n .summary(\"Manage the Model Context Protocol server for Convex [BETA]\")\n .description(\n \"Commands to initialize and run a Model Context Protocol server for Convex that can be used with AI tools.\\n\" +\n \"This server exposes your Convex codebase to AI tools in a structured way.\",\n )\n .allowExcessArguments(false);\n\nmcp\n .command(\"start\")\n .summary(\"Start the MCP server\")\n .description(\n \"Start the Model Context Protocol server for Convex that can be used with AI tools.\",\n )\n .option(\n \"--project-dir <project-dir>\",\n \"Run the MCP server for a single project. By default, the MCP server can run for multiple projects, and each tool call specifies its project directory.\",\n )\n .option(\n \"--disable-tools <tool-names>\",\n `Comma separated list of tool names to disable (options: ${allToolNames.join(\", \")})`,\n )\n .option(\n \"--cautiously-allow-production-pii\",\n \"Allow read-only tools (data, logs, queries) on production deployments. These tools may expose PII. Defaults to false.\",\n false,\n )\n .option(\n \"--dangerously-enable-production-deployments\",\n \"DANGEROUSLY allow the MCP server to access production deployments, including mutating tools. Defaults to false.\",\n false,\n )\n // Deprecated option, we swapped the default. no-op.\n .addOption(\n new Option(\"--disable-production-deployments\")\n .conflicts(\"--dangerously-enable-production-deployments\")\n .hideHelp(),\n )\n .addDeploymentSelectionOptions(actionDescription(\"Run the MCP server on\"))\n .action(async (options) => {\n const ctx = await oneoffContext(options);\n try {\n // `serveStdio` only calls the factory once a client connects, and answers\n // a factory throw with an opaque `-32603`, so reject a bad\n // `--disable-tools` here instead.\n enabledTools(options);\n } catch (error: any) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: `Failed to start MCP server: ${error}`,\n printedMessage: `Failed to start MCP server: ${error}`,\n });\n }\n // The SDK picks the era from the client's opening message: a request\n // carrying the 2026-07-28 `_meta` envelope pins a stateless connection,\n // while an `initialize` is still served by the same factory over the legacy\n // protocol.\n // The returned handle's `close()` is intentionally never called: the\n // server lives until the client kills the process, and process exit tears\n // the transport down.\n serveStdio(() => makeServer(options), {\n legacy: \"serve\",\n // The only channel for out-of-band failures (transport errors, dropped\n // malformed notifications). stdout carries the protocol, so they go to\n // stderr.\n onerror: (error) => logError(`MCP server error: ${error.message}`),\n });\n // Keep the process running\n await new Promise(() => {});\n });\n\nfunction enabledTools(\n options: McpOptions,\n): Record<string, ConvexTool<any, any>> {\n const disabledToolNames = new Set<string>();\n for (const toolName of options.disableTools?.split(\",\") ?? []) {\n const name = toolName.trim();\n if (!allToolNames.includes(name)) {\n // eslint-disable-next-line no-restricted-syntax\n throw new Error(\n `Disabled tool ${name} not found (valid tools: ${allToolNames.join(\", \")})`,\n );\n }\n disabledToolNames.add(name);\n }\n\n const enabledToolsByName: Record<string, ConvexTool<any, any>> = {};\n for (const tool of convexTools) {\n if (!disabledToolNames.has(tool.name)) {\n enabledToolsByName[tool.name] = tool;\n }\n }\n return enabledToolsByName;\n}\n\nexport function makeServer(options: McpOptions) {\n const enabledToolsByName = enabledTools(options);\n const mutex = new Mutex();\n const serverDirectory = process.cwd();\n options = {\n ...options,\n envFile:\n options.envFile === undefined\n ? undefined\n : path.resolve(serverDirectory, options.envFile),\n };\n const server = new Server(\n {\n name: \"Convex MCP Server\",\n version: \"0.0.1\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n server.setRequestHandler(\"tools/call\", async (request: CallToolRequest) => {\n const ctx = new RequestContext(options);\n try {\n if (!request.params.arguments) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"No arguments provided\",\n });\n }\n const convexTool = enabledToolsByName[request.params.name];\n if (!convexTool) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Tool ${request.params.name} not found`,\n });\n }\n const input = convexTool.inputSchema.parse(request.params.arguments);\n\n // Serialize tool handlers since they're mutating the current working directory.\n const result = await mutex.runExclusive(async () => {\n const projectDir =\n \"deploymentSelector\" in input\n ? ctx.decodeDeploymentSelectorUnchecked(input.deploymentSelector)\n .projectDir\n : ((\"projectDir\" in input ? input.projectDir : undefined) ??\n options.projectDir);\n const previousDirectory = process.cwd();\n try {\n if (projectDir !== undefined)\n process.chdir(path.resolve(serverDirectory, projectDir));\n await initializeBigBrainAuth(ctx, options);\n if (!(await checkAuthorization(ctx, false))) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Not Authorized: Run `npx convex dev` to login to your Convex project.\",\n });\n }\n const absoluteDirectory = process.cwd();\n const resolvedInput =\n \"deploymentSelector\" in input\n ? {\n ...input,\n deploymentSelector: encodeDeploymentSelector(\n absoluteDirectory,\n ctx.decodeDeploymentSelectorUnchecked(\n input.deploymentSelector,\n ).deployment,\n ),\n }\n : projectDir === undefined\n ? input\n : { ...input, projectDir: absoluteDirectory };\n return await convexTool.handler(ctx, resolvedInput);\n } finally {\n process.chdir(previousDirectory);\n }\n });\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result),\n },\n ],\n };\n } catch (error: any) {\n let message: string;\n if (error instanceof RequestCrash) {\n message = error.printedMessage;\n } else if (error instanceof Error) {\n message = error.message;\n } else {\n message = String(error);\n }\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({ error: message }),\n },\n ],\n isError: true,\n };\n }\n });\n server.setRequestHandler(\"tools/list\", async () => {\n return {\n tools: Object.values(enabledToolsByName).map(mcpTool),\n };\n });\n return server;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["path"]
7
7
  }
@@ -44,6 +44,7 @@ var import_logout = require("./logout.js");
44
44
  var import_logs = require("./logs.js");
45
45
  var import_mcp = require("./mcp.js");
46
46
  var import_network_test = require("./network_test.js");
47
+ var import_account = require("./account.js");
47
48
  var import_project = require("./project.js");
48
49
  var import_reinit = require("./reinit.js");
49
50
  var import_run = require("./run.js");
@@ -52,6 +53,6 @@ var import_update = require("./update.js");
52
53
  var import_version = require("./version.js");
53
54
  function buildProgram() {
54
55
  const program = new import_extra_typings.Command();
55
- return program.name("convex").usage("<command> [options]").description("Start developing with Convex by running `npx convex dev`.").addCommand(import_login.login, { hidden: true }).addCommand(import_init.init, { hidden: true }).addCommand(import_reinit.reinit, { hidden: true }).addCommand(import_dev.dev).addCommand(import_deploy.deploy).addCommand(import_deployments.deployments, { hidden: true }).addCommand(import_run.run).addCommand(import_convexImport.convexImport).addCommand(import_dashboard.dashboard).addCommand(import_docs.docs).addCommand(import_logs.logs).addCommand(import_typecheck.typecheck, { hidden: true }).addCommand(import_auth.auth, { hidden: true }).addCommand(import_convexExport.convexExport).addCommand(import_env.env).addCommand(import_data.data).addCommand(import_deployment.deployment).addCommand(import_project.project).addCommand(import_codegen.codegen).addCommand(import_update.update).addCommand(import_logout.logout).addCommand(import_network_test.networkTest, { hidden: true }).addCommand(import_integration.integration, { hidden: true }).addCommand(import_functionSpec.functionSpec).addCommand(import_insights.insights).addCommand(import_mcp.mcp).addCommand(import_aiFiles.aiFiles).helpCommand("help <command>", "Show help for given <command>").version(import_version.version).configureHelp({ visibleOptions: () => [] }).showHelpAfterError();
56
+ return program.name("convex").usage("<command> [options]").description("Start developing with Convex by running `npx convex dev`.").addCommand(import_login.login, { hidden: true }).addCommand(import_init.init, { hidden: true }).addCommand(import_reinit.reinit, { hidden: true }).addCommand(import_dev.dev).addCommand(import_deploy.deploy).addCommand(import_deployments.deployments, { hidden: true }).addCommand(import_run.run).addCommand(import_convexImport.convexImport).addCommand(import_dashboard.dashboard).addCommand(import_docs.docs).addCommand(import_logs.logs).addCommand(import_typecheck.typecheck, { hidden: true }).addCommand(import_auth.auth, { hidden: true }).addCommand(import_convexExport.convexExport).addCommand(import_env.env).addCommand(import_data.data).addCommand(import_deployment.deployment).addCommand(import_project.project).addCommand(import_codegen.codegen).addCommand(import_update.update).addCommand(import_logout.logout).addCommand(import_account.account).addCommand(import_network_test.networkTest, { hidden: true }).addCommand(import_integration.integration, { hidden: true }).addCommand(import_functionSpec.functionSpec).addCommand(import_insights.insights).addCommand(import_mcp.mcp).addCommand(import_aiFiles.aiFiles).helpCommand("help <command>", "Show help for given <command>").version(import_version.version).configureHelp({ visibleOptions: () => [] }).showHelpAfterError();
56
57
  }
57
58
  //# sourceMappingURL=program.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/program.ts"],
4
- "sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { aiFiles } from \"./aiFiles.js\";\nimport { auth } from \"./auth.js\";\nimport { codegen } from \"./codegen.js\";\nimport { convexExport } from \"./convexExport.js\";\nimport { convexImport } from \"./convexImport.js\";\nimport { dashboard } from \"./dashboard.js\";\nimport { data } from \"./data.js\";\nimport { deploy } from \"./deploy.js\";\nimport { deployment } from \"./deployment.js\";\nimport { deployments } from \"./deployments.js\";\nimport { dev } from \"./dev.js\";\nimport { docs } from \"./docs.js\";\nimport { env } from \"./env.js\";\nimport { functionSpec } from \"./functionSpec.js\";\nimport { init } from \"./init.js\";\nimport { insights } from \"./insights.js\";\nimport { integration } from \"./integration.js\";\nimport { login } from \"./login.js\";\nimport { logout } from \"./logout.js\";\nimport { logs } from \"./logs.js\";\nimport { mcp } from \"./mcp.js\";\nimport { networkTest } from \"./network_test.js\";\nimport { project } from \"./project.js\";\nimport { reinit } from \"./reinit.js\";\nimport { run } from \"./run.js\";\nimport { typecheck } from \"./typecheck.js\";\nimport { update } from \"./update.js\";\nimport { version } from \"./version.js\";\n\nexport function buildProgram() {\n const program = new Command();\n return (\n program\n .name(\"convex\")\n .usage(\"<command> [options]\")\n .description(\"Start developing with Convex by running `npx convex dev`.\")\n .addCommand(login, { hidden: true })\n .addCommand(init, { hidden: true })\n .addCommand(reinit, { hidden: true })\n .addCommand(dev)\n .addCommand(deploy)\n .addCommand(deployments, { hidden: true })\n .addCommand(run)\n .addCommand(convexImport)\n .addCommand(dashboard)\n .addCommand(docs)\n .addCommand(logs)\n .addCommand(typecheck, { hidden: true })\n .addCommand(auth, { hidden: true })\n .addCommand(convexExport)\n .addCommand(env)\n .addCommand(data)\n .addCommand(deployment)\n .addCommand(project)\n .addCommand(codegen)\n .addCommand(update)\n .addCommand(logout)\n .addCommand(networkTest, { hidden: true })\n .addCommand(integration, { hidden: true })\n .addCommand(functionSpec)\n .addCommand(insights)\n .addCommand(mcp)\n .addCommand(aiFiles)\n .helpCommand(\"help <command>\", \"Show help for given <command>\")\n .version(version)\n // Hide version and help so they don't clutter\n // the list of commands.\n .configureHelp({ visibleOptions: () => [] })\n .showHelpAfterError()\n );\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwB;AACxB,qBAAwB;AACxB,kBAAqB;AACrB,qBAAwB;AACxB,0BAA6B;AAC7B,0BAA6B;AAC7B,uBAA0B;AAC1B,kBAAqB;AACrB,oBAAuB;AACvB,wBAA2B;AAC3B,yBAA4B;AAC5B,iBAAoB;AACpB,kBAAqB;AACrB,iBAAoB;AACpB,0BAA6B;AAC7B,kBAAqB;AACrB,sBAAyB;AACzB,yBAA4B;AAC5B,mBAAsB;AACtB,oBAAuB;AACvB,kBAAqB;AACrB,iBAAoB;AACpB,0BAA4B;AAC5B,qBAAwB;AACxB,oBAAuB;AACvB,iBAAoB;AACpB,uBAA0B;AAC1B,oBAAuB;AACvB,qBAAwB;AAEjB,SAAS,eAAe;AAC7B,QAAM,UAAU,IAAI,6BAAQ;AAC5B,SACE,QACG,KAAK,QAAQ,EACb,MAAM,qBAAqB,EAC3B,YAAY,2DAA2D,EACvE,WAAW,oBAAO,EAAE,QAAQ,KAAK,CAAC,EAClC,WAAW,kBAAM,EAAE,QAAQ,KAAK,CAAC,EACjC,WAAW,sBAAQ,EAAE,QAAQ,KAAK,CAAC,EACnC,WAAW,cAAG,EACd,WAAW,oBAAM,EACjB,WAAW,gCAAa,EAAE,QAAQ,KAAK,CAAC,EACxC,WAAW,cAAG,EACd,WAAW,gCAAY,EACvB,WAAW,0BAAS,EACpB,WAAW,gBAAI,EACf,WAAW,gBAAI,EACf,WAAW,4BAAW,EAAE,QAAQ,KAAK,CAAC,EACtC,WAAW,kBAAM,EAAE,QAAQ,KAAK,CAAC,EACjC,WAAW,gCAAY,EACvB,WAAW,cAAG,EACd,WAAW,gBAAI,EACf,WAAW,4BAAU,EACrB,WAAW,sBAAO,EAClB,WAAW,sBAAO,EAClB,WAAW,oBAAM,EACjB,WAAW,oBAAM,EACjB,WAAW,iCAAa,EAAE,QAAQ,KAAK,CAAC,EACxC,WAAW,gCAAa,EAAE,QAAQ,KAAK,CAAC,EACxC,WAAW,gCAAY,EACvB,WAAW,wBAAQ,EACnB,WAAW,cAAG,EACd,WAAW,sBAAO,EAClB,YAAY,kBAAkB,+BAA+B,EAC7D,QAAQ,sBAAO,EAGf,cAAc,EAAE,gBAAgB,MAAM,CAAC,EAAE,CAAC,EAC1C,mBAAmB;AAE1B;",
4
+ "sourcesContent": ["import { Command } from \"@commander-js/extra-typings\";\nimport { aiFiles } from \"./aiFiles.js\";\nimport { auth } from \"./auth.js\";\nimport { codegen } from \"./codegen.js\";\nimport { convexExport } from \"./convexExport.js\";\nimport { convexImport } from \"./convexImport.js\";\nimport { dashboard } from \"./dashboard.js\";\nimport { data } from \"./data.js\";\nimport { deploy } from \"./deploy.js\";\nimport { deployment } from \"./deployment.js\";\nimport { deployments } from \"./deployments.js\";\nimport { dev } from \"./dev.js\";\nimport { docs } from \"./docs.js\";\nimport { env } from \"./env.js\";\nimport { functionSpec } from \"./functionSpec.js\";\nimport { init } from \"./init.js\";\nimport { insights } from \"./insights.js\";\nimport { integration } from \"./integration.js\";\nimport { login } from \"./login.js\";\nimport { logout } from \"./logout.js\";\nimport { logs } from \"./logs.js\";\nimport { mcp } from \"./mcp.js\";\nimport { networkTest } from \"./network_test.js\";\nimport { account } from \"./account.js\";\nimport { project } from \"./project.js\";\nimport { reinit } from \"./reinit.js\";\nimport { run } from \"./run.js\";\nimport { typecheck } from \"./typecheck.js\";\nimport { update } from \"./update.js\";\nimport { version } from \"./version.js\";\n\nexport function buildProgram() {\n const program = new Command();\n return (\n program\n .name(\"convex\")\n .usage(\"<command> [options]\")\n .description(\"Start developing with Convex by running `npx convex dev`.\")\n .addCommand(login, { hidden: true })\n .addCommand(init, { hidden: true })\n .addCommand(reinit, { hidden: true })\n .addCommand(dev)\n .addCommand(deploy)\n .addCommand(deployments, { hidden: true })\n .addCommand(run)\n .addCommand(convexImport)\n .addCommand(dashboard)\n .addCommand(docs)\n .addCommand(logs)\n .addCommand(typecheck, { hidden: true })\n .addCommand(auth, { hidden: true })\n .addCommand(convexExport)\n .addCommand(env)\n .addCommand(data)\n .addCommand(deployment)\n .addCommand(project)\n .addCommand(codegen)\n .addCommand(update)\n .addCommand(logout)\n .addCommand(account)\n .addCommand(networkTest, { hidden: true })\n .addCommand(integration, { hidden: true })\n .addCommand(functionSpec)\n .addCommand(insights)\n .addCommand(mcp)\n .addCommand(aiFiles)\n .helpCommand(\"help <command>\", \"Show help for given <command>\")\n .version(version)\n // Hide version and help so they don't clutter\n // the list of commands.\n .configureHelp({ visibleOptions: () => [] })\n .showHelpAfterError()\n );\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAwB;AACxB,qBAAwB;AACxB,kBAAqB;AACrB,qBAAwB;AACxB,0BAA6B;AAC7B,0BAA6B;AAC7B,uBAA0B;AAC1B,kBAAqB;AACrB,oBAAuB;AACvB,wBAA2B;AAC3B,yBAA4B;AAC5B,iBAAoB;AACpB,kBAAqB;AACrB,iBAAoB;AACpB,0BAA6B;AAC7B,kBAAqB;AACrB,sBAAyB;AACzB,yBAA4B;AAC5B,mBAAsB;AACtB,oBAAuB;AACvB,kBAAqB;AACrB,iBAAoB;AACpB,0BAA4B;AAC5B,qBAAwB;AACxB,qBAAwB;AACxB,oBAAuB;AACvB,iBAAoB;AACpB,uBAA0B;AAC1B,oBAAuB;AACvB,qBAAwB;AAEjB,SAAS,eAAe;AAC7B,QAAM,UAAU,IAAI,6BAAQ;AAC5B,SACE,QACG,KAAK,QAAQ,EACb,MAAM,qBAAqB,EAC3B,YAAY,2DAA2D,EACvE,WAAW,oBAAO,EAAE,QAAQ,KAAK,CAAC,EAClC,WAAW,kBAAM,EAAE,QAAQ,KAAK,CAAC,EACjC,WAAW,sBAAQ,EAAE,QAAQ,KAAK,CAAC,EACnC,WAAW,cAAG,EACd,WAAW,oBAAM,EACjB,WAAW,gCAAa,EAAE,QAAQ,KAAK,CAAC,EACxC,WAAW,cAAG,EACd,WAAW,gCAAY,EACvB,WAAW,0BAAS,EACpB,WAAW,gBAAI,EACf,WAAW,gBAAI,EACf,WAAW,4BAAW,EAAE,QAAQ,KAAK,CAAC,EACtC,WAAW,kBAAM,EAAE,QAAQ,KAAK,CAAC,EACjC,WAAW,gCAAY,EACvB,WAAW,cAAG,EACd,WAAW,gBAAI,EACf,WAAW,4BAAU,EACrB,WAAW,sBAAO,EAClB,WAAW,sBAAO,EAClB,WAAW,oBAAM,EACjB,WAAW,oBAAM,EACjB,WAAW,sBAAO,EAClB,WAAW,iCAAa,EAAE,QAAQ,KAAK,CAAC,EACxC,WAAW,gCAAa,EAAE,QAAQ,KAAK,CAAC,EACxC,WAAW,gCAAY,EACvB,WAAW,wBAAQ,EACnB,WAAW,cAAG,EACd,WAAW,sBAAO,EAClB,YAAY,kBAAkB,+BAA+B,EAC7D,QAAQ,sBAAO,EAGf,cAAc,EAAE,gBAAgB,MAAM,CAAC,EAAE,CAAC,EAC1C,mBAAmB;AAE1B;",
6
6
  "names": []
7
7
  }
@@ -64,7 +64,7 @@ async function runProjectCreate(nameArg, options) {
64
64
  );
65
65
  (0, import_log.logMessage)(
66
66
  import_chalk.chalkStderr.gray(
67
- `Next, add a deployment with \`npx convex deployment create ${team.slug}:${projectSlug}:dev --type dev\` (pass \`--region us\` to choose a region).`
67
+ `Next, add a deployment with \`npx convex deployment create ${team.slug}:${projectSlug}:dev/my-feature --type dev --select\` (pass \`--region us\` to choose a region).`
68
68
  )
69
69
  );
70
70
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/projectCreate.ts"],
4
- "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, showSpinner } from \"../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport { createProject } from \"./lib/api.js\";\nimport { ensureAuthCanCreateDeployment } from \"./lib/deploymentSelection.js\";\nimport { validateOrSelectTeam } from \"./lib/utils/utils.js\";\nimport { promptString } from \"./lib/utils/prompts.js\";\nimport { projectDashboardUrl } from \"./lib/dashboard.js\";\n\ntype ProjectCreateOptions = {\n team?: string | undefined;\n};\n\nasync function runProjectCreate(\n nameArg: string | undefined,\n options: ProjectCreateOptions,\n): Promise<void> {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n // Creating a project goes through the platform API, which accepts personal\n // access tokens and project keys but not deployment/preview deploy keys.\n // Fail fast (and clearly) for the unsupported keys rather than surfacing an\n // opaque error later.\n await ensureAuthCanCreateDeployment(ctx);\n\n const { team } = await validateOrSelectTeam(ctx, options.team, \"Team:\");\n\n let projectName = nameArg;\n if (!projectName) {\n if (!process.stdin.isTTY) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Specify a project name:\\n\" + \" `npx convex project create my-app`\",\n });\n }\n projectName = await promptString(ctx, {\n message: \"Project name:\",\n });\n }\n\n showSpinner(`Creating project ${projectName}...`);\n // `project create` only creates the project. Provisioning a deployment is a\n // separate, explicit step (`npx convex deployment create`) so this command\n // doesn't have to mirror every deployment setting (region, class, ...).\n const { projectSlug } = await createProject(ctx, {\n teamId: team.id,\n projectName,\n deploymentToProvision: null,\n });\n\n logFinishedStep(\n `Created project ${chalkStderr.bold(projectSlug)} in team ` +\n `${chalkStderr.bold(team.slug)}, manage it at ${chalkStderr.bold(\n projectDashboardUrl(team.slug, projectSlug),\n )}`,\n );\n logMessage(\n chalkStderr.gray(\n `Next, add a deployment with ` +\n `\\`npx convex deployment create ${team.slug}:${projectSlug}:dev --type dev\\` ` +\n `(pass \\`--region us\\` to choose a region).`,\n ),\n );\n}\n\nexport const projectCreate = new Command(\"create\")\n .summary(\"Create a new project\")\n .description(\n [\n \"Create a new project.\",\n \"\",\n \"Provisioning a deployment is a separate step \u2014 after creating the\",\n \"project, run `npx convex deployment create` to add one.\",\n \"\",\n \"\u2022 Create a project in your only team: `npx convex project create my-app`\",\n \"\u2022 Pick the team: `npx convex project create my-app --team my-team`\",\n ].join(\"\\n\"),\n )\n .allowExcessArguments(false)\n .argument(\n \"[name]\",\n \"The name of the new project. Prompted for when omitted in an \" +\n \"interactive terminal; required otherwise.\",\n )\n .addOption(\n new Option(\n \"--team <team_slug>\",\n \"The team to create the project in. Defaults to your only team, or \" +\n \"prompts when you belong to several.\",\n ),\n )\n .action(runProjectCreate);\n"],
4
+ "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logFinishedStep, logMessage, showSpinner } from \"../bundler/log.js\";\nimport { chalkStderr } from \"chalk\";\nimport { createProject } from \"./lib/api.js\";\nimport { ensureAuthCanCreateDeployment } from \"./lib/deploymentSelection.js\";\nimport { validateOrSelectTeam } from \"./lib/utils/utils.js\";\nimport { promptString } from \"./lib/utils/prompts.js\";\nimport { projectDashboardUrl } from \"./lib/dashboard.js\";\n\ntype ProjectCreateOptions = {\n team?: string | undefined;\n};\n\nasync function runProjectCreate(\n nameArg: string | undefined,\n options: ProjectCreateOptions,\n): Promise<void> {\n const ctx = await oneoffContext({\n url: undefined,\n adminKey: undefined,\n envFile: undefined,\n });\n\n // Creating a project goes through the platform API, which accepts personal\n // access tokens and project keys but not deployment/preview deploy keys.\n // Fail fast (and clearly) for the unsupported keys rather than surfacing an\n // opaque error later.\n await ensureAuthCanCreateDeployment(ctx);\n\n const { team } = await validateOrSelectTeam(ctx, options.team, \"Team:\");\n\n let projectName = nameArg;\n if (!projectName) {\n if (!process.stdin.isTTY) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Specify a project name:\\n\" + \" `npx convex project create my-app`\",\n });\n }\n projectName = await promptString(ctx, {\n message: \"Project name:\",\n });\n }\n\n showSpinner(`Creating project ${projectName}...`);\n // `project create` only creates the project. Provisioning a deployment is a\n // separate, explicit step (`npx convex deployment create`) so this command\n // doesn't have to mirror every deployment setting (region, class, ...).\n const { projectSlug } = await createProject(ctx, {\n teamId: team.id,\n projectName,\n deploymentToProvision: null,\n });\n\n logFinishedStep(\n `Created project ${chalkStderr.bold(projectSlug)} in team ` +\n `${chalkStderr.bold(team.slug)}, manage it at ${chalkStderr.bold(\n projectDashboardUrl(team.slug, projectSlug),\n )}`,\n );\n logMessage(\n chalkStderr.gray(\n `Next, add a deployment with ` +\n `\\`npx convex deployment create ${team.slug}:${projectSlug}:dev/my-feature --type dev --select\\` ` +\n `(pass \\`--region us\\` to choose a region).`,\n ),\n );\n}\n\nexport const projectCreate = new Command(\"create\")\n .summary(\"Create a new project\")\n .description(\n [\n \"Create a new project.\",\n \"\",\n \"Provisioning a deployment is a separate step \u2014 after creating the\",\n \"project, run `npx convex deployment create` to add one.\",\n \"\",\n \"\u2022 Create a project in your only team: `npx convex project create my-app`\",\n \"\u2022 Pick the team: `npx convex project create my-app --team my-team`\",\n ].join(\"\\n\"),\n )\n .allowExcessArguments(false)\n .argument(\n \"[name]\",\n \"The name of the new project. Prompted for when omitted in an \" +\n \"interactive terminal; required otherwise.\",\n )\n .addOption(\n new Option(\n \"--team <team_slug>\",\n \"The team to create the project in. Defaults to your only team, or \" +\n \"prompts when you belong to several.\",\n ),\n )\n .action(runProjectCreate);\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAgC;AAChC,qBAA8B;AAC9B,iBAAyD;AACzD,mBAA4B;AAC5B,iBAA8B;AAC9B,iCAA8C;AAC9C,mBAAqC;AACrC,qBAA6B;AAC7B,uBAAoC;AAMpC,eAAe,iBACb,SACA,SACe;AACf,QAAM,MAAM,UAAM,8BAAc;AAAA,IAC9B,KAAK;AAAA,IACL,UAAU;AAAA,IACV,SAAS;AAAA,EACX,CAAC;AAMD,YAAM,0DAA8B,GAAG;AAEvC,QAAM,EAAE,KAAK,IAAI,UAAM,mCAAqB,KAAK,QAAQ,MAAM,OAAO;AAEtE,MAAI,cAAc;AAClB,MAAI,CAAC,aAAa;AAChB,QAAI,CAAC,QAAQ,MAAM,OAAO;AACxB,aAAO,MAAM,IAAI,MAAM;AAAA,QACrB,UAAU;AAAA,QACV,WAAW;AAAA,QACX,gBACE;AAAA,MACJ,CAAC;AAAA,IACH;AACA,kBAAc,UAAM,6BAAa,KAAK;AAAA,MACpC,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,8BAAY,oBAAoB,WAAW,KAAK;AAIhD,QAAM,EAAE,YAAY,IAAI,UAAM,0BAAc,KAAK;AAAA,IAC/C,QAAQ,KAAK;AAAA,IACb;AAAA,IACA,uBAAuB;AAAA,EACzB,CAAC;AAED;AAAA,IACE,mBAAmB,yBAAY,KAAK,WAAW,CAAC,YAC3C,yBAAY,KAAK,KAAK,IAAI,CAAC,kBAAkB,yBAAY;AAAA,UAC1D,sCAAoB,KAAK,MAAM,WAAW;AAAA,IAC5C,CAAC;AAAA,EACL;AACA;AAAA,IACE,yBAAY;AAAA,MACV,8DACoC,KAAK,IAAI,IAAI,WAAW;AAAA,IAE9D;AAAA,EACF;AACF;AAEO,MAAM,gBAAgB,IAAI,6BAAQ,QAAQ,EAC9C,QAAQ,sBAAsB,EAC9B;AAAA,EACC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb,EACC,qBAAqB,KAAK,EAC1B;AAAA,EACC;AAAA,EACA;AAEF,EACC;AAAA,EACC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,EAEF;AACF,EACC,OAAO,gBAAgB;",
6
6
  "names": []
7
7
  }
package/dist/cjs/index.js CHANGED
@@ -21,5 +21,5 @@ __export(index_exports, {
21
21
  version: () => version
22
22
  });
23
23
  module.exports = __toCommonJS(index_exports);
24
- const version = "1.46.0";
24
+ const version = "1.48.0-alpha.0";
25
25
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["export const version = \"1.46.0\";\n"],
4
+ "sourcesContent": ["export const version = \"1.48.0-alpha.0\";\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,UAAU;",
6
6
  "names": []
7
7
  }
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var actions_impl_exports = {};
20
20
  __export(actions_impl_exports, {
21
21
  getServiceToken: () => getServiceToken,
22
+ getServiceUrl: () => getServiceUrl,
22
23
  setupActionCalls: () => setupActionCalls
23
24
  });
24
25
  module.exports = __toCommonJS(actions_impl_exports);
@@ -64,12 +65,16 @@ function setupActionCalls(requestId) {
64
65
  }
65
66
  async function getServiceToken(service) {
66
67
  (0, import_validate.validateArg)(service, 1, "getServiceToken", "service");
67
- if (service !== "ai-gateway") {
68
- throw new Error(`Unsupported service "${String(service)}"`);
69
- }
70
68
  return await (0, import_syscall.performAsyncSyscall)("1.0/createServiceToken", {
71
69
  service,
72
70
  version: import__.version
73
71
  });
74
72
  }
73
+ async function getServiceUrl(service) {
74
+ (0, import_validate.validateArg)(service, 1, "getServiceUrl", "service");
75
+ return await (0, import_syscall.performAsyncSyscall)("1.0/getServiceUrl", {
76
+ service,
77
+ version: import__.version
78
+ });
79
+ }
75
80
  //# sourceMappingURL=actions_impl.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/server/impl/actions_impl.ts"],
4
- "sourcesContent": ["import { convexToJson, jsonToConvex, Value } from \"../../values/index.js\";\nimport { version } from \"../../index.js\";\nimport { performAsyncSyscall } from \"./syscall.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport {\n FunctionReference,\n FunctionReference_future,\n} from \"../../server/api.js\";\nimport { getFunctionAddress } from \"../components/paths.js\";\nimport { validateArg } from \"./validate.js\";\n\nfunction syscallArgs(\n requestId: string,\n functionReference: any,\n args?: Record<string, Value>,\n) {\n const address = getFunctionAddress(functionReference);\n return {\n ...address,\n args: convexToJson(parseArgs(args)),\n version,\n requestId,\n };\n}\n\nexport function setupActionCalls(requestId: string) {\n return {\n runQuery: async (\n query:\n | FunctionReference<\"query\", \"public\" | \"internal\">\n | FunctionReference_future<\"query\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/query\",\n syscallArgs(requestId, query, args),\n );\n return jsonToConvex(result);\n },\n runMutation: async (\n mutation:\n | FunctionReference<\"mutation\", \"public\" | \"internal\">\n | FunctionReference_future<\"mutation\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/mutation\",\n syscallArgs(requestId, mutation, args),\n );\n return jsonToConvex(result);\n },\n runAction: async (\n action:\n | FunctionReference<\"action\", \"public\" | \"internal\">\n | FunctionReference_future<\"action\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/action\",\n syscallArgs(requestId, action, args),\n );\n return jsonToConvex(result);\n },\n };\n}\n\n/**\n * Get a short-lived credential for calling a Convex-managed service.\n *\n * This function can only be called while an action is running. The credential\n * is scoped to the current deployment and should be sent as a bearer token.\n * Repeated calls in the same action reuse one token; a failed mint is not\n * cached, so a later call retries.\n *\n * @param service - The service the credential may access.\n * @returns A JWT to send as `Authorization: Bearer <token>`. Keep it inside\n * the action: don't return it to clients or store it in environment\n * variables.\n */\nexport async function getServiceToken(service: \"ai-gateway\"): Promise<string> {\n validateArg(service, 1, \"getServiceToken\", \"service\");\n if (service !== \"ai-gateway\") {\n throw new Error(`Unsupported service \"${String(service)}\"`);\n }\n return await performAsyncSyscall(\"1.0/createServiceToken\", {\n service,\n version,\n });\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAkD;AAClD,eAAwB;AACxB,qBAAoC;AACpC,oBAA0B;AAK1B,mBAAmC;AACnC,sBAA4B;AAE5B,SAAS,YACP,WACA,mBACA,MACA;AACA,QAAM,cAAU,iCAAmB,iBAAiB;AACpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAM,gCAAa,yBAAU,IAAI,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,WAAmB;AAClD,SAAO;AAAA,IACL,UAAU,OACR,OAGA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,OAAO,IAAI;AAAA,MACpC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,aAAa,OACX,UAGA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,UAAU,IAAI;AAAA,MACvC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,WAAW,OACT,QAGA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,QAAQ,IAAI;AAAA,MACrC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,EACF;AACF;AAeA,eAAsB,gBAAgB,SAAwC;AAC5E,mCAAY,SAAS,GAAG,mBAAmB,SAAS;AACpD,MAAI,YAAY,cAAc;AAC5B,UAAM,IAAI,MAAM,wBAAwB,OAAO,OAAO,CAAC,GAAG;AAAA,EAC5D;AACA,SAAO,UAAM,oCAAoB,0BAA0B;AAAA,IACzD;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import { convexToJson, jsonToConvex, Value } from \"../../values/index.js\";\nimport { version } from \"../../index.js\";\nimport { performAsyncSyscall } from \"./syscall.js\";\nimport { parseArgs } from \"../../common/index.js\";\nimport {\n FunctionReference,\n FunctionReference_future,\n} from \"../../server/api.js\";\nimport { getFunctionAddress } from \"../components/paths.js\";\nimport { validateArg } from \"./validate.js\";\n\nfunction syscallArgs(\n requestId: string,\n functionReference: any,\n args?: Record<string, Value>,\n) {\n const address = getFunctionAddress(functionReference);\n return {\n ...address,\n args: convexToJson(parseArgs(args)),\n version,\n requestId,\n };\n}\n\nexport function setupActionCalls(requestId: string) {\n return {\n runQuery: async (\n query:\n | FunctionReference<\"query\", \"public\" | \"internal\">\n | FunctionReference_future<\"query\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/query\",\n syscallArgs(requestId, query, args),\n );\n return jsonToConvex(result);\n },\n runMutation: async (\n mutation:\n | FunctionReference<\"mutation\", \"public\" | \"internal\">\n | FunctionReference_future<\"mutation\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/mutation\",\n syscallArgs(requestId, mutation, args),\n );\n return jsonToConvex(result);\n },\n runAction: async (\n action:\n | FunctionReference<\"action\", \"public\" | \"internal\">\n | FunctionReference_future<\"action\", \"public\" | \"internal\">,\n args?: Record<string, Value>,\n ): Promise<any> => {\n const result = await performAsyncSyscall(\n \"1.0/actions/action\",\n syscallArgs(requestId, action, args),\n );\n return jsonToConvex(result);\n },\n };\n}\n\n/**\n * A Convex-managed service. The backend decides which names it accepts; this\n * type lists the ones the current release knows about.\n */\nexport type ServiceName = \"ai-gateway\";\n\n/**\n * Get a short-lived credential for calling a Convex-managed service.\n *\n * This function can only be called while an action is running. The credential\n * is scoped to the current deployment and should be sent as a bearer token.\n * The action runtime caches and refreshes credentials as needed, so call\n * this function whenever making a service request.\n *\n * @param service - The service the credential may access.\n * @returns A JWT to send as `Authorization: Bearer <token>`. Keep it inside\n * the action: don't return it to clients or store it in environment\n * variables.\n */\nexport async function getServiceToken(service: ServiceName): Promise<string> {\n validateArg(service, 1, \"getServiceToken\", \"service\");\n return await performAsyncSyscall(\"1.0/createServiceToken\", {\n service,\n version,\n });\n}\n\n/**\n * Get the base URL of a Convex-managed service.\n *\n * This function can only be called while an action is running. Pair it with\n * {@link getServiceToken} to reach the service.\n *\n * @param service - The service to address.\n * @returns The service's origin, without a trailing slash.\n */\nexport async function getServiceUrl(service: ServiceName): Promise<string> {\n validateArg(service, 1, \"getServiceUrl\", \"service\");\n return await performAsyncSyscall(\"1.0/getServiceUrl\", {\n service,\n version,\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAkD;AAClD,eAAwB;AACxB,qBAAoC;AACpC,oBAA0B;AAK1B,mBAAmC;AACnC,sBAA4B;AAE5B,SAAS,YACP,WACA,mBACA,MACA;AACA,QAAM,cAAU,iCAAmB,iBAAiB;AACpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAM,gCAAa,yBAAU,IAAI,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,WAAmB;AAClD,SAAO;AAAA,IACL,UAAU,OACR,OAGA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,OAAO,IAAI;AAAA,MACpC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,aAAa,OACX,UAGA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,UAAU,IAAI;AAAA,MACvC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,IACA,WAAW,OACT,QAGA,SACiB;AACjB,YAAM,SAAS,UAAM;AAAA,QACnB;AAAA,QACA,YAAY,WAAW,QAAQ,IAAI;AAAA,MACrC;AACA,iBAAO,4BAAa,MAAM;AAAA,IAC5B;AAAA,EACF;AACF;AAqBA,eAAsB,gBAAgB,SAAuC;AAC3E,mCAAY,SAAS,GAAG,mBAAmB,SAAS;AACpD,SAAO,UAAM,oCAAoB,0BAA0B;AAAA,IACzD;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAWA,eAAsB,cAAc,SAAuC;AACzE,mCAAY,SAAS,GAAG,iBAAiB,SAAS;AAClD,SAAO,UAAM,oCAAoB,qBAAqB;AAAA,IACpD;AAAA,IACA;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -24,6 +24,7 @@ __export(storage_impl_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(storage_impl_exports);
26
26
  var import__ = require("../../index.js");
27
+ var import_base64 = require("../../values/base64.js");
27
28
  var import_syscall = require("./syscall.js");
28
29
  var import_validate = require("./validate.js");
29
30
  function setupStorageReader(requestId) {
@@ -61,6 +62,34 @@ function setupStorageWriter(requestId) {
61
62
  storageId
62
63
  });
63
64
  },
65
+ store: async (blob, options) => {
66
+ if (!(blob instanceof Blob)) {
67
+ throw new Error(
68
+ "store() expects a Blob. If you are trying to store a Request, `await request.blob()` will give you the correct input."
69
+ );
70
+ }
71
+ const bytes = new Uint8Array(await blob.arrayBuffer());
72
+ return await (0, import_syscall.performAsyncSyscall)("1.0/storageStore", {
73
+ requestId,
74
+ version: import__.version,
75
+ blob: (0, import_base64.fromByteArray)(bytes),
76
+ contentType: blob.type,
77
+ sha256: options?.sha256
78
+ });
79
+ },
80
+ get: async (storageId) => {
81
+ const result = await (0, import_syscall.performAsyncSyscall)("1.0/storageGet", {
82
+ requestId,
83
+ version: import__.version,
84
+ storageId
85
+ });
86
+ if (result === null) {
87
+ return null;
88
+ }
89
+ return new Blob([(0, import_base64.toByteArray)(result.blob)], {
90
+ type: result.contentType ?? ""
91
+ });
92
+ },
64
93
  getUrl: reader.getUrl,
65
94
  getMetadata: reader.getMetadata
66
95
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/server/impl/storage_impl.ts"],
4
- "sourcesContent": ["import {\n FileMetadata,\n StorageActionWriter,\n FileStorageId,\n StorageReader,\n StorageWriter,\n} from \"../storage.js\";\nimport { version } from \"../../index.js\";\nimport { performAsyncSyscall, performJsSyscall } from \"./syscall.js\";\nimport { validateArg } from \"./validate.js\";\n\nexport function setupStorageReader(requestId: string): StorageReader {\n return {\n getUrl: async (storageId: FileStorageId) => {\n validateArg(storageId, 1, \"getUrl\", \"storageId\");\n return await performAsyncSyscall(\"1.0/storageGetUrl\", {\n requestId,\n version,\n storageId,\n });\n },\n getMetadata: async (storageId: FileStorageId): Promise<FileMetadata> => {\n return await performAsyncSyscall(\"1.0/storageGetMetadata\", {\n requestId,\n version,\n storageId,\n });\n },\n };\n}\n\nexport function setupStorageWriter(requestId: string): StorageWriter {\n const reader = setupStorageReader(requestId);\n return {\n generateUploadUrl: async () => {\n return await performAsyncSyscall(\"1.0/storageGenerateUploadUrl\", {\n requestId,\n version,\n });\n },\n delete: async (storageId: FileStorageId) => {\n await performAsyncSyscall(\"1.0/storageDelete\", {\n requestId,\n version,\n storageId,\n });\n },\n getUrl: reader.getUrl,\n getMetadata: reader.getMetadata,\n };\n}\n\nexport function setupStorageActionWriter(\n requestId: string,\n): StorageActionWriter {\n const writer = setupStorageWriter(requestId);\n return {\n ...writer,\n store: async (blob: Blob, options?: { sha256?: string }) => {\n return await performJsSyscall(\"storage/storeBlob\", {\n requestId,\n version,\n blob,\n options,\n });\n },\n get: async (storageId: FileStorageId) => {\n return await performJsSyscall(\"storage/getBlob\", {\n requestId,\n version,\n storageId,\n });\n },\n };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,eAAwB;AACxB,qBAAsD;AACtD,sBAA4B;AAErB,SAAS,mBAAmB,WAAkC;AACnE,SAAO;AAAA,IACL,QAAQ,OAAO,cAA6B;AAC1C,uCAAY,WAAW,GAAG,UAAU,WAAW;AAC/C,aAAO,UAAM,oCAAoB,qBAAqB;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,aAAa,OAAO,cAAoD;AACtE,aAAO,UAAM,oCAAoB,0BAA0B;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,WAAkC;AACnE,QAAM,SAAS,mBAAmB,SAAS;AAC3C,SAAO;AAAA,IACL,mBAAmB,YAAY;AAC7B,aAAO,UAAM,oCAAoB,gCAAgC;AAAA,QAC/D;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,cAA6B;AAC1C,gBAAM,oCAAoB,qBAAqB;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,aAAa,OAAO;AAAA,EACtB;AACF;AAEO,SAAS,yBACd,WACqB;AACrB,QAAM,SAAS,mBAAmB,SAAS;AAC3C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,OAAO,MAAY,YAAkC;AAC1D,aAAO,UAAM,iCAAiB,qBAAqB;AAAA,QACjD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,KAAK,OAAO,cAA6B;AACvC,aAAO,UAAM,iCAAiB,mBAAmB;AAAA,QAC/C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import {\n FileMetadata,\n StorageActionWriter,\n FileStorageId,\n StorageReader,\n StorageWriter,\n} from \"../storage.js\";\nimport { version } from \"../../index.js\";\nimport { fromByteArray, toByteArray } from \"../../values/base64.js\";\nimport { performAsyncSyscall, performJsSyscall } from \"./syscall.js\";\nimport { validateArg } from \"./validate.js\";\n\nexport function setupStorageReader(requestId: string): StorageReader {\n return {\n getUrl: async (storageId: FileStorageId) => {\n validateArg(storageId, 1, \"getUrl\", \"storageId\");\n return await performAsyncSyscall(\"1.0/storageGetUrl\", {\n requestId,\n version,\n storageId,\n });\n },\n getMetadata: async (storageId: FileStorageId): Promise<FileMetadata> => {\n return await performAsyncSyscall(\"1.0/storageGetMetadata\", {\n requestId,\n version,\n storageId,\n });\n },\n };\n}\n\nexport function setupStorageWriter(requestId: string): StorageWriter {\n const reader = setupStorageReader(requestId);\n return {\n generateUploadUrl: async () => {\n return await performAsyncSyscall(\"1.0/storageGenerateUploadUrl\", {\n requestId,\n version,\n });\n },\n delete: async (storageId: FileStorageId) => {\n await performAsyncSyscall(\"1.0/storageDelete\", {\n requestId,\n version,\n storageId,\n });\n },\n store: async (blob: Blob, options?: { sha256?: string }) => {\n if (!(blob instanceof Blob)) {\n throw new Error(\n \"store() expects a Blob. If you are trying to store a Request, `await request.blob()` will give you the correct input.\",\n );\n }\n const bytes = new Uint8Array(await blob.arrayBuffer());\n return await performAsyncSyscall(\"1.0/storageStore\", {\n requestId,\n version,\n blob: fromByteArray(bytes),\n contentType: blob.type,\n sha256: options?.sha256,\n });\n },\n get: async (storageId: FileStorageId) => {\n const result: { blob: string; contentType: string | null } | null =\n await performAsyncSyscall(\"1.0/storageGet\", {\n requestId,\n version,\n storageId,\n });\n if (result === null) {\n return null;\n }\n return new Blob([toByteArray(result.blob)], {\n type: result.contentType ?? \"\",\n });\n },\n getUrl: reader.getUrl,\n getMetadata: reader.getMetadata,\n };\n}\n\nexport function setupStorageActionWriter(\n requestId: string,\n): StorageActionWriter {\n const writer = setupStorageWriter(requestId);\n return {\n ...writer,\n store: async (blob: Blob, options?: { sha256?: string }) => {\n return await performJsSyscall(\"storage/storeBlob\", {\n requestId,\n version,\n blob,\n options,\n });\n },\n get: async (storageId: FileStorageId) => {\n return await performJsSyscall(\"storage/getBlob\", {\n requestId,\n version,\n storageId,\n });\n },\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,eAAwB;AACxB,oBAA2C;AAC3C,qBAAsD;AACtD,sBAA4B;AAErB,SAAS,mBAAmB,WAAkC;AACnE,SAAO;AAAA,IACL,QAAQ,OAAO,cAA6B;AAC1C,uCAAY,WAAW,GAAG,UAAU,WAAW;AAC/C,aAAO,UAAM,oCAAoB,qBAAqB;AAAA,QACpD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,aAAa,OAAO,cAAoD;AACtE,aAAO,UAAM,oCAAoB,0BAA0B;AAAA,QACzD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,WAAkC;AACnE,QAAM,SAAS,mBAAmB,SAAS;AAC3C,SAAO;AAAA,IACL,mBAAmB,YAAY;AAC7B,aAAO,UAAM,oCAAoB,gCAAgC;AAAA,QAC/D;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO,cAA6B;AAC1C,gBAAM,oCAAoB,qBAAqB;AAAA,QAC7C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,OAAO,OAAO,MAAY,YAAkC;AAC1D,UAAI,EAAE,gBAAgB,OAAO;AAC3B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAQ,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AACrD,aAAO,UAAM,oCAAoB,oBAAoB;AAAA,QACnD;AAAA,QACA;AAAA,QACA,UAAM,6BAAc,KAAK;AAAA,QACzB,aAAa,KAAK;AAAA,QAClB,QAAQ,SAAS;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,IACA,KAAK,OAAO,cAA6B;AACvC,YAAM,SACJ,UAAM,oCAAoB,kBAAkB;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACH,UAAI,WAAW,MAAM;AACnB,eAAO;AAAA,MACT;AACA,aAAO,IAAI,KAAK,KAAC,2BAAY,OAAO,IAAI,CAAC,GAAG;AAAA,QAC1C,MAAM,OAAO,eAAe;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,OAAO;AAAA,IACf,aAAa,OAAO;AAAA,EACtB;AACF;AAEO,SAAS,yBACd,WACqB;AACrB,QAAM,SAAS,mBAAmB,SAAS;AAC3C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,OAAO,MAAY,YAAkC;AAC1D,aAAO,UAAM,iCAAiB,qBAAqB;AAAA,QACjD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,KAAK,OAAO,cAA6B;AACvC,aAAO,UAAM,iCAAiB,mBAAmB;AAAA,QAC/C;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -36,6 +36,7 @@ __export(server_exports, {
36
36
  getFunctionAddress: () => import_components3.getFunctionAddress,
37
37
  getFunctionName: () => import_api.getFunctionName,
38
38
  getServiceToken: () => import_actions_impl.getServiceToken,
39
+ getServiceUrl: () => import_actions_impl.getServiceUrl,
39
40
  httpActionGeneric: () => import_registration_impl.httpActionGeneric,
40
41
  httpRouter: () => import_router.httpRouter,
41
42
  internalActionGeneric: () => import_registration_impl.internalActionGeneric,