@zuplo/cli 6.63.4 → 6.63.6
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.
- package/dist/cmds/mtls-certificates/create.js +8 -8
- package/dist/cmds/mtls-certificates/create.js.map +1 -1
- package/dist/cmds/mtls-certificates/disable.d.ts +9 -0
- package/dist/cmds/mtls-certificates/disable.d.ts.map +1 -0
- package/dist/cmds/mtls-certificates/disable.js +57 -0
- package/dist/cmds/mtls-certificates/disable.js.map +1 -0
- package/dist/cmds/mtls-certificates/index.d.ts.map +1 -1
- package/dist/cmds/mtls-certificates/index.js +2 -0
- package/dist/cmds/mtls-certificates/index.js.map +1 -1
- package/dist/cmds/mtls-certificates/update.js +8 -8
- package/dist/cmds/mtls-certificates/update.js.map +1 -1
- package/dist/cmds/open-api/overlay.js +1 -1
- package/dist/cmds/open-api/overlay.js.map +1 -1
- package/dist/common/open-api/constants.d.ts +13 -0
- package/dist/common/open-api/constants.d.ts.map +1 -0
- package/dist/common/open-api/constants.js +16 -0
- package/dist/common/open-api/constants.js.map +1 -0
- package/dist/common/open-api/index.d.ts +3 -0
- package/dist/common/open-api/index.d.ts.map +1 -0
- package/dist/common/open-api/index.js +3 -0
- package/dist/common/open-api/index.js.map +1 -0
- package/dist/common/open-api/validation.d.ts +297 -0
- package/dist/common/open-api/validation.d.ts.map +1 -0
- package/dist/common/open-api/validation.js +88 -0
- package/dist/common/open-api/validation.js.map +1 -0
- package/dist/deploy/handler.js +3 -2
- package/dist/deploy/handler.js.map +1 -1
- package/dist/mtls-certificates/create/handler.js +1 -1
- package/dist/mtls-certificates/create/handler.js.map +1 -1
- package/dist/mtls-certificates/describe/handler.js +3 -3
- package/dist/mtls-certificates/describe/handler.js.map +1 -1
- package/dist/mtls-certificates/disable/handler.d.ts +3 -0
- package/dist/mtls-certificates/disable/handler.d.ts.map +1 -0
- package/dist/mtls-certificates/disable/handler.js +32 -0
- package/dist/mtls-certificates/disable/handler.js.map +1 -0
- package/dist/mtls-certificates/list/handler.js +3 -3
- package/dist/mtls-certificates/list/handler.js.map +1 -1
- package/dist/mtls-certificates/models.d.ts +8 -2
- package/dist/mtls-certificates/models.d.ts.map +1 -1
- package/dist/mtls-certificates/models.js.map +1 -1
- package/dist/mtls-certificates/update/handler.js +2 -2
- package/dist/mtls-certificates/update/handler.js.map +1 -1
- package/dist/open-api/merge/merge-engine.d.ts +2 -5
- package/dist/open-api/merge/merge-engine.d.ts.map +1 -1
- package/dist/open-api/merge/merge-engine.js +2 -1
- package/dist/open-api/merge/merge-engine.js.map +1 -1
- package/dist/open-api/merge/utils.d.ts +0 -1
- package/dist/open-api/merge/utils.d.ts.map +1 -1
- package/dist/open-api/merge/utils.js +2 -11
- package/dist/open-api/merge/utils.js.map +1 -1
- package/dist/open-api/overlay/handler.d.ts.map +1 -1
- package/dist/open-api/overlay/handler.js +33 -33
- package/dist/open-api/overlay/handler.js.map +1 -1
- package/dist/open-api/overlay/overlay-engine.d.ts +20 -30
- package/dist/open-api/overlay/overlay-engine.d.ts.map +1 -1
- package/dist/open-api/overlay/overlay-engine.js +75 -46
- package/dist/open-api/overlay/overlay-engine.js.map +1 -1
- package/dist/open-api/overlay/overlay-engine.spec.js +109 -31
- package/dist/open-api/overlay/overlay-engine.spec.js.map +1 -1
- package/dist/source/migrate/dev-portal/handler.d.ts.map +1 -1
- package/dist/source/migrate/dev-portal/handler.js +48 -1
- package/dist/source/migrate/dev-portal/handler.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import semver from "semver";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
const RemoveConditionSchema = z
|
|
4
|
+
.object({
|
|
5
|
+
empty: z.boolean().optional().describe("Remove if object/array is empty"),
|
|
6
|
+
missing: z
|
|
7
|
+
.string()
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Remove if specified property path is missing"),
|
|
10
|
+
})
|
|
11
|
+
.strict()
|
|
12
|
+
.refine((data) => data.empty !== undefined || data.missing !== undefined, {
|
|
13
|
+
message: "Remove condition must specify either 'empty' or 'missing' property",
|
|
14
|
+
});
|
|
15
|
+
const OverlayActionSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
target: z
|
|
18
|
+
.string()
|
|
19
|
+
.min(1, "Action target cannot be empty")
|
|
20
|
+
.startsWith("$", "Action target must be a valid JSONPath starting with '$'")
|
|
21
|
+
.describe("JSONPath expression pointing to the target element(s) in the OpenAPI document"),
|
|
22
|
+
description: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Human-readable description of what this action does"),
|
|
26
|
+
update: z
|
|
27
|
+
.unknown()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("Value to merge/add at the target location"),
|
|
30
|
+
remove: z
|
|
31
|
+
.union([z.boolean(), RemoveConditionSchema])
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("If true or condition met, remove the target element(s)"),
|
|
34
|
+
})
|
|
35
|
+
.strict()
|
|
36
|
+
.refine((data) => (data.update !== undefined) !== (data.remove !== undefined), {
|
|
37
|
+
message: "Action must specify exactly one of 'update' or 'remove' (not both, not neither)",
|
|
38
|
+
path: ["update", "remove"],
|
|
39
|
+
});
|
|
40
|
+
export const OverlayDocumentSchema = z
|
|
41
|
+
.object({
|
|
42
|
+
overlay: z
|
|
43
|
+
.string()
|
|
44
|
+
.refine((value) => semver.valid(value) !== null, "Overlay version must be a valid semver version (e.g., '1.0.0', '1.0.0-alpha.1', '1.0.0+build.123')")
|
|
45
|
+
.describe("Version of the OpenAPI Overlay specification being used"),
|
|
46
|
+
info: z
|
|
47
|
+
.object({
|
|
48
|
+
title: z.string().min(1, "Overlay title cannot be empty"),
|
|
49
|
+
version: z.string().min(1, "Overlay version cannot be empty"),
|
|
50
|
+
})
|
|
51
|
+
.strict()
|
|
52
|
+
.describe("Metadata about this overlay"),
|
|
53
|
+
actions: z
|
|
54
|
+
.array(OverlayActionSchema)
|
|
55
|
+
.min(1, "Overlay must contain at least one action")
|
|
56
|
+
.describe("Array of modifications to apply to the OpenAPI document"),
|
|
57
|
+
extends: z
|
|
58
|
+
.string()
|
|
59
|
+
.optional()
|
|
60
|
+
.describe("URL or path to another overlay to extend"),
|
|
61
|
+
})
|
|
62
|
+
.strict();
|
|
63
|
+
export const OpenApiDocumentSchema = z
|
|
64
|
+
.object({})
|
|
65
|
+
.passthrough()
|
|
66
|
+
.describe("OpenAPI document (lenient validation)");
|
|
67
|
+
export function validateOverlayDocument(value) {
|
|
68
|
+
const result = OverlayDocumentSchema.safeParse(value);
|
|
69
|
+
if (!result.success) {
|
|
70
|
+
const errors = result.error.errors
|
|
71
|
+
.map((err) => {
|
|
72
|
+
const path = err.path.length > 0 ? ` at '${err.path.join(".")}'` : "";
|
|
73
|
+
return ` • ${err.message}${path}`;
|
|
74
|
+
})
|
|
75
|
+
.join("\n");
|
|
76
|
+
throw new Error(`Invalid OpenAPI Overlay document:\n${errors}\n\nThe overlay must conform to the OpenAPI Overlay Specification v1.0.0`);
|
|
77
|
+
}
|
|
78
|
+
return result.data;
|
|
79
|
+
}
|
|
80
|
+
export function validateOpenApiDocument(value) {
|
|
81
|
+
const result = OpenApiDocumentSchema.safeParse(value);
|
|
82
|
+
if (!result.success) {
|
|
83
|
+
throw new Error(`OpenAPI document must be a valid JSON or YAML object. ` +
|
|
84
|
+
`The file appears to be empty or contains invalid data.`);
|
|
85
|
+
}
|
|
86
|
+
return result.data;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/common/open-api/validation.ts"],"names":[],"mappings":"AAKA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,MAAM,qBAAqB,GAAG,CAAC;KAC5B,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACzE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8CAA8C,CAAC;CAC5D,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;IACxE,OAAO,EACL,oEAAoE;CACvE,CAAC,CAAC;AAKL,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;SACvC,UAAU,CACT,GAAG,EACH,0DAA0D,CAC3D;SACA,QAAQ,CACP,+EAA+E,CAChF;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,2CAA2C,CAAC;IACxD,MAAM,EAAE,CAAC;SACN,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;SAC3C,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;CACtE,CAAC;KACD,MAAM,EAAE;KACR,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,EACrE;IACE,OAAO,EACL,iFAAiF;IACnF,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC3B,CACF,CAAC;AAMJ,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,EACvC,oGAAoG,CACrG;SACA,QAAQ,CAAC,yDAAyD,CAAC;IACtE,IAAI,EAAE,CAAC;SACJ,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;QACzD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iCAAiC,CAAC;KAC9D,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,mBAAmB,CAAC;SAC1B,GAAG,CAAC,CAAC,EAAE,0CAA0C,CAAC;SAClD,QAAQ,CAAC,yDAAyD,CAAC;IACtE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0CAA0C,CAAC;CACxD,CAAC;KACD,MAAM,EAAE,CAAC;AAOZ,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC,EAEP,CAAC;KACD,WAAW,EAAE;KACb,QAAQ,CAAC,uCAAuC,CAAC,CAAC;AAcrD,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,OAAO,OAAO,GAAG,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,sCAAsC,MAAM,0EAA0E,CACvH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAQD,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,wDAAwD;YACtD,wDAAwD,CAC3D,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC","sourcesContent":["/**\n * Validation schemas for OpenAPI documents and overlays\n * Using Zod for runtime validation with actionable error messages\n */\n\nimport semver from \"semver\";\nimport { z } from \"zod\";\n\n/**\n * Schema for remove condition - used for conditional removal of elements\n */\nconst RemoveConditionSchema = z\n .object({\n empty: z.boolean().optional().describe(\"Remove if object/array is empty\"),\n missing: z\n .string()\n .optional()\n .describe(\"Remove if specified property path is missing\"),\n })\n .strict()\n .refine((data) => data.empty !== undefined || data.missing !== undefined, {\n message:\n \"Remove condition must specify either 'empty' or 'missing' property\",\n });\n\n/**\n * Schema for overlay action - defines a single modification to apply\n */\nconst OverlayActionSchema = z\n .object({\n target: z\n .string()\n .min(1, \"Action target cannot be empty\")\n .startsWith(\n \"$\",\n \"Action target must be a valid JSONPath starting with '$'\"\n )\n .describe(\n \"JSONPath expression pointing to the target element(s) in the OpenAPI document\"\n ),\n description: z\n .string()\n .optional()\n .describe(\"Human-readable description of what this action does\"),\n update: z\n .unknown()\n .optional()\n .describe(\"Value to merge/add at the target location\"),\n remove: z\n .union([z.boolean(), RemoveConditionSchema])\n .optional()\n .describe(\"If true or condition met, remove the target element(s)\"),\n })\n .strict()\n .refine(\n (data) => (data.update !== undefined) !== (data.remove !== undefined),\n {\n message:\n \"Action must specify exactly one of 'update' or 'remove' (not both, not neither)\",\n path: [\"update\", \"remove\"],\n }\n );\n\n/**\n * Schema for OpenAPI Overlay document\n * Based on: https://github.com/OAI/Overlay-Specification v1.0.0\n */\nexport const OverlayDocumentSchema = z\n .object({\n overlay: z\n .string()\n .refine(\n (value) => semver.valid(value) !== null,\n \"Overlay version must be a valid semver version (e.g., '1.0.0', '1.0.0-alpha.1', '1.0.0+build.123')\"\n )\n .describe(\"Version of the OpenAPI Overlay specification being used\"),\n info: z\n .object({\n title: z.string().min(1, \"Overlay title cannot be empty\"),\n version: z.string().min(1, \"Overlay version cannot be empty\"),\n })\n .strict()\n .describe(\"Metadata about this overlay\"),\n actions: z\n .array(OverlayActionSchema)\n .min(1, \"Overlay must contain at least one action\")\n .describe(\"Array of modifications to apply to the OpenAPI document\"),\n extends: z\n .string()\n .optional()\n .describe(\"URL or path to another overlay to extend\"),\n })\n .strict();\n\n/**\n * Schema for OpenAPI document structure\n * This is intentionally lenient to work with imperfect/incomplete OpenAPI files.\n * The overlay tool is often used to fix incomplete specs, so we shouldn't be too strict.\n */\nexport const OpenApiDocumentSchema = z\n .object({\n // Accept any object - we just need it to be valid JSON/YAML that we can manipulate\n })\n .passthrough()\n .describe(\"OpenAPI document (lenient validation)\");\n\n/**\n * Type exports matching Zod schemas\n */\nexport type OverlayDocument = z.infer<typeof OverlayDocumentSchema>;\nexport type OverlayAction = z.infer<typeof OverlayActionSchema>;\nexport type RemoveCondition = z.infer<typeof RemoveConditionSchema>;\nexport type OpenApiDocument = z.infer<typeof OpenApiDocumentSchema>;\n\n/**\n * Validate an OpenAPI Overlay document\n * @throws {Error} with actionable error message if validation fails\n */\nexport function validateOverlayDocument(value: unknown): OverlayDocument {\n const result = OverlayDocumentSchema.safeParse(value);\n if (!result.success) {\n const errors = result.error.errors\n .map((err) => {\n const path = err.path.length > 0 ? ` at '${err.path.join(\".\")}'` : \"\";\n return ` • ${err.message}${path}`;\n })\n .join(\"\\n\");\n throw new Error(\n `Invalid OpenAPI Overlay document:\\n${errors}\\n\\nThe overlay must conform to the OpenAPI Overlay Specification v1.0.0`\n );\n }\n return result.data;\n}\n\n/**\n * Validate an OpenAPI document\n * This validation is intentionally lenient - we only check that it's a valid object.\n * The overlay tool should work with imperfect OpenAPI files.\n * @throws {Error} if the document is not a valid object\n */\nexport function validateOpenApiDocument(value: unknown): OpenApiDocument {\n const result = OpenApiDocumentSchema.safeParse(value);\n if (!result.success) {\n throw new Error(\n `OpenAPI document must be a valid JSON or YAML object. ` +\n `The file appears to be empty or contains invalid data.`\n );\n }\n return result.data;\n}\n"]}
|
package/dist/deploy/handler.js
CHANGED
|
@@ -177,7 +177,7 @@ function restoreExistingZuploEnvAsNecessary(argv, originalValue) {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
const getPrettyBranch = (branch) => {
|
|
180
|
-
return branch
|
|
180
|
+
return (branch
|
|
181
181
|
.normalize("NFD")
|
|
182
182
|
.replace(/[\u0300-\u036f]/g, "")
|
|
183
183
|
.replace(/([^\w]+|\s+)/g, "-")
|
|
@@ -185,6 +185,7 @@ const getPrettyBranch = (branch) => {
|
|
|
185
185
|
.replace(/(^-+|-+$)/, "")
|
|
186
186
|
.replaceAll("_", "-")
|
|
187
187
|
.toLowerCase()
|
|
188
|
-
.substring(0, MAX_PRETTY_BRANCH_LENGTH)
|
|
188
|
+
.substring(0, MAX_PRETTY_BRANCH_LENGTH)
|
|
189
|
+
.replace(/-$/, ""));
|
|
189
190
|
};
|
|
190
191
|
//# sourceMappingURL=handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport {\n MAX_PRETTY_BRANCH_NAME as MAX_PRETTY_BRANCH_LENGTH,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n printSpinnerToConsole,\n printWarningToConsole,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\nimport { pullSystemConfig } from \"../common/populate.js\";\nimport { archive, generateMetadata } from \"./archive.js\";\nimport {\n UnableToAutoLinkToExistingProject,\n retrieveOrCreateEnvironment,\n} from \"./environments.js\";\nimport { upload } from \"./file-upload.js\";\nimport { pollBuild, pollDeployment } from \"./poll-deployment.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n dir: string;\n environment?: string;\n authToken: string;\n \"verify-remote\"?: boolean;\n \"self-hosted-endpoint\"?: string;\n \"override-repo-url\"?: string;\n}\n\nexport type SelfHostedArgs = RequiredProperties<\n Arguments,\n \"self-hosted-endpoint\"\n>;\n\nexport async function deploy(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await deployToSelfHosted(args);\n } else {\n await deployToSaas(argv);\n }\n}\n\nasync function deployToSaas(argv: Arguments) {\n // 1. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata.tarball}`);\n\n // 2. Build uploadUrl request\n const { account, project } = argv;\n\n const payload = {\n accountName: account,\n projectName: project,\n environment: archiveMetadata.metadata.branch,\n repositoryUrl: archiveMetadata.metadata.repoUrl,\n sha: archiveMetadata.metadata.sha,\n };\n\n const uploadUrlResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/deployments/source-url`,\n {\n method: \"POST\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n body: JSON.stringify(payload),\n }\n );\n\n logger.debug(`Upload URL response: ${uploadUrlResponse.status}`);\n\n if (uploadUrlResponse.ok) {\n // 3. Upload to request URL\n const { uploadUrl, deploymentId } = await uploadUrlResponse.json();\n\n const uploadResponse = await upload({\n tarballPath: archiveMetadata.tarball,\n uploadUrl,\n deploymentId,\n ...payload,\n });\n\n logger.debug(`Upload response: ${uploadResponse.status}`);\n\n if (uploadResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the '${payload.environment}' environment to '${project}' on account '${account}'...`\n );\n\n const { url, logUrl } = await pollDeployment(\n argv,\n deploymentId,\n account,\n project,\n spinner\n );\n if (url) {\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${url}`,\n spinner\n );\n } else {\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the environment ${\n archiveMetadata.metadata.branch\n } to project ${project} on account ${account}.\\nDeployment ID: ${deploymentId}\\nFor more information, check the deployment logs in the Zuplo dashboard.\\n\n ${logUrl}`,\n spinner\n );\n }\n } else {\n logger.error(\n {\n status: uploadResponse.status,\n statusText: uploadResponse.statusText,\n },\n \"Failed to upload source to cloud storage\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to upload deployment source. Please try again.\"\n );\n }\n } else {\n logger.error(\n {\n status: uploadUrlResponse.status,\n statusText: uploadUrlResponse.statusText,\n },\n \"Failed to retrieve uploadUrl\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload deployment source. Please try again.\"\n );\n }\n}\n\nasync function deployToSelfHosted(argv: SelfHostedArgs) {\n const { account, project } = argv;\n\n let existingZuploEnv: string | undefined;\n\n try {\n // 0. Finagle the URL first\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n // 1. Perform the link on-behalf-of-the-user\n // Store the current .env.zuplo if there is one and restore it later\n existingZuploEnv = retrieveExistingZuploEnv(argv);\n const branch = (await generateMetadata(argv)).branch;\n try {\n const environmentToAutoLink = await retrieveOrCreateEnvironment(\n branch,\n argv\n );\n await pullSystemConfig({\n dir: argv.dir,\n environment: environmentToAutoLink.name,\n authToken: argv.authToken,\n });\n } catch (error) {\n if (\n error instanceof UnableToAutoLinkToExistingProject &&\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n process.env.ZUPLO_ALLOW_DEPLOY_WITH_EMPTY_VARS\n ) {\n printWarningToConsole(\n `We are unable to fetch the environment variables from Zuplo for this project. \nDeployment will proceed because ZUPLO_ALLOW_DEPLOY_WITH_EMPTY_VARS is set. \nHowever, the environment variables will not be available. \nTo fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n } else if (error instanceof UnableToAutoLinkToExistingProject) {\n await printCriticalFailureToConsoleAndExit(\n `We are unable to fetch the environment variables from Zuplo for this project. \nTo fix this, check that the project, ${argv.project} exists and this api-key has access to it.\nIf you want to force deployment without the environment variables, set ZUPLO_ALLOW_DEPLOY_WITH_EMPTY_VARS to true.`\n );\n } else {\n logger.error(error, \"Failed to fetch environment variables\");\n await printCriticalFailureToConsoleAndExit(\n `We are unable to fetch the environment variables from Zuplo for this project. \nTo fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n }\n }\n\n // 2. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata.tarball}`);\n\n // 3. Build uploadUrl request\n const form = new FormData();\n const deploymentName = `${project}-${getPrettyBranch(\n archiveMetadata.metadata.branch\n )}`;\n form.set(\n \"file\",\n new Blob([readFileSync(archiveMetadata.tarball)], {\n type: \"application/gzip\",\n })\n );\n form.set(\"projectName\", project);\n form.set(\"deploymentName\", deploymentName);\n\n const uploadUrlResponse = await fetch(`${endpoint}/v1/deployments/build`, {\n method: \"POST\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n body: form,\n });\n\n logger.debug(`Upload URL response: ${uploadUrlResponse.status}`);\n\n if (uploadUrlResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 4. Poll for build\n const { buildName } = await uploadUrlResponse.json();\n\n logger.debug(`Deployment started for ${buildName}`);\n\n const buildResult = await pollBuild(argv, endpoint, buildName, spinner);\n\n if (buildResult.conditionType === \"Complete\") {\n // Retrieve the deployment\n const deploymentResponse = await fetch(\n `${endpoint}/v1/deployments/${deploymentName}`,\n {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n const deploymentJSON: { deploymentUrl: string } =\n await deploymentResponse.json();\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${deploymentJSON.deploymentUrl}`,\n spinner\n );\n } else {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current environment. Here's the diagnostics: ${JSON.stringify(\n buildResult\n )}`,\n spinner\n );\n }\n } else {\n logger.error(\n await uploadUrlResponse.text(),\n \"Failed to upload to self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload to self-hosted build endpoint\"\n );\n }\n } catch (error) {\n logger.error(error);\n } finally {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n }\n}\n\nfunction retrieveExistingZuploEnv(argv: SelfHostedArgs): string | undefined {\n const normalizedDir = resolve(argv.dir);\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n if (existsSync(envFilePath)) {\n const envFileContent = readFileSync(envFilePath, \"utf-8\");\n return envFileContent;\n } else {\n return undefined;\n }\n}\n\nfunction restoreExistingZuploEnvAsNecessary(\n argv: SelfHostedArgs,\n originalValue: string | undefined\n) {\n if (originalValue) {\n const normalizedDir = resolve(argv.dir);\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n writeFileSync(envFilePath, originalValue);\n }\n}\n\nconst getPrettyBranch = (branch: string): string => {\n // https://ricardometring.com/javascript-replace-special-characters\n return branch\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // Remove accents\n .replace(/([^\\w]+|\\s+)/g, \"-\") // Replace space and other characters by hyphen\n .replace(/--+/g, \"-\") // Replaces multiple hyphens by one hyphen\n .replace(/(^-+|-+$)/, \"\") // Remove extra hyphens from beginning or end of the string\n .replaceAll(\"_\", \"-\") // Replace underscores by hyphens (Url hosts cannot have underscores)\n .toLowerCase()\n .substring(0, MAX_PRETTY_BRANCH_LENGTH);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport {\n MAX_PRETTY_BRANCH_NAME as MAX_PRETTY_BRANCH_LENGTH,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n printSpinnerToConsole,\n printWarningToConsole,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\nimport { pullSystemConfig } from \"../common/populate.js\";\nimport { archive, generateMetadata } from \"./archive.js\";\nimport {\n UnableToAutoLinkToExistingProject,\n retrieveOrCreateEnvironment,\n} from \"./environments.js\";\nimport { upload } from \"./file-upload.js\";\nimport { pollBuild, pollDeployment } from \"./poll-deployment.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n dir: string;\n environment?: string;\n authToken: string;\n \"verify-remote\"?: boolean;\n \"self-hosted-endpoint\"?: string;\n \"override-repo-url\"?: string;\n}\n\nexport type SelfHostedArgs = RequiredProperties<\n Arguments,\n \"self-hosted-endpoint\"\n>;\n\nexport async function deploy(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await deployToSelfHosted(args);\n } else {\n await deployToSaas(argv);\n }\n}\n\nasync function deployToSaas(argv: Arguments) {\n // 1. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata.tarball}`);\n\n // 2. Build uploadUrl request\n const { account, project } = argv;\n\n const payload = {\n accountName: account,\n projectName: project,\n environment: archiveMetadata.metadata.branch,\n repositoryUrl: archiveMetadata.metadata.repoUrl,\n sha: archiveMetadata.metadata.sha,\n };\n\n const uploadUrlResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/deployments/source-url`,\n {\n method: \"POST\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n body: JSON.stringify(payload),\n }\n );\n\n logger.debug(`Upload URL response: ${uploadUrlResponse.status}`);\n\n if (uploadUrlResponse.ok) {\n // 3. Upload to request URL\n const { uploadUrl, deploymentId } = await uploadUrlResponse.json();\n\n const uploadResponse = await upload({\n tarballPath: archiveMetadata.tarball,\n uploadUrl,\n deploymentId,\n ...payload,\n });\n\n logger.debug(`Upload response: ${uploadResponse.status}`);\n\n if (uploadResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the '${payload.environment}' environment to '${project}' on account '${account}'...`\n );\n\n const { url, logUrl } = await pollDeployment(\n argv,\n deploymentId,\n account,\n project,\n spinner\n );\n if (url) {\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${url}`,\n spinner\n );\n } else {\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the environment ${\n archiveMetadata.metadata.branch\n } to project ${project} on account ${account}.\\nDeployment ID: ${deploymentId}\\nFor more information, check the deployment logs in the Zuplo dashboard.\\n\n ${logUrl}`,\n spinner\n );\n }\n } else {\n logger.error(\n {\n status: uploadResponse.status,\n statusText: uploadResponse.statusText,\n },\n \"Failed to upload source to cloud storage\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to upload deployment source. Please try again.\"\n );\n }\n } else {\n logger.error(\n {\n status: uploadUrlResponse.status,\n statusText: uploadUrlResponse.statusText,\n },\n \"Failed to retrieve uploadUrl\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload deployment source. Please try again.\"\n );\n }\n}\n\nasync function deployToSelfHosted(argv: SelfHostedArgs) {\n const { account, project } = argv;\n\n let existingZuploEnv: string | undefined;\n\n try {\n // 0. Finagle the URL first\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n // 1. Perform the link on-behalf-of-the-user\n // Store the current .env.zuplo if there is one and restore it later\n existingZuploEnv = retrieveExistingZuploEnv(argv);\n const branch = (await generateMetadata(argv)).branch;\n try {\n const environmentToAutoLink = await retrieveOrCreateEnvironment(\n branch,\n argv\n );\n await pullSystemConfig({\n dir: argv.dir,\n environment: environmentToAutoLink.name,\n authToken: argv.authToken,\n });\n } catch (error) {\n if (\n error instanceof UnableToAutoLinkToExistingProject &&\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n process.env.ZUPLO_ALLOW_DEPLOY_WITH_EMPTY_VARS\n ) {\n printWarningToConsole(\n `We are unable to fetch the environment variables from Zuplo for this project. \nDeployment will proceed because ZUPLO_ALLOW_DEPLOY_WITH_EMPTY_VARS is set. \nHowever, the environment variables will not be available. \nTo fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n } else if (error instanceof UnableToAutoLinkToExistingProject) {\n await printCriticalFailureToConsoleAndExit(\n `We are unable to fetch the environment variables from Zuplo for this project. \nTo fix this, check that the project, ${argv.project} exists and this api-key has access to it.\nIf you want to force deployment without the environment variables, set ZUPLO_ALLOW_DEPLOY_WITH_EMPTY_VARS to true.`\n );\n } else {\n logger.error(error, \"Failed to fetch environment variables\");\n await printCriticalFailureToConsoleAndExit(\n `We are unable to fetch the environment variables from Zuplo for this project. \nTo fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n }\n }\n\n // 2. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata.tarball}`);\n\n // 3. Build uploadUrl request\n const form = new FormData();\n const deploymentName = `${project}-${getPrettyBranch(\n archiveMetadata.metadata.branch\n )}`;\n form.set(\n \"file\",\n new Blob([readFileSync(archiveMetadata.tarball)], {\n type: \"application/gzip\",\n })\n );\n form.set(\"projectName\", project);\n form.set(\"deploymentName\", deploymentName);\n\n const uploadUrlResponse = await fetch(`${endpoint}/v1/deployments/build`, {\n method: \"POST\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n body: form,\n });\n\n logger.debug(`Upload URL response: ${uploadUrlResponse.status}`);\n\n if (uploadUrlResponse.ok) {\n const spinner = printSpinnerToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 4. Poll for build\n const { buildName } = await uploadUrlResponse.json();\n\n logger.debug(`Deployment started for ${buildName}`);\n\n const buildResult = await pollBuild(argv, endpoint, buildName, spinner);\n\n if (buildResult.conditionType === \"Complete\") {\n // Retrieve the deployment\n const deploymentResponse = await fetch(\n `${endpoint}/v1/deployments/${deploymentName}`,\n {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n const deploymentJSON: { deploymentUrl: string } =\n await deploymentResponse.json();\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${deploymentJSON.deploymentUrl}`,\n spinner\n );\n } else {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current environment. Here's the diagnostics: ${JSON.stringify(\n buildResult\n )}`,\n spinner\n );\n }\n } else {\n logger.error(\n await uploadUrlResponse.text(),\n \"Failed to upload to self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload to self-hosted build endpoint\"\n );\n }\n } catch (error) {\n logger.error(error);\n } finally {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n }\n}\n\nfunction retrieveExistingZuploEnv(argv: SelfHostedArgs): string | undefined {\n const normalizedDir = resolve(argv.dir);\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n if (existsSync(envFilePath)) {\n const envFileContent = readFileSync(envFilePath, \"utf-8\");\n return envFileContent;\n } else {\n return undefined;\n }\n}\n\nfunction restoreExistingZuploEnvAsNecessary(\n argv: SelfHostedArgs,\n originalValue: string | undefined\n) {\n if (originalValue) {\n const normalizedDir = resolve(argv.dir);\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n writeFileSync(envFilePath, originalValue);\n }\n}\n\nconst getPrettyBranch = (branch: string): string => {\n // https://ricardometring.com/javascript-replace-special-characters\n return (\n branch\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // Remove accents\n .replace(/([^\\w]+|\\s+)/g, \"-\") // Replace space and other characters by hyphen\n .replace(/--+/g, \"-\") // Replaces multiple hyphens by one hyphen\n .replace(/(^-+|-+$)/, \"\") // Remove extra hyphens from beginning or end of the string\n .replaceAll(\"_\", \"-\") // Replace underscores by hyphens (Url hosts cannot have underscores)\n .toLowerCase()\n .substring(0, MAX_PRETTY_BRANCH_LENGTH)\n // Remove trailing hyphens since this can cause issues with image names in managed dedicated deploys\n .replace(/-$/, \"\")\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/create/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAqB;IAChD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAElC,IAAI,WAAmB,CAAC;IACxB,IAAI,GAAW,CAAC;IAEhB,IAAI,CAAC;QACH,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;QACvD,yBAAyB,CACvB,6CAA6C,IAAI,CAAC,IAAI,EAAE,EACxD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QAC/C,yBAAyB,CACvB,qCAAqC,IAAI,CAAC,GAAG,EAAE,EAC/C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,oBAAoB,EACvG;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW;YACX,GAAG;YACH,YAAY,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/create/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAqB;IAChD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAElC,IAAI,WAAmB,CAAC;IACxB,IAAI,GAAW,CAAC;IAEhB,IAAI,CAAC;QACH,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;QACvD,yBAAyB,CACvB,6CAA6C,IAAI,CAAC,IAAI,EAAE,EACxD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QAC/C,yBAAyB,CACvB,qCAAqC,IAAI,CAAC,GAAG,EAAE,EAC/C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,oBAAoB,EACvG;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW;YACX,GAAG;YACH,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC;SACvC,CAAC;KACH,CACF,CAAC;IAEF,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,GAAoB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,oBAAoB,CAClB,qBAAqB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,wBAAwB,CACpE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,QAAQ,EAAE,OAAO;SAClB,EACD,mCAAmC,CACpC,CAAC;QACF,yBAAyB,CACvB,gEAAgE,EAChE,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printResultToConsole,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { CreateArguments, MtlsCertificate } from \"../models.js\";\n\nexport async function create(argv: CreateArguments) {\n const { account, project } = argv;\n\n let certificate: string;\n let key: string;\n\n try {\n certificate = readFileSync(argv.cert, \"utf-8\");\n } catch (error) {\n logger.error(error, \"Failed to read certificate file\");\n printDiagnosticsToConsole(\n `Error: Failed to read certificate file at ${argv.cert}`,\n error instanceof Error ? error.message : String(error)\n );\n return;\n }\n\n try {\n key = readFileSync(argv.key, \"utf-8\");\n } catch (error) {\n logger.error(error, \"Failed to read key file\");\n printDiagnosticsToConsole(\n `Error: Failed to read key file at ${argv.key}`,\n error instanceof Error ? error.message : String(error)\n );\n return;\n }\n\n const createResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/mtls-certificates`,\n {\n method: \"POST\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n name: argv.name,\n certificate,\n key,\n environments: argv[\"environment-type\"],\n }),\n }\n );\n\n if (createResponse.ok) {\n const cert: MtlsCertificate = await createResponse.json();\n printResultToConsole(\n `mTLS certificate '${cert.name}' (${cert.id}) created successfully`\n );\n } else {\n const problem = textOrJson(await createResponse.text());\n logger.error(\n {\n status: createResponse.status,\n statusText: createResponse.statusText,\n response: problem,\n },\n \"Failed to create mTLS certificate\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to create mTLS certificate. Check the arguments.\",\n problem\n );\n }\n}\n"]}
|
|
@@ -20,9 +20,9 @@ export async function describe(argv) {
|
|
|
20
20
|
printResultToConsole(` ID: ${cert.id}\n` +
|
|
21
21
|
` Name: ${cert.name}\n` +
|
|
22
22
|
` Subject: ${subject}\n` +
|
|
23
|
-
` Valid
|
|
24
|
-
` Valid
|
|
25
|
-
`
|
|
23
|
+
` Valid from: ${cert.certificateInfo.validFrom}\n` +
|
|
24
|
+
` Valid to: ${cert.certificateInfo.validTo}\n` +
|
|
25
|
+
` Environment types: ${envs}`);
|
|
26
26
|
}
|
|
27
27
|
else {
|
|
28
28
|
const problem = textOrJson(await describeResponse.text());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/describe/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAuB;IACpD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAE/B,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAClC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACrI;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CACF,CAAC;IAEF,IAAI,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,GAAoB,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAE5D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;aAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;aACnB,IAAI,CAAC,IAAI,CAAC,CAAC;QAGd,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAElE,oBAAoB,CAClB,SAAS,IAAI,CAAC,EAAE,IAAI;YAClB,WAAW,IAAI,CAAC,IAAI,IAAI;YACxB,cAAc,OAAO,IAAI;YACzB,iBAAiB,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI;YACnD,eAAe,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI;YAC/C,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/describe/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAuB;IACpD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAE/B,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAClC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACrI;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CACF,CAAC;IAEF,IAAI,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,GAAoB,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAE5D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;aAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;aACnB,IAAI,CAAC,IAAI,CAAC,CAAC;QAGd,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAElE,oBAAoB,CAClB,SAAS,IAAI,CAAC,EAAE,IAAI;YAClB,WAAW,IAAI,CAAC,IAAI,IAAI;YACxB,cAAc,OAAO,IAAI;YACzB,iBAAiB,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI;YACnD,eAAe,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI;YAC/C,wBAAwB,IAAI,EAAE,CACjC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,UAAU,EAAE,gBAAgB,CAAC,UAAU;YACvC,QAAQ,EAAE,OAAO;SAClB,EACD,qCAAqC,CACtC,CAAC;QACF,yBAAyB,CACvB,6CAA6C,EAC7C,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printResultToConsole,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { DescribeArguments, MtlsCertificate } from \"../models.js\";\n\nexport async function describe(argv: DescribeArguments) {\n const { account, project } = argv;\n const certId = argv[\"cert-id\"];\n\n const describeResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/mtls-certificates/${encodeURIComponent(certId)}`,\n {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n\n if (describeResponse.ok) {\n const cert: MtlsCertificate = await describeResponse.json();\n\n const envs = Object.entries(cert.environments)\n .filter(([, enabled]) => enabled)\n .map(([env]) => env)\n .join(\", \");\n\n // Replace newlines in subject with comma-space for cleaner display\n const subject = cert.certificateInfo.subject.replace(/\\n/g, \", \");\n\n printResultToConsole(\n ` ID: ${cert.id}\\n` +\n ` Name: ${cert.name}\\n` +\n ` Subject: ${subject}\\n` +\n ` Valid from: ${cert.certificateInfo.validFrom}\\n` +\n ` Valid to: ${cert.certificateInfo.validTo}\\n` +\n ` Environment types: ${envs}`\n );\n } else {\n const problem = textOrJson(await describeResponse.text());\n logger.error(\n {\n status: describeResponse.status,\n statusText: describeResponse.statusText,\n response: problem,\n },\n \"Failed to describe mTLS certificate\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to describe mTLS certificate.\",\n problem\n );\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/mtls-certificates/disable/handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,cAAc,CAAC;AAEjE,wBAAsB,OAAO,CAAC,IAAI,EAAE,gBAAgB,iBAyCnD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { logger } from "../../common/logger.js";
|
|
2
|
+
import { printDiagnosticsToConsole, printResultToConsole, textOrJson, } from "../../common/output.js";
|
|
3
|
+
import settings from "../../common/settings.js";
|
|
4
|
+
export async function disable(argv) {
|
|
5
|
+
const { account, project } = argv;
|
|
6
|
+
const certId = argv["cert-id"];
|
|
7
|
+
const disableResponse = await fetch(`${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/mtls-certificates/${encodeURIComponent(certId)}`, {
|
|
8
|
+
method: "PATCH",
|
|
9
|
+
headers: {
|
|
10
|
+
Authorization: `Bearer ${argv.authToken}`,
|
|
11
|
+
"Content-Type": "application/json",
|
|
12
|
+
},
|
|
13
|
+
body: JSON.stringify({
|
|
14
|
+
environments: [],
|
|
15
|
+
}),
|
|
16
|
+
});
|
|
17
|
+
if (disableResponse.ok) {
|
|
18
|
+
const cert = await disableResponse.json();
|
|
19
|
+
printResultToConsole(`mTLS certificate '${cert.name}' (${cert.id}) disabled successfully\n` +
|
|
20
|
+
`Certificate is now disabled for all environment types`);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const problem = textOrJson(await disableResponse.text());
|
|
24
|
+
logger.error({
|
|
25
|
+
status: disableResponse.status,
|
|
26
|
+
statusText: disableResponse.statusText,
|
|
27
|
+
response: problem,
|
|
28
|
+
}, "Failed to disable mTLS certificate");
|
|
29
|
+
printDiagnosticsToConsole("Error: Failed to disable mTLS certificate.", problem);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/disable/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAsB;IAClD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAE/B,MAAM,eAAe,GAAG,MAAM,KAAK,CACjC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACrI;QACE,MAAM,EAAE,OAAO;QACf,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,YAAY,EAAE,EAAE;SACjB,CAAC;KACH,CACF,CAAC;IAEF,IAAI,eAAe,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,GAAoB,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;QAE3D,oBAAoB,CAClB,qBAAqB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,2BAA2B;YACpE,uDAAuD,CAC1D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,eAAe,CAAC,MAAM;YAC9B,UAAU,EAAE,eAAe,CAAC,UAAU;YACtC,QAAQ,EAAE,OAAO;SAClB,EACD,oCAAoC,CACrC,CAAC;QACF,yBAAyB,CACvB,4CAA4C,EAC5C,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printResultToConsole,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { DisableArguments, MtlsCertificate } from \"../models.js\";\n\nexport async function disable(argv: DisableArguments) {\n const { account, project } = argv;\n const certId = argv[\"cert-id\"];\n\n const disableResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/mtls-certificates/${encodeURIComponent(certId)}`,\n {\n method: \"PATCH\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n environments: [],\n }),\n }\n );\n\n if (disableResponse.ok) {\n const cert: MtlsCertificate = await disableResponse.json();\n\n printResultToConsole(\n `mTLS certificate '${cert.name}' (${cert.id}) disabled successfully\\n` +\n `Certificate is now disabled for all environment types`\n );\n } else {\n const problem = textOrJson(await disableResponse.text());\n logger.error(\n {\n status: disableResponse.status,\n statusText: disableResponse.statusText,\n response: problem,\n },\n \"Failed to disable mTLS certificate\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to disable mTLS certificate.\",\n problem\n );\n }\n}\n"]}
|
|
@@ -25,9 +25,9 @@ export async function list(argv) {
|
|
|
25
25
|
printResultToConsole(` ID: ${cert.id}\n` +
|
|
26
26
|
` Name: ${cert.name}\n` +
|
|
27
27
|
` Subject: ${subject}\n` +
|
|
28
|
-
` Valid
|
|
29
|
-
` Valid
|
|
30
|
-
`
|
|
28
|
+
` Valid from: ${cert.certificateInfo.validFrom}\n` +
|
|
29
|
+
` Valid to: ${cert.certificateInfo.validTo}\n` +
|
|
30
|
+
` Environment types: ${envs}\n`);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/list/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAmB;IAC5C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAElC,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,oBAAoB,EACvG;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CACF,CAAC;IAEF,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAgC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAExE,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,oBAAoB,CAClB,SAAS,QAAQ,CAAC,IAAI,CAAC,MAAM,yBAAyB,CACvD,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;iBAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;iBACnB,IAAI,CAAC,IAAI,CAAC,CAAC;YAGd,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAElE,oBAAoB,CAClB,SAAS,IAAI,CAAC,EAAE,IAAI;gBAClB,WAAW,IAAI,CAAC,IAAI,IAAI;gBACxB,cAAc,OAAO,IAAI;gBACzB,iBAAiB,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI;gBACnD,eAAe,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI;gBAC/C,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/list/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAmB;IAC5C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAElC,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,oBAAoB,EACvG;QACE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;SAC1C;KACF,CACF,CAAC;IAEF,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAgC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAExE,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAED,oBAAoB,CAClB,SAAS,QAAQ,CAAC,IAAI,CAAC,MAAM,yBAAyB,CACvD,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;iBAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;iBACnB,IAAI,CAAC,IAAI,CAAC,CAAC;YAGd,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAElE,oBAAoB,CAClB,SAAS,IAAI,CAAC,EAAE,IAAI;gBAClB,WAAW,IAAI,CAAC,IAAI,IAAI;gBACxB,cAAc,OAAO,IAAI;gBACzB,iBAAiB,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI;gBACnD,eAAe,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI;gBAC/C,wBAAwB,IAAI,IAAI,CACnC,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,QAAQ,EAAE,OAAO;SAClB,EACD,kCAAkC,CACnC,CAAC;QACF,yBAAyB,CACvB,0CAA0C,EAC1C,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printResultToConsole,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { ListArguments, MtlsCertificateListResponse } from \"../models.js\";\n\nexport async function list(argv: ListArguments) {\n const { account, project } = argv;\n\n const listResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/mtls-certificates`,\n {\n method: \"GET\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n\n if (listResponse.ok) {\n const response: MtlsCertificateListResponse = await listResponse.json();\n\n if (response.data.length === 0) {\n printResultToConsole(\"No mTLS certificates found\");\n return;\n }\n\n printResultToConsole(\n `Found ${response.data.length} mTLS certificate(s):\\n`\n );\n\n for (const cert of response.data) {\n const envs = Object.entries(cert.environments)\n .filter(([, enabled]) => enabled)\n .map(([env]) => env)\n .join(\", \");\n\n // Replace newlines in subject with comma-space for cleaner display\n const subject = cert.certificateInfo.subject.replace(/\\n/g, \", \");\n\n printResultToConsole(\n ` ID: ${cert.id}\\n` +\n ` Name: ${cert.name}\\n` +\n ` Subject: ${subject}\\n` +\n ` Valid from: ${cert.certificateInfo.validFrom}\\n` +\n ` Valid to: ${cert.certificateInfo.validTo}\\n` +\n ` Environment types: ${envs}\\n`\n );\n }\n } else {\n const problem = textOrJson(await listResponse.text());\n logger.error(\n {\n status: listResponse.status,\n statusText: listResponse.statusText,\n response: problem,\n },\n \"Failed to list mTLS certificates\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to list mTLS certificates.\",\n problem\n );\n }\n}\n"]}
|
|
@@ -30,7 +30,7 @@ export interface CreateArguments {
|
|
|
30
30
|
name: string;
|
|
31
31
|
cert: string;
|
|
32
32
|
key: string;
|
|
33
|
-
environment: string[];
|
|
33
|
+
"environment-type": string[];
|
|
34
34
|
}
|
|
35
35
|
export interface ListArguments {
|
|
36
36
|
account: string;
|
|
@@ -48,7 +48,7 @@ export interface UpdateArguments {
|
|
|
48
48
|
project: string;
|
|
49
49
|
authToken: string;
|
|
50
50
|
"cert-id": string;
|
|
51
|
-
environment: string[];
|
|
51
|
+
"environment-type": string[];
|
|
52
52
|
}
|
|
53
53
|
export interface DeleteArguments {
|
|
54
54
|
account: string;
|
|
@@ -56,4 +56,10 @@ export interface DeleteArguments {
|
|
|
56
56
|
authToken: string;
|
|
57
57
|
"cert-id": string;
|
|
58
58
|
}
|
|
59
|
+
export interface DisableArguments {
|
|
60
|
+
account: string;
|
|
61
|
+
project: string;
|
|
62
|
+
authToken: string;
|
|
63
|
+
"cert-id": string;
|
|
64
|
+
}
|
|
59
65
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/mtls-certificates/models.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/mtls-certificates/models.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/mtls-certificates/models.ts"],"names":[],"mappings":"","sourcesContent":["export interface CertificateInfo {\n subject: string;\n issuer: string;\n validFrom: string;\n validTo: string;\n serialNumber: string;\n}\n\nexport interface Environments {\n development: boolean;\n preview: boolean;\n production: boolean;\n}\n\nexport interface MtlsCertificate {\n id: string;\n name: string;\n certificateInfo: CertificateInfo;\n environments: Environments;\n createdOn: string;\n updatedOn: string;\n}\n\nexport interface MtlsCertificateListResponse {\n data: MtlsCertificate[];\n offset: number;\n limit: number;\n}\n\nexport interface CreateArguments {\n account: string;\n project: string;\n authToken: string;\n name: string;\n cert: string;\n key: string;\n environment: string[];\n}\n\nexport interface ListArguments {\n account: string;\n project: string;\n authToken: string;\n}\n\nexport interface DescribeArguments {\n account: string;\n project: string;\n authToken: string;\n \"cert-id\": string;\n}\n\nexport interface UpdateArguments {\n account: string;\n project: string;\n authToken: string;\n \"cert-id\": string;\n environment: string[];\n}\n\nexport interface DeleteArguments {\n account: string;\n project: string;\n authToken: string;\n \"cert-id\": string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/mtls-certificates/models.ts"],"names":[],"mappings":"","sourcesContent":["export interface CertificateInfo {\n subject: string;\n issuer: string;\n validFrom: string;\n validTo: string;\n serialNumber: string;\n}\n\nexport interface Environments {\n development: boolean;\n preview: boolean;\n production: boolean;\n}\n\nexport interface MtlsCertificate {\n id: string;\n name: string;\n certificateInfo: CertificateInfo;\n environments: Environments;\n createdOn: string;\n updatedOn: string;\n}\n\nexport interface MtlsCertificateListResponse {\n data: MtlsCertificate[];\n offset: number;\n limit: number;\n}\n\nexport interface CreateArguments {\n account: string;\n project: string;\n authToken: string;\n name: string;\n cert: string;\n key: string;\n \"environment-type\": string[];\n}\n\nexport interface ListArguments {\n account: string;\n project: string;\n authToken: string;\n}\n\nexport interface DescribeArguments {\n account: string;\n project: string;\n authToken: string;\n \"cert-id\": string;\n}\n\nexport interface UpdateArguments {\n account: string;\n project: string;\n authToken: string;\n \"cert-id\": string;\n \"environment-type\": string[];\n}\n\nexport interface DeleteArguments {\n account: string;\n project: string;\n authToken: string;\n \"cert-id\": string;\n}\n\nexport interface DisableArguments {\n account: string;\n project: string;\n authToken: string;\n \"cert-id\": string;\n}\n"]}
|
|
@@ -11,7 +11,7 @@ export async function update(argv) {
|
|
|
11
11
|
"Content-Type": "application/json",
|
|
12
12
|
},
|
|
13
13
|
body: JSON.stringify({
|
|
14
|
-
environments: argv
|
|
14
|
+
environments: argv["environment-type"],
|
|
15
15
|
}),
|
|
16
16
|
});
|
|
17
17
|
if (updateResponse.ok) {
|
|
@@ -21,7 +21,7 @@ export async function update(argv) {
|
|
|
21
21
|
.map(([env]) => env)
|
|
22
22
|
.join(", ");
|
|
23
23
|
printResultToConsole(`mTLS certificate '${cert.name}' (${cert.id}) updated successfully\n` +
|
|
24
|
-
`
|
|
24
|
+
`Environment types: ${envs}`);
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
27
|
const problem = textOrJson(await updateResponse.text());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/update/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAqB;IAChD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACrI;QACE,MAAM,EAAE,OAAO;QACf,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,YAAY,EAAE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/mtls-certificates/update/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAGhD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAqB;IAChD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,GAAG,QAAQ,CAAC,4BAA4B,gBAAgB,OAAO,aAAa,OAAO,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,EACrI;QACE,MAAM,EAAE,OAAO;QACf,OAAO,EAAE;YAEP,aAAa,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE;YACzC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC;SACvC,CAAC;KACH,CACF,CAAC;IAEF,IAAI,cAAc,CAAC,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,GAAoB,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QAE1D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;aAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;aACnB,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,oBAAoB,CAClB,qBAAqB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,0BAA0B;YACnE,sBAAsB,IAAI,EAAE,CAC/B,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CACV;YACE,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,QAAQ,EAAE,OAAO;SAClB,EACD,mCAAmC,CACpC,CAAC;QACF,yBAAyB,CACvB,2CAA2C,EAC3C,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { logger } from \"../../common/logger.js\";\nimport {\n printDiagnosticsToConsole,\n printResultToConsole,\n textOrJson,\n} from \"../../common/output.js\";\nimport settings from \"../../common/settings.js\";\nimport { MtlsCertificate, UpdateArguments } from \"../models.js\";\n\nexport async function update(argv: UpdateArguments) {\n const { account, project } = argv;\n const certId = argv[\"cert-id\"];\n\n const updateResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/accounts/${account}/projects/${project}/mtls-certificates/${encodeURIComponent(certId)}`,\n {\n method: \"PATCH\",\n headers: {\n // biome-ignore lint/style/useNamingConvention: External API property\n Authorization: `Bearer ${argv.authToken}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n environments: argv[\"environment-type\"],\n }),\n }\n );\n\n if (updateResponse.ok) {\n const cert: MtlsCertificate = await updateResponse.json();\n\n const envs = Object.entries(cert.environments)\n .filter(([, enabled]) => enabled)\n .map(([env]) => env)\n .join(\", \");\n\n printResultToConsole(\n `mTLS certificate '${cert.name}' (${cert.id}) updated successfully\\n` +\n `Environment types: ${envs}`\n );\n } else {\n const problem = textOrJson(await updateResponse.text());\n logger.error(\n {\n status: updateResponse.status,\n statusText: updateResponse.statusText,\n response: problem,\n },\n \"Failed to update mTLS certificate\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to update mTLS certificate.\",\n problem\n );\n }\n}\n"]}
|
|
@@ -3,12 +3,9 @@ import {
|
|
|
3
3
|
detectFormatFromExtension,
|
|
4
4
|
type FileFormat,
|
|
5
5
|
} from "../../common/file-format.js";
|
|
6
|
+
import { OPEN_API_FILE_TYPES } from "../../common/open-api/index.js";
|
|
6
7
|
import type { ZuploOpenApiDocument } from "./interfaces.js";
|
|
7
|
-
import {
|
|
8
|
-
OPEN_API_FILE_TYPES,
|
|
9
|
-
addOperationIdsAsNecessary,
|
|
10
|
-
parseOpenApiFile,
|
|
11
|
-
} from "./utils.js";
|
|
8
|
+
import { addOperationIdsAsNecessary, parseOpenApiFile } from "./utils.js";
|
|
12
9
|
export type MergeMode = "path-method" | "operation-id";
|
|
13
10
|
export type { ZuploOpenApiDocument, FileFormat };
|
|
14
11
|
export { OPEN_API_FILE_TYPES, addOperationIdsAsNecessary, parseOpenApiFile };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-engine.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/merge-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,6BAA6B,EACxD,yBAAyB,EACzB,KAAK,UAAU,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"merge-engine.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/merge-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,6BAA6B,EACxD,yBAAyB,EACzB,KAAK,UAAU,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,cAAc,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAGjD,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,CAAC;AAG7E,OAAO,EACL,yBAAyB,IAAI,YAAY,EACzC,6BAA6B,IAAI,uBAAuB,GACzD,CAAC;AAEF,eAAO,MAAM,aAAa,8IAUzB,CAAC;AAKF,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAO7C;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAOxD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { detectFormatFromContent as detectFormatFromContentCommon, detectFormatFromExtension, } from "../../common/file-format.js";
|
|
2
|
-
import { OPEN_API_FILE_TYPES
|
|
2
|
+
import { OPEN_API_FILE_TYPES } from "../../common/open-api/index.js";
|
|
3
|
+
import { addOperationIdsAsNecessary, parseOpenApiFile } from "./utils.js";
|
|
3
4
|
export { OPEN_API_FILE_TYPES, addOperationIdsAsNecessary, parseOpenApiFile };
|
|
4
5
|
export { detectFormatFromExtension as detectFormat, detectFormatFromContentCommon as detectFormatFromContent, };
|
|
5
6
|
export const BASE_TEMPLATE = `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-engine.js","sourceRoot":"","sources":["../../../src/open-api/merge/merge-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,6BAA6B,EACxD,yBAAyB,GAE1B,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"merge-engine.js","sourceRoot":"","sources":["../../../src/open-api/merge/merge-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,IAAI,6BAA6B,EACxD,yBAAyB,GAE1B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAM1E,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,CAAC;AAG7E,OAAO,EACL,yBAAyB,IAAI,YAAY,EACzC,6BAA6B,IAAI,uBAAuB,GACzD,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;CAU5B,CAAC;AAKF,MAAM,UAAU,KAAK,CAAC,MAAc;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ;SAChC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,EAAE;QACN,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC7B,OAAO,QAAQ,IAAI,YAAY,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvE,CAAC","sourcesContent":["import {\n detectFormatFromContent as detectFormatFromContentCommon,\n detectFormatFromExtension,\n type FileFormat,\n} from \"../../common/file-format.js\";\nimport { OPEN_API_FILE_TYPES } from \"../../common/open-api/index.js\";\nimport type { ZuploOpenApiDocument } from \"./interfaces.js\";\nimport { addOperationIdsAsNecessary, parseOpenApiFile } from \"./utils.js\";\n\nexport type MergeMode = \"path-method\" | \"operation-id\";\nexport type { ZuploOpenApiDocument, FileFormat };\n\n// Re-export utilities\nexport { OPEN_API_FILE_TYPES, addOperationIdsAsNecessary, parseOpenApiFile };\n\n// Re-export common file format functions for backward compatibility\nexport {\n detectFormatFromExtension as detectFormat,\n detectFormatFromContentCommon as detectFormatFromContent,\n};\n\nexport const BASE_TEMPLATE = `\n{\n \"openapi\": \"3.1.0\",\n \"info\": {\n \"version\": \"1.0.0\",\n \"title\": \"My Zuplo API\"\n },\n \"paths\": {}\n}\n\n`;\n\n/**\n * Detect if source is a URL\n */\nexport function isUrl(source: string): boolean {\n try {\n new URL(source);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Guess file name from URL\n */\nexport function guessFileNameFromUrl(url: string): string {\n const parsedUrl = new URL(url);\n const basename = parsedUrl.pathname\n .split(\"/\")\n .pop()\n ?.replace(/\\.[^/.]+$/, \"\");\n return basename || `imported-${Buffer.from(url).toString(\"base64\")}`;\n}\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { OpenAPIV3_1 } from "openapi-types";
|
|
2
2
|
import { ZuploOpenApiDocument } from "./interfaces.js";
|
|
3
3
|
export declare const OPERATION_PATH_MERGE_DELIMITER = ">";
|
|
4
|
-
export declare const OPEN_API_FILE_TYPES: string[];
|
|
5
4
|
export declare const parseOpenApiFile: (
|
|
6
5
|
extName: string,
|
|
7
6
|
fileText: string
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/open-api/merge/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,eAAO,MAAM,gBAAgB,GAAU,SAAS,MAAM,EAAE,UAAU,MAAM,6DAYvE,CAAC;AAMF,eAAO,MAAM,0BAA0B,GACrC,SAAS,WAAW,CAAC,QAAQ,GAAG,oBAAoB,SAmBrD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import yaml from "js-yaml";
|
|
2
2
|
import { v4 } from "uuid";
|
|
3
|
+
import { OPEN_API_FILE_TYPES, HTTP_METHODS, } from "../../common/open-api/index.js";
|
|
3
4
|
export const OPERATION_PATH_MERGE_DELIMITER = ">";
|
|
4
|
-
export const OPEN_API_FILE_TYPES = [".json", ".yml", ".yaml"];
|
|
5
5
|
export const parseOpenApiFile = async (extName, fileText) => {
|
|
6
6
|
if (!OPEN_API_FILE_TYPES.includes(extName)) {
|
|
7
7
|
throw new Error(`Invalid file type. Supported file types are: ${OPEN_API_FILE_TYPES.join(", ")}`);
|
|
@@ -21,16 +21,7 @@ export const addOperationIdsAsNecessary = (openApi) => {
|
|
|
21
21
|
if (!pathItem) {
|
|
22
22
|
continue;
|
|
23
23
|
}
|
|
24
|
-
const methods =
|
|
25
|
-
"get",
|
|
26
|
-
"put",
|
|
27
|
-
"post",
|
|
28
|
-
"delete",
|
|
29
|
-
"options",
|
|
30
|
-
"head",
|
|
31
|
-
"patch",
|
|
32
|
-
"trace",
|
|
33
|
-
];
|
|
24
|
+
const methods = HTTP_METHODS;
|
|
34
25
|
for (const method of methods) {
|
|
35
26
|
const operation = pathItem[method];
|
|
36
27
|
if (operation && !operation.operationId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/open-api/merge/utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/open-api/merge/utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,YAAY,GACb,MAAM,gCAAgC,CAAC;AAGxC,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;IAC1E,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,gDAAgD,mBAAmB,CAAC,IAAI,CACtE,IAAI,CACL,EAAE,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAgD,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAgD,CAAC;AAC5E,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAoD,EACpD,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,YAAoD,CAAC;QACrE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;gBACxC,SAAS,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["import yaml from \"js-yaml\";\nimport { OpenAPIV3_1 } from \"openapi-types\";\nimport { v4 } from \"uuid\";\nimport {\n OPEN_API_FILE_TYPES,\n HTTP_METHODS,\n} from \"../../common/open-api/index.js\";\nimport { ZuploOpenApiDocument } from \"./interfaces.js\";\n\nexport const OPERATION_PATH_MERGE_DELIMITER = \">\";\n\nexport const parseOpenApiFile = async (extName: string, fileText: string) => {\n if (!OPEN_API_FILE_TYPES.includes(extName)) {\n throw new Error(\n `Invalid file type. Supported file types are: ${OPEN_API_FILE_TYPES.join(\n \", \"\n )}`\n );\n }\n if (extName.includes(\"json\")) {\n return JSON.parse(fileText) as OpenAPIV3_1.Document | ZuploOpenApiDocument;\n }\n return yaml.load(fileText) as OpenAPIV3_1.Document | ZuploOpenApiDocument;\n};\n\n/**\n * Add operation ID to any operations that don't have one, this makes\n * onboarding smoother for new users\n */\nexport const addOperationIdsAsNecessary = (\n openApi: OpenAPIV3_1.Document | ZuploOpenApiDocument\n) => {\n const paths = openApi.paths;\n if (!paths) {\n return;\n }\n for (const path of Object.keys(paths)) {\n const pathItem = paths[path];\n if (!pathItem) {\n continue;\n }\n const methods = HTTP_METHODS as unknown as OpenAPIV3_1.HttpMethods[];\n for (const method of methods) {\n const operation = pathItem[method];\n if (operation && !operation.operationId) {\n operation.operationId = v4();\n }\n }\n }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/open-api/overlay/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/open-api/overlay/handler.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA6CD,wBAAsB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFjE"}
|