@zuplo/cli 6.69.3 → 6.69.4

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 (69) hide show
  1. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts +2 -0
  2. package/dist/__tests__/integration/confirm-linked-config.integration.test.d.ts.map +1 -0
  3. package/dist/__tests__/integration/confirm-linked-config.integration.test.js +202 -0
  4. package/dist/__tests__/integration/confirm-linked-config.integration.test.js.map +1 -0
  5. package/dist/__tests__/integration/info.integration.test.js +49 -2
  6. package/dist/__tests__/integration/info.integration.test.js.map +1 -1
  7. package/dist/__tests__/integration/linked-config-cascade.integration.test.js +36 -0
  8. package/dist/__tests__/integration/linked-config-cascade.integration.test.js.map +1 -1
  9. package/dist/cmds/delete.d.ts.map +1 -1
  10. package/dist/cmds/delete.js +2 -0
  11. package/dist/cmds/delete.js.map +1 -1
  12. package/dist/cmds/deploy.d.ts.map +1 -1
  13. package/dist/cmds/deploy.js +2 -0
  14. package/dist/cmds/deploy.js.map +1 -1
  15. package/dist/cmds/link.d.ts.map +1 -1
  16. package/dist/cmds/link.js +2 -0
  17. package/dist/cmds/link.js.map +1 -1
  18. package/dist/cmds/list.d.ts.map +1 -1
  19. package/dist/cmds/list.js +2 -0
  20. package/dist/cmds/list.js.map +1 -1
  21. package/dist/cmds/mtls-certificates/create.d.ts.map +1 -1
  22. package/dist/cmds/mtls-certificates/create.js +2 -0
  23. package/dist/cmds/mtls-certificates/create.js.map +1 -1
  24. package/dist/cmds/mtls-certificates/delete.d.ts.map +1 -1
  25. package/dist/cmds/mtls-certificates/delete.js +2 -0
  26. package/dist/cmds/mtls-certificates/delete.js.map +1 -1
  27. package/dist/cmds/mtls-certificates/describe.d.ts.map +1 -1
  28. package/dist/cmds/mtls-certificates/describe.js +2 -0
  29. package/dist/cmds/mtls-certificates/describe.js.map +1 -1
  30. package/dist/cmds/mtls-certificates/disable.d.ts.map +1 -1
  31. package/dist/cmds/mtls-certificates/disable.js +2 -0
  32. package/dist/cmds/mtls-certificates/disable.js.map +1 -1
  33. package/dist/cmds/mtls-certificates/list.d.ts.map +1 -1
  34. package/dist/cmds/mtls-certificates/list.js +2 -0
  35. package/dist/cmds/mtls-certificates/list.js.map +1 -1
  36. package/dist/cmds/mtls-certificates/update.d.ts.map +1 -1
  37. package/dist/cmds/mtls-certificates/update.js +2 -0
  38. package/dist/cmds/mtls-certificates/update.js.map +1 -1
  39. package/dist/cmds/variable/create.d.ts.map +1 -1
  40. package/dist/cmds/variable/create.js +2 -0
  41. package/dist/cmds/variable/create.js.map +1 -1
  42. package/dist/cmds/variable/update.d.ts.map +1 -1
  43. package/dist/cmds/variable/update.js +2 -0
  44. package/dist/cmds/variable/update.js.map +1 -1
  45. package/dist/common/middleware/confirm-linked-config.d.ts +4 -0
  46. package/dist/common/middleware/confirm-linked-config.d.ts.map +1 -0
  47. package/dist/common/middleware/confirm-linked-config.js +30 -0
  48. package/dist/common/middleware/confirm-linked-config.js.map +1 -0
  49. package/dist/common/utils/format-environment-type.d.ts +2 -0
  50. package/dist/common/utils/format-environment-type.d.ts.map +1 -0
  51. package/dist/common/utils/format-environment-type.js +12 -0
  52. package/dist/common/utils/format-environment-type.js.map +1 -0
  53. package/dist/common/utils/format-environment-type.test.d.ts +2 -0
  54. package/dist/common/utils/format-environment-type.test.d.ts.map +1 -0
  55. package/dist/common/utils/format-environment-type.test.js +32 -0
  56. package/dist/common/utils/format-environment-type.test.js.map +1 -0
  57. package/dist/common/utils/pretty-print-environment-prompt.d.ts.map +1 -1
  58. package/dist/common/utils/pretty-print-environment-prompt.js +7 -10
  59. package/dist/common/utils/pretty-print-environment-prompt.js.map +1 -1
  60. package/dist/project/info/handler.d.ts.map +1 -1
  61. package/dist/project/info/handler.js +5 -1
  62. package/dist/project/info/handler.js.map +1 -1
  63. package/dist/tsconfig.tsbuildinfo +1 -1
  64. package/node_modules/@zuplo/core/package.json +1 -1
  65. package/node_modules/@zuplo/graphql/package.json +1 -1
  66. package/node_modules/@zuplo/openapi-tools/package.json +1 -1
  67. package/node_modules/@zuplo/otel/package.json +1 -1
  68. package/node_modules/@zuplo/runtime/package.json +1 -1
  69. package/package.json +6 -6
