convex 1.31.4 → 1.31.6-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 (179) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/browser.bundle.js +1 -1
  3. package/dist/browser.bundle.js.map +1 -1
  4. package/dist/cjs/bundler/debugBundle.js +1 -1
  5. package/dist/cjs/bundler/debugBundle.js.map +1 -1
  6. package/dist/cjs/bundler/index.js +1 -1
  7. package/dist/cjs/bundler/index.js.map +1 -1
  8. package/dist/cjs/cli/configure.js +2 -10
  9. package/dist/cjs/cli/configure.js.map +2 -2
  10. package/dist/cjs/cli/deploy.js +16 -2
  11. package/dist/cjs/cli/deploy.js.map +2 -2
  12. package/dist/cjs/cli/dev.js +4 -1
  13. package/dist/cjs/cli/dev.js.map +2 -2
  14. package/dist/cjs/cli/generatedApi.js.map +1 -1
  15. package/dist/cjs/cli/integration.js +198 -10
  16. package/dist/cjs/cli/integration.js.map +2 -2
  17. package/dist/cjs/cli/lib/command.js +9 -4
  18. package/dist/cjs/cli/lib/command.js.map +2 -2
  19. package/dist/cjs/cli/lib/components/definition/bundle.js +1 -1
  20. package/dist/cjs/cli/lib/components/definition/bundle.js.map +1 -1
  21. package/dist/cjs/cli/lib/components.js +2 -1
  22. package/dist/cjs/cli/lib/components.js.map +2 -2
  23. package/dist/cjs/cli/lib/config.js +87 -212
  24. package/dist/cjs/cli/lib/config.js.map +3 -3
  25. package/dist/cjs/cli/lib/deploy2.js +27 -4
  26. package/dist/cjs/cli/lib/deploy2.js.map +2 -2
  27. package/dist/cjs/cli/lib/deploymentSelection.js +0 -12
  28. package/dist/cjs/cli/lib/deploymentSelection.js.map +2 -2
  29. package/dist/cjs/cli/lib/dev.js +30 -0
  30. package/dist/cjs/cli/lib/dev.js.map +2 -2
  31. package/dist/cjs/cli/lib/mcp/tools/index.js.map +2 -2
  32. package/dist/cjs/cli/lib/utils/prompts.js +1 -1
  33. package/dist/cjs/cli/lib/utils/prompts.js.map +2 -2
  34. package/dist/cjs/cli/lib/workos/environmentApi.js +27 -1
  35. package/dist/cjs/cli/lib/workos/environmentApi.js.map +2 -2
  36. package/dist/cjs/cli/lib/workos/platformApi.js +41 -7
  37. package/dist/cjs/cli/lib/workos/platformApi.js.map +2 -2
  38. package/dist/cjs/cli/lib/workos/workos.js +532 -93
  39. package/dist/cjs/cli/lib/workos/workos.js.map +2 -2
  40. package/dist/cjs/index.js +1 -1
  41. package/dist/cjs/index.js.map +1 -1
  42. package/dist/cjs-types/bundler/debugBundle.d.ts.map +1 -1
  43. package/dist/cjs-types/bundler/index.d.ts.map +1 -1
  44. package/dist/cjs-types/cli/configure.d.ts.map +1 -1
  45. package/dist/cjs-types/cli/deploy.d.ts.map +1 -1
  46. package/dist/cjs-types/cli/dev.d.ts.map +1 -1
  47. package/dist/cjs-types/cli/generatedApi.d.ts +260 -1
  48. package/dist/cjs-types/cli/generatedApi.d.ts.map +1 -1
  49. package/dist/cjs-types/cli/integration.d.ts.map +1 -1
  50. package/dist/cjs-types/cli/lib/command.d.ts +7 -1
  51. package/dist/cjs-types/cli/lib/command.d.ts.map +1 -1
  52. package/dist/cjs-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
  53. package/dist/cjs-types/cli/lib/components.d.ts +2 -0
  54. package/dist/cjs-types/cli/lib/components.d.ts.map +1 -1
  55. package/dist/cjs-types/cli/lib/config.d.ts +38 -26
  56. package/dist/cjs-types/cli/lib/config.d.ts.map +1 -1
  57. package/dist/cjs-types/cli/lib/deploy2.d.ts +5 -0
  58. package/dist/cjs-types/cli/lib/deploy2.d.ts.map +1 -1
  59. package/dist/cjs-types/cli/lib/deployment.d.ts +1 -1
  60. package/dist/cjs-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  61. package/dist/cjs-types/cli/lib/dev.d.ts +2 -0
  62. package/dist/cjs-types/cli/lib/dev.d.ts.map +1 -1
  63. package/dist/cjs-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  64. package/dist/cjs-types/cli/lib/utils/prompts.d.ts +1 -0
  65. package/dist/cjs-types/cli/lib/utils/prompts.d.ts.map +1 -1
  66. package/dist/cjs-types/cli/lib/workos/environmentApi.d.ts +4 -0
  67. package/dist/cjs-types/cli/lib/workos/environmentApi.d.ts.map +1 -1
  68. package/dist/cjs-types/cli/lib/workos/platformApi.d.ts +9 -1
  69. package/dist/cjs-types/cli/lib/workos/platformApi.d.ts.map +1 -1
  70. package/dist/cjs-types/cli/lib/workos/workos.d.ts +39 -8
  71. package/dist/cjs-types/cli/lib/workos/workos.d.ts.map +1 -1
  72. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts +2 -0
  73. package/dist/cjs-types/cli/lib/workos/workos.test.d.ts.map +1 -0
  74. package/dist/cjs-types/cli/network_test.d.ts +1 -0
  75. package/dist/cjs-types/cli/network_test.d.ts.map +1 -1
  76. package/dist/cjs-types/index.d.ts +1 -1
  77. package/dist/cjs-types/index.d.ts.map +1 -1
  78. package/dist/cli.bundle.cjs +3337 -5468
  79. package/dist/cli.bundle.cjs.map +4 -4
  80. package/dist/esm/bundler/debugBundle.js +1 -1
  81. package/dist/esm/bundler/debugBundle.js.map +1 -1
  82. package/dist/esm/bundler/index.js +1 -1
  83. package/dist/esm/bundler/index.js.map +1 -1
  84. package/dist/esm/cli/configure.js +3 -16
  85. package/dist/esm/cli/configure.js.map +2 -2
  86. package/dist/esm/cli/deploy.js +16 -2
  87. package/dist/esm/cli/deploy.js.map +2 -2
  88. package/dist/esm/cli/dev.js +4 -1
  89. package/dist/esm/cli/dev.js.map +2 -2
  90. package/dist/esm/cli/integration.js +209 -12
  91. package/dist/esm/cli/integration.js.map +2 -2
  92. package/dist/esm/cli/lib/command.js +9 -4
  93. package/dist/esm/cli/lib/command.js.map +2 -2
  94. package/dist/esm/cli/lib/components/definition/bundle.js +1 -1
  95. package/dist/esm/cli/lib/components/definition/bundle.js.map +1 -1
  96. package/dist/esm/cli/lib/components.js +2 -1
  97. package/dist/esm/cli/lib/components.js.map +2 -2
  98. package/dist/esm/cli/lib/config.js +86 -210
  99. package/dist/esm/cli/lib/config.js.map +3 -3
  100. package/dist/esm/cli/lib/deploy2.js +32 -5
  101. package/dist/esm/cli/lib/deploy2.js.map +2 -2
  102. package/dist/esm/cli/lib/deploymentSelection.js +0 -12
  103. package/dist/esm/cli/lib/deploymentSelection.js.map +2 -2
  104. package/dist/esm/cli/lib/dev.js +33 -0
  105. package/dist/esm/cli/lib/dev.js.map +2 -2
  106. package/dist/esm/cli/lib/mcp/tools/index.js.map +2 -2
  107. package/dist/esm/cli/lib/utils/prompts.js +1 -1
  108. package/dist/esm/cli/lib/utils/prompts.js.map +2 -2
  109. package/dist/esm/cli/lib/workos/environmentApi.js +25 -0
  110. package/dist/esm/cli/lib/workos/environmentApi.js.map +2 -2
  111. package/dist/esm/cli/lib/workos/platformApi.js +36 -6
  112. package/dist/esm/cli/lib/workos/platformApi.js.map +2 -2
  113. package/dist/esm/cli/lib/workos/workos.js +535 -94
  114. package/dist/esm/cli/lib/workos/workos.js.map +2 -2
  115. package/dist/esm/index.js +1 -1
  116. package/dist/esm/index.js.map +1 -1
  117. package/dist/esm-types/bundler/debugBundle.d.ts.map +1 -1
  118. package/dist/esm-types/bundler/index.d.ts.map +1 -1
  119. package/dist/esm-types/cli/configure.d.ts.map +1 -1
  120. package/dist/esm-types/cli/deploy.d.ts.map +1 -1
  121. package/dist/esm-types/cli/dev.d.ts.map +1 -1
  122. package/dist/esm-types/cli/generatedApi.d.ts +260 -1
  123. package/dist/esm-types/cli/generatedApi.d.ts.map +1 -1
  124. package/dist/esm-types/cli/integration.d.ts.map +1 -1
  125. package/dist/esm-types/cli/lib/command.d.ts +7 -1
  126. package/dist/esm-types/cli/lib/command.d.ts.map +1 -1
  127. package/dist/esm-types/cli/lib/components/definition/bundle.d.ts.map +1 -1
  128. package/dist/esm-types/cli/lib/components.d.ts +2 -0
  129. package/dist/esm-types/cli/lib/components.d.ts.map +1 -1
  130. package/dist/esm-types/cli/lib/config.d.ts +38 -26
  131. package/dist/esm-types/cli/lib/config.d.ts.map +1 -1
  132. package/dist/esm-types/cli/lib/deploy2.d.ts +5 -0
  133. package/dist/esm-types/cli/lib/deploy2.d.ts.map +1 -1
  134. package/dist/esm-types/cli/lib/deployment.d.ts +1 -1
  135. package/dist/esm-types/cli/lib/deploymentSelection.d.ts.map +1 -1
  136. package/dist/esm-types/cli/lib/dev.d.ts +2 -0
  137. package/dist/esm-types/cli/lib/dev.d.ts.map +1 -1
  138. package/dist/esm-types/cli/lib/mcp/tools/index.d.ts.map +1 -1
  139. package/dist/esm-types/cli/lib/utils/prompts.d.ts +1 -0
  140. package/dist/esm-types/cli/lib/utils/prompts.d.ts.map +1 -1
  141. package/dist/esm-types/cli/lib/workos/environmentApi.d.ts +4 -0
  142. package/dist/esm-types/cli/lib/workos/environmentApi.d.ts.map +1 -1
  143. package/dist/esm-types/cli/lib/workos/platformApi.d.ts +9 -1
  144. package/dist/esm-types/cli/lib/workos/platformApi.d.ts.map +1 -1
  145. package/dist/esm-types/cli/lib/workos/workos.d.ts +39 -8
  146. package/dist/esm-types/cli/lib/workos/workos.d.ts.map +1 -1
  147. package/dist/esm-types/cli/lib/workos/workos.test.d.ts +2 -0
  148. package/dist/esm-types/cli/lib/workos/workos.test.d.ts.map +1 -0
  149. package/dist/esm-types/cli/network_test.d.ts +1 -0
  150. package/dist/esm-types/cli/network_test.d.ts.map +1 -1
  151. package/dist/esm-types/index.d.ts +1 -1
  152. package/dist/esm-types/index.d.ts.map +1 -1
  153. package/dist/react.bundle.js +1 -1
  154. package/dist/react.bundle.js.map +1 -1
  155. package/package.json +5 -5
  156. package/schemas/convex.schema.json +2 -1
  157. package/src/bundler/debugBundle.ts +1 -1
  158. package/src/bundler/index.ts +1 -1
  159. package/src/cli/configure.ts +3 -18
  160. package/src/cli/deploy.ts +23 -1
  161. package/src/cli/dev.ts +6 -0
  162. package/src/cli/generatedApi.ts +260 -1
  163. package/src/cli/integration.ts +289 -15
  164. package/src/cli/lib/command.ts +19 -6
  165. package/src/cli/lib/components/definition/bundle.ts +1 -1
  166. package/src/cli/lib/components.ts +7 -1
  167. package/src/cli/lib/config.test.ts +444 -547
  168. package/src/cli/lib/config.ts +166 -309
  169. package/src/cli/lib/deploy2.ts +47 -4
  170. package/src/cli/lib/deploymentSelection.ts +0 -14
  171. package/src/cli/lib/dev.ts +58 -0
  172. package/src/cli/lib/mcp/tools/index.ts +1 -2
  173. package/src/cli/lib/utils/prompts.ts +4 -1
  174. package/src/cli/lib/workos/environmentApi.ts +38 -0
  175. package/src/cli/lib/workos/platformApi.ts +69 -6
  176. package/src/cli/lib/workos/workos.test.ts +242 -0
  177. package/src/cli/lib/workos/workos.ts +807 -134
  178. package/src/cli/network_test.ts +1 -1
  179. package/src/index.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cli/lib/config.ts"],
