convex 1.31.6 → 1.31.8-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 (258) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/bin/main-dev +1 -1
  3. package/dist/browser.bundle.js +1 -1
  4. package/dist/browser.bundle.js.map +1 -1
  5. package/dist/cjs/cli/configure.js +21 -15
  6. package/dist/cjs/cli/configure.js.map +2 -2
  7. package/dist/cjs/cli/convexImport.js +1 -1
  8. package/dist/cjs/cli/convexImport.js.map +2 -2
  9. package/dist/cjs/cli/dashboard.js +5 -4
  10. package/dist/cjs/cli/dashboard.js.map +2 -2
  11. package/dist/cjs/cli/deploy.js +4 -2
  12. package/dist/cjs/cli/deploy.js.map +2 -2
  13. package/dist/cjs/cli/dev.js +5 -0
  14. package/dist/cjs/cli/dev.js.map +2 -2
  15. package/dist/cjs/cli/integration.js +8 -1
  16. package/dist/cjs/cli/integration.js.map +2 -2
  17. package/dist/cjs/cli/lib/api.js +2 -4
  18. package/dist/cjs/cli/lib/api.js.map +2 -2
  19. package/dist/cjs/cli/lib/command.js +8 -2
  20. package/dist/cjs/cli/lib/command.js.map +2 -2
  21. package/dist/cjs/cli/lib/components.js +53 -1
  22. package/dist/cjs/cli/lib/components.js.map +2 -2
  23. package/dist/cjs/cli/lib/config.js.map +2 -2
  24. package/dist/cjs/cli/lib/dashboard.js +8 -2
  25. package/dist/cjs/cli/lib/dashboard.js.map +2 -2
  26. package/dist/cjs/cli/lib/deploy2.js +21 -6
  27. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  28. package/dist/cjs/cli/lib/deployApi/componentDefinition.js +3 -2
  29. package/dist/cjs/cli/lib/deployApi/componentDefinition.js.map +2 -2
  30. package/dist/cjs/cli/lib/deployApi/definitionConfig.js +2 -1
  31. package/dist/cjs/cli/lib/deployApi/definitionConfig.js.map +2 -2
  32. package/dist/cjs/cli/lib/deployApi/modules.js +6 -0
  33. package/dist/cjs/cli/lib/deployApi/modules.js.map +2 -2
  34. package/dist/cjs/cli/lib/deployment.js.map +2 -2
  35. package/dist/cjs/cli/lib/dev.js +3 -1
  36. package/dist/cjs/cli/lib/dev.js.map +2 -2
  37. package/dist/cjs/cli/lib/env.js +13 -1
  38. package/dist/cjs/cli/lib/env.js.map +2 -2
  39. package/dist/cjs/cli/lib/envvars.js +100 -39
  40. package/dist/cjs/cli/lib/envvars.js.map +2 -2
  41. package/dist/cjs/cli/lib/init.js +12 -6
  42. package/dist/cjs/cli/lib/init.js.map +2 -2
  43. package/dist/cjs/cli/lib/localDeployment/anonymous.js +1 -1
  44. package/dist/cjs/cli/lib/localDeployment/anonymous.js.map +2 -2
  45. package/dist/cjs/cli/lib/run.js +1 -0
  46. package/dist/cjs/cli/lib/run.js.map +2 -2
  47. package/dist/cjs/cli/lib/typecheck.js +30 -0
  48. package/dist/cjs/cli/lib/typecheck.js.map +2 -2
  49. package/dist/cjs/cli/lib/watch.js +3 -1
  50. package/dist/cjs/cli/lib/watch.js.map +2 -2
  51. package/dist/cjs/cli/lib/workos/workos.js +1 -1
  52. package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
  53. package/dist/cjs/index.js +1 -1
  54. package/dist/cjs/index.js.map +1 -1
  55. package/dist/cjs/server/pagination.js.map +2 -2
  56. package/dist/cjs/values/index.js +3 -0
  57. package/dist/cjs/values/index.js.map +2 -2
  58. package/dist/cjs/values/size.js +108 -0
  59. package/dist/cjs/values/size.js.map +7 -0
  60. package/dist/cjs-types/cli/configure.d.ts +2 -7
  61. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  62. package/dist/cjs-types/cli/dashboard.d.ts +0 -1
  63. package/dist/cjs-types/cli/dashboard.d.ts.map +1 -1
  64. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  65. package/dist/cjs-types/cli/dev.d.ts +1 -0
  66. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  67. package/dist/cjs-types/cli/integration.d.ts.map +1 -1
  68. package/dist/cjs-types/cli/lib/api.d.ts +2 -2
  69. package/dist/cjs-types/cli/lib/api.d.ts.map +1 -1
  70. package/dist/cjs-types/cli/lib/command.d.ts +2 -0
  71. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  72. package/dist/cjs-types/cli/lib/components.d.ts +8 -0
  73. package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
  74. package/dist/cjs-types/cli/lib/components.test.d.ts +2 -0
  75. package/dist/cjs-types/cli/lib/components.test.d.ts.map +1 -0
  76. package/dist/cjs-types/cli/lib/config.d.ts +1 -1
  77. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  78. package/dist/cjs-types/cli/lib/dashboard.d.ts +1 -1
  79. package/dist/cjs-types/cli/lib/dashboard.d.ts.map +1 -1
  80. package/dist/cjs-types/cli/lib/deploy2.d.ts +1 -0
  81. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  82. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts +16 -15
  83. package/dist/cjs-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  84. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts +26 -3
  85. package/dist/cjs-types/cli/lib/deployApi/definitionConfig.d.ts.map +1 -1
  86. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts +14 -0
  87. package/dist/cjs-types/cli/lib/deployApi/modules.d.ts.map +1 -1
  88. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts +38 -5
  89. package/dist/cjs-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  90. package/dist/cjs-types/cli/lib/deployment.d.ts.map +1 -1
  91. package/dist/cjs-types/cli/lib/dev.d.ts +1 -0
  92. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  93. package/dist/cjs-types/cli/lib/env.d.ts +4 -0
  94. package/dist/cjs-types/cli/lib/env.d.ts.map +1 -1
  95. package/dist/cjs-types/cli/lib/envvars.d.ts +32 -5
  96. package/dist/cjs-types/cli/lib/envvars.d.ts.map +1 -1
  97. package/dist/cjs-types/cli/lib/init.d.ts +1 -0
  98. package/dist/cjs-types/cli/lib/init.d.ts.map +1 -1
  99. package/dist/cjs-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  100. package/dist/cjs-types/cli/lib/run.d.ts.map +1 -1
  101. package/dist/cjs-types/cli/lib/typecheck.d.ts.map +1 -1
  102. package/dist/cjs-types/cli/lib/watch.d.ts +2 -1
  103. package/dist/cjs-types/cli/lib/watch.d.ts.map +1 -1
  104. package/dist/cjs-types/index.d.ts +1 -1
  105. package/dist/cjs-types/index.d.ts.map +1 -1
  106. package/dist/cjs-types/server/pagination.d.ts +34 -0
  107. package/dist/cjs-types/server/pagination.d.ts.map +1 -1
  108. package/dist/cjs-types/values/index.d.ts +1 -0
  109. package/dist/cjs-types/values/index.d.ts.map +1 -1
  110. package/dist/cjs-types/values/size.d.ts +53 -0
  111. package/dist/cjs-types/values/size.d.ts.map +1 -0
  112. package/dist/cjs-types/values/size.test.d.ts +2 -0
  113. package/dist/cjs-types/values/size.test.d.ts.map +1 -0
  114. package/dist/cli.bundle.cjs +655 -4297
  115. package/dist/cli.bundle.cjs.map +4 -4
  116. package/dist/esm/cli/configure.js +24 -17
  117. package/dist/esm/cli/configure.js.map +2 -2
  118. package/dist/esm/cli/convexImport.js +2 -2
  119. package/dist/esm/cli/convexImport.js.map +2 -2
  120. package/dist/esm/cli/dashboard.js +5 -3
  121. package/dist/esm/cli/dashboard.js.map +2 -2
  122. package/dist/esm/cli/deploy.js +5 -3
  123. package/dist/esm/cli/deploy.js.map +2 -2
  124. package/dist/esm/cli/dev.js +5 -0
  125. package/dist/esm/cli/dev.js.map +2 -2
  126. package/dist/esm/cli/integration.js +8 -1
  127. package/dist/esm/cli/integration.js.map +2 -2
  128. package/dist/esm/cli/lib/api.js +1 -3
  129. package/dist/esm/cli/lib/api.js.map +2 -2
  130. package/dist/esm/cli/lib/command.js +8 -2
  131. package/dist/esm/cli/lib/command.js.map +2 -2
  132. package/dist/esm/cli/lib/components.js +51 -1
  133. package/dist/esm/cli/lib/components.js.map +2 -2
  134. package/dist/esm/cli/lib/config.js.map +2 -2
  135. package/dist/esm/cli/lib/dashboard.js +8 -2
  136. package/dist/esm/cli/lib/dashboard.js.map +2 -2
  137. package/dist/esm/cli/lib/deploy2.js +22 -7
  138. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  139. package/dist/esm/cli/lib/deployApi/componentDefinition.js +3 -2
  140. package/dist/esm/cli/lib/deployApi/componentDefinition.js.map +2 -2
  141. package/dist/esm/cli/lib/deployApi/definitionConfig.js +3 -2
  142. package/dist/esm/cli/lib/deployApi/definitionConfig.js.map +2 -2
  143. package/dist/esm/cli/lib/deployApi/modules.js +5 -0
  144. package/dist/esm/cli/lib/deployApi/modules.js.map +2 -2
  145. package/dist/esm/cli/lib/deployment.js.map +2 -2
  146. package/dist/esm/cli/lib/dev.js +3 -1
  147. package/dist/esm/cli/lib/dev.js.map +2 -2
  148. package/dist/esm/cli/lib/env.js +11 -0
  149. package/dist/esm/cli/lib/env.js.map +2 -2
  150. package/dist/esm/cli/lib/envvars.js +98 -37
  151. package/dist/esm/cli/lib/envvars.js.map +2 -2
  152. package/dist/esm/cli/lib/init.js +13 -7
  153. package/dist/esm/cli/lib/init.js.map +2 -2
  154. package/dist/esm/cli/lib/localDeployment/anonymous.js +2 -2
  155. package/dist/esm/cli/lib/localDeployment/anonymous.js.map +2 -2
  156. package/dist/esm/cli/lib/run.js +1 -0
  157. package/dist/esm/cli/lib/run.js.map +2 -2
  158. package/dist/esm/cli/lib/typecheck.js +37 -2
  159. package/dist/esm/cli/lib/typecheck.js.map +2 -2
  160. package/dist/esm/cli/lib/watch.js +3 -1
  161. package/dist/esm/cli/lib/watch.js.map +2 -2
  162. package/dist/esm/cli/lib/workos/workos.js +2 -2
  163. package/dist/esm/cli/lib/workos/workos.js.map +2 -2
  164. package/dist/esm/index.js +1 -1
  165. package/dist/esm/index.js.map +1 -1
  166. package/dist/esm/server/pagination.js.map +2 -2
  167. package/dist/esm/values/index.js +1 -0
  168. package/dist/esm/values/index.js.map +2 -2
  169. package/dist/esm/values/size.js +83 -0
  170. package/dist/esm/values/size.js.map +7 -0
  171. package/dist/esm-types/cli/configure.d.ts +2 -7
  172. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  173. package/dist/esm-types/cli/dashboard.d.ts +0 -1
  174. package/dist/esm-types/cli/dashboard.d.ts.map +1 -1
  175. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  176. package/dist/esm-types/cli/dev.d.ts +1 -0
  177. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  178. package/dist/esm-types/cli/integration.d.ts.map +1 -1
  179. package/dist/esm-types/cli/lib/api.d.ts +2 -2
  180. package/dist/esm-types/cli/lib/api.d.ts.map +1 -1
  181. package/dist/esm-types/cli/lib/command.d.ts +2 -0
  182. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  183. package/dist/esm-types/cli/lib/components.d.ts +8 -0
  184. package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
  185. package/dist/esm-types/cli/lib/components.test.d.ts +2 -0
  186. package/dist/esm-types/cli/lib/components.test.d.ts.map +1 -0
  187. package/dist/esm-types/cli/lib/config.d.ts +1 -1
  188. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  189. package/dist/esm-types/cli/lib/dashboard.d.ts +1 -1
  190. package/dist/esm-types/cli/lib/dashboard.d.ts.map +1 -1
  191. package/dist/esm-types/cli/lib/deploy2.d.ts +1 -0
  192. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  193. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts +16 -15
  194. package/dist/esm-types/cli/lib/deployApi/componentDefinition.d.ts.map +1 -1
  195. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts +26 -3
  196. package/dist/esm-types/cli/lib/deployApi/definitionConfig.d.ts.map +1 -1
  197. package/dist/esm-types/cli/lib/deployApi/modules.d.ts +14 -0
  198. package/dist/esm-types/cli/lib/deployApi/modules.d.ts.map +1 -1
  199. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts +38 -5
  200. package/dist/esm-types/cli/lib/deployApi/startPush.d.ts.map +1 -1
  201. package/dist/esm-types/cli/lib/deployment.d.ts.map +1 -1
  202. package/dist/esm-types/cli/lib/dev.d.ts +1 -0
  203. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  204. package/dist/esm-types/cli/lib/env.d.ts +4 -0
  205. package/dist/esm-types/cli/lib/env.d.ts.map +1 -1
  206. package/dist/esm-types/cli/lib/envvars.d.ts +32 -5
  207. package/dist/esm-types/cli/lib/envvars.d.ts.map +1 -1
  208. package/dist/esm-types/cli/lib/init.d.ts +1 -0
  209. package/dist/esm-types/cli/lib/init.d.ts.map +1 -1
  210. package/dist/esm-types/cli/lib/localDeployment/anonymous.d.ts.map +1 -1
  211. package/dist/esm-types/cli/lib/run.d.ts.map +1 -1
  212. package/dist/esm-types/cli/lib/typecheck.d.ts.map +1 -1
  213. package/dist/esm-types/cli/lib/watch.d.ts +2 -1
  214. package/dist/esm-types/cli/lib/watch.d.ts.map +1 -1
  215. package/dist/esm-types/index.d.ts +1 -1
  216. package/dist/esm-types/index.d.ts.map +1 -1
  217. package/dist/esm-types/server/pagination.d.ts +34 -0
  218. package/dist/esm-types/server/pagination.d.ts.map +1 -1
  219. package/dist/esm-types/values/index.d.ts +1 -0
  220. package/dist/esm-types/values/index.d.ts.map +1 -1
  221. package/dist/esm-types/values/size.d.ts +53 -0
  222. package/dist/esm-types/values/size.d.ts.map +1 -0
  223. package/dist/esm-types/values/size.test.d.ts +2 -0
  224. package/dist/esm-types/values/size.test.d.ts.map +1 -0
  225. package/dist/react.bundle.js +1 -1
  226. package/dist/react.bundle.js.map +1 -1
  227. package/package.json +1 -1
  228. package/src/cli/configure.ts +44 -25
  229. package/src/cli/convexImport.ts +2 -2
  230. package/src/cli/dashboard.ts +5 -6
  231. package/src/cli/deploy.ts +8 -4
  232. package/src/cli/dev.ts +8 -0
  233. package/src/cli/integration.ts +11 -3
  234. package/src/cli/lib/api.ts +3 -14
  235. package/src/cli/lib/command.ts +12 -1
  236. package/src/cli/lib/components.test.ts +227 -0
  237. package/src/cli/lib/components.ts +83 -1
  238. package/src/cli/lib/config.ts +4 -1
  239. package/src/cli/lib/dashboard.ts +9 -3
  240. package/src/cli/lib/deploy2.ts +24 -8
  241. package/src/cli/lib/deployApi/componentDefinition.ts +4 -2
  242. package/src/cli/lib/deployApi/definitionConfig.ts +3 -2
  243. package/src/cli/lib/deployApi/modules.ts +7 -0
  244. package/src/cli/lib/deployment.ts +1 -0
  245. package/src/cli/lib/dev.ts +3 -0
  246. package/src/cli/lib/env.ts +15 -0
  247. package/src/cli/lib/envvars.ts +164 -51
  248. package/src/cli/lib/init.ts +16 -7
  249. package/src/cli/lib/localDeployment/anonymous.ts +7 -6
  250. package/src/cli/lib/run.ts +1 -0
  251. package/src/cli/lib/typecheck.ts +44 -2
  252. package/src/cli/lib/watch.ts +7 -1
  253. package/src/cli/lib/workos/workos.ts +2 -2
  254. package/src/index.ts +1 -1
  255. package/src/server/pagination.ts +16 -17
  256. package/src/values/index.ts +1 -0
  257. package/src/values/size.test.ts +86 -0
  258. package/src/values/size.ts +191 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/dev.ts"],