@@ -0,0 +1,12 @@
1
+ export function formatEnvironmentTypeLabel(envType) {
2
+ const normalized = envType.trim().toLowerCase();
3
+ switch (normalized) {
4
+ case "working-copy":
5
+ case "working_copy":
6
+ case "development":
7
+ return "working-copy";
8
+ default:
9
+ return normalized;
10
+ }
11
+ }
12
+ //# sourceMappingURL=format-environment-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-environment-type.js","sourceRoot":"","sources":["../../../src/common/utils/format-environment-type.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,aAAa;YAChB,OAAO,cAAc,CAAC;QACxB;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC","sourcesContent":["/**\n * Maps a raw environment type string (as written to .env.zuplo or returned by\n * the API) to the user-facing label shown in CLI output.\n *\n * The tenant API emits \"development\" for working-copy environments, but users\n * have no environment type called \"development\" — everything maps to\n * working-copy. This helper centralizes that mapping so every CLI display site\n * stays in sync.\n */\nexport function formatEnvironmentTypeLabel(envType: string): string {\n const normalized = envType.trim().toLowerCase();\n switch (normalized) {\n case \"working-copy\":\n case \"working_copy\":\n case \"development\":\n return \"working-copy\";\n default:\n return normalized;\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=format-environment-type.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-environment-type.test.d.ts","sourceRoot":"","sources":["../../../src/common/utils/format-environment-type.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "node:test";
3
+ import { formatEnvironmentTypeLabel } from "./format-environment-type.js";
4
+ describe("formatEnvironmentTypeLabel", () => {
5
+ it("returns 'production' unchanged", () => {
6
+ assert.strictEqual(formatEnvironmentTypeLabel("production"), "production");
7
+ });
8
+ it("returns 'preview' unchanged", () => {
9
+ assert.strictEqual(formatEnvironmentTypeLabel("preview"), "preview");
10
+ });
11
+ it("maps 'development' to 'working-copy'", () => {
12
+ assert.strictEqual(formatEnvironmentTypeLabel("development"), "working-copy");
13
+ });
14
+ it("maps 'working_copy' to 'working-copy'", () => {
15
+ assert.strictEqual(formatEnvironmentTypeLabel("working_copy"), "working-copy");
16
+ });
17
+ it("maps 'working-copy' to 'working-copy'", () => {
18
+ assert.strictEqual(formatEnvironmentTypeLabel("working-copy"), "working-copy");
19
+ });
20
+ it("lowercases the input", () => {
21
+ assert.strictEqual(formatEnvironmentTypeLabel("PRODUCTION"), "production");
22
+ assert.strictEqual(formatEnvironmentTypeLabel("Development"), "working-copy");
23
+ });
24
+ it("passes unknown types through (lowercased)", () => {
25
+ assert.strictEqual(formatEnvironmentTypeLabel("Some-Future-Type"), "some-future-type");
26
+ });
27
+ it("trims surrounding whitespace before matching", () => {
28
+ assert.strictEqual(formatEnvironmentTypeLabel(" development "), "working-copy");
29
+ assert.strictEqual(formatEnvironmentTypeLabel("\tproduction\n"), "production");
30
+ });
31
+ });
32
+ //# sourceMappingURL=format-environment-type.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-environment-type.test.js","sourceRoot":"","sources":["../../../src/common/utils/format-environment-type.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,WAAW,CAChB,0BAA0B,CAAC,aAAa,CAAC,EACzC,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,WAAW,CAChB,0BAA0B,CAAC,cAAc,CAAC,EAC1C,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,WAAW,CAChB,0BAA0B,CAAC,cAAc,CAAC,EAC1C,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,WAAW,CAAC,0BAA0B,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;QAC3E,MAAM,CAAC,WAAW,CAChB,0BAA0B,CAAC,aAAa,CAAC,EACzC,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,WAAW,CAChB,0BAA0B,CAAC,kBAAkB,CAAC,EAC9C,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,WAAW,CAChB,0BAA0B,CAAC,iBAAiB,CAAC,EAC7C,cAAc,CACf,CAAC;QACF,MAAM,CAAC,WAAW,CAChB,0BAA0B,CAAC,gBAAgB,CAAC,EAC5C,YAAY,CACb,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import assert from \"node:assert\";\nimport { describe, it } from \"node:test\";\nimport { formatEnvironmentTypeLabel } from \"./format-environment-type.js\";\n\ndescribe(\"formatEnvironmentTypeLabel\", () => {\n it(\"returns 'production' unchanged\", () => {\n assert.strictEqual(formatEnvironmentTypeLabel(\"production\"), \"production\");\n });\n\n it(\"returns 'preview' unchanged\", () => {\n assert.strictEqual(formatEnvironmentTypeLabel(\"preview\"), \"preview\");\n });\n\n it(\"maps 'development' to 'working-copy'\", () => {\n assert.strictEqual(\n formatEnvironmentTypeLabel(\"development\"),\n \"working-copy\"\n );\n });\n\n it(\"maps 'working_copy' to 'working-copy'\", () => {\n assert.strictEqual(\n formatEnvironmentTypeLabel(\"working_copy\"),\n \"working-copy\"\n );\n });\n\n it(\"maps 'working-copy' to 'working-copy'\", () => {\n assert.strictEqual(\n formatEnvironmentTypeLabel(\"working-copy\"),\n \"working-copy\"\n );\n });\n\n it(\"lowercases the input\", () => {\n assert.strictEqual(formatEnvironmentTypeLabel(\"PRODUCTION\"), \"production\");\n assert.strictEqual(\n formatEnvironmentTypeLabel(\"Development\"),\n \"working-copy\"\n );\n });\n\n it(\"passes unknown types through (lowercased)\", () => {\n assert.strictEqual(\n formatEnvironmentTypeLabel(\"Some-Future-Type\"),\n \"some-future-type\"\n );\n });\n\n it(\"trims surrounding whitespace before matching\", () => {\n assert.strictEqual(\n formatEnvironmentTypeLabel(\" development \"),\n \"working-copy\"\n );\n assert.strictEqual(\n formatEnvironmentTypeLabel(\"\\tproduction\\n\"),\n \"production\"\n );\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"pretty-print-environment-prompt.d.ts","sourceRoot":"","sources":["../../../src/common/utils/pretty-print-environment-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,WAAW,EAChB,4BAA4B,EAAE,OAAO,UAiBtC"}
1
+ {"version":3,"file":"pretty-print-environment-prompt.d.ts","sourceRoot":"","sources":["../../../src/common/utils/pretty-print-environment-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,WAAW,EAChB,4BAA4B,EAAE,OAAO,UAatC"}
@@ -1,16 +1,13 @@
1
+ import { formatEnvironmentTypeLabel } from "./format-environment-type.js";
1
2
  export function prettyPrintEnvironmentPrompt(env, hasSingleDevelopmentInstance) {
2
- const environmentType = env.environmentType.toLowerCase();
3
+ const environmentType = formatEnvironmentTypeLabel(env.environmentType);
3
4
  const branchName = env.branchName;
4
5
  const name = env.name;
5
- switch (environmentType) {
6
- case "working-copy":
7
- case "working_copy":
8
- case "development": {
9
- const displayName = hasSingleDevelopmentInstance
10
- ? "Default for local development"
11
- : name;
12
- return `${displayName} (working-copy)`;
13
- }
6
+ if (environmentType === "working-copy") {
7
+ const displayName = hasSingleDevelopmentInstance
8
+ ? "Default for local development"
9
+ : name;
10
+ return `${displayName} (working-copy)`;
14
11
  }
15
12
  return `${name} (${environmentType}, ${branchName})`;
16
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pretty-print-environment-prompt.js","sourceRoot":"","sources":["../../../src/common/utils/pretty-print-environment-prompt.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,4BAA4B,CAC1C,GAAgB,EAChB,4BAAqC;IAErC,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAEtB,QAAQ,eAAe,EAAE,CAAC;QACxB,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,WAAW,GAAG,4BAA4B;gBAC9C,CAAC,CAAC,+BAA+B;gBACjC,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,GAAG,WAAW,iBAAiB,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,eAAe,KAAK,UAAU,GAAG,CAAC;AACvD,CAAC","sourcesContent":["import { Environment } from \"../api/lib.js\";\n\nexport function prettyPrintEnvironmentPrompt(\n env: Environment,\n hasSingleDevelopmentInstance: boolean\n) {\n const environmentType = env.environmentType.toLowerCase();\n const branchName = env.branchName;\n const name = env.name;\n\n switch (environmentType) {\n case \"working-copy\":\n case \"working_copy\":\n case \"development\": {\n const displayName = hasSingleDevelopmentInstance\n ? \"Default for local development\"\n : name;\n return `${displayName} (working-copy)`;\n }\n }\n return `${name} (${environmentType}, ${branchName})`;\n}\n"]}
1
+ {"version":3,"file":"pretty-print-environment-prompt.js","sourceRoot":"","sources":["../../../src/common/utils/pretty-print-environment-prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,UAAU,4BAA4B,CAC1C,GAAgB,EAChB,4BAAqC;IAErC,MAAM,eAAe,GAAG,0BAA0B,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAEtB,IAAI,eAAe,KAAK,cAAc,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,4BAA4B;YAC9C,CAAC,CAAC,+BAA+B;YACjC,CAAC,CAAC,IAAI,CAAC;QACT,OAAO,GAAG,WAAW,iBAAiB,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,IAAI,KAAK,eAAe,KAAK,UAAU,GAAG,CAAC;AACvD,CAAC","sourcesContent":["import { Environment } from \"../api/lib.js\";\nimport { formatEnvironmentTypeLabel } from \"./format-environment-type.js\";\n\nexport function prettyPrintEnvironmentPrompt(\n env: Environment,\n hasSingleDevelopmentInstance: boolean\n) {\n const environmentType = formatEnvironmentTypeLabel(env.environmentType);\n const branchName = env.branchName;\n const name = env.name;\n\n if (environmentType === \"working-copy\") {\n const displayName = hasSingleDevelopmentInstance\n ? \"Default for local development\"\n : name;\n return `${displayName} (working-copy)`;\n }\n return `${name} (${environmentType}, ${branchName})`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/project/info/handler.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,iBAyIzC"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/project/info/handler.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,iBA8IzC"}
@@ -2,6 +2,7 @@ import { logger } from "../../common/logger.js";
2
2
  import { printCriticalFailureToConsoleAndExit, printResultToConsoleAndExitGracefully, printWarningToConsole, textOrJson, } from "../../common/output.js";
3
3
  import { readLinkedConfig } from "../../common/read-linked-config.js";
4
4
  import settings from "../../common/settings.js";
5
+ import { formatEnvironmentTypeLabel } from "../../common/utils/format-environment-type.js";
5
6
  const PORTAL_BASE_URL = "https://portal.zuplo.com";
6
7
  export async function info(argv) {
7
8
  const lines = [];
@@ -86,7 +87,10 @@ export async function info(argv) {
86
87
  lines.push(`Account: ${account}`);
87
88
  lines.push(`Portal: ${PORTAL_BASE_URL}/${account}/${project}`);
88
89
  if (linked.environmentType) {
89
- lines.push(`Environment Type: ${linked.environmentType}`);
90
+ const environmentTypeLabel = formatEnvironmentTypeLabel(linked.environmentType);
91
+ if (environmentTypeLabel) {
92
+ lines.push(`Environment Type: ${environmentTypeLabel}`);
93
+ }
90
94
  }
91
95
  const projectNotFound = !fetchFailed && response?.ok === true && !projectData;
92
96
  if (!fetchFailed && !projectNotFound) {
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/project/info/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printResultToConsoleAndExitGracefully,\n printWarningToConsole,\n textOrJson,\n} from \"../../common/output.js\";\nimport { readLinkedConfig } from \"../../common/read-linked-config.js\";\nimport settings from \"../../common/settings.js\";\n\nconst PORTAL_BASE_URL = \"https://portal.zuplo.com\";\n\nexport interface Arguments extends Record<string, unknown> {\n authToken: string;\n \"api-key\"?: string;\n dir?: string;\n}\n\ninterface ProjectListItem {\n name: string;\n sourceRepoUrl: string | null;\n sourceControlProvider: string;\n}\n\nexport async function info(argv: Arguments) {\n const lines: string[] = [];\n\n // 1. Read linked config from .env.zuplo\n const linked = await readLinkedConfig(argv);\n\n // If no linked project, show guidance and exit\n if (!linked.accountName || !linked.projectName) {\n lines.push(\"No project linked. Run `zuplo link` to connect a project.\");\n await printResultToConsoleAndExitGracefully(lines.join(\"\\n\"));\n return;\n }\n\n const account = linked.accountName;\n const project = linked.projectName;\n\n // 2. Fetch project details from the projects list API for source control info\n let projectData: ProjectListItem | undefined;\n let fetchFailed = false;\n let response: Response | undefined;\n try {\n const projectsUrl = new URL(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/projects`\n );\n projectsUrl.searchParams.set(\"accountName\", account);\n response = await fetch(projectsUrl, {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n } catch (error) {\n logger.debug(error, \"Failed to fetch project details\");\n fetchFailed = true;\n }\n\n if (response?.status === 401) {\n let body = \"<unavailable>\";\n try {\n body = await response.text();\n } catch (error) {\n logger.debug(error, \"Failed to read response body\");\n }\n logger.debug(\n {\n status: response.status,\n statusText: response.statusText,\n response: textOrJson(body),\n },\n \"Failed to fetch project details\"\n );\n const message = argv[\"api-key\"]\n ? \"The provided --api-key was rejected. Check that it is valid and not expired, or run `zuplo login` to authenticate interactively.\"\n : \"Your saved credentials were rejected. They may be expired — run `zuplo login` to re-authenticate, or pass a valid --api-key.\";\n await printCriticalFailureToConsoleAndExit(message);\n return;\n }\n\n if (response?.ok) {\n try {\n const body = (await response.json()) as {\n data?: ProjectListItem[];\n };\n if (!Array.isArray(body.data)) {\n throw new Error(\"Projects API response did not include a data array\");\n }\n logger.debug(\n { projects: body.data, linkedProject: project },\n \"Projects API response\"\n );\n projectData = body.data.find((p) => p.name === project);\n } catch (error) {\n logger.debug(error, \"Failed to parse project details response\");\n fetchFailed = true;\n }\n } else if (response) {\n let body = \"<unavailable>\";\n try {\n body = await response.text();\n } catch (error) {\n logger.debug(error, \"Failed to read response body\");\n }\n logger.debug(\n {\n status: response.status,\n statusText: response.statusText,\n response: textOrJson(body),\n },\n \"Failed to fetch project details\"\n );\n // Treat 4xx (other than 401) as hard errors — they indicate a problem the\n // user must fix (bad account, missing permission, rate limit). 5xx falls\n // through to a transient warn+fallback below.\n if (response.status >= 400 && response.status < 500) {\n await printCriticalFailureToConsoleAndExit(\n `The Zuplo API returned ${response.status} ${response.statusText}. Verify the account \"${account}\" and your credentials.`\n );\n return;\n }\n fetchFailed = true;\n }\n\n // 3. Build the output\n lines.push(`Project: ${project}`);\n lines.push(`Account: ${account}`);\n lines.push(`Portal: ${PORTAL_BASE_URL}/${account}/${project}`);\n\n if (linked.environmentType) {\n lines.push(`Environment Type: ${linked.environmentType}`);\n }\n\n const projectNotFound = !fetchFailed && response?.ok === true && !projectData;\n\n // Source control info — only show when we successfully found the project\n if (!fetchFailed && !projectNotFound) {\n const sourceControlSettingsUrl = `${PORTAL_BASE_URL}/${account}/${project}/settings/source-control-settings`;\n if (projectData?.sourceRepoUrl) {\n lines.push(`Source Control: ${projectData.sourceRepoUrl}`);\n } else {\n lines.push(\n `Source Control: none, connect at ${sourceControlSettingsUrl}`\n );\n }\n }\n\n if (fetchFailed) {\n printWarningToConsole(\n \"Unable to fetch project details, some information may be missing\"\n );\n } else if (projectNotFound) {\n printWarningToConsole(\n `Project \"${project}\" was not found in account \"${account}\". Run \\`zuplo link\\` to link a project.`\n );\n }\n\n await printResultToConsoleAndExitGracefully(lines.join(\"\\n\"));\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/project/info/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printResultToConsoleAndExitGracefully,\n printWarningToConsole,\n textOrJson,\n} from \"../../common/output.js\";\nimport { readLinkedConfig } from \"../../common/read-linked-config.js\";\nimport settings from \"../../common/settings.js\";\nimport { formatEnvironmentTypeLabel } from \"../../common/utils/format-environment-type.js\";\n\nconst PORTAL_BASE_URL = \"https://portal.zuplo.com\";\n\nexport interface Arguments extends Record<string, unknown> {\n authToken: string;\n \"api-key\"?: string;\n dir?: string;\n}\n\ninterface ProjectListItem {\n name: string;\n sourceRepoUrl: string | null;\n sourceControlProvider: string;\n}\n\nexport async function info(argv: Arguments) {\n const lines: string[] = [];\n\n // 1. Read linked config from .env.zuplo\n const linked = await readLinkedConfig(argv);\n\n // If no linked project, show guidance and exit\n if (!linked.accountName || !linked.projectName) {\n lines.push(\"No project linked. Run `zuplo link` to connect a project.\");\n await printResultToConsoleAndExitGracefully(lines.join(\"\\n\"));\n return;\n }\n\n const account = linked.accountName;\n const project = linked.projectName;\n\n // 2. Fetch project details from the projects list API for source control info\n let projectData: ProjectListItem | undefined;\n let fetchFailed = false;\n let response: Response | undefined;\n try {\n const projectsUrl = new URL(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/projects`\n );\n projectsUrl.searchParams.set(\"accountName\", account);\n response = await fetch(projectsUrl, {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n } catch (error) {\n logger.debug(error, \"Failed to fetch project details\");\n fetchFailed = true;\n }\n\n if (response?.status === 401) {\n let body = \"<unavailable>\";\n try {\n body = await response.text();\n } catch (error) {\n logger.debug(error, \"Failed to read response body\");\n }\n logger.debug(\n {\n status: response.status,\n statusText: response.statusText,\n response: textOrJson(body),\n },\n \"Failed to fetch project details\"\n );\n const message = argv[\"api-key\"]\n ? \"The provided --api-key was rejected. Check that it is valid and not expired, or run `zuplo login` to authenticate interactively.\"\n : \"Your saved credentials were rejected. They may be expired — run `zuplo login` to re-authenticate, or pass a valid --api-key.\";\n await printCriticalFailureToConsoleAndExit(message);\n return;\n }\n\n if (response?.ok) {\n try {\n const body = (await response.json()) as {\n data?: ProjectListItem[];\n };\n if (!Array.isArray(body.data)) {\n throw new Error(\"Projects API response did not include a data array\");\n }\n logger.debug(\n { projects: body.data, linkedProject: project },\n \"Projects API response\"\n );\n projectData = body.data.find((p) => p.name === project);\n } catch (error) {\n logger.debug(error, \"Failed to parse project details response\");\n fetchFailed = true;\n }\n } else if (response) {\n let body = \"<unavailable>\";\n try {\n body = await response.text();\n } catch (error) {\n logger.debug(error, \"Failed to read response body\");\n }\n logger.debug(\n {\n status: response.status,\n statusText: response.statusText,\n response: textOrJson(body),\n },\n \"Failed to fetch project details\"\n );\n // Treat 4xx (other than 401) as hard errors — they indicate a problem the\n // user must fix (bad account, missing permission, rate limit). 5xx falls\n // through to a transient warn+fallback below.\n if (response.status >= 400 && response.status < 500) {\n await printCriticalFailureToConsoleAndExit(\n `The Zuplo API returned ${response.status} ${response.statusText}. Verify the account \"${account}\" and your credentials.`\n );\n return;\n }\n fetchFailed = true;\n }\n\n // 3. Build the output\n lines.push(`Project: ${project}`);\n lines.push(`Account: ${account}`);\n lines.push(`Portal: ${PORTAL_BASE_URL}/${account}/${project}`);\n\n if (linked.environmentType) {\n const environmentTypeLabel = formatEnvironmentTypeLabel(\n linked.environmentType\n );\n if (environmentTypeLabel) {\n lines.push(`Environment Type: ${environmentTypeLabel}`);\n }\n }\n\n const projectNotFound = !fetchFailed && response?.ok === true && !projectData;\n\n // Source control info — only show when we successfully found the project\n if (!fetchFailed && !projectNotFound) {\n const sourceControlSettingsUrl = `${PORTAL_BASE_URL}/${account}/${project}/settings/source-control-settings`;\n if (projectData?.sourceRepoUrl) {\n lines.push(`Source Control: ${projectData.sourceRepoUrl}`);\n } else {\n lines.push(\n `Source Control: none, connect at ${sourceControlSettingsUrl}`\n );\n }\n }\n\n if (fetchFailed) {\n printWarningToConsole(\n \"Unable to fetch project details, some information may be missing\"\n );\n } else if (projectNotFound) {\n printWarningToConsole(\n `Project \"${project}\" was not found in account \"${account}\". Run \\`zuplo link\\` to link a project.`\n );\n }\n\n await printResultToConsoleAndExitGracefully(lines.join(\"\\n\"));\n}\n"]}
@@ -1 +1 @@
1
- {"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/branch.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts","../src/whoami/handler.ts"],"version":"5.8.2"}
1
+ {"root":["../src/cli.ts","../src/internal.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/outdated.test.ts","../src/__tests__/populate.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/confirm-linked-config.integration.test.ts","../src/__tests__/integration/custom-domain.integration.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/get-project-param.integration.test.ts","../src/__tests__/integration/info.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/linked-config-cascade.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/__tests__/integration/whoami.integration.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/docs.ts","../src/cmds/editor.ts","../src/cmds/info.ts","../src/cmds/init.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/whoami.ts","../src/cmds/custom-domain/create.ts","../src/cmds/custom-domain/delete.ts","../src/cmds/custom-domain/index.ts","../src/cmds/custom-domain/list.ts","../src/cmds/custom-domain/update.ts","../src/cmds/mtls-certificates/create.ts","../src/cmds/mtls-certificates/delete.ts","../src/cmds/mtls-certificates/describe.ts","../src/cmds/mtls-certificates/disable.ts","../src/cmds/mtls-certificates/index.ts","../src/cmds/mtls-certificates/list.ts","../src/cmds/mtls-certificates/update.ts","../src/cmds/open-api/convert.ts","../src/cmds/open-api/index.ts","../src/cmds/open-api/merge.ts","../src/cmds/open-api/overlay.ts","../src/cmds/project/create.ts","../src/cmds/project/index.ts","../src/cmds/project/info.ts","../src/cmds/proxies/create.ts","../src/cmds/proxies/delete.ts","../src/cmds/proxies/describe.ts","../src/cmds/proxies/index.ts","../src/cmds/proxies/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/migrate.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/populate.ts","../src/common/read-linked-config.test.ts","../src/common/read-linked-config.ts","../src/common/runner.ts","../src/common/settings.ts","../src/common/terminal.test.ts","../src/common/terminal.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/confirm-linked-config.ts","../src/common/middleware/get-account-param.ts","../src/common/middleware/get-environment-param.ts","../src/common/middleware/get-project-param.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/middleware/validate-fleet.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/branch.ts","../src/common/utils/format-environment-type.test.ts","../src/common/utils/format-environment-type.ts","../src/common/utils/ports.ts","../src/common/utils/prefixed-output.ts","../src/common/utils/pretty-print-environment-prompt.test.ts","../src/common/utils/pretty-print-environment-prompt.ts","../src/common/utils/stringify-config.test.ts","../src/common/utils/stringify-config.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/argument-validators.spec.ts","../src/common/validators/argument-validators.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/custom-domain/models.ts","../src/custom-domain/create/handler.ts","../src/custom-domain/delete/handler.ts","../src/custom-domain/list/handler.ts","../src/custom-domain/update/handler.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.local-registry.test.ts","../src/deploy/archive.test.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/docs/handler.ts","../src/editor/handler.ts","../src/editor/e2e/editor.spec.ts","../src/init/handler.ts","../src/link/handler.ts","../src/list/handler.ts","../src/login/login.ts","../src/login/tokens.ts","../src/mtls-certificates/models.ts","../src/mtls-certificates/create/handler.ts","../src/mtls-certificates/delete/handler.ts","../src/mtls-certificates/describe/handler.ts","../src/mtls-certificates/disable/handler.ts","../src/mtls-certificates/list/handler.ts","../src/mtls-certificates/update/handler.ts","../src/open-api/convert/handler.spec.ts","../src/open-api/convert/handler.ts","../src/open-api/merge/handler.spec.ts","../src/open-api/merge/handler.ts","../src/open-api/overlay/handler.spec.ts","../src/open-api/overlay/handler.ts","../src/project/create/handler.ts","../src/project/info/handler.ts","../src/proxies/models.ts","../src/proxies/create/handler.ts","../src/proxies/delete/handler.ts","../src/proxies/describe/handler.ts","../src/proxies/update/handler.ts","../src/source/migrate/dev-portal/handler.ts","../src/source/migrate/dev-portal/types.ts","../src/source/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts","../src/whoami/handler.ts"],"version":"5.8.2"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zuplo/core",
3
- "version": "6.69.3",
3
+ "version": "6.69.4",
4
4
  "repository": "https://github.com/zuplo/zuplo",
5
5
  "author": "Zuplo, Inc.",
6
6
  "type": "module",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zuplo/graphql",
3
3
  "type": "module",
4
- "version": "6.69.3",
4
+ "version": "6.69.4",
5
5
  "repository": "https://github.com/zuplo/zuplo",
6
6
  "author": "Zuplo, Inc.",
7
7
  "exports": {
@@ -2,7 +2,7 @@
2
2
  "name": "@zuplo/openapi-tools",
3
3
  "type": "module",
4
4
  "sideEffects": false,
5
- "version": "6.69.3",
5
+ "version": "6.69.4",
6
6
  "description": "Tooling for OpenAPI files",
7
7
  "repository": {
8
8
  "type": "git",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zuplo/otel",
3
3
  "type": "module",
4
- "version": "6.69.3",
4
+ "version": "6.69.4",
5
5
  "repository": "https://github.com/zuplo/zuplo",
6
6
  "author": "Zuplo, Inc.",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zuplo/runtime",
3
3
  "type": "module",
4
- "version": "6.69.3",
4
+ "version": "6.69.4",
5
5
  "repository": "https://github.com/zuplo/zuplo",
6
6
  "author": "Zuplo, Inc.",
7
7
  "exports": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zuplo/cli",
3
- "version": "6.69.3",
3
+ "version": "6.69.4",
4
4
  "repository": "https://github.com/zuplo/zuplo",
5
5
  "author": "Zuplo, Inc.",
6
6
  "type": "module",
@@ -29,10 +29,10 @@
29
29
  "@opentelemetry/api": "1.9.0",
30
30
  "@sentry/node": "9.22.0",
31
31
  "@swc/core": "1.10.18",
32
- "@zuplo/core": "6.69.3",
32
+ "@zuplo/core": "6.69.4",
33
33
  "@zuplo/editor": "1.0.20821740935",
34
- "@zuplo/openapi-tools": "6.69.3",
35
- "@zuplo/runtime": "6.69.3",
34
+ "@zuplo/openapi-tools": "6.69.4",
35
+ "@zuplo/runtime": "6.69.4",
36
36
  "chalk": "5.4.1",
37
37
  "chokidar": "3.5.3",
38
38
  "cookie": "1.0.2",
@@ -66,8 +66,8 @@
66
66
  "workerd": "1.20241230.0",
67
67
  "yargs": "17.7.2",
68
68
  "zod": "^3.24.1",
69
- "@zuplo/graphql": "6.69.3",
70
- "@zuplo/otel": "6.69.3"
69
+ "@zuplo/graphql": "6.69.4",
70
+ "@zuplo/otel": "6.69.4"
71
71
  },
72
72
  "bundleDependencies": [
73
73
  "@fastify/cors",