aws-delivlib 13.3.3 → 13.4.2
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/.gitattributes +22 -20
- package/cdk.out/{asset.663163693e04179c71265b44a325be7e6b8c4e90b081883a1b3f3393de2546ea → asset.7820644cf1fdec7cec290ed6fdd561e35f4015d4dcf03a20f8035dda3c0ac88a}/watcher-handler.d.ts +0 -0
- package/cdk.out/asset.7820644cf1fdec7cec290ed6fdd561e35f4015d4dcf03a20f8035dda3c0ac88a/watcher-handler.js +108 -0
- package/cdk.out/{asset.663163693e04179c71265b44a325be7e6b8c4e90b081883a1b3f3393de2546ea → asset.7820644cf1fdec7cec290ed6fdd561e35f4015d4dcf03a20f8035dda3c0ac88a}/watcher-handler.ts +0 -0
- package/cdk.out/asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238/index.js +16465 -0
- package/cdk.out/cdk.out +1 -1
- package/cdk.out/delivlib-test.assets.json +9 -9
- package/cdk.out/delivlib-test.template.json +3 -3
- package/cdk.out/manifest.json +1840 -1840
- package/cdk.out/tree.json +412 -412
- package/lib/__tests__/build-spec.test.js +21 -2
- package/lib/__tests__/bump.test.js +21 -2
- package/lib/__tests__/canary.test.js +22 -3
- package/lib/__tests__/change-control-lambda/disable-transition.test.js +2 -1
- package/lib/__tests__/change-control-lambda/handler.test.js +23 -3
- package/lib/__tests__/chime-notifier.test.js +4 -3
- package/lib/__tests__/code-signing-cert.test.js +21 -2
- package/lib/__tests__/integ.delivlib.js +21 -2
- package/lib/__tests__/open-pgp-key-pair.test.js +21 -2
- package/lib/__tests__/pipeline.test.js +22 -3
- package/lib/__tests__/pr.test.js +21 -2
- package/lib/__tests__/publishing.test.js +38 -2
- package/lib/__tests__/registry-sync/ecr-mirror.test.js +21 -2
- package/lib/__tests__/registry-sync/mirror-source.test.js +21 -2
- package/lib/__tests__/shellable.test.js +22 -3
- package/lib/__tests__/test-stack.js +22 -3
- package/lib/change-control-lambda/disable-transition.js +21 -2
- package/lib/change-control-lambda/index.js +21 -2
- package/lib/change-controller.js +21 -2
- package/lib/chime-notifier/chime-notifier.js +22 -12
- package/lib/chime-notifier/chime-notifier.ts +1 -11
- package/lib/chime-notifier/{notifier-handler.d.ts → handler/notifier-handler.d.ts} +0 -0
- package/lib/chime-notifier/handler/notifier-handler.js +110 -0
- package/lib/chime-notifier/{notifier-handler.ts → handler/notifier-handler.ts} +4 -4
- package/lib/code-signing/certificate-signing-request.js +21 -2
- package/lib/code-signing/code-signing-certificate.js +21 -2
- package/lib/code-signing/private-key.js +21 -2
- package/lib/custom-resource-handlers/src/_cloud-formation.js +22 -3
- package/lib/custom-resource-handlers/src/_exec.js +22 -3
- package/lib/custom-resource-handlers/src/_rmrf.js +23 -4
- package/lib/custom-resource-handlers/src/certificate-signing-request.js +26 -7
- package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/pgp-secret.js +27 -8
- package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/private-key.js +26 -7
- package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
- package/lib/open-pgp-key-pair.js +21 -2
- package/lib/pipeline-notifications/chime.js +21 -2
- package/lib/pipeline-notifications/slack.js +21 -2
- package/lib/pipeline-watcher/handler/watcher-handler.js +21 -2
- package/lib/pipeline-watcher/watcher.js +21 -2
- package/lib/pipeline.d.ts +20 -6
- package/lib/pipeline.js +35 -10
- package/lib/pipeline.ts +34 -14
- package/lib/publishing/s3/publish.sh +2 -1
- package/lib/publishing.js +22 -3
- package/lib/pull-request/bump.js +21 -2
- package/lib/pull-request/merge-back.js +22 -3
- package/lib/pull-request/pr.js +21 -2
- package/lib/shellable.js +22 -3
- package/lib/util.js +23 -4
- package/package.json +36 -37
- package/cdk.out/asset.663163693e04179c71265b44a325be7e6b8c4e90b081883a1b3f3393de2546ea/watcher-handler.js +0 -89
- package/cdk.out/asset.d81bf2d4c389ecd69472cf4b27599e1ffbe0c1543104f45d035834e863f64ca7/index.js +0 -14129
- package/lib/chime-notifier/notifier-handler.js +0 -91
package/.gitattributes
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen".
|
|
2
2
|
|
|
3
|
-
*.snap
|
|
4
|
-
/.eslintrc.json
|
|
5
|
-
/.gitattributes
|
|
6
|
-
/.github/workflows/auto-approve.yml
|
|
7
|
-
/.github/workflows/build.yml
|
|
8
|
-
/.github/workflows/
|
|
9
|
-
/.github/workflows/
|
|
10
|
-
/.github/workflows/
|
|
11
|
-
/.
|
|
12
|
-
/.
|
|
13
|
-
/.
|
|
14
|
-
/.
|
|
15
|
-
/.projen
|
|
16
|
-
/.projen/
|
|
17
|
-
/.projen/
|
|
18
|
-
/
|
|
19
|
-
/
|
|
20
|
-
/
|
|
21
|
-
/
|
|
22
|
-
/
|
|
3
|
+
*.snap linguist-generated
|
|
4
|
+
/.eslintrc.json linguist-generated
|
|
5
|
+
/.gitattributes linguist-generated
|
|
6
|
+
/.github/workflows/auto-approve.yml linguist-generated
|
|
7
|
+
/.github/workflows/build.yml linguist-generated
|
|
8
|
+
/.github/workflows/pull-request-lint.yml linguist-generated
|
|
9
|
+
/.github/workflows/release.yml linguist-generated
|
|
10
|
+
/.github/workflows/stale.yml linguist-generated
|
|
11
|
+
/.github/workflows/upgrade-main.yml linguist-generated
|
|
12
|
+
/.gitignore linguist-generated
|
|
13
|
+
/.mergify.yml linguist-generated
|
|
14
|
+
/.npmignore linguist-generated
|
|
15
|
+
/.projen/** linguist-generated
|
|
16
|
+
/.projen/deps.json linguist-generated
|
|
17
|
+
/.projen/files.json linguist-generated
|
|
18
|
+
/.projen/jest-snapshot-resolver.js linguist-generated
|
|
19
|
+
/.projen/tasks.json linguist-generated
|
|
20
|
+
/LICENSE linguist-generated
|
|
21
|
+
/package.json linguist-generated
|
|
22
|
+
/tsconfig.dev.json linguist-generated
|
|
23
|
+
/tsconfig.json linguist-generated
|
|
24
|
+
/yarn.lock linguist-generated
|
|
File without changes
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.handler = exports.cloudwatch = void 0;
|
|
23
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
24
|
+
const AWS = __importStar(require("aws-sdk"));
|
|
25
|
+
// export for tests
|
|
26
|
+
exports.cloudwatch = new AWS.CloudWatch();
|
|
27
|
+
const logger = {
|
|
28
|
+
log: (line) => process.stdout.write(line),
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Lambda function that reacts to an Amazon EventBridge event triggered by a 'CodePipeline Action Execution State Change'.
|
|
32
|
+
* The handler reads the event and sends off metrics to CloudWatch.
|
|
33
|
+
*/
|
|
34
|
+
async function handler(event) {
|
|
35
|
+
logger.log(`Received event: ${JSON.stringify(event)}`);
|
|
36
|
+
switch (event['detail-type']) {
|
|
37
|
+
case 'CodePipeline Pipeline Execution State Change':
|
|
38
|
+
await handleExecutionChange(event);
|
|
39
|
+
break;
|
|
40
|
+
case 'CodePipeline Action Execution State Change':
|
|
41
|
+
await handleActionChange(event);
|
|
42
|
+
break;
|
|
43
|
+
default: throw new Error(`Unhandled detail type ${event['detaill-type']}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.handler = handler;
|
|
47
|
+
async function handleExecutionChange(event) {
|
|
48
|
+
const pipelineName = event.detail.pipeline;
|
|
49
|
+
const state = event.detail.state;
|
|
50
|
+
let value;
|
|
51
|
+
switch (state) {
|
|
52
|
+
case 'FAILED':
|
|
53
|
+
value = 1;
|
|
54
|
+
break;
|
|
55
|
+
case 'SUCCEEDED':
|
|
56
|
+
value = 0;
|
|
57
|
+
break;
|
|
58
|
+
default: throw new Error(`Unsupported state: ${state}. Only FAILED and SUCCEEDED states are supported. ` +
|
|
59
|
+
'Others must be filtered out prior to this function.');
|
|
60
|
+
}
|
|
61
|
+
await putMetric(event, value, [
|
|
62
|
+
{ Name: 'Pipeline', Value: pipelineName },
|
|
63
|
+
]);
|
|
64
|
+
logger.log('Done');
|
|
65
|
+
}
|
|
66
|
+
async function handleActionChange(event) {
|
|
67
|
+
const pipelineName = event.detail.pipeline;
|
|
68
|
+
const action = event.detail.action;
|
|
69
|
+
const state = event.detail.state;
|
|
70
|
+
let value;
|
|
71
|
+
switch (state) {
|
|
72
|
+
case 'FAILED':
|
|
73
|
+
value = 1;
|
|
74
|
+
break;
|
|
75
|
+
case 'SUCCEEDED':
|
|
76
|
+
value = 0;
|
|
77
|
+
break;
|
|
78
|
+
default: throw new Error(`Unsupported state: ${state}. Only FAILED and SUCCEEDED states are supported. ` +
|
|
79
|
+
'Others must be filtered out prior to this function.');
|
|
80
|
+
}
|
|
81
|
+
await putMetric(event, value, [
|
|
82
|
+
{ Name: 'Pipeline', Value: pipelineName },
|
|
83
|
+
{ Name: 'Action', Value: action },
|
|
84
|
+
]);
|
|
85
|
+
logger.log('Done');
|
|
86
|
+
}
|
|
87
|
+
async function putMetric(event, value, dimensions) {
|
|
88
|
+
const metricNamespace = process.env.METRIC_NAMESPACE;
|
|
89
|
+
const metricName = process.env.METRIC_NAME;
|
|
90
|
+
const time = new Date(event.time);
|
|
91
|
+
if (!metricNamespace || !metricName) {
|
|
92
|
+
throw new Error('Both METRIC_NAMESPACE and METRIC_NAME environment variables must be set.');
|
|
93
|
+
}
|
|
94
|
+
const input = {
|
|
95
|
+
Namespace: metricNamespace,
|
|
96
|
+
MetricData: [
|
|
97
|
+
{
|
|
98
|
+
MetricName: metricName,
|
|
99
|
+
Value: value,
|
|
100
|
+
Dimensions: dimensions,
|
|
101
|
+
Timestamp: time,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
};
|
|
105
|
+
logger.log(`Calling PutMetricData with payload: ${JSON.stringify(input)}`);
|
|
106
|
+
await exports.cloudwatch.putMetricData(input).promise();
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2F0Y2hlci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNkNBQStCO0FBbUIvQixtQkFBbUI7QUFDTixRQUFBLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvQyxNQUFNLE1BQU0sR0FBRztJQUNiLEdBQUcsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0NBQ2xELENBQUM7QUFFRjs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWdCO0lBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXZELFFBQVEsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQzVCLEtBQUssOENBQThDO1lBQUUsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDL0YsS0FBSyw0Q0FBNEM7WUFBRSxNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUMsTUFBTTtRQUMxRixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzVFO0FBQ0gsQ0FBQztBQVJELDBCQVFDO0FBRUQsS0FBSyxVQUFVLHFCQUFxQixDQUFDLEtBQXNDO0lBQ3pFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQzNDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWpDLElBQUksS0FBYSxDQUFDO0lBQ2xCLFFBQVEsS0FBSyxFQUFFO1FBQ2IsS0FBSyxRQUFRO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDaEMsS0FBSyxXQUFXO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDbkMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxvREFBb0Q7WUFDeEcscURBQXFELENBQUMsQ0FBQztLQUN4RDtJQUVELE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7S0FDMUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBR0QsS0FBSyxVQUFVLGtCQUFrQixDQUFDLEtBQW1DO0lBQ25FLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBRWpDLElBQUksS0FBYSxDQUFDO0lBQ2xCLFFBQVEsS0FBSyxFQUFFO1FBQ2IsS0FBSyxRQUFRO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDaEMsS0FBSyxXQUFXO1lBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDbkMsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxvREFBb0Q7WUFDeEcscURBQXFELENBQUMsQ0FBQztLQUN4RDtJQUVELE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUIsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7UUFDekMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7S0FDbEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQixDQUFDO0FBRUQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxLQUFnQixFQUFFLEtBQWEsRUFBRSxVQUFxQztJQUM3RixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0lBQ3JELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsMEVBQTBFLENBQUMsQ0FBQztLQUM3RjtJQUVELE1BQU0sS0FBSyxHQUFzQztRQUMvQyxTQUFTLEVBQUUsZUFBZTtRQUMxQixVQUFVLEVBQUU7WUFDVjtnQkFDRSxVQUFVLEVBQUUsVUFBVTtnQkFDdEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLFNBQVMsRUFBRSxJQUFJO2FBQ2hCO1NBQ0Y7S0FDRixDQUFDO0lBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFM0UsTUFBTSxrQkFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuXG4vLyBQYXJ0aWFsIHR5cGUgZm9yIHRoZSAnZGV0YWlsJyBzZWN0aW9uIG9mIGFuIGV2ZW50IGZyb20gQW1hem9uIEV2ZW50QnJpZGdlIGZvciAnQ29kZVBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnXG4vLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZXZlbnQtdHlwZXMuaHRtbCNjb2RlcGlwZWxpbmUtZXZlbnQtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25TdGF0ZUNoYW5nZUV2ZW50IHtcbiAgcmVhZG9ubHkgcGlwZWxpbmU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGU6ICdTVEFSVEVEJyB8ICdDQU5DRUxFRCcgfCAnRkFJTEVEJyB8ICdTVUNDRUVERUQnO1xufVxuXG4vLyBQYXJ0aWFsIHR5cGUgZm9yIHRoZSAnZGV0YWlsJyBzZWN0aW9uIG9mIGFuIGV2ZW50IGZyb20gQW1hem9uIEV2ZW50QnJpZGdlIGZvciAnQ29kZVBpcGVsaW5lIEFjdGlvbiBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ1xuLy8gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2V2ZW50LXR5cGVzLmh0bWwjY29kZXBpcGVsaW5lLWV2ZW50LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uU3RhdGVDaGFuZ2VFdmVudCBleHRlbmRzIEV4ZWN1dGlvblN0YXRlQ2hhbmdlRXZlbnQge1xuICByZWFkb25seSBhY3Rpb246IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTGFtYmRhRXhlY3V0aW9uU3RhdGVDaGFuZ2VFdmVudCA9IEFXU0xhbWJkYS5FdmVudEJyaWRnZUV2ZW50PCdDb2RlUGlwZWxpbmUgUGlwZWxpbmUgRXhlY3V0aW9uIFN0YXRlIENoYW5nZScsIEV4ZWN1dGlvblN0YXRlQ2hhbmdlRXZlbnQ+O1xuZXhwb3J0IHR5cGUgTGFtYmRhQWN0aW9uU3RhdGVDaGFuZ2VFdmVudCA9IEFXU0xhbWJkYS5FdmVudEJyaWRnZUV2ZW50PCdDb2RlUGlwZWxpbmUgQWN0aW9uIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnLCBBY3Rpb25TdGF0ZUNoYW5nZUV2ZW50PjtcbmV4cG9ydCB0eXBlIEV2ZW50VHlwZSA9IExhbWJkYUV4ZWN1dGlvblN0YXRlQ2hhbmdlRXZlbnQgfCBMYW1iZGFBY3Rpb25TdGF0ZUNoYW5nZUV2ZW50O1xuXG4vLyBleHBvcnQgZm9yIHRlc3RzXG5leHBvcnQgY29uc3QgY2xvdWR3YXRjaCA9IG5ldyBBV1MuQ2xvdWRXYXRjaCgpO1xuY29uc3QgbG9nZ2VyID0ge1xuICBsb2c6IChsaW5lOiBzdHJpbmcpID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKGxpbmUpLFxufTtcblxuLyoqXG4gKiBMYW1iZGEgZnVuY3Rpb24gdGhhdCByZWFjdHMgdG8gYW4gQW1hem9uIEV2ZW50QnJpZGdlIGV2ZW50IHRyaWdnZXJlZCBieSBhICdDb2RlUGlwZWxpbmUgQWN0aW9uIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnLlxuICogVGhlIGhhbmRsZXIgcmVhZHMgdGhlIGV2ZW50IGFuZCBzZW5kcyBvZmYgbWV0cmljcyB0byBDbG91ZFdhdGNoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogRXZlbnRUeXBlKSB7XG4gIGxvZ2dlci5sb2coYFJlY2VpdmVkIGV2ZW50OiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gKTtcblxuICBzd2l0Y2ggKGV2ZW50WydkZXRhaWwtdHlwZSddKSB7XG4gICAgY2FzZSAnQ29kZVBpcGVsaW5lIFBpcGVsaW5lIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnOiBhd2FpdCBoYW5kbGVFeGVjdXRpb25DaGFuZ2UoZXZlbnQpOyBicmVhaztcbiAgICBjYXNlICdDb2RlUGlwZWxpbmUgQWN0aW9uIEV4ZWN1dGlvbiBTdGF0ZSBDaGFuZ2UnOiBhd2FpdCBoYW5kbGVBY3Rpb25DaGFuZ2UoZXZlbnQpOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBkZXRhaWwgdHlwZSAke2V2ZW50WydkZXRhaWxsLXR5cGUnXX1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVFeGVjdXRpb25DaGFuZ2UoZXZlbnQ6IExhbWJkYUV4ZWN1dGlvblN0YXRlQ2hhbmdlRXZlbnQpIHtcbiAgY29uc3QgcGlwZWxpbmVOYW1lID0gZXZlbnQuZGV0YWlsLnBpcGVsaW5lO1xuICBjb25zdCBzdGF0ZSA9IGV2ZW50LmRldGFpbC5zdGF0ZTtcblxuICBsZXQgdmFsdWU6IG51bWJlcjtcbiAgc3dpdGNoIChzdGF0ZSkge1xuICAgIGNhc2UgJ0ZBSUxFRCc6IHZhbHVlID0gMTsgYnJlYWs7XG4gICAgY2FzZSAnU1VDQ0VFREVEJzogdmFsdWUgPSAwOyBicmVhaztcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHN0YXRlOiAke3N0YXRlfS4gT25seSBGQUlMRUQgYW5kIFNVQ0NFRURFRCBzdGF0ZXMgYXJlIHN1cHBvcnRlZC4gYCArXG4gICAgJ090aGVycyBtdXN0IGJlIGZpbHRlcmVkIG91dCBwcmlvciB0byB0aGlzIGZ1bmN0aW9uLicpO1xuICB9XG5cbiAgYXdhaXQgcHV0TWV0cmljKGV2ZW50LCB2YWx1ZSwgW1xuICAgIHsgTmFtZTogJ1BpcGVsaW5lJywgVmFsdWU6IHBpcGVsaW5lTmFtZSB9LFxuICBdKTtcblxuICBsb2dnZXIubG9nKCdEb25lJyk7XG59XG5cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWN0aW9uQ2hhbmdlKGV2ZW50OiBMYW1iZGFBY3Rpb25TdGF0ZUNoYW5nZUV2ZW50KSB7XG4gIGNvbnN0IHBpcGVsaW5lTmFtZSA9IGV2ZW50LmRldGFpbC5waXBlbGluZTtcbiAgY29uc3QgYWN0aW9uID0gZXZlbnQuZGV0YWlsLmFjdGlvbjtcbiAgY29uc3Qgc3RhdGUgPSBldmVudC5kZXRhaWwuc3RhdGU7XG5cbiAgbGV0IHZhbHVlOiBudW1iZXI7XG4gIHN3aXRjaCAoc3RhdGUpIHtcbiAgICBjYXNlICdGQUlMRUQnOiB2YWx1ZSA9IDE7IGJyZWFrO1xuICAgIGNhc2UgJ1NVQ0NFRURFRCc6IHZhbHVlID0gMDsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzdGF0ZTogJHtzdGF0ZX0uIE9ubHkgRkFJTEVEIGFuZCBTVUNDRUVERUQgc3RhdGVzIGFyZSBzdXBwb3J0ZWQuIGAgK1xuICAgICdPdGhlcnMgbXVzdCBiZSBmaWx0ZXJlZCBvdXQgcHJpb3IgdG8gdGhpcyBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIGF3YWl0IHB1dE1ldHJpYyhldmVudCwgdmFsdWUsIFtcbiAgICB7IE5hbWU6ICdQaXBlbGluZScsIFZhbHVlOiBwaXBlbGluZU5hbWUgfSxcbiAgICB7IE5hbWU6ICdBY3Rpb24nLCBWYWx1ZTogYWN0aW9uIH0sXG4gIF0pO1xuXG4gIGxvZ2dlci5sb2coJ0RvbmUnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHV0TWV0cmljKGV2ZW50OiBFdmVudFR5cGUsIHZhbHVlOiBudW1iZXIsIGRpbWVuc2lvbnM6IEFXUy5DbG91ZFdhdGNoLkRpbWVuc2lvbnMpIHtcbiAgY29uc3QgbWV0cmljTmFtZXNwYWNlID0gcHJvY2Vzcy5lbnYuTUVUUklDX05BTUVTUEFDRTtcbiAgY29uc3QgbWV0cmljTmFtZSA9IHByb2Nlc3MuZW52Lk1FVFJJQ19OQU1FO1xuICBjb25zdCB0aW1lID0gbmV3IERhdGUoZXZlbnQudGltZSk7XG5cbiAgaWYgKCFtZXRyaWNOYW1lc3BhY2UgfHwgIW1ldHJpY05hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggTUVUUklDX05BTUVTUEFDRSBhbmQgTUVUUklDX05BTUUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG11c3QgYmUgc2V0LicpO1xuICB9XG5cbiAgY29uc3QgaW5wdXQ6IEFXUy5DbG91ZFdhdGNoLlB1dE1ldHJpY0RhdGFJbnB1dCA9IHtcbiAgICBOYW1lc3BhY2U6IG1ldHJpY05hbWVzcGFjZSxcbiAgICBNZXRyaWNEYXRhOiBbXG4gICAgICB7XG4gICAgICAgIE1ldHJpY05hbWU6IG1ldHJpY05hbWUsXG4gICAgICAgIFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgRGltZW5zaW9uczogZGltZW5zaW9ucyxcbiAgICAgICAgVGltZXN0YW1wOiB0aW1lLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGxvZ2dlci5sb2coYENhbGxpbmcgUHV0TWV0cmljRGF0YSB3aXRoIHBheWxvYWQ6ICR7SlNPTi5zdHJpbmdpZnkoaW5wdXQpfWApO1xuXG4gIGF3YWl0IGNsb3Vkd2F0Y2gucHV0TWV0cmljRGF0YShpbnB1dCkucHJvbWlzZSgpO1xufSJdfQ==
|