convex 1.36.0 → 1.37.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 (240) hide show
  1. package/CHANGELOG.md +50 -27
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/cli/codegen_templates/agentsmd.js +8 -2
  5. package/dist/cjs/cli/codegen_templates/agentsmd.js.map +2 -2
  6. package/dist/cjs/cli/codegen_templates/claudemd.js +2 -0
  7. package/dist/cjs/cli/codegen_templates/claudemd.js.map +2 -2
  8. package/dist/cjs/cli/configure.js +0 -8
  9. package/dist/cjs/cli/configure.js.map +2 -2
  10. package/dist/cjs/cli/deployment.js +2 -1
  11. package/dist/cjs/cli/deployment.js.map +2 -2
  12. package/dist/cjs/cli/deploymentToken.js +30 -0
  13. package/dist/cjs/cli/deploymentToken.js.map +7 -0
  14. package/dist/cjs/cli/deploymentTokenCreate.js +109 -0
  15. package/dist/cjs/cli/deploymentTokenCreate.js.map +7 -0
  16. package/dist/cjs/cli/deploymentTokenDelete.js +87 -0
  17. package/dist/cjs/cli/deploymentTokenDelete.js.map +7 -0
  18. package/dist/cjs/cli/envDefault.js +130 -41
  19. package/dist/cjs/cli/envDefault.js.map +3 -3
  20. package/dist/cjs/cli/generatedApi.js.map +1 -1
  21. package/dist/cjs/cli/lib/command.js +1 -1
  22. package/dist/cjs/cli/lib/command.js.map +1 -1
  23. package/dist/cjs/cli/lib/generatedFunctionLogsApi.js.map +1 -1
  24. package/dist/cjs/cli/lib/login.js +51 -0
  25. package/dist/cjs/cli/lib/login.js.map +3 -3
  26. package/dist/cjs/cli/lib/usage.js +13 -6
  27. package/dist/cjs/cli/lib/usage.js.map +2 -2
  28. package/dist/cjs/cli/lib/workos/environmentApi.js +6 -12
  29. package/dist/cjs/cli/lib/workos/environmentApi.js.map +3 -3
  30. package/dist/cjs/index.js +1 -1
  31. package/dist/cjs/index.js.map +1 -1
  32. package/dist/cjs/react/client.js +40 -42
  33. package/dist/cjs/react/client.js.map +2 -2
  34. package/dist/cjs/react/index.js +1 -0
  35. package/dist/cjs/react/index.js.map +2 -2
  36. package/dist/cjs/react/use_paginated_query.js +5 -46
  37. package/dist/cjs/react/use_paginated_query.js.map +2 -2
  38. package/dist/cjs/react/use_paginated_query2.js.map +2 -2
  39. package/dist/cjs/server/audit_logging.js +67 -0
  40. package/dist/cjs/server/audit_logging.js.map +7 -0
  41. package/dist/cjs/server/impl/meta_impl.js +27 -3
  42. package/dist/cjs/server/impl/meta_impl.js.map +2 -2
  43. package/dist/cjs/server/impl/registration_impl.js +2 -0
  44. package/dist/cjs/server/impl/registration_impl.js.map +2 -2
  45. package/dist/cjs/server/index.js +2 -0
  46. package/dist/cjs/server/index.js.map +2 -2
  47. package/dist/cjs/server/log.js +30 -0
  48. package/dist/cjs/server/log.js.map +7 -0
  49. package/dist/cjs/server/logVars.js +48 -0
  50. package/dist/cjs/server/logVars.js.map +7 -0
  51. package/dist/cjs/server/meta.js.map +1 -1
  52. package/dist/cjs/server/registration.js.map +1 -1
  53. package/dist/cjs-types/cli/codegen_templates/agentsmd.d.ts.map +1 -1
  54. package/dist/cjs-types/cli/codegen_templates/claudemd.d.ts.map +1 -1
  55. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  56. package/dist/cjs-types/cli/deployment.d.ts.map +1 -1
  57. package/dist/cjs-types/cli/deploymentToken.d.ts +3 -0
  58. package/dist/cjs-types/cli/deploymentToken.d.ts.map +1 -0
  59. package/dist/cjs-types/cli/deploymentToken.test.d.ts +2 -0
  60. package/dist/cjs-types/cli/deploymentToken.test.d.ts.map +1 -0
  61. package/dist/cjs-types/cli/deploymentTokenCreate.d.ts +13 -0
  62. package/dist/cjs-types/cli/deploymentTokenCreate.d.ts.map +1 -0
  63. package/dist/cjs-types/cli/deploymentTokenDelete.d.ts +11 -0
  64. package/dist/cjs-types/cli/deploymentTokenDelete.d.ts.map +1 -0
  65. package/dist/cjs-types/cli/envDefault.d.ts +2 -2
  66. package/dist/cjs-types/cli/envDefault.d.ts.map +1 -1
  67. package/dist/cjs-types/cli/envDefault.test.d.ts +2 -0
  68. package/dist/cjs-types/cli/envDefault.test.d.ts.map +1 -0
  69. package/dist/cjs-types/cli/generatedApi.d.ts +1 -1
  70. package/dist/cjs-types/cli/generatedApi.d.ts.map +1 -1
  71. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts +1 -0
  72. package/dist/cjs-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  73. package/dist/cjs-types/cli/lib/login.d.ts.map +1 -1
  74. package/dist/cjs-types/cli/lib/usage.d.ts.map +1 -1
  75. package/dist/cjs-types/cli/lib/workos/environmentApi.d.ts.map +1 -1
  76. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts +2 -0
  77. package/dist/cjs-types/cli/lib/workos/environmentApi.test.d.ts.map +1 -0
  78. package/dist/cjs-types/index.d.ts +1 -1
  79. package/dist/cjs-types/react/client.d.ts +52 -0
  80. package/dist/cjs-types/react/client.d.ts.map +1 -1
  81. package/dist/cjs-types/react/index.d.ts +2 -2
  82. package/dist/cjs-types/react/index.d.ts.map +1 -1
  83. package/dist/cjs-types/react/use_paginated_query.d.ts.map +1 -1
  84. package/dist/cjs-types/react/use_paginated_query2.d.ts +63 -1
  85. package/dist/cjs-types/react/use_paginated_query2.d.ts.map +1 -1
  86. package/dist/cjs-types/server/api.intersect.test.d.ts +2 -0
  87. package/dist/cjs-types/server/api.intersect.test.d.ts.map +1 -0
  88. package/dist/cjs-types/server/audit_logging.d.ts +19 -0
  89. package/dist/cjs-types/server/audit_logging.d.ts.map +1 -0
  90. package/dist/cjs-types/server/audit_logging.test.d.ts +2 -0
  91. package/dist/cjs-types/server/audit_logging.test.d.ts.map +1 -0
  92. package/dist/cjs-types/server/impl/meta_impl.d.ts.map +1 -1
  93. package/dist/cjs-types/server/impl/registration_impl.d.ts.map +1 -1
  94. package/dist/cjs-types/server/index.d.ts +2 -2
  95. package/dist/cjs-types/server/index.d.ts.map +1 -1
  96. package/dist/cjs-types/server/log.d.ts +2 -0
  97. package/dist/cjs-types/server/log.d.ts.map +1 -0
  98. package/dist/cjs-types/server/logVars.d.ts +20 -0
  99. package/dist/cjs-types/server/logVars.d.ts.map +1 -0
  100. package/dist/cjs-types/server/meta.d.ts +40 -0
  101. package/dist/cjs-types/server/meta.d.ts.map +1 -1
  102. package/dist/cjs-types/server/registration.d.ts +5 -2
  103. package/dist/cjs-types/server/registration.d.ts.map +1 -1
  104. package/dist/cli.bundle.cjs +362 -74
  105. package/dist/cli.bundle.cjs.map +4 -4
  106. package/dist/esm/cli/codegen_templates/agentsmd.js +8 -2
  107. package/dist/esm/cli/codegen_templates/agentsmd.js.map +2 -2
  108. package/dist/esm/cli/codegen_templates/claudemd.js +2 -0
  109. package/dist/esm/cli/codegen_templates/claudemd.js.map +2 -2
  110. package/dist/esm/cli/configure.js +0 -8
  111. package/dist/esm/cli/configure.js.map +2 -2
  112. package/dist/esm/cli/deployment.js +2 -1
  113. package/dist/esm/cli/deployment.js.map +2 -2
  114. package/dist/esm/cli/deploymentToken.js +8 -0
  115. package/dist/esm/cli/deploymentToken.js.map +7 -0
  116. package/dist/esm/cli/deploymentTokenCreate.js +91 -0
  117. package/dist/esm/cli/deploymentTokenCreate.js.map +7 -0
  118. package/dist/esm/cli/deploymentTokenDelete.js +68 -0
  119. package/dist/esm/cli/deploymentTokenDelete.js.map +7 -0
  120. package/dist/esm/cli/envDefault.js +131 -42
  121. package/dist/esm/cli/envDefault.js.map +3 -3
  122. package/dist/esm/cli/lib/command.js +1 -1
  123. package/dist/esm/cli/lib/command.js.map +1 -1
  124. package/dist/esm/cli/lib/login.js +52 -0
  125. package/dist/esm/cli/lib/login.js.map +3 -3
  126. package/dist/esm/cli/lib/usage.js +15 -8
  127. package/dist/esm/cli/lib/usage.js.map +2 -2
  128. package/dist/esm/cli/lib/workos/environmentApi.js +6 -12
  129. package/dist/esm/cli/lib/workos/environmentApi.js.map +3 -3
  130. package/dist/esm/index.js +1 -1
  131. package/dist/esm/index.js.map +1 -1
  132. package/dist/esm/react/client.js +38 -41
  133. package/dist/esm/react/client.js.map +2 -2
  134. package/dist/esm/react/index.js +4 -1
  135. package/dist/esm/react/index.js.map +2 -2
  136. package/dist/esm/react/use_paginated_query.js +5 -46
  137. package/dist/esm/react/use_paginated_query.js.map +2 -2
  138. package/dist/esm/react/use_paginated_query2.js.map +2 -2
  139. package/dist/esm/server/audit_logging.js +44 -0
  140. package/dist/esm/server/audit_logging.js.map +7 -0
  141. package/dist/esm/server/impl/meta_impl.js +27 -3
  142. package/dist/esm/server/impl/meta_impl.js.map +2 -2
  143. package/dist/esm/server/impl/registration_impl.js +2 -0
  144. package/dist/esm/server/impl/registration_impl.js.map +2 -2
  145. package/dist/esm/server/index.js +1 -0
  146. package/dist/esm/server/index.js.map +2 -2
  147. package/dist/esm/server/log.js +8 -0
  148. package/dist/esm/server/log.js.map +7 -0
  149. package/dist/esm/server/logVars.js +25 -0
  150. package/dist/esm/server/logVars.js.map +7 -0
  151. package/dist/esm-types/cli/codegen_templates/agentsmd.d.ts.map +1 -1
  152. package/dist/esm-types/cli/codegen_templates/claudemd.d.ts.map +1 -1
  153. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  154. package/dist/esm-types/cli/deployment.d.ts.map +1 -1
  155. package/dist/esm-types/cli/deploymentToken.d.ts +3 -0
  156. package/dist/esm-types/cli/deploymentToken.d.ts.map +1 -0
  157. package/dist/esm-types/cli/deploymentToken.test.d.ts +2 -0
  158. package/dist/esm-types/cli/deploymentToken.test.d.ts.map +1 -0
  159. package/dist/esm-types/cli/deploymentTokenCreate.d.ts +13 -0
  160. package/dist/esm-types/cli/deploymentTokenCreate.d.ts.map +1 -0
  161. package/dist/esm-types/cli/deploymentTokenDelete.d.ts +11 -0
  162. package/dist/esm-types/cli/deploymentTokenDelete.d.ts.map +1 -0
  163. package/dist/esm-types/cli/envDefault.d.ts +2 -2
  164. package/dist/esm-types/cli/envDefault.d.ts.map +1 -1
  165. package/dist/esm-types/cli/envDefault.test.d.ts +2 -0
  166. package/dist/esm-types/cli/envDefault.test.d.ts.map +1 -0
  167. package/dist/esm-types/cli/generatedApi.d.ts +1 -1
  168. package/dist/esm-types/cli/generatedApi.d.ts.map +1 -1
  169. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts +1 -0
  170. package/dist/esm-types/cli/lib/generatedFunctionLogsApi.d.ts.map +1 -1
  171. package/dist/esm-types/cli/lib/login.d.ts.map +1 -1
  172. package/dist/esm-types/cli/lib/usage.d.ts.map +1 -1
  173. package/dist/esm-types/cli/lib/workos/environmentApi.d.ts.map +1 -1
  174. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts +2 -0
  175. package/dist/esm-types/cli/lib/workos/environmentApi.test.d.ts.map +1 -0
  176. package/dist/esm-types/index.d.ts +1 -1
  177. package/dist/esm-types/react/client.d.ts +52 -0
  178. package/dist/esm-types/react/client.d.ts.map +1 -1
  179. package/dist/esm-types/react/index.d.ts +2 -2
  180. package/dist/esm-types/react/index.d.ts.map +1 -1
  181. package/dist/esm-types/react/use_paginated_query.d.ts.map +1 -1
  182. package/dist/esm-types/react/use_paginated_query2.d.ts +63 -1
  183. package/dist/esm-types/react/use_paginated_query2.d.ts.map +1 -1
  184. package/dist/esm-types/server/api.intersect.test.d.ts +2 -0
  185. package/dist/esm-types/server/api.intersect.test.d.ts.map +1 -0
  186. package/dist/esm-types/server/audit_logging.d.ts +19 -0
  187. package/dist/esm-types/server/audit_logging.d.ts.map +1 -0
  188. package/dist/esm-types/server/audit_logging.test.d.ts +2 -0
  189. package/dist/esm-types/server/audit_logging.test.d.ts.map +1 -0
  190. package/dist/esm-types/server/impl/meta_impl.d.ts.map +1 -1
  191. package/dist/esm-types/server/impl/registration_impl.d.ts.map +1 -1
  192. package/dist/esm-types/server/index.d.ts +2 -2
  193. package/dist/esm-types/server/index.d.ts.map +1 -1
  194. package/dist/esm-types/server/log.d.ts +2 -0
  195. package/dist/esm-types/server/log.d.ts.map +1 -0
  196. package/dist/esm-types/server/logVars.d.ts +20 -0
  197. package/dist/esm-types/server/logVars.d.ts.map +1 -0
  198. package/dist/esm-types/server/meta.d.ts +40 -0
  199. package/dist/esm-types/server/meta.d.ts.map +1 -1
  200. package/dist/esm-types/server/registration.d.ts +5 -2
  201. package/dist/esm-types/server/registration.d.ts.map +1 -1
  202. package/dist/react.bundle.js +45 -88
  203. package/dist/react.bundle.js.map +2 -2
  204. package/package.json +4 -4
  205. package/src/cli/codegen_templates/agentsmd.ts +8 -2
  206. package/src/cli/codegen_templates/claudemd.ts +2 -0
  207. package/src/cli/configure.ts +0 -9
  208. package/src/cli/deployment.ts +3 -1
  209. package/src/cli/deploymentToken.test.ts +372 -0
  210. package/src/cli/deploymentToken.ts +11 -0
  211. package/src/cli/deploymentTokenCreate.ts +113 -0
  212. package/src/cli/deploymentTokenDelete.ts +91 -0
  213. package/src/cli/envDefault.test.ts +495 -0
  214. package/src/cli/envDefault.ts +222 -107
  215. package/src/cli/generatedApi.ts +1 -1
  216. package/src/cli/lib/command.ts +1 -1
  217. package/src/cli/lib/generatedFunctionLogsApi.ts +1 -0
  218. package/src/cli/lib/login.ts +67 -0
  219. package/src/cli/lib/usage.ts +18 -8
  220. package/src/cli/lib/workos/environmentApi.test.ts +107 -0
  221. package/src/cli/lib/workos/environmentApi.ts +12 -19
  222. package/src/index.ts +1 -1
  223. package/src/react/client.test.tsx +10 -8
  224. package/src/react/client.ts +88 -96
  225. package/src/react/index.ts +6 -1
  226. package/src/react/use_paginated_query.test.tsx +215 -132
  227. package/src/react/use_paginated_query.ts +8 -142
  228. package/src/react/use_paginated_query2.ts +78 -5
  229. package/src/react/use_query_object_options.test.ts +8 -7
  230. package/src/react/use_query_result.test.ts +40 -7
  231. package/src/server/api.intersect.test.ts +109 -0
  232. package/src/server/audit_logging.test.ts +129 -0
  233. package/src/server/audit_logging.ts +75 -0
  234. package/src/server/impl/meta_impl.ts +28 -0
  235. package/src/server/impl/registration_impl.ts +2 -0
  236. package/src/server/index.ts +12 -0
  237. package/src/server/log.ts +16 -0
  238. package/src/server/logVars.ts +34 -0
  239. package/src/server/meta.ts +53 -1
  240. package/src/server/registration.ts +10 -8
