aws-delivlib 13.4.3 → 13.4.7
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/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/create-release.js +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package-lock.json +100 -95
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package.json +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/publish.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/sign-files.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/with-signing-key.sh +0 -0
- package/cdk.out/{asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238 → asset.3044256b9586ecb8a7709713aaca30ceb34f699e3f93c8858f633aaf2f0c7140}/index.js +17 -11
- package/cdk.out/delivlib-test.assets.json +8 -8
- package/cdk.out/delivlib-test.template.json +32 -27
- package/cdk.out/manifest.json +272 -272
- package/cdk.out/tree.json +442 -437
- package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
- package/lib/publishing/github/package-lock.json +100 -95
- package/package.json +17 -18
- package/lib/__tests__/auto-build.test.d.ts +0 -1
- package/lib/__tests__/auto-build.test.js +0 -119
- package/lib/__tests__/build-spec.test.d.ts +0 -1
- package/lib/__tests__/build-spec.test.js +0 -82
- package/lib/__tests__/bump.test.d.ts +0 -1
- package/lib/__tests__/bump.test.js +0 -284
- package/lib/__tests__/canary.test.d.ts +0 -1
- package/lib/__tests__/canary.test.js +0 -144
- package/lib/__tests__/change-control-lambda/disable-transition.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/disable-transition.test.js +0 -64
- package/lib/__tests__/change-control-lambda/handler.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/handler.test.js +0 -143
- package/lib/__tests__/change-control-lambda/time-window.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/time-window.test.js +0 -131
- package/lib/__tests__/chime-notifier.test.d.ts +0 -6
- package/lib/__tests__/chime-notifier.test.js +0 -138
- package/lib/__tests__/code-signing-cert.test.d.ts +0 -1
- package/lib/__tests__/code-signing-cert.test.js +0 -72
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.js +0 -100
- package/lib/__tests__/custom-resource-handlers/_exec.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_exec.test.js +0 -9
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.js +0 -13
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.js +0 -171
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.js +0 -169
- package/lib/__tests__/custom-resource-handlers/private-key.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/private-key.test.js +0 -164
- package/lib/__tests__/integ.delivlib.d.ts +0 -1
- package/lib/__tests__/integ.delivlib.js +0 -33
- package/lib/__tests__/open-pgp-key-pair.test.d.ts +0 -1
- package/lib/__tests__/open-pgp-key-pair.test.js +0 -130
- package/lib/__tests__/pipeline-notifications/chime.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/chime.test.js +0 -69
- package/lib/__tests__/pipeline-notifications/slack.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/slack.test.js +0 -82
- package/lib/__tests__/pipeline.test.d.ts +0 -1
- package/lib/__tests__/pipeline.test.js +0 -362
- package/lib/__tests__/pr.test.d.ts +0 -3
- package/lib/__tests__/pr.test.js +0 -88
- package/lib/__tests__/publishing.test.d.ts +0 -1
- package/lib/__tests__/publishing.test.js +0 -89
- package/lib/__tests__/registry-sync/ecr-mirror.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/ecr-mirror.test.js +0 -313
- package/lib/__tests__/registry-sync/mirror-source.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/mirror-source.test.js +0 -225
- package/lib/__tests__/shellable.test.d.ts +0 -1
- package/lib/__tests__/shellable.test.js +0 -479
- package/lib/__tests__/test-stack.d.ts +0 -4
- package/lib/__tests__/test-stack.js +0 -184
- package/lib/__tests__/watcher-handler.test.d.ts +0 -1
- package/lib/__tests__/watcher-handler.test.js +0 -190
- package/lib/__tests__/watcher.test.d.ts +0 -1
- package/lib/__tests__/watcher.test.js +0 -78
|
@@ -1,72 +0,0 @@
|
|
|
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
|
-
const monocdk_1 = require("monocdk");
|
|
23
|
-
require("@monocdk-experiment/assert/jest");
|
|
24
|
-
const delivlib = __importStar(require("../../lib"));
|
|
25
|
-
let app;
|
|
26
|
-
let stack;
|
|
27
|
-
let key;
|
|
28
|
-
beforeEach(() => {
|
|
29
|
-
app = new monocdk_1.App();
|
|
30
|
-
const randomExtraContainer = new monocdk_1.Construct(app, 'SomethingElse');
|
|
31
|
-
stack = new monocdk_1.Stack(randomExtraContainer, 'Stack', {
|
|
32
|
-
stackName: 'ActualStackName',
|
|
33
|
-
});
|
|
34
|
-
key = new monocdk_1.aws_kms.Key(stack, 'Key');
|
|
35
|
-
});
|
|
36
|
-
const distinguishedName = {
|
|
37
|
-
commonName: 'CN',
|
|
38
|
-
country: 'Country',
|
|
39
|
-
emailAddress: 'Email',
|
|
40
|
-
locality: 'Locality',
|
|
41
|
-
organizationName: 'OrgName',
|
|
42
|
-
organizationalUnitName: 'OrgUnitName',
|
|
43
|
-
stateOrProvince: 'Province, Please',
|
|
44
|
-
};
|
|
45
|
-
test('secret name consists of stack name and relative construct path', () => {
|
|
46
|
-
// WHEN
|
|
47
|
-
const yetAnotherParent = new monocdk_1.Construct(stack, 'Inbetween');
|
|
48
|
-
new delivlib.CodeSigningCertificate(yetAnotherParent, 'Cert', {
|
|
49
|
-
distinguishedName,
|
|
50
|
-
pemCertificate: 'asdf',
|
|
51
|
-
secretEncryptionKey: key,
|
|
52
|
-
});
|
|
53
|
-
// THEN - specifically: does not include construct names above the containing stack
|
|
54
|
-
// uses the actual stack name (and not the stack NODE name)
|
|
55
|
-
expect(stack).toHaveResource('Custom::RsaPrivateKeySecret', {
|
|
56
|
-
SecretName: 'ActualStackName/Inbetween/Cert/RSAPrivateKey',
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
test('secret name can be overridden', () => {
|
|
60
|
-
// WHEN
|
|
61
|
-
const yetAnotherParent = new monocdk_1.Construct(stack, 'Inbetween');
|
|
62
|
-
new delivlib.CodeSigningCertificate(yetAnotherParent, 'Cert', {
|
|
63
|
-
distinguishedName,
|
|
64
|
-
pemCertificate: 'asdf',
|
|
65
|
-
secretEncryptionKey: key,
|
|
66
|
-
baseName: 'Sekrit',
|
|
67
|
-
});
|
|
68
|
-
expect(stack).toHaveResource('Custom::RsaPrivateKeySecret', {
|
|
69
|
-
SecretName: 'Sekrit/RSAPrivateKey',
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1zaWduaW5nLWNlcnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvZGUtc2lnbmluZy1jZXJ0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUNBR2lCO0FBQ2pCLDJDQUF5QztBQUN6QyxvREFBc0M7QUFHdEMsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJLEtBQVksQ0FBQztBQUNqQixJQUFJLEdBQVksQ0FBQztBQUNqQixVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2QsR0FBRyxHQUFHLElBQUksYUFBRyxFQUFFLENBQUM7SUFDaEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLG1CQUFTLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2pFLEtBQUssR0FBRyxJQUFJLGVBQUssQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLEVBQUU7UUFDL0MsU0FBUyxFQUFFLGlCQUFpQjtLQUM3QixDQUFDLENBQUM7SUFDSCxHQUFHLEdBQUcsSUFBSSxpQkFBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLGlCQUFpQixHQUErQjtJQUNwRCxVQUFVLEVBQUUsSUFBSTtJQUNoQixPQUFPLEVBQUUsU0FBUztJQUNsQixZQUFZLEVBQUUsT0FBTztJQUNyQixRQUFRLEVBQUUsVUFBVTtJQUNwQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLHNCQUFzQixFQUFFLGFBQWE7SUFDckMsZUFBZSxFQUFFLGtCQUFrQjtDQUNwQyxDQUFDO0FBRUYsSUFBSSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtJQUMxRSxPQUFPO0lBQ1AsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLG1CQUFTLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNELElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRTtRQUM1RCxpQkFBaUI7UUFDakIsY0FBYyxFQUFFLE1BQU07UUFDdEIsbUJBQW1CLEVBQUUsR0FBRztLQUN6QixDQUFDLENBQUM7SUFFSCxtRkFBbUY7SUFDbkYsMkRBQTJEO0lBQzNELE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsNkJBQTZCLEVBQUU7UUFDMUQsVUFBVSxFQUFFLDhDQUE4QztLQUMzRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUdILElBQUksQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7SUFDekMsT0FBTztJQUNQLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxtQkFBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUU7UUFDNUQsaUJBQWlCO1FBQ2pCLGNBQWMsRUFBRSxNQUFNO1FBQ3RCLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsUUFBUSxFQUFFLFFBQVE7S0FDbkIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyw2QkFBNkIsRUFBRTtRQUMxRCxVQUFVLEVBQUUsc0JBQXNCO0tBQ25DLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwLCBDb25zdHJ1Y3QsIFN0YWNrLFxuICBhd3Nfa21zIGFzIGttcyxcbn0gZnJvbSAnbW9ub2Nkayc7XG5pbXBvcnQgJ0Btb25vY2RrLWV4cGVyaW1lbnQvYXNzZXJ0L2plc3QnO1xuaW1wb3J0ICogYXMgZGVsaXZsaWIgZnJvbSAnLi4vLi4vbGliJztcblxuXG5sZXQgYXBwOiBBcHA7XG5sZXQgc3RhY2s6IFN0YWNrO1xubGV0IGtleToga21zLktleTtcbmJlZm9yZUVhY2goKCkgPT4ge1xuICBhcHAgPSBuZXcgQXBwKCk7XG4gIGNvbnN0IHJhbmRvbUV4dHJhQ29udGFpbmVyID0gbmV3IENvbnN0cnVjdChhcHAsICdTb21ldGhpbmdFbHNlJyk7XG4gIHN0YWNrID0gbmV3IFN0YWNrKHJhbmRvbUV4dHJhQ29udGFpbmVyLCAnU3RhY2snLCB7XG4gICAgc3RhY2tOYW1lOiAnQWN0dWFsU3RhY2tOYW1lJyxcbiAgfSk7XG4gIGtleSA9IG5ldyBrbXMuS2V5KHN0YWNrLCAnS2V5Jyk7XG59KTtcblxuY29uc3QgZGlzdGluZ3Vpc2hlZE5hbWU6IGRlbGl2bGliLkRpc3Rpbmd1aXNoZWROYW1lID0ge1xuICBjb21tb25OYW1lOiAnQ04nLFxuICBjb3VudHJ5OiAnQ291bnRyeScsXG4gIGVtYWlsQWRkcmVzczogJ0VtYWlsJyxcbiAgbG9jYWxpdHk6ICdMb2NhbGl0eScsXG4gIG9yZ2FuaXphdGlvbk5hbWU6ICdPcmdOYW1lJyxcbiAgb3JnYW5pemF0aW9uYWxVbml0TmFtZTogJ09yZ1VuaXROYW1lJyxcbiAgc3RhdGVPclByb3ZpbmNlOiAnUHJvdmluY2UsIFBsZWFzZScsXG59O1xuXG50ZXN0KCdzZWNyZXQgbmFtZSBjb25zaXN0cyBvZiBzdGFjayBuYW1lIGFuZCByZWxhdGl2ZSBjb25zdHJ1Y3QgcGF0aCcsICgpID0+IHtcbiAgLy8gV0hFTlxuICBjb25zdCB5ZXRBbm90aGVyUGFyZW50ID0gbmV3IENvbnN0cnVjdChzdGFjaywgJ0luYmV0d2VlbicpO1xuICBuZXcgZGVsaXZsaWIuQ29kZVNpZ25pbmdDZXJ0aWZpY2F0ZSh5ZXRBbm90aGVyUGFyZW50LCAnQ2VydCcsIHtcbiAgICBkaXN0aW5ndWlzaGVkTmFtZSxcbiAgICBwZW1DZXJ0aWZpY2F0ZTogJ2FzZGYnLFxuICAgIHNlY3JldEVuY3J5cHRpb25LZXk6IGtleSxcbiAgfSk7XG5cbiAgLy8gVEhFTiAtIHNwZWNpZmljYWxseTogZG9lcyBub3QgaW5jbHVkZSBjb25zdHJ1Y3QgbmFtZXMgYWJvdmUgdGhlIGNvbnRhaW5pbmcgc3RhY2tcbiAgLy8gdXNlcyB0aGUgYWN0dWFsIHN0YWNrIG5hbWUgKGFuZCBub3QgdGhlIHN0YWNrIE5PREUgbmFtZSlcbiAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQ3VzdG9tOjpSc2FQcml2YXRlS2V5U2VjcmV0Jywge1xuICAgIFNlY3JldE5hbWU6ICdBY3R1YWxTdGFja05hbWUvSW5iZXR3ZWVuL0NlcnQvUlNBUHJpdmF0ZUtleScsXG4gIH0pO1xufSk7XG5cblxudGVzdCgnc2VjcmV0IG5hbWUgY2FuIGJlIG92ZXJyaWRkZW4nLCAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3QgeWV0QW5vdGhlclBhcmVudCA9IG5ldyBDb25zdHJ1Y3Qoc3RhY2ssICdJbmJldHdlZW4nKTtcbiAgbmV3IGRlbGl2bGliLkNvZGVTaWduaW5nQ2VydGlmaWNhdGUoeWV0QW5vdGhlclBhcmVudCwgJ0NlcnQnLCB7XG4gICAgZGlzdGluZ3Vpc2hlZE5hbWUsXG4gICAgcGVtQ2VydGlmaWNhdGU6ICdhc2RmJyxcbiAgICBzZWNyZXRFbmNyeXB0aW9uS2V5OiBrZXksXG4gICAgYmFzZU5hbWU6ICdTZWtyaXQnLFxuICB9KTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKCdDdXN0b206OlJzYVByaXZhdGVLZXlTZWNyZXQnLCB7XG4gICAgU2VjcmV0TmFtZTogJ1Nla3JpdC9SU0FQcml2YXRlS2V5JyxcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
4
|
-
const events_1 = require("events");
|
|
5
|
-
const https = require("https");
|
|
6
|
-
const cfn = require("../../custom-resource-handlers/src/_cloud-formation");
|
|
7
|
-
const event = {
|
|
8
|
-
RequestType: cfn.RequestType.CREATE,
|
|
9
|
-
RequestId: '00FDF1A4-69FE-4E90-A6D5-D0E97F561414',
|
|
10
|
-
ResourceType: 'Custom::Resource::Type',
|
|
11
|
-
StackId: 'Stack-1234567890',
|
|
12
|
-
LogicalResourceId: 'Resource123456',
|
|
13
|
-
ResponseURL: 'https://host.domain.tld:123/path/to/resource?query=string',
|
|
14
|
-
ResourceProperties: {},
|
|
15
|
-
PhysicalResourceId: undefined,
|
|
16
|
-
};
|
|
17
|
-
const status = cfn.Status.SUCCESS;
|
|
18
|
-
const physicalId = 'Physical ID!';
|
|
19
|
-
const data = {};
|
|
20
|
-
const reason = 'I have reasons. Don\'t ask.';
|
|
21
|
-
const httpsRequest = https.request = jest.fn().mockName('https.request');
|
|
22
|
-
test('sends the correct response to CloudFormation', () => {
|
|
23
|
-
httpsRequest.mockImplementationOnce((opts, cb) => {
|
|
24
|
-
expect(opts.headers['content-type']).toBe('');
|
|
25
|
-
expect(opts.hostname).toBe('host.domain.tld');
|
|
26
|
-
expect(opts.method).toBe('PUT');
|
|
27
|
-
expect(opts.port).toBe('123');
|
|
28
|
-
expect(opts.path).toBe('/path/to/resource?query=string');
|
|
29
|
-
const emitter = new events_1.EventEmitter();
|
|
30
|
-
let payload;
|
|
31
|
-
return {
|
|
32
|
-
on(evt, callback) {
|
|
33
|
-
emitter.on(evt, callback);
|
|
34
|
-
return this;
|
|
35
|
-
},
|
|
36
|
-
once(evt, callback) {
|
|
37
|
-
emitter.once(evt, callback);
|
|
38
|
-
return this;
|
|
39
|
-
},
|
|
40
|
-
write(str) {
|
|
41
|
-
payload = str;
|
|
42
|
-
return true;
|
|
43
|
-
},
|
|
44
|
-
end: jest.fn().mockImplementationOnce(() => {
|
|
45
|
-
expect(JSON.parse(payload || '{}')).toEqual({
|
|
46
|
-
Data: data,
|
|
47
|
-
LogicalResourceId: event.LogicalResourceId,
|
|
48
|
-
PhysicalResourceId: physicalId,
|
|
49
|
-
Reason: reason,
|
|
50
|
-
RequestId: event.RequestId,
|
|
51
|
-
StackId: event.StackId,
|
|
52
|
-
Status: status,
|
|
53
|
-
});
|
|
54
|
-
cb({ statusCode: 200 });
|
|
55
|
-
}),
|
|
56
|
-
};
|
|
57
|
-
});
|
|
58
|
-
return expect(cfn.sendResponse(event, status, physicalId, data, reason))
|
|
59
|
-
.resolves.toBe(undefined);
|
|
60
|
-
});
|
|
61
|
-
test('fails if the PUT request returns non-200', () => {
|
|
62
|
-
httpsRequest.mockImplementationOnce((opts, cb) => {
|
|
63
|
-
expect(opts.headers['content-type']).toBe('');
|
|
64
|
-
expect(opts.hostname).toBe('host.domain.tld');
|
|
65
|
-
expect(opts.method).toBe('PUT');
|
|
66
|
-
expect(opts.port).toBe('123');
|
|
67
|
-
expect(opts.path).toBe('/path/to/resource?query=string');
|
|
68
|
-
const emitter = new events_1.EventEmitter();
|
|
69
|
-
let payload;
|
|
70
|
-
return {
|
|
71
|
-
on(evt, callback) {
|
|
72
|
-
emitter.on(evt, callback);
|
|
73
|
-
return this;
|
|
74
|
-
},
|
|
75
|
-
once(evt, callback) {
|
|
76
|
-
emitter.once(evt, callback);
|
|
77
|
-
return this;
|
|
78
|
-
},
|
|
79
|
-
write(str) {
|
|
80
|
-
payload = str;
|
|
81
|
-
return true;
|
|
82
|
-
},
|
|
83
|
-
end: jest.fn().mockImplementationOnce(() => {
|
|
84
|
-
expect(JSON.parse(payload || '{}')).toEqual({
|
|
85
|
-
Data: data,
|
|
86
|
-
LogicalResourceId: event.LogicalResourceId,
|
|
87
|
-
PhysicalResourceId: physicalId,
|
|
88
|
-
Reason: reason,
|
|
89
|
-
RequestId: event.RequestId,
|
|
90
|
-
StackId: event.StackId,
|
|
91
|
-
Status: status,
|
|
92
|
-
});
|
|
93
|
-
cb({ statusCode: 500, statusMessage: 'Internal Error' });
|
|
94
|
-
}),
|
|
95
|
-
};
|
|
96
|
-
});
|
|
97
|
-
return expect(cfn.sendResponse(event, status, physicalId, data, reason))
|
|
98
|
-
.rejects.toThrow('Unexpected error sending resopnse to CloudFormation: HTTP 500 (Internal Error)');
|
|
99
|
-
});
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2Nsb3VkLWZvcm1hdGlvbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiX2Nsb3VkLWZvcm1hdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMERBQTBEO0FBQzFELG1DQUFzQztBQUN0QywrQkFBZ0M7QUFDaEMsMkVBQTRFO0FBRTVFLE1BQU0sS0FBSyxHQUFjO0lBQ3ZCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU07SUFDbkMsU0FBUyxFQUFFLHNDQUFzQztJQUNqRCxZQUFZLEVBQUUsd0JBQXdCO0lBQ3RDLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0IsaUJBQWlCLEVBQUUsZ0JBQWdCO0lBQ25DLFdBQVcsRUFBRSwyREFBMkQ7SUFDeEUsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixrQkFBa0IsRUFBRSxTQUFTO0NBQzlCLENBQUM7QUFDRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNsQyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDbEMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixDQUFDO0FBRTdDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUV6RSxJQUFJLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO0lBQ3hELFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlD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LENBQUM7WUFDRCxJQUFJLENBQUMsR0FBVyxFQUFFLFFBQWtDO2dCQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsS0FBSyxDQUFDLEdBQVc7Z0JBQ2YsT0FBTyxHQUFHLEdBQUcsQ0FBQztnQkFDZCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRTtnQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUMxQyxJQUFJLEVBQUUsSUFBSTtvQkFDVixpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO29CQUMxQyxrQkFBa0IsRUFBRSxVQUFVO29CQUM5QixNQUFNLEVBQUUsTUFBTTtvQkFDZCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7b0JBQzFCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDdEIsTUFBTSxFQUFFLE1BQU07aUJBQ2YsQ0FBQyxDQUFDO2dCQUNILEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUM7U0FDSSxDQUFDO0lBQ1gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNyRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdGQUFnRixDQUFDLENBQUM7QUFDdkcsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmltcG9ydCBjZm4gPSByZXF1aXJlKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL19jbG91ZC1mb3JtYXRpb24nKTtcblxuY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgUmVxdWVzdFR5cGU6IGNmbi5SZXF1ZXN0VHlwZS5DUkVBVEUsXG4gIFJlcXVlc3RJZDogJzAwRkRGMUE0LTY5RkUtNEU5MC1BNkQ1LUQwRTk3RjU2MTQxNCcsXG4gIFJlc291cmNlVHlwZTogJ0N1c3RvbTo6UmVzb3VyY2U6OlR5cGUnLFxuICBTdGFja0lkOiAnU3RhY2stMTIzNDU2Nzg5MCcsXG4gIExvZ2ljYWxSZXNvdXJjZUlkOiAnUmVzb3VyY2UxMjM0NTYnLFxuICBSZXNwb25zZVVSTDogJ2h0dHBzOi8vaG9zdC5kb21haW4udGxkOjEyMy9wYXRoL3RvL3Jlc291cmNlP3F1ZXJ5PXN0cmluZycsXG4gIFJlc291cmNlUHJvcGVydGllczoge30sXG4gIFBoeXNpY2FsUmVzb3VyY2VJZDogdW5kZWZpbmVkLFxufTtcbmNvbnN0IHN0YXR1cyA9IGNmbi5TdGF0dXMuU1VDQ0VTUztcbmNvbnN0IHBoeXNpY2FsSWQgPSAnUGh5c2ljYWwgSUQhJztcbmNvbnN0IGRhdGEgPSB7fTtcbmNvbnN0IHJlYXNvbiA9ICdJIGhhdmUgcmVhc29ucy4gRG9uXFwndCBhc2suJztcblxuY29uc3QgaHR0cHNSZXF1ZXN0ID0gaHR0cHMucmVxdWVzdCA9IGplc3QuZm4oKS5tb2NrTmFtZSgnaHR0cHMucmVxdWVzdCcpO1xuXG50ZXN0KCdzZW5kcyB0aGUgY29ycmVjdCByZXNwb25zZSB0byBDbG91ZEZvcm1hdGlvbicsICgpID0+IHtcbiAgaHR0cHNSZXF1ZXN0Lm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKG9wdHMsIGNiKSA9PiB7XG4gICAgZXhwZWN0KG9wdHMuaGVhZGVyc1snY29udGVudC10eXBlJ10pLnRvQmUoJycpO1xuICAgIGV4cGVjdChvcHRzLmhvc3RuYW1lKS50b0JlKCdob3N0LmRvbWFpbi50bGQnKTtcbiAgICBleHBlY3Qob3B0cy5tZXRob2QpLnRvQmUoJ1BVVCcpO1xuICAgIGV4cGVjdChvcHRzLnBvcnQpLnRvQmUoJzEyMycpO1xuICAgIGV4cGVjdChvcHRzLnBhdGgpLnRvQmUoJy9wYXRoL3RvL3Jlc291cmNlP3F1ZXJ5PXN0cmluZycpO1xuXG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBsZXQgcGF5bG9hZDogc3RyaW5nO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9uKGV2dDogc3RyaW5nLCBjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgICAgIGVtaXR0ZXIub24oZXZ0LCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIG9uY2UoZXZ0OiBzdHJpbmcsIGNhbGxiYWNrOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpIHtcbiAgICAgICAgZW1pdHRlci5vbmNlKGV2dCwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICB3cml0ZShzdHI6IHN0cmluZykge1xuICAgICAgICBwYXlsb2FkID0gc3RyO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBlbmQ6IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHtcbiAgICAgICAgZXhwZWN0KEpTT04ucGFyc2UocGF5bG9hZCB8fCAne30nKSkudG9FcXVhbCh7XG4gICAgICAgICAgRGF0YTogZGF0YSxcbiAgICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBwaHlzaWNhbElkLFxuICAgICAgICAgIFJlYXNvbjogcmVhc29uLFxuICAgICAgICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgICAgICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgICAgICAgU3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgICBjYih7IHN0YXR1c0NvZGU6IDIwMCB9KTtcbiAgICAgIH0pLFxuICAgIH0gYXMgYW55O1xuICB9LFxuICApO1xuXG4gIHJldHVybiBleHBlY3QoY2ZuLnNlbmRSZXNwb25zZShldmVudCwgc3RhdHVzLCBwaHlzaWNhbElkLCBkYXRhLCByZWFzb24pKVxuICAgIC5yZXNvbHZlcy50b0JlKHVuZGVmaW5lZCk7XG59KTtcblxudGVzdCgnZmFpbHMgaWYgdGhlIFBVVCByZXF1ZXN0IHJldHVybnMgbm9uLTIwMCcsICgpID0+IHtcbiAgaHR0cHNSZXF1ZXN0Lm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKG9wdHMsIGNiKSA9PiB7XG4gICAgZXhwZWN0KG9wdHMuaGVhZGVyc1snY29udGVudC10eXBlJ10pLnRvQmUoJycpO1xuICAgIGV4cGVjdChvcHRzLmhvc3RuYW1lKS50b0JlKCdob3N0LmRvbWFpbi50bGQnKTtcbiAgICBleHBlY3Qob3B0cy5tZXRob2QpLnRvQmUoJ1BVVCcpO1xuICAgIGV4cGVjdChvcHRzLnBvcnQpLnRvQmUoJzEyMycpO1xuICAgIGV4cGVjdChvcHRzLnBhdGgpLnRvQmUoJy9wYXRoL3RvL3Jlc291cmNlP3F1ZXJ5PXN0cmluZycpO1xuXG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBsZXQgcGF5bG9hZDogc3RyaW5nO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9uKGV2dDogc3RyaW5nLCBjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB7XG4gICAgICAgIGVtaXR0ZXIub24oZXZ0LCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIG9uY2UoZXZ0OiBzdHJpbmcsIGNhbGxiYWNrOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpIHtcbiAgICAgICAgZW1pdHRlci5vbmNlKGV2dCwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICB3cml0ZShzdHI6IHN0cmluZykge1xuICAgICAgICBwYXlsb2FkID0gc3RyO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBlbmQ6IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHtcbiAgICAgICAgZXhwZWN0KEpTT04ucGFyc2UocGF5bG9hZCB8fCAne30nKSkudG9FcXVhbCh7XG4gICAgICAgICAgRGF0YTogZGF0YSxcbiAgICAgICAgICBMb2dpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBwaHlzaWNhbElkLFxuICAgICAgICAgIFJlYXNvbjogcmVhc29uLFxuICAgICAgICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgICAgICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgICAgICAgU3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgICBjYih7IHN0YXR1c0NvZGU6IDUwMCwgc3RhdHVzTWVzc2FnZTogJ0ludGVybmFsIEVycm9yJyB9KTtcbiAgICAgIH0pLFxuICAgIH0gYXMgYW55O1xuICB9KTtcblxuICByZXR1cm4gZXhwZWN0KGNmbi5zZW5kUmVzcG9uc2UoZXZlbnQsIHN0YXR1cywgcGh5c2ljYWxJZCwgZGF0YSwgcmVhc29uKSlcbiAgICAucmVqZWN0cy50b1Rocm93KCdVbmV4cGVjdGVkIGVycm9yIHNlbmRpbmcgcmVzb3Buc2UgdG8gQ2xvdWRGb3JtYXRpb246IEhUVFAgNTAwIChJbnRlcm5hbCBFcnJvciknKTtcbn0pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
4
|
-
const _exec = require("../../custom-resource-handlers/src/_exec");
|
|
5
|
-
test('forwards stdout (single-line)', () => expect(_exec('node', '-e', 'process.stdout.write("OKAY")')).resolves.toBe('OKAY'));
|
|
6
|
-
test('forwards stdout (multi-line)', () => expect(_exec('node', '-e', 'process.stdout.write("OKAY\\nGREAT")')).resolves.toBe('OKAY\nGREAT'));
|
|
7
|
-
test('fails if the command exits with non-zero status', () => expect(_exec('node', '-e', 'process.exit(10)')).rejects.toThrow('Exited with status 10'));
|
|
8
|
-
test('fails if the command is killed by a signal', () => expect(_exec('node', '-e', 'process.kill(process.pid, "SIGKILL")')).rejects.toThrow('Killed by SIGKILL'));
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2V4ZWMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIl9leGVjLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwREFBMEQ7QUFDMUQsa0VBQW1FO0FBRW5FLElBQUksQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUUsQ0FDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUNsRixDQUFDO0FBRUYsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRSxDQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsc0NBQXNDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQ2pHLENBQUM7QUFFRixJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFLENBQzNELE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUN6RixDQUFDO0FBRUYsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRSxDQUN0RCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsc0NBQXNDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FDekcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmltcG9ydCBfZXhlYyA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvX2V4ZWMnKTtcblxudGVzdCgnZm9yd2FyZHMgc3Rkb3V0IChzaW5nbGUtbGluZSknLCAoKSA9PlxuICBleHBlY3QoX2V4ZWMoJ25vZGUnLCAnLWUnLCAncHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJPS0FZXCIpJykpLnJlc29sdmVzLnRvQmUoJ09LQVknKSxcbik7XG5cbnRlc3QoJ2ZvcndhcmRzIHN0ZG91dCAobXVsdGktbGluZSknLCAoKSA9PlxuICBleHBlY3QoX2V4ZWMoJ25vZGUnLCAnLWUnLCAncHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJPS0FZXFxcXG5HUkVBVFwiKScpKS5yZXNvbHZlcy50b0JlKCdPS0FZXFxuR1JFQVQnKSxcbik7XG5cbnRlc3QoJ2ZhaWxzIGlmIHRoZSBjb21tYW5kIGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzJywgKCkgPT5cbiAgZXhwZWN0KF9leGVjKCdub2RlJywgJy1lJywgJ3Byb2Nlc3MuZXhpdCgxMCknKSkucmVqZWN0cy50b1Rocm93KCdFeGl0ZWQgd2l0aCBzdGF0dXMgMTAnKSxcbik7XG5cbnRlc3QoJ2ZhaWxzIGlmIHRoZSBjb21tYW5kIGlzIGtpbGxlZCBieSBhIHNpZ25hbCcsICgpID0+XG4gIGV4cGVjdChfZXhlYygnbm9kZScsICctZScsICdwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIFwiU0lHS0lMTFwiKScpKS5yZWplY3RzLnRvVGhyb3coJ0tpbGxlZCBieSBTSUdLSUxMJyksXG4pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const os = require("os");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const _rmrf = require("../../custom-resource-handlers/src/_rmrf");
|
|
8
|
-
test('removes a full directory', () => {
|
|
9
|
-
const dir = fs.mkdtempSync(os.tmpdir() + '/');
|
|
10
|
-
fs.writeFileSync(path.join(dir, 'exhibit-A'), 'Exhibit A');
|
|
11
|
-
return expect(_rmrf(dir).then(() => fs.existsSync(dir))).resolves.toBeFalsy();
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JtcmYudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIl9ybXJmLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwREFBMEQ7QUFDMUQseUJBQTBCO0FBQzFCLHlCQUEwQjtBQUMxQiw2QkFBOEI7QUFFOUIsa0VBQW1FO0FBRW5FLElBQUksQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDcEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDOUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNoRixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbmltcG9ydCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5pbXBvcnQgb3MgPSByZXF1aXJlKCdvcycpO1xuaW1wb3J0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5cbmltcG9ydCBfcm1yZiA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvX3JtcmYnKTtcblxudGVzdCgncmVtb3ZlcyBhIGZ1bGwgZGlyZWN0b3J5JywgKCkgPT4ge1xuICBjb25zdCBkaXIgPSBmcy5ta2R0ZW1wU3luYyhvcy50bXBkaXIoKSArICcvJyk7XG4gIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGRpciwgJ2V4aGliaXQtQScpLCAnRXhoaWJpdCBBJyk7XG4gIHJldHVybiBleHBlY3QoX3JtcmYoZGlyKS50aGVuKCgpID0+IGZzLmV4aXN0c1N5bmMoZGlyKSkpLnJlc29sdmVzLnRvQmVGYWxzeSgpO1xufSk7XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const aws = require("aws-sdk");
|
|
7
|
-
const jest_create_mock_instance_1 = require("jest-create-mock-instance");
|
|
8
|
-
const cfn = require("../../custom-resource-handlers/src/_cloud-formation");
|
|
9
|
-
const context = { awsRequestId: '90E99AAE-B120-409A-9156-0C5925FDD996' };
|
|
10
|
-
const eventBase = {
|
|
11
|
-
LogicalResourceId: 'ResourceID12345689',
|
|
12
|
-
ResponseURL: 'https://response/url',
|
|
13
|
-
RequestId: '5EF100FB-0075-4716-970B-FBCA05BFE118',
|
|
14
|
-
ResourceProperties: {
|
|
15
|
-
ServiceToken: 'Service-Token (Would be the function ARN',
|
|
16
|
-
ResourceVersion: 'The hash of the function code',
|
|
17
|
-
DnCommonName: 'Test',
|
|
18
|
-
DnCountry: 'FR',
|
|
19
|
-
DnStateOrProvince: 'TestLand',
|
|
20
|
-
DnLocality: 'Test City',
|
|
21
|
-
DnOrganizationName: 'Test, Inc.',
|
|
22
|
-
DnOrganizationalUnitName: 'QA Department',
|
|
23
|
-
DnEmailAddress: 'test@acme.test',
|
|
24
|
-
KeyUsage: 'critical,use-the-key',
|
|
25
|
-
ExtendedKeyUsage: 'critical,abuse-the-key',
|
|
26
|
-
PrivateKeySecretId: 'arn:::private-key-secret',
|
|
27
|
-
},
|
|
28
|
-
ResourceType: 'Custom::Resource::Type',
|
|
29
|
-
StackId: 'StackID-1324597',
|
|
30
|
-
};
|
|
31
|
-
const mockTmpDir = '/tmp/directory/is/phony';
|
|
32
|
-
const mockPrivateKey = 'Pretend private key';
|
|
33
|
-
const mockCsr = 'Pretend CSR';
|
|
34
|
-
const mockCertificate = 'Pretend Certificate';
|
|
35
|
-
const csrDocument = `[ req ]
|
|
36
|
-
default_md = sha256
|
|
37
|
-
distinguished_name = dn
|
|
38
|
-
prompt = no
|
|
39
|
-
req_extensions = extensions
|
|
40
|
-
string_mask = utf8only
|
|
41
|
-
utf8 = yes
|
|
42
|
-
|
|
43
|
-
[ dn ]
|
|
44
|
-
CN = ${eventBase.ResourceProperties.DnCommonName}
|
|
45
|
-
C = ${eventBase.ResourceProperties.DnCountry}
|
|
46
|
-
ST = ${eventBase.ResourceProperties.DnStateOrProvince}
|
|
47
|
-
L = ${eventBase.ResourceProperties.DnLocality}
|
|
48
|
-
O = ${eventBase.ResourceProperties.DnOrganizationName}
|
|
49
|
-
OU = ${eventBase.ResourceProperties.DnOrganizationalUnitName}
|
|
50
|
-
emailAddress = ${eventBase.ResourceProperties.DnEmailAddress}
|
|
51
|
-
|
|
52
|
-
[ extensions ]
|
|
53
|
-
extendedKeyUsage = ${eventBase.ResourceProperties.ExtendedKeyUsage}
|
|
54
|
-
keyUsage = ${eventBase.ResourceProperties.KeyUsage}
|
|
55
|
-
subjectKeyIdentifier = hash`;
|
|
56
|
-
jest.spyOn(fs, 'mkdtemp').mockName('fs.mkdtemp')
|
|
57
|
-
.mockImplementation(async (_, cb) => cb(undefined, mockTmpDir));
|
|
58
|
-
fs.readFile = jest.fn().mockName('fs.readFile')
|
|
59
|
-
.mockImplementation(async (file, opts, cb) => {
|
|
60
|
-
expect(opts.encoding).toBe('utf8');
|
|
61
|
-
switch (file) {
|
|
62
|
-
case require('path').join(mockTmpDir, 'csr.pem'):
|
|
63
|
-
return cb(undefined, mockCsr);
|
|
64
|
-
case require('path').join(mockTmpDir, 'cert.pem'):
|
|
65
|
-
return cb(undefined, mockCertificate);
|
|
66
|
-
default:
|
|
67
|
-
cb(new Error('Unexpected call!'));
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
const mockWriteFile = fs.writeFile = jest.fn().mockName('fs.writeFile')
|
|
71
|
-
.mockImplementation((_pth, _data, _opts, cb) => cb());
|
|
72
|
-
const mockSecretsManager = (0, jest_create_mock_instance_1.createMockInstance)(aws.SecretsManager);
|
|
73
|
-
aws.SecretsManager = jest.fn().mockName('SecretsManager')
|
|
74
|
-
.mockImplementation(() => mockSecretsManager);
|
|
75
|
-
mockSecretsManager.getSecretValue = jest.fn().mockName('SecretsManager.getSecretValue')
|
|
76
|
-
.mockImplementation(() => ({ promise: () => Promise.resolve({ SecretString: mockPrivateKey }) }));
|
|
77
|
-
const mockExec = jest.fn().mockName('_exec').mockRejectedValue(new Error('Unexpected call!'));
|
|
78
|
-
jest.mock('../../custom-resource-handlers/src/_exec', () => mockExec);
|
|
79
|
-
jest.mock('../../custom-resource-handlers/src/_rmrf', () => mockRmrf);
|
|
80
|
-
const mockRmrf = jest.fn().mockName('_rmrf')
|
|
81
|
-
.mockResolvedValue(undefined);
|
|
82
|
-
jest.mock('../../custom-resource-handlers/src/_rmrf', () => mockRmrf);
|
|
83
|
-
jest.spyOn(cfn, 'sendResponse').mockName('cfn.sendResponse').mockResolvedValue(Promise.resolve());
|
|
84
|
-
beforeEach(() => jest.clearAllMocks());
|
|
85
|
-
test('Create', async () => {
|
|
86
|
-
const event = {
|
|
87
|
-
RequestType: cfn.RequestType.CREATE,
|
|
88
|
-
PhysicalResourceId: undefined,
|
|
89
|
-
...eventBase,
|
|
90
|
-
};
|
|
91
|
-
mockExec.mockImplementation(async (cmd, ...args) => {
|
|
92
|
-
await expect(cmd).toBe('/opt/openssl');
|
|
93
|
-
switch (args[0]) {
|
|
94
|
-
case 'req':
|
|
95
|
-
await expect(args).toEqual(['req', '-config', require('path').join(mockTmpDir, 'csr.config'),
|
|
96
|
-
'-key', require('path').join(mockTmpDir, 'private_key.pem'),
|
|
97
|
-
'-out', require('path').join(mockTmpDir, 'csr.pem'),
|
|
98
|
-
'-new']);
|
|
99
|
-
break;
|
|
100
|
-
case 'x509':
|
|
101
|
-
await expect(args).toEqual(['x509', '-in', require('path').join(mockTmpDir, 'csr.pem'),
|
|
102
|
-
'-out', require('path').join(mockTmpDir, 'cert.pem'),
|
|
103
|
-
'-req',
|
|
104
|
-
'-signkey', require('path').join(mockTmpDir, 'private_key.pem'),
|
|
105
|
-
'-days', '365']);
|
|
106
|
-
break;
|
|
107
|
-
default:
|
|
108
|
-
throw new Error('Unexpected call!');
|
|
109
|
-
}
|
|
110
|
-
return '';
|
|
111
|
-
});
|
|
112
|
-
const { handler } = require('../../custom-resource-handlers/src/certificate-signing-request');
|
|
113
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
114
|
-
await expect(mockWriteFile)
|
|
115
|
-
.toBeCalledWith(path.join(mockTmpDir, 'csr.config'), csrDocument, expect.anything(), expect.any(Function));
|
|
116
|
-
await expect(mockWriteFile)
|
|
117
|
-
.toBeCalledWith(path.join(mockTmpDir, 'private_key.pem'), mockPrivateKey, expect.anything(), expect.any(Function));
|
|
118
|
-
await expect(mockRmrf).toBeCalledWith(mockTmpDir);
|
|
119
|
-
return expect(cfn.sendResponse)
|
|
120
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, event.LogicalResourceId, { Ref: event.LogicalResourceId, CSR: mockCsr, SelfSignedCertificate: mockCertificate });
|
|
121
|
-
});
|
|
122
|
-
test('Update', async () => {
|
|
123
|
-
const event = {
|
|
124
|
-
RequestType: cfn.RequestType.UPDATE,
|
|
125
|
-
PhysicalResourceId: eventBase.LogicalResourceId,
|
|
126
|
-
OldResourceProperties: eventBase.ResourceProperties,
|
|
127
|
-
...eventBase,
|
|
128
|
-
};
|
|
129
|
-
mockExec.mockImplementation(async (cmd, ...args) => {
|
|
130
|
-
await expect(cmd).toBe('/opt/openssl');
|
|
131
|
-
switch (args[0]) {
|
|
132
|
-
case 'req':
|
|
133
|
-
await expect(args).toEqual(['req', '-config', require('path').join(mockTmpDir, 'csr.config'),
|
|
134
|
-
'-key', require('path').join(mockTmpDir, 'private_key.pem'),
|
|
135
|
-
'-out', require('path').join(mockTmpDir, 'csr.pem'),
|
|
136
|
-
'-new']);
|
|
137
|
-
break;
|
|
138
|
-
case 'x509':
|
|
139
|
-
await expect(args).toEqual(['x509', '-in', require('path').join(mockTmpDir, 'csr.pem'),
|
|
140
|
-
'-out', require('path').join(mockTmpDir, 'cert.pem'),
|
|
141
|
-
'-req',
|
|
142
|
-
'-signkey', require('path').join(mockTmpDir, 'private_key.pem'),
|
|
143
|
-
'-days', '365']);
|
|
144
|
-
break;
|
|
145
|
-
default:
|
|
146
|
-
throw new Error('Unexpected call!');
|
|
147
|
-
}
|
|
148
|
-
return '';
|
|
149
|
-
});
|
|
150
|
-
const { handler } = require('../../custom-resource-handlers/src/certificate-signing-request');
|
|
151
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
152
|
-
await expect(mockWriteFile)
|
|
153
|
-
.toBeCalledWith(path.join(mockTmpDir, 'csr.config'), csrDocument, expect.anything(), expect.any(Function));
|
|
154
|
-
await expect(mockWriteFile)
|
|
155
|
-
.toBeCalledWith(path.join(mockTmpDir, 'private_key.pem'), mockPrivateKey, expect.anything(), expect.any(Function));
|
|
156
|
-
await expect(mockRmrf).toBeCalledWith(mockTmpDir);
|
|
157
|
-
return expect(cfn.sendResponse)
|
|
158
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, event.LogicalResourceId, { Ref: event.LogicalResourceId, CSR: mockCsr, SelfSignedCertificate: mockCertificate });
|
|
159
|
-
});
|
|
160
|
-
test('Delete', async () => {
|
|
161
|
-
const event = {
|
|
162
|
-
RequestType: cfn.RequestType.DELETE,
|
|
163
|
-
PhysicalResourceId: eventBase.LogicalResourceId,
|
|
164
|
-
...eventBase,
|
|
165
|
-
};
|
|
166
|
-
const { handler } = require('../../custom-resource-handlers/src/certificate-signing-request');
|
|
167
|
-
await expect(handler(event, context)).resolves.toBe(undefined);
|
|
168
|
-
return expect(cfn.sendResponse)
|
|
169
|
-
.toBeCalledWith(event, cfn.Status.SUCCESS, event.LogicalResourceId, { Ref: event.LogicalResourceId });
|
|
170
|
-
});
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUtc2lnbmluZy1yZXF1ZXN0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZXJ0aWZpY2F0ZS1zaWduaW5nLXJlcXVlc3QudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBEQUEwRDtBQUMxRCx5QkFBMEI7QUFDMUIsNkJBQThCO0FBQzlCLCtCQUFnQztBQUNoQyx5RUFBK0Q7QUFDL0QsMkVBQTRFO0FBRzVFLE1BQU0sT0FBTyxHQUFtQixFQUFFLFlBQVksRUFBRSxzQ0FBc0MsRUFBb0IsQ0FBQztBQUMzRyxNQUFNLFNBQVMsR0FBRztJQUNoQixpQkFBaUIsRUFBRSxvQkFBb0I7SUFDdkMsV0FBVyxFQUFFLHNCQUFzQjtJQUNuQyxTQUFTLEVBQUUsc0NBQXNDO0lBQ2pELGtCQUFrQixFQUFFO1FBQ2xCLFlBQVksRUFBRSwwQ0FBMEM7UUFDeEQsZUFBZSxFQUFFLCtCQUErQjtRQUVoRCxZQUFZLEVBQUUsTUFBTTtRQUNwQixTQUFTLEVBQUUsSUFBSTtRQUNmLGlCQUFpQixFQUFFLFVBQVU7UUFDN0IsVUFBVSxFQUFFLFdBQVc7UUFDdkIsa0JBQWtCLEVBQUUsWUFBWTtRQUNoQyx3QkFBd0IsRUFBRSxlQUFlO1FBQ3pDLGNBQWMsRUFBRSxnQkFBZ0I7UUFDaEMsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxnQkFBZ0IsRUFBRSx3QkFBd0I7UUFDMUMsa0JBQWtCLEVBQUUsMEJBQTBCO0tBQy9DO0lBQ0QsWUFBWSxFQUFFLHdCQUF3QjtJQUN0QyxPQUFPLEVBQUUsaUJBQWlCO0NBQzNCLENBQUM7QUFDRixNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztBQUM3QyxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQztBQUM3QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDOUIsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUM7QUFFOUMsTUFBTSxXQUFXLEdBQUc7Ozs7Ozs7Ozt5QkFTSyxTQUFTLENBQUMsa0JBQWtCLENBQUMsWUFBWTt5QkFDekMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFNBQVM7eUJBQ3RDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUI7eUJBQzlDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVO3lCQUN2QyxTQUFTLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCO3lCQUMvQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCO3lCQUNyRCxTQUFTLENBQUMsa0JBQWtCLENBQUMsY0FBYzs7O3lCQUczQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCO3lCQUM3QyxTQUFTLENBQUMsa0JBQWtCLENBQUMsUUFBUTs0QkFDbEMsQ0FBQztBQUU3QixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0tBQzdDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7S0FDNUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsUUFBUSxJQUFJLEVBQUU7UUFDWixLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQztZQUM5QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7WUFDL0MsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3hDO1lBQ0UsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztLQUNyQztBQUNILENBQUMsQ0FBUSxDQUFDO0FBQ1osTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztLQUNwRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQVEsQ0FBQztBQUMvRCxNQUFNLGtCQUFrQixHQUFHLElBQUEsOENBQWtCLEVBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ2xFLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztLQUN0RCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBUSxDQUFDO0FBQ3ZELGtCQUFrQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLCtCQUErQixDQUFDO0tBQ3BGLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBUSxDQUFDO0FBQzNHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0FBQzlGLElBQUksQ0FBQyxJQUFJLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztLQUN6QyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBRWxHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUV2QyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ3hCLE1BQU0sS0FBSyxHQUFjO1FBQ3ZCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU07UUFDbkMsa0JBQWtCLEVBQUUsU0FBUztRQUM3QixHQUFHLFNBQVM7S0FDYixDQUFDO0lBRUYsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxHQUFXLEVBQUUsR0FBRyxJQUFjLEVBQUUsRUFBRTtRQUNuRSxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZixLQUFLLEtBQUs7Z0JBQ1IsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUM7b0JBQzFGLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztvQkFDM0QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQztvQkFDbkQsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO29CQUNwRixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO29CQUNwRCxNQUFNO29CQUNOLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztvQkFDL0QsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQztTQUN4QixjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQ2pELFdBQVcsRUFDWCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUM7U0FDeEIsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEVBQ3RELGNBQWMsRUFDZCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztTQUM1QixjQUFjLENBQUMsS0FBSyxFQUNuQixHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFDbEIsS0FBSyxDQUFDLGlCQUFpQixFQUN2QixFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBQzlGLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN4QixNQUFNLEtBQUssR0FBYztRQUN2QixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNO1FBQ25DLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxpQkFBaUI7UUFDL0MscUJBQXFCLEVBQUUsU0FBUyxDQUFDLGtCQUFrQjtRQUNuRCxHQUFHLFNBQVM7S0FDYixDQUFDO0lBRUYsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxHQUFXLEVBQUUsR0FBRyxJQUFjLEVBQUUsRUFBRTtRQUNuRSxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZixLQUFLLEtBQUs7Z0JBQ1IsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUM7b0JBQzFGLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztvQkFDM0QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQztvQkFDbkQsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDWCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO29CQUNwRixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO29CQUNwRCxNQUFNO29CQUNOLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztvQkFDL0QsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO0lBQzlGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQztTQUN4QixjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQ2pELFdBQVcsRUFDWCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUM7U0FDeEIsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEVBQ3RELGNBQWMsRUFDZCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztTQUM1QixjQUFjLENBQUMsS0FBSyxFQUNuQixHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFDbEIsS0FBSyxDQUFDLGlCQUFpQixFQUN2QixFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBQzlGLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN4QixNQUFNLEtBQUssR0FBYztRQUN2QixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNO1FBQ25DLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxpQkFBaUI7UUFDL0MsR0FBRyxTQUFTO0tBQ2IsQ0FBQztJQUVGLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztJQUM5RixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1NBQzVCLGNBQWMsQ0FBQyxLQUFLLEVBQ25CLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUNsQixLQUFLLENBQUMsaUJBQWlCLEVBQ3ZCLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5pbXBvcnQgZnMgPSByZXF1aXJlKCdmcycpO1xuaW1wb3J0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5pbXBvcnQgYXdzID0gcmVxdWlyZSgnYXdzLXNkaycpO1xuaW1wb3J0IHsgY3JlYXRlTW9ja0luc3RhbmNlIH0gZnJvbSAnamVzdC1jcmVhdGUtbW9jay1pbnN0YW5jZSc7XG5pbXBvcnQgY2ZuID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fY2xvdWQtZm9ybWF0aW9uJyk7XG5pbXBvcnQgbGFtYmRhID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fbGFtYmRhJyk7XG5cbmNvbnN0IGNvbnRleHQ6IGxhbWJkYS5Db250ZXh0ID0geyBhd3NSZXF1ZXN0SWQ6ICc5MEU5OUFBRS1CMTIwLTQwOUEtOTE1Ni0wQzU5MjVGREQ5OTYnIH0gYXMgbGFtYmRhLkNvbnRleHQ7XG5jb25zdCBldmVudEJhc2UgPSB7XG4gIExvZ2ljYWxSZXNvdXJjZUlkOiAnUmVzb3VyY2VJRDEyMzQ1Njg5JyxcbiAgUmVzcG9uc2VVUkw6ICdodHRwczovL3Jlc3BvbnNlL3VybCcsXG4gIFJlcXVlc3RJZDogJzVFRjEwMEZCLTAwNzUtNDcxNi05NzBCLUZCQ0EwNUJGRTExOCcsXG4gIFJlc291cmNlUHJvcGVydGllczoge1xuICAgIFNlcnZpY2VUb2tlbjogJ1NlcnZpY2UtVG9rZW4gKFdvdWxkIGJlIHRoZSBmdW5jdGlvbiBBUk4nLFxuICAgIFJlc291cmNlVmVyc2lvbjogJ1RoZSBoYXNoIG9mIHRoZSBmdW5jdGlvbiBjb2RlJyxcblxuICAgIERuQ29tbW9uTmFtZTogJ1Rlc3QnLFxuICAgIERuQ291bnRyeTogJ0ZSJyxcbiAgICBEblN0YXRlT3JQcm92aW5jZTogJ1Rlc3RMYW5kJyxcbiAgICBEbkxvY2FsaXR5OiAnVGVzdCBDaXR5JyxcbiAgICBEbk9yZ2FuaXphdGlvbk5hbWU6ICdUZXN0LCBJbmMuJyxcbiAgICBEbk9yZ2FuaXphdGlvbmFsVW5pdE5hbWU6ICdRQSBEZXBhcnRtZW50JyxcbiAgICBEbkVtYWlsQWRkcmVzczogJ3Rlc3RAYWNtZS50ZXN0JyxcbiAgICBLZXlVc2FnZTogJ2NyaXRpY2FsLHVzZS10aGUta2V5JyxcbiAgICBFeHRlbmRlZEtleVVzYWdlOiAnY3JpdGljYWwsYWJ1c2UtdGhlLWtleScsXG4gICAgUHJpdmF0ZUtleVNlY3JldElkOiAnYXJuOjo6cHJpdmF0ZS1rZXktc2VjcmV0JyxcbiAgfSxcbiAgUmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpSZXNvdXJjZTo6VHlwZScsXG4gIFN0YWNrSWQ6ICdTdGFja0lELTEzMjQ1OTcnLFxufTtcbmNvbnN0IG1vY2tUbXBEaXIgPSAnL3RtcC9kaXJlY3RvcnkvaXMvcGhvbnknO1xuY29uc3QgbW9ja1ByaXZhdGVLZXkgPSAnUHJldGVuZCBwcml2YXRlIGtleSc7XG5jb25zdCBtb2NrQ3NyID0gJ1ByZXRlbmQgQ1NSJztcbmNvbnN0IG1vY2tDZXJ0aWZpY2F0ZSA9ICdQcmV0ZW5kIENlcnRpZmljYXRlJztcblxuY29uc3QgY3NyRG9jdW1lbnQgPSBgWyByZXEgXVxuZGVmYXVsdF9tZCAgICAgICAgICAgPSBzaGEyNTZcbmRpc3Rpbmd1aXNoZWRfbmFtZSAgID0gZG5cbnByb21wdCAgICAgICAgICAgICAgID0gbm9cbnJlcV9leHRlbnNpb25zICAgICAgID0gZXh0ZW5zaW9uc1xuc3RyaW5nX21hc2sgICAgICAgICAgPSB1dGY4b25seVxudXRmOCAgICAgICAgICAgICAgICAgPSB5ZXNcblxuWyBkbiBdXG5DTiAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EbkNvbW1vbk5hbWV9XG5DICAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EbkNvdW50cnl9XG5TVCAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EblN0YXRlT3JQcm92aW5jZX1cbkwgICAgICAgICAgICAgICAgICAgID0gJHtldmVudEJhc2UuUmVzb3VyY2VQcm9wZXJ0aWVzLkRuTG9jYWxpdHl9XG5PICAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5Ebk9yZ2FuaXphdGlvbk5hbWV9XG5PVSAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5Ebk9yZ2FuaXphdGlvbmFsVW5pdE5hbWV9XG5lbWFpbEFkZHJlc3MgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EbkVtYWlsQWRkcmVzc31cblxuWyBleHRlbnNpb25zIF1cbmV4dGVuZGVkS2V5VXNhZ2UgICAgID0gJHtldmVudEJhc2UuUmVzb3VyY2VQcm9wZXJ0aWVzLkV4dGVuZGVkS2V5VXNhZ2V9XG5rZXlVc2FnZSAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5LZXlVc2FnZX1cbnN1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaGA7XG5cbmplc3Quc3B5T24oZnMsICdta2R0ZW1wJykubW9ja05hbWUoJ2ZzLm1rZHRlbXAnKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKGFzeW5jIChfLCBjYikgPT4gY2IodW5kZWZpbmVkIGFzIGFueSwgbW9ja1RtcERpcikpO1xuZnMucmVhZEZpbGUgPSBqZXN0LmZuKCkubW9ja05hbWUoJ2ZzLnJlYWRGaWxlJylcbiAgLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoZmlsZSwgb3B0cywgY2IpID0+IHtcbiAgICBleHBlY3Qob3B0cy5lbmNvZGluZykudG9CZSgndXRmOCcpO1xuICAgIHN3aXRjaCAoZmlsZSkge1xuICAgICAgY2FzZSByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAnY3NyLnBlbScpOlxuICAgICAgICByZXR1cm4gY2IodW5kZWZpbmVkLCBtb2NrQ3NyKTtcbiAgICAgIGNhc2UgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2NlcnQucGVtJyk6XG4gICAgICAgIHJldHVybiBjYih1bmRlZmluZWQsIG1vY2tDZXJ0aWZpY2F0ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjYihuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgY2FsbCEnKSk7XG4gICAgfVxuICB9KSBhcyBhbnk7XG5jb25zdCBtb2NrV3JpdGVGaWxlID0gZnMud3JpdGVGaWxlID0gamVzdC5mbigpLm1vY2tOYW1lKCdmcy53cml0ZUZpbGUnKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKChfcHRoLCBfZGF0YSwgX29wdHMsIGNiKSA9PiBjYigpKSBhcyBhbnk7XG5jb25zdCBtb2NrU2VjcmV0c01hbmFnZXIgPSBjcmVhdGVNb2NrSW5zdGFuY2UoYXdzLlNlY3JldHNNYW5hZ2VyKTtcbmF3cy5TZWNyZXRzTWFuYWdlciA9IGplc3QuZm4oKS5tb2NrTmFtZSgnU2VjcmV0c01hbmFnZXInKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tTZWNyZXRzTWFuYWdlcikgYXMgYW55O1xubW9ja1NlY3JldHNNYW5hZ2VyLmdldFNlY3JldFZhbHVlID0gamVzdC5mbigpLm1vY2tOYW1lKCdTZWNyZXRzTWFuYWdlci5nZXRTZWNyZXRWYWx1ZScpXG4gIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHsgcHJvbWlzZTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHsgU2VjcmV0U3RyaW5nOiBtb2NrUHJpdmF0ZUtleSB9KSB9KSkgYXMgYW55O1xuY29uc3QgbW9ja0V4ZWMgPSBqZXN0LmZuKCkubW9ja05hbWUoJ19leGVjJykubW9ja1JlamVjdGVkVmFsdWUobmV3IEVycm9yKCdVbmV4cGVjdGVkIGNhbGwhJykpO1xuamVzdC5tb2NrKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL19leGVjJywgKCkgPT4gbW9ja0V4ZWMpO1xuamVzdC5tb2NrKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL19ybXJmJywgKCkgPT4gbW9ja1JtcmYpO1xuY29uc3QgbW9ja1JtcmYgPSBqZXN0LmZuKCkubW9ja05hbWUoJ19ybXJmJylcbiAgLm1vY2tSZXNvbHZlZFZhbHVlKHVuZGVmaW5lZCk7XG5qZXN0Lm1vY2soJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvX3JtcmYnLCAoKSA9PiBtb2NrUm1yZik7XG5qZXN0LnNweU9uKGNmbiwgJ3NlbmRSZXNwb25zZScpLm1vY2tOYW1lKCdjZm4uc2VuZFJlc3BvbnNlJykubW9ja1Jlc29sdmVkVmFsdWUoUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5iZWZvcmVFYWNoKCgpID0+IGplc3QuY2xlYXJBbGxNb2NrcygpKTtcblxudGVzdCgnQ3JlYXRlJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBldmVudDogY2ZuLkV2ZW50ID0ge1xuICAgIFJlcXVlc3RUeXBlOiBjZm4uUmVxdWVzdFR5cGUuQ1JFQVRFLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogdW5kZWZpbmVkLFxuICAgIC4uLmV2ZW50QmFzZSxcbiAgfTtcblxuICBtb2NrRXhlYy5tb2NrSW1wbGVtZW50YXRpb24oYXN5bmMgKGNtZDogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChjbWQpLnRvQmUoJy9vcHQvb3BlbnNzbCcpO1xuICAgIHN3aXRjaCAoYXJnc1swXSkge1xuICAgICAgY2FzZSAncmVxJzpcbiAgICAgICAgYXdhaXQgZXhwZWN0KGFyZ3MpLnRvRXF1YWwoWydyZXEnLCAnLWNvbmZpZycsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdjc3IuY29uZmlnJyksXG4gICAgICAgICAgJy1rZXknLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAncHJpdmF0ZV9rZXkucGVtJyksXG4gICAgICAgICAgJy1vdXQnLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAnY3NyLnBlbScpLFxuICAgICAgICAgICctbmV3J10pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3g1MDknOlxuICAgICAgICBhd2FpdCBleHBlY3QoYXJncykudG9FcXVhbChbJ3g1MDknLCAnLWluJywgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2Nzci5wZW0nKSxcbiAgICAgICAgICAnLW91dCcsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdjZXJ0LnBlbScpLFxuICAgICAgICAgICctcmVxJyxcbiAgICAgICAgICAnLXNpZ25rZXknLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAncHJpdmF0ZV9rZXkucGVtJyksXG4gICAgICAgICAgJy1kYXlzJywgJzM2NSddKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgY2FsbCEnKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9KTtcblxuICBjb25zdCB7IGhhbmRsZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvY2VydGlmaWNhdGUtc2lnbmluZy1yZXF1ZXN0Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIGF3YWl0IGV4cGVjdChtb2NrV3JpdGVGaWxlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChwYXRoLmpvaW4obW9ja1RtcERpciwgJ2Nzci5jb25maWcnKSxcbiAgICAgIGNzckRvY3VtZW50LFxuICAgICAgZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICBleHBlY3QuYW55KEZ1bmN0aW9uKSk7XG4gIGF3YWl0IGV4cGVjdChtb2NrV3JpdGVGaWxlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChwYXRoLmpvaW4obW9ja1RtcERpciwgJ3ByaXZhdGVfa2V5LnBlbScpLFxuICAgICAgbW9ja1ByaXZhdGVLZXksXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGV4cGVjdC5hbnkoRnVuY3Rpb24pKTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tSbXJmKS50b0JlQ2FsbGVkV2l0aChtb2NrVG1wRGlyKTtcbiAgcmV0dXJuIGV4cGVjdChjZm4uc2VuZFJlc3BvbnNlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChldmVudCxcbiAgICAgIGNmbi5TdGF0dXMuU1VDQ0VTUyxcbiAgICAgIGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgeyBSZWY6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLCBDU1I6IG1vY2tDc3IsIFNlbGZTaWduZWRDZXJ0aWZpY2F0ZTogbW9ja0NlcnRpZmljYXRlIH0pO1xufSk7XG5cbnRlc3QoJ1VwZGF0ZScsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgICBSZXF1ZXN0VHlwZTogY2ZuLlJlcXVlc3RUeXBlLlVQREFURSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50QmFzZS5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBPbGRSZXNvdXJjZVByb3BlcnRpZXM6IGV2ZW50QmFzZS5SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgLi4uZXZlbnRCYXNlLFxuICB9O1xuXG4gIG1vY2tFeGVjLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoY21kOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KGNtZCkudG9CZSgnL29wdC9vcGVuc3NsJyk7XG4gICAgc3dpdGNoIChhcmdzWzBdKSB7XG4gICAgICBjYXNlICdyZXEnOlxuICAgICAgICBhd2FpdCBleHBlY3QoYXJncykudG9FcXVhbChbJ3JlcScsICctY29uZmlnJywgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2Nzci5jb25maWcnKSxcbiAgICAgICAgICAnLWtleScsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdwcml2YXRlX2tleS5wZW0nKSxcbiAgICAgICAgICAnLW91dCcsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdjc3IucGVtJyksXG4gICAgICAgICAgJy1uZXcnXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneDUwOSc6XG4gICAgICAgIGF3YWl0IGV4cGVjdChhcmdzKS50b0VxdWFsKFsneDUwOScsICctaW4nLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAnY3NyLnBlbScpLFxuICAgICAgICAgICctb3V0JywgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2NlcnQucGVtJyksXG4gICAgICAgICAgJy1yZXEnLFxuICAgICAgICAgICctc2lnbmtleScsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdwcml2YXRlX2tleS5wZW0nKSxcbiAgICAgICAgICAnLWRheXMnLCAnMzY1J10pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBjYWxsIScpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIGNvbnN0IHsgaGFuZGxlciB9ID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9jZXJ0aWZpY2F0ZS1zaWduaW5nLXJlcXVlc3QnKTtcbiAgYXdhaXQgZXhwZWN0KGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpKS5yZXNvbHZlcy50b0JlKHVuZGVmaW5lZCk7XG5cbiAgYXdhaXQgZXhwZWN0KG1vY2tXcml0ZUZpbGUpXG4gICAgLnRvQmVDYWxsZWRXaXRoKHBhdGguam9pbihtb2NrVG1wRGlyLCAnY3NyLmNvbmZpZycpLFxuICAgICAgY3NyRG9jdW1lbnQsXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGV4cGVjdC5hbnkoRnVuY3Rpb24pKTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tXcml0ZUZpbGUpXG4gICAgLnRvQmVDYWxsZWRXaXRoKHBhdGguam9pbihtb2NrVG1wRGlyLCAncHJpdmF0ZV9rZXkucGVtJyksXG4gICAgICBtb2NrUHJpdmF0ZUtleSxcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgZXhwZWN0LmFueShGdW5jdGlvbikpO1xuICBhd2FpdCBleHBlY3QobW9ja1JtcmYpLnRvQmVDYWxsZWRXaXRoKG1vY2tUbXBEaXIpO1xuICByZXR1cm4gZXhwZWN0KGNmbi5zZW5kUmVzcG9uc2UpXG4gICAgLnRvQmVDYWxsZWRXaXRoKGV2ZW50LFxuICAgICAgY2ZuLlN0YXR1cy5TVUNDRVNTLFxuICAgICAgZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgICB7IFJlZjogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsIENTUjogbW9ja0NzciwgU2VsZlNpZ25lZENlcnRpZmljYXRlOiBtb2NrQ2VydGlmaWNhdGUgfSk7XG59KTtcblxudGVzdCgnRGVsZXRlJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBldmVudDogY2ZuLkV2ZW50ID0ge1xuICAgIFJlcXVlc3RUeXBlOiBjZm4uUmVxdWVzdFR5cGUuREVMRVRFLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnRCYXNlLkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIC4uLmV2ZW50QmFzZSxcbiAgfTtcblxuICBjb25zdCB7IGhhbmRsZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvY2VydGlmaWNhdGUtc2lnbmluZy1yZXF1ZXN0Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIHJldHVybiBleHBlY3QoY2ZuLnNlbmRSZXNwb25zZSlcbiAgICAudG9CZUNhbGxlZFdpdGgoZXZlbnQsXG4gICAgICBjZm4uU3RhdHVzLlNVQ0NFU1MsXG4gICAgICBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHsgUmVmOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCB9KTtcbn0pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|