4
- "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logVerbose } from \"../bundler/log.js\";\nimport { deploymentCredentialsOrConfigure } from \"./configure.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { normalizeDevOptions } from \"./lib/command.js\";\nimport { devAgainstDeployment } from \"./lib/dev.js\";\nimport { deploymentSelectionWithinProjectFromOptions } from \"./lib/api.js\";\nimport {\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n CONVEX_SELF_HOSTED_URL_VAR_NAME,\n} from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { detectSuspiciousEnvironmentVariables } from \"./lib/envvars.js\";\nimport { checkVersion } from \"./lib/updates.js\";\n\nexport const dev = new Command(\"dev\")\n .summary(\"Develop against a dev deployment, watching for changes\")\n .description(\n \"Develop against a dev deployment, watching for changes\\n\\n\" +\n \" 1. Configures a new or existing project (if needed)\\n\" +\n \" 2. Updates generated types and pushes code to the configured dev deployment\\n\" +\n \" 3. Runs the provided command (if `--run` or `--run-sh` is used)\\n\" +\n \" 4. Watches for file changes, and repeats step 2\\n\",\n )\n .allowExcessArguments(false)\n .option(\"-v, --verbose\", \"Show full listing of changes\")\n .addOption(\n new Option(\n \"--typecheck <mode>\",\n `Check TypeScript files with \\`tsc --noEmit\\`.`,\n )\n .choices([\"enable\", \"try\", \"disable\"] as const)\n .default(\"try\" as const),\n )\n .option(\n \"--typecheck-components\",\n \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n false,\n )\n .addOption(\n new Option(\"--codegen <mode>\", \"Regenerate code in `convex/_generated/`\")\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const),\n )\n .option(\n \"--once\",\n \"Execute only the first 3 steps, stop on any failure\",\n false,\n )\n .option(\n \"--until-success\",\n \"Execute only the first 3 steps, on failure watch for local and remote changes and retry steps 2 and 3\",\n false,\n )\n .addOption(\n new Option(\n \"--run <functionName>\",\n \"The identifier of the function to run in step 3, \" +\n \"like `api.init.createData` or `myDir/myFile:myFunction`\",\n ).conflicts([\"--run-sh\"]),\n )\n .option(\n \"--run-component <functionName>\",\n \"If --run is used and the function is in a component, the path the component tree defined in convex.config.ts. \" +\n \"Components are a beta feature. This flag is unstable and may change in subsequent releases.\",\n )\n .addOption(\n new Option(\n \"--run-sh <command>\",\n \"A shell command to run in step 3, like `node myScript.js`. \" +\n \"If you just want to run a Convex function, use `--run` instead.\",\n ).conflicts([\"--run\"]),\n )\n .addOption(\n new Option(\n \"--tail-logs [mode]\",\n \"Choose whether to tail Convex function logs in this terminal\",\n )\n .choices([\"always\", \"pause-on-deploy\", \"disable\"] as const)\n .default(\"pause-on-deploy\"),\n )\n .addOption(new Option(\"--trace-events\").default(false).hideHelp())\n .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n .addOption(new Option(\"--debug-node-apis\").hideHelp())\n .addOption(new Option(\"--live-component-sources\").hideHelp())\n .addOption(\n new Option(\n \"--configure [choice]\",\n \"Ignore existing configuration and configure new or existing project, interactively or set by --team <team_slug>, --project <project_slug>, and --dev-deployment local|cloud\",\n )\n .choices([\"new\", \"existing\"] as const)\n .conflicts([\"--local\", \"--cloud\"]),\n )\n .addOption(\n new Option(\n \"--team <team_slug>\",\n \"The team you'd like to use for this project\",\n ).hideHelp(),\n )\n .addOption(\n new Option(\n \"--project <project_slug>\",\n \"The name of the project you'd like to configure\",\n ).hideHelp(),\n )\n .addOption(\n new Option(\n \"--dev-deployment <mode>\",\n \"Use a local or cloud deployment for dev for this project\",\n )\n .choices([\"cloud\", \"local\"] as const)\n .conflicts([\"--prod\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--prod\",\n \"Develop live against this project's production deployment.\",\n )\n .default(false)\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--env-file <envFile>\",\n `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n ),\n )\n .addOption(new Option(\"--skip-push\").default(false).hideHelp())\n .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n .addOption(new Option(\"--url <url>\").hideHelp())\n // Options for testing\n .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n .addOption(new Option(\"--local-cloud-port <port>\").hideHelp())\n .addOption(new Option(\"--local-site-port <port>\").hideHelp())\n .addOption(new Option(\"--local-backend-version <version>\").hideHelp())\n .addOption(new Option(\"--local-force-upgrade\").default(false).hideHelp())\n .addOption(\n new Option(\n \"--local\",\n \"Use local deployment regardless of last used backend. DB data will not be downloaded from any cloud deployment.\",\n )\n .default(false)\n .conflicts([\"--prod\", \"--url\", \"--admin-key\", \"--cloud\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--cloud\",\n \"Use cloud deployment regardles of last used backend. DB data will not be uploaded from local.\",\n )\n .default(false)\n .conflicts([\"--prod\", \"--url\", \"--admin-key\", \"--local\"])\n .hideHelp(),\n )\n .showHelpAfterError()\n .action(async (cmdOptions) => {\n const ctx = await oneoffContext(cmdOptions);\n process.on(\"SIGINT\", async () => {\n logVerbose(\"Received SIGINT, cleaning up...\");\n await ctx.flushAndExit(-2);\n });\n\n await detectSuspiciousEnvironmentVariables(\n ctx,\n !!process.env.CONVEX_IGNORE_SUSPICIOUS_ENV_VARS,\n );\n\n const devOptions = await normalizeDevOptions(ctx, cmdOptions);\n\n const selectionWithinProject =\n deploymentSelectionWithinProjectFromOptions(cmdOptions);\n\n if (cmdOptions.configure === undefined) {\n if (cmdOptions.team || cmdOptions.project || cmdOptions.devDeployment)\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`--team, --project, and --dev-deployment can can only be used with `--configure`.\",\n });\n }\n\n const localOptions: {\n ports?: { cloud: number; site: number };\n backendVersion?: string | undefined;\n forceUpgrade: boolean;\n } = { forceUpgrade: false };\n if (!cmdOptions.local && cmdOptions.devDeployment !== \"local\") {\n if (\n cmdOptions.localCloudPort !== undefined ||\n cmdOptions.localSitePort !== undefined ||\n cmdOptions.localBackendVersion !== undefined ||\n cmdOptions.localForceUpgrade === true\n ) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`--local-*` options can only be used with `--configure --dev-deployment local` or `--local`.\",\n });\n }\n } else {\n if (cmdOptions.localCloudPort !== undefined) {\n if (cmdOptions.localSitePort === undefined) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`--local-cloud-port` requires `--local-site-port` to be set.\",\n });\n }\n localOptions[\"ports\"] = {\n cloud: parseInt(cmdOptions.localCloudPort),\n site: parseInt(cmdOptions.localSitePort),\n };\n }\n localOptions[\"backendVersion\"] = cmdOptions.localBackendVersion;\n localOptions[\"forceUpgrade\"] = cmdOptions.localForceUpgrade;\n }\n\n const configure =\n cmdOptions.configure === true ? \"ask\" : (cmdOptions.configure ?? null);\n const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n const credentials = await deploymentCredentialsOrConfigure(\n ctx,\n deploymentSelection,\n configure,\n {\n ...cmdOptions,\n localOptions,\n selectionWithinProject,\n },\n );\n\n await Promise.all([\n ...(!cmdOptions.skipPush\n ? [\n devAgainstDeployment(\n ctx,\n {\n url: credentials.url,\n adminKey: credentials.adminKey,\n deploymentName:\n credentials.deploymentFields?.deploymentName ?? null,\n ...(credentials.deploymentFields?.deploymentType !== undefined\n ? {\n deploymentType:\n credentials.deploymentFields.deploymentType,\n }\n : {}),\n },\n devOptions,\n ),\n ]\n : []),\n ...(credentials.deploymentFields !== null\n ? [\n usageStateWarning(ctx, credentials.deploymentFields.deploymentName),\n checkVersion(),\n ]\n : []),\n ]);\n });\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Command, Option } from \"@commander-js/extra-typings\";\nimport { oneoffContext } from \"../bundler/context.js\";\nimport { logVerbose } from \"../bundler/log.js\";\nimport { deploymentCredentialsOrConfigure } from \"./configure.js\";\nimport { usageStateWarning } from \"./lib/usage.js\";\nimport { normalizeDevOptions } from \"./lib/command.js\";\nimport { devAgainstDeployment } from \"./lib/dev.js\";\nimport { deploymentSelectionWithinProjectFromOptions } from \"./lib/api.js\";\nimport {\n CONVEX_DEPLOYMENT_ENV_VAR_NAME,\n CONVEX_SELF_HOSTED_URL_VAR_NAME,\n} from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport { detectSuspiciousEnvironmentVariables } from \"./lib/envvars.js\";\nimport { checkVersion } from \"./lib/updates.js\";\n\nexport const dev = new Command(\"dev\")\n .summary(\"Develop against a dev deployment, watching for changes\")\n .description(\n \"Develop against a dev deployment, watching for changes\\n\\n\" +\n \" 1. Configures a new or existing project (if needed)\\n\" +\n \" 2. Updates generated types and pushes code to the configured dev deployment\\n\" +\n \" 3. Runs the provided command (if `--run` or `--run-sh` is used)\\n\" +\n \" 4. Watches for file changes, and repeats step 2\\n\",\n )\n .allowExcessArguments(false)\n .option(\"-v, --verbose\", \"Show full listing of changes\")\n .addOption(\n new Option(\n \"--typecheck <mode>\",\n `Check TypeScript files with \\`tsc --noEmit\\`.`,\n )\n .choices([\"enable\", \"try\", \"disable\"] as const)\n .default(\"try\" as const),\n )\n .option(\n \"--typecheck-components\",\n \"Check TypeScript files within component implementations with `tsc --noEmit`.\",\n false,\n )\n .addOption(\n new Option(\"--codegen <mode>\", \"Regenerate code in `convex/_generated/`\")\n .choices([\"enable\", \"disable\"] as const)\n .default(\"enable\" as const),\n )\n .addOption(\n new Option(\n \"--push-all-modules\",\n \"Push all modules without checking for unchanged module hashes from the server\",\n )\n .default(false)\n .hideHelp(),\n )\n .option(\n \"--once\",\n \"Execute only the first 3 steps, stop on any failure\",\n false,\n )\n .option(\n \"--until-success\",\n \"Execute only the first 3 steps, on failure watch for local and remote changes and retry steps 2 and 3\",\n false,\n )\n .addOption(\n new Option(\n \"--run <functionName>\",\n \"The identifier of the function to run in step 3, \" +\n \"like `api.init.createData` or `myDir/myFile:myFunction`\",\n ).conflicts([\"--run-sh\"]),\n )\n .option(\n \"--run-component <functionName>\",\n \"If --run is used and the function is in a component, the path the component tree defined in convex.config.ts. \" +\n \"Components are a beta feature. This flag is unstable and may change in subsequent releases.\",\n )\n .addOption(\n new Option(\n \"--run-sh <command>\",\n \"A shell command to run in step 3, like `node myScript.js`. \" +\n \"If you just want to run a Convex function, use `--run` instead.\",\n ).conflicts([\"--run\"]),\n )\n .addOption(\n new Option(\n \"--tail-logs [mode]\",\n \"Choose whether to tail Convex function logs in this terminal\",\n )\n .choices([\"always\", \"pause-on-deploy\", \"disable\"] as const)\n .default(\"pause-on-deploy\"),\n )\n .addOption(new Option(\"--trace-events\").default(false).hideHelp())\n .addOption(new Option(\"--debug-bundle-path <path>\").hideHelp())\n .addOption(new Option(\"--debug-node-apis\").hideHelp())\n .addOption(new Option(\"--live-component-sources\").hideHelp())\n .addOption(\n new Option(\n \"--configure [choice]\",\n \"Ignore existing configuration and configure new or existing project, interactively or set by --team <team_slug>, --project <project_slug>, and --dev-deployment local|cloud\",\n )\n .choices([\"new\", \"existing\"] as const)\n .conflicts([\"--local\", \"--cloud\"]),\n )\n .addOption(\n new Option(\n \"--team <team_slug>\",\n \"The team you'd like to use for this project\",\n ).hideHelp(),\n )\n .addOption(\n new Option(\n \"--project <project_slug>\",\n \"The name of the project you'd like to configure\",\n ).hideHelp(),\n )\n .addOption(\n new Option(\n \"--dev-deployment <mode>\",\n \"Use a local or cloud deployment for dev for this project\",\n )\n .choices([\"cloud\", \"local\"] as const)\n .conflicts([\"--prod\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--prod\",\n \"Develop live against this project's production deployment.\",\n )\n .default(false)\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--env-file <envFile>\",\n `Path to a custom file of environment variables, for choosing the \\\ndeployment, e.g. ${CONVEX_DEPLOYMENT_ENV_VAR_NAME} or ${CONVEX_SELF_HOSTED_URL_VAR_NAME}. \\\nSame format as .env.local or .env files, and overrides them.`,\n ),\n )\n .addOption(new Option(\"--skip-push\").default(false).hideHelp())\n .addOption(new Option(\"--admin-key <adminKey>\").hideHelp())\n .addOption(new Option(\"--url <url>\").hideHelp())\n // Options for testing\n .addOption(new Option(\"--override-auth-url <url>\").hideHelp())\n .addOption(new Option(\"--override-auth-client <id>\").hideHelp())\n .addOption(new Option(\"--override-auth-username <username>\").hideHelp())\n .addOption(new Option(\"--override-auth-password <password>\").hideHelp())\n .addOption(new Option(\"--local-cloud-port <port>\").hideHelp())\n .addOption(new Option(\"--local-site-port <port>\").hideHelp())\n .addOption(new Option(\"--local-backend-version <version>\").hideHelp())\n .addOption(new Option(\"--local-force-upgrade\").default(false).hideHelp())\n .addOption(\n new Option(\n \"--local\",\n \"Use local deployment regardless of last used backend. DB data will not be downloaded from any cloud deployment.\",\n )\n .default(false)\n .conflicts([\"--prod\", \"--url\", \"--admin-key\", \"--cloud\"])\n .hideHelp(),\n )\n .addOption(\n new Option(\n \"--cloud\",\n \"Use cloud deployment regardles of last used backend. DB data will not be uploaded from local.\",\n )\n .default(false)\n .conflicts([\"--prod\", \"--url\", \"--admin-key\", \"--local\"])\n .hideHelp(),\n )\n .showHelpAfterError()\n .action(async (cmdOptions) => {\n const ctx = await oneoffContext(cmdOptions);\n process.on(\"SIGINT\", async () => {\n logVerbose(\"Received SIGINT, cleaning up...\");\n await ctx.flushAndExit(-2);\n });\n\n await detectSuspiciousEnvironmentVariables(\n ctx,\n !!process.env.CONVEX_IGNORE_SUSPICIOUS_ENV_VARS,\n );\n\n const devOptions = await normalizeDevOptions(ctx, cmdOptions);\n\n const selectionWithinProject =\n deploymentSelectionWithinProjectFromOptions(cmdOptions);\n\n if (cmdOptions.configure === undefined) {\n if (cmdOptions.team || cmdOptions.project || cmdOptions.devDeployment)\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`--team, --project, and --dev-deployment can can only be used with `--configure`.\",\n });\n }\n\n const localOptions: {\n ports?: { cloud: number; site: number };\n backendVersion?: string | undefined;\n forceUpgrade: boolean;\n } = { forceUpgrade: false };\n if (!cmdOptions.local && cmdOptions.devDeployment !== \"local\") {\n if (\n cmdOptions.localCloudPort !== undefined ||\n cmdOptions.localSitePort !== undefined ||\n cmdOptions.localBackendVersion !== undefined ||\n cmdOptions.localForceUpgrade === true\n ) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`--local-*` options can only be used with `--configure --dev-deployment local` or `--local`.\",\n });\n }\n } else {\n if (cmdOptions.localCloudPort !== undefined) {\n if (cmdOptions.localSitePort === undefined) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"`--local-cloud-port` requires `--local-site-port` to be set.\",\n });\n }\n localOptions[\"ports\"] = {\n cloud: parseInt(cmdOptions.localCloudPort),\n site: parseInt(cmdOptions.localSitePort),\n };\n }\n localOptions[\"backendVersion\"] = cmdOptions.localBackendVersion;\n localOptions[\"forceUpgrade\"] = cmdOptions.localForceUpgrade;\n }\n\n const configure =\n cmdOptions.configure === true ? \"ask\" : (cmdOptions.configure ?? null);\n const deploymentSelection = await getDeploymentSelection(ctx, cmdOptions);\n const credentials = await deploymentCredentialsOrConfigure(\n ctx,\n deploymentSelection,\n configure,\n {\n ...cmdOptions,\n localOptions,\n selectionWithinProject,\n },\n );\n\n await Promise.all([\n ...(!cmdOptions.skipPush\n ? [\n devAgainstDeployment(\n ctx,\n {\n url: credentials.url,\n adminKey: credentials.adminKey,\n deploymentName:\n credentials.deploymentFields?.deploymentName ?? null,\n ...(credentials.deploymentFields?.deploymentType !== undefined\n ? {\n deploymentType:\n credentials.deploymentFields.deploymentType,\n }\n : {}),\n },\n devOptions,\n ),\n ]\n : []),\n ...(credentials.deploymentFields !== null\n ? [\n usageStateWarning(ctx, credentials.deploymentFields.deploymentName),\n checkVersion(),\n ]\n : []),\n ]);\n });\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -55,11 +55,18 @@ async function selectEnvDeployment(options) {
55
55
  }
