@pipeline-builder/pipeline-manager 3.3.29 → 3.3.30

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.
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ // Copyright 2026 Pipeline Builder Contributors
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.PENDING_INTENTS_DIR = void 0;
6
+ exports.buildRegistryPayload = buildRegistryPayload;
7
+ exports.writePendingIntent = writePendingIntent;
8
+ exports.clearPendingIntent = clearPendingIntent;
9
+ exports.readPendingIntents = readPendingIntents;
10
+ const crypto_1 = require("crypto");
11
+ const fs_1 = require("fs");
12
+ const os_1 = require("os");
13
+ const path_1 = require("path");
14
+ const client_sts_1 = require("@aws-sdk/client-sts");
15
+ /** Where pending registration intents are persisted between CLI invocations. */
16
+ exports.PENDING_INTENTS_DIR = (0, path_1.join)((0, os_1.homedir)(), '.pipeline-manager', 'pending-registrations');
17
+ /**
18
+ * Build a RegistryPayload from the platform's pipeline metadata. Reaches out
19
+ * to STS to discover the AWS account, hashes it, and constructs the ARN.
20
+ *
21
+ * The hash is the same one applied server-side as defense in depth — raw AWS
22
+ * account numbers must never reach the platform DB.
23
+ */
24
+ async function buildRegistryPayload(pipeline, regionOverride) {
25
+ const region = regionOverride
26
+ || process.env.AWS_REGION
27
+ || process.env.CDK_DEFAULT_REGION
28
+ || 'us-east-1';
29
+ const stsClient = new client_sts_1.STSClient({ region });
30
+ const identity = await stsClient.send(new client_sts_1.GetCallerIdentityCommand({}));
31
+ const account = identity.Account ?? '';
32
+ if (!account) {
33
+ throw new Error('Could not determine AWS account from STS — check AWS credentials');
34
+ }
35
+ const hashedAccount = (0, crypto_1.createHash)('sha256').update(account).digest('hex').slice(0, 12);
36
+ const pipelineName = pipeline.pipelineName
37
+ || `${pipeline.organization}-${pipeline.project}-pipeline`.toLowerCase();
38
+ const pipelineArn = `arn:aws:codepipeline:${region}:${hashedAccount}:${pipelineName}`;
39
+ const stackName = `${pipeline.project}-${pipeline.organization}`.toLowerCase();
40
+ return {
41
+ pipelineId: pipeline.id,
42
+ orgId: pipeline.orgId,
43
+ pipelineArn,
44
+ pipelineName,
45
+ accountId: hashedAccount,
46
+ region,
47
+ project: pipeline.project,
48
+ organization: pipeline.organization,
49
+ stackName,
50
+ };
51
+ }
52
+ /**
53
+ * Persist a registration intent for later retry.
54
+ *
55
+ * Intent files are keyed by pipelineId so re-running deploy on the same
56
+ * pipeline overwrites rather than accumulates. We deliberately store the
57
+ * payload plain (not the full pipeline doc, not auth) so a stale file is
58
+ * safe to leave around indefinitely.
59
+ */
60
+ async function writePendingIntent(payload) {
61
+ await fs_1.promises.mkdir(exports.PENDING_INTENTS_DIR, { recursive: true });
62
+ const path = (0, path_1.join)(exports.PENDING_INTENTS_DIR, `${payload.pipelineId}.json`);
63
+ await fs_1.promises.writeFile(path, JSON.stringify(payload, null, 2), 'utf8');
64
+ return path;
65
+ }
66
+ /** Remove a pending intent after a successful drain. */
67
+ async function clearPendingIntent(pipelineId) {
68
+ const path = (0, path_1.join)(exports.PENDING_INTENTS_DIR, `${pipelineId}.json`);
69
+ try {
70
+ await fs_1.promises.unlink(path);
71
+ }
72
+ catch (err) {
73
+ // ENOENT is fine — already cleared. Anything else is a real problem.
74
+ if (err.code !== 'ENOENT')
75
+ throw err;
76
+ }
77
+ }
78
+ /** Read all pending intents currently on disk. Empty array if dir doesn't exist. */
79
+ async function readPendingIntents() {
80
+ let entries;
81
+ try {
82
+ entries = await fs_1.promises.readdir(exports.PENDING_INTENTS_DIR);
83
+ }
84
+ catch (err) {
85
+ if (err.code === 'ENOENT')
86
+ return [];
87
+ throw err;
88
+ }
89
+ const intents = [];
90
+ for (const file of entries) {
91
+ if (!file.endsWith('.json'))
92
+ continue;
93
+ try {
94
+ const text = await fs_1.promises.readFile((0, path_1.join)(exports.PENDING_INTENTS_DIR, file), 'utf8');
95
+ intents.push(JSON.parse(text));
96
+ }
97
+ catch {
98
+ // Skip unreadable / malformed files — they'll need manual cleanup but
99
+ // shouldn't block valid intents from draining.
100
+ }
101
+ }
102
+ return intents;
103
+ }
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7OztBQWdFdEMsb0RBaUNDO0FBVUQsZ0RBS0M7QUFHRCxnREFRQztBQUdELGdEQXFCQztBQWpKRCxtQ0FBb0M7QUFDcEMsMkJBQW9DO0FBQ3BDLDJCQUE2QjtBQUM3QiwrQkFBNEI7QUFDNUIsb0RBQTBFO0FBZ0QxRSxnRkFBZ0Y7QUFDbkUsUUFBQSxtQkFBbUIsR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFBLFlBQU8sR0FBRSxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFFakc7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxRQUE2QixFQUM3QixjQUF1QjtJQUV2QixNQUFNLE1BQU0sR0FBRyxjQUFjO1dBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVTtXQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQjtXQUM5QixXQUFXLENBQUM7SUFFakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxxQ0FBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFD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QUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU1RTQ2xpZW50LCBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3RzJztcblxuLyoqXG4gKiBIZWxwZXJzIGZvciByZWdpc3RlcmluZyBhIGRlcGxveWVkIHBpcGVsaW5lIEFSTiB3aXRoIHRoZSBwbGF0Zm9ybS5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgdGFibGUgbWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHNcbiAqIGFuZCBvcmdzLiBJdCdzIGhvdyB0aGUgZGFzaGJvYXJkJ3MgXCJEZXBsb3llZCBwaXBlbGluZXNcIiBwYW5lbCBhbmQgdGhlIGV2ZW50XG4gKiByZXBvcnRpbmcgTGFtYmRhIHJlc29sdmUgaW5jb21pbmcgZXZlbnRzIHRvIGEgcGlwZWxpbmUgZGVmaW5pdGlvbi5cbiAqXG4gKiBUd28gZmFpbHVyZSBtb2RlcyBhcmUgaGFuZGxlZCBoZXJlOlxuICpcbiAqICAgMS4gUGxhdGZvcm0gdW5yZWFjaGFibGUgYXQgZGVwbG95IHRpbWUuIFRoZSBDREsgc3RhY2sgbGFuZHMgaW4gQVdTIGJ1dCB0aGVcbiAqICAgICAgcmVnaXN0cnkgUE9TVCBmYWlscy4gV2l0aG91dCByZXRyeSB0aGUgZGVwbG95IGNvbW1hbmQgd291bGQgaGF2ZSB0b1xuICogICAgICByZS1ydW4gY2RrLWRlcGxveSAoc2xvdywgc29tZXRpbWVzIGJsb2NrZWQgYnkgc3RhY2sgc3RhdGUpIGp1c3QgdG9cbiAqICAgICAgcmVjb3JkIHRoZSBBUk4uIEluc3RlYWQsIHdlIHdyaXRlIGEgcGVuZGluZyBpbnRlbnQgdG8gYSBsb2NhbCBmaWxlO1xuICogICAgICBgcGlwZWxpbmUtbWFuYWdlciByZWdpc3RlcmAgZHJhaW5zIHRoZW0uXG4gKlxuICogICAyLiBVc2VyIGV4cGxpY2l0bHkgaW52b2tlcyBgcGlwZWxpbmUtbWFuYWdlciByZWdpc3RlciAtLWlkIDxwaXBlbGluZUlkPmBcbiAqICAgICAgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRlcGxveSB0aGF0IGRpZG4ndCByZWdpc3Rlci4gU2FtZSBwYXRoOiByZWJ1aWxkc1xuICogICAgICB0aGUgQVJOIGZyb20gU1RTLCBQT1NUcyB0byB0aGUgcGxhdGZvcm0uXG4gKlxuICogUGVuZGluZyBpbnRlbnRzIHN0b3JlIE9OTFkgdGhlIHJlZ2lzdHJhdGlvbiBwYXlsb2FkIOKAlCBuZXZlciB0b2tlbnMgb3IgVVJMcy5cbiAqIEF1dGggaXMgc3VwcGxpZWQgYnkgd2hpY2hldmVyIGNvbW1hbmQgZHJhaW5zIHRoZSBpbnRlbnQgKGRlcGxveSBvciByZWdpc3RlciksXG4gKiBzbyBhIHN0YWxlIGludGVudCBmaWxlIGlzIG5ldmVyIGFuIGF1dGhlbnRpY2F0aW9uIHJpc2suXG4gKi9cblxuLyoqIFNoYXBlIG9mIHRoZSBib2R5IFBPU1RlZCB0byAvYXBpL3BpcGVsaW5lcy9yZWdpc3RyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlQYXlsb2FkIHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUFybjogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZztcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBwcm9qZWN0OiBzdHJpbmc7XG4gIG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICBzdGFja05hbWU6IHN0cmluZztcbn1cblxuLyoqIFBpcGVsaW5lIGZpZWxkcyBuZWVkZWQgdG8gY29uc3RydWN0IGEgUmVnaXN0cnlQYXlsb2FkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUZvclJlZ2lzdHJ5IHtcbiAgaWQ6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuICBwcm9qZWN0OiBzdHJpbmc7XG4gIG9yZ2FuaXphdGlvbjogc3RyaW5nO1xufVxuXG4vKiogV2hlcmUgcGVuZGluZyByZWdpc3RyYXRpb24gaW50ZW50cyBhcmUgcGVyc2lzdGVkIGJldHdlZW4gQ0xJIGludm9jYXRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfSU5URU5UU19ESVIgPSBqb2luKGhvbWVkaXIoKSwgJy5waXBlbGluZS1tYW5hZ2VyJywgJ3BlbmRpbmctcmVnaXN0cmF0aW9ucycpO1xuXG4vKipcbiAqIEJ1aWxkIGEgUmVnaXN0cnlQYXlsb2FkIGZyb20gdGhlIHBsYXRmb3JtJ3MgcGlwZWxpbmUgbWV0YWRhdGEuIFJlYWNoZXMgb3V0XG4gKiB0byBTVFMgdG8gZGlzY292ZXIgdGhlIEFXUyBhY2NvdW50LCBoYXNoZXMgaXQsIGFuZCBjb25zdHJ1Y3RzIHRoZSBBUk4uXG4gKlxuICogVGhlIGhhc2ggaXMgdGhlIHNhbWUgb25lIGFwcGxpZWQgc2VydmVyLXNpZGUgYXMgZGVmZW5zZSBpbiBkZXB0aCDigJQgcmF3IEFXU1xuICogYWNjb3VudCBudW1iZXJzIG11c3QgbmV2ZXIgcmVhY2ggdGhlIHBsYXRmb3JtIERCLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZWdpc3RyeVBheWxvYWQoXG4gIHBpcGVsaW5lOiBQaXBlbGluZUZvclJlZ2lzdHJ5LFxuICByZWdpb25PdmVycmlkZT86IHN0cmluZyxcbik6IFByb21pc2U8UmVnaXN0cnlQYXlsb2FkPiB7XG4gIGNvbnN0IHJlZ2lvbiA9IHJlZ2lvbk92ZXJyaWRlXG4gICAgfHwgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTlxuICAgIHx8IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTlxuICAgIHx8ICd1cy1lYXN0LTEnO1xuXG4gIGNvbnN0IHN0c0NsaWVudCA9IG5ldyBTVFNDbGllbnQoeyByZWdpb24gfSk7XG4gIGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgc3RzQ2xpZW50LnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCh7fSkpO1xuICBjb25zdCBhY2NvdW50ID0gaWRlbnRpdHkuQWNjb3VudCA/PyAnJztcbiAgaWYgKCFhY2NvdW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIEFXUyBhY2NvdW50IGZyb20gU1RTIOKAlCBjaGVjayBBV1MgY3JlZGVudGlhbHMnKTtcbiAgfVxuXG4gIGNvbnN0IGhhc2hlZEFjY291bnQgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYWNjb3VudCkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCAxMik7XG4gIGNvbnN0IHBpcGVsaW5lTmFtZSA9IHBpcGVsaW5lLnBpcGVsaW5lTmFtZVxuICAgIHx8IGAke3BpcGVsaW5lLm9yZ2FuaXphdGlvbn0tJHtwaXBlbGluZS5wcm9qZWN0fS1waXBlbGluZWAudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcGlwZWxpbmVBcm4gPSBgYXJuOmF3czpjb2RlcGlwZWxpbmU6JHtyZWdpb259OiR7aGFzaGVkQWNjb3VudH06JHtwaXBlbGluZU5hbWV9YDtcbiAgY29uc3Qgc3RhY2tOYW1lID0gYCR7cGlwZWxpbmUucHJvamVjdH0tJHtwaXBlbGluZS5vcmdhbml6YXRpb259YC50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiB7XG4gICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQsXG4gICAgb3JnSWQ6IHBpcGVsaW5lLm9yZ0lkLFxuICAgIHBpcGVsaW5lQXJuLFxuICAgIHBpcGVsaW5lTmFtZSxcbiAgICBhY2NvdW50SWQ6IGhhc2hlZEFjY291bnQsXG4gICAgcmVnaW9uLFxuICAgIHByb2plY3Q6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgb3JnYW5pemF0aW9uOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgc3RhY2tOYW1lLFxuICB9O1xufVxuXG4vKipcbiAqIFBlcnNpc3QgYSByZWdpc3RyYXRpb24gaW50ZW50IGZvciBsYXRlciByZXRyeS5cbiAqXG4gKiBJbnRlbnQgZmlsZXMgYXJlIGtleWVkIGJ5IHBpcGVsaW5lSWQgc28gcmUtcnVubmluZyBkZXBsb3kgb24gdGhlIHNhbWVcbiAqIHBpcGVsaW5lIG92ZXJ3cml0ZXMgcmF0aGVyIHRoYW4gYWNjdW11bGF0ZXMuIFdlIGRlbGliZXJhdGVseSBzdG9yZSB0aGVcbiAqIHBheWxvYWQgcGxhaW4gKG5vdCB0aGUgZnVsbCBwaXBlbGluZSBkb2MsIG5vdCBhdXRoKSBzbyBhIHN0YWxlIGZpbGUgaXNcbiAqIHNhZmUgdG8gbGVhdmUgYXJvdW5kIGluZGVmaW5pdGVseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUGVuZGluZ0ludGVudChwYXlsb2FkOiBSZWdpc3RyeVBheWxvYWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBhd2FpdCBmcy5ta2RpcihQRU5ESU5HX0lOVEVOVFNfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgcGF0aCA9IGpvaW4oUEVORElOR19JTlRFTlRTX0RJUiwgYCR7cGF5bG9hZC5waXBlbGluZUlkfS5qc29uYCk7XG4gIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLCBKU09OLnN0cmluZ2lmeShwYXlsb2FkLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgcmV0dXJuIHBhdGg7XG59XG5cbi8qKiBSZW1vdmUgYSBwZW5kaW5nIGludGVudCBhZnRlciBhIHN1Y2Nlc3NmdWwgZHJhaW4uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJQZW5kaW5nSW50ZW50KHBpcGVsaW5lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYXRoID0gam9pbihQRU5ESU5HX0lOVEVOVFNfRElSLCBgJHtwaXBlbGluZUlkfS5qc29uYCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMudW5saW5rKHBhdGgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBFTk9FTlQgaXMgZmluZSDigJQgYWxyZWFkeSBjbGVhcmVkLiBBbnl0aGluZyBlbHNlIGlzIGEgcmVhbCBwcm9ibGVtLlxuICAgIGlmICgoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSAhPT0gJ0VOT0VOVCcpIHRocm93IGVycjtcbiAgfVxufVxuXG4vKiogUmVhZCBhbGwgcGVuZGluZyBpbnRlbnRzIGN1cnJlbnRseSBvbiBkaXNrLiBFbXB0eSBhcnJheSBpZiBkaXIgZG9lc24ndCBleGlzdC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUGVuZGluZ0ludGVudHMoKTogUHJvbWlzZTxSZWdpc3RyeVBheWxvYWRbXT4ge1xuICBsZXQgZW50cmllczogc3RyaW5nW107XG4gIHRyeSB7XG4gICAgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoUEVORElOR19JTlRFTlRTX0RJUik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICgoZXJyIGFzIE5vZGVKUy5FcnJub0V4Y2VwdGlvbikuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiBbXTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBjb25zdCBpbnRlbnRzOiBSZWdpc3RyeVBheWxvYWRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgZW50cmllcykge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aCgnLmpzb24nKSkgY29udGludWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBmcy5yZWFkRmlsZShqb2luKFBFTkRJTkdfSU5URU5UU19ESVIsIGZpbGUpLCAndXRmOCcpO1xuICAgICAgaW50ZW50cy5wdXNoKEpTT04ucGFyc2UodGV4dCkgYXMgUmVnaXN0cnlQYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNraXAgdW5yZWFkYWJsZSAvIG1hbGZvcm1lZCBmaWxlcyDigJQgdGhleSdsbCBuZWVkIG1hbnVhbCBjbGVhbnVwIGJ1dFxuICAgICAgLy8gc2hvdWxkbid0IGJsb2NrIHZhbGlkIGludGVudHMgZnJvbSBkcmFpbmluZy5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGludGVudHM7XG59XG4iXX0=
package/package.json CHANGED
@@ -83,7 +83,7 @@
83
83
  "access": "public",
84
84
  "registry": "https://registry.npmjs.org/"
85
85
  },
86
- "version": "3.3.29",
86
+ "version": "3.3.30",
87
87
  "bugs": {
88
88
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
89
89
  },