4
- "sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport equal from \"deep-equal\";\nimport { EOL } from \"os\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n Bundle,\n BundleHash,\n bundle,\n bundleAuthConfig,\n entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n functionsDir,\n ErrorData,\n loadPackageJson,\n deploymentFetch,\n deprecationCheckWarning,\n logAndHandleFetchError,\n ThrowingFetchError,\n currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n LocalDeploymentError,\n printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { ensureWorkosEnvironmentProvisioned } from \"./workos/workos.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing auth configuration. */\nexport interface AuthInfo {\n // Provider-specific application identifier. Corresponds to the `aud` field in an OIDC token.\n applicationID: string;\n // Domain used for authentication. Corresponds to the `iss` field in an OIDC token.\n domain: string;\n}\n\n/**\n * convex.json file parsing and rewriting notes\n * - Unknown fields at the top level and in node and codegen are preserved\n * so that older CLI versions can deploy new projects (this functionality\n * will be removed in the future).\n * - Deprecated values are tracked only so that we can delete them, or\n * (for authInfo) migrate to a convex/auth.config.ts and delete.\n * - Default values for properties with an obvious default are removed in order\n * to keep the config file small so we can delete the file if it only has\n * deprecated properties or obvious defaults.\n * - convex.json does not allow comments, it will be rewritten\n * automatically. This could change in the future, a property config\n * file makes more sense. Previously automatically set values like\n * productionUrl were written to it, but it's becoming more like a config file.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n functions: string;\n node: {\n externalPackages: string[];\n // nodeVersion has no default value, its presence/absence is meaningful\n nodeVersion?: string | undefined;\n };\n generateCommonJSApi: boolean;\n // deprecated\n project?: string | undefined;\n // deprecated\n team?: string | undefined;\n // deprecated\n prodUrl?: string | undefined;\n // deprecated\n authInfo?: AuthInfo[] | undefined;\n\n codegen: {\n staticApi: boolean;\n staticDataModel: boolean;\n legacyComponentApi?: boolean;\n fileType?: \"ts\" | \"js/dts\";\n };\n\n bundler?: {\n includeSourcesContent?: boolean;\n };\n\n typescriptCompiler?: TypescriptCompiler;\n}\n\n/** Type written to convex.json (where we elide deleted default values) */\ntype DefaultsRemovedProjectConfig = Partial<\n Omit<ProjectConfig, \"node\" | \"codegen\" | \"bundler\"> & {\n node: Partial<ProjectConfig[\"node\"]>;\n codegen: Partial<ProjectConfig[\"codegen\"]>;\n bundler: Partial<ProjectConfig[\"bundler\"]>;\n }\n>;\n\nexport interface Config {\n projectConfig: ProjectConfig;\n modules: Bundle[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n projectConfig: ProjectConfig;\n moduleHashes: BundleHash[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used (default is false) */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.legacyComponentApi === false;\n}\n\n/** Check if object is of AuthInfo type. */\nfunction isAuthInfo(object: any): object is AuthInfo {\n return (\n \"applicationID\" in object &&\n typeof object.applicationID === \"string\" &&\n \"domain\" in object &&\n typeof object.domain === \"string\"\n );\n}\n\nfunction isAuthInfos(object: any): object is AuthInfo[] {\n return Array.isArray(object) && object.every((item: any) => isAuthInfo(item));\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// Zod schema for ProjectConfig\nconst AuthInfoSchema = z.object({\n applicationID: z.string(),\n domain: z.string(),\n});\n\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n externalPackages: z\n .array(z.string())\n .default([])\n .describe(\n \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n ),\n nodeVersion: z\n .string()\n .optional()\n .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n staticApi: z\n .boolean()\n .default(false)\n .describe(\n \"Use Convex function argument validators and return value validators to generate a typed API object\",\n ),\n staticDataModel: z.boolean().default(false),\n // These optional fields have no defaults - their presence/absence is meaningful\n legacyComponentApi: z.boolean().optional(),\n fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n includeSourcesContent: z\n .boolean()\n .default(true)\n .describe(\n \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n ),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n schema.refine((val) => val !== null && !Array.isArray(val), {\n message: \"Expected `convex.json` to contain an object\",\n });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n const codegenSchema = strict\n ? CodegenSchema.strict()\n : CodegenSchema.passthrough();\n const bundlerSchema = strict\n ? BundlerSchema.strict()\n : BundlerSchema.passthrough();\n\n const baseObject = z.object({\n functions: z\n .string()\n .default(DEFAULT_FUNCTIONS_PATH)\n .describe(\"Relative file path to the convex directory\"),\n node: nodeSchema.default({ externalPackages: [] }),\n codegen: codegenSchema.default({\n staticApi: false,\n staticDataModel: false,\n }),\n bundler: bundlerSchema.default({ includeSourcesContent: true }).optional(),\n generateCommonJSApi: z.boolean().default(false),\n typescriptCompiler: z\n .enum([\"tsc\", \"tsgo\"])\n .optional()\n .describe(\n \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n ),\n\n // Optional $schema field for JSON schema validation in editors\n $schema: z.string().optional(),\n\n // Deprecated fields that have been deprecated for years, only here so we\n // know it's safe to delete them.\n project: z.string().optional(),\n team: z.string().optional(),\n prodUrl: z.string().optional(),\n authInfo: z.array(AuthInfoSchema).optional(),\n });\n\n // Apply strict or passthrough BEFORE refine\n const withStrictness = strict\n ? baseObject.strict()\n : baseObject.passthrough();\n\n // Now apply the refinement\n return withStrictness.refine(\n (data) => {\n // Validate that generateCommonJSApi is not true when using TypeScript codegen\n if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n return false;\n }\n return true;\n },\n {\n message:\n 'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n \"CommonJS modules require JavaScript generation. \" +\n 'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n path: [\"generateCommonJSApi\"],\n },\n );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n ctx: Context,\n obj: any,\n): Promise<ProjectConfig> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: \"Expected `convex.json` to contain an object\",\n });\n }\n\n try {\n // Try strict parse first to detect unknown keys\n return ProjectConfigSchemaStrict.parse(obj);\n } catch (error) {\n if (error instanceof z.ZodError) {\n // Check if all issues are unrecognized_keys issues\n const unknownKeyIssues = error.issues.filter(\n (issue) => issue.code === \"unrecognized_keys\",\n );\n\n if (\n unknownKeyIssues.length > 0 &&\n unknownKeyIssues.length === error.issues.length\n ) {\n // All errors are just unknown keys - warn about them\n for (const issue of unknownKeyIssues) {\n if (issue.code === \"unrecognized_keys\") {\n const pathPrefix =\n issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n const unknownKeys = issue.keys as string[];\n const newUnknownKeys = unknownKeys.filter(\n (key) => !warnedUnknownKeys.has(pathPrefix + key),\n );\n\n if (newUnknownKeys.length > 0) {\n const fullPath =\n issue.path.length > 0\n ? `\\`${issue.path.join(\".\")}\\``\n : \"`convex.json`\";\n logMessage(\n chalkStderr.yellow(\n `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n ),\n );\n logMessage(\n chalkStderr.gray(\n \" These properties will be preserved but are not recognized by this version of Convex.\",\n ),\n );\n\n // Track that we've warned about these keys\n newUnknownKeys.forEach((key) =>\n warnedUnknownKeys.add(pathPrefix + key),\n );\n }\n }\n }\n // Re-parse with passthrough schema to preserve unknown keys\n return ProjectConfigSchema.parse(obj);\n }\n\n // Handle validation errors we won't ignore\n if (error instanceof z.ZodError) {\n const issue = error.issues[0];\n const pathStr = issue.path.join(\".\");\n const message = pathStr\n ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n : `\\`convex.json\\`: ${issue.message}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: (error as any).toString(),\n });\n }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n functions: string;\n authInfo?: AuthInfo[];\n nodeVersion?: string;\n} {\n function throwParseError(message: string) {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw new ParseError(message);\n }\n if (typeof obj !== \"object\") {\n throwParseError(\"Expected an object\");\n }\n const { functions, authInfo, nodeVersion } = obj;\n if (typeof functions !== \"string\") {\n throwParseError(\"Expected functions to be a string\");\n }\n\n // Allow the `authInfo` key to be omitted\n if ((authInfo ?? null) !== null && !isAuthInfos(authInfo)) {\n throwParseError(\"Expected authInfo to be type AuthInfo[]\");\n }\n\n if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n throwParseError(\"Expected nodeVersion to be a string\");\n }\n\n return {\n functions,\n ...((authInfo ?? null) !== null ? { authInfo: authInfo } : {}),\n ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n };\n}\n\nexport function configName(): string {\n return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n const configFn = configName();\n // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n // Leave an error message around to help people out. We can remove this\n // error message after a couple months.\n const preferredLocation = configFn;\n const wrongLocation = path.join(\"src\", configFn);\n\n // Allow either location, but not both.\n const preferredLocationExists = ctx.fs.exists(preferredLocation);\n const wrongLocationExists = ctx.fs.exists(wrongLocation);\n if (preferredLocationExists && wrongLocationExists) {\n const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n if (!preferredLocationExists && wrongLocationExists) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n });\n }\n\n return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n projectConfig: ProjectConfig;\n configPath: string;\n}> {\n if (!ctx.fs.exists(\"convex.json\")) {\n // create-react-app bans imports from outside of src, so we can just\n // put the functions directory inside of src/ to work around this issue.\n const packages = await loadPackageJson(ctx);\n const isCreateReactApp = \"react-scripts\" in packages;\n return {\n projectConfig: {\n functions: isCreateReactApp\n ? `src/${DEFAULT_FUNCTIONS_PATH}`\n : DEFAULT_FUNCTIONS_PATH,\n node: {\n externalPackages: [],\n },\n generateCommonJSApi: false,\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n },\n configPath: configName(),\n };\n }\n let projectConfig;\n const configPath = await configFilepath(ctx);\n try {\n projectConfig = await parseProjectConfig(\n ctx,\n JSON.parse(ctx.fs.readUtf8File(configPath)),\n );\n } catch (err) {\n if (err instanceof ParseError || err instanceof SyntaxError) {\n logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n logMessage(chalkStderr.gray(err.toString()));\n } else {\n logFailure(\n `Error: Unable to read project config file \"${configPath}\"\\n` +\n \" Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n );\n if (err instanceof Error) {\n logError(chalkStderr.red(err.message));\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n // TODO -- move the logging above in here\n printedMessage: null,\n });\n }\n return {\n projectConfig,\n configPath,\n };\n}\n\nexport async function enforceDeprecatedConfigField(\n ctx: Context,\n config: ProjectConfig,\n field: \"team\" | \"project\" | \"prodUrl\",\n): Promise<string> {\n const value = config[field];\n if (typeof value === \"string\") {\n return value;\n }\n const err = new ParseError(`Expected ${field} to be a string`);\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n printedMessage: `Error: Parsing convex.json failed:\\n${chalkStderr.gray(err.toString())}`,\n });\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n verbose: boolean,\n): Promise<{\n config: Config;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const baseDir = functionsDir(configPath, projectConfig);\n // We bundle Node.js and Convex JS runtime functions entry points separately\n // since they execute on different platforms.\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n // es-build prints errors to console which would clobber our spinner.\n if (verbose) {\n showSpinner(\"Bundling modules for Convex's runtime...\");\n }\n const convexResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.isolate,\n generateSourceMaps: true,\n platform: \"browser\",\n });\n if (verbose) {\n logMessage(\n \"Convex's runtime modules: \",\n convexResult.modules.map((m) => m.path),\n );\n }\n\n // Bundle node modules.\n if (verbose && entryPoints.node.length !== 0) {\n showSpinner(\"Bundling modules for Node.js runtime...\");\n }\n const nodeResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.node,\n generateSourceMaps: true,\n platform: \"node\",\n chunksFolder: path.join(\"_deps\", \"node\"),\n externalPackagesAllowList: projectConfig.node.externalPackages,\n });\n if (verbose && entryPoints.node.length !== 0) {\n logMessage(\n \"Node.js runtime modules: \",\n nodeResult.modules.map((m) => m.path),\n );\n if (projectConfig.node.externalPackages.length > 0) {\n logMessage(\n \"Node.js runtime external dependencies (to be installed on the server): \",\n [...nodeResult.externalDependencies.entries()].map(\n (a) => `${a[0]}: ${a[1]}`,\n ),\n );\n }\n }\n const modules = convexResult.modules;\n modules.push(...nodeResult.modules);\n modules.push(...(await bundleAuthConfig(ctx, baseDir)));\n\n const nodeDependencies: NodeDependency[] = [];\n for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n nodeDependencies.push({ name: moduleName, version: moduleVersion });\n }\n\n const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n convexResult.bundledModuleNames.keys(),\n ).map((moduleName) => {\n return {\n name: moduleName,\n platform: \"convex\",\n };\n });\n bundledModuleInfos.push(\n ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n (moduleName): BundledModuleInfo => {\n return {\n name: moduleName,\n platform: \"node\",\n };\n },\n ),\n );\n\n return {\n config: {\n projectConfig: projectConfig,\n modules: modules,\n nodeDependencies: nodeDependencies,\n // We're just using the version this CLI is running with for now.\n // This could be different than the version of `convex` the app runs with\n // if the CLI is installed globally.\n udfServerVersion: version,\n nodeVersion: projectConfig.node.nodeVersion,\n },\n bundledModuleInfos,\n };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n): Promise<void> {\n const baseDir = functionsDir(configPath, projectConfig);\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n if (entryPoints.isolate.length === 0) {\n logFinishedStep(\"No non-'use node' modules found.\");\n }\n await debugIsolateBundlesSerially(ctx, {\n entryPoints: entryPoints.isolate,\n extraConditions: [],\n dir: baseDir,\n });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n ctx: Context,\n verbose: boolean,\n): Promise<{\n config: Config;\n configPath: string;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n const { config, bundledModuleInfos } = await configFromProjectConfig(\n ctx,\n projectConfig,\n configPath,\n verbose,\n );\n return { config, configPath, bundledModuleInfos };\n}\n\nexport async function upgradeOldAuthInfoToAuthConfig(\n ctx: Context,\n config: ProjectConfig,\n functionsPath: string,\n) {\n if (config.authInfo !== undefined) {\n const authConfigPathJS = path.resolve(functionsPath, \"auth.config.js\");\n const authConfigPathTS = path.resolve(functionsPath, \"auth.config.js\");\n const authConfigPath = ctx.fs.exists(authConfigPathJS)\n ? authConfigPathJS\n : authConfigPathTS;\n const authConfigRelativePath = path.join(\n config.functions,\n ctx.fs.exists(authConfigPathJS) ? \"auth.config.js\" : \"auth.config.ts\",\n );\n if (ctx.fs.exists(authConfigPath)) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage:\n `Cannot set auth config in both \\`${authConfigRelativePath}\\` and convex.json,` +\n ` remove it from convex.json`,\n });\n }\n if (config.authInfo.length > 0) {\n const providersStringLines = JSON.stringify(\n config.authInfo,\n null,\n 2,\n ).split(EOL);\n const indentedProvidersString = [providersStringLines[0]]\n .concat(providersStringLines.slice(1).map((line) => ` ${line}`))\n .join(EOL);\n ctx.fs.writeUtf8File(\n authConfigPath,\n `\\\n export default {\n providers: ${indentedProvidersString},\n };`,\n );\n logMessage(\n chalkStderr.yellowBright(\n `Moved auth config from config.json to \\`${authConfigRelativePath}\\``,\n ),\n );\n }\n delete config.authInfo;\n }\n return config;\n}\n\n/** Write the config to `convex.json` in the current working directory. */\nexport async function writeProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n { deleteIfAllDefault }: { deleteIfAllDefault: boolean } = {\n deleteIfAllDefault: false,\n },\n) {\n const configPath = await configFilepath(ctx);\n const strippedConfig = filterWriteableConfig(stripDefaults(projectConfig));\n if (Object.keys(strippedConfig).length > 0) {\n try {\n const contents = JSON.stringify(strippedConfig, undefined, 2) + \"\\n\";\n ctx.fs.writeUtf8File(configPath, contents, 0o644);\n } catch (err) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n printedMessage:\n `Error: Unable to write project config file \"${configPath}\" in current directory\\n` +\n \" Are you running this command from the root directory of a Convex project?\",\n });\n }\n } else if (deleteIfAllDefault && ctx.fs.exists(configPath)) {\n ctx.fs.unlink(configPath);\n logMessage(\n chalkStderr.yellowBright(\n `Deleted ${configPath} since it completely matched defaults`,\n ),\n );\n }\n ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n allowExisting: true,\n });\n}\n\nfunction stripDefaults(\n projectConfig: ProjectConfig,\n): DefaultsRemovedProjectConfig {\n const stripped: DefaultsRemovedProjectConfig = JSON.parse(\n JSON.stringify(projectConfig),\n );\n if (stripped.functions === DEFAULT_FUNCTIONS_PATH) {\n delete stripped.functions;\n }\n if (Array.isArray(stripped.authInfo) && stripped.authInfo.length === 0) {\n delete stripped.authInfo;\n }\n if (stripped.node!.externalPackages!.length === 0) {\n delete stripped.node!.externalPackages;\n }\n if (stripped.generateCommonJSApi === false) {\n delete stripped.generateCommonJSApi;\n }\n // Remove \"node\" field if it has nothing nested under it\n if (Object.keys(stripped!.node!).length === 0) {\n delete stripped.node;\n }\n if (stripped.codegen!.staticApi === false) {\n delete stripped.codegen!.staticApi;\n }\n if (stripped.codegen!.staticDataModel === false) {\n delete stripped.codegen!.staticDataModel;\n }\n\n // `\"fileType\"` and `\"legacyComponentApi\"` are optional and undefined by\n // default, and the behavior of undefined may change in the future for these\n // so we don't want to strip them.\n\n if (Object.keys(stripped.codegen!).length === 0) {\n delete stripped.codegen;\n }\n\n if (stripped.bundler?.includeSourcesContent === true) {\n delete stripped.bundler!.includeSourcesContent;\n }\n if (stripped.bundler && Object.keys(stripped.bundler).length === 0) {\n delete stripped.bundler;\n }\n\n return stripped;\n}\n\nfunction filterWriteableConfig(\n projectConfig: DefaultsRemovedProjectConfig,\n): DefaultsRemovedProjectConfig {\n const writeable: any = { ...projectConfig };\n delete writeable.project;\n delete writeable.team;\n delete writeable.prodUrl;\n return writeable;\n}\n\nexport function removedExistingConfig(\n ctx: Context,\n configPath: string,\n options: { allowExistingConfig?: boolean },\n) {\n if (!options.allowExistingConfig) {\n return false;\n }\n recursivelyDelete(ctx, configPath);\n logFinishedStep(`Removed existing ${configPath}`);\n return true;\n}\n\n/** Pull configuration from the given remote origin. */\nexport async function pullConfig(\n ctx: Context,\n project: string | undefined,\n team: string | undefined,\n origin: string,\n adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: origin,\n adminKey,\n });\n\n changeSpinner(\"Downloading current deployment state...\");\n try {\n const res = await fetch(\"/api/get_config_hashes\", {\n method: \"POST\",\n body: JSON.stringify({ version, adminKey }),\n });\n deprecationCheckWarning(ctx, res);\n const data = await res.json();\n const backendConfig = parseBackendConfig(data.config);\n const projectConfig = {\n ...backendConfig,\n node: {\n // This field is not stored in the backend, which is ok since it is also\n // not used to diff configs.\n externalPackages: [],\n nodeVersion: data.nodeVersion,\n },\n // This field is not stored in the backend, it only affects the client.\n generateCommonJSApi: false,\n // This field is also not stored in the backend, it only affects the client.\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n project,\n team,\n prodUrl: origin,\n };\n return {\n projectConfig,\n moduleHashes: data.moduleHashes,\n // TODO(presley): Add this to diffConfig().\n nodeDependencies: data.nodeDependencies,\n udfServerVersion: data.udfServerVersion,\n };\n } catch (err: unknown) {\n logFailure(`Error: Unable to pull deployment config from ${origin}`);\n return await logAndHandleFetchError(ctx, err);\n }\n}\n\ninterface BundledModuleInfo {\n name: string;\n platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n /** This path is relative to the app (root component) directory. */\n definitionPath: ComponentDefinitionPath;\n\n /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n dependencies: ComponentDefinitionPath[];\n\n // All other paths are relative to the directory of the definitionPath above.\n definition: Bundle;\n schema: Bundle;\n functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n ComponentDefinitionSpec,\n \"definitionPath\"\n> & {\n // Only app (root) component specs contain an auth bundle.\n auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n ComponentDefinitionSpec,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n AppDefinitionSpec,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n oldConfig: ConfigWithModuleHashes,\n newConfig: Config,\n): { diffString: string } {\n let diff = \"\";\n const droppedAuth = [];\n if (\n oldConfig.projectConfig.authInfo !== undefined &&\n newConfig.projectConfig.authInfo !== undefined\n ) {\n for (const oldAuth of oldConfig.projectConfig.authInfo) {\n let matches = false;\n for (const newAuth of newConfig.projectConfig.authInfo) {\n if (equal(oldAuth, newAuth)) {\n matches = true;\n break;\n }\n }\n if (!matches) {\n droppedAuth.push(oldAuth);\n }\n }\n if (droppedAuth.length > 0) {\n diff += \"Remove the following auth providers:\\n\";\n for (const authInfo of droppedAuth) {\n diff += \"[-] \" + JSON.stringify(authInfo) + \"\\n\";\n }\n }\n\n const addedAuth = [];\n for (const newAuth of newConfig.projectConfig.authInfo) {\n let matches = false;\n for (const oldAuth of oldConfig.projectConfig.authInfo) {\n if (equal(newAuth, oldAuth)) {\n matches = true;\n break;\n }\n }\n if (!matches) {\n addedAuth.push(newAuth);\n }\n }\n if (addedAuth.length > 0) {\n diff += \"Add the following auth providers:\\n\";\n for (const auth of addedAuth) {\n diff += \"[+] \" + JSON.stringify(auth) + \"\\n\";\n }\n }\n } else if (\n (oldConfig.projectConfig.authInfo !== undefined) !==\n (newConfig.projectConfig.authInfo !== undefined)\n ) {\n diff += \"Moved auth config into auth.config.ts\\n\";\n }\n\n let versionMessage = \"\";\n const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n }\n if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n }\n if (versionMessage) {\n diff += \"Change the server's function version:\\n\";\n diff += versionMessage;\n }\n\n if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n diff += \"Change the server's version for Node.js actions:\\n\";\n if (oldConfig.projectConfig.node.nodeVersion) {\n diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n }\n if (newConfig.nodeVersion) {\n diff += `[+] ${newConfig.nodeVersion}\\n`;\n }\n }\n\n return { diffString: diff };\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n ctx: Context,\n error: unknown,\n defaultMessage: string,\n deploymentName: string | null,\n deployment?: {\n deploymentUrl: string;\n adminKey: string;\n deploymentNotice: string;\n },\n): Promise<never> {\n const data: ErrorData | undefined =\n error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n const errorMessage = data.message || \"(no error message given)\";\n const [, variableName] =\n errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n // WORKOS_CLIENT_ID is a special environment variable because cloud Convex\n // deployments may be able to supply it by provisioning a fresh WorkOS\n // environment on demand.\n if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n // Initially only specific templates create WorkOS environments on demand\n // because the local environemnt variables are hardcoded for Vite and Next.js.\n const homepage = await currentPackageHomepage(ctx);\n const autoProvisionIfWorkOSTeamAssociated = !!(\n homepage &&\n [\n // FIXME: We don't want to rely on `homepage` from `package.json` for this\n // because it's brittle, and because AuthKit templates are now in get-convex/templates\n \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n ].includes(homepage)\n );\n // Initially only specific templates offer team creation.\n // Until this changes it can be done manually with a CLI command.\n const offerToAssociateWorkOSTeam = autoProvisionIfWorkOSTeamAssociated;\n // Initialy only specific template auto-configure WorkOS environments\n // with AuthKit config because these values are currently heuristics.\n // This will be some more explicit opt-in in the future.\n const autoConfigureAuthkitConfig = autoProvisionIfWorkOSTeamAssociated;\n\n const result = await ensureWorkosEnvironmentProvisioned(\n ctx,\n deploymentName,\n deployment,\n {\n offerToAssociateWorkOSTeam,\n autoProvisionIfWorkOSTeamAssociated,\n autoConfigureAuthkitConfig,\n },\n );\n if (result === \"ready\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"already handled\",\n printedMessage: null,\n });\n }\n // If user chose not to create a WorkOS team, continue to show the error\n // message below about missing WORKOS_CLIENT_ID with manual setup instructions\n }\n\n const envVarMessage =\n `Environment variable ${chalkStderr.bold(\n variableName,\n )} is used in auth config file but ` + `its value was not set.`;\n let setEnvVarInstructions =\n \"Go set it in the dashboard or using `npx convex env set`\";\n\n // If `npx convex dev` is running using --url there might not be a configured deployment\n if (deploymentName !== null) {\n const variableQuery =\n variableName !== undefined ? `?var=${variableName}` : \"\";\n const dashboardUrl = deploymentDashboardUrlPage(\n deploymentName,\n `/settings/environment-variables${variableQuery}`,\n );\n setEnvVarInstructions = `Go to:\\n\\n ${chalkStderr.bold(\n dashboardUrl,\n )}\\n\\n to set it up. `;\n }\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n errForSentry: error,\n printedMessage: envVarMessage + \"\\n\" + setEnvVarInstructions,\n });\n }\n\n if (data?.code === \"RaceDetected\") {\n // Environment variables or schema changed during push. This is a transient\n // error that should be retried immediately with exponential backoff.\n const message =\n data.message || \"Schema or environment variables changed during push\";\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: chalkStderr.yellow(message),\n });\n }\n\n if (data?.code === \"InternalServerError\") {\n if (deploymentName?.startsWith(\"local-\")) {\n printLocalDeploymentOnError();\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new LocalDeploymentError(\n \"InternalServerError while pushing to local deployment\",\n ),\n printedMessage: defaultMessage,\n });\n }\n }\n\n logFailure(defaultMessage);\n return await logAndHandleFetchError(ctx, error);\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_utils", "path", "matches", "equal"]
4
+ "sourcesContent": ["import { chalkStderr } from \"chalk\";\nimport path from \"path\";\nimport { z } from \"zod\";\nimport { Context } from \"../../bundler/context.js\";\nimport { TypescriptCompiler } from \"./typecheck.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logMessage,\n logWarning,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport {\n Bundle,\n BundleHash,\n bundle,\n bundleAuthConfig,\n entryPointsByEnvironment,\n} from \"../../bundler/index.js\";\nimport { version } from \"../version.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport {\n functionsDir,\n ErrorData,\n loadPackageJson,\n deploymentFetch,\n deprecationCheckWarning,\n logAndHandleFetchError,\n ThrowingFetchError,\n currentPackageHomepage,\n} from \"./utils/utils.js\";\nimport { recursivelyDelete } from \"./fsUtils.js\";\nimport { NodeDependency } from \"./deployApi/modules.js\";\nimport { ComponentDefinitionPath } from \"./components/definition/directoryStructure.js\";\nimport {\n LocalDeploymentError,\n printLocalDeploymentOnError,\n} from \"./localDeployment/errors.js\";\nimport { debugIsolateBundlesSerially } from \"../../bundler/debugBundle.js\";\nimport { DeploymentType } from \"./api.js\";\nexport { productionProvisionHost, provisionHost } from \"./utils/utils.js\";\n\n/** Type representing WorkOS AuthKit integration configuration. */\nexport interface AuthKitConfigureSettings {\n redirectUris?: string[];\n appHomepageUrl?: string;\n corsOrigins?: string[];\n}\n\nexport interface AuthKitEnvironmentConfig {\n environmentType?: \"development\" | \"staging\" | \"production\";\n configure?: false | AuthKitConfigureSettings;\n localEnvVars?: false | Record<string, string>;\n}\n\nexport interface AuthKitConfig {\n dev?: AuthKitEnvironmentConfig;\n preview?: AuthKitEnvironmentConfig;\n prod?: AuthKitEnvironmentConfig;\n}\n/**\n * convex.json file parsing notes\n *\n * - Unknown fields at the top level and in node and codegen are preserved\n * so that older CLI versions can deploy new projects (this functionality\n * will be removed in the future).\n * - convex.json does not allow comments, but this could change in the future.\n * Previously it contained automatically set values like productionUrl\n * but it's more like a config file now.\n */\n\n/** Type representing Convex project configuration. */\nexport interface ProjectConfig {\n functions: string;\n node: {\n externalPackages: string[];\n // nodeVersion has no default value, its presence/absence is meaningful\n nodeVersion?: string | undefined;\n };\n generateCommonJSApi: boolean;\n\n codegen: {\n staticApi: boolean;\n staticDataModel: boolean;\n legacyComponentApi?: boolean;\n fileType?: \"ts\" | \"js/dts\";\n };\n\n bundler?: {\n includeSourcesContent?: boolean;\n };\n\n typescriptCompiler?: TypescriptCompiler;\n\n // WorkOS AuthKit integration configuration\n authKit?: AuthKitConfig | undefined;\n}\n\nexport interface Config {\n projectConfig: ProjectConfig;\n modules: Bundle[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n nodeVersion?: string | undefined;\n}\n\nexport interface ConfigWithModuleHashes {\n projectConfig: ProjectConfig;\n moduleHashes: BundleHash[];\n nodeDependencies: NodeDependency[];\n schemaId?: string;\n udfServerVersion?: string;\n}\n\nconst DEFAULT_FUNCTIONS_PATH = \"convex/\";\n\n/** Whether .ts file extensions should be used for generated code (default is false). */\nexport function usesTypeScriptCodegen(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.fileType === \"ts\";\n}\n\n/** Whether the new component API import style should be used (default is false) */\nexport function usesComponentApiImports(projectConfig: ProjectConfig): boolean {\n return projectConfig.codegen.legacyComponentApi === false;\n}\n\n/**\n * Get the authKit configuration from convex.json.\n */\nexport async function getAuthKitConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n): Promise<AuthKitConfig | undefined> {\n // If there's an explicit authKit config, use it\n if (\"authKit\" in projectConfig) {\n return projectConfig.authKit;\n }\n\n // TODO remove this after a few versions\n // Migration help: is this one of the hardcoded templates that has special\n // behavior without a convex.json? Encourage them to upgrade the template.\n const homepage = await currentPackageHomepage(ctx);\n const isOldWorkOSTemplate = !!(\n homepage &&\n [\n \"https://github.com/workos/template-convex-nextjs-authkit/#readme\",\n \"https://github.com/workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com:workos/template-convex-react-vite-authkit/#readme\",\n \"https://github.com/workos/template-convex-tanstack-start-authkit/#readme\",\n ].includes(homepage)\n );\n\n if (isOldWorkOSTemplate) {\n logWarning(\n \"The template this project is based on has been updated to work with this version of Convex.\",\n );\n logWarning(\n \"Please copy the convex.json from the latest template version or add an 'authKit' section.\",\n );\n logMessage(\"Learn more at https://docs.convex.dev/auth/authkit\");\n }\n}\n\nexport async function getAuthKitEnvironmentConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n deploymentType: \"dev\" | \"preview\" | \"prod\",\n): Promise<AuthKitEnvironmentConfig | undefined> {\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n return authKitConfig?.[deploymentType];\n}\n\n/** Error parsing ProjectConfig representation. */\nclass ParseError extends Error {}\n\n// WorkOS AuthKit configuration schemas\nconst AuthKitConfigureSchema = z.union([\n z.literal(false),\n z.object({\n redirectUris: z.array(z.string()).optional(),\n appHomepageUrl: z.string().optional(),\n corsOrigins: z.array(z.string()).optional(),\n }),\n]);\n\nconst AuthKitLocalEnvVarsSchema = z.union([\n z.literal(false),\n z.record(z.string()),\n]);\n\nconst AuthKitEnvironmentConfigSchema = z.object({\n environmentType: z.enum([\"development\", \"staging\", \"production\"]).optional(),\n configure: AuthKitConfigureSchema.optional(),\n localEnvVars: AuthKitLocalEnvVarsSchema.optional(),\n});\n\nconst AuthKitConfigSchema = z\n .object({\n dev: AuthKitEnvironmentConfigSchema.optional(),\n preview: AuthKitEnvironmentConfigSchema.optional(),\n prod: AuthKitEnvironmentConfigSchema.optional(),\n })\n .refine(\n (data) => {\n // Validation: environmentType only allowed in prod\n const devEnvType = data.dev?.environmentType;\n const previewEnvType = data.preview?.environmentType;\n if (devEnvType || previewEnvType) {\n return false;\n }\n return true;\n },\n {\n message: \"authKit.environmentType is only allowed in the prod section\",\n path: [\"environmentType\"],\n },\n )\n .refine(\n (data) => {\n // Validation: localEnvVars only allowed for dev\n // Check preview doesn't have localEnvVars\n if (\n data.preview?.localEnvVars !== undefined &&\n data.preview?.localEnvVars !== false\n ) {\n return false;\n }\n // Check prod doesn't have localEnvVars\n if (\n data.prod?.localEnvVars !== undefined &&\n data.prod?.localEnvVars !== false\n ) {\n return false;\n }\n return true;\n },\n {\n message:\n \"authKit.localEnvVars is only supported for dev deployments. Preview and prod deployments must configure environment variables directly in the deployment platform.\",\n path: [\"localEnvVars\"],\n },\n );\n// Separate Node and Codegen schemas so we can parse these loose or strict\nconst NodeSchema = z.object({\n externalPackages: z\n .array(z.string())\n .default([])\n .describe(\n \"list of npm packages to install at deploy time instead of bundling. Packages with binaries should be added here.\",\n ),\n nodeVersion: z\n .string()\n .optional()\n .describe(\"The Node.js version to use for Node.js functions\"),\n});\n\nconst CodegenSchema = z.object({\n staticApi: z\n .boolean()\n .default(false)\n .describe(\n \"Use Convex function argument validators and return value validators to generate a typed API object\",\n ),\n staticDataModel: z.boolean().default(false),\n // These optional fields have no defaults - their presence/absence is meaningful\n legacyComponentApi: z.boolean().optional(),\n fileType: z.enum([\"ts\", \"js/dts\"]).optional(),\n});\n\nconst BundlerSchema = z.object({\n includeSourcesContent: z\n .boolean()\n .default(false)\n .describe(\n \"Whether to include original source code in source maps. Set to false to reduce bundle size.\",\n ),\n});\n\nconst refineToObject = <T extends z.ZodTypeAny>(schema: T) =>\n schema.refine((val) => val !== null && !Array.isArray(val), {\n message: \"Expected `convex.json` to contain an object\",\n });\n\n// Factory function to create schema with strict or passthrough behavior\nconst createProjectConfigSchema = (strict: boolean) => {\n const nodeSchema = strict ? NodeSchema.strict() : NodeSchema.passthrough();\n const codegenSchema = strict\n ? CodegenSchema.strict()\n : CodegenSchema.passthrough();\n const bundlerSchema = strict\n ? BundlerSchema.strict()\n : BundlerSchema.passthrough();\n\n const baseObject = z.object({\n functions: z\n .string()\n .default(DEFAULT_FUNCTIONS_PATH)\n .describe(\"Relative file path to the convex directory\"),\n node: nodeSchema.default({ externalPackages: [] }),\n codegen: codegenSchema.default({\n staticApi: false,\n staticDataModel: false,\n }),\n bundler: bundlerSchema.default({ includeSourcesContent: false }).optional(),\n generateCommonJSApi: z.boolean().default(false),\n typescriptCompiler: z\n .enum([\"tsc\", \"tsgo\"])\n .optional()\n .describe(\n \"TypeScript compiler to use for typechecking (`@typescript/native-preview` must be installed to use `tsgo`)\",\n ),\n\n // Optional $schema field for JSON schema validation in editors\n $schema: z.string().optional(),\n // WorkOS AuthKit integration configuration\n authKit: AuthKitConfigSchema.optional(),\n\n // Deprecated fields that have been deprecated for years, only here so we\n // know it's safe to delete them.\n project: z.string().optional(),\n team: z.string().optional(),\n prodUrl: z.string().optional(),\n });\n\n // Apply strict or passthrough BEFORE refine\n const withStrictness = strict\n ? baseObject.strict()\n : baseObject.passthrough();\n\n // Now apply the refinement\n return withStrictness.refine(\n (data) => {\n // Validate that generateCommonJSApi is not true when using TypeScript codegen\n if (data.generateCommonJSApi && data.codegen.fileType === \"ts\") {\n return false;\n }\n return true;\n },\n {\n message:\n 'Cannot use `generateCommonJSApi: true` with `codegen.fileType: \"ts\"`. ' +\n \"CommonJS modules require JavaScript generation. \" +\n 'Either set `codegen.fileType: \"js/dts\"` or remove `generateCommonJSApi`.',\n path: [\"generateCommonJSApi\"],\n },\n );\n};\n\n// Parse allowing extra fields (for forward compatibility)\nconst ProjectConfigSchema = refineToObject(createProjectConfigSchema(false));\n\n// Strict schema warn about extra keys\nconst ProjectConfigSchemaStrict = refineToObject(\n createProjectConfigSchema(true),\n);\n\nconst warnedUnknownKeys = new Set<string>();\nexport function resetUnknownKeyWarnings() {\n warnedUnknownKeys.clear();\n}\n\n/** Parse object to ProjectConfig. */\nexport async function parseProjectConfig(\n ctx: Context,\n obj: any,\n): Promise<ProjectConfig> {\n if (typeof obj !== \"object\" || obj === null || Array.isArray(obj)) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: \"Expected `convex.json` to contain an object\",\n });\n }\n\n try {\n // Try strict parse first to detect unknown keys\n return ProjectConfigSchemaStrict.parse(obj);\n } catch (error) {\n if (error instanceof z.ZodError) {\n // Check if all issues are unrecognized_keys issues\n const unknownKeyIssues = error.issues.filter(\n (issue) => issue.code === \"unrecognized_keys\",\n );\n\n if (\n unknownKeyIssues.length > 0 &&\n unknownKeyIssues.length === error.issues.length\n ) {\n // All errors are just unknown keys - warn about them\n for (const issue of unknownKeyIssues) {\n if (issue.code === \"unrecognized_keys\") {\n const pathPrefix =\n issue.path.length > 0 ? issue.path.join(\".\") + \".\" : \"\";\n const unknownKeys = issue.keys as string[];\n const newUnknownKeys = unknownKeys.filter(\n (key) => !warnedUnknownKeys.has(pathPrefix + key),\n );\n\n if (newUnknownKeys.length > 0) {\n const fullPath =\n issue.path.length > 0\n ? `\\`${issue.path.join(\".\")}\\``\n : \"`convex.json`\";\n logMessage(\n chalkStderr.yellow(\n `Warning: Unknown ${newUnknownKeys.length === 1 ? \"property\" : \"properties\"} in ${fullPath}: ${newUnknownKeys.map((k) => `\\`${k}\\``).join(\", \")}`,\n ),\n );\n logMessage(\n chalkStderr.gray(\n \" These properties will be preserved but are not recognized by this version of Convex.\",\n ),\n );\n\n // Track that we've warned about these keys\n newUnknownKeys.forEach((key) =>\n warnedUnknownKeys.add(pathPrefix + key),\n );\n }\n }\n }\n // Re-parse with passthrough schema to preserve unknown keys\n return ProjectConfigSchema.parse(obj);\n }\n\n // Handle validation errors we won't ignore\n if (error instanceof z.ZodError) {\n const issue = error.issues[0];\n const pathStr = issue.path.join(\".\");\n const message = pathStr\n ? `\\`${pathStr}\\` in \\`convex.json\\`: ${issue.message}`\n : `\\`convex.json\\`: ${issue.message}`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: (error as any).toString(),\n });\n }\n}\n\n// Parse a deployment config returned by the backend, picking out\n// the fields we care about.\nfunction parseBackendConfig(obj: any): {\n functions: string;\n nodeVersion?: string;\n} {\n function throwParseError(message: string) {\n // Unexpected error\n // eslint-disable-next-line no-restricted-syntax\n throw new ParseError(message);\n }\n if (typeof obj !== \"object\") {\n throwParseError(\"Expected an object\");\n }\n const { functions, nodeVersion } = obj;\n if (typeof functions !== \"string\") {\n throwParseError(\"Expected functions to be a string\");\n }\n\n if (typeof nodeVersion !== \"undefined\" && typeof nodeVersion !== \"string\") {\n throwParseError(\"Expected nodeVersion to be a string\");\n }\n\n return {\n functions,\n ...((nodeVersion ?? null) !== null ? { nodeVersion: nodeVersion } : {}),\n };\n}\n\nexport function configName(): string {\n return \"convex.json\";\n}\n\nexport async function configFilepath(ctx: Context): Promise<string> {\n const configFn = configName();\n // We used to allow src/convex.json, but no longer (as of 10/7/2022).\n // Leave an error message around to help people out. We can remove this\n // error message after a couple months.\n const preferredLocation = configFn;\n const wrongLocation = path.join(\"src\", configFn);\n\n // Allow either location, but not both.\n const preferredLocationExists = ctx.fs.exists(preferredLocation);\n const wrongLocationExists = ctx.fs.exists(wrongLocation);\n if (preferredLocationExists && wrongLocationExists) {\n const message = `${chalkStderr.red(`Error: both ${preferredLocation} and ${wrongLocation} files exist!`)}\\nConsolidate these and remove ${wrongLocation}.`;\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: message,\n });\n }\n if (!preferredLocationExists && wrongLocationExists) {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `Error: Please move ${wrongLocation} to the root of your project`,\n });\n }\n\n return preferredLocation;\n}\n\nexport async function getFunctionsDirectoryPath(ctx: Context): Promise<string> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n return functionsDir(configPath, projectConfig);\n}\n\n/** Read configuration from a local `convex.json` file. */\nexport async function readProjectConfig(ctx: Context): Promise<{\n projectConfig: ProjectConfig;\n configPath: string;\n}> {\n if (!ctx.fs.exists(\"convex.json\")) {\n // create-react-app bans imports from outside of src, so we can just\n // put the functions directory inside of src/ to work around this issue.\n const packages = await loadPackageJson(ctx);\n const isCreateReactApp = \"react-scripts\" in packages;\n return {\n projectConfig: {\n functions: isCreateReactApp\n ? `src/${DEFAULT_FUNCTIONS_PATH}`\n : DEFAULT_FUNCTIONS_PATH,\n node: {\n externalPackages: [],\n },\n generateCommonJSApi: false,\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n },\n configPath: configName(),\n };\n }\n let projectConfig;\n const configPath = await configFilepath(ctx);\n try {\n projectConfig = await parseProjectConfig(\n ctx,\n JSON.parse(ctx.fs.readUtf8File(configPath)),\n );\n } catch (err) {\n if (err instanceof ParseError || err instanceof SyntaxError) {\n logError(chalkStderr.red(`Error: Parsing \"${configPath}\" failed`));\n logMessage(chalkStderr.gray(err.toString()));\n } else {\n logFailure(\n `Error: Unable to read project config file \"${configPath}\"\\n` +\n \" Are you running this command from the root directory of a Convex project? If so, run `npx convex dev` first.\",\n );\n if (err instanceof Error) {\n logError(chalkStderr.red(err.message));\n }\n }\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n errForSentry: err,\n // TODO -- move the logging above in here\n printedMessage: null,\n });\n }\n return {\n projectConfig,\n configPath,\n };\n}\n\n/**\n * Given a {@link ProjectConfig}, add in the bundled modules to produce the\n * complete config.\n */\nexport async function configFromProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n verbose: boolean,\n): Promise<{\n config: Config;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const baseDir = functionsDir(configPath, projectConfig);\n // We bundle Node.js and Convex JS runtime functions entry points separately\n // since they execute on different platforms.\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n // es-build prints errors to console which would clobber our spinner.\n if (verbose) {\n showSpinner(\"Bundling modules for Convex's runtime...\");\n }\n const convexResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.isolate,\n generateSourceMaps: true,\n platform: \"browser\",\n });\n if (verbose) {\n logMessage(\n \"Convex's runtime modules: \",\n convexResult.modules.map((m) => m.path),\n );\n }\n\n // Bundle node modules.\n if (verbose && entryPoints.node.length !== 0) {\n showSpinner(\"Bundling modules for Node.js runtime...\");\n }\n const nodeResult = await bundle({\n ctx,\n dir: baseDir,\n entryPoints: entryPoints.node,\n generateSourceMaps: true,\n platform: \"node\",\n chunksFolder: path.join(\"_deps\", \"node\"),\n externalPackagesAllowList: projectConfig.node.externalPackages,\n });\n if (verbose && entryPoints.node.length !== 0) {\n logMessage(\n \"Node.js runtime modules: \",\n nodeResult.modules.map((m) => m.path),\n );\n if (projectConfig.node.externalPackages.length > 0) {\n logMessage(\n \"Node.js runtime external dependencies (to be installed on the server): \",\n [...nodeResult.externalDependencies.entries()].map(\n (a) => `${a[0]}: ${a[1]}`,\n ),\n );\n }\n }\n const modules = convexResult.modules;\n modules.push(...nodeResult.modules);\n modules.push(...(await bundleAuthConfig(ctx, baseDir)));\n\n const nodeDependencies: NodeDependency[] = [];\n for (const [moduleName, moduleVersion] of nodeResult.externalDependencies) {\n nodeDependencies.push({ name: moduleName, version: moduleVersion });\n }\n\n const bundledModuleInfos: BundledModuleInfo[] = Array.from(\n convexResult.bundledModuleNames.keys(),\n ).map((moduleName) => {\n return {\n name: moduleName,\n platform: \"convex\",\n };\n });\n bundledModuleInfos.push(\n ...Array.from(nodeResult.bundledModuleNames.keys()).map(\n (moduleName): BundledModuleInfo => {\n return {\n name: moduleName,\n platform: \"node\",\n };\n },\n ),\n );\n\n return {\n config: {\n projectConfig: projectConfig,\n modules: modules,\n nodeDependencies: nodeDependencies,\n // We're just using the version this CLI is running with for now.\n // This could be different than the version of `convex` the app runs with\n // if the CLI is installed globally.\n udfServerVersion: version,\n nodeVersion: projectConfig.node.nodeVersion,\n },\n bundledModuleInfos,\n };\n}\n\n/**\n * Bundle modules one by one for good bundler errors.\n */\nexport async function debugIsolateEndpointBundles(\n ctx: Context,\n projectConfig: ProjectConfig,\n configPath: string,\n): Promise<void> {\n const baseDir = functionsDir(configPath, projectConfig);\n const entryPoints = await entryPointsByEnvironment(ctx, baseDir);\n if (entryPoints.isolate.length === 0) {\n logFinishedStep(\"No non-'use node' modules found.\");\n }\n await debugIsolateBundlesSerially(ctx, {\n entryPoints: entryPoints.isolate,\n extraConditions: [],\n dir: baseDir,\n });\n}\n\n/**\n * Read the config from `convex.json` and bundle all the modules.\n */\nexport async function readConfig(\n ctx: Context,\n verbose: boolean,\n): Promise<{\n config: Config;\n configPath: string;\n bundledModuleInfos: BundledModuleInfo[];\n}> {\n const { projectConfig, configPath } = await readProjectConfig(ctx);\n const { config, bundledModuleInfos } = await configFromProjectConfig(\n ctx,\n projectConfig,\n configPath,\n verbose,\n );\n return { config, configPath, bundledModuleInfos };\n}\n\n/**\n * Ensure the functions directory exists.\n *\n * Note: This function no longer writes to or deletes `convex.json`. The config\n * file is now treated as user-owned and is not modified by the CLI. This allows\n * users to maintain their preferred formatting and any comments they may add\n * (if we later support JSONC parsing).\n */\nexport async function writeProjectConfig(\n ctx: Context,\n projectConfig: ProjectConfig,\n) {\n const configPath = await configFilepath(ctx);\n ctx.fs.mkdir(functionsDir(configPath, projectConfig), {\n allowExisting: true,\n });\n}\n\nexport function removedExistingConfig(\n ctx: Context,\n configPath: string,\n options: { allowExistingConfig?: boolean },\n) {\n if (!options.allowExistingConfig) {\n return false;\n }\n recursivelyDelete(ctx, configPath);\n logFinishedStep(`Removed existing ${configPath}`);\n return true;\n}\n\n/** Pull configuration from the given remote origin. */\nexport async function pullConfig(\n ctx: Context,\n project: string | undefined,\n team: string | undefined,\n origin: string,\n adminKey: string,\n): Promise<ConfigWithModuleHashes> {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: origin,\n adminKey,\n });\n\n changeSpinner(\"Downloading current deployment state...\");\n try {\n const res = await fetch(\"/api/get_config_hashes\", {\n method: \"POST\",\n body: JSON.stringify({ version, adminKey }),\n });\n deprecationCheckWarning(ctx, res);\n const data = await res.json();\n const backendConfig = parseBackendConfig(data.config);\n const projectConfig = {\n ...backendConfig,\n node: {\n // This field is not stored in the backend, which is ok since it is also\n // not used to diff configs.\n externalPackages: [],\n nodeVersion: data.nodeVersion,\n },\n // This field is not stored in the backend, it only affects the client.\n generateCommonJSApi: false,\n // This field is also not stored in the backend, it only affects the client.\n codegen: {\n staticApi: false,\n staticDataModel: false,\n },\n project,\n team,\n prodUrl: origin,\n };\n return {\n projectConfig,\n moduleHashes: data.moduleHashes,\n // TODO(presley): Add this to diffConfig().\n nodeDependencies: data.nodeDependencies,\n udfServerVersion: data.udfServerVersion,\n };\n } catch (err: unknown) {\n logFailure(`Error: Unable to pull deployment config from ${origin}`);\n return await logAndHandleFetchError(ctx, err);\n }\n}\n\ninterface BundledModuleInfo {\n name: string;\n platform: \"node\" | \"convex\";\n}\n\n/**\n * A component definition spec contains enough information to create bundles\n * of code that must be analyzed in order to construct a ComponentDefinition.\n *\n * Most paths are relative to the directory of the definitionPath.\n */\nexport type ComponentDefinitionSpec = {\n /** This path is relative to the app (root component) directory. */\n definitionPath: ComponentDefinitionPath;\n\n /** Dependencies are paths to the directory of the dependency component definition from the app (root component) directory */\n dependencies: ComponentDefinitionPath[];\n\n // All other paths are relative to the directory of the definitionPath above.\n definition: Bundle;\n schema: Bundle;\n functions: Bundle[];\n};\n\nexport type AppDefinitionSpec = Omit<\n ComponentDefinitionSpec,\n \"definitionPath\"\n> & {\n // Only app (root) component specs contain an auth bundle.\n auth: Bundle | null;\n};\n\nexport type ComponentDefinitionSpecWithoutImpls = Omit<\n ComponentDefinitionSpec,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionSpecWithoutImpls = Omit<\n AppDefinitionSpec,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\n/** Generate a human-readable diff between the two configs. */\nexport function diffConfig(\n oldConfig: ConfigWithModuleHashes,\n newConfig: Config,\n): { diffString: string } {\n let diff = \"\";\n\n let versionMessage = \"\";\n const matches = oldConfig.udfServerVersion === newConfig.udfServerVersion;\n if (oldConfig.udfServerVersion && (!newConfig.udfServerVersion || !matches)) {\n versionMessage += `[-] ${oldConfig.udfServerVersion}\\n`;\n }\n if (newConfig.udfServerVersion && (!oldConfig.udfServerVersion || !matches)) {\n versionMessage += `[+] ${newConfig.udfServerVersion}\\n`;\n }\n if (versionMessage) {\n diff += \"Change the server's function version:\\n\";\n diff += versionMessage;\n }\n\n if (oldConfig.projectConfig.node.nodeVersion !== newConfig.nodeVersion) {\n diff += \"Change the server's version for Node.js actions:\\n\";\n if (oldConfig.projectConfig.node.nodeVersion) {\n diff += `[-] ${oldConfig.projectConfig.node.nodeVersion}\\n`;\n }\n if (newConfig.nodeVersion) {\n diff += `[+] ${newConfig.nodeVersion}\\n`;\n }\n }\n\n return { diffString: diff };\n}\n\n/** Handle an error from\n * legacy push path:\n * - /api/push_config\n * modern push paths:\n * - /api/deploy2/evaluate_push\n * - /api/deploy2/start_push\n * - /api/deploy2/finish_push\n *\n * finish_push errors are different from start_push errors and in theory could\n * be handled differently, but starting over works for all of them.\n */\nexport async function handlePushConfigError(\n ctx: Context,\n error: unknown,\n defaultMessage: string,\n deploymentName: string | null,\n deployment:\n | {\n deploymentUrl: string;\n adminKey: string;\n deploymentNotice: string;\n }\n | undefined,\n _deploymentType: DeploymentType | undefined,\n): Promise<never> {\n const data: ErrorData | undefined =\n error instanceof ThrowingFetchError ? error.serverErrorData : undefined;\n if (data?.code === \"AuthConfigMissingEnvironmentVariable\") {\n const errorMessage = data.message || \"(no error message given)\";\n const [, variableName] =\n errorMessage.match(/Environment variable (\\S+)/i) ?? [];\n\n // DEPRECATED: This error path provisioning is being phased out in favor of\n // pre-flight provisioning that happens before the client bundle build.\n // We keep minimal logic here for backwards compatibility with older templates\n // that may still rely on this path.\n if (variableName === \"WORKOS_CLIENT_ID\" && deploymentName && deployment) {\n // For backwards compatibility with templates that haven't been updated,\n // we'll still show a helpful error message directing users to configure WorkOS.\n // But we no longer do automatic provisioning here since it happens too late\n // (after the client bundle has already been built with missing env vars).\n logWarning(\n \"WORKOS_CLIENT_ID is not set; you can set it manually on the deployment or for hosted Convex deployments, use auto-provisioning.\",\n );\n logMessage(\n \"Learn more at https://docs.convex.dev/auth/authkit/auto-provision\",\n );\n logMessage(\"\");\n }\n\n const envVarMessage =\n `Environment variable ${chalkStderr.bold(\n variableName,\n )} is used in auth config file but ` + `its value was not set.`;\n let setEnvVarInstructions =\n \"Go set it in the dashboard or using `npx convex env set`\";\n\n // If `npx convex dev` is running using --url there might not be a configured deployment\n if (deploymentName !== null) {\n const variableQuery =\n variableName !== undefined ? `?var=${variableName}` : \"\";\n const dashboardUrl = deploymentDashboardUrlPage(\n deploymentName,\n `/settings/environment-variables${variableQuery}`,\n );\n setEnvVarInstructions = `Go to:\\n\\n ${chalkStderr.bold(\n dashboardUrl,\n )}\\n\\n to set it up. `;\n }\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n errForSentry: error,\n printedMessage: envVarMessage + \"\\n\" + setEnvVarInstructions,\n });\n }\n\n if (data?.code === \"RaceDetected\") {\n // Environment variables or schema changed during push. This is a transient\n // error that should be retried immediately with exponential backoff.\n const message =\n data.message || \"Schema or environment variables changed during push\";\n return await ctx.crash({\n exitCode: 1,\n errorType: \"transient\",\n errForSentry: error,\n printedMessage: chalkStderr.yellow(message),\n });\n }\n\n if (data?.code === \"InternalServerError\") {\n if (deploymentName?.startsWith(\"local-\")) {\n printLocalDeploymentOnError();\n return ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n errForSentry: new LocalDeploymentError(\n \"InternalServerError while pushing to local deployment\",\n ),\n printedMessage: defaultMessage,\n });\n }\n }\n\n logFailure(defaultMessage);\n return await logAndHandleFetchError(ctx, error);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_utils", "path"]
7
7
  }
