@zuplo/cli 6.69.6 → 6.69.9

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 (141) hide show
  1. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts +2 -0
  2. package/dist/__tests__/integration/confirm-production-deploy.integration.test.d.ts.map +1 -0
  3. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js +184 -0
  4. package/dist/__tests__/integration/confirm-production-deploy.integration.test.js.map +1 -0
  5. package/dist/__tests__/integration/deploy.integration.test.js +1 -0
  6. package/dist/__tests__/integration/deploy.integration.test.js.map +1 -1
  7. package/dist/__tests__/integration/jest-mocks-setup.js +3 -0
  8. package/dist/__tests__/integration/jest-mocks-setup.js.map +1 -1
  9. package/dist/__tests__/integration/whoami.integration.test.js +27 -0
  10. package/dist/__tests__/integration/whoami.integration.test.js.map +1 -1
  11. package/dist/bucket/list/handler.d.ts +8 -0
  12. package/dist/bucket/list/handler.d.ts.map +1 -0
  13. package/dist/bucket/list/handler.js +54 -0
  14. package/dist/bucket/list/handler.js.map +1 -0
  15. package/dist/bucket/models.d.ts +23 -0
  16. package/dist/bucket/models.d.ts.map +1 -0
  17. package/dist/bucket/models.js +2 -0
  18. package/dist/bucket/models.js.map +1 -0
  19. package/dist/cli.js +4 -0
  20. package/dist/cli.js.map +1 -1
  21. package/dist/cmds/bucket/index.d.ts +4 -0
  22. package/dist/cmds/bucket/index.d.ts.map +1 -0
  23. package/dist/cmds/bucket/index.js +9 -0
  24. package/dist/cmds/bucket/index.js.map +1 -0
  25. package/dist/cmds/bucket/list.d.ts +9 -0
  26. package/dist/cmds/bucket/list.d.ts.map +1 -0
  27. package/dist/cmds/bucket/list.js +60 -0
  28. package/dist/cmds/bucket/list.js.map +1 -0
  29. package/dist/cmds/deploy.d.ts.map +1 -1
  30. package/dist/cmds/deploy.js +4 -1
  31. package/dist/cmds/deploy.js.map +1 -1
  32. package/dist/cmds/logout.d.ts +9 -0
  33. package/dist/cmds/logout.d.ts.map +1 -0
  34. package/dist/cmds/logout.js +23 -0
  35. package/dist/cmds/logout.js.map +1 -0
  36. package/dist/cmds/whoami.d.ts.map +1 -1
  37. package/dist/cmds/whoami.js +1 -2
  38. package/dist/cmds/whoami.js.map +1 -1
  39. package/dist/common/middleware/confirm-production-deploy.d.ts +4 -0
  40. package/dist/common/middleware/confirm-production-deploy.d.ts.map +1 -0
  41. package/dist/common/middleware/confirm-production-deploy.js +49 -0
  42. package/dist/common/middleware/confirm-production-deploy.js.map +1 -0
  43. package/dist/common/middleware/get-environment-param.d.ts +6 -0
  44. package/dist/common/middleware/get-environment-param.d.ts.map +1 -1
  45. package/dist/common/middleware/get-environment-param.js +15 -0
  46. package/dist/common/middleware/get-environment-param.js.map +1 -1
  47. package/dist/common/middleware/get-environment-param.test.d.ts +2 -0
  48. package/dist/common/middleware/get-environment-param.test.d.ts.map +1 -0
  49. package/dist/common/middleware/get-environment-param.test.js +33 -0
  50. package/dist/common/middleware/get-environment-param.test.js.map +1 -0
  51. package/dist/common/output.d.ts +3 -0
  52. package/dist/common/output.d.ts.map +1 -1
  53. package/dist/common/output.js +11 -0
  54. package/dist/common/output.js.map +1 -1
  55. package/dist/common/read-linked-config.d.ts +6 -1
  56. package/dist/common/read-linked-config.d.ts.map +1 -1
  57. package/dist/common/read-linked-config.js +14 -4
  58. package/dist/common/read-linked-config.js.map +1 -1
  59. package/dist/common/read-linked-config.test.js +97 -0
  60. package/dist/common/read-linked-config.test.js.map +1 -1
  61. package/dist/deploy/environments.d.ts +1 -0
  62. package/dist/deploy/environments.d.ts.map +1 -1
  63. package/dist/deploy/environments.js +11 -7
  64. package/dist/deploy/environments.js.map +1 -1
  65. package/dist/login/logout.d.ts +5 -0
  66. package/dist/login/logout.d.ts.map +1 -0
  67. package/dist/login/logout.js +6 -0
  68. package/dist/login/logout.js.map +1 -0
  69. package/dist/login/tokens.d.ts +1 -0
  70. package/dist/login/tokens.d.ts.map +1 -1
  71. package/dist/login/tokens.js +16 -1
  72. package/dist/login/tokens.js.map +1 -1
  73. package/dist/tsconfig.tsbuildinfo +1 -1
  74. package/dist/whoami/handler.d.ts +1 -1
  75. package/dist/whoami/handler.d.ts.map +1 -1
  76. package/dist/whoami/handler.js +8 -1
  77. package/dist/whoami/handler.js.map +1 -1
  78. package/node_modules/@zuplo/core/customer.cli.minified.js +225 -211
  79. package/node_modules/@zuplo/core/index.minified.js +237 -223
  80. package/node_modules/@zuplo/core/package.json +1 -1
  81. package/node_modules/@zuplo/editor/node_modules/find-my-way/.github/workflows/node.js.yml +1 -1
  82. package/node_modules/@zuplo/editor/node_modules/find-my-way/README.md +10 -0
  83. package/node_modules/@zuplo/editor/node_modules/find-my-way/index.d.ts +6 -0
  84. package/node_modules/@zuplo/editor/node_modules/find-my-way/index.js +37 -4
  85. package/node_modules/@zuplo/editor/node_modules/find-my-way/lib/handler-storage.js +2 -2
  86. package/node_modules/@zuplo/editor/node_modules/find-my-way/package.json +3 -3
  87. package/node_modules/@zuplo/editor/node_modules/find-my-way/test/repro-issue-414.test.js +57 -0
  88. package/node_modules/@zuplo/editor/node_modules/find-my-way/test/types/router.test-d.ts +1 -0
  89. package/node_modules/@zuplo/graphql/package.json +1 -1
  90. package/node_modules/@zuplo/openapi-tools/package.json +1 -1
  91. package/node_modules/@zuplo/otel/package.json +1 -1
  92. package/node_modules/@zuplo/runtime/out/esm/index.js +48 -48
  93. package/node_modules/@zuplo/runtime/out/esm/index.js.map +1 -1
  94. package/node_modules/@zuplo/runtime/out/types/index.d.ts +23 -2
  95. package/node_modules/@zuplo/runtime/package.json +1 -1
  96. package/node_modules/graphql/index.d.ts +1 -0
  97. package/node_modules/graphql/language/ast.d.ts +10 -1
  98. package/node_modules/graphql/language/ast.js +8 -1
  99. package/node_modules/graphql/language/ast.mjs +8 -1
  100. package/node_modules/graphql/language/directiveLocation.d.ts +1 -0
  101. package/node_modules/graphql/language/directiveLocation.js +1 -0
  102. package/node_modules/graphql/language/directiveLocation.mjs +1 -0
  103. package/node_modules/graphql/language/index.d.ts +1 -0
  104. package/node_modules/graphql/language/kinds.d.ts +1 -0
  105. package/node_modules/graphql/language/kinds.js +1 -0
  106. package/node_modules/graphql/language/kinds.mjs +1 -0
  107. package/node_modules/graphql/language/parser.d.ts +14 -0
  108. package/node_modules/graphql/language/parser.js +33 -0
  109. package/node_modules/graphql/language/parser.mjs +33 -0
  110. package/node_modules/graphql/language/predicates.js +3 -1
  111. package/node_modules/graphql/language/predicates.mjs +5 -1
  112. package/node_modules/graphql/language/printer.js +13 -1
  113. package/node_modules/graphql/language/printer.mjs +13 -1
  114. package/node_modules/graphql/package.json +1 -1
  115. package/node_modules/graphql/type/directives.d.ts +9 -1
  116. package/node_modules/graphql/type/directives.js +10 -1
  117. package/node_modules/graphql/type/directives.mjs +10 -1
  118. package/node_modules/graphql/type/introspection.js +24 -1
  119. package/node_modules/graphql/type/introspection.mjs +24 -1
  120. package/node_modules/graphql/utilities/buildASTSchema.js +4 -0
  121. package/node_modules/graphql/utilities/buildASTSchema.mjs +4 -0
  122. package/node_modules/graphql/utilities/buildClientSchema.js +1 -0
  123. package/node_modules/graphql/utilities/buildClientSchema.mjs +1 -0
  124. package/node_modules/graphql/utilities/extendSchema.js +58 -3
  125. package/node_modules/graphql/utilities/extendSchema.mjs +58 -3
  126. package/node_modules/graphql/utilities/getIntrospectionQuery.d.ts +16 -0
  127. package/node_modules/graphql/utilities/getIntrospectionQuery.js +31 -38
  128. package/node_modules/graphql/utilities/getIntrospectionQuery.mjs +31 -38
  129. package/node_modules/graphql/utilities/introspectionFromSchema.js +1 -0
  130. package/node_modules/graphql/utilities/introspectionFromSchema.mjs +1 -0
  131. package/node_modules/graphql/utilities/printSchema.js +1 -0
  132. package/node_modules/graphql/utilities/printSchema.mjs +1 -0
  133. package/node_modules/graphql/utilities/valueFromAST.js +12 -2
  134. package/node_modules/graphql/utilities/valueFromAST.mjs +12 -2
  135. package/node_modules/graphql/validation/rules/KnownDirectivesRule.js +4 -0
  136. package/node_modules/graphql/validation/rules/KnownDirectivesRule.mjs +4 -0
  137. package/node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.js +12 -0
  138. package/node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.mjs +12 -0
  139. package/node_modules/graphql/version.js +3 -3
  140. package/node_modules/graphql/version.mjs +3 -3
  141. package/package.json +6 -6