@@ -18183,7 +18183,7 @@ var require_context = __commonJS({
18183
18183
  };
18184
18184
  });
18185
18185
  var nodeContextIntegration = core.defineIntegration(_nodeContextIntegration);
18186
- var Context11 = core.convertIntegrationFnToClass(INTEGRATION_NAME, nodeContextIntegration);
18186
+ var Context12 = core.convertIntegrationFnToClass(INTEGRATION_NAME, nodeContextIntegration);
18187
18187
  function _updateContext(contexts) {
18188
18188
  if (_optionalChain([contexts, "optionalAccess", (_11) => _11.app, "optionalAccess", (_12) => _12.app_memory])) {
18189
18189
  contexts.app.app_memory = process.memoryUsage().rss;
@@ -18393,7 +18393,7 @@ var require_context = __commonJS({
18393
18393
  return void 0;
18394
18394
  }
18395
18395
  }
18396
- exports2.Context = Context11;
18396
+ exports2.Context = Context12;
18397
18397
  exports2.getDeviceContext = getDeviceContext;
18398
18398
  exports2.nodeContextIntegration = nodeContextIntegration;
18399
18399
  exports2.readDirAsync = readDirAsync;
@@ -28695,7 +28695,7 @@ var version;
28695
28695
  var init_index = __esm({
28696
28696
  "src/index.ts"() {
28697
28697
  "use strict";
28698
- version = "1.36.0";
28698
+ version = "1.37.0";
28699
28699
  }
28700
28700
  });
28701
28701
 
@@ -62688,13 +62688,10 @@ async function createRedirectURI(ctx, apiKey, uri) {
62688
62688
  }
62689
62689
  );
62690
62690
  if (!response.ok) {
62691
- if (response.status === 422) {
62692
- const errorText2 = await response.text();
62693
- if (errorText2.includes("already exists")) {
62694
- return { modified: false };
62695
- }
62696
- }
62697
62691
  const errorText = await response.text();
62692
+ if (response.status === 422 && errorText.includes("already exists")) {
62693
+ return { modified: false };
62694
+ }
62698
62695
  return await ctx.crash({
62699
62696
  exitCode: 1,
62700
62697
  errorType: "fatal",
@@ -62741,13 +62738,10 @@ async function createCORSOrigin(ctx, apiKey, origin) {
62741
62738
  }
62742
62739
  );
62743
62740
  if (!response.ok) {
62744
- if (response.status === 409) {
62745
- const errorText2 = await response.text();
62746
- if (errorText2.includes("duplicate_cors_origin") || errorText2.includes("already exists")) {
62747
- return { modified: false };
62748
- }
62749
- }
62750
62741
  const errorText = await response.text();
62742
+ if (response.status === 409 && (errorText.includes("duplicate_cors_origin") || errorText.includes("already exists"))) {
62743
+ return { modified: false };
62744
+ }
62751
62745
  return await ctx.crash({
62752
62746
  exitCode: 1,
62753
62747
  errorType: "fatal",
@@ -77820,13 +77814,19 @@ function convexAiMarkdownBody(convexDir) {
77820
77814
  const normalizedConvexDir = convexDir.replaceAll("\\", "/");
77821
77815
  return `This project uses [Convex](https://convex.dev) as its backend.
77822
77816
 
77823
- When working on Convex code, **always read \`${normalizedConvexDir}/_generated/ai/guidelines.md\` first** for important guidelines on how to correctly use Convex APIs and patterns. The file contains rules that override what you may have learned about Convex from training data.
77817
+ When working on Convex code, **always read
77818
+ \`${normalizedConvexDir}/_generated/ai/guidelines.md\` first** for important guidelines on
77819
+ how to correctly use Convex APIs and patterns. The file contains rules that
77820
+ override what you may have learned about Convex from training data.
77824
77821
 
77825
- Convex agent skills for common tasks can be installed by running \`npx convex ai-files install\`.`;
77822
+ Convex agent skills for common tasks can be installed by running
77823
+ \`npx convex ai-files install\`.`;
77826
77824
  }
77827
77825
  function agentsMdConvexSection(convexDir) {
77828
77826
  return `${AGENTS_MD_START_MARKER}
77827
+
77829
77828
  ${convexAiMarkdownBody(convexDir)}
77829
+
77830
77830
  ${AGENTS_MD_END_MARKER}`;
77831
77831
  }
77832
77832
  var AGENTS_MD_START_MARKER, AGENTS_MD_END_MARKER;
@@ -77893,7 +77893,9 @@ var init_agentsmd2 = __esm({
77893
77893
  // src/cli/codegen_templates/claudemd.ts
77894
77894
  function claudeMdConvexSection(convexDir) {
77895
77895
  return `${CLAUDE_MD_START_MARKER}
77896
+
77896
77897
  ${convexAiMarkdownBody(convexDir)}
77898
+
77897
77899
  ${CLAUDE_MD_END_MARKER}`;
77898
77900
  }
77899
77901
  var CLAUDE_MD_START_MARKER, CLAUDE_MD_END_MARKER;
@@ -133408,6 +133410,57 @@ async function performLogin(ctx, {
133408
133410
  printedMessage: null
133409
133411
  });
133410
133412
  }
133413
+ if (vercel) {
133414
+ await promptJoinVercelTeams(ctx);
133415
+ }
133416
+ }
133417
+ async function promptJoinVercelTeams(ctx) {
133418
+ const fetch2 = bigBrainFetch(ctx);
133419
+ let teams;
133420
+ try {
133421
+ const res = await fetch2(
133422
+ new URL("vercel/potential_teams", `${provisionHost}/`)
133423
+ );
133424
+ if (!res.ok) {
133425
+ logVerbose(
133426
+ `vercel/potential_teams returned ${res.status}; skipping team-join prompt`
133427
+ );
133428
+ return;
133429
+ }
133430
+ teams = await res.json();
133431
+ } catch (err) {
133432
+ logVerbose(`Failed to fetch potential Vercel teams: ${String(err)}`);
133433
+ return;
133434
+ }
133435
+ if (teams.length === 0) return;
133436
+ for (const [index, team] of teams.entries()) {
133437
+ const displayName = team.teamName.replace(/ \(Vercel\)$/, "");
133438
+ const counter = teams.length > 1 ? `[${index + 1}/${teams.length}] ` : "";
133439
+ const lines = [
133440
+ chalkStderr.bold(`${counter}You've been invited to join ${displayName}`) + ` (${team.planName}) through the Vercel marketplace.`
133441
+ ];
133442
+ if (team.pricingNotice) {
133443
+ lines.push(chalkStderr.yellow(team.pricingNotice));
133444
+ }
133445
+ lines.push(`Join "${displayName}"?`);
133446
+ const join = await promptYesNo(ctx, {
133447
+ message: `${lines.join("\n")}`,
133448
+ default: true
133449
+ });
133450
+ if (!join) continue;
133451
+ try {
133452
+ await fetch2(
133453
+ new URL(
133454
+ `vercel/potential_teams/${team.teamId}/join`,
133455
+ `${provisionHost}/`
133456
+ ),
133457
+ { method: "POST" }
133458
+ );
133459
+ logFinishedStep(`Joined ${displayName}`);
133460
+ } catch (err) {
133461
+ logFailure(`Failed to join ${displayName}: ${String(err)}`);
133462
+ }
133463
+ }
133411
133464
  }
133412
133465
  async function optins(ctx, acceptOptIns) {
133413
133466
  const bbAuth = ctx.bigBrainAuth();
@@ -133860,14 +133913,6 @@ async function selectExistingProject(ctx, chosenConfiguration, config3) {
133860
133913
  forceDevDeployment: config3.local ? "local" : config3.cloud ? "cloud" : void 0
133861
133914
  });
133862
133915
  logFinishedStep(`Reinitialized project ${chalkStderr.bold(projectSlug)}`);
133863
- const { configPath, projectConfig } = await readProjectConfig(ctx);
133864
- const folder = functionsDir(configPath, projectConfig);
133865
- await attemptSetupAiFiles({
133866
- ctx,
133867
- aiFilesConfig: projectConfig.aiFiles,
133868
- convexDir: import_path31.default.resolve(folder),
133869
- projectDir: import_path31.default.resolve(import_path31.default.dirname(configPath))
133870
- });
133871
133916
  return { teamSlug, projectSlug, devDeployment };
133872
133917
  }
133873
133918
  async function askToConfigure(ctx) {
@@ -133986,7 +134031,7 @@ async function warn(ctx, options) {
133986
134031
  );
133987
134032
  }
133988
134033
  async function teamUsageState(ctx, teamId) {
133989
- const { usageState } = await bigBrainAPI({
134034
+ const { usageState } = await bigBrainAPIMaybeThrows({
133990
134035
  ctx,
133991
134036
  method: "GET",
133992
134037
  path: "dashboard/teams/" + teamId + "/usage/team_usage_state"
@@ -133994,7 +134039,7 @@ async function teamUsageState(ctx, teamId) {
133994
134039
  return usageState;
133995
134040
  }
133996
134041
  async function teamSpendingLimitsState(ctx, teamId) {
133997
- const response = await bigBrainAPI({
134042
+ const response = await bigBrainAPIMaybeThrows({
133998
134043
  ctx,
133999
134044
  method: "GET",
134000
134045
  path: "dashboard/teams/" + teamId + "/get_spending_limits"
@@ -134007,10 +134052,17 @@ async function usageStateWarning(ctx, targetDeployment) {
134007
134052
  return;
134008
134053
  }
134009
134054
  const { teamId, team } = await fetchTeamAndProject(ctx, targetDeployment);
134010
- const [usageState, spendingLimitsState] = await Promise.all([
134011
- teamUsageState(ctx, teamId),
134012
- teamSpendingLimitsState(ctx, teamId)
134013
- ]);
134055
+ let usageState;
134056
+ let spendingLimitsState;
134057
+ try {
134058
+ [usageState, spendingLimitsState] = await Promise.all([
134059
+ teamUsageState(ctx, teamId),
134060
+ teamSpendingLimitsState(ctx, teamId)
134061
+ ]);
134062
+ } catch (err) {
134063
+ logVerbose("Skipping usage state warning:", err);
134064
+ return;
134065
+ }
134014
134066
  if (spendingLimitsState === "Disabled") {
134015
134067
  await warn(ctx, {
134016
134068
  title: "Your projects are disabled because you exceeded your spending limit.",
@@ -134192,7 +134244,7 @@ Command.prototype.addDeploymentSelectionOptions = function(action, options) {
134192
134244
  ).addOption(
134193
134245
  new Option(
134194
134246
  "--deployment <deployment>",
134195
- action + " a specific deployment. Accepts:\n\u2022 a deployment name (e.g. joyful-capybara-123)\u2022 a deployment reference (e.g. dev/james, staging)\n\u2022 `dev` (for your personal dev deployment)\n\u2022 `prod` (for your project\u2019s default production deployment)\n\u2022 `local` (for your local dev deployment).\nYou can also select deployments in other projects with `project-slug:reference` or `team-slug:project-slug:reference`."
134247
+ action + " a specific deployment. Accepts:\n\u2022 a deployment name (e.g. joyful-capybara-123)\n\u2022 a deployment reference (e.g. dev/james, staging)\n\u2022 `dev` (for your personal dev deployment)\n\u2022 `prod` (for your project\u2019s default production deployment)\n\u2022 `local` (for your local dev deployment).\nYou can also select deployments in other projects with `project-slug:reference` or `team-slug:project-slug:reference`."
134196
134248
  ).conflicts(["--prod", "--preview-name", "--deployment-name", "--url"])
134197
134249
  ).addOption(
134198
134250
  new Option(
@@ -136259,22 +136311,33 @@ function defaultEnvBackend(ctx, projectId, dtype) {
136259
136311
 
136260
136312
  // src/cli/envDefault.ts
136261
136313
  init_api3();
136262
- var envDefaultSet = new Command("set").usage("[options] <name> <value>").arguments("[name] [value]").summary("Set a default variable").description(
136263
- "Set default environment variables for your project's deployment type.\n\n npx convex env default set NAME 'value'\n npx convex env default set NAME # omit a value to set one interactively\n npx convex env default set NAME --from-file value.txt\n npx convex env default set --from-file .env.defaults\nWhen setting multiple values, it will refuse all changes if any variables are already set to different values by default. Pass --force to overwrite the provided values.\nThe deployment type is determined by the current deployment (local maps to dev).\n"
136264
- ).option(
136265
- "--from-file <file>",
136266
- "Read environment variables from a .env file. Without --force, fails if any existing variable has a different value."
136267
- ).option(
136268
- "--force",
136269
- "When setting multiple variables, overwrite existing environment variable values instead of failing on mismatch."
136270
- ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false).action(async (name, value, cmdOptions, cmd) => {
136314
+ function addEnvDefaultOptions(cmd) {
136315
+ return cmd.addOption(
136316
+ new Option(
136317
+ "--type <type>",
136318
+ "Manage default env vars for the given deployment type (dev, preview, prod) instead of inferring from the current deployment."
136319
+ )
136320
+ ).addOption(
136321
+ new Option(
136322
+ "--project <project>",
136323
+ "Select a project manually. Accepts `team-slug:project-slug` or just `project-slug` (team inferred from your current project). Requires --type."
136324
+ )
136325
+ );
136326
+ }
136327
+ var envDefaultSet = addEnvDefaultOptions(
136328
+ new Command("set").usage("[options] <name> <value>").arguments("[name] [value]").summary("Set a default variable").description(
136329
+ "Set default environment variables for your project's deployment type.\n\n npx convex env default set NAME 'value'\n npx convex env default set NAME # omit a value to set one interactively\n npx convex env default set NAME --from-file value.txt\n npx convex env default set --from-file .env.defaults\nWhen setting multiple values, it will refuse all changes if any variables are already set to different values by default. Pass --force to overwrite the provided values.\nThe deployment type is determined by the current deployment (local maps to dev), or by --type if provided.\n"
136330
+ ).option(
136331
+ "--from-file <file>",
136332
+ "Read environment variables from a .env file. Without --force, fails if any existing variable has a different value."
136333
+ ).option(
136334
+ "--force",
136335
+ "When setting multiple variables, overwrite existing environment variable values instead of failing on mismatch."
136336
+ ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false)
136337
+ ).action(async (name, value, cmdOptions, cmd) => {
136271
136338
  const options = cmd.optsWithGlobals();
136272
- const { ctx, deployment: deployment2 } = await selectEnvDeployment(options);
136339
+ const { ctx, backend } = await resolveEnvDefaultBackend(options);
136273
136340
  await ensureHasConvexDependency(ctx, "env default set");
136274
- const backend = await resolveDefaultEnvBackend(
136275
- ctx,
136276
- deployment2.deploymentFields
136277
- );
136278
136341
  const didAnything = await envSet(ctx, backend, name, value, cmdOptions);
136279
136342
  if (didAnything === false) {
136280
136343
  cmd.outputHelp({ error: true });
@@ -136285,46 +136348,122 @@ var envDefaultSet = new Command("set").usage("[options] <name> <value>").argumen
136285
136348
  });
136286
136349
  }
136287
136350
  });
136288
- var envDefaultGet = new Command("get").arguments("<name>").summary("Print a default variable's value").description(
136289
- "Print a default variable's value: `npx convex env default get NAME`\nThe deployment type is determined by the current deployment (local maps to dev)."
136290
- ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false).action(async (envVarName, _options2, cmd) => {
136351
+ var envDefaultGet = addEnvDefaultOptions(
136352
+ new Command("get").arguments("<name>").summary("Print a default variable's value").description(
136353
+ "Print a default variable's value: `npx convex env default get NAME`\nThe deployment type is determined by the current deployment (local maps to dev), or by --type if provided."
136354
+ ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false)
136355
+ ).action(async (envVarName, _options2, cmd) => {
136291
136356
  const options = cmd.optsWithGlobals();
136292
- const { ctx, deployment: deployment2 } = await selectEnvDeployment(options);
136357
+ const { ctx, backend } = await resolveEnvDefaultBackend(options);
136293
136358
  await ensureHasConvexDependency(ctx, "env default get");
136294
- const backend = await resolveDefaultEnvBackend(
136295
- ctx,
136296
- deployment2.deploymentFields
136297
- );
136298
136359
  await envGet(ctx, backend, envVarName);
136299
136360
  });
136300
- var envDefaultRemove = new Command("remove").alias("rm").alias("unset").arguments("<name>").summary("Unset a default variable").description(
136301
- "Unset a default variable: `npx convex env default remove NAME`\nIf the variable doesn't exist, the command doesn't do anything and succeeds.\nThe deployment type is determined by the current deployment (local maps to dev)."
136302
- ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false).action(async (name, _options2, cmd) => {
136361
+ var envDefaultRemove = addEnvDefaultOptions(
136362
+ new Command("remove").alias("rm").alias("unset").arguments("<name>").summary("Unset a default variable").description(
136363
+ "Unset a default variable: `npx convex env default remove NAME`\nIf the variable doesn't exist, the command doesn't do anything and succeeds.\nThe deployment type is determined by the current deployment (local maps to dev), or by --type if provided."
136364
+ ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false)
136365
+ ).action(async (name, _options2, cmd) => {
136303
136366
  const options = cmd.optsWithGlobals();
136304
- const { ctx, deployment: deployment2 } = await selectEnvDeployment(options);
136367
+ const { ctx, backend } = await resolveEnvDefaultBackend(options);
136305
136368
  await ensureHasConvexDependency(ctx, "env default remove");
136306
- const backend = await resolveDefaultEnvBackend(
136307
- ctx,
136308
- deployment2.deploymentFields
136309
- );
136310
136369
  await envRemove(ctx, backend, name);
136311
136370
  });
136312
- var envDefaultList = new Command("list").summary("List all default variables").description(
136313
- "List all default variables: `npx convex env default list`\nThe deployment type is determined by the current deployment (local maps to dev)."
136314
- ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false).action(async (_options2, cmd) => {
136371
+ var envDefaultList = addEnvDefaultOptions(
136372
+ new Command("list").summary("List all default variables").description(
136373
+ "List all default variables: `npx convex env default list`\nThe deployment type is determined by the current deployment (local maps to dev), or by --type if provided."
136374
+ ).configureHelp({ showGlobalOptions: true }).allowExcessArguments(false)
136375
+ ).action(async (_options2, cmd) => {
136315
136376
  const options = cmd.optsWithGlobals();
136316
- const { ctx, deployment: deployment2 } = await selectEnvDeployment(options);
136377
+ const { ctx, backend } = await resolveEnvDefaultBackend(options);
136317
136378
  await ensureHasConvexDependency(ctx, "env default list");
136318
- const backend = await resolveDefaultEnvBackend(
136319
- ctx,
136320
- deployment2.deploymentFields
136321
- );
136322
136379
  await envList(ctx, backend);
136323
136380
  });
136324
136381
  var envDefault = new Command("default").summary("Manage project-level default environment variables").description(
136325
- "Manage default environment variables for your project.\n\nThe default environment variables read and written to by this command are the ones for the deployment type of the current deployment (i.e. dev in most cases).\n\n Set a default variable: `npx convex env default set NAME 'value'`\n Unset a default variable: `npx convex env default remove NAME`\n List all default variables: `npx convex env default list`\n Print a default variable's value: `npx convex env default get NAME`\n\n"
136382
+ "Manage default environment variables for your project.\n\nThe default environment variables read and written to by this command are the ones for the deployment type of the current deployment (i.e. dev in most cases), unless --type is provided.\n\n Set a default variable: `npx convex env default set NAME 'value'`\n Unset a default variable: `npx convex env default remove NAME`\n List all default variables: `npx convex env default list`\n Print a default variable's value: `npx convex env default get NAME`\n\n"
136326
136383
  ).addCommand(envDefaultSet).addCommand(envDefaultGet).addCommand(envDefaultRemove).addCommand(envDefaultList).helpCommand(false);
136327
- async function resolveDefaultEnvBackend(ctx, deploymentFields) {
136384
+ async function resolveEnvDefaultBackend(options) {
136385
+ const dtypeOverride = normalizeTypeOption(options.type);
136386
+ if (options.project !== void 0) {
136387
+ const parsedProject = parseProjectOption(options.project);
136388
+ if (parsedProject === null) {
136389
+ const ctx3 = await oneoffContext(options);
136390
+ return await ctx3.crash({
136391
+ exitCode: 1,
136392
+ errorType: "fatal",
136393
+ printedMessage: "error: --project must be `team-slug:project-slug` or `project-slug`."
136394
+ });
136395
+ }
136396
+ if (dtypeOverride === void 0) {
136397
+ const ctx3 = await oneoffContext(options);
136398
+ return await ctx3.crash({
136399
+ exitCode: 1,
136400
+ errorType: "fatal",
136401
+ printedMessage: "error: --project requires --type to also be set."
136402
+ });
136403
+ }
136404
+ let ctx2;
136405
+ let resolved;
136406
+ if (parsedProject.kind === "teamAndProject") {
136407
+ ctx2 = await oneoffContext(options);
136408
+ resolved = {
136409
+ teamSlug: parsedProject.teamSlug,
136410
+ projectSlug: parsedProject.projectSlug
136411
+ };
136412
+ } else {
136413
+ const selected = await selectEnvDeployment(options);
136414
+ ctx2 = selected.ctx;
136415
+ if (selected.deployment.deploymentFields === null) {
136416
+ return await ctx2.crash({
136417
+ exitCode: 1,
136418
+ errorType: "fatal",
136419
+ printedMessage: "error: --project <project-slug> requires a current cloud deployment to infer the team from. Use `team-slug:project-slug` to specify the team explicitly."
136420
+ });
136421
+ }
136422
+ const { team } = await fetchTeamAndProject(
136423
+ ctx2,
136424
+ selected.deployment.deploymentFields.deploymentName
136425
+ );
136426
+ resolved = { teamSlug: team, projectSlug: parsedProject.projectSlug };
136427
+ }
136428
+ const details = await getProjectDetails(ctx2, {
136429
+ kind: "teamAndProjectSlugs",
136430
+ teamSlug: resolved.teamSlug,
136431
+ projectSlug: resolved.projectSlug
136432
+ });
136433
+ return {
136434
+ ctx: ctx2,
136435
+ backend: defaultEnvBackend(ctx2, details.id, dtypeOverride)
136436
+ };
136437
+ }
136438
+ const { ctx, deployment: deployment2 } = await selectEnvDeployment(options);
136439
+ const backend = await resolveDefaultEnvBackend(
136440
+ ctx,
136441
+ deployment2.deploymentFields,
136442
+ dtypeOverride
136443
+ );
136444
+ return { ctx, backend };
136445
+ }
136446
+ function normalizeTypeOption(type) {
136447
+ if (type === void 0) return void 0;
136448
+ if (type === "development") return "dev";
136449
+ if (type === "production") return "prod";
136450
+ return type;
136451
+ }
136452
+ function parseProjectOption(value) {
136453
+ const parts = value.split(":");
136454
+ if (parts.length === 1 && parts[0].length > 0) {
136455
+ return { kind: "projectOnly", projectSlug: parts[0] };
136456
+ }
136457
+ if (parts.length === 2 && parts[0].length > 0 && parts[1].length > 0) {
136458
+ return {
136459
+ kind: "teamAndProject",
136460
+ teamSlug: parts[0],
136461
+ projectSlug: parts[1]
136462
+ };
136463
+ }
136464
+ return null;
136465
+ }
136466
+ async function resolveDefaultEnvBackend(ctx, deploymentFields, dtypeOverride) {
136328
136467
  if (deploymentFields === null) {
136329
136468
  return await ctx.crash({
136330
136469
  exitCode: 1,
@@ -136339,7 +136478,7 @@ async function resolveDefaultEnvBackend(ctx, deploymentFields) {
136339
136478
  printedMessage: "Default environment variables are not available for anonymous deployments."
136340
136479
  });
136341
136480
  }
136342
- const dtype = resolveDefaultEnvDtype(deploymentFields.deploymentType);
136481
+ const dtype = dtypeOverride ?? resolveDefaultEnvDtype(deploymentFields.deploymentType);
136343
136482
  const { projectId } = await fetchTeamAndProject(
136344
136483
  ctx,
136345
136484
  deploymentFields.deploymentName
@@ -147385,8 +147524,157 @@ function defaultRef(branch, deploymentType) {
147385
147524
  return ref;
147386
147525
  }
147387
147526
 
147527
+ // src/cli/deploymentTokenCreate.ts
147528
+ init_source();
147529
+ init_log();
147530
+ init_api3();
147531
+ init_envvars();
147532
+ init_utils5();
147533
+ var deploymentTokenCreate = new Command("create").summary("Create an access token").description(
147534
+ `Creates a deploy key that, when set as ${chalkStderr.bold(CONVEX_DEPLOY_KEY_ENV_VAR_NAME)}, scopes all commands to the target deployment. Defaults to the current deployment if '--deployment' isn't passed
147535
+
147536
+ Print a new deploy key to stdout: \`npx convex deployment token create my-token\`
147537
+ Save a new deploy key in ${ENV_VAR_FILE_PATH}: \`npx convex deployment token create my-token --save-env\`
147538
+ Save a new deploy key in a custom env file: \`npx convex deployment token create ci-token --save-env .env.production\`
147539
+ Create a key for the project's prod: \`npx convex deployment token create ci-token --deployment prod\`
147540
+ `
147541
+ ).argument("<name>", "Name for the new deploy key").allowExcessArguments(false).option(
147542
+ "--save-env [path]",
147543
+ `Save the new key as ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} in an env file instead of printing it. Defaults to ${ENV_VAR_FILE_PATH}.`
147544
+ ).addDeploymentSelectionOptions(actionDescription("Create a deploy key for")).showHelpAfterError().action(async (name, options) => {
147545
+ const ctx = await oneoffContext(options);
147546
+ const auth2 = ctx.bigBrainAuth();
147547
+ if (auth2 === null || auth2.kind !== "accessToken") {
147548
+ return await ctx.crash({
147549
+ exitCode: 1,
147550
+ errorType: "fatal",
147551
+ printedMessage: `Creating a deploy key currently requires being logged in with a personal access token. ${process.env[CONVEX_DEPLOY_KEY_ENV_VAR_NAME] ? `Unset ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME}` : `Run ${chalkStderr.bold("npx convex login")}`} and try again.`
147552
+ });
147553
+ }
147554
+ const deploymentSelection = await getDeploymentSelection(ctx, options);
147555
+ const deployment2 = await loadSelectedDeploymentCredentials(
147556
+ ctx,
147557
+ deploymentSelection,
147558
+ { ensureLocalRunning: false }
147559
+ );
147560
+ if (deployment2.deploymentFields === null) {
147561
+ return await ctx.crash({
147562
+ exitCode: 1,
147563
+ errorType: "fatal",
147564
+ printedMessage: "Cannot create a deploy key for a self-hosted deployment."
147565
+ });
147566
+ }
147567
+ const { deploymentName, deploymentType } = deployment2.deploymentFields;
147568
+ if (deploymentType === "local" || deploymentType === "anonymous") {
147569
+ return await ctx.crash({
147570
+ exitCode: 1,
147571
+ errorType: "fatal",
147572
+ printedMessage: `Cannot create a deploy key for a ${deploymentType} deployment.`
147573
+ });
147574
+ }
147575
+ showSpinner(`Creating deploy key for ${deploymentName}...`);
147576
+ const response = await typedPlatformClient(ctx).POST(
147577
+ "/deployments/{deployment_name}/create_deploy_key",
147578
+ {
147579
+ params: { path: { deployment_name: deploymentName } },
147580
+ body: { name }
147581
+ }
147582
+ );
147583
+ const deployKey = response.data.deployKey;
147584
+ if (options.saveEnv === void 0) {
147585
+ logFinishedStep(`Created deploy key "${name}" for ${deploymentName}.`);
147586
+ logOutput(deployKey);
147587
+ return;
147588
+ }
147589
+ const envFile = typeof options.saveEnv === "string" ? options.saveEnv : ENV_VAR_FILE_PATH;
147590
+ const existingFileContent = ctx.fs.exists(envFile) ? ctx.fs.readUtf8File(envFile) : null;
147591
+ const updatedContent = changedEnvVarFile({
147592
+ existingFileContent,
147593
+ envVarName: CONVEX_DEPLOY_KEY_ENV_VAR_NAME,
147594
+ envVarValue: deployKey,
147595
+ commentAfterValue: null,
147596
+ commentOnPreviousLine: null
147597
+ });
147598
+ if (updatedContent === null) {
147599
+ logFinishedStep(
147600
+ `Deploy key for ${deploymentName} already present in ${envFile}; no changes made.`
147601
+ );
147602
+ return;
147603
+ }
147604
+ ctx.fs.writeUtf8File(envFile, updatedContent);
147605
+ logFinishedStep(
147606
+ `Saved deploy key "${name}" for ${deploymentName} as ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} in ${envFile}.`
147607
+ );
147608
+ });
147609
+
147610
+ // src/cli/deploymentTokenDelete.ts
147611
+ init_source();
147612
+ init_log();
147613
+ init_api3();
147614
+ init_utils5();
147615
+ var deploymentTokenDelete = new Command("delete").summary("Delete an access token").description(
147616
+ "Delete an access token. Currently only deploy keys (deployment-scoped access tokens) are supported.\n\nThe positional `<nameOrToken>` can be the unique name of the deploy key (as passed to `token create`) or the deploy key value itself. The target deployment defaults to the currently-selected one; pass `--deployment` to target a different deployment.\n\n Delete by name: `npx convex deployment token delete my-token`\n Delete by value: `npx convex deployment token delete 'dev:happy-animal-123|ey...'`\n Target prod: `npx convex deployment token delete ci-token --deployment prod`"
147617
+ ).argument(
147618
+ "<nameOrToken>",
147619
+ "The unique name of the deploy key, or the deploy key value itself."
147620
+ ).allowExcessArguments(false).addDeploymentSelectionOptions(actionDescription("Delete a deploy key for")).showHelpAfterError().action(async (nameOrToken, options) => {
147621
+ const ctx = await oneoffContext(options);
147622
+ const auth2 = ctx.bigBrainAuth();
147623
+ if (auth2 === null || auth2.kind !== "accessToken") {
147624
+ return await ctx.crash({
147625
+ exitCode: 1,
147626
+ errorType: "fatal",
147627
+ printedMessage: `Deleting a deploy key requires being logged in with a personal access token. ${auth2 === null ? "Run " : `Unset ${CONVEX_DEPLOY_KEY_ENV_VAR_NAME} and run `}${chalkStderr.bold("npx convex login")} and try again.`
147628
+ });
147629
+ }
147630
+ const deploymentSelection = await getDeploymentSelection(ctx, options);
147631
+ const deployment2 = await loadSelectedDeploymentCredentials(
147632
+ ctx,
147633
+ deploymentSelection,
147634
+ { ensureLocalRunning: false }
147635
+ );
147636
+ if (deployment2.deploymentFields === null) {
147637
+ return await ctx.crash({
147638
+ exitCode: 1,
147639
+ errorType: "fatal",
147640
+ printedMessage: "Cannot delete a deploy key for a self-hosted deployment."
147641
+ });
147642
+ }
147643
+ const { deploymentName, deploymentType } = deployment2.deploymentFields;
147644
+ if (deploymentType === "local" || deploymentType === "anonymous") {
147645
+ return await ctx.crash({
147646
+ exitCode: 1,
147647
+ errorType: "fatal",
147648
+ printedMessage: `Cannot delete a deploy key for a ${deploymentType} deployment.`
147649
+ });
147650
+ }
147651
+ if (/^(dev|prod|preview|local):[^|]*$/.test(nameOrToken)) {
147652
+ return await ctx.crash({
147653
+ exitCode: 1,
147654
+ errorType: "fatal",
147655
+ printedMessage: `"${nameOrToken}" looks like a partial deploy key \u2014 your shell likely consumed the \`|\` and everything after it. Wrap the value in single quotes (e.g. ${chalkStderr.bold(`npx convex deployment token delete '${nameOrToken}|...'`)}) and try again.`
147656
+ });
147657
+ }
147658
+ const pipeIdx = nameOrToken.indexOf("|");
147659
+ const id = pipeIdx >= 0 ? nameOrToken.slice(pipeIdx + 1) : nameOrToken;
147660
+ showSpinner(`Deleting deploy key for ${deploymentName}...`);
147661
+ await typedPlatformClient(ctx).POST(
147662
+ "/deployments/{deployment_name}/delete_deploy_key",
147663
+ {
147664
+ params: { path: { deployment_name: deploymentName } },
147665
+ body: { id }
147666
+ }
147667
+ );
147668
+ logFinishedStep(`Deleted deploy key for ${deploymentName}.`);
147669
+ });
147670
+
147671
+ // src/cli/deploymentToken.ts
147672
+ var deploymentToken = new Command("token").summary("Manage access tokens").description(
147673
+ "Create and delete access tokens. Currently supports deploy keys."
147674
+ ).addCommand(deploymentTokenCreate).addCommand(deploymentTokenDelete);
147675
+
147388
147676
  // src/cli/deployment.ts
147389
- var deployment = new Command("deployment").summary("Manage deployments").description("Manage deployments in your project.").addCommand(deploymentSelect).addCommand(deploymentCreate);
147677
+ var deployment = new Command("deployment").summary("Manage deployments").description("Manage deployments in your project.").addCommand(deploymentSelect).addCommand(deploymentCreate).addCommand(deploymentToken);
147390
147678
 
147391
147679
  // src/cli/aiFiles.ts
147392
147680
  var import_path34 = __toESM(require("path"), 1);