@@ -52,6 +52,7 @@ var import_run = require("./run.js");
52
52
  var import_config = require("./config.js");
53
53
  var import_dashboard = require("./dashboard.js");
54
54
  var import_indexes = require("./indexes.js");
55
+ var import_workos = require("./workos/workos.js");
55
56
  const brotli = (0, import_node_util.promisify)(import_node_zlib.default.brotliCompress);
56
57
  async function brotliCompress(ctx, data) {
57
58
  const start = performance.now();
@@ -89,8 +90,15 @@ async function evaluatePush(ctx, span, request, options) {
89
90
  return import_startPush.evaluatePushResponse.parse(response);
90
91
  }
91
92
  async function pushCode(ctx, span, request, options, endpoint) {
92
- const custom = (_k, s) => typeof s === "string" ? s.slice(0, 40) + (s.length > 40 ? "..." : "") : s;
93
- (0, import_log.logVerbose)(JSON.stringify(request, custom, 2));
93
+ const requestSummary = {
94
+ hasAppDefinition: request.appDefinition !== void 0,
95
+ appFunctionCount: request.appDefinition?.functions?.length ?? 0,
96
+ hasAppSchema: request.appDefinition?.schema !== null,
97
+ componentCount: request.componentDefinitions?.length ?? 0,
98
+ hasDependencies: request.nodeDependencies?.length > 0,
99
+ dryRun: request.dryRun
100
+ };
101
+ (0, import_log.logVerbose)(`Push request summary: ${JSON.stringify(requestSummary)}`);
94
102
  const onError = (err) => {
95
103
  if (err.toString() === "TypeError: fetch failed") {
96
104
  (0, import_log.changeSpinner)(`Fetch failed, is ${options.url} correct? Retrying...`);
@@ -122,7 +130,8 @@ async function pushCode(ctx, span, request, options, endpoint) {
122
130
  adminKey: request.adminKey,
123
131
  deploymentUrl: options.url,
124
132
  deploymentNotice: ""
125
- }
133
+ },
134
+ options.deploymentType
126
135
  );
127
136
  }
128
137
  }