@@ -0,0 +1,54 @@
1
+ import { logger } from "../../common/logger.js";
2
+ import { printDiagnosticsToConsole, printJsonToConsoleAndExitGracefully, printResultToConsoleAndExitGracefully, printTableToConsoleAndExitGracefully, textOrJson, } from "../../common/output.js";
3
+ import settings from "../../common/settings.js";
4
+ function toTableRows(buckets) {
5
+ return buckets.map((bucket) => ({
6
+ id: bucket.id,
7
+ name: bucket.name,
8
+ "project-name": bucket.tags?.project ?? "",
9
+ "environment-type": bucket.tags?.environmentType ?? "",
10
+ "is-retrievable": bucket.isRetrievable,
11
+ "created-on": bucket.createdOn,
12
+ }));
13
+ }
14
+ export async function list(argv) {
15
+ const { account, project } = argv;
16
+ const url = new URL(`${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/key-buckets`);
17
+ const listResponse = await fetch(url, {
18
+ method: "GET",
19
+ headers: {
20
+ Authorization: `Bearer ${argv.authToken}`,
21
+ },
22
+ });
23
+ if (listResponse.ok) {
24
+ const buckets = await listResponse.json();
25
+ if (project) {
26
+ buckets.data = buckets.data.filter((bucket) => bucket.tags?.project === project);
27
+ }
28
+ if (buckets.data.length === 0) {
29
+ if (argv.output === "json") {
30
+ await printJsonToConsoleAndExitGracefully([]);
31
+ }
32
+ else {
33
+ await printResultToConsoleAndExitGracefully("No buckets found");
34
+ }
35
+ return;
36
+ }
37
+ if (argv.output === "json") {
38
+ await printJsonToConsoleAndExitGracefully(buckets.data);
39
+ }
40
+ else {
41
+ await printTableToConsoleAndExitGracefully(toTableRows(buckets.data));
42
+ }
43
+ return;
44
+ }
45
+ const response = textOrJson(await listResponse.text());
46
+ logger.error({
47
+ status: listResponse.status,
48
+ statusText: listResponse.statusText,
49
+ response,
50
+ }, "Failed to list buckets for account");
51
+ printDiagnosticsToConsole("Error: Failed to list buckets for your account. Try again later.", response);
52
+ process.exit(1);
53
+ }
54
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/bucket/list/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,mCAAmC,EACnC,qCAAqC,EACrC,oCAAoC,EACpC,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAmBhD,SAAS,WAAW,CAAC,OAAiB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9B,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;QAC1C,kBAAkB,EAAE,MAAM,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE;QACtD,gBAAgB,EAAE,MAAM,CAAC,aAAa;QACtC,YAAY,EAAE,MAAM,CAAC,SAAS;KAC/B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAe;IACxC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAElC,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,cAAc,CAC9E,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,OAAO,GAAuB,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAE9D,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAChC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAC7C,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,mCAAmC,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,qCAAqC,CAAC,kBAAkB,CAAC,CAAC;YAClE,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,mCAAmC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,MAAM,oCAAoC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CACV;QACE,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,QAAQ;KACT,EACD,oCAAoC,CACrC,CAAC;IACF,yBAAyB,CACvB,kEAAkE,EAClE,QAAQ,CACT,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printJsonToConsoleAndExitGracefully,\n printResultToConsoleAndExitGracefully,\n printTableToConsoleAndExitGracefully,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { Bucket, BucketListResponse } from \"../models.js\";\n\nexport interface Arguments {\n account: string;\n project?: string;\n authToken: string;\n output?: \"default\" | \"json\";\n}\n\ninterface BucketTableRow {\n id: string;\n name: string;\n \"project-name\": string;\n \"environment-type\": string;\n \"is-retrievable\": boolean;\n \"created-on\": string;\n}\n\nfunction toTableRows(buckets: Bucket[]): BucketTableRow[] {\n return buckets.map((bucket) => ({\n id: bucket.id,\n name: bucket.name,\n \"project-name\": bucket.tags?.project ?? \"\",\n \"environment-type\": bucket.tags?.environmentType ?? \"\",\n \"is-retrievable\": bucket.isRetrievable,\n \"created-on\": bucket.createdOn,\n }));\n}\n\nexport async function list(argv: Arguments) {\n const { account, project } = argv;\n\n const url = new URL(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/key-buckets`\n );\n\n const listResponse = await fetch(url, {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n });\n\n if (listResponse.ok) {\n const buckets: BucketListResponse = await listResponse.json();\n\n if (project) {\n buckets.data = buckets.data.filter(\n (bucket) => bucket.tags?.project === project\n );\n }\n\n if (buckets.data.length === 0) {\n if (argv.output === \"json\") {\n await printJsonToConsoleAndExitGracefully([]);\n } else {\n await printResultToConsoleAndExitGracefully(\"No buckets found\");\n }\n return;\n }\n\n if (argv.output === \"json\") {\n await printJsonToConsoleAndExitGracefully(buckets.data);\n } else {\n await printTableToConsoleAndExitGracefully(toTableRows(buckets.data));\n }\n return;\n }\n\n const response = textOrJson(await listResponse.text());\n logger.error(\n {\n status: listResponse.status,\n statusText: listResponse.statusText,\n response,\n },\n \"Failed to list buckets for account\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to list buckets for your account. Try again later.\",\n response\n );\n process.exit(1);\n}\n"]}
@@ -0,0 +1,23 @@
1
+ export type BucketEnvironmentType = "PRODUCTION" | "PREVIEW" | "WORKING_COPY";
2
+ export interface BucketTags {
3
+ account: string;
4
+ project: string;
5
+ environmentType: BucketEnvironmentType;
6
+ [key: string]: string | undefined;
7
+ }
8
+ export interface Bucket {
9
+ id: string;
10
+ name: string;
11
+ description: string | null;
12
+ isRetrievable: boolean;
13
+ tags: BucketTags;
14
+ createdOn: string;
15
+ updatedOn: string;
16
+ }
17
+ export interface BucketListResponse {
18
+ data: Bucket[];
19
+ total?: number;
20
+ limit?: number;
21
+ offset?: number;
22
+ }
23
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/bucket/models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,SAAS,GAAG,cAAc,CAAC;AAE9E,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,qBAAqB,CAAC;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/bucket/models.ts"],"names":[],"mappings":"","sourcesContent":["export type BucketEnvironmentType = \"PRODUCTION\" | \"PREVIEW\" | \"WORKING_COPY\";\n\nexport interface BucketTags {\n account: string;\n project: string;\n environmentType: BucketEnvironmentType;\n [key: string]: string | undefined;\n}\n\nexport interface Bucket {\n id: string;\n name: string;\n description: string | null;\n isRetrievable: boolean;\n tags: BucketTags;\n createdOn: string;\n updatedOn: string;\n}\n\nexport interface BucketListResponse {\n data: Bucket[];\n total?: number;\n limit?: number;\n offset?: number;\n}\n"]}
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@ import { gte } from "semver";
8
8
  import undici from "undici";
