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.
Files changed (72) hide show
  1. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/create-release.js +0 -0
  2. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package-lock.json +100 -95
  3. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package.json +0 -0
  4. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/publish.sh +0 -0
  5. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/sign-files.sh +0 -0
  6. package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/with-signing-key.sh +0 -0
  7. package/cdk.out/{asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238 → asset.3044256b9586ecb8a7709713aaca30ceb34f699e3f93c8858f633aaf2f0c7140}/index.js +17 -11
  8. package/cdk.out/delivlib-test.assets.json +8 -8
  9. package/cdk.out/delivlib-test.template.json +32 -27
  10. package/cdk.out/manifest.json +272 -272
  11. package/cdk.out/tree.json +442 -437
  12. package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
  13. package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
  14. package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
  15. package/lib/publishing/github/package-lock.json +100 -95
  16. package/package.json +17 -18
  17. package/lib/__tests__/auto-build.test.d.ts +0 -1
  18. package/lib/__tests__/auto-build.test.js +0 -119
  19. package/lib/__tests__/build-spec.test.d.ts +0 -1
  20. package/lib/__tests__/build-spec.test.js +0 -82
  21. package/lib/__tests__/bump.test.d.ts +0 -1
  22. package/lib/__tests__/bump.test.js +0 -284
  23. package/lib/__tests__/canary.test.d.ts +0 -1
  24. package/lib/__tests__/canary.test.js +0 -144
  25. package/lib/__tests__/change-control-lambda/disable-transition.test.d.ts +0 -1
  26. package/lib/__tests__/change-control-lambda/disable-transition.test.js +0 -64
  27. package/lib/__tests__/change-control-lambda/handler.test.d.ts +0 -1
  28. package/lib/__tests__/change-control-lambda/handler.test.js +0 -143
  29. package/lib/__tests__/change-control-lambda/time-window.test.d.ts +0 -1
  30. package/lib/__tests__/change-control-lambda/time-window.test.js +0 -131
  31. package/lib/__tests__/chime-notifier.test.d.ts +0 -6
  32. package/lib/__tests__/chime-notifier.test.js +0 -138
  33. package/lib/__tests__/code-signing-cert.test.d.ts +0 -1
  34. package/lib/__tests__/code-signing-cert.test.js +0 -72
  35. package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.d.ts +0 -1
  36. package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.js +0 -100
  37. package/lib/__tests__/custom-resource-handlers/_exec.test.d.ts +0 -1
  38. package/lib/__tests__/custom-resource-handlers/_exec.test.js +0 -9
  39. package/lib/__tests__/custom-resource-handlers/_rmrf.test.d.ts +0 -1
  40. package/lib/__tests__/custom-resource-handlers/_rmrf.test.js +0 -13
  41. package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.d.ts +0 -1
  42. package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.js +0 -171
  43. package/lib/__tests__/custom-resource-handlers/pgp-secret.test.d.ts +0 -1
  44. package/lib/__tests__/custom-resource-handlers/pgp-secret.test.js +0 -169
  45. package/lib/__tests__/custom-resource-handlers/private-key.test.d.ts +0 -1
  46. package/lib/__tests__/custom-resource-handlers/private-key.test.js +0 -164
  47. package/lib/__tests__/integ.delivlib.d.ts +0 -1
  48. package/lib/__tests__/integ.delivlib.js +0 -33
  49. package/lib/__tests__/open-pgp-key-pair.test.d.ts +0 -1
  50. package/lib/__tests__/open-pgp-key-pair.test.js +0 -130
  51. package/lib/__tests__/pipeline-notifications/chime.test.d.ts +0 -1
  52. package/lib/__tests__/pipeline-notifications/chime.test.js +0 -69
  53. package/lib/__tests__/pipeline-notifications/slack.test.d.ts +0 -1
  54. package/lib/__tests__/pipeline-notifications/slack.test.js +0 -82
  55. package/lib/__tests__/pipeline.test.d.ts +0 -1
  56. package/lib/__tests__/pipeline.test.js +0 -362
  57. package/lib/__tests__/pr.test.d.ts +0 -3
  58. package/lib/__tests__/pr.test.js +0 -88
  59. package/lib/__tests__/publishing.test.d.ts +0 -1
  60. package/lib/__tests__/publishing.test.js +0 -89
  61. package/lib/__tests__/registry-sync/ecr-mirror.test.d.ts +0 -1
  62. package/lib/__tests__/registry-sync/ecr-mirror.test.js +0 -313
  63. package/lib/__tests__/registry-sync/mirror-source.test.d.ts +0 -1
  64. package/lib/__tests__/registry-sync/mirror-source.test.js +0 -225
  65. package/lib/__tests__/shellable.test.d.ts +0 -1
  66. package/lib/__tests__/shellable.test.js +0 -479
  67. package/lib/__tests__/test-stack.d.ts +0 -4
  68. package/lib/__tests__/test-stack.js +0 -184
  69. package/lib/__tests__/watcher-handler.test.d.ts +0 -1
  70. package/lib/__tests__/watcher-handler.test.js +0 -190
  71. package/lib/__tests__/watcher.test.d.ts +0 -1
  72. 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,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,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,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,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUtc2lnbmluZy1yZXF1ZXN0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZXJ0aWZpY2F0ZS1zaWduaW5nLXJlcXVlc3QudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBEQUEwRDtBQUMxRCx5QkFBMEI7QUFDMUIsNkJBQThCO0FBQzlCLCtCQUFnQztBQUNoQyx5RUFBK0Q7QUFDL0QsMkVBQTRFO0FBRzVFLE1BQU0sT0FBTyxHQUFtQixFQUFFLFlBQVksRUFBRSxzQ0FBc0MsRUFBb0IsQ0FBQztBQUMzRyxNQUFNLFNBQVMsR0FBRztJQUNoQixpQkFBaUIsRUFBRSxvQkFBb0I7SUFDdkMsV0FBVyxFQUFFLHNCQUFzQjtJQUNuQyxTQUFTLEVBQUUsc0NBQXNDO0lBQ2pELGtCQUFrQixFQUFFO1FBQ2xCLFlBQVksRUFBRSwwQ0FBMEM7UUFDeEQsZUFBZSxFQUFFLCtCQUErQjtRQUVoRCxZQUFZLEVBQUUsTUFBTTtRQUNwQixTQUFTLEVBQUUsSUFBSTtRQUNmLGlCQUFpQixFQUFFLFVBQVU7UUFDN0IsVUFBVSxFQUFFLFdBQVc7UUFDdkIsa0JBQWtCLEVBQUUsWUFBWTtRQUNoQyx3QkFBd0IsRUFBRSxlQUFlO1FBQ3pDLGNBQWMsRUFBRSxnQkFBZ0I7UUFDaEMsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxnQkFBZ0IsRUFBRSx3QkFBd0I7UUFDMUMsa0JBQWtCLEVBQUUsMEJBQTBCO0tBQy9DO0lBQ0QsWUFBWSxFQUFFLHdCQUF3QjtJQUN0QyxPQUFPLEVBQUUsaUJBQWlCO0NBQzNCLENBQUM7QUFDRixNQUFNLFVBQVUsR0FBRyx5QkFBeUIsQ0FBQztBQUM3QyxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQztBQUM3QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDOUIsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUM7QUFFOUMsTUFBTSxXQUFXLEdBQUc7Ozs7Ozs7Ozt5QkFTSyxTQUFTLENBQUMs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LE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO1NBQzVCLGNBQWMsQ0FBQyxLQUFLLEVBQ25CLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUNsQixLQUFLLENBQUMsaUJBQWlCLEVBQ3ZCLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5pbXBvcnQgZnMgPSByZXF1aXJlKCdmcycpO1xuaW1wb3J0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5pbXBvcnQgYXdzID0gcmVxdWlyZSgnYXdzLXNkaycpO1xuaW1wb3J0IHsgY3JlYXRlTW9ja0luc3RhbmNlIH0gZnJvbSAnamVzdC1jcmVhdGUtbW9jay1pbnN0YW5jZSc7XG5pbXBvcnQgY2ZuID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fY2xvdWQtZm9ybWF0aW9uJyk7XG5pbXBvcnQgbGFtYmRhID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9fbGFtYmRhJyk7XG5cbmNvbnN0IGNvbnRleHQ6IGxhbWJkYS5Db250ZXh0ID0geyBhd3NSZXF1ZXN0SWQ6ICc5MEU5OUFBRS1CMTIwLTQwOUEtOTE1Ni0wQzU5MjVGREQ5OTYnIH0gYXMgbGFtYmRhLkNvbnRleHQ7XG5jb25zdCBldmVudEJhc2UgPSB7XG4gIExvZ2ljYWxSZXNvdXJjZUlkOiAnUmVzb3VyY2VJRDEyMzQ1Njg5JyxcbiAgUmVzcG9uc2VVUkw6ICdodHRwczovL3Jlc3BvbnNlL3VybCcsXG4gIFJlcXVlc3RJZDogJzVFRjEwMEZCLTAwNzUtNDcxNi05NzBCLUZCQ0EwNUJGRTExOCcsXG4gIFJlc291cmNlUHJvcGVydGllczoge1xuICAgIFNlcnZpY2VUb2tlbjogJ1NlcnZpY2UtVG9rZW4gKFdvdWxkIGJlIHRoZSBmdW5jdGlvbiBBUk4nLFxuICAgIFJlc291cmNlVmVyc2lvbjogJ1RoZSBoYXNoIG9mIHRoZSBmdW5jdGlvbiBjb2RlJyxcblxuICAgIERuQ29tbW9uTmFtZTogJ1Rlc3QnLFxuICAgIERuQ291bnRyeTogJ0ZSJyxcbiAgICBEblN0YXRlT3JQcm92aW5jZTogJ1Rlc3RMYW5kJyxcbiAgICBEbkxvY2FsaXR5OiAnVGVzdCBDaXR5JyxcbiAgICBEbk9yZ2FuaXphdGlvbk5hbWU6ICdUZXN0LCBJbmMuJyxcbiAgICBEbk9yZ2FuaXphdGlvbmFsVW5pdE5hbWU6ICdRQSBEZXBhcnRtZW50JyxcbiAgICBEbkVtYWlsQWRkcmVzczogJ3Rlc3RAYWNtZS50ZXN0JyxcbiAgICBLZXlVc2FnZTogJ2NyaXRpY2FsLHVzZS10aGUta2V5JyxcbiAgICBFeHRlbmRlZEtleVVzYWdlOiAnY3JpdGljYWwsYWJ1c2UtdGhlLWtleScsXG4gICAgUHJpdmF0ZUtleVNlY3JldElkOiAnYXJuOjo6cHJpdmF0ZS1rZXktc2VjcmV0JyxcbiAgfSxcbiAgUmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpSZXNvdXJjZTo6VHlwZScsXG4gIFN0YWNrSWQ6ICdTdGFja0lELTEzMjQ1OTcnLFxufTtcbmNvbnN0IG1vY2tUbXBEaXIgPSAnL3RtcC9kaXJlY3RvcnkvaXMvcGhvbnknO1xuY29uc3QgbW9ja1ByaXZhdGVLZXkgPSAnUHJldGVuZCBwcml2YXRlIGtleSc7XG5jb25zdCBtb2NrQ3NyID0gJ1ByZXRlbmQgQ1NSJztcbmNvbnN0IG1vY2tDZXJ0aWZpY2F0ZSA9ICdQcmV0ZW5kIENlcnRpZmljYXRlJztcblxuY29uc3QgY3NyRG9jdW1lbnQgPSBgWyByZXEgXVxuZGVmYXVsdF9tZCAgICAgICAgICAgPSBzaGEyNTZcbmRpc3Rpbmd1aXNoZWRfbmFtZSAgID0gZG5cbnByb21wdCAgICAgICAgICAgICAgID0gbm9cbnJlcV9leHRlbnNpb25zICAgICAgID0gZXh0ZW5zaW9uc1xuc3RyaW5nX21hc2sgICAgICAgICAgPSB1dGY4b25seVxudXRmOCAgICAgICAgICAgICAgICAgPSB5ZXNcblxuWyBkbiBdXG5DTiAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EbkNvbW1vbk5hbWV9XG5DICAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EbkNvdW50cnl9XG5TVCAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EblN0YXRlT3JQcm92aW5jZX1cbkwgICAgICAgICAgICAgICAgICAgID0gJHtldmVudEJhc2UuUmVzb3VyY2VQcm9wZXJ0aWVzLkRuTG9jYWxpdHl9XG5PICAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5Ebk9yZ2FuaXphdGlvbk5hbWV9XG5PVSAgICAgICAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5Ebk9yZ2FuaXphdGlvbmFsVW5pdE5hbWV9XG5lbWFpbEFkZHJlc3MgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5EbkVtYWlsQWRkcmVzc31cblxuWyBleHRlbnNpb25zIF1cbmV4dGVuZGVkS2V5VXNhZ2UgICAgID0gJHtldmVudEJhc2UuUmVzb3VyY2VQcm9wZXJ0aWVzLkV4dGVuZGVkS2V5VXNhZ2V9XG5rZXlVc2FnZSAgICAgICAgICAgICA9ICR7ZXZlbnRCYXNlLlJlc291cmNlUHJvcGVydGllcy5LZXlVc2FnZX1cbnN1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaGA7XG5cbmplc3Quc3B5T24oZnMsICdta2R0ZW1wJykubW9ja05hbWUoJ2ZzLm1rZHRlbXAnKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKGFzeW5jIChfLCBjYikgPT4gY2IodW5kZWZpbmVkIGFzIGFueSwgbW9ja1RtcERpcikpO1xuZnMucmVhZEZpbGUgPSBqZXN0LmZuKCkubW9ja05hbWUoJ2ZzLnJlYWRGaWxlJylcbiAgLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoZmlsZSwgb3B0cywgY2IpID0+IHtcbiAgICBleHBlY3Qob3B0cy5lbmNvZGluZykudG9CZSgndXRmOCcpO1xuICAgIHN3aXRjaCAoZmlsZSkge1xuICAgICAgY2FzZSByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAnY3NyLnBlbScpOlxuICAgICAgICByZXR1cm4gY2IodW5kZWZpbmVkLCBtb2NrQ3NyKTtcbiAgICAgIGNhc2UgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2NlcnQucGVtJyk6XG4gICAgICAgIHJldHVybiBjYih1bmRlZmluZWQsIG1vY2tDZXJ0aWZpY2F0ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjYihuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgY2FsbCEnKSk7XG4gICAgfVxuICB9KSBhcyBhbnk7XG5jb25zdCBtb2NrV3JpdGVGaWxlID0gZnMud3JpdGVGaWxlID0gamVzdC5mbigpLm1vY2tOYW1lKCdmcy53cml0ZUZpbGUnKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKChfcHRoLCBfZGF0YSwgX29wdHMsIGNiKSA9PiBjYigpKSBhcyBhbnk7XG5jb25zdCBtb2NrU2VjcmV0c01hbmFnZXIgPSBjcmVhdGVNb2NrSW5zdGFuY2UoYXdzLlNlY3JldHNNYW5hZ2VyKTtcbmF3cy5TZWNyZXRzTWFuYWdlciA9IGplc3QuZm4oKS5tb2NrTmFtZSgnU2VjcmV0c01hbmFnZXInKVxuICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tTZWNyZXRzTWFuYWdlcikgYXMgYW55O1xubW9ja1NlY3JldHNNYW5hZ2VyLmdldFNlY3JldFZhbHVlID0gamVzdC5mbigpLm1vY2tOYW1lKCdTZWNyZXRzTWFuYWdlci5nZXRTZWNyZXRWYWx1ZScpXG4gIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHsgcHJvbWlzZTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHsgU2VjcmV0U3RyaW5nOiBtb2NrUHJpdmF0ZUtleSB9KSB9KSkgYXMgYW55O1xuY29uc3QgbW9ja0V4ZWMgPSBqZXN0LmZuKCkubW9ja05hbWUoJ19leGVjJykubW9ja1JlamVjdGVkVmFsdWUobmV3IEVycm9yKCdVbmV4cGVjdGVkIGNhbGwhJykpO1xuamVzdC5tb2NrKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL19leGVjJywgKCkgPT4gbW9ja0V4ZWMpO1xuamVzdC5tb2NrKCcuLi8uLi9jdXN0b20tcmVzb3VyY2UtaGFuZGxlcnMvc3JjL19ybXJmJywgKCkgPT4gbW9ja1JtcmYpO1xuY29uc3QgbW9ja1JtcmYgPSBqZXN0LmZuKCkubW9ja05hbWUoJ19ybXJmJylcbiAgLm1vY2tSZXNvbHZlZFZhbHVlKHVuZGVmaW5lZCk7XG5qZXN0Lm1vY2soJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvX3JtcmYnLCAoKSA9PiBtb2NrUm1yZik7XG5qZXN0LnNweU9uKGNmbiwgJ3NlbmRSZXNwb25zZScpLm1vY2tOYW1lKCdjZm4uc2VuZFJlc3BvbnNlJykubW9ja1Jlc29sdmVkVmFsdWUoUHJvbWlzZS5yZXNvbHZlKCkpO1xuXG5iZWZvcmVFYWNoKCgpID0+IGplc3QuY2xlYXJBbGxNb2NrcygpKTtcblxudGVzdCgnQ3JlYXRlJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBldmVudDogY2ZuLkV2ZW50ID0ge1xuICAgIFJlcXVlc3RUeXBlOiBjZm4uUmVxdWVzdFR5cGUuQ1JFQVRFLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogdW5kZWZpbmVkLFxuICAgIC4uLmV2ZW50QmFzZSxcbiAgfTtcblxuICBtb2NrRXhlYy5tb2NrSW1wbGVtZW50YXRpb24oYXN5bmMgKGNtZDogc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgIGF3YWl0IGV4cGVjdChjbWQpLnRvQmUoJy9vcHQvb3BlbnNzbCcpO1xuICAgIHN3aXRjaCAoYXJnc1swXSkge1xuICAgICAgY2FzZSAncmVxJzpcbiAgICAgICAgYXdhaXQgZXhwZWN0KGFyZ3MpLnRvRXF1YWwoWydyZXEnLCAnLWNvbmZpZycsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdjc3IuY29uZmlnJyksXG4gICAgICAgICAgJy1rZXknLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAncHJpdmF0ZV9rZXkucGVtJyksXG4gICAgICAgICAgJy1vdXQnLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAnY3NyLnBlbScpLFxuICAgICAgICAgICctbmV3J10pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3g1MDknOlxuICAgICAgICBhd2FpdCBleHBlY3QoYXJncykudG9FcXVhbChbJ3g1MDknLCAnLWluJywgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2Nzci5wZW0nKSxcbiAgICAgICAgICAnLW91dCcsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdjZXJ0LnBlbScpLFxuICAgICAgICAgICctcmVxJyxcbiAgICAgICAgICAnLXNpZ25rZXknLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAncHJpdmF0ZV9rZXkucGVtJyksXG4gICAgICAgICAgJy1kYXlzJywgJzM2NSddKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgY2FsbCEnKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9KTtcblxuICBjb25zdCB7IGhhbmRsZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvY2VydGlmaWNhdGUtc2lnbmluZy1yZXF1ZXN0Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIGF3YWl0IGV4cGVjdChtb2NrV3JpdGVGaWxlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChwYXRoLmpvaW4obW9ja1RtcERpciwgJ2Nzci5jb25maWcnKSxcbiAgICAgIGNzckRvY3VtZW50LFxuICAgICAgZXhwZWN0LmFueXRoaW5nKCksXG4gICAgICBleHBlY3QuYW55KEZ1bmN0aW9uKSk7XG4gIGF3YWl0IGV4cGVjdChtb2NrV3JpdGVGaWxlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChwYXRoLmpvaW4obW9ja1RtcERpciwgJ3ByaXZhdGVfa2V5LnBlbScpLFxuICAgICAgbW9ja1ByaXZhdGVLZXksXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGV4cGVjdC5hbnkoRnVuY3Rpb24pKTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tSbXJmKS50b0JlQ2FsbGVkV2l0aChtb2NrVG1wRGlyKTtcbiAgcmV0dXJuIGV4cGVjdChjZm4uc2VuZFJlc3BvbnNlKVxuICAgIC50b0JlQ2FsbGVkV2l0aChldmVudCxcbiAgICAgIGNmbi5TdGF0dXMuU1VDQ0VTUyxcbiAgICAgIGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgeyBSZWY6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLCBDU1I6IG1vY2tDc3IsIFNlbGZTaWduZWRDZXJ0aWZpY2F0ZTogbW9ja0NlcnRpZmljYXRlIH0pO1xufSk7XG5cbnRlc3QoJ1VwZGF0ZScsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZXZlbnQ6IGNmbi5FdmVudCA9IHtcbiAgICBSZXF1ZXN0VHlwZTogY2ZuLlJlcXVlc3RUeXBlLlVQREFURSxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGV2ZW50QmFzZS5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBPbGRSZXNvdXJjZVByb3BlcnRpZXM6IGV2ZW50QmFzZS5SZXNvdXJjZVByb3BlcnRpZXMsXG4gICAgLi4uZXZlbnRCYXNlLFxuICB9O1xuXG4gIG1vY2tFeGVjLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoY21kOiBzdHJpbmcsIC4uLmFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgYXdhaXQgZXhwZWN0KGNtZCkudG9CZSgnL29wdC9vcGVuc3NsJyk7XG4gICAgc3dpdGNoIChhcmdzWzBdKSB7XG4gICAgICBjYXNlICdyZXEnOlxuICAgICAgICBhd2FpdCBleHBlY3QoYXJncykudG9FcXVhbChbJ3JlcScsICctY29uZmlnJywgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2Nzci5jb25maWcnKSxcbiAgICAgICAgICAnLWtleScsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdwcml2YXRlX2tleS5wZW0nKSxcbiAgICAgICAgICAnLW91dCcsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdjc3IucGVtJyksXG4gICAgICAgICAgJy1uZXcnXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneDUwOSc6XG4gICAgICAgIGF3YWl0IGV4cGVjdChhcmdzKS50b0VxdWFsKFsneDUwOScsICctaW4nLCByZXF1aXJlKCdwYXRoJykuam9pbihtb2NrVG1wRGlyLCAnY3NyLnBlbScpLFxuICAgICAgICAgICctb3V0JywgcmVxdWlyZSgncGF0aCcpLmpvaW4obW9ja1RtcERpciwgJ2NlcnQucGVtJyksXG4gICAgICAgICAgJy1yZXEnLFxuICAgICAgICAgICctc2lnbmtleScsIHJlcXVpcmUoJ3BhdGgnKS5qb2luKG1vY2tUbXBEaXIsICdwcml2YXRlX2tleS5wZW0nKSxcbiAgICAgICAgICAnLWRheXMnLCAnMzY1J10pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBjYWxsIScpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIGNvbnN0IHsgaGFuZGxlciB9ID0gcmVxdWlyZSgnLi4vLi4vY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzL3NyYy9jZXJ0aWZpY2F0ZS1zaWduaW5nLXJlcXVlc3QnKTtcbiAgYXdhaXQgZXhwZWN0KGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpKS5yZXNvbHZlcy50b0JlKHVuZGVmaW5lZCk7XG5cbiAgYXdhaXQgZXhwZWN0KG1vY2tXcml0ZUZpbGUpXG4gICAgLnRvQmVDYWxsZWRXaXRoKHBhdGguam9pbihtb2NrVG1wRGlyLCAnY3NyLmNvbmZpZycpLFxuICAgICAgY3NyRG9jdW1lbnQsXG4gICAgICBleHBlY3QuYW55dGhpbmcoKSxcbiAgICAgIGV4cGVjdC5hbnkoRnVuY3Rpb24pKTtcbiAgYXdhaXQgZXhwZWN0KG1vY2tXcml0ZUZpbGUpXG4gICAgLnRvQmVDYWxsZWRXaXRoKHBhdGguam9pbihtb2NrVG1wRGlyLCAncHJpdmF0ZV9rZXkucGVtJyksXG4gICAgICBtb2NrUHJpdmF0ZUtleSxcbiAgICAgIGV4cGVjdC5hbnl0aGluZygpLFxuICAgICAgZXhwZWN0LmFueShGdW5jdGlvbikpO1xuICBhd2FpdCBleHBlY3QobW9ja1JtcmYpLnRvQmVDYWxsZWRXaXRoKG1vY2tUbXBEaXIpO1xuICByZXR1cm4gZXhwZWN0KGNmbi5zZW5kUmVzcG9uc2UpXG4gICAgLnRvQmVDYWxsZWRXaXRoKGV2ZW50LFxuICAgICAgY2ZuLlN0YXR1cy5TVUNDRVNTLFxuICAgICAgZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgICB7IFJlZjogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsIENTUjogbW9ja0NzciwgU2VsZlNpZ25lZENlcnRpZmljYXRlOiBtb2NrQ2VydGlmaWNhdGUgfSk7XG59KTtcblxudGVzdCgnRGVsZXRlJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBldmVudDogY2ZuLkV2ZW50ID0ge1xuICAgIFJlcXVlc3RUeXBlOiBjZm4uUmVxdWVzdFR5cGUuREVMRVRFLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnRCYXNlLkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIC4uLmV2ZW50QmFzZSxcbiAgfTtcblxuICBjb25zdCB7IGhhbmRsZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9zcmMvY2VydGlmaWNhdGUtc2lnbmluZy1yZXF1ZXN0Jyk7XG4gIGF3YWl0IGV4cGVjdChoYW5kbGVyKGV2ZW50LCBjb250ZXh0KSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuXG4gIHJldHVybiBleHBlY3QoY2ZuLnNlbmRSZXNwb25zZSlcbiAgICAudG9CZUNhbGxlZFdpdGgoZXZlbnQsXG4gICAgICBjZm4uU3RhdHVzLlNVQ0NFU1MsXG4gICAgICBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHsgUmVmOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCB9KTtcbn0pO1xuIl19