@@ -264,7 +273,8 @@ async function finishPush(ctx, span, startPush2, options) {
264
273
  adminKey: options.adminKey,
265
274
  deploymentUrl: options.url,
266
275
  deploymentNotice: ""
267
- }
276
+ },
277
+ options.deploymentType
268
278
  );
269
279
  }
270
280
  }
@@ -290,6 +300,19 @@ async function reportPushCompleted(ctx, adminKey, url, reporter) {
290
300
  }
291
301
  async function deployToDeployment(ctx, credentials, options) {
292
302
  const { url, adminKey } = credentials;
303
+ const { projectConfig } = await (0, import_config.readProjectConfig)(ctx);
304
+ const authKitConfig = await (0, import_config.getAuthKitConfig)(ctx, projectConfig);
305
+ if (authKitConfig && credentials.deploymentName) {
306
+ const deploymentType = credentials.deploymentType;
307
+ if (deploymentType === "dev" || deploymentType === "preview" || deploymentType === "prod") {
308
+ await (0, import_workos.ensureAuthKitProvisionedBeforeBuild)(
309
+ ctx,
310
+ credentials.deploymentName,
311
+ { deploymentUrl: url, adminKey },
312
+ deploymentType
313
+ );
314
+ }
315
+ }
293
316
  await runCommand(ctx, { ...options, url, adminKey });
294
317
  const pushOptions = {
295
318
  deploymentName: credentials.deploymentName,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cli/lib/deploy2.ts"],
4
- "sourcesContent": ["import { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logVerbose,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport { spawnSync } from \"child_process\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\nimport {\n EvaluatePushResponse,\n evaluatePushResponse,\n schemaStatus,\n SchemaStatus,\n StartPushRequest,\n startPushResponse,\n StartPushResponse,\n} from \"./deployApi/startPush.js\";\nimport {\n AppDefinitionConfig,\n ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { chalkStderr } from \"chalk\";\nimport { finishPushDiff, FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { promisify } from \"node:util\";\nimport zlib from \"node:zlib\";\nimport { PushOptions } from \"./components.js\";\nimport { runPush } from \"./components.js\";\nimport { suggestedEnvVarName } from \"./envvars.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport { handlePushConfigError } from \"./config.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { addProgressLinkIfSlow } from \"./indexes.js\";\n\nconst brotli = promisify(zlib.brotliCompress);\n\nasync function brotliCompress(ctx: Context, data: string): Promise<Buffer> {\n const start = performance.now();\n const result = await brotli(data, {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n },\n });\n const end = performance.now();\n const duration = end - start;\n logVerbose(\n `Compressed ${(data.length / 1024).toFixed(2)}KiB to ${(result.length / 1024).toFixed(2)}KiB (${((result.length / data.length) * 100).toFixed(2)}%) in ${duration.toFixed(2)}ms`,\n );\n return result;\n}\n\n/** Push configuration2 to the given remote origin. */\nexport async function startPush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n },\n): Promise<StartPushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/start_push\",\n );\n return startPushResponse.parse(response);\n}\n\nexport async function evaluatePush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n },\n): Promise<EvaluatePushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/evaluate_push\",\n );\n return evaluatePushResponse.parse(response);\n}\n\nasync function pushCode(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n },\n endpoint: \"/api/deploy2/start_push\" | \"/api/deploy2/evaluate_push\",\n): Promise<unknown> {\n const custom = (_k: string | number, s: any) =>\n typeof s === \"string\" ? s.slice(0, 40) + (s.length > 40 ? \"...\" : \"\") : s;\n logVerbose(JSON.stringify(request, custom, 2));\n const onError = (err: any) => {\n if (err.toString() === \"TypeError: fetch failed\") {\n changeSpinner(`Fetch failed, is ${options.url} correct? Retrying...`);\n }\n };\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: request.adminKey,\n onError,\n });\n try {\n const response = await fetch(endpoint, {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return await response.json();\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to start push to \" + options.url,\n options.deploymentName,\n {\n adminKey: request.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n );\n }\n}\n\n// Long poll every 10s for progress on schema validation.\nconst SCHEMA_TIMEOUT_MS = 10_000;\n\nexport async function waitForSchema(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n deploymentName: string | null;\n },\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n\n const start = Date.now();\n changeSpinner(\"Pushing code to your Convex deployment...\");\n\n while (true) {\n let currentStatus: SchemaStatus;\n try {\n const response = await fetch(\"/api/deploy2/wait_for_schema\", {\n body: JSON.stringify({\n adminKey: options.adminKey,\n schemaChange: startPush.schemaChange,\n timeoutMs: SCHEMA_TIMEOUT_MS,\n dryRun: options.dryRun,\n }),\n method: \"POST\",\n headers: {\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n currentStatus = schemaStatus.parse(await response.json());\n } catch (error: unknown) {\n logFailure(\"Error: Unable to wait for schema from \" + options.url);\n return await logAndHandleFetchError(ctx, error);\n }\n switch (currentStatus.type) {\n case \"inProgress\": {\n let schemaDone = true;\n let indexesComplete = 0;\n let indexesTotal = 0;\n for (const componentStatus of Object.values(currentStatus.components)) {\n if (!componentStatus.schemaValidationComplete) {\n schemaDone = false;\n }\n indexesComplete += componentStatus.indexesComplete;\n indexesTotal += componentStatus.indexesTotal;\n }\n const indexesDone = indexesComplete === indexesTotal;\n let msg: string;\n if (!indexesDone && !schemaDone) {\n msg = addProgressLinkIfSlow(\n `Backfilling indexes (${indexesComplete}/${indexesTotal} ready) and checking that documents match your schema...`,\n options.deploymentName,\n start,\n );\n } else if (!indexesDone) {\n msg = `Backfilling indexes (${indexesComplete}/${indexesTotal} ready)...`;\n // Set a more specific message if the backfill is taking a long time\n if (Date.now() - start > 10_000) {\n const rootDiff = startPush.schemaChange.indexDiffs?.[\"\"];\n const indexName = (\n rootDiff?.added_indexes[0] || rootDiff?.enabled_indexes?.[0]\n )?.name;\n if (indexName) {\n const table = indexName.split(\".\")[0];\n const dashboardUrl = deploymentDashboardUrlPage(\n options.deploymentName,\n `/data?table=${table}&showIndexes=true`,\n );\n msg = `Backfilling index ${indexName} (${indexesComplete}/${indexesTotal} ready), see progress here: ${dashboardUrl}`;\n }\n }\n } else {\n msg = addProgressLinkIfSlow(\n \"Checking that documents match your schema...\",\n options.deploymentName,\n start,\n );\n }\n changeSpinner(msg);\n break;\n }\n case \"failed\": {\n // Schema validation failed. This could be either because the data\n // is bad or the schema is wrong. Classify this as a filesystem error\n // because adjusting `schema.ts` is the most normal next step.\n let msg = \"Schema validation failed\";\n if (currentStatus.componentPath) {\n msg += ` in component \"${currentStatus.componentPath}\"`;\n }\n msg += \".\";\n logFailure(msg);\n logError(chalkStderr.red(`${currentStatus.error}`));\n return await ctx.crash({\n exitCode: 1,\n errorType: {\n \"invalid filesystem or db data\": currentStatus.tableName\n ? {\n tableName: currentStatus.tableName,\n componentPath: currentStatus.componentPath,\n }\n : null,\n },\n printedMessage: null, // TODO - move logging into here\n });\n }\n case \"raceDetected\": {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Schema was overwritten by another push.`,\n });\n }\n case \"complete\": {\n changeSpinner(\"Schema validation complete.\");\n return;\n }\n }\n }\n}\n\nexport async function finishPush(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n verbose?: boolean;\n deploymentName: string | null;\n },\n): Promise<FinishPushDiff> {\n changeSpinner(\"Finalizing push...\");\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n const request = {\n adminKey: options.adminKey,\n startPush,\n dryRun: options.dryRun,\n };\n try {\n const response = await fetch(\"/api/deploy2/finish_push\", {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return finishPushDiff.parse(await response.json());\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to finish push to \" + options.url,\n options.deploymentName,\n {\n adminKey: options.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n );\n }\n}\n\nexport type ComponentDefinitionConfigWithoutImpls = Omit<\n ComponentDefinitionConfig,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionConfigWithoutImpls = Omit<\n AppDefinitionConfig,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\nexport async function reportPushCompleted(\n ctx: Context,\n adminKey: string,\n url: string,\n reporter: Reporter,\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: url,\n adminKey,\n });\n try {\n const response = await fetch(\"/api/deploy2/report_push_completed\", {\n body: JSON.stringify({\n adminKey,\n spans: reporter.spans,\n }),\n method: \"POST\",\n });\n await response.json();\n } catch (error: unknown) {\n logFailure(\n \"Error: Unable to report push completed to \" + url + \": \" + error,\n );\n }\n}\n\nexport async function deployToDeployment(\n ctx: Context,\n credentials: {\n url: string;\n adminKey: string;\n deploymentName: string | null;\n },\n options: {\n verbose?: boolean | undefined;\n dryRun?: boolean | undefined;\n yes?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n\n debugBundlePath?: string | undefined;\n debug?: boolean | undefined;\n writePushRequest?: string | undefined;\n liveComponentSources?: boolean | undefined;\n allowDeletingLargeIndexes: boolean;\n },\n) {\n const { url, adminKey } = credentials;\n await runCommand(ctx, { ...options, url, adminKey });\n\n const pushOptions: PushOptions = {\n deploymentName: credentials.deploymentName,\n adminKey,\n verbose: !!options.verbose,\n dryRun: !!options.dryRun,\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n debug: !!options.debug,\n debugBundlePath: options.debugBundlePath,\n debugNodeApis: false,\n codegen: options.codegen === \"enable\",\n url,\n writePushRequest: options.writePushRequest,\n liveComponentSources: !!options.liveComponentSources,\n largeIndexDeletionCheck: options.allowDeletingLargeIndexes\n ? \"has confirmation\"\n : \"ask for confirmation\",\n };\n showSpinner(`Deploying to ${url}...${options.dryRun ? \" [dry run]\" : \"\"}`);\n await runPush(ctx, pushOptions);\n logFinishedStep(\n `${\n options.dryRun ? \"Would have deployed\" : \"Deployed\"\n } Convex functions to ${url}`,\n );\n}\n\nexport async function runCommand(\n ctx: Context,\n options: {\n cmdUrlEnvVarName?: string | undefined;\n cmd?: string | undefined;\n dryRun?: boolean | undefined;\n url: string;\n adminKey: string;\n },\n) {\n if (options.cmd === undefined) {\n return;\n }\n\n const urlVar =\n options.cmdUrlEnvVarName ?? (await suggestedEnvVarName(ctx)).envVar;\n showSpinner(\n `Running '${options.cmd}' with environment variable \"${urlVar}\" set...${\n options.dryRun ? \" [dry run]\" : \"\"\n }`,\n );\n if (!options.dryRun) {\n const canonicalCloudUrl = await fetchDeploymentCanonicalCloudUrl(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n\n const env = { ...process.env };\n env[urlVar] = canonicalCloudUrl;\n const result = spawnSync(options.cmd, {\n env,\n stdio: \"inherit\",\n shell: true,\n });\n if (result.status !== 0) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `'${options.cmd}' failed`,\n });\n }\n }\n logFinishedStep(\n `${options.dryRun ? \"Would have run\" : \"Ran\"} \"${\n options.cmd\n }\" with environment variable \"${urlVar}\" set`,\n );\n}\n\nexport async function fetchDeploymentCanonicalCloudUrl(\n ctx: Context,\n options: { deploymentUrl: string; adminKey: string },\n): Promise<string> {\n const result = await runSystemQuery(ctx, {\n ...options,\n functionName: \"_system/cli/convexUrl:cloudUrl\",\n componentPath: undefined,\n args: {},\n });\n if (typeof result !== \"string\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n printedMessage: \"Invalid process.env.CONVEX_CLOUD_URL\",\n });\n }\n return result;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Context } from \"../../bundler/context.js\";\nimport {\n changeSpinner,\n logError,\n logFailure,\n logFinishedStep,\n logVerbose,\n showSpinner,\n} from \"../../bundler/log.js\";\nimport { spawnSync } from \"child_process\";\nimport { deploymentFetch, logAndHandleFetchError } from \"./utils/utils.js\";\nimport {\n EvaluatePushResponse,\n evaluatePushResponse,\n schemaStatus,\n SchemaStatus,\n StartPushRequest,\n startPushResponse,\n StartPushResponse,\n} from \"./deployApi/startPush.js\";\nimport {\n AppDefinitionConfig,\n ComponentDefinitionConfig,\n} from \"./deployApi/definitionConfig.js\";\nimport { chalkStderr } from \"chalk\";\nimport { finishPushDiff, FinishPushDiff } from \"./deployApi/finishPush.js\";\nimport { Reporter, Span } from \"./tracing.js\";\nimport { promisify } from \"node:util\";\nimport zlib from \"node:zlib\";\nimport { PushOptions } from \"./components.js\";\nimport { DeploymentType } from \"./api.js\";\nimport { runPush } from \"./components.js\";\nimport { suggestedEnvVarName } from \"./envvars.js\";\nimport { runSystemQuery } from \"./run.js\";\nimport {\n handlePushConfigError,\n readProjectConfig,\n getAuthKitConfig,\n} from \"./config.js\";\nimport { deploymentDashboardUrlPage } from \"./dashboard.js\";\nimport { addProgressLinkIfSlow } from \"./indexes.js\";\nimport { ensureAuthKitProvisionedBeforeBuild } from \"./workos/workos.js\";\n\nconst brotli = promisify(zlib.brotliCompress);\n\nasync function brotliCompress(ctx: Context, data: string): Promise<Buffer> {\n const start = performance.now();\n const result = await brotli(data, {\n params: {\n [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n },\n });\n const end = performance.now();\n const duration = end - start;\n logVerbose(\n `Compressed ${(data.length / 1024).toFixed(2)}KiB to ${(result.length / 1024).toFixed(2)}KiB (${((result.length / data.length) * 100).toFixed(2)}%) in ${duration.toFixed(2)}ms`,\n );\n return result;\n}\n\n/** Push configuration2 to the given remote origin. */\nexport async function startPush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<StartPushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/start_push\",\n );\n return startPushResponse.parse(response);\n}\n\nexport async function evaluatePush(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<EvaluatePushResponse> {\n const response = await pushCode(\n ctx,\n span,\n request,\n options,\n \"/api/deploy2/evaluate_push\",\n );\n return evaluatePushResponse.parse(response);\n}\n\nasync function pushCode(\n ctx: Context,\n span: Span,\n request: StartPushRequest,\n options: {\n url: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n endpoint: \"/api/deploy2/start_push\" | \"/api/deploy2/evaluate_push\",\n): Promise<unknown> {\n // Log a summary of the push request instead of the full object\n const requestSummary = {\n hasAppDefinition: request.appDefinition !== undefined,\n appFunctionCount: request.appDefinition?.functions?.length ?? 0,\n hasAppSchema: request.appDefinition?.schema !== null,\n componentCount: request.componentDefinitions?.length ?? 0,\n hasDependencies: request.nodeDependencies?.length > 0,\n dryRun: request.dryRun,\n };\n logVerbose(`Push request summary: ${JSON.stringify(requestSummary)}`);\n const onError = (err: any) => {\n if (err.toString() === \"TypeError: fetch failed\") {\n changeSpinner(`Fetch failed, is ${options.url} correct? Retrying...`);\n }\n };\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: request.adminKey,\n onError,\n });\n try {\n const response = await fetch(endpoint, {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return await response.json();\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to start push to \" + options.url,\n options.deploymentName,\n {\n adminKey: request.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n options.deploymentType,\n );\n }\n}\n\n// Long poll every 10s for progress on schema validation.\nconst SCHEMA_TIMEOUT_MS = 10_000;\n\nexport async function waitForSchema(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n deploymentName: string | null;\n },\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n\n const start = Date.now();\n changeSpinner(\"Pushing code to your Convex deployment...\");\n\n while (true) {\n let currentStatus: SchemaStatus;\n try {\n const response = await fetch(\"/api/deploy2/wait_for_schema\", {\n body: JSON.stringify({\n adminKey: options.adminKey,\n schemaChange: startPush.schemaChange,\n timeoutMs: SCHEMA_TIMEOUT_MS,\n dryRun: options.dryRun,\n }),\n method: \"POST\",\n headers: {\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n currentStatus = schemaStatus.parse(await response.json());\n } catch (error: unknown) {\n logFailure(\"Error: Unable to wait for schema from \" + options.url);\n return await logAndHandleFetchError(ctx, error);\n }\n switch (currentStatus.type) {\n case \"inProgress\": {\n let schemaDone = true;\n let indexesComplete = 0;\n let indexesTotal = 0;\n for (const componentStatus of Object.values(currentStatus.components)) {\n if (!componentStatus.schemaValidationComplete) {\n schemaDone = false;\n }\n indexesComplete += componentStatus.indexesComplete;\n indexesTotal += componentStatus.indexesTotal;\n }\n const indexesDone = indexesComplete === indexesTotal;\n let msg: string;\n if (!indexesDone && !schemaDone) {\n msg = addProgressLinkIfSlow(\n `Backfilling indexes (${indexesComplete}/${indexesTotal} ready) and checking that documents match your schema...`,\n options.deploymentName,\n start,\n );\n } else if (!indexesDone) {\n msg = `Backfilling indexes (${indexesComplete}/${indexesTotal} ready)...`;\n // Set a more specific message if the backfill is taking a long time\n if (Date.now() - start > 10_000) {\n const rootDiff = startPush.schemaChange.indexDiffs?.[\"\"];\n const indexName = (\n rootDiff?.added_indexes[0] || rootDiff?.enabled_indexes?.[0]\n )?.name;\n if (indexName) {\n const table = indexName.split(\".\")[0];\n const dashboardUrl = deploymentDashboardUrlPage(\n options.deploymentName,\n `/data?table=${table}&showIndexes=true`,\n );\n msg = `Backfilling index ${indexName} (${indexesComplete}/${indexesTotal} ready), see progress here: ${dashboardUrl}`;\n }\n }\n } else {\n msg = addProgressLinkIfSlow(\n \"Checking that documents match your schema...\",\n options.deploymentName,\n start,\n );\n }\n changeSpinner(msg);\n break;\n }\n case \"failed\": {\n // Schema validation failed. This could be either because the data\n // is bad or the schema is wrong. Classify this as a filesystem error\n // because adjusting `schema.ts` is the most normal next step.\n let msg = \"Schema validation failed\";\n if (currentStatus.componentPath) {\n msg += ` in component \"${currentStatus.componentPath}\"`;\n }\n msg += \".\";\n logFailure(msg);\n logError(chalkStderr.red(`${currentStatus.error}`));\n return await ctx.crash({\n exitCode: 1,\n errorType: {\n \"invalid filesystem or db data\": currentStatus.tableName\n ? {\n tableName: currentStatus.tableName,\n componentPath: currentStatus.componentPath,\n }\n : null,\n },\n printedMessage: null, // TODO - move logging into here\n });\n }\n case \"raceDetected\": {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"fatal\",\n printedMessage: `Schema was overwritten by another push.`,\n });\n }\n case \"complete\": {\n changeSpinner(\"Schema validation complete.\");\n return;\n }\n }\n }\n}\n\nexport async function finishPush(\n ctx: Context,\n span: Span,\n startPush: StartPushResponse,\n options: {\n adminKey: string;\n url: string;\n dryRun: boolean;\n verbose?: boolean;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n): Promise<FinishPushDiff> {\n changeSpinner(\"Finalizing push...\");\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n const request = {\n adminKey: options.adminKey,\n startPush,\n dryRun: options.dryRun,\n };\n try {\n const response = await fetch(\"/api/deploy2/finish_push\", {\n body: await brotliCompress(ctx, JSON.stringify(request)),\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Encoding\": \"br\",\n traceparent: span.encodeW3CTraceparent(),\n },\n });\n return finishPushDiff.parse(await response.json());\n } catch (error: unknown) {\n return await handlePushConfigError(\n ctx,\n error,\n \"Error: Unable to finish push to \" + options.url,\n options.deploymentName,\n {\n adminKey: options.adminKey,\n deploymentUrl: options.url,\n deploymentNotice: \"\",\n },\n options.deploymentType,\n );\n }\n}\n\nexport type ComponentDefinitionConfigWithoutImpls = Omit<\n ComponentDefinitionConfig,\n \"schema\" | \"functions\"\n>;\nexport type AppDefinitionConfigWithoutImpls = Omit<\n AppDefinitionConfig,\n \"schema\" | \"functions\" | \"auth\"\n>;\n\nexport async function reportPushCompleted(\n ctx: Context,\n adminKey: string,\n url: string,\n reporter: Reporter,\n) {\n const fetch = deploymentFetch(ctx, {\n deploymentUrl: url,\n adminKey,\n });\n try {\n const response = await fetch(\"/api/deploy2/report_push_completed\", {\n body: JSON.stringify({\n adminKey,\n spans: reporter.spans,\n }),\n method: \"POST\",\n });\n await response.json();\n } catch (error: unknown) {\n logFailure(\n \"Error: Unable to report push completed to \" + url + \": \" + error,\n );\n }\n}\n\nexport async function deployToDeployment(\n ctx: Context,\n credentials: {\n url: string;\n adminKey: string;\n deploymentName: string | null;\n deploymentType?: DeploymentType;\n },\n options: {\n verbose?: boolean | undefined;\n dryRun?: boolean | undefined;\n yes?: boolean | undefined;\n typecheck: \"enable\" | \"try\" | \"disable\";\n typecheckComponents: boolean;\n codegen: \"enable\" | \"disable\";\n cmd?: string | undefined;\n cmdUrlEnvVarName?: string | undefined;\n\n debugBundlePath?: string | undefined;\n debug?: boolean | undefined;\n writePushRequest?: string | undefined;\n liveComponentSources?: boolean | undefined;\n allowDeletingLargeIndexes: boolean;\n },\n) {\n const { url, adminKey } = credentials;\n\n // Pre-flight check: Ensure AuthKit is provisioned before building client bundle\n const { projectConfig } = await readProjectConfig(ctx);\n const authKitConfig = await getAuthKitConfig(ctx, projectConfig);\n\n if (authKitConfig && credentials.deploymentName) {\n // Only provision for cloud deployments (dev/preview/prod)\n // Skip for local and anonymous deployments\n const deploymentType = credentials.deploymentType;\n if (\n deploymentType === \"dev\" ||\n deploymentType === \"preview\" ||\n deploymentType === \"prod\"\n ) {\n await ensureAuthKitProvisionedBeforeBuild(\n ctx,\n credentials.deploymentName,\n { deploymentUrl: url, adminKey },\n deploymentType,\n );\n }\n }\n\n await runCommand(ctx, { ...options, url, adminKey });\n\n const pushOptions: PushOptions = {\n deploymentName: credentials.deploymentName,\n adminKey,\n verbose: !!options.verbose,\n dryRun: !!options.dryRun,\n typecheck: options.typecheck,\n typecheckComponents: options.typecheckComponents,\n debug: !!options.debug,\n debugBundlePath: options.debugBundlePath,\n debugNodeApis: false,\n codegen: options.codegen === \"enable\",\n url,\n writePushRequest: options.writePushRequest,\n liveComponentSources: !!options.liveComponentSources,\n largeIndexDeletionCheck: options.allowDeletingLargeIndexes\n ? \"has confirmation\"\n : \"ask for confirmation\",\n };\n showSpinner(`Deploying to ${url}...${options.dryRun ? \" [dry run]\" : \"\"}`);\n await runPush(ctx, pushOptions);\n logFinishedStep(\n `${\n options.dryRun ? \"Would have deployed\" : \"Deployed\"\n } Convex functions to ${url}`,\n );\n}\n\nexport async function runCommand(\n ctx: Context,\n options: {\n cmdUrlEnvVarName?: string | undefined;\n cmd?: string | undefined;\n dryRun?: boolean | undefined;\n url: string;\n adminKey: string;\n },\n) {\n if (options.cmd === undefined) {\n return;\n }\n\n const urlVar =\n options.cmdUrlEnvVarName ?? (await suggestedEnvVarName(ctx)).envVar;\n showSpinner(\n `Running '${options.cmd}' with environment variable \"${urlVar}\" set...${\n options.dryRun ? \" [dry run]\" : \"\"\n }`,\n );\n if (!options.dryRun) {\n const canonicalCloudUrl = await fetchDeploymentCanonicalCloudUrl(ctx, {\n deploymentUrl: options.url,\n adminKey: options.adminKey,\n });\n\n const env = { ...process.env };\n env[urlVar] = canonicalCloudUrl;\n const result = spawnSync(options.cmd, {\n env,\n stdio: \"inherit\",\n shell: true,\n });\n if (result.status !== 0) {\n await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem data\",\n printedMessage: `'${options.cmd}' failed`,\n });\n }\n }\n logFinishedStep(\n `${options.dryRun ? \"Would have run\" : \"Ran\"} \"${\n options.cmd\n }\" with environment variable \"${urlVar}\" set`,\n );\n}\n\nexport async function fetchDeploymentCanonicalCloudUrl(\n ctx: Context,\n options: { deploymentUrl: string; adminKey: string },\n): Promise<string> {\n const result = await runSystemQuery(ctx, {\n ...options,\n functionName: \"_system/cli/convexUrl:cloudUrl\",\n componentPath: undefined,\n args: {},\n });\n if (typeof result !== \"string\") {\n return await ctx.crash({\n exitCode: 1,\n errorType: \"invalid filesystem or env vars\",\n printedMessage: \"Invalid process.env.CONVEX_CLOUD_URL\",\n });\n }\n return result;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_components", "zlib", "startPush"]
7
7
  }
@@ -39,7 +39,6 @@ __export(deploymentSelection_exports, {
39
39
  module.exports = __toCommonJS(deploymentSelection_exports);
40
40
  var import_log = require("../../bundler/log.js");
41
41
  var import_api = require("./api.js");
42
- var import_config = require("./config.js");
43
42
  var import_deployment = require("./deployment.js");
44
43
  var import_envvars = require("./envvars.js");
45
44
  var import_globalConfig = require("./utils/globalConfig.js");
@@ -261,17 +260,6 @@ async function _getDeploymentSelection(ctx, cliArgs) {
261
260
  if (result.kind !== "unknown") {
262
261
  return result.metadata;
263
262
  }
264
- const { projectConfig } = await (0, import_config.readProjectConfig)(ctx);
265
- if (projectConfig.team !== void 0 && projectConfig.project !== void 0) {
266
- return {
267
- kind: "deploymentWithinProject",
268
- targetProject: {
269
- kind: "teamAndProjectSlugs",
270
- teamSlug: projectConfig.team,
271
- projectSlug: projectConfig.project
272
- }
273
- };
274
- }
275
263
  const isLoggedIn = ctx.bigBrainAuth() !== null;
276
264
  if ((!isLoggedIn || process.env.CONVEX_AGENT_MODE === "anonymous") && shouldAllowAnonymousDevelopment()) {
277
265
  return {