9
9
  import { hideBin } from "yargs/helpers";
10
10
  import yargs from "yargs/yargs";
11
+ import bucket from "./cmds/bucket/index.js";
11
12
  import build from "./cmds/build.js";
12
13
  import compile from "./cmds/compile.js";
13
14
  import customDomain from "./cmds/custom-domain/index.js";
@@ -21,6 +22,7 @@ import init from "./cmds/init.js";
21
22
  import link from "./cmds/link.js";
22
23
  import list from "./cmds/list.js";
23
24
  import login from "./cmds/login.js";
25
+ import logout from "./cmds/logout.js";
24
26
  import mtlsCertificates from "./cmds/mtls-certificates/index.js";
25
27
  import oas from "./cmds/open-api/index.js";
26
28
  import project from "./cmds/project/index.js";
@@ -95,6 +97,7 @@ if (gte(process.versions.node, MIN_NODE_VERSION)) {
95
97
  .command(list)
96
98
  .command(link)
97
99
  .command(login)
100
+ .command(logout)
98
101
  .command(test)
99
102
  .command(oas)
100
103
  .command(mtlsCertificates)
@@ -103,6 +106,7 @@ if (gte(process.versions.node, MIN_NODE_VERSION)) {
103
106
  .command(tunnel)
104
107
  .command(variable)
105
108
  .command(build)
109
+ .command(bucket)
106
110
  .command(proxies)
107
111
  .command(whoami)
108
112
  .command({
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nimport { readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { confirm } from \"@inquirer/prompts\";\nimport * as Sentry from \"@sentry/node\";\nimport { gte } from \"semver\";\n// Undici must be imported first to set the global dispatcher\n// If fetch is used before undici, the process will crash\nimport undici from \"undici\";\nimport { hideBin } from \"yargs/helpers\";\nimport yargs from \"yargs/yargs\";\nimport build from \"./cmds/build.js\";\nimport compile from \"./cmds/compile.js\";\nimport customDomain from \"./cmds/custom-domain/index.js\";\nimport deleteZup from \"./cmds/delete.js\";\nimport deploy from \"./cmds/deploy.js\";\nimport dev from \"./cmds/dev.js\";\nimport docs from \"./cmds/docs.js\";\nimport editor from \"./cmds/editor.js\";\nimport info from \"./cmds/info.js\";\nimport init from \"./cmds/init.js\";\nimport link from \"./cmds/link.js\";\nimport list from \"./cmds/list.js\";\nimport login from \"./cmds/login.js\";\nimport mtlsCertificates from \"./cmds/mtls-certificates/index.js\";\nimport oas from \"./cmds/open-api/index.js\";\nimport project from \"./cmds/project/index.js\";\nimport proxies from \"./cmds/proxies/index.js\";\nimport source from \"./cmds/source/index.js\";\nimport test from \"./cmds/test.js\";\nimport tunnel from \"./cmds/tunnel/index.js\";\nimport variable from \"./cmds/variable/index.js\";\nimport whoami from \"./cmds/whoami.js\";\nimport { shutdownAnalytics } from \"./common/analytics/lib.js\";\nimport { ApiError } from \"./common/api/client.js\";\nimport { MAX_WAIT_PENDING_TIME_MS, SENTRY_DSN } from \"./common/constants.js\";\nimport { logger } from \"./common/logger.js\";\nimport { logLevel } from \"./common/middleware/logging.js\";\nimport { warnIfOutdatedVersion, warnNodeVersion } from \"./common/outdated.js\";\nimport {\n printCriticalFailureToConsole,\n printCriticalFailureToConsoleAndExit,\n} from \"./common/output.js\";\n\n// This allows us to stop the CLI from executing so we can connect the profiler\n\n// biome-ignore lint/style/noProcessEnv: Migrated from ESLint\nif (process.env.ZUPLO_CLI_PROFILING) {\n await confirm({ message: \"Continue executing CLI?\", default: true });\n}\n\n// Note: We cannot set this to be higher than 18.0.0 because of the way\n// our documentation works -- we tell them to use npx @zuplo/cli@latest (even in CI/CD jobs)\n// If we set this to be higher than 18.0.0, then we will break them.\n// Instead we set the value in package.json to be engine.node >= 20.0.0, so it will warn\nconst MIN_NODE_VERSION = \"18.0.0\";\nconst RECOMMENDED_NODE_VERSION = \"20.0.0\";\n\nif (gte(process.versions.node, MIN_NODE_VERSION)) {\n let cliVersion: string;\n try {\n const packageJson = JSON.parse(\n readFileSync(\n fileURLToPath(new URL(\"../package.json\", import.meta.url)),\n \"utf-8\"\n )\n );\n cliVersion = packageJson.version;\n } catch (e) {\n cliVersion = \"0.0.0\";\n logger.error(e);\n await printCriticalFailureToConsoleAndExit(\n `Unable to load @zuplo/cli. The package.json is missing or malformed.`\n );\n }\n\n await warnNodeVersion(cliVersion, RECOMMENDED_NODE_VERSION);\n\n undici.setGlobalDispatcher(\n undici.getGlobalDispatcher().compose((dispatch) => {\n return (opts, handler) => {\n opts.headers = {\n ...opts.headers,\n \"user-agent\": `ZuploCLI/${cliVersion}`,\n\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n ...(process.env.ZUPLO_CANARY ? { \"zp-canary\": \"true\" } : {}),\n };\n return dispatch(opts, handler);\n };\n })\n );\n\n Sentry.init({\n dsn: SENTRY_DSN,\n release: cliVersion,\n });\n\n const cli = yargs(hideBin(process.argv))\n // This means that all env vars will have to be prefixed with ZUPLO_\n .env(\"ZUPLO\")\n .option(\"prompt\", {\n type: \"boolean\",\n describe: \"Bypass confirmation prompts\",\n default: true,\n hidden: true,\n })\n .option(\"verbose\", {\n alias: \"v\",\n type: \"count\",\n describe: \"Increase verbosity level (-v, -vv, -vvv)\",\n default: 0,\n })\n .middleware(logLevel)\n .command(compile)\n .command(customDomain)\n .command(deleteZup) // delete is a reserved keyword in JavaScript, so we call this function deleteZup\n .command(deploy)\n .command(dev)\n .command(docs)\n .command(editor)\n .command(info)\n .command(init)\n .command(list)\n .command(link)\n .command(login)\n .command(test)\n .command(oas)\n .command(mtlsCertificates)\n .command(project)\n .command(source)\n .command(tunnel)\n .command(variable)\n .command(build)\n .command(proxies)\n .command(whoami)\n .command({\n command: \"hello\",\n handler: async () => {\n await fetch(\"https://393b4699ced44cc2ae87e4ad86184a29.api.mockbin.io/\");\n },\n })\n .demandCommand()\n .strictCommands()\n .version(cliVersion)\n .fail(false)\n .help();\n\n let exitCode = 0;\n try {\n await cli.argv;\n\n // Don't block\n void warnIfOutdatedVersion(cliVersion);\n } catch (err) {\n exitCode = 1;\n if (err instanceof Error) {\n Sentry.captureException(err);\n }\n if (err instanceof ApiError) {\n // The API client has already logged the structured error and printed\n // a user-facing diagnostic. Nothing more to display here.\n } else {\n printCriticalFailureToConsole(err.message ?? err);\n cli.showHelp();\n }\n } finally {\n await shutdownAnalytics();\n await Sentry.close(MAX_WAIT_PENDING_TIME_MS);\n process.exit(exitCode);\n }\n} else {\n await printCriticalFailureToConsoleAndExit(\n `The Zuplo CLI requires at least node.js v${MIN_NODE_VERSION}. You are using v${process.versions.node}. Please update your version of node.js.\n\n Consider using a Node.js version manager such as https://github.com/nvm-sh/nvm.`\n );\n}\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as dotenv from \"dotenv\";\n\ndotenv.config();\n\nimport { readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { confirm } from \"@inquirer/prompts\";\nimport * as Sentry from \"@sentry/node\";\nimport { gte } from \"semver\";\n// Undici must be imported first to set the global dispatcher\n// If fetch is used before undici, the process will crash\nimport undici from \"undici\";\nimport { hideBin } from \"yargs/helpers\";\nimport yargs from \"yargs/yargs\";\nimport bucket from \"./cmds/bucket/index.js\";\nimport build from \"./cmds/build.js\";\nimport compile from \"./cmds/compile.js\";\nimport customDomain from \"./cmds/custom-domain/index.js\";\nimport deleteZup from \"./cmds/delete.js\";\nimport deploy from \"./cmds/deploy.js\";\nimport dev from \"./cmds/dev.js\";\nimport docs from \"./cmds/docs.js\";\nimport editor from \"./cmds/editor.js\";\nimport info from \"./cmds/info.js\";\nimport init from \"./cmds/init.js\";\nimport link from \"./cmds/link.js\";\nimport list from \"./cmds/list.js\";\nimport login from \"./cmds/login.js\";\nimport logout from \"./cmds/logout.js\";\nimport mtlsCertificates from \"./cmds/mtls-certificates/index.js\";\nimport oas from \"./cmds/open-api/index.js\";\nimport project from \"./cmds/project/index.js\";\nimport proxies from \"./cmds/proxies/index.js\";\nimport source from \"./cmds/source/index.js\";\nimport test from \"./cmds/test.js\";\nimport tunnel from \"./cmds/tunnel/index.js\";\nimport variable from \"./cmds/variable/index.js\";\nimport whoami from \"./cmds/whoami.js\";\nimport { shutdownAnalytics } from \"./common/analytics/lib.js\";\nimport { ApiError } from \"./common/api/client.js\";\nimport { MAX_WAIT_PENDING_TIME_MS, SENTRY_DSN } from \"./common/constants.js\";\nimport { logger } from \"./common/logger.js\";\nimport { logLevel } from \"./common/middleware/logging.js\";\nimport { warnIfOutdatedVersion, warnNodeVersion } from \"./common/outdated.js\";\nimport {\n printCriticalFailureToConsole,\n printCriticalFailureToConsoleAndExit,\n} from \"./common/output.js\";\n\n// This allows us to stop the CLI from executing so we can connect the profiler\n\n// biome-ignore lint/style/noProcessEnv: Migrated from ESLint\nif (process.env.ZUPLO_CLI_PROFILING) {\n await confirm({ message: \"Continue executing CLI?\", default: true });\n}\n\n// Note: We cannot set this to be higher than 18.0.0 because of the way\n// our documentation works -- we tell them to use npx @zuplo/cli@latest (even in CI/CD jobs)\n// If we set this to be higher than 18.0.0, then we will break them.\n// Instead we set the value in package.json to be engine.node >= 20.0.0, so it will warn\nconst MIN_NODE_VERSION = \"18.0.0\";\nconst RECOMMENDED_NODE_VERSION = \"20.0.0\";\n\nif (gte(process.versions.node, MIN_NODE_VERSION)) {\n let cliVersion: string;\n try {\n const packageJson = JSON.parse(\n readFileSync(\n fileURLToPath(new URL(\"../package.json\", import.meta.url)),\n \"utf-8\"\n )\n );\n cliVersion = packageJson.version;\n } catch (e) {\n cliVersion = \"0.0.0\";\n logger.error(e);\n await printCriticalFailureToConsoleAndExit(\n `Unable to load @zuplo/cli. The package.json is missing or malformed.`\n );\n }\n\n await warnNodeVersion(cliVersion, RECOMMENDED_NODE_VERSION);\n\n undici.setGlobalDispatcher(\n undici.getGlobalDispatcher().compose((dispatch) => {\n return (opts, handler) => {\n opts.headers = {\n ...opts.headers,\n \"user-agent\": `ZuploCLI/${cliVersion}`,\n\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n ...(process.env.ZUPLO_CANARY ? { \"zp-canary\": \"true\" } : {}),\n };\n return dispatch(opts, handler);\n };\n })\n );\n\n Sentry.init({\n dsn: SENTRY_DSN,\n release: cliVersion,\n });\n\n const cli = yargs(hideBin(process.argv))\n // This means that all env vars will have to be prefixed with ZUPLO_\n .env(\"ZUPLO\")\n .option(\"prompt\", {\n type: \"boolean\",\n describe: \"Bypass confirmation prompts\",\n default: true,\n hidden: true,\n })\n .option(\"verbose\", {\n alias: \"v\",\n type: \"count\",\n describe: \"Increase verbosity level (-v, -vv, -vvv)\",\n default: 0,\n })\n .middleware(logLevel)\n .command(compile)\n .command(customDomain)\n .command(deleteZup) // delete is a reserved keyword in JavaScript, so we call this function deleteZup\n .command(deploy)\n .command(dev)\n .command(docs)\n .command(editor)\n .command(info)\n .command(init)\n .command(list)\n .command(link)\n .command(login)\n .command(logout)\n .command(test)\n .command(oas)\n .command(mtlsCertificates)\n .command(project)\n .command(source)\n .command(tunnel)\n .command(variable)\n .command(build)\n .command(bucket)\n .command(proxies)\n .command(whoami)\n .command({\n command: \"hello\",\n handler: async () => {\n await fetch(\"https://393b4699ced44cc2ae87e4ad86184a29.api.mockbin.io/\");\n },\n })\n .demandCommand()\n .strictCommands()\n .version(cliVersion)\n .fail(false)\n .help();\n\n let exitCode = 0;\n try {\n await cli.argv;\n\n // Don't block\n void warnIfOutdatedVersion(cliVersion);\n } catch (err) {\n exitCode = 1;\n if (err instanceof Error) {\n Sentry.captureException(err);\n }\n if (err instanceof ApiError) {\n // The API client has already logged the structured error and printed\n // a user-facing diagnostic. Nothing more to display here.\n } else {\n printCriticalFailureToConsole(err.message ?? err);\n cli.showHelp();\n }\n } finally {\n await shutdownAnalytics();\n await Sentry.close(MAX_WAIT_PENDING_TIME_MS);\n process.exit(exitCode);\n }\n} else {\n await printCriticalFailureToConsoleAndExit(\n `The Zuplo CLI requires at least node.js v${MIN_NODE_VERSION}. You are using v${process.versions.node}. Please update your version of node.js.\n\n Consider using a Node.js version manager such as https://github.com/nvm-sh/nvm.`\n );\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { CommandModule } from "yargs";
2
+ declare const commands: CommandModule;
3
+ export default commands;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmds/bucket/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,QAAA,MAAM,QAAQ,EAAE,aAIf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { showHelpOnNoSubcommand } from "../../common/handler.js";
2
+ import list from "./list.js";
3
+ const commands = {
4
+ describe: "Bucket commands",
5
+ command: "bucket",
6
+ ...showHelpOnNoSubcommand((yargs) => yargs.command(list)),
7
+ };
8
+ export default commands;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmds/bucket/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,QAAQ,GAAkB;IAC9B,QAAQ,EAAE,iBAAiB;IAC3B,OAAO,EAAE,QAAQ;IACjB,GAAG,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D,CAAC;AAEF,eAAe,QAAQ,CAAC","sourcesContent":["import { CommandModule } from \"yargs\";\nimport { showHelpOnNoSubcommand } from \"../../common/handler.js\";\nimport list from \"./list.js\";\n\nconst commands: CommandModule = {\n describe: \"Bucket commands\",\n command: \"bucket\",\n ...showHelpOnNoSubcommand((yargs) => yargs.command(list)),\n};\n\nexport default commands;\n"]}
@@ -0,0 +1,9 @@
1
+ import { Argv } from "yargs";
2
+ declare const _default: {
3
+ desc: string;
4
+ command: string;
5
+ builder: (yargs: Argv) => Argv<unknown>;
6
+ handler: (argv: unknown) => Promise<void>;
7
+ };
8
+ export default _default;
9
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cmds/bucket/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAYV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBA4Cf,OAAO;;AA/C/B,wBAmDE"}
@@ -0,0 +1,60 @@
1
+ import { list } from "../../bucket/list/handler.js";
2
+ import { captureEvent } from "../../common/analytics/lib.js";
3
+ import { authenticate } from "../../common/middleware/authentication.js";
4
+ import { fetchAccount } from "../../common/middleware/get-account-param.js";
5
+ import { configure } from "../../common/middleware/user-configuration.js";
6
+ import { identify } from "../../common/middleware/user-identification.js";
7
+ import setBlocking from "../../common/output.js";
8
+ export default {
9
+ desc: "Lists the buckets in your account",
10
+ command: "list",
11
+ builder: (yargs) => {
12
+ return yargs
13
+ .usage("$0 bucket list [options]")
14
+ .option("api-key", {
15
+ type: "string",
16
+ describe: "The API Key from Zuplo",
17
+ envVar: "API_KEY",
18
+ alias: "apikey",
19
+ })
20
+ .option("account", {
21
+ type: "string",
22
+ describe: "The account name",
23
+ })
24
+ .option("project", {
25
+ type: "string",
26
+ describe: "Filter buckets by project name",
27
+ })
28
+ .option("output", {
29
+ type: "string",
30
+ alias: "o",
31
+ describe: "Output format",
32
+ choices: ["default", "json"],
33
+ default: "default",
34
+ })
35
+ .example([
36
+ ["$0 bucket list", "List all buckets in your account"],
37
+ ["$0 bucket list --output json", "List all buckets as JSON"],
38
+ [
39
+ "$0 bucket list --account my-account",
40
+ "Explicitly specify the account",
41
+ ],
42
+ [
43
+ "$0 bucket list --project my-project",
44
+ "Filter buckets by project name",
45
+ ],
46
+ ])
47
+ .middleware([
48
+ setBlocking,
49
+ authenticate,
50
+ configure,
51
+ fetchAccount,
52
+ identify,
53
+ ]);
54
+ },
55
+ handler: async (argv) => {
56
+ await captureEvent({ argv, event: "zuplo bucket list" });
57
+ await list(argv);
58
+ },
59
+ };
60
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cmds/bucket/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC1E,OAAO,WAAW,MAAM,wBAAwB,CAAC;AAEjD,eAAe;IACb,IAAI,EAAE,mCAAmC;IACzC,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,KAAK,CAAC,0BAA0B,CAAC;aACjC,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;SAChB,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;aACD,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,gCAAgC;SAC3C,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;YAC5B,OAAO,EAAE,SAAS;SACnB,CAAC;aACD,OAAO,CAAC;YACP,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;YACtD,CAAC,8BAA8B,EAAE,0BAA0B,CAAC;YAC5D;gBACE,qCAAqC;gBACrC,gCAAgC;aACjC;YACD;gBACE,qCAAqC;gBACrC,gCAAgC;aACjC;SACF,CAAC;aACD,UAAU,CAAC;YACV,WAAW;YACX,YAAY;YACZ,SAAS;YACT,YAAY;YACZ,QAAQ;SACT,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,CAAC,IAAiB,CAAC,CAAC;IAChC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { Arguments, list } from \"../../bucket/list/handler.js\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { authenticate } from \"../../common/middleware/authentication.js\";\nimport { fetchAccount } from \"../../common/middleware/get-account-param.js\";\nimport { configure } from \"../../common/middleware/user-configuration.js\";\nimport { identify } from \"../../common/middleware/user-identification.js\";\nimport setBlocking from \"../../common/output.js\";\n\nexport default {\n desc: \"Lists the buckets in your account\",\n command: \"list\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 bucket list [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .option(\"account\", {\n type: \"string\",\n describe: \"The account name\",\n })\n .option(\"project\", {\n type: \"string\",\n describe: \"Filter buckets by project name\",\n })\n .option(\"output\", {\n type: \"string\",\n alias: \"o\",\n describe: \"Output format\",\n choices: [\"default\", \"json\"],\n default: \"default\",\n })\n .example([\n [\"$0 bucket list\", \"List all buckets in your account\"],\n [\"$0 bucket list --output json\", \"List all buckets as JSON\"],\n [\n \"$0 bucket list --account my-account\",\n \"Explicitly specify the account\",\n ],\n [\n \"$0 bucket list --project my-project\",\n \"Filter buckets by project name\",\n ],\n ])\n .middleware([\n setBlocking,\n authenticate,\n configure,\n fetchAccount,\n identify,\n ]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo bucket list\" });\n await list(argv as Arguments);\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAeV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAsFf,OAAO;;AAzF/B,wBA6FE"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAmBV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAwFf,OAAO;;AA3F/B,wBA+FE"}
@@ -1,8 +1,9 @@
1
1
  import { captureEvent } from "../common/analytics/lib.js";
2
2
  import { authenticate } from "../common/middleware/authentication.js";
3
3
  import { confirmLinkedConfig } from "../common/middleware/confirm-linked-config.js";
4
+ import { confirmProductionDeploy } from "../common/middleware/confirm-production-deploy.js";
4
5
  import { fetchAccount } from "../common/middleware/get-account-param.js";
5
- import { fetchEnvironment } from "../common/middleware/get-environment-param.js";
6
+ import { fetchEnvironment, recordEnvironmentExplicit, } from "../common/middleware/get-environment-param.js";
6
7
  import { fetchProject } from "../common/middleware/get-project-param.js";
7
8
  import { configure } from "../common/middleware/user-configuration.js";
8
9
  import { identify } from "../common/middleware/user-identification.js";
@@ -89,7 +90,9 @@ export default {
89
90
  confirmLinkedConfig,
90
91
  fetchAccount,
91
92
  fetchProject,
93
+ recordEnvironmentExplicit,
92
94
  fetchEnvironment,
95
+ confirmProductionDeploy,
93
96
  identify,
94
97
  ]);
95
98
  },
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { authenticate } from \"../common/middleware/authentication.js\";\nimport { confirmLinkedConfig } from \"../common/middleware/confirm-linked-config.js\";\nimport { fetchAccount } from \"../common/middleware/get-account-param.js\";\nimport { fetchEnvironment } from \"../common/middleware/get-environment-param.js\";\nimport { fetchProject } from \"../common/middleware/get-project-param.js\";\nimport { configure } from \"../common/middleware/user-configuration.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport setBlocking from \"../common/output.js\";\nimport { Arguments, deploy } from \"../deploy/handler.js\";\n\nexport default {\n desc: \"Deploys current Git branch of the current directory\",\n command: \"deploy\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 deploy [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .option(\"project\", {\n type: \"string\",\n hidden: true,\n describe: \"The project name\",\n })\n .option(\"account\", {\n type: \"string\",\n describe: \"The account name\",\n })\n .option(\"dir\", {\n type: \"string\",\n describe: \"The directory containing your Zuplo API\",\n default: \".\",\n normalize: true,\n hidden: true,\n })\n .option(\"verify-remote\", {\n deprecated: true,\n type: \"boolean\",\n describe:\n \"Verify that this Git repository matches the one configured on Zuplo. Use --no-verify-remote to disable.\",\n default: false,\n })\n .option(\"environment\", {\n type: \"string\",\n describe:\n \"The value to use for environment name, instead of the current branch name\",\n })\n .option(\"self-hosted-endpoint\", {\n type: \"string\",\n describe: \"The endpoint of your self-hosted service to deploy to\",\n })\n .option(\"override-repo-url\", {\n type: \"string\",\n describe: \"Override the repo url reference\",\n default: undefined,\n hidden: true,\n })\n .option(\"fetch-environments\", {\n type: \"boolean\",\n describe:\n \"Fetch the environments for your project from Zuplo. If this is false, then the environment will automatically be detected from the git branch.\",\n default: false,\n })\n .option(\"mtls-certificates-dir\", {\n type: \"string\",\n describe:\n \"Directory containing mtls certificates to use for the deployment, in the hierarchy that you want them to appear in the runtime. Ex: <cert-name>/tls.crt and <cert-name>/tls.key\" +\n \"All certificates must be in pem format. Only for use for self-hosted deployments.\",\n hidden: true,\n })\n .boolean(\"verify-remote\")\n .example([\n [\n \"$0 deploy\",\n \"Deploy the current Git branch using the branch name as the environment name\",\n ],\n [\n \"$0 deploy --environment my-env\",\n \"Override the environment name instead of using the Git branch name\",\n ],\n [\n \"$0 deploy --account my-account --project my-project --environment my-env\",\n \"Explicitly specify the account, project, and environment\",\n ],\n ])\n .middleware([\n setBlocking,\n authenticate,\n configure,\n confirmLinkedConfig,\n fetchAccount,\n fetchProject,\n fetchEnvironment,\n identify,\n ]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo deploy\" });\n await deploy(argv as Arguments);\n },\n};\n"]}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/cmds/deploy.ts"],"names":[],"mappings":"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","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { authenticate } from \"../common/middleware/authentication.js\";\nimport { confirmLinkedConfig } from \"../common/middleware/confirm-linked-config.js\";\nimport { confirmProductionDeploy } from \"../common/middleware/confirm-production-deploy.js\";\nimport { fetchAccount } from \"../common/middleware/get-account-param.js\";\nimport {\n fetchEnvironment,\n recordEnvironmentExplicit,\n} from \"../common/middleware/get-environment-param.js\";\nimport { fetchProject } from \"../common/middleware/get-project-param.js\";\nimport { configure } from \"../common/middleware/user-configuration.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport setBlocking from \"../common/output.js\";\nimport { Arguments, deploy } from \"../deploy/handler.js\";\n\nexport default {\n desc: \"Deploys current Git branch of the current directory\",\n command: \"deploy\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 deploy [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .option(\"project\", {\n type: \"string\",\n hidden: true,\n describe: \"The project name\",\n })\n .option(\"account\", {\n type: \"string\",\n describe: \"The account name\",\n })\n .option(\"dir\", {\n type: \"string\",\n describe: \"The directory containing your Zuplo API\",\n default: \".\",\n normalize: true,\n hidden: true,\n })\n .option(\"verify-remote\", {\n deprecated: true,\n type: \"boolean\",\n describe:\n \"Verify that this Git repository matches the one configured on Zuplo. Use --no-verify-remote to disable.\",\n default: false,\n })\n .option(\"environment\", {\n type: \"string\",\n describe:\n \"The value to use for environment name, instead of the current branch name\",\n })\n .option(\"self-hosted-endpoint\", {\n type: \"string\",\n describe: \"The endpoint of your self-hosted service to deploy to\",\n })\n .option(\"override-repo-url\", {\n type: \"string\",\n describe: \"Override the repo url reference\",\n default: undefined,\n hidden: true,\n })\n .option(\"fetch-environments\", {\n type: \"boolean\",\n describe:\n \"Fetch the environments for your project from Zuplo. If this is false, then the environment will automatically be detected from the git branch.\",\n default: false,\n })\n .option(\"mtls-certificates-dir\", {\n type: \"string\",\n describe:\n \"Directory containing mtls certificates to use for the deployment, in the hierarchy that you want them to appear in the runtime. Ex: <cert-name>/tls.crt and <cert-name>/tls.key\" +\n \"All certificates must be in pem format. Only for use for self-hosted deployments.\",\n hidden: true,\n })\n .boolean(\"verify-remote\")\n .example([\n [\n \"$0 deploy\",\n \"Deploy the current Git branch using the branch name as the environment name\",\n ],\n [\n \"$0 deploy --environment my-env\",\n \"Override the environment name instead of using the Git branch name\",\n ],\n [\n \"$0 deploy --account my-account --project my-project --environment my-env\",\n \"Explicitly specify the account, project, and environment\",\n ],\n ])\n .middleware([\n setBlocking,\n authenticate,\n configure,\n confirmLinkedConfig,\n fetchAccount,\n fetchProject,\n recordEnvironmentExplicit,\n fetchEnvironment,\n confirmProductionDeploy,\n identify,\n ]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo deploy\" });\n await deploy(argv as Arguments);\n },\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { Argv } from "yargs";
2
+ declare const _default: {
3
+ desc: string;
4
+ command: string;
5
+ builder: (yargs: Argv) => Argv<unknown>;
6
+ handler: (argv: unknown) => Promise<void>;
7
+ };
8
+ export default _default;
9
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/cmds/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAWV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAMf,OAAO;;AAV/B,wBAqBE"}
@@ -0,0 +1,23 @@
1
+ import { captureEvent } from "../common/analytics/lib.js";
2
+ import setBlocking, { printResultToConsoleAndExitGracefully, } from "../common/output.js";
3
+ import { logout } from "../login/logout.js";
4
+ export default {
5
+ desc: "Logs the current user out if logged in",
6
+ command: "logout",
7
+ builder: (yargs) => {
8
+ return yargs
9
+ .usage("$0 logout")
10
+ .example([["$0 logout", "Remove locally stored Zuplo credentials"]])
11
+ .middleware([setBlocking]);
12
+ },
13
+ handler: async (argv) => {
14
+ await captureEvent({ argv, event: "zuplo logout" });
15
+ const result = await logout();
16
+ if (!result.hadCredentials) {
17
+ await printResultToConsoleAndExitGracefully("You are not currently logged in.");
18
+ return;
19
+ }
20
+ await printResultToConsoleAndExitGracefully("Successfully logged out.");
21
+ },
22
+ };
23
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/cmds/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,WAAW,EAAE,EAClB,qCAAqC,GACtC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,eAAe;IACb,IAAI,EAAE,wCAAwC;IAC9C,OAAO,EAAE,QAAQ;IAEjB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,KAAK,CAAC,WAAW,CAAC;aAClB,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC,CAAC;aACnE,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,qCAAqC,CACzC,kCAAkC,CACnC,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,qCAAqC,CAAC,0BAA0B,CAAC,CAAC;IAC1E,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport setBlocking, {\n printResultToConsoleAndExitGracefully,\n} from \"../common/output.js\";\nimport { logout } from \"../login/logout.js\";\n\nexport default {\n desc: \"Logs the current user out if logged in\",\n command: \"logout\",\n\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 logout\")\n .example([[\"$0 logout\", \"Remove locally stored Zuplo credentials\"]])\n .middleware([setBlocking]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo logout\" });\n const result = await logout();\n if (!result.hadCredentials) {\n await printResultToConsoleAndExitGracefully(\n \"You are not currently logged in.\"\n );\n return;\n }\n await printResultToConsoleAndExitGracefully(\"Successfully logged out.\");\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/cmds/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAUV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAYf,OAAO;;AAf/B,wBAmBE"}
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/cmds/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBASV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAYf,OAAO;;AAf/B,wBAmBE"}
@@ -1,5 +1,4 @@
1
1
  import { captureEvent } from "../common/analytics/lib.js";