56
56
  const deploymentNotice = ` (on ${import_chalk.chalkStderr.bold(deploymentFields.deploymentType)} deployment ${import_chalk.chalkStderr.bold(deploymentFields.deploymentName)})`;
57
57
  const deploymentType = deploymentFields.deploymentType;
58
+ if (deploymentType === "custom") {
59
+ return await ctx.crash({
60
+ exitCode: 1,
61
+ errorType: "fatal",
62
+ printedMessage: `The WorkOS integration is not available for custom deployments yet.`
63
+ });
64
+ }
58
65
  if (deploymentType !== "dev" && deploymentType !== "preview" && deploymentType !== "prod") {
59
66
  return await ctx.crash({
60
67
  exitCode: 1,
61
68
  errorType: "fatal",
62
- printedMessage: `WorkOS integration is only available for cloud deployments (dev, preview, prod), not ${deploymentType}`
69
+ printedMessage: `The WorkOS integration is only available for cloud deployments (dev, preview, prod), not ${deploymentType}`
63
70
  });
64
71
  }
65
72
  return {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cli/integration.ts"],
4
- "sourcesContent": ["/**\n * Debugging commands for the WorkOS integration; these are unstable, undocumented, and will change or disappear as the WorkOS integration evolves.\n **/\nimport { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { chalkStderr } from \"chalk\";\nimport {\n CloudDeploymentType,\n DeploymentSelectionOptions,\n deploymentSelectionWithinProjectFromOptions,\n fetchTeamAndProject,\n getTeamAndProjectSlugForDeployment,\n loadSelectedDeploymentCredentials,\n} from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport {\n ensureWorkosEnvironmentProvisioned,\n provisionWorkosTeamInteractive,\n} from \"./lib/workos/workos.js\";\nimport {\n disconnectWorkOSTeam,\n getCandidateEmailsForWorkIntegration,\n getDeploymentCanProvisionWorkOSEnvironments,\n getInvitationEligibleEmails,\n getWorkosEnvironmentHealth,\n getWorkosTeamHealth,\n inviteToWorkosTeam,\n listProjectWorkOSEnvironments,\n createProjectWorkOSEnvironment,\n deleteProjectWorkOSEnvironment,\n} from \"./lib/workos/platformApi.js\";\nimport {\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n stopSpinner,\n} from \"../bundler/log.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { promptOptions, promptYesNo } from \"./lib/utils/prompts.js\";\n\nasync function selectEnvDeployment(\n options: DeploymentSelectionOptions,\n): Promise<{\n ctx: Context;\n deployment: {\n deploymentUrl: string;\n deploymentName: string;\n deploymentType: CloudDeploymentType;\n adminKey: string;\n deploymentNotice: string;\n };\n}> {\n const ctx = await oneoffContext(options);\n const deploymentSelection = await getDeploymentSelection(ctx, options);\n const selectionWithinProject =\n deploymentSelectionWithinProjectFromOptions(options);\n const {\n adminKey,\n url: deploymentUrl,\n deploymentFields,\n } = await loadSelectedDeploymentCredentials(\n ctx,\n deploymentSelection,\n selectionWithinProject,\n );\n // WorkOS integration only works with cloud deployments\n if (!deploymentFields) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"WorkOS integration requires a configured deployment\",\n });\n }\n\n const deploymentNotice = ` (on ${chalkStderr.bold(deploymentFields.deploymentType)} deployment ${chalkStderr.bold(deploymentFields.deploymentName)})`;\n\n const deploymentType = deploymentFields.deploymentType;\n if (\n deploymentType !== \"dev\" &&\n deploymentType !== \"preview\" &&\n deploymentType !== \"prod\"\n ) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `WorkOS integration is only available for cloud deployments (dev, preview, prod), not ${deploymentType}`,\n });\n }\n\n // Now TypeScript knows deploymentType is CloudDeploymentType\n return {\n ctx,\n deployment: {\n deploymentName: deploymentFields.deploymentName,\n deploymentType,\n deploymentUrl,\n adminKey,\n deploymentNotice,\n },\n };\n}\n\nconst workosTeamStatus = new Command(\"status\")\n .summary(\"Status of associated WorkOS team and environment\")\n .addDeploymentSelectionOptions(actionDescription(\"Check WorkOS status for\"))\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n // Check team status\n const teamHealth = await getWorkosTeamHealth(ctx, info.teamId);\n if (!teamHealth) {\n logMessage(`WorkOS team: Not provisioned`);\n const { availableEmails } =\n await getCandidateEmailsForWorkIntegration(ctx);\n if (availableEmails.length > 0) {\n logMessage(\n ` Verified emails that can provision: ${availableEmails.join(\", \")}`,\n );\n }\n } else if (teamHealth.productionState === \"inactive\") {\n logMessage(\n `WorkOS team: ${teamHealth.name} (no credit card added on workos.com, so production auth environments cannot be created)`,\n );\n } else {\n logMessage(`WorkOS team: ${teamHealth.name}`);\n }\n\n // Check environment status\n const envHealth = await getWorkosEnvironmentHealth(\n ctx,\n deployment.deploymentName,\n );\n if (!envHealth) {\n logMessage(`WorkOS environment: Not provisioned`);\n } else {\n logMessage(`WorkOS environment: ${envHealth.name}`);\n const workosUrl = `https://dashboard.workos.com/${envHealth.id}/authentication`;\n logMessage(`${workosUrl}`);\n }\n\n try {\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n if (!authKitConfig) {\n logMessage(\n `AuthKit config: ${chalkStderr.dim(\"Not configured in convex.json\")}`,\n );\n } else {\n logMessage(`AuthKit config:`);\n\n // Show config for each deployment type\n for (const deploymentType of [\"dev\", \"preview\", \"prod\"] as const) {\n const envConfig = authKitConfig[deploymentType];\n if (!envConfig) {\n logMessage(\n ` ${deploymentType}: ${chalkStderr.dim(\"not configured\")}`,\n );\n continue;\n }\n\n // Build description based on what's configured\n let description = \"\";\n\n // Show environment type for prod deployments\n if (deploymentType === \"prod\" && envConfig.environmentType) {\n description = `environment type: ${envConfig.environmentType}`;\n }\n\n const configureStatus =\n envConfig.configure === false\n ? \", configure: disabled\"\n : envConfig.configure\n ? \", will configure WorkOS\"\n : \"\";\n\n const localEnvVarsStatus =\n envConfig.localEnvVars === false\n ? \"\"\n : envConfig.localEnvVars\n ? `, ${Object.keys(envConfig.localEnvVars).length} local env vars`\n : \"\";\n\n // Show deployment type with its configuration\n const configInfo = [description, configureStatus, localEnvVarsStatus]\n .filter((s) => s)\n .join(\"\");\n\n logMessage(` ${deploymentType}: ${configInfo || \"configured\"}`);\n }\n }\n } catch (error) {\n logMessage(\n `AuthKit config: ${chalkStderr.yellow(`Error reading config: ${String(error)}`)}`,\n );\n }\n });\n\nconst workosProvisionEnvironment = new Command(\"provision-environment\")\n .summary(\"Provision a WorkOS environment\")\n .description(\n \"Create or get the WorkOS environment and API key for this deployment\",\n )\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(\n actionDescription(\"Provision WorkOS environment for\"),\n )\n .option(\n \"--name <name>\",\n \"Custom name for the WorkOS environment (if not provided, uses deployment name)\",\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n await ensureHasConvexDependency(\n ctx,\n \"integration workos provision-environment\",\n );\n\n try {\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n const config = authKitConfig || { dev: {} };\n\n if (!authKitConfig) {\n logWarning(\n \"Consider using the 'authKit' config in convex.json for automatic provisioning.\",\n );\n logMessage(\n \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n );\n logMessage(\"\");\n }\n\n await ensureWorkosEnvironmentProvisioned(\n ctx,\n deployment.deploymentName,\n deployment,\n config,\n deployment.deploymentType,\n );\n } catch (error) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: error,\n printedMessage: `Failed to provision WorkOS environment: ${String(error)}`,\n });\n }\n });\n\nconst workosProvisionTeam = new Command(\"provision-team\")\n .summary(\"Provision a WorkOS team for this Convex team\")\n .description(\n \"Create a WorkOS team and associate it with this Convex team. \" +\n \"This enables automatic provisioning of WorkOS environments for deployments on this team.\",\n )\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(actionDescription(\"Provision WorkOS team for\"))\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n // Check if there's already an associated WorkOS team\n const { hasAssociatedWorkosTeam, teamId } =\n await getDeploymentCanProvisionWorkOSEnvironments(\n ctx,\n deployment.deploymentName,\n );\n\n if (hasAssociatedWorkosTeam) {\n logMessage(\n chalkStderr.yellow(\n \"This Convex team already has an associated WorkOS team.\",\n ),\n );\n logMessage(\n chalkStderr.dim(\n \"Use 'npx convex integration workos status' to view details.\",\n ),\n );\n return;\n }\n\n // Use the shared provisioning flow\n const result = await provisionWorkosTeamInteractive(\n ctx,\n deployment.deploymentName,\n teamId,\n deployment.deploymentType,\n );\n\n if (!result.success) {\n logMessage(chalkStderr.gray(\"Cancelled.\"));\n return;\n }\n\n // Success!\n logMessage(\n chalkStderr.green(\n `\\n\u2713 Successfully created WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n ),\n );\n logMessage(\n chalkStderr.dim(\n \"You can now provision WorkOS environments for deployments on this team.\",\n ),\n );\n });\n\nconst workosDisconnectTeam = new Command(\"disconnect-team\")\n .summary(\"Disconnect WorkOS team from Convex team\")\n .description(\n \"Remove the associated WorkOS team from this Convex team. \" +\n \"This is a destructive action that will prevent new WorkOS environments from being provisioned. \" +\n \"Existing environments will continue to work with their current API keys.\",\n )\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(\n actionDescription(\"Disconnect WorkOS team for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n // Check if there's an associated WorkOS team\n const { hasAssociatedWorkosTeam, teamId } =\n await getDeploymentCanProvisionWorkOSEnvironments(\n ctx,\n deployment.deploymentName,\n );\n\n if (!hasAssociatedWorkosTeam) {\n logMessage(\n chalkStderr.yellow(\n \"This Convex team does not have an associated WorkOS team.\",\n ),\n );\n return;\n }\n\n const info = await getTeamAndProjectSlugForDeployment(ctx, {\n deploymentName: deployment.deploymentName,\n });\n\n logMessage(\n chalkStderr.yellow(\n `Warning: This will disconnect the WorkOS team from Convex team \"${info?.teamSlug}\".`,\n ),\n );\n logMessage(\n \"AuthKit environments provisioned for Convex deployments on this team will no longer use this WorkOS team to provision environments.\",\n );\n logMessage(\n chalkStderr.dim(\n \"Existing WorkOS environments will continue to work with their current API keys.\",\n ),\n );\n\n const confirmed = await promptYesNo(ctx, {\n message: \"Are you sure you want to disconnect this WorkOS team?\",\n default: false,\n });\n\n if (!confirmed) {\n logMessage(chalkStderr.gray(\"Cancelled.\"));\n return;\n }\n\n const result = await disconnectWorkOSTeam(ctx, teamId);\n\n if (!result.success) {\n if (result.error === \"not_associated\") {\n logMessage(\n chalkStderr.yellow(\n \"This Convex team does not have an associated WorkOS team.\",\n ),\n );\n return;\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Failed to disconnect WorkOS team: ${result.message}`,\n });\n }\n\n logFinishedStep(\n `Successfully disconnected WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n );\n });\n\nconst workosInvite = new Command(\"invite\")\n .summary(\"Invite yourself to the WorkOS team\")\n .description(\n \"Send an invitation to join the WorkOS team associated with your Convex team\",\n )\n .option(\"--email <email>\", \"Email address to invite (skips validation)\")\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(\n actionDescription(\"Invite yourself to WorkOS team for\"),\n )\n .action(async (options, cmd) => {\n const allOptions = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(allOptions);\n\n // Get team info first\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n let emailToInvite: string;\n\n // If email was provided as flag, use it directly (skip CLI validation)\n if (options.email) {\n emailToInvite = options.email;\n } else {\n // Get emails eligible for invitation (all verified emails except those that are admin of a different team)\n const { eligibleEmails, adminEmail } = await getInvitationEligibleEmails(\n ctx,\n info.teamId,\n );\n\n // Combine eligible emails with admin email (admin email is always an option for re-invitation)\n const allInvitableEmails = [...eligibleEmails];\n if (adminEmail && !allInvitableEmails.includes(adminEmail)) {\n allInvitableEmails.push(adminEmail);\n }\n\n if (allInvitableEmails.length === 0) {\n logMessage(\n \"You don't have any verified emails available for invitation.\",\n );\n logMessage(\n \"This could be because all your verified emails are already admin of other WorkOS teams.\",\n );\n return;\n }\n\n // Let user select which email to use\n emailToInvite = await promptOptions(ctx, {\n message: \"Which email would you like to invite to the WorkOS team?\",\n choices: allInvitableEmails.map((email) => ({\n name: email + (email === adminEmail ? \" (admin email)\" : \"\"),\n value: email,\n })),\n default: allInvitableEmails[0],\n });\n\n // Confirm before sending\n const confirmed = await promptYesNo(ctx, {\n message: `Send invitation to ${emailToInvite}?`,\n default: true,\n });\n\n if (!confirmed) {\n logMessage(\"Invitation cancelled.\");\n return;\n }\n }\n\n logMessage(`Sending invitation to ${emailToInvite}...`);\n\n const result = await inviteToWorkosTeam(ctx, info.teamId, emailToInvite);\n\n if (result.result === \"success\") {\n logMessage(\n `\u2713 Successfully sent invitation to ${result.email} with role ${result.roleSlug}`,\n );\n logMessage(\n \"Check your email for the invitation link to join the WorkOS team.\",\n );\n } else if (result.result === \"teamNotProvisioned\") {\n logMessage(\n `\u2717 ${result.message}. Run 'npx convex integration workos provision-environment' first.`,\n );\n } else if (result.result === \"alreadyInWorkspace\") {\n logMessage(\n `\u2717 ${result.message}. This usually means the email is already used in another WorkOS workspace.`,\n );\n }\n });\n\n// Project environment commands\nconst workosProjectEnvList = new Command(\"list-project-environments\")\n .summary(\"List WorkOS environments for current project\")\n .description(\n \"List all WorkOS AuthKit environments created for the current project.\\n\" +\n \"These environments can be used across multiple deployments.\",\n )\n .addDeploymentSelectionOptions(\n actionDescription(\"List project environments for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n logMessage(\"Fetching project WorkOS environments...\");\n\n try {\n const environments = await listProjectWorkOSEnvironments(\n ctx,\n info.projectId,\n );\n\n if (environments.length === 0) {\n logMessage(\"No WorkOS environments found for this project.\");\n logMessage(\n chalkStderr.gray(\n \"Create one with: npx convex integration workos create-project-environment --name <name>\",\n ),\n );\n } else {\n logMessage(chalkStderr.bold(\"WorkOS Project Environments:\"));\n for (const env of environments) {\n const prodLabel = env.isProduction\n ? chalkStderr.yellow(\" (production)\")\n : \"\";\n logMessage(\n ` ${chalkStderr.green(env.userEnvironmentName)}${prodLabel} - Client ID: ${env.workosClientId}`,\n );\n }\n }\n } catch (error) {\n logMessage(\n chalkStderr.red(`Failed to list environments: ${String(error)}`),\n );\n }\n });\n\nconst workosProjectEnvCreate = new Command(\"create-project-environment\")\n .summary(\"Create a new WorkOS environment for the project\")\n .description(\n \"Create a new WorkOS AuthKit environment for this project.\\n\" +\n \"The environment can be used across multiple deployments.\",\n )\n .requiredOption(\"--name <name>\", \"Name for the new environment\")\n .option(\"--production\", \"Mark this environment as a production environment\")\n .addDeploymentSelectionOptions(\n actionDescription(\"Create project environment for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const environmentName = options.name as string;\n const isProduction = options.production as boolean | undefined;\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n showSpinner(\n `Creating project-level WorkOS environment '${environmentName}'...`,\n );\n\n try {\n const response = await createProjectWorkOSEnvironment(\n ctx,\n info.projectId,\n environmentName,\n isProduction,\n );\n\n stopSpinner();\n logFinishedStep(`Created WorkOS environment '${environmentName}'`);\n\n logMessage(\"\");\n logMessage(chalkStderr.bold(\"Environment Details:\"));\n logMessage(` Name: ${response.userEnvironmentName}`);\n logMessage(` Client ID: ${response.workosClientId}`);\n logMessage(` API Key: ${response.workosApiKey}`);\n } catch (error: any) {\n stopSpinner();\n if (error?.message?.includes(\"NoWorkOSTeam\")) {\n logMessage(\n chalkStderr.red(\n \"Your team doesn't have a WorkOS integration configured yet.\",\n ),\n );\n logMessage(\n \"Please run 'npx convex integration workos provision-team' first.\",\n );\n } else if (error?.message?.includes(\"duplicate\")) {\n logMessage(\n chalkStderr.red(\n `An environment named '${environmentName}' already exists for this project.`,\n ),\n );\n } else if (error?.message?.includes(\"TooManyEnvironments\")) {\n logMessage(\n chalkStderr.red(\n \"You've reached the limit of 10 WorkOS environments per project. If you need more, please contact support.\",\n ),\n );\n } else {\n logMessage(chalkStderr.red(`Failed to create environment: ${error}`));\n }\n }\n });\n\nconst workosProjectEnvDelete = new Command(\"delete-project-environment\")\n .summary(\"Delete a WorkOS environment from the project\")\n .description(\n \"Delete a WorkOS environment from this project.\\n\" +\n \"This will permanently remove the environment and its credentials.\\n\" +\n \"Use the client ID shown in list-project-environments output.\",\n )\n .requiredOption(\n \"--client-id <clientId>\",\n \"WorkOS client ID of the environment to delete (shown in list output)\",\n )\n .addDeploymentSelectionOptions(\n actionDescription(\"Delete project environment for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const clientId = options.clientId as string;\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n // Confirm deletion\n const confirmed = await promptYesNo(ctx, {\n message: `Are you sure you want to delete environment with client ID '${clientId}'?`,\n default: false,\n });\n\n if (!confirmed) {\n logMessage(\"Deletion cancelled.\");\n return;\n }\n\n showSpinner(\n `Deleting project WorkOS environment (this can take a while)...`,\n );\n\n try {\n await deleteProjectWorkOSEnvironment(ctx, info.projectId, clientId);\n stopSpinner();\n logFinishedStep(`Deleted environment with client ID '${clientId}'`);\n } catch (error: any) {\n stopSpinner();\n if (error?.message?.includes(\"not found\")) {\n logMessage(\n chalkStderr.red(\n `Environment with client ID '${clientId}' not found.`,\n ),\n );\n } else {\n logMessage(chalkStderr.red(`Failed to delete environment: ${error}`));\n }\n }\n });\n\nconst workos = new Command(\"workos\")\n .summary(\"WorkOS integration commands\")\n .description(\"Manage WorkOS team provisioning and environment setup\")\n .addCommand(workosProvisionEnvironment)\n .addCommand(workosTeamStatus)\n .addCommand(workosProvisionTeam)\n .addCommand(workosDisconnectTeam)\n .addCommand(workosInvite)\n .addCommand(workosProjectEnvList)\n .addCommand(workosProjectEnvCreate)\n .addCommand(workosProjectEnvDelete);\n\nexport const integration = new Command(\"integration\")\n .summary(\"Integration commands\")\n .description(\"Commands for managing third-party integrations\")\n .addCommand(workos);\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Debugging commands for the WorkOS integration; these are unstable, undocumented, and will change or disappear as the WorkOS integration evolves.\n **/\nimport { Command } from \"@commander-js/extra-typings\";\nimport { Context, oneoffContext } from \"../bundler/context.js\";\nimport { chalkStderr } from \"chalk\";\nimport {\n DeploymentSelectionOptions,\n deploymentSelectionWithinProjectFromOptions,\n fetchTeamAndProject,\n getTeamAndProjectSlugForDeployment,\n loadSelectedDeploymentCredentials,\n} from \"./lib/api.js\";\nimport { actionDescription } from \"./lib/command.js\";\nimport { ensureHasConvexDependency } from \"./lib/utils/utils.js\";\nimport { getDeploymentSelection } from \"./lib/deploymentSelection.js\";\nimport {\n ensureWorkosEnvironmentProvisioned,\n provisionWorkosTeamInteractive,\n} from \"./lib/workos/workos.js\";\nimport {\n disconnectWorkOSTeam,\n getCandidateEmailsForWorkIntegration,\n getDeploymentCanProvisionWorkOSEnvironments,\n getInvitationEligibleEmails,\n getWorkosEnvironmentHealth,\n getWorkosTeamHealth,\n inviteToWorkosTeam,\n listProjectWorkOSEnvironments,\n createProjectWorkOSEnvironment,\n deleteProjectWorkOSEnvironment,\n} from \"./lib/workos/platformApi.js\";\nimport {\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n stopSpinner,\n} from \"../bundler/log.js\";\nimport { readProjectConfig, getAuthKitConfig } from \"./lib/config.js\";\nimport { promptOptions, promptYesNo } from \"./lib/utils/prompts.js\";\n\nasync function selectEnvDeployment(\n options: DeploymentSelectionOptions,\n): Promise<{\n ctx: Context;\n deployment: {\n deploymentUrl: string;\n deploymentName: string;\n deploymentType: \"dev\" | \"preview\" | \"prod\";\n adminKey: string;\n deploymentNotice: string;\n };\n}> {\n const ctx = await oneoffContext(options);\n const deploymentSelection = await getDeploymentSelection(ctx, options);\n const selectionWithinProject =\n deploymentSelectionWithinProjectFromOptions(options);\n const {\n adminKey,\n url: deploymentUrl,\n deploymentFields,\n } = await loadSelectedDeploymentCredentials(\n ctx,\n deploymentSelection,\n selectionWithinProject,\n );\n // WorkOS integration only works with cloud deployments\n if (!deploymentFields) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"WorkOS integration requires a configured deployment\",\n });\n }\n\n const deploymentNotice = ` (on ${chalkStderr.bold(deploymentFields.deploymentType)} deployment ${chalkStderr.bold(deploymentFields.deploymentName)})`;\n\n const deploymentType = deploymentFields.deploymentType;\n\n if (deploymentType === \"custom\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `The WorkOS integration is not available for custom deployments yet.`,\n });\n }\n\n if (\n deploymentType !== \"dev\" &&\n deploymentType !== \"preview\" &&\n deploymentType !== \"prod\"\n ) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `The WorkOS integration is only available for cloud deployments (dev, preview, prod), not ${deploymentType}`,\n });\n }\n\n // Now TypeScript knows deploymentType is CloudDeploymentType\n return {\n ctx,\n deployment: {\n deploymentName: deploymentFields.deploymentName,\n deploymentType,\n deploymentUrl,\n adminKey,\n deploymentNotice,\n },\n };\n}\n\nconst workosTeamStatus = new Command(\"status\")\n .summary(\"Status of associated WorkOS team and environment\")\n .addDeploymentSelectionOptions(actionDescription(\"Check WorkOS status for\"))\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n // Check team status\n const teamHealth = await getWorkosTeamHealth(ctx, info.teamId);\n if (!teamHealth) {\n logMessage(`WorkOS team: Not provisioned`);\n const { availableEmails } =\n await getCandidateEmailsForWorkIntegration(ctx);\n if (availableEmails.length > 0) {\n logMessage(\n ` Verified emails that can provision: ${availableEmails.join(\", \")}`,\n );\n }\n } else if (teamHealth.productionState === \"inactive\") {\n logMessage(\n `WorkOS team: ${teamHealth.name} (no credit card added on workos.com, so production auth environments cannot be created)`,\n );\n } else {\n logMessage(`WorkOS team: ${teamHealth.name}`);\n }\n\n // Check environment status\n const envHealth = await getWorkosEnvironmentHealth(\n ctx,\n deployment.deploymentName,\n );\n if (!envHealth) {\n logMessage(`WorkOS environment: Not provisioned`);\n } else {\n logMessage(`WorkOS environment: ${envHealth.name}`);\n const workosUrl = `https://dashboard.workos.com/${envHealth.id}/authentication`;\n logMessage(`${workosUrl}`);\n }\n\n try {\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n if (!authKitConfig) {\n logMessage(\n `AuthKit config: ${chalkStderr.dim(\"Not configured in convex.json\")}`,\n );\n } else {\n logMessage(`AuthKit config:`);\n\n // Show config for each deployment type\n for (const deploymentType of [\"dev\", \"preview\", \"prod\"] as const) {\n const envConfig = authKitConfig[deploymentType];\n if (!envConfig) {\n logMessage(\n ` ${deploymentType}: ${chalkStderr.dim(\"not configured\")}`,\n );\n continue;\n }\n\n // Build description based on what's configured\n let description = \"\";\n\n // Show environment type for prod deployments\n if (deploymentType === \"prod\" && envConfig.environmentType) {\n description = `environment type: ${envConfig.environmentType}`;\n }\n\n const configureStatus =\n envConfig.configure === false\n ? \", configure: disabled\"\n : envConfig.configure\n ? \", will configure WorkOS\"\n : \"\";\n\n const localEnvVarsStatus =\n envConfig.localEnvVars === false\n ? \"\"\n : envConfig.localEnvVars\n ? `, ${Object.keys(envConfig.localEnvVars).length} local env vars`\n : \"\";\n\n // Show deployment type with its configuration\n const configInfo = [description, configureStatus, localEnvVarsStatus]\n .filter((s) => s)\n .join(\"\");\n\n logMessage(` ${deploymentType}: ${configInfo || \"configured\"}`);\n }\n }\n } catch (error) {\n logMessage(\n `AuthKit config: ${chalkStderr.yellow(`Error reading config: ${String(error)}`)}`,\n );\n }\n });\n\nconst workosProvisionEnvironment = new Command(\"provision-environment\")\n .summary(\"Provision a WorkOS environment\")\n .description(\n \"Create or get the WorkOS environment and API key for this deployment\",\n )\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(\n actionDescription(\"Provision WorkOS environment for\"),\n )\n .option(\n \"--name <name>\",\n \"Custom name for the WorkOS environment (if not provided, uses deployment name)\",\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n await ensureHasConvexDependency(\n ctx,\n \"integration workos provision-environment\",\n );\n\n try {\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n const config = authKitConfig || { dev: {} };\n\n if (!authKitConfig) {\n logWarning(\n \"Consider using the 'authKit' config in convex.json for automatic provisioning.\",\n );\n logMessage(\n \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n );\n logMessage(\"\");\n }\n\n await ensureWorkosEnvironmentProvisioned(\n ctx,\n deployment.deploymentName,\n deployment,\n config,\n deployment.deploymentType,\n );\n } catch (error) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: error,\n printedMessage: `Failed to provision WorkOS environment: ${String(error)}`,\n });\n }\n });\n\nconst workosProvisionTeam = new Command(\"provision-team\")\n .summary(\"Provision a WorkOS team for this Convex team\")\n .description(\n \"Create a WorkOS team and associate it with this Convex team. \" +\n \"This enables automatic provisioning of WorkOS environments for deployments on this team.\",\n )\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(actionDescription(\"Provision WorkOS team for\"))\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n // Check if there's already an associated WorkOS team\n const { hasAssociatedWorkosTeam, teamId } =\n await getDeploymentCanProvisionWorkOSEnvironments(\n ctx,\n deployment.deploymentName,\n );\n\n if (hasAssociatedWorkosTeam) {\n logMessage(\n chalkStderr.yellow(\n \"This Convex team already has an associated WorkOS team.\",\n ),\n );\n logMessage(\n chalkStderr.dim(\n \"Use 'npx convex integration workos status' to view details.\",\n ),\n );\n return;\n }\n\n // Use the shared provisioning flow\n const result = await provisionWorkosTeamInteractive(\n ctx,\n deployment.deploymentName,\n teamId,\n deployment.deploymentType,\n );\n\n if (!result.success) {\n logMessage(chalkStderr.gray(\"Cancelled.\"));\n return;\n }\n\n // Success!\n logMessage(\n chalkStderr.green(\n `\\n\u2713 Successfully created WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n ),\n );\n logMessage(\n chalkStderr.dim(\n \"You can now provision WorkOS environments for deployments on this team.\",\n ),\n );\n });\n\nconst workosDisconnectTeam = new Command(\"disconnect-team\")\n .summary(\"Disconnect WorkOS team from Convex team\")\n .description(\n \"Remove the associated WorkOS team from this Convex team. \" +\n \"This is a destructive action that will prevent new WorkOS environments from being provisioned. \" +\n \"Existing environments will continue to work with their current API keys.\",\n )\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(\n actionDescription(\"Disconnect WorkOS team for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n // Check if there's an associated WorkOS team\n const { hasAssociatedWorkosTeam, teamId } =\n await getDeploymentCanProvisionWorkOSEnvironments(\n ctx,\n deployment.deploymentName,\n );\n\n if (!hasAssociatedWorkosTeam) {\n logMessage(\n chalkStderr.yellow(\n \"This Convex team does not have an associated WorkOS team.\",\n ),\n );\n return;\n }\n\n const info = await getTeamAndProjectSlugForDeployment(ctx, {\n deploymentName: deployment.deploymentName,\n });\n\n logMessage(\n chalkStderr.yellow(\n `Warning: This will disconnect the WorkOS team from Convex team \"${info?.teamSlug}\".`,\n ),\n );\n logMessage(\n \"AuthKit environments provisioned for Convex deployments on this team will no longer use this WorkOS team to provision environments.\",\n );\n logMessage(\n chalkStderr.dim(\n \"Existing WorkOS environments will continue to work with their current API keys.\",\n ),\n );\n\n const confirmed = await promptYesNo(ctx, {\n message: \"Are you sure you want to disconnect this WorkOS team?\",\n default: false,\n });\n\n if (!confirmed) {\n logMessage(chalkStderr.gray(\"Cancelled.\"));\n return;\n }\n\n const result = await disconnectWorkOSTeam(ctx, teamId);\n\n if (!result.success) {\n if (result.error === \"not_associated\") {\n logMessage(\n chalkStderr.yellow(\n \"This Convex team does not have an associated WorkOS team.\",\n ),\n );\n return;\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Failed to disconnect WorkOS team: ${result.message}`,\n });\n }\n\n logFinishedStep(\n `Successfully disconnected WorkOS team \"${result.workosTeamName}\" (${result.workosTeamId})`,\n );\n });\n\nconst workosInvite = new Command(\"invite\")\n .summary(\"Invite yourself to the WorkOS team\")\n .description(\n \"Send an invitation to join the WorkOS team associated with your Convex team\",\n )\n .option(\"--email <email>\", \"Email address to invite (skips validation)\")\n .configureHelp({ showGlobalOptions: true })\n .allowExcessArguments(false)\n .addDeploymentSelectionOptions(\n actionDescription(\"Invite yourself to WorkOS team for\"),\n )\n .action(async (options, cmd) => {\n const allOptions = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(allOptions);\n\n // Get team info first\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n let emailToInvite: string;\n\n // If email was provided as flag, use it directly (skip CLI validation)\n if (options.email) {\n emailToInvite = options.email;\n } else {\n // Get emails eligible for invitation (all verified emails except those that are admin of a different team)\n const { eligibleEmails, adminEmail } = await getInvitationEligibleEmails(\n ctx,\n info.teamId,\n );\n\n // Combine eligible emails with admin email (admin email is always an option for re-invitation)\n const allInvitableEmails = [...eligibleEmails];\n if (adminEmail && !allInvitableEmails.includes(adminEmail)) {\n allInvitableEmails.push(adminEmail);\n }\n\n if (allInvitableEmails.length === 0) {\n logMessage(\n \"You don't have any verified emails available for invitation.\",\n );\n logMessage(\n \"This could be because all your verified emails are already admin of other WorkOS teams.\",\n );\n return;\n }\n\n // Let user select which email to use\n emailToInvite = await promptOptions(ctx, {\n message: \"Which email would you like to invite to the WorkOS team?\",\n choices: allInvitableEmails.map((email) => ({\n name: email + (email === adminEmail ? \" (admin email)\" : \"\"),\n value: email,\n })),\n default: allInvitableEmails[0],\n });\n\n // Confirm before sending\n const confirmed = await promptYesNo(ctx, {\n message: `Send invitation to ${emailToInvite}?`,\n default: true,\n });\n\n if (!confirmed) {\n logMessage(\"Invitation cancelled.\");\n return;\n }\n }\n\n logMessage(`Sending invitation to ${emailToInvite}...`);\n\n const result = await inviteToWorkosTeam(ctx, info.teamId, emailToInvite);\n\n if (result.result === \"success\") {\n logMessage(\n `\u2713 Successfully sent invitation to ${result.email} with role ${result.roleSlug}`,\n );\n logMessage(\n \"Check your email for the invitation link to join the WorkOS team.\",\n );\n } else if (result.result === \"teamNotProvisioned\") {\n logMessage(\n `\u2717 ${result.message}. Run 'npx convex integration workos provision-environment' first.`,\n );\n } else if (result.result === \"alreadyInWorkspace\") {\n logMessage(\n `\u2717 ${result.message}. This usually means the email is already used in another WorkOS workspace.`,\n );\n }\n });\n\n// Project environment commands\nconst workosProjectEnvList = new Command(\"list-project-environments\")\n .summary(\"List WorkOS environments for current project\")\n .description(\n \"List all WorkOS AuthKit environments created for the current project.\\n\" +\n \"These environments can be used across multiple deployments.\",\n )\n .addDeploymentSelectionOptions(\n actionDescription(\"List project environments for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n logMessage(\"Fetching project WorkOS environments...\");\n\n try {\n const environments = await listProjectWorkOSEnvironments(\n ctx,\n info.projectId,\n );\n\n if (environments.length === 0) {\n logMessage(\"No WorkOS environments found for this project.\");\n logMessage(\n chalkStderr.gray(\n \"Create one with: npx convex integration workos create-project-environment --name <name>\",\n ),\n );\n } else {\n logMessage(chalkStderr.bold(\"WorkOS Project Environments:\"));\n for (const env of environments) {\n const prodLabel = env.isProduction\n ? chalkStderr.yellow(\" (production)\")\n : \"\";\n logMessage(\n ` ${chalkStderr.green(env.userEnvironmentName)}${prodLabel} - Client ID: ${env.workosClientId}`,\n );\n }\n }\n } catch (error) {\n logMessage(\n chalkStderr.red(`Failed to list environments: ${String(error)}`),\n );\n }\n });\n\nconst workosProjectEnvCreate = new Command(\"create-project-environment\")\n .summary(\"Create a new WorkOS environment for the project\")\n .description(\n \"Create a new WorkOS AuthKit environment for this project.\\n\" +\n \"The environment can be used across multiple deployments.\",\n )\n .requiredOption(\"--name <name>\", \"Name for the new environment\")\n .option(\"--production\", \"Mark this environment as a production environment\")\n .addDeploymentSelectionOptions(\n actionDescription(\"Create project environment for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const environmentName = options.name as string;\n const isProduction = options.production as boolean | undefined;\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n showSpinner(\n `Creating project-level WorkOS environment '${environmentName}'...`,\n );\n\n try {\n const response = await createProjectWorkOSEnvironment(\n ctx,\n info.projectId,\n environmentName,\n isProduction,\n );\n\n stopSpinner();\n logFinishedStep(`Created WorkOS environment '${environmentName}'`);\n\n logMessage(\"\");\n logMessage(chalkStderr.bold(\"Environment Details:\"));\n logMessage(` Name: ${response.userEnvironmentName}`);\n logMessage(` Client ID: ${response.workosClientId}`);\n logMessage(` API Key: ${response.workosApiKey}`);\n } catch (error: any) {\n stopSpinner();\n if (error?.message?.includes(\"NoWorkOSTeam\")) {\n logMessage(\n chalkStderr.red(\n \"Your team doesn't have a WorkOS integration configured yet.\",\n ),\n );\n logMessage(\n \"Please run 'npx convex integration workos provision-team' first.\",\n );\n } else if (error?.message?.includes(\"duplicate\")) {\n logMessage(\n chalkStderr.red(\n `An environment named '${environmentName}' already exists for this project.`,\n ),\n );\n } else if (error?.message?.includes(\"TooManyEnvironments\")) {\n logMessage(\n chalkStderr.red(\n \"You've reached the limit of 10 WorkOS environments per project. If you need more, please contact support.\",\n ),\n );\n } else {\n logMessage(chalkStderr.red(`Failed to create environment: ${error}`));\n }\n }\n });\n\nconst workosProjectEnvDelete = new Command(\"delete-project-environment\")\n .summary(\"Delete a WorkOS environment from the project\")\n .description(\n \"Delete a WorkOS environment from this project.\\n\" +\n \"This will permanently remove the environment and its credentials.\\n\" +\n \"Use the client ID shown in list-project-environments output.\",\n )\n .requiredOption(\n \"--client-id <clientId>\",\n \"WorkOS client ID of the environment to delete (shown in list output)\",\n )\n .addDeploymentSelectionOptions(\n actionDescription(\"Delete project environment for\"),\n )\n .action(async (_options, cmd) => {\n const options = cmd.optsWithGlobals();\n const clientId = options.clientId as string;\n const { ctx, deployment } = await selectEnvDeployment(options);\n\n const info = await fetchTeamAndProject(ctx, deployment.deploymentName);\n\n // Confirm deletion\n const confirmed = await promptYesNo(ctx, {\n message: `Are you sure you want to delete environment with client ID '${clientId}'?`,\n default: false,\n });\n\n if (!confirmed) {\n logMessage(\"Deletion cancelled.\");\n return;\n }\n\n showSpinner(\n `Deleting project WorkOS environment (this can take a while)...`,\n );\n\n try {\n await deleteProjectWorkOSEnvironment(ctx, info.projectId, clientId);\n stopSpinner();\n logFinishedStep(`Deleted environment with client ID '${clientId}'`);\n } catch (error: any) {\n stopSpinner();\n if (error?.message?.includes(\"not found\")) {\n logMessage(\n chalkStderr.red(\n `Environment with client ID '${clientId}' not found.`,\n ),\n );\n } else {\n logMessage(chalkStderr.red(`Failed to delete environment: ${error}`));\n }\n }\n });\n\nconst workos = new Command(\"workos\")\n .summary(\"WorkOS integration commands\")\n .description(\"Manage WorkOS team provisioning and environment setup\")\n .addCommand(workosProvisionEnvironment)\n .addCommand(workosTeamStatus)\n .addCommand(workosProvisionTeam)\n .addCommand(workosDisconnectTeam)\n .addCommand(workosInvite)\n .addCommand(workosProjectEnvList)\n .addCommand(workosProjectEnvCreate)\n .addCommand(workosProjectEnvDelete);\n\nexport const integration = new Command(\"integration\")\n .summary(\"Integration commands\")\n .description(\"Commands for managing third-party integrations\")\n .addCommand(workos);\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -19,7 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var api_exports = {};
20
20
  __export(api_exports, {
21
21
  checkAccessToSelectedProject: () => checkAccessToSelectedProject,
22
- createProject: () => createProject,
22
+ createProjectAndCreateDeployment: () => createProjectAndCreateDeployment,
23
23
  deploymentSelectionWithinProjectFromOptions: () => deploymentSelectionWithinProjectFromOptions,
24
24
  deploymentSelectionWithinProjectSchema: () => deploymentSelectionWithinProjectSchema,
25
25
  fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows: () => fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows,
@@ -38,7 +38,7 @@ var import_utils = require("./utils/utils.js");
38
38
  var import_zod = require("zod");
39
39
  var import_localDeployment = require("./localDeployment/localDeployment.js");
40
40
  var import_anonymous = require("./localDeployment/anonymous.js");
41
- async function createProject(ctx, {
41
+ async function createProjectAndCreateDeployment(ctx, {
42
42
  teamSlug: selectedTeamSlug,
43
43
  projectName,
44
44
  deploymentTypeToProvision
@@ -46,8 +46,6 @@ async function createProject(ctx, {
46
46
  const provisioningArgs = {
47
47
  team: selectedTeamSlug,
48
48
  projectName,
49
- // TODO: Consider allowing projects with no deployments, or consider switching
50
- // to provisioning prod on creation.
51
49
  deploymentType: deploymentTypeToProvision
52
50
  };
53
51
  const data = await (0, import_utils.bigBrainAPI)({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cli/lib/api.ts"],
4
- "sourcesContent": ["import { Context } from \"../../bundler/context.js\";\nimport { logVerbose, logWarning } from \"../../bundler/log.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./deployment.js\";\nimport {\n assertLocalBackendRunning,\n localDeploymentUrl,\n} from \"./localDeployment/run.js\";\nimport {\n ThrowingFetchError,\n bigBrainAPI,\n bigBrainAPIMaybeThrows,\n logAndHandleFetchError,\n} from \"./utils/utils.js\";\nimport { z } from \"zod\";\nimport {\n DeploymentSelection,\n ProjectSelection,\n} from \"./deploymentSelection.js\";\nimport { loadLocalDeploymentCredentials } from \"./localDeployment/localDeployment.js\";\nimport { loadAnonymousDeployment } from \"./localDeployment/anonymous.js\";\nexport type DeploymentName = string;\nexport type CloudDeploymentType = \"prod\" | \"dev\" | \"preview\";\nexport type AccountRequiredDeploymentType = CloudDeploymentType | \"local\";\nexport type DeploymentType = AccountRequiredDeploymentType | \"anonymous\";\n\nexport type Project = {\n id: number;\n name: string;\n slug: string;\n isDemo: boolean;\n};\n\ntype AdminKey = string;\n\n// Provision a new project, creating a deployment of type `deploymentTypeToProvision`\nexport async function createProject(\n ctx: Context,\n {\n teamSlug: selectedTeamSlug,\n projectName,\n deploymentTypeToProvision,\n }: {\n teamSlug: string;\n projectName: string;\n deploymentTypeToProvision: \"prod\" | \"dev\";\n },\n): Promise<{\n projectSlug: string;\n teamSlug: string;\n projectsRemaining: number;\n}> {\n const provisioningArgs = {\n team: selectedTeamSlug,\n projectName,\n // TODO: Consider allowing projects with no deployments, or consider switching\n // to provisioning prod on creation.\n deploymentType: deploymentTypeToProvision,\n };\n const data = await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"create_project\",\n data: provisioningArgs,\n });\n const { projectSlug, teamSlug, projectsRemaining } = data;\n if (\n projectSlug === undefined ||\n teamSlug === undefined ||\n projectsRemaining === undefined\n ) {\n const error =\n \"Unexpected response during provisioning: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: error,\n });\n }\n return {\n projectSlug,\n teamSlug,\n projectsRemaining,\n };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `deploymentSelectionFromOptions`\n// ----------------------------------------------------------------------\n\nexport const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(\n \"kind\",\n [\n z.object({ kind: z.literal(\"previewName\"), previewName: z.string() }),\n z.object({ kind: z.literal(\"deploymentName\"), deploymentName: z.string() }),\n z.object({ kind: z.literal(\"prod\") }),\n z.object({ kind: z.literal(\"implicitProd\") }),\n z.object({ kind: z.literal(\"ownDev\") }),\n ],\n);\n\nexport type DeploymentSelectionWithinProject = z.infer<\n typeof deploymentSelectionWithinProjectSchema\n>;\n\ntype DeploymentSelectionOptionsWithinProject = {\n prod?: boolean | undefined;\n // Whether this command defaults to prod when no other flags are provided. If\n // this is not set, the default will be \"ownDev\"\n implicitProd?: boolean;\n\n previewName?: string | undefined;\n deploymentName?: string | undefined;\n};\n\nexport type DeploymentSelectionOptions =\n DeploymentSelectionOptionsWithinProject & {\n url?: string | undefined;\n adminKey?: string | undefined;\n envFile?: string | undefined;\n };\n\nexport function deploymentSelectionWithinProjectFromOptions(\n options: DeploymentSelectionOptions,\n): DeploymentSelectionWithinProject {\n if (options.previewName !== undefined) {\n return { kind: \"previewName\", previewName: options.previewName };\n }\n if (options.deploymentName !== undefined) {\n return { kind: \"deploymentName\", deploymentName: options.deploymentName };\n }\n if (options.prod) {\n return { kind: \"prod\" };\n }\n if (options.implicitProd) {\n return { kind: \"implicitProd\" };\n }\n return { kind: \"ownDev\" };\n}\n\nexport async function validateDeploymentSelectionForExistingDeployment(\n ctx: Context,\n deploymentSelection: DeploymentSelectionWithinProject,\n source: \"selfHosted\" | \"deployKey\" | \"cliArgs\",\n) {\n if (\n deploymentSelection.kind === \"ownDev\" ||\n deploymentSelection.kind === \"implicitProd\"\n ) {\n // These are both considered the \"default\" selection depending on the command, so this is always fine\n return;\n }\n switch (source) {\n case \"selfHosted\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"The `--prod`, `--preview-name`, and `--deployment-name` flags cannot be used with a self-hosted deployment.\",\n });\n case \"deployKey\":\n logWarning(\n \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags and using deployment from CONVEX_DEPLOY_KEY\",\n );\n break;\n case \"cliArgs\":\n logWarning(\n \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags since this command was run with --url and --admin-key\",\n );\n break;\n }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `checkAccessToSelectedProject`\n// ----------------------------------------------------------------------\n\nasync function hasAccessToProject(\n ctx: Context,\n selector: { projectSlug: string; teamSlug: string },\n): Promise<boolean> {\n try {\n await bigBrainAPIMaybeThrows({\n ctx,\n url: `teams/${selector.teamSlug}/projects/${selector.projectSlug}/deployments`,\n method: \"GET\",\n });\n return true;\n } catch (err) {\n if (\n err instanceof ThrowingFetchError &&\n (err.serverErrorData?.code === \"TeamNotFound\" ||\n err.serverErrorData?.code === \"ProjectNotFound\")\n ) {\n return false;\n }\n return logAndHandleFetchError(ctx, err);\n }\n}\n\nexport async function checkAccessToSelectedProject(\n ctx: Context,\n projectSelection: ProjectSelection,\n): Promise<\n | { kind: \"hasAccess\"; teamSlug: string; projectSlug: string }\n | { kind: \"noAccess\" }\n | { kind: \"unknown\" }\n> {\n switch (projectSelection.kind) {\n case \"deploymentName\": {\n const result = await getTeamAndProjectSlugForDeployment(ctx, {\n deploymentName: projectSelection.deploymentName,\n });\n if (result === null) {\n return { kind: \"noAccess\" };\n }\n return {\n kind: \"hasAccess\",\n teamSlug: result.teamSlug,\n projectSlug: result.projectSlug,\n };\n }\n case \"teamAndProjectSlugs\": {\n const hasAccess = await hasAccessToProject(ctx, {\n teamSlug: projectSelection.teamSlug,\n projectSlug: projectSelection.projectSlug,\n });\n if (!hasAccess) {\n return { kind: \"noAccess\" };\n }\n return {\n kind: \"hasAccess\",\n teamSlug: projectSelection.teamSlug,\n projectSlug: projectSelection.projectSlug,\n };\n }\n case \"projectDeployKey\":\n // Ideally we would be able to do an explicit check here, but if the key is invalid,\n // it will instead fail as soon as we try to use the key.\n return { kind: \"unknown\" };\n default: {\n projectSelection satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Invalid project selection: ${(projectSelection as any).kind}`,\n });\n }\n }\n}\n\nexport async function getTeamAndProjectSlugForDeployment(\n ctx: Context,\n selector: { deploymentName: string },\n): Promise<{ teamSlug: string; projectSlug: string } | null> {\n try {\n const body = await bigBrainAPIMaybeThrows({\n ctx,\n url: `deployment/${selector.deploymentName}/team_and_project`,\n method: \"GET\",\n });\n return { teamSlug: body.team, projectSlug: body.project };\n } catch (err) {\n if (\n err instanceof ThrowingFetchError &&\n (err.serverErrorData?.code === \"DeploymentNotFound\" ||\n err.serverErrorData?.code === \"ProjectNotFound\")\n ) {\n return null;\n }\n return logAndHandleFetchError(ctx, err);\n }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for fetching deployment credentials\n// ----------------------------------------------------------------------\n\n// Used by dev for upgrade from team and project in convex.json to CONVEX_DEPLOYMENT\nexport async function fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx: Context,\n projectSelection:\n | { kind: \"teamAndProjectSlugs\"; teamSlug: string; projectSlug: string }\n | { kind: \"projectDeployKey\"; projectDeployKey: string },\n deploymentType: \"prod\" | \"dev\",\n): Promise<{\n deploymentName: string;\n deploymentUrl: string;\n adminKey: AdminKey;\n}> {\n if (projectSelection.kind === \"projectDeployKey\") {\n const auth = ctx.bigBrainAuth();\n const doesAuthMatch =\n auth !== null &&\n auth.kind === \"projectKey\" &&\n auth.projectKey === projectSelection.projectDeployKey;\n if (!doesAuthMatch) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new Error(\n \"Expected project deploy key to match the big brain auth header\",\n ),\n printedMessage: \"Unexpected error when loading the Convex deployment\",\n });\n }\n }\n let data;\n try {\n data = await bigBrainAPIMaybeThrows({\n ctx,\n method: \"POST\",\n url: \"deployment/provision_and_authorize\",\n data: {\n teamSlug:\n projectSelection.kind === \"teamAndProjectSlugs\"\n ? projectSelection.teamSlug\n : null,\n projectSlug:\n projectSelection.kind === \"teamAndProjectSlugs\"\n ? projectSelection.projectSlug\n : null,\n deploymentType: deploymentType === \"prod\" ? \"prod\" : \"dev\",\n },\n });\n } catch (error) {\n const msg = \"Unknown error during authorization: \" + error;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n const adminKey = data.adminKey;\n const url = data.url;\n const deploymentName = data.deploymentName;\n if (adminKey === undefined || url === undefined) {\n const msg = \"Unknown error during authorization: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n return { adminKey, deploymentUrl: url, deploymentName };\n}\n\nasync function fetchExistingDevDeploymentCredentialsOrCrash(\n ctx: Context,\n deploymentName: DeploymentName,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n const slugs = await fetchTeamAndProject(ctx, deploymentName);\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n {\n kind: \"teamAndProjectSlugs\",\n teamSlug: slugs.team,\n projectSlug: slugs.project,\n },\n \"dev\",\n );\n return {\n deploymentName: credentials.deploymentName,\n adminKey: credentials.adminKey,\n url: credentials.deploymentUrl,\n deploymentType: \"dev\",\n };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `loadSelectedDeploymentCredentials`\n// ----------------------------------------------------------------------\n\nasync function handleOwnDev(\n ctx: Context,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\": {\n if (projectSelection.deploymentType === \"local\") {\n const credentials = await loadLocalDeploymentCredentials(\n ctx,\n projectSelection.deploymentName,\n );\n return {\n deploymentName: projectSelection.deploymentName,\n adminKey: credentials.adminKey,\n url: credentials.deploymentUrl,\n deploymentType: \"local\",\n };\n }\n return await fetchExistingDevDeploymentCredentialsOrCrash(\n ctx,\n projectSelection.deploymentName,\n );\n }\n case \"teamAndProjectSlugs\":\n case \"projectDeployKey\": {\n // Note -- this provisions a dev deployment if one doesn't exist\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n projectSelection,\n \"dev\",\n );\n return {\n url: credentials.deploymentUrl,\n adminKey: credentials.adminKey,\n deploymentName: credentials.deploymentName,\n deploymentType: \"dev\",\n };\n }\n default: {\n projectSelection satisfies never;\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n // This should be unreachable, so don't bother with a printed message.\n printedMessage: null,\n errForSentry: `Unexpected project selection: ${(projectSelection as any).kind}`,\n });\n }\n }\n}\n\nasync function handleProd(\n ctx: Context,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: \"prod\";\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\": {\n const credentials = await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"deployment/authorize_prod\",\n data: {\n deploymentName: projectSelection.deploymentName,\n },\n });\n return credentials;\n }\n case \"teamAndProjectSlugs\":\n case \"projectDeployKey\": {\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n projectSelection,\n \"prod\",\n );\n return {\n url: credentials.deploymentUrl,\n adminKey: credentials.adminKey,\n deploymentName: credentials.deploymentName,\n deploymentType: \"prod\",\n };\n }\n }\n}\n\nasync function handlePreview(\n ctx: Context,\n previewName: string,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: \"preview\";\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\":\n case \"teamAndProjectSlugs\":\n return await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"deployment/authorize_preview\",\n data: {\n previewName: previewName,\n projectSelection: projectSelection,\n },\n });\n\n case \"projectDeployKey\":\n // TODO -- this should be supported\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Project deploy keys are not supported for preview deployments\",\n });\n }\n}\n\nasync function handleDeploymentName(\n ctx: Context,\n deploymentName: string,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\":\n case \"teamAndProjectSlugs\":\n return await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"deployment/authorize_within_current_project\",\n data: {\n selectedDeploymentName: deploymentName,\n projectSelection: projectSelection,\n },\n });\n case \"projectDeployKey\":\n // TODO -- this should be supported\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Project deploy keys are not supported with the --deployment-name flag\",\n });\n }\n}\n\nasync function fetchDeploymentCredentialsWithinCurrentProject(\n ctx: Context,\n projectSelection: ProjectSelection,\n deploymentSelection: DeploymentSelectionWithinProject,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n switch (deploymentSelection.kind) {\n case \"ownDev\": {\n return await handleOwnDev(ctx, projectSelection);\n }\n case \"implicitProd\":\n case \"prod\": {\n return await handleProd(ctx, projectSelection);\n }\n case \"previewName\":\n return await handlePreview(\n ctx,\n deploymentSelection.previewName,\n projectSelection,\n );\n case \"deploymentName\":\n return await handleDeploymentName(\n ctx,\n deploymentSelection.deploymentName,\n projectSelection,\n );\n default: {\n deploymentSelection satisfies never;\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n // This should be unreachable, so don't bother with a printed message.\n printedMessage: null,\n errForSentry: `Unexpected deployment selection: ${deploymentSelection as any}`,\n });\n }\n }\n}\n\nasync function _loadExistingDeploymentCredentialsForProject(\n ctx: Context,\n targetProject: ProjectSelection,\n deploymentSelection: DeploymentSelectionWithinProject,\n { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<{\n adminKey: string;\n url: string;\n deploymentFields: {\n deploymentName: string;\n deploymentType: DeploymentType;\n projectSlug: string | null;\n teamSlug: string | null;\n } | null;\n}> {\n const accessResult = await checkAccessToSelectedProject(ctx, targetProject);\n if (accessResult.kind === \"noAccess\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n });\n }\n const result = await fetchDeploymentCredentialsWithinCurrentProject(\n ctx,\n targetProject,\n deploymentSelection,\n );\n logVerbose(\n `Deployment URL: ${result.url}, Deployment Name: ${result.deploymentName}, Deployment Type: ${result.deploymentType}`,\n );\n if (ensureLocalRunning && result.deploymentType === \"local\") {\n await assertLocalBackendRunning(ctx, {\n url: result.url,\n deploymentName: result.deploymentName,\n });\n }\n return {\n ...result,\n deploymentFields: {\n deploymentName: result.deploymentName,\n deploymentType: result.deploymentType,\n\n projectSlug:\n accessResult.kind === \"hasAccess\" ? accessResult.projectSlug : null,\n teamSlug:\n accessResult.kind === \"hasAccess\" ? accessResult.teamSlug : null,\n },\n };\n}\n\nexport type DetailedDeploymentCredentials = {\n adminKey: string;\n url: string;\n deploymentFields: {\n deploymentName: string;\n deploymentType: DeploymentType;\n projectSlug: string | null;\n teamSlug: string | null;\n } | null;\n};\n\n// This is used by most commands (notably not `dev` and `deploy`) to determine\n// which deployment to act on, taking into account the deployment selection flags.\n//\nexport async function loadSelectedDeploymentCredentials(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n selectionWithinProject: DeploymentSelectionWithinProject,\n { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<DetailedDeploymentCredentials> {\n switch (deploymentSelection.kind) {\n case \"existingDeployment\":\n await validateDeploymentSelectionForExistingDeployment(\n ctx,\n selectionWithinProject,\n deploymentSelection.deploymentToActOn.source,\n );\n // We're already set up.\n logVerbose(\n `Deployment URL: ${deploymentSelection.deploymentToActOn.url}, Deployment Name: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentName ?? \"unknown\"}, Deployment Type: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ?? \"unknown\"}`,\n );\n return {\n adminKey: deploymentSelection.deploymentToActOn.adminKey,\n url: deploymentSelection.deploymentToActOn.url,\n deploymentFields:\n deploymentSelection.deploymentToActOn.deploymentFields,\n };\n case \"chooseProject\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n });\n case \"preview\": {\n const slugs = await getTeamAndProjectFromPreviewAdminKey(\n ctx,\n deploymentSelection.previewDeployKey,\n );\n return await _loadExistingDeploymentCredentialsForProject(\n ctx,\n {\n kind: \"teamAndProjectSlugs\",\n teamSlug: slugs.teamSlug,\n projectSlug: slugs.projectSlug,\n },\n selectionWithinProject,\n { ensureLocalRunning },\n );\n }\n case \"deploymentWithinProject\": {\n return await _loadExistingDeploymentCredentialsForProject(\n ctx,\n deploymentSelection.targetProject,\n selectionWithinProject,\n { ensureLocalRunning },\n );\n }\n case \"anonymous\": {\n if (deploymentSelection.deploymentName === null) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n });\n }\n const config = await loadAnonymousDeployment(\n ctx,\n deploymentSelection.deploymentName,\n );\n const url = localDeploymentUrl(config.ports.cloud);\n if (ensureLocalRunning) {\n await assertLocalBackendRunning(ctx, {\n url,\n deploymentName: deploymentSelection.deploymentName,\n });\n }\n return {\n adminKey: config.adminKey,\n url,\n deploymentFields: {\n deploymentName: deploymentSelection.deploymentName,\n deploymentType: \"anonymous\",\n projectSlug: null,\n teamSlug: null,\n },\n };\n }\n default: {\n deploymentSelection satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Unknown deployment type\",\n });\n }\n }\n}\n\nexport async function fetchTeamAndProject(\n ctx: Context,\n deploymentName: string,\n) {\n const data = (await bigBrainAPI({\n ctx,\n method: \"GET\",\n url: `deployment/${deploymentName}/team_and_project`,\n })) as {\n team: string; // slug\n project: string; // slug\n teamId: number;\n projectId: number;\n };\n\n const { team, project } = data;\n if (team === undefined || project === undefined) {\n const msg =\n \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n\n return data;\n}\n\nexport async function fetchTeamAndProjectForKey(\n ctx: Context,\n // Deployment deploy key, like `prod:happy-animal-123|<stuff>`\n deployKey: string,\n) {\n const data = (await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: `deployment/team_and_project_for_key`,\n data: {\n deployKey: deployKey,\n },\n })) as {\n team: string; // slug\n project: string; // slug\n teamId: number;\n projectId: number;\n };\n\n const { team, project } = data;\n if (team === undefined || project === undefined) {\n const msg =\n \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n\n return data;\n}\n\nexport async function getTeamsForUser(ctx: Context) {\n const teams = await bigBrainAPI<{ id: number; name: string; slug: string }[]>(\n {\n ctx,\n method: \"GET\",\n url: \"teams\",\n },\n );\n return teams;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Context } from \"../../bundler/context.js\";\nimport { logVerbose, logWarning } from \"../../bundler/log.js\";\nimport { getTeamAndProjectFromPreviewAdminKey } from \"./deployment.js\";\nimport {\n assertLocalBackendRunning,\n localDeploymentUrl,\n} from \"./localDeployment/run.js\";\nimport {\n ThrowingFetchError,\n bigBrainAPI,\n bigBrainAPIMaybeThrows,\n logAndHandleFetchError,\n} from \"./utils/utils.js\";\nimport { z } from \"zod\";\nimport {\n DeploymentSelection,\n ProjectSelection,\n} from \"./deploymentSelection.js\";\nimport { loadLocalDeploymentCredentials } from \"./localDeployment/localDeployment.js\";\nimport { loadAnonymousDeployment } from \"./localDeployment/anonymous.js\";\nexport type DeploymentName = string;\nexport type CloudDeploymentType = \"prod\" | \"dev\" | \"preview\" | \"custom\";\nexport type AccountRequiredDeploymentType = CloudDeploymentType | \"local\";\nexport type DeploymentType = AccountRequiredDeploymentType | \"anonymous\";\n\nexport type Project = {\n id: number;\n name: string;\n slug: string;\n isDemo: boolean;\n};\n\ntype AdminKey = string;\n\n// Provision a new project, creating a deployment of type `deploymentTypeToProvision`\nexport async function createProjectAndCreateDeployment(\n ctx: Context,\n {\n teamSlug: selectedTeamSlug,\n projectName,\n deploymentTypeToProvision,\n }: {\n teamSlug: string;\n projectName: string;\n deploymentTypeToProvision: \"prod\" | \"dev\";\n },\n): Promise<{\n projectSlug: string;\n teamSlug: string;\n projectsRemaining: number;\n}> {\n const provisioningArgs = {\n team: selectedTeamSlug,\n projectName,\n deploymentType: deploymentTypeToProvision,\n };\n const data = await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"create_project\",\n data: provisioningArgs,\n });\n const { projectSlug, teamSlug, projectsRemaining } = data;\n if (\n projectSlug === undefined ||\n teamSlug === undefined ||\n projectsRemaining === undefined\n ) {\n const error =\n \"Unexpected response during provisioning: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: error,\n });\n }\n return {\n projectSlug,\n teamSlug,\n projectsRemaining,\n };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `deploymentSelectionFromOptions`\n// ----------------------------------------------------------------------\n\nexport const deploymentSelectionWithinProjectSchema = z.discriminatedUnion(\n \"kind\",\n [\n z.object({ kind: z.literal(\"previewName\"), previewName: z.string() }),\n z.object({ kind: z.literal(\"deploymentName\"), deploymentName: z.string() }),\n z.object({ kind: z.literal(\"prod\") }),\n z.object({ kind: z.literal(\"implicitProd\") }),\n z.object({ kind: z.literal(\"ownDev\") }),\n ],\n);\n\nexport type DeploymentSelectionWithinProject = z.infer<\n typeof deploymentSelectionWithinProjectSchema\n>;\n\ntype DeploymentSelectionOptionsWithinProject = {\n prod?: boolean | undefined;\n // Whether this command defaults to prod when no other flags are provided. If\n // this is not set, the default will be \"ownDev\"\n implicitProd?: boolean;\n\n previewName?: string | undefined;\n deploymentName?: string | undefined;\n};\n\nexport type DeploymentSelectionOptions =\n DeploymentSelectionOptionsWithinProject & {\n url?: string | undefined;\n adminKey?: string | undefined;\n envFile?: string | undefined;\n };\n\nexport function deploymentSelectionWithinProjectFromOptions(\n options: DeploymentSelectionOptions,\n): DeploymentSelectionWithinProject {\n if (options.previewName !== undefined) {\n return { kind: \"previewName\", previewName: options.previewName };\n }\n if (options.deploymentName !== undefined) {\n return { kind: \"deploymentName\", deploymentName: options.deploymentName };\n }\n if (options.prod) {\n return { kind: \"prod\" };\n }\n if (options.implicitProd) {\n return { kind: \"implicitProd\" };\n }\n return { kind: \"ownDev\" };\n}\n\nexport async function validateDeploymentSelectionForExistingDeployment(\n ctx: Context,\n deploymentSelection: DeploymentSelectionWithinProject,\n source: \"selfHosted\" | \"deployKey\" | \"cliArgs\",\n) {\n if (\n deploymentSelection.kind === \"ownDev\" ||\n deploymentSelection.kind === \"implicitProd\"\n ) {\n // These are both considered the \"default\" selection depending on the command, so this is always fine\n return;\n }\n switch (source) {\n case \"selfHosted\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"The `--prod`, `--preview-name`, and `--deployment-name` flags cannot be used with a self-hosted deployment.\",\n });\n case \"deployKey\":\n logWarning(\n \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags and using deployment from CONVEX_DEPLOY_KEY\",\n );\n break;\n case \"cliArgs\":\n logWarning(\n \"Ignoring `--prod`, `--preview-name`, or `--deployment-name` flags since this command was run with --url and --admin-key\",\n );\n break;\n }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `checkAccessToSelectedProject`\n// ----------------------------------------------------------------------\n\nasync function hasAccessToProject(\n ctx: Context,\n selector: { projectSlug: string; teamSlug: string },\n): Promise<boolean> {\n try {\n await bigBrainAPIMaybeThrows({\n ctx,\n url: `teams/${selector.teamSlug}/projects/${selector.projectSlug}/deployments`,\n method: \"GET\",\n });\n return true;\n } catch (err) {\n if (\n err instanceof ThrowingFetchError &&\n (err.serverErrorData?.code === \"TeamNotFound\" ||\n err.serverErrorData?.code === \"ProjectNotFound\")\n ) {\n return false;\n }\n return logAndHandleFetchError(ctx, err);\n }\n}\n\nexport async function checkAccessToSelectedProject(\n ctx: Context,\n projectSelection: ProjectSelection,\n): Promise<\n | { kind: \"hasAccess\"; teamSlug: string; projectSlug: string }\n | { kind: \"noAccess\" }\n | { kind: \"unknown\" }\n> {\n switch (projectSelection.kind) {\n case \"deploymentName\": {\n const result = await getTeamAndProjectSlugForDeployment(ctx, {\n deploymentName: projectSelection.deploymentName,\n });\n if (result === null) {\n return { kind: \"noAccess\" };\n }\n return {\n kind: \"hasAccess\",\n teamSlug: result.teamSlug,\n projectSlug: result.projectSlug,\n };\n }\n case \"teamAndProjectSlugs\": {\n const hasAccess = await hasAccessToProject(ctx, {\n teamSlug: projectSelection.teamSlug,\n projectSlug: projectSelection.projectSlug,\n });\n if (!hasAccess) {\n return { kind: \"noAccess\" };\n }\n return {\n kind: \"hasAccess\",\n teamSlug: projectSelection.teamSlug,\n projectSlug: projectSelection.projectSlug,\n };\n }\n case \"projectDeployKey\":\n // Ideally we would be able to do an explicit check here, but if the key is invalid,\n // it will instead fail as soon as we try to use the key.\n return { kind: \"unknown\" };\n default: {\n projectSelection satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Invalid project selection: ${(projectSelection as any).kind}`,\n });\n }\n }\n}\n\nexport async function getTeamAndProjectSlugForDeployment(\n ctx: Context,\n selector: { deploymentName: string },\n): Promise<{ teamSlug: string; projectSlug: string } | null> {\n try {\n const body = await bigBrainAPIMaybeThrows({\n ctx,\n url: `deployment/${selector.deploymentName}/team_and_project`,\n method: \"GET\",\n });\n return { teamSlug: body.team, projectSlug: body.project };\n } catch (err) {\n if (\n err instanceof ThrowingFetchError &&\n (err.serverErrorData?.code === \"DeploymentNotFound\" ||\n err.serverErrorData?.code === \"ProjectNotFound\")\n ) {\n return null;\n }\n return logAndHandleFetchError(ctx, err);\n }\n}\n\n// ----------------------------------------------------------------------\n// Helpers for fetching deployment credentials\n// ----------------------------------------------------------------------\n\n// Used by dev for upgrade from team and project in convex.json to CONVEX_DEPLOYMENT\nexport async function fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx: Context,\n projectSelection:\n | { kind: \"teamAndProjectSlugs\"; teamSlug: string; projectSlug: string }\n | { kind: \"projectDeployKey\"; projectDeployKey: string },\n deploymentType: \"prod\" | \"dev\",\n): Promise<{\n deploymentName: string;\n deploymentUrl: string;\n adminKey: AdminKey;\n}> {\n if (projectSelection.kind === \"projectDeployKey\") {\n const auth = ctx.bigBrainAuth();\n const doesAuthMatch =\n auth !== null &&\n auth.kind === \"projectKey\" &&\n auth.projectKey === projectSelection.projectDeployKey;\n if (!doesAuthMatch) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new Error(\n \"Expected project deploy key to match the big brain auth header\",\n ),\n printedMessage: \"Unexpected error when loading the Convex deployment\",\n });\n }\n }\n let data;\n try {\n data = await bigBrainAPIMaybeThrows({\n ctx,\n method: \"POST\",\n url: \"deployment/provision_and_authorize\",\n data: {\n teamSlug:\n projectSelection.kind === \"teamAndProjectSlugs\"\n ? projectSelection.teamSlug\n : null,\n projectSlug:\n projectSelection.kind === \"teamAndProjectSlugs\"\n ? projectSelection.projectSlug\n : null,\n deploymentType: deploymentType === \"prod\" ? \"prod\" : \"dev\",\n },\n });\n } catch (error) {\n const msg = \"Unknown error during authorization: \" + error;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n const adminKey = data.adminKey;\n const url = data.url;\n const deploymentName = data.deploymentName;\n if (adminKey === undefined || url === undefined) {\n const msg = \"Unknown error during authorization: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n return { adminKey, deploymentUrl: url, deploymentName };\n}\n\nasync function fetchExistingDevDeploymentCredentialsOrCrash(\n ctx: Context,\n deploymentName: DeploymentName,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n const slugs = await fetchTeamAndProject(ctx, deploymentName);\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n {\n kind: \"teamAndProjectSlugs\",\n teamSlug: slugs.team,\n projectSlug: slugs.project,\n },\n \"dev\",\n );\n return {\n deploymentName: credentials.deploymentName,\n adminKey: credentials.adminKey,\n url: credentials.deploymentUrl,\n deploymentType: \"dev\",\n };\n}\n\n// ----------------------------------------------------------------------\n// Helpers for `loadSelectedDeploymentCredentials`\n// ----------------------------------------------------------------------\n\nasync function handleOwnDev(\n ctx: Context,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\": {\n if (projectSelection.deploymentType === \"local\") {\n const credentials = await loadLocalDeploymentCredentials(\n ctx,\n projectSelection.deploymentName,\n );\n return {\n deploymentName: projectSelection.deploymentName,\n adminKey: credentials.adminKey,\n url: credentials.deploymentUrl,\n deploymentType: \"local\",\n };\n }\n return await fetchExistingDevDeploymentCredentialsOrCrash(\n ctx,\n projectSelection.deploymentName,\n );\n }\n case \"teamAndProjectSlugs\":\n case \"projectDeployKey\": {\n // Note -- this provisions a dev deployment if one doesn't exist\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n projectSelection,\n \"dev\",\n );\n return {\n url: credentials.deploymentUrl,\n adminKey: credentials.adminKey,\n deploymentName: credentials.deploymentName,\n deploymentType: \"dev\",\n };\n }\n default: {\n projectSelection satisfies never;\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n // This should be unreachable, so don't bother with a printed message.\n printedMessage: null,\n errForSentry: `Unexpected project selection: ${(projectSelection as any).kind}`,\n });\n }\n }\n}\n\nasync function handleProd(\n ctx: Context,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: \"prod\";\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\": {\n const credentials = await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"deployment/authorize_prod\",\n data: {\n deploymentName: projectSelection.deploymentName,\n },\n });\n return credentials;\n }\n case \"teamAndProjectSlugs\":\n case \"projectDeployKey\": {\n const credentials =\n await fetchDeploymentCredentialsProvisioningDevOrProdMaybeThrows(\n ctx,\n projectSelection,\n \"prod\",\n );\n return {\n url: credentials.deploymentUrl,\n adminKey: credentials.adminKey,\n deploymentName: credentials.deploymentName,\n deploymentType: \"prod\",\n };\n }\n }\n}\n\nasync function handlePreview(\n ctx: Context,\n previewName: string,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: \"preview\";\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\":\n case \"teamAndProjectSlugs\":\n return await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"deployment/authorize_preview\",\n data: {\n previewName: previewName,\n projectSelection: projectSelection,\n },\n });\n\n case \"projectDeployKey\":\n // TODO -- this should be supported\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Project deploy keys are not supported for preview deployments\",\n });\n }\n}\n\nasync function handleDeploymentName(\n ctx: Context,\n deploymentName: string,\n projectSelection: ProjectSelection,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n switch (projectSelection.kind) {\n case \"deploymentName\":\n case \"teamAndProjectSlugs\":\n return await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: \"deployment/authorize_within_current_project\",\n data: {\n selectedDeploymentName: deploymentName,\n projectSelection: projectSelection,\n },\n });\n case \"projectDeployKey\":\n // TODO -- this should be supported\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"Project deploy keys are not supported with the --deployment-name flag\",\n });\n }\n}\n\nasync function fetchDeploymentCredentialsWithinCurrentProject(\n ctx: Context,\n projectSelection: ProjectSelection,\n deploymentSelection: DeploymentSelectionWithinProject,\n): Promise<{\n deploymentName: string;\n adminKey: string;\n url: string;\n deploymentType: DeploymentType;\n}> {\n switch (deploymentSelection.kind) {\n case \"ownDev\": {\n return await handleOwnDev(ctx, projectSelection);\n }\n case \"implicitProd\":\n case \"prod\": {\n return await handleProd(ctx, projectSelection);\n }\n case \"previewName\":\n return await handlePreview(\n ctx,\n deploymentSelection.previewName,\n projectSelection,\n );\n case \"deploymentName\":\n return await handleDeploymentName(\n ctx,\n deploymentSelection.deploymentName,\n projectSelection,\n );\n default: {\n deploymentSelection satisfies never;\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n // This should be unreachable, so don't bother with a printed message.\n printedMessage: null,\n errForSentry: `Unexpected deployment selection: ${deploymentSelection as any}`,\n });\n }\n }\n}\n\nasync function _loadExistingDeploymentCredentialsForProject(\n ctx: Context,\n targetProject: ProjectSelection,\n deploymentSelection: DeploymentSelectionWithinProject,\n { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<DetailedDeploymentCredentials> {\n const accessResult = await checkAccessToSelectedProject(ctx, targetProject);\n if (accessResult.kind === \"noAccess\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"You don't have access to the selected project. Run `npx convex dev` to select a different project.\",\n });\n }\n const result = await fetchDeploymentCredentialsWithinCurrentProject(\n ctx,\n targetProject,\n deploymentSelection,\n );\n logVerbose(\n `Deployment URL: ${result.url}, Deployment Name: ${result.deploymentName}, Deployment Type: ${result.deploymentType}`,\n );\n if (ensureLocalRunning && result.deploymentType === \"local\") {\n await assertLocalBackendRunning(ctx, {\n url: result.url,\n deploymentName: result.deploymentName,\n });\n }\n return {\n ...result,\n deploymentFields: {\n deploymentName: result.deploymentName,\n deploymentType: result.deploymentType,\n\n projectSlug:\n accessResult.kind === \"hasAccess\" ? accessResult.projectSlug : null,\n teamSlug:\n accessResult.kind === \"hasAccess\" ? accessResult.teamSlug : null,\n },\n };\n}\n\nexport type DetailedDeploymentCredentials = {\n adminKey: string;\n url: string;\n deploymentFields: {\n deploymentName: string;\n deploymentType: DeploymentType;\n projectSlug: string | null;\n teamSlug: string | null;\n } | null;\n};\n\n// This is used by most commands (notably not `dev` and `deploy`) to determine\n// which deployment to act on, taking into account the deployment selection flags.\n//\nexport async function loadSelectedDeploymentCredentials(\n ctx: Context,\n deploymentSelection: DeploymentSelection,\n selectionWithinProject: DeploymentSelectionWithinProject,\n { ensureLocalRunning } = { ensureLocalRunning: true },\n): Promise<DetailedDeploymentCredentials> {\n switch (deploymentSelection.kind) {\n case \"existingDeployment\":\n await validateDeploymentSelectionForExistingDeployment(\n ctx,\n selectionWithinProject,\n deploymentSelection.deploymentToActOn.source,\n );\n // We're already set up.\n logVerbose(\n `Deployment URL: ${deploymentSelection.deploymentToActOn.url}, Deployment Name: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentName ?? \"unknown\"}, Deployment Type: ${deploymentSelection.deploymentToActOn.deploymentFields?.deploymentType ?? \"unknown\"}`,\n );\n return {\n adminKey: deploymentSelection.deploymentToActOn.adminKey,\n url: deploymentSelection.deploymentToActOn.url,\n deploymentFields:\n deploymentSelection.deploymentToActOn.deploymentFields,\n };\n case \"chooseProject\":\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n });\n case \"preview\": {\n const slugs = await getTeamAndProjectFromPreviewAdminKey(\n ctx,\n deploymentSelection.previewDeployKey,\n );\n return await _loadExistingDeploymentCredentialsForProject(\n ctx,\n {\n kind: \"teamAndProjectSlugs\",\n teamSlug: slugs.teamSlug,\n projectSlug: slugs.projectSlug,\n },\n selectionWithinProject,\n { ensureLocalRunning },\n );\n }\n case \"deploymentWithinProject\": {\n return await _loadExistingDeploymentCredentialsForProject(\n ctx,\n deploymentSelection.targetProject,\n selectionWithinProject,\n { ensureLocalRunning },\n );\n }\n case \"anonymous\": {\n if (deploymentSelection.deploymentName === null) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage:\n \"No CONVEX_DEPLOYMENT set, run `npx convex dev` to configure a Convex project\",\n });\n }\n const config = await loadAnonymousDeployment(\n ctx,\n deploymentSelection.deploymentName,\n );\n const url = localDeploymentUrl(config.ports.cloud);\n if (ensureLocalRunning) {\n await assertLocalBackendRunning(ctx, {\n url,\n deploymentName: deploymentSelection.deploymentName,\n });\n }\n return {\n adminKey: config.adminKey,\n url,\n deploymentFields: {\n deploymentName: deploymentSelection.deploymentName,\n deploymentType: \"anonymous\",\n projectSlug: null,\n teamSlug: null,\n },\n };\n }\n default: {\n deploymentSelection satisfies never;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: \"Unknown deployment type\",\n });\n }\n }\n}\n\nexport async function fetchTeamAndProject(\n ctx: Context,\n deploymentName: string,\n) {\n const data = (await bigBrainAPI({\n ctx,\n method: \"GET\",\n url: `deployment/${deploymentName}/team_and_project`,\n })) as {\n team: string; // slug\n project: string; // slug\n teamId: number;\n projectId: number;\n };\n\n const { team, project } = data;\n if (team === undefined || project === undefined) {\n const msg =\n \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n\n return data;\n}\n\nexport async function fetchTeamAndProjectForKey(\n ctx: Context,\n // Deployment deploy key, like `prod:happy-animal-123|<stuff>`\n deployKey: string,\n) {\n const data = (await bigBrainAPI({\n ctx,\n method: \"POST\",\n url: `deployment/team_and_project_for_key`,\n data: {\n deployKey: deployKey,\n },\n })) as {\n team: string; // slug\n project: string; // slug\n teamId: number;\n projectId: number;\n };\n\n const { team, project } = data;\n if (team === undefined || project === undefined) {\n const msg =\n \"Unknown error when fetching team and project: \" + JSON.stringify(data);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: new Error(msg),\n printedMessage: msg,\n });\n }\n\n return data;\n}\n\nexport async function getTeamsForUser(ctx: Context) {\n const teams = await bigBrainAPI<{ id: number; name: string; slug: string }[]>(\n {\n ctx,\n method: \"GET\",\n url: \"teams\",\n },\n );\n return teams;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -98,7 +98,8 @@ async function normalizeDevOptions(ctx, cmdOptions) {
98
98
  traceEvents: cmdOptions.traceEvents,
99
99
  debugBundlePath: cmdOptions.debugBundlePath,
100
100
  debugNodeApis: !!cmdOptions.debugNodeApis,
101
- liveComponentSources: !!cmdOptions.liveComponentSources
101
+ liveComponentSources: !!cmdOptions.liveComponentSources,
102
+ pushAllModules: !!cmdOptions.pushAllModules
102
103
  };
103
104
  }
104
105
  import_extra_typings.Command.prototype.addDeployOptions = function() {
@@ -129,7 +130,12 @@ import_extra_typings.Command.prototype.addDeployOptions = function() {
129
130
  "--cmd-url-env-var-name <name>",
130
131
  "Environment variable name to set Convex deployment URL (e.g. `VITE_CONVEX_URL`) when using `--cmd`"
131
132
  )
132
- ).addOption(new import_extra_typings.Option("--debug-bundle-path <path>").hideHelp()).addOption(new import_extra_typings.Option("--debug").hideHelp()).addOption(new import_extra_typings.Option("--write-push-request <writePushRequest>").hideHelp()).addOption(new import_extra_typings.Option("--live-component-sources").hideHelp());
133
+ ).addOption(new import_extra_typings.Option("--debug-bundle-path <path>").hideHelp()).addOption(new import_extra_typings.Option("--debug").hideHelp()).addOption(new import_extra_typings.Option("--write-push-request <writePushRequest>").hideHelp()).addOption(new import_extra_typings.Option("--live-component-sources").hideHelp()).addOption(
134
+ new import_extra_typings.Option(
135
+ "--push-all-modules",
136
+ "Push all modules without checking for unchanged module hashes from the server"
137
+ ).default(false).hideHelp()
138
+ );
133
139
  };
134
140
  import_extra_typings.Command.prototype.addSelfHostOptions = function() {
135
141
  return this.option(