2
- import { authenticate } from "../common/middleware/authentication.js";
3
2
  import { identify } from "../common/middleware/user-identification.js";
4
3
  import setBlocking from "../common/output.js";
5
4
  import { whoami } from "../whoami/handler.js";
@@ -16,7 +15,7 @@ export default {
16
15
  alias: "apikey",
17
16
  })
18
17
  .example([["$0 whoami", "Display the currently authenticated user"]])
19
- .middleware([setBlocking, authenticate, identify]);
18
+ .middleware([setBlocking, identify]);
20
19
  },
21
20
  handler: async (argv) => {
22
21
  await captureEvent({ argv, event: "zuplo whoami" });
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/cmds/whoami.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AACvE,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAa,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAe;IACb,IAAI,EAAE,2CAA2C;IACjD,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,KAAK,CAAC,qBAAqB,CAAC;aAC5B,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;SAChB,CAAC;aACD,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC,CAAC;aACpE,UAAU,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,IAAiB,CAAC,CAAC;IAClC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { authenticate } from \"../common/middleware/authentication.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport setBlocking from \"../common/output.js\";\nimport { Arguments, whoami } from \"../whoami/handler.js\";\n\nexport default {\n desc: \"Displays the currently authenticated user\",\n command: \"whoami\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 whoami [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .example([[\"$0 whoami\", \"Display the currently authenticated user\"]])\n .middleware([setBlocking, authenticate, identify]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo whoami\" });\n await whoami(argv as Arguments);\n },\n};\n"]}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/cmds/whoami.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AACvE,OAAO,WAAW,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAa,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAe;IACb,IAAI,EAAE,2CAA2C;IACjD,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,KAAK,CAAC,qBAAqB,CAAC;aAC5B,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,QAAQ;SAChB,CAAC;aACD,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,0CAA0C,CAAC,CAAC,CAAC;aACpE,UAAU,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,CAAC,IAAiB,CAAC,CAAC;IAClC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../common/analytics/lib.js\";\nimport { identify } from \"../common/middleware/user-identification.js\";\nimport setBlocking from \"../common/output.js\";\nimport { Arguments, whoami } from \"../whoami/handler.js\";\n\nexport default {\n desc: \"Displays the currently authenticated user\",\n command: \"whoami\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .usage(\"$0 whoami [options]\")\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n alias: \"apikey\",\n })\n .example([[\"$0 whoami\", \"Display the currently authenticated user\"]])\n .middleware([setBlocking, identify]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo whoami\" });\n await whoami(argv as Arguments);\n },\n};\n"]}
@@ -0,0 +1,4 @@
1
+ export declare function confirmProductionDeploy(argv: {
2
+ [key: string]: unknown;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=confirm-production-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-production-deploy.d.ts","sourceRoot":"","sources":["../../../src/common/middleware/confirm-production-deploy.ts"],"names":[],"mappings":"AA4BA,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IAClD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChB"}
@@ -0,0 +1,49 @@
1
+ import { isProductionBranchName } from "../../deploy/environments.js";
2
+ import { printCancellationToConsoleAndExitGracefully } from "../output.js";
3
+ import { confirmLinkedValue } from "../read-linked-config.js";
4
+ import { isInteractiveTerminal } from "../terminal.js";
5
+ import { ENVIRONMENT_EXPLICIT_KEY, FETCHED_ENVIRONMENTS_KEY, } from "./get-environment-param.js";
6
+ export async function confirmProductionDeploy(argv) {
7
+ if (!isInteractiveTerminal()) {
8
+ return;
9
+ }
10
+ if (argv.prompt === false) {
11
+ return;
12
+ }
13
+ if (argv[ENVIRONMENT_EXPLICIT_KEY] === true) {
14
+ return;
15
+ }
16
+ const environment = argv.environment;
17
+ if (typeof environment !== "string" || environment.length === 0) {
18
+ return;
19
+ }
20
+ if (!isProduction(environment, argv)) {
21
+ return;
22
+ }
23
+ const account = typeof argv.account === "string" ? argv.account : "";
24
+ const project = typeof argv.project === "string" ? argv.project : "";
25
+ const target = project
26
+ ? `'${project}'${account ? ` in account '${account}'` : ""}`
27
+ : "this project";
28
+ const envPhrase = environment === "production"
29
+ ? "the production environment"
30
+ : `the '${environment}' production environment`;
31
+ const confirmed = await confirmLinkedValue(`You are about to deploy to ${envPhrase} of ${target}. Continue?`, { defaultYes: false });
32
+ if (!confirmed) {
33
+ await printCancellationToConsoleAndExitGracefully("Deployment cancelled.");
34
+ }
35
+ }
36
+ function isProduction(environment, argv) {
37
+ if (isProductionBranchName(environment)) {
38
+ return true;
39
+ }
40
+ const cached = argv[FETCHED_ENVIRONMENTS_KEY];
41
+ if (Array.isArray(cached)) {
42
+ const match = cached.find((e) => e.name === environment);
43
+ if (match?.environmentType === "production") {
44
+ return true;
45
+ }
46
+ }
47
+ return false;
48
+ }
49
+ //# sourceMappingURL=confirm-production-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-production-deploy.js","sourceRoot":"","sources":["../../../src/common/middleware/confirm-production-deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAAE,2CAA2C,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAoBpC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAE7C;IACC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,IAAI,IAAI,CAAC,wBAAwB,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO;IACT,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,OAAO;QACpB,CAAC,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,gBAAgB,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5D,CAAC,CAAC,cAAc,CAAC;IAInB,MAAM,SAAS,GACb,WAAW,KAAK,YAAY;QAC1B,CAAC,CAAC,4BAA4B;QAC9B,CAAC,CAAC,QAAQ,WAAW,0BAA0B,CAAC;IAEpD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CACxC,8BAA8B,SAAS,OAAO,MAAM,aAAa,EACjE,EAAE,UAAU,EAAE,KAAK,EAAE,CACtB,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,2CAA2C,CAAC,uBAAuB,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,WAAmB,EACnB,IAAgC;IAEhC,IAAI,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAI,MAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAC5E,IAAI,KAAK,EAAE,eAAe,KAAK,YAAY,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { isProductionBranchName } from \"../../deploy/environments.js\";\nimport type { Environment } from \"../api/lib.js\";\nimport { printCancellationToConsoleAndExitGracefully } from \"../output.js\";\nimport { confirmLinkedValue } from \"../read-linked-config.js\";\nimport { isInteractiveTerminal } from \"../terminal.js\";\nimport {\n ENVIRONMENT_EXPLICIT_KEY,\n FETCHED_ENVIRONMENTS_KEY,\n} from \"./get-environment-param.js\";\n\n/**\n * Middleware that prompts before deploying to a production environment.\n *\n * Fires only when ALL of the following are true:\n * 1. The terminal is interactive (CI/CD is auto-detected and skipped).\n * 2. `--no-prompt` was not passed (consistent with confirmLinkedConfig).\n * 3. `--environment` was not passed (explicit flag is treated as opt-in\n * to whatever environment was named).\n * 4. The resolved environment is \"production\" — either by branch-name\n * heuristic (main/master/production) or by the server-reported\n * environmentType when the environments list is already cached.\n *\n * The branch-name heuristic is a stand-in for the project's real\n * `defaultBranch`, which dev-api does not currently expose to the CLI via a\n * GET endpoint. Tracked as a follow-up.\n *\n * Must run after `fetchEnvironment` so `argv.environment` is resolved.\n */\nexport async function confirmProductionDeploy(argv: {\n [key: string]: unknown;\n}): Promise<void> {\n if (!isInteractiveTerminal()) {\n return;\n }\n if (argv.prompt === false) {\n return;\n }\n if (argv[ENVIRONMENT_EXPLICIT_KEY] === true) {\n return;\n }\n const environment = argv.environment;\n if (typeof environment !== \"string\" || environment.length === 0) {\n return;\n }\n\n if (!isProduction(environment, argv)) {\n return;\n }\n\n const account = typeof argv.account === \"string\" ? argv.account : \"\";\n const project = typeof argv.project === \"string\" ? argv.project : \"\";\n const target = project\n ? `'${project}'${account ? ` in account '${account}'` : \"\"}`\n : \"this project\";\n\n // Avoid the awkward \"'production' production environment\" phrasing when\n // the env name itself is 'production'.\n const envPhrase =\n environment === \"production\"\n ? \"the production environment\"\n : `the '${environment}' production environment`;\n\n const confirmed = await confirmLinkedValue(\n `You are about to deploy to ${envPhrase} of ${target}. Continue?`,\n { defaultYes: false }\n );\n if (!confirmed) {\n await printCancellationToConsoleAndExitGracefully(\"Deployment cancelled.\");\n }\n}\n\nfunction isProduction(\n environment: string,\n argv: { [key: string]: unknown }\n): boolean {\n if (isProductionBranchName(environment)) {\n return true;\n }\n const cached = argv[FETCHED_ENVIRONMENTS_KEY];\n if (Array.isArray(cached)) {\n const match = (cached as Environment[]).find((e) => e.name === environment);\n if (match?.environmentType === \"production\") {\n return true;\n }\n }\n return false;\n}\n"]}
@@ -1,3 +1,9 @@
1
+ export declare const ENVIRONMENT_EXPLICIT_KEY = "environmentExplicit";
2
+ export declare const FETCHED_ENVIRONMENTS_KEY = "fetchedEnvironments";
3
+ export declare function recordEnvironmentExplicit(argv: {
4
+ [key: string]: unknown;
5
+ }): void;
6
+ export declare function hasEnvironmentFlag(args: readonly string[]): boolean;
1
7
  export declare function fetchEnvironment(argv: {
2
8
  [key: string]: unknown;
3
9
  }): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"get-environment-param.d.ts","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.ts"],"names":[],"mappings":"AAaA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,iBA0LtE"}
1
+ {"version":3,"file":"get-environment-param.d.ts","sourceRoot":"","sources":["../../../src/common/middleware/get-environment-param.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAmB9D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,QAEzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CASnE;AAMD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,iBA4LtE"}
@@ -5,6 +5,20 @@ import { printCriticalFailureToConsoleAndExit, textOrJson } from "../output.js";
5
5
  import settings from "../settings.js";
6
6
  import { isInteractiveTerminal } from "../terminal.js";
7
7
  import { buildEnvironmentPromptChoices } from "../utils/build-environment-prompt-choices.js";
8
+ export const ENVIRONMENT_EXPLICIT_KEY = "environmentExplicit";
9
+ export const FETCHED_ENVIRONMENTS_KEY = "fetchedEnvironments";
10
+ export function recordEnvironmentExplicit(argv) {
11
+ argv[ENVIRONMENT_EXPLICIT_KEY] = hasEnvironmentFlag(process.argv);
12
+ }
13
+ export function hasEnvironmentFlag(args) {
14
+ for (let i = 2; i < args.length; i++) {
15
+ const arg = args[i];
16
+ if (arg === "--environment" || arg.startsWith("--environment=")) {
17
+ return true;
18
+ }
19
+ }
20
+ return false;
21
+ }
8
22
  export async function fetchEnvironment(argv) {
9
23
  if (argv.environment && typeof argv.environment === "string") {
10
24
  return;
@@ -69,6 +83,7 @@ export async function fetchEnvironment(argv) {
69
83
  if (environmentJsonFromDeveloperAPI.data.length === 0) {
70
84
  await printCriticalFailureToConsoleAndExit("Error: You don't have any environments for this project to link against. First, deploy this project using zuplo deploy and then link against that.");
71
85
  }
86
+ argv[FETCHED_ENVIRONMENTS_KEY] = environmentJsonFromDeveloperAPI.data;
72
87
  try {
73
88
  argv.environment = await select({
74
89
  message: "Select the environment",