aws-delivlib 13.4.2 → 13.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // eslint-disable-next-line @typescript-eslint/no-require-imports
4
- const AWS = require("aws-sdk");
5
- const mockDisableStageTransition = jest.fn((_params) => {
6
- return { promise: () => Promise.resolve({}) };
7
- }).mockName('AWS.CodePipeline.disableStageTransition');
8
- const mockEnableStageTransition = jest.fn((_params) => {
9
- return { promise: () => Promise.resolve({}) };
10
- }).mockName('AWS.CodePipeline.enableStageTransition');
11
- const pipelineName = 'MyPipeline';
12
- const stageName = 'MyStage';
13
- AWS.CodePipeline = jest.fn(() => ({
14
- disableStageTransition: mockDisableStageTransition,
15
- enableStageTransition: mockEnableStageTransition,
16
- })).mockName('AWS.CodePipeline');
17
- describe('disableTransition', () => {
18
- // eslint-disable-next-line @typescript-eslint/no-require-imports
19
- const disableTransition = require('../../change-control-lambda/disable-transition').disableTransition;
20
- test('with a simple reason', async () => {
21
- // GIVEN
22
- const reason = 'Just Because';
23
- // WHEN
24
- await expect(disableTransition(pipelineName, stageName, reason))
25
- .resolves.toBeUndefined();
26
- // THEN
27
- expect(mockDisableStageTransition)
28
- .toHaveBeenCalledWith({ pipelineName, stageName, reason, transitionType: 'Inbound' });
29
- });
30
- test('with a reason that needs cleaning up', async () => {
31
- // GIVEN
32
- const reason = 'It\'s so cool!';
33
- // WHEN
34
- await expect(disableTransition(pipelineName, stageName, reason))
35
- .resolves.toBeUndefined();
36
- // THEN
37
- const cleanReason = reason.replace(/[^a-zA-Z0-9!@ \(\)\.\*\?\-]/g, '-');
38
- expect(mockDisableStageTransition)
39
- .toHaveBeenCalledWith({ pipelineName, stageName, reason: cleanReason, transitionType: 'Inbound' });
40
- });
41
- test('with a reason that is too long', async () => {
42
- // GIVEN
43
- const reason = 'Reason '.repeat(300);
44
- // WHEN
45
- await expect(disableTransition(pipelineName, stageName, reason))
46
- .resolves.toBeUndefined();
47
- // THEN
48
- const cleanReason = reason.slice(0, 300);
49
- expect(mockDisableStageTransition)
50
- .toHaveBeenCalledWith({ pipelineName, stageName, reason: cleanReason, transitionType: 'Inbound' });
51
- });
52
- });
53
- test('enableTransition', async () => {
54
- // GIVEN
55
- // eslint-disable-next-line @typescript-eslint/no-require-imports
56
- const enableTransition = require('../../change-control-lambda/disable-transition').enableTransition;
57
- // WHEN
58
- await expect(() => enableTransition(pipelineName, stageName))
59
- .not.toThrow();
60
- // THEN
61
- expect(mockEnableStageTransition)
62
- .toHaveBeenCalledWith({ pipelineName, stageName, transitionType: 'Inbound' });
63
- });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZS10cmFuc2l0aW9uLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaXNhYmxlLXRyYW5zaXRpb24udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlFQUFpRTtBQUNqRSwrQkFBZ0M7QUFFaEMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBcUQsRUFBRSxFQUFFO0lBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ2hELENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0FBRXZELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQW9ELEVBQUUsRUFBRTtJQUNqRyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoRCxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsd0NBQXdDLENBQUMsQ0FBQztBQUV0RCxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDbEMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBRTNCLEdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLHNCQUFzQixFQUFFLDBCQUEwQjtJQUNsRCxxQkFBcUIsRUFBRSx5QkFBeUI7Q0FDakQsQ0FBZ0MsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBUSxDQUFDO0FBRXZFLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7SUFDakMsaUVBQWlFO0lBQ2pFLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFFdEcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RDLFFBQVE7UUFDUixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDOUIsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDN0QsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLE9BQU87UUFDUCxNQUFNLENBQUMsMEJBQTBCLENBQUM7YUFDL0Isb0JBQW9CLENBQUMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN0RCxRQUFRO1FBQ1IsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7UUFDaEMsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDN0QsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLE9BQU87UUFDUCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQzthQUMvQixvQkFBb0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRCxRQUFRO1FBQ1IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPO1FBQ1AsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUM3RCxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUIsT0FBTztRQUNQLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQzthQUMvQixvQkFBb0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN2RyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ2xDLFFBQVE7SUFDUixpRUFBaUU7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0RBQWdELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNwRyxPQUFPO0lBQ1AsTUFBTSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQzFELEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixPQUFPO0lBQ1AsTUFBTSxDQUFDLHlCQUF5QixDQUFDO1NBQzlCLG9CQUFvQixDQUFDLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNsRixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5pbXBvcnQgQVdTID0gcmVxdWlyZSgnYXdzLXNkaycpO1xuXG5jb25zdCBtb2NrRGlzYWJsZVN0YWdlVHJhbnNpdGlvbiA9IGplc3QuZm4oKF9wYXJhbXM6IEFXUy5Db2RlUGlwZWxpbmUuRGlzYWJsZVN0YWdlVHJhbnNpdGlvbklucHV0KSA9PiB7XG4gIHJldHVybiB7IHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkgfTtcbn0pLm1vY2tOYW1lKCdBV1MuQ29kZVBpcGVsaW5lLmRpc2FibGVTdGFnZVRyYW5zaXRpb24nKTtcblxuY29uc3QgbW9ja0VuYWJsZVN0YWdlVHJhbnNpdGlvbiA9IGplc3QuZm4oKF9wYXJhbXM6IEFXUy5Db2RlUGlwZWxpbmUuRW5hYmxlU3RhZ2VUcmFuc2l0aW9uSW5wdXQpID0+IHtcbiAgcmV0dXJuIHsgcHJvbWlzZTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHt9KSB9O1xufSkubW9ja05hbWUoJ0FXUy5Db2RlUGlwZWxpbmUuZW5hYmxlU3RhZ2VUcmFuc2l0aW9uJyk7XG5cbmNvbnN0IHBpcGVsaW5lTmFtZSA9ICdNeVBpcGVsaW5lJztcbmNvbnN0IHN0YWdlTmFtZSA9ICdNeVN0YWdlJztcblxuKEFXUyBhcyBhbnkpLkNvZGVQaXBlbGluZSA9IGplc3QuZm4oKCkgPT4gKHtcbiAgZGlzYWJsZVN0YWdlVHJhbnNpdGlvbjogbW9ja0Rpc2FibGVTdGFnZVRyYW5zaXRpb24sXG4gIGVuYWJsZVN0YWdlVHJhbnNpdGlvbjogbW9ja0VuYWJsZVN0YWdlVHJhbnNpdGlvbixcbn0pIGFzIHVua25vd24gYXMgQVdTLkNvZGVQaXBlbGluZSkubW9ja05hbWUoJ0FXUy5Db2RlUGlwZWxpbmUnKSBhcyBhbnk7XG5cbmRlc2NyaWJlKCdkaXNhYmxlVHJhbnNpdGlvbicsICgpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgY29uc3QgZGlzYWJsZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuLi8uLi9jaGFuZ2UtY29udHJvbC1sYW1iZGEvZGlzYWJsZS10cmFuc2l0aW9uJykuZGlzYWJsZVRyYW5zaXRpb247XG5cbiAgdGVzdCgnd2l0aCBhIHNpbXBsZSByZWFzb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCByZWFzb24gPSAnSnVzdCBCZWNhdXNlJztcbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZXhwZWN0KGRpc2FibGVUcmFuc2l0aW9uKHBpcGVsaW5lTmFtZSwgc3RhZ2VOYW1lLCByZWFzb24pKVxuICAgICAgLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KG1vY2tEaXNhYmxlU3RhZ2VUcmFuc2l0aW9uKVxuICAgICAgLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgcGlwZWxpbmVOYW1lLCBzdGFnZU5hbWUsIHJlYXNvbiwgdHJhbnNpdGlvblR5cGU6ICdJbmJvdW5kJyB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBhIHJlYXNvbiB0aGF0IG5lZWRzIGNsZWFuaW5nIHVwJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgcmVhc29uID0gJ0l0XFwncyBzbyBjb29sISc7XG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGV4cGVjdChkaXNhYmxlVHJhbnNpdGlvbihwaXBlbGluZU5hbWUsIHN0YWdlTmFtZSwgcmVhc29uKSlcbiAgICAgIC5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IGNsZWFuUmVhc29uID0gcmVhc29uLnJlcGxhY2UoL1teYS16QS1aMC05IUAgXFwoXFwpXFwuXFwqXFw/XFwtXS9nLCAnLScpO1xuICAgIGV4cGVjdChtb2NrRGlzYWJsZVN0YWdlVHJhbnNpdGlvbilcbiAgICAgIC50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IHBpcGVsaW5lTmFtZSwgc3RhZ2VOYW1lLCByZWFzb246IGNsZWFuUmVhc29uLCB0cmFuc2l0aW9uVHlwZTogJ0luYm91bmQnIH0pO1xuICB9KTtcblxuICB0ZXN0KCd3aXRoIGEgcmVhc29uIHRoYXQgaXMgdG9vIGxvbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCByZWFzb24gPSAnUmVhc29uICcucmVwZWF0KDMwMCk7XG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGV4cGVjdChkaXNhYmxlVHJhbnNpdGlvbihwaXBlbGluZU5hbWUsIHN0YWdlTmFtZSwgcmVhc29uKSlcbiAgICAgIC5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gICAgLy8gVEhFTlxuICAgIGNvbnN0IGNsZWFuUmVhc29uID0gcmVhc29uLnNsaWNlKDAsIDMwMCk7XG4gICAgZXhwZWN0KG1vY2tEaXNhYmxlU3RhZ2VUcmFuc2l0aW9uKVxuICAgICAgLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgcGlwZWxpbmVOYW1lLCBzdGFnZU5hbWUsIHJlYXNvbjogY2xlYW5SZWFzb24sIHRyYW5zaXRpb25UeXBlOiAnSW5ib3VuZCcgfSk7XG4gIH0pO1xufSk7XG5cbnRlc3QoJ2VuYWJsZVRyYW5zaXRpb24nLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gIGNvbnN0IGVuYWJsZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuLi8uLi9jaGFuZ2UtY29udHJvbC1sYW1iZGEvZGlzYWJsZS10cmFuc2l0aW9uJykuZW5hYmxlVHJhbnNpdGlvbjtcbiAgLy8gV0hFTlxuICBhd2FpdCBleHBlY3QoKCkgPT4gZW5hYmxlVHJhbnNpdGlvbihwaXBlbGluZU5hbWUsIHN0YWdlTmFtZSkpXG4gICAgLm5vdC50b1Rocm93KCk7XG4gIC8vIFRIRU5cbiAgZXhwZWN0KG1vY2tFbmFibGVTdGFnZVRyYW5zaXRpb24pXG4gICAgLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgcGlwZWxpbmVOYW1lLCBzdGFnZU5hbWUsIHRyYW5zaXRpb25UeXBlOiAnSW5ib3VuZCcgfSk7XG59KTtcbiJdfQ==
@@ -1 +0,0 @@
1
- export {};
@@ -1,143 +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
- // eslint-disable-next-line @typescript-eslint/no-require-imports
23
- const AWS = require("aws-sdk");
24
- const transitions = __importStar(require("../../change-control-lambda/disable-transition"));
25
- const timeWindow = __importStar(require("../../change-control-lambda/time-window"));
26
- // tslint:disable:no-console
27
- // _____ _ _
28
- // | __ \ | | (_)
29
- // | |__) | __ ___ _ __ __ _ _ __ __ _| |_ _ ___ _ __
30
- // | ___/ '__/ _ \ '_ \ / _` | '__/ _` | __| |/ _ \| '_ \
31
- // | | | | | __/ |_) | (_| | | | (_| | |_| | (_) | | | |
32
- // |_| |_| \___| .__/ \__,_|_| \__,_|\__|_|\___/|_| |_|
33
- // | |
34
- // |_|
35
- jest.mock('aws-sdk');
36
- jest.mock('../../change-control-lambda/disable-transition');
37
- jest.mock('../../change-control-lambda/time-window');
38
- const mockGetObject = jest.fn().mockName('AWS.S3.getObject');
39
- AWS.S3 = jest.fn(() => ({ getObject: mockGetObject })).mockName('AWS.S3');
40
- const mockEnableTransition = jest.fn((_pipeline, _stage) => Promise.resolve(undefined))
41
- .mockName('enableTransition');
42
- transitions.enableTransition = mockEnableTransition;
43
- const mockDisableTransition = jest.fn((_pipeline, _stage, _reason) => Promise.resolve(undefined))
44
- .mockName('disableTransition');
45
- transitions.disableTransition = mockDisableTransition;
46
- const mockShouldBlockPipeline = jest.fn((_icsData, _now) => undefined)
47
- .mockName('shouldBlockPipeline');
48
- timeWindow.shouldBlockPipeline = mockShouldBlockPipeline;
49
- const initialEnv = process.env;
50
- beforeEach(() => {
51
- jest.restoreAllMocks();
52
- process.env = { ...testEnv };
53
- });
54
- const mockConsoleLog = jest.fn().mockName('console.log');
55
- console.log = mockConsoleLog;
56
- const bucketName = 'BucketName';
57
- const objectKey = 'ObjectKey';
58
- const stageName = 'StageName';
59
- const pipelineName = 'PipelineName';
60
- const testEnv = {
61
- CHANGE_CONTROL_BUCKET_NAME: bucketName,
62
- CHANGE_CONTROL_OBJECT_KEY: objectKey,
63
- STAGE_NAME: stageName,
64
- PIPELINE_NAME: pipelineName,
65
- };
66
- // _______ _
67
- // |__ __| | |
68
- // | | ___ ___| |_ ___
69
- // | |/ _ \/ __| __/ __|
70
- // | | __/\__ \ |_\__ \
71
- // |_|\___||___/\__|___/
72
- describe('handler', () => {
73
- // eslint-disable-next-line @typescript-eslint/no-require-imports
74
- const handler = require('../../change-control-lambda/index').handler;
75
- describe('failing conditions', () => {
76
- for (const variable of Object.keys(testEnv)) {
77
- test(`when ${variable} is not set`, () => {
78
- // GIVEN
79
- delete process.env[variable];
80
- // THEN
81
- return expect(handler())
82
- .rejects.toThrow(`Environment variable "${variable}" is required`);
83
- });
84
- }
85
- test('when S3 access fails', async () => {
86
- // GIVEN
87
- const e = new Error('S3 Not Working - the apocalypse has begun');
88
- mockGetObject.mockImplementationOnce(() => ({
89
- promise: () => Promise.reject(e),
90
- }));
91
- // THEN
92
- return expect(handler()).rejects.toThrow(e);
93
- });
94
- });
95
- for (const cause of ['NoSuchKey', 'NoSuchBucket']) {
96
- test(`when no calendar is found (due to ${cause})`, async () => {
97
- // GIVEN
98
- mockGetObject.mockImplementationOnce(() => ({
99
- promise: () => Promise.reject({ code: cause, message: cause }),
100
- }));
101
- mockShouldBlockPipeline.mockReturnValueOnce({
102
- summary: 'Blocked by default',
103
- // Other properties - values irrelevant
104
- start: new Date(),
105
- end: new Date(),
106
- dtstamp: new Date(),
107
- type: 'VEVENT',
108
- datetype: 'date-time',
109
- params: [],
110
- });
111
- // WHEN
112
- await expect(handler()).resolves.toBeUndefined();
113
- // THEN
114
- await expect(mockGetObject)
115
- .toHaveBeenCalledWith({ Bucket: bucketName, Key: objectKey });
116
- await expect(mockShouldBlockPipeline)
117
- .toHaveBeenCalledWith(expect.stringContaining('No change control calendar was found'), expect.any(Date));
118
- return expect(mockDisableTransition)
119
- .toHaveBeenCalledWith(pipelineName, stageName, 'Blocked by default');
120
- });
121
- }
122
- test('when the window is open', async () => {
123
- // GIVEN
124
- const iCalBody = 'Some iCal document (obviously, this is a fake one!)';
125
- mockGetObject.mockImplementationOnce(() => ({
126
- promise: () => Promise.resolve({ Body: iCalBody }),
127
- }));
128
- mockShouldBlockPipeline.mockReturnValueOnce(undefined);
129
- // WHEN
130
- await expect(handler()).resolves.toBeUndefined();
131
- // THEN
132
- await expect(mockGetObject)
133
- .toHaveBeenCalledWith({ Bucket: bucketName, Key: objectKey });
134
- await expect(mockShouldBlockPipeline)
135
- .toHaveBeenCalledWith(iCalBody, expect.any(Date));
136
- return expect(mockEnableTransition)
137
- .toHaveBeenCalledWith(pipelineName, stageName);
138
- });
139
- });
140
- afterAll(() => {
141
- process.env = initialEnv;
142
- });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaGFuZGxlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlFQUFpRTtBQUNqRSwrQkFBZ0M7QUFDaEMsNEZBQThFO0FBQzlFLG9GQUFzRTtBQUV0RSw0QkFBNEI7QUFFNUIsNkNBQTZDO0FBQzdDLCtDQUErQztBQUMvQyx5REFBeUQ7QUFDekQsMERBQTBEO0FBQzFELDJEQUEyRDtBQUMzRCwyREFBMkQ7QUFDM0QscUJBQXFCO0FBQ3JCLHFCQUFxQjtBQUVyQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztBQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFFckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVELEdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFRLENBQUM7QUFFMUYsTUFBTSxvQkFBb0IsR0FDeEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3ZFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2pDLFdBQW1CLENBQUMsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7QUFFN0QsTUFBTSxxQkFBcUIsR0FDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsTUFBYyxFQUFFLE9BQWUsRUFBRSxFQUFF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TUFBTSxRQUFRLEdBQUcscURBQXFELENBQUM7UUFDdkUsYUFBYSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDbkQsQ0FBQyxDQUFDLENBQUM7UUFDSix1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2RCxPQUFPO1FBQ1AsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFakQsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQzthQUN4QixvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFaEUsTUFBTSxNQUFNLENBQUMsdUJBQXVCLENBQUM7YUFDbEMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVwRCxPQUFPLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQzthQUNoQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxHQUFHLEVBQUU7SUFDWixPQUFPLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5pbXBvcnQgQVdTID0gcmVxdWlyZSgnYXdzLXNkaycpO1xuaW1wb3J0ICogYXMgdHJhbnNpdGlvbnMgZnJvbSAnLi4vLi4vY2hhbmdlLWNvbnRyb2wtbGFtYmRhL2Rpc2FibGUtdHJhbnNpdGlvbic7XG5pbXBvcnQgKiBhcyB0aW1lV2luZG93IGZyb20gJy4uLy4uL2NoYW5nZS1jb250cm9sLWxhbWJkYS90aW1lLXdpbmRvdyc7XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcblxuLy8gX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfXG4vLyB8ICBfXyBcXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAoXylcbi8vIHwgfF9fKSB8IF9fIF9fXyBfIF9fICAgX18gXyBfIF9fIF9fIF98IHxfIF8gIF9fXyAgXyBfX1xuLy8gfCAgX19fLyAnX18vIF8gXFwgJ18gXFwgLyBfYCB8ICdfXy8gX2AgfCBfX3wgfC8gXyBcXHwgJ18gXFxcbi8vIHwgfCAgIHwgfCB8ICBfXy8gfF8pIHwgKF98IHwgfCB8IChffCB8IHxffCB8IChfKSB8IHwgfCB8XG4vLyB8X3wgICB8X3wgIFxcX19ffCAuX18vIFxcX18sX3xffCAgXFxfXyxffFxcX198X3xcXF9fXy98X3wgfF98XG4vLyAgICAgICAgICAgICAgICB8IHxcbi8vICAgICAgICAgICAgICAgIHxffFxuXG5qZXN0Lm1vY2soJ2F3cy1zZGsnKTtcbmplc3QubW9jaygnLi4vLi4vY2hhbmdlLWNvbnRyb2wtbGFtYmRhL2Rpc2FibGUtdHJhbnNpdGlvbicpO1xuamVzdC5tb2NrKCcuLi8uLi9jaGFuZ2UtY29udHJvbC1sYW1iZGEvdGltZS13aW5kb3cnKTtcblxuY29uc3QgbW9ja0dldE9iamVjdCA9IGplc3QuZm4oKS5tb2NrTmFtZSgnQVdTLlMzLmdldE9iamVjdCcpO1xuKEFXUyBhcyBhbnkpLlMzID0gamVzdC5mbigoKSA9PiAoeyBnZXRPYmplY3Q6IG1vY2tHZXRPYmplY3QgfSkpLm1vY2tOYW1lKCdBV1MuUzMnKSBhcyBhbnk7XG5cbmNvbnN0IG1vY2tFbmFibGVUcmFuc2l0aW9uID1cbiAgamVzdC5mbigoX3BpcGVsaW5lOiBzdHJpbmcsIF9zdGFnZTogc3RyaW5nKSA9PiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKSlcbiAgICAubW9ja05hbWUoJ2VuYWJsZVRyYW5zaXRpb24nKTtcbih0cmFuc2l0aW9ucyBhcyBhbnkpLmVuYWJsZVRyYW5zaXRpb24gPSBtb2NrRW5hYmxlVHJhbnNpdGlvbjtcblxuY29uc3QgbW9ja0Rpc2FibGVUcmFuc2l0aW9uID1cbiAgamVzdC5mbigoX3BpcGVsaW5lOiBzdHJpbmcsIF9zdGFnZTogc3RyaW5nLCBfcmVhc29uOiBzdHJpbmcpID0+IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpKVxuICAgIC5tb2NrTmFtZSgnZGlzYWJsZVRyYW5zaXRpb24nKTtcbih0cmFuc2l0aW9ucyBhcyBhbnkpLmRpc2FibGVUcmFuc2l0aW9uID0gbW9ja0Rpc2FibGVUcmFuc2l0aW9uO1xuXG5jb25zdCBtb2NrU2hvdWxkQmxvY2tQaXBlbGluZSA9IGplc3QuZm4oKF9pY3NEYXRhOiBzdHJpbmcgfCBCdWZmZXIsIF9ub3c/OiBEYXRlKTogdGltZVdpbmRvdy5DYWxlbmRhckV2ZW50IHwgdW5kZWZpbmVkID0+IHVuZGVmaW5lZClcbiAgLm1vY2tOYW1lKCdzaG91bGRCbG9ja1BpcGVsaW5lJyk7XG4odGltZVdpbmRvdyBhcyBhbnkpLnNob3VsZEJsb2NrUGlwZWxpbmUgPSBtb2NrU2hvdWxkQmxvY2tQaXBlbGluZTtcblxuY29uc3QgaW5pdGlhbEVudiA9IHByb2Nlc3MuZW52O1xuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52ID0geyAuLi50ZXN0RW52IH07XG59KTtcblxuY29uc3QgbW9ja0NvbnNvbGVMb2cgPSBqZXN0LmZuKCkubW9ja05hbWUoJ2NvbnNvbGUubG9nJyk7XG5jb25zb2xlLmxvZyA9IG1vY2tDb25zb2xlTG9nO1xuXG5jb25zdCBidWNrZXROYW1lID0gJ0J1Y2tldE5hbWUnO1xuY29uc3Qgb2JqZWN0S2V5ID0gJ09iamVjdEtleSc7XG5jb25zdCBzdGFnZU5hbWUgPSAnU3RhZ2VOYW1lJztcbmNvbnN0IHBpcGVsaW5lTmFtZSA9ICdQaXBlbGluZU5hbWUnO1xuY29uc3QgdGVzdEVudiA9IHtcbiAgQ0hBTkdFX0NPTlRST0xfQlVDS0VUX05BTUU6IGJ1Y2tldE5hbWUsXG4gIENIQU5HRV9DT05UUk9MX09CSkVDVF9LRVk6IG9iamVjdEtleSxcbiAgU1RBR0VfTkFNRTogc3RhZ2VOYW1lLFxuICBQSVBFTElORV9OQU1FOiBwaXBlbGluZU5hbWUsXG59O1xuXG4vLyBfX19fX19fICAgICAgICBfXG4vLyB8X18gICBfX3wgICAgICB8IHxcbi8vICAgIHwgfCBfX18gIF9fX3wgfF8gX19fXG4vLyAgICB8IHwvIF8gXFwvIF9ffCBfXy8gX198XG4vLyAgICB8IHwgIF9fL1xcX18gXFwgfF9cXF9fIFxcXG4vLyAgICB8X3xcXF9fX3x8X19fL1xcX198X19fL1xuXG5kZXNjcmliZSgnaGFuZGxlcicsICgpID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgY29uc3QgaGFuZGxlciA9IHJlcXVpcmUoJy4uLy4uL2NoYW5nZS1jb250cm9sLWxhbWJkYS9pbmRleCcpLmhhbmRsZXI7XG5cbiAgZGVzY3JpYmUoJ2ZhaWxpbmcgY29uZGl0aW9ucycsICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIE9iamVjdC5rZXlzKHRlc3RFbnYpKSB7XG4gICAgICB0ZXN0KGB3aGVuICR7dmFyaWFibGV9IGlzIG5vdCBzZXRgLCAoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudlt2YXJpYWJsZV07XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICByZXR1cm4gZXhwZWN0KGhhbmRsZXIoKSlcbiAgICAgICAgICAucmVqZWN0cy50b1Rocm93KGBFbnZpcm9ubWVudCB2YXJpYWJsZSBcIiR7dmFyaWFibGV9XCIgaXMgcmVxdWlyZWRgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRlc3QoJ3doZW4gUzMgYWNjZXNzIGZhaWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGUgPSBuZXcgRXJyb3IoJ1MzIE5vdCBXb3JraW5nIC0gdGhlIGFwb2NhbHlwc2UgaGFzIGJlZ3VuJyk7XG4gICAgICBtb2NrR2V0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4gKHtcbiAgICAgICAgcHJvbWlzZTogKCkgPT4gUHJvbWlzZS5yZWplY3QoZSksXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIHJldHVybiBleHBlY3QoaGFuZGxlcigpKS5yZWplY3RzLnRvVGhyb3coZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGZvciAoY29uc3QgY2F1c2Ugb2YgWydOb1N1Y2hLZXknLCAnTm9TdWNoQnVja2V0J10pIHtcbiAgICB0ZXN0KGB3aGVuIG5vIGNhbGVuZGFyIGlzIGZvdW5kIChkdWUgdG8gJHtjYXVzZX0pYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIG1vY2tHZXRPYmplY3QubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiAoe1xuICAgICAgICBwcm9taXNlOiAoKSA9PiBQcm9taXNlLnJlamVjdCh7IGNvZGU6IGNhdXNlLCBtZXNzYWdlOiBjYXVzZSB9KSxcbiAgICAgIH0pKTtcbiAgICAgIG1vY2tTaG91bGRCbG9ja1BpcGVsaW5lLm1vY2tSZXR1cm5WYWx1ZU9uY2Uoe1xuICAgICAgICBzdW1tYXJ5OiAnQmxvY2tlZCBieSBkZWZhdWx0JyxcbiAgICAgICAgLy8gT3RoZXIgcHJvcGVydGllcyAtIHZhbHVlcyBpcnJlbGV2YW50XG4gICAgICAgIHN0YXJ0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBlbmQ6IG5ldyBEYXRlKCksXG4gICAgICAgIGR0c3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgIHR5cGU6ICdWRVZFTlQnLFxuICAgICAgICBkYXRldHlwZTogJ2RhdGUtdGltZScsXG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgZXhwZWN0KGhhbmRsZXIoKSkucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBhd2FpdCBleHBlY3QobW9ja0dldE9iamVjdClcbiAgICAgICAgLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgQnVja2V0OiBidWNrZXROYW1lLCBLZXk6IG9iamVjdEtleSB9KTtcblxuICAgICAgYXdhaXQgZXhwZWN0KG1vY2tTaG91bGRCbG9ja1BpcGVsaW5lKVxuICAgICAgICAudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ05vIGNoYW5nZSBjb250cm9sIGNhbGVuZGFyIHdhcyBmb3VuZCcpLFxuICAgICAgICAgIGV4cGVjdC5hbnkoRGF0ZSkpO1xuXG4gICAgICByZXR1cm4gZXhwZWN0KG1vY2tEaXNhYmxlVHJhbnNpdGlvbilcbiAgICAgICAgLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHBpcGVsaW5lTmFtZSwgc3RhZ2VOYW1lLCAnQmxvY2tlZCBieSBkZWZhdWx0Jyk7XG4gICAgfSk7XG4gIH1cblxuICB0ZXN0KCd3aGVuIHRoZSB3aW5kb3cgaXMgb3BlbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGlDYWxCb2R5ID0gJ1NvbWUgaUNhbCBkb2N1bWVudCAob2J2aW91c2x5LCB0aGlzIGlzIGEgZmFrZSBvbmUhKSc7XG4gICAgbW9ja0dldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+ICh7XG4gICAgICBwcm9taXNlOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoeyBCb2R5OiBpQ2FsQm9keSB9KSxcbiAgICB9KSk7XG4gICAgbW9ja1Nob3VsZEJsb2NrUGlwZWxpbmUubW9ja1JldHVyblZhbHVlT25jZSh1bmRlZmluZWQpO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGV4cGVjdChoYW5kbGVyKCkpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCBleHBlY3QobW9ja0dldE9iamVjdClcbiAgICAgIC50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IEJ1Y2tldDogYnVja2V0TmFtZSwgS2V5OiBvYmplY3RLZXkgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QobW9ja1Nob3VsZEJsb2NrUGlwZWxpbmUpXG4gICAgICAudG9IYXZlQmVlbkNhbGxlZFdpdGgoaUNhbEJvZHksIGV4cGVjdC5hbnkoRGF0ZSkpO1xuXG4gICAgcmV0dXJuIGV4cGVjdChtb2NrRW5hYmxlVHJhbnNpdGlvbilcbiAgICAgIC50b0hhdmVCZWVuQ2FsbGVkV2l0aChwaXBlbGluZU5hbWUsIHN0YWdlTmFtZSk7XG4gIH0pO1xufSk7XG5cbmFmdGVyQWxsKCgpID0+IHtcbiAgcHJvY2Vzcy5lbnYgPSBpbml0aWFsRW52O1xufSk7XG4iXX0=
@@ -1,131 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const time_window_1 = require("../../change-control-lambda/time-window");
4
- // tslint:disable:no-console
5
- const ics = `
6
- BEGIN:VCALENDAR
7
- VERSION:2.0
8
- PRODID:-//Events Calendar//iCal4j 1.0//EN
9
-
10
- BEGIN:VEVENT
11
- UID:2017-04-12T07:00:00.000Z to 2017-04-19T06:59:59.000Z
12
- DTSTAMP:20190114T161956Z
13
- DTSTART:20170412T070000Z
14
- DTEND:20170419T065959Z
15
- SUMMARY:Block1
16
- END:VEVENT
17
-
18
- BEGIN:VEVENT
19
- UID:2017-11-23T08:00:00.000Z to 2017-11-27T08:00:00.000Z
20
- DTSTAMP:20190114T161956Z
21
- DTSTART:20171123T080000Z
22
- DTEND:20171127T080000Z
23
- SUMMARY:Block2
24
- END:VEVENT
25
-
26
- BEGIN:VEVENT
27
- UID:2019-02-03T08:00:00.000Z to 2019-02-04T07:59:00.000Z
28
- DTSTAMP:20190114T161956Z
29
- DTSTART:20190203T080000Z
30
- DTEND:20190204T075900Z
31
- SUMMARY:Block3
32
- END:VEVENT
33
-
34
- END:VCALENDAR
35
- `;
36
- /**
37
- * An event with an 'RRULE' property will be recurring. Events following the
38
- * initial event are calculated based on the RRULE specified and the
39
- * initial event.
40
- *
41
- * https://icalendar.org/iCalendar-RFC-5545/3-3-10-recurrence-rule.html
42
- *
43
- * Example:
44
- *
45
- * BEGIN:VEVENT
46
- * RRULE:FREQ=WEEKLY;INTERVAL=1 <--- Weekly recurrence, every 1 week. If we set
47
- * the INTERVAL=2, it would be every 2 weeks.
48
- * DTSTART:20200501T220000Z <--- Start datetime of the initial event in the series.
49
- * DTEND:20200504T170000Z <--- End datetime of the initial event in the series.
50
- * SUMMARY:RecurringBlock1
51
- * DTSTAMP:20200501T163641Z
52
- * SEQUENCE:0
53
- * END:VEVENT
54
- *
55
- */
56
- const recurringIcs = `
57
- BEGIN:VCALENDAR
58
- VERSION:2.0
59
- PRODID:-//Events Calendar//iCal4j 1.0//EN
60
-
61
- BEGIN:VEVENT
62
- RRULE:FREQ=WEEKLY;INTERVAL=1
63
- DTSTART:20200501T220000Z
64
- DTEND:20200504T170000Z
65
- DTSTAMP:20200501T163641Z
66
- SUMMARY:RecurringBlock1
67
- SEQUENCE:0
68
- END:VEVENT
69
-
70
- BEGIN:VEVENT
71
- RRULE:FREQ=WEEKLY;INTERVAL=1
72
- DTSTART:20200505T220000Z
73
- DTEND:20200506T040000Z
74
- DTSTAMP:20200501T163641Z
75
- SUMMARY:RecurringBlock2
76
- SEQUENCE:0
77
- END:VEVENT
78
-
79
- END:VCALENDAR
80
- `;
81
- test('non blocked time before all events', () => {
82
- const x = (0, time_window_1.shouldBlockPipeline)(ics, new Date('2019-02-03T07:00:00.000Z'), 300);
83
- expect(x).toBeUndefined();
84
- });
85
- test('non blocked time in between events', () => {
86
- const x = (0, time_window_1.shouldBlockPipeline)(ics, new Date('2017-07-12T07:00:00.000Z'));
87
- expect(x).toBeUndefined();
88
- });
89
- test('left edge', () => {
90
- const x = (0, time_window_1.shouldBlockPipeline)(ics, new Date('2017-04-12T07:00:00.000Z'));
91
- expect(x && x.summary).toBe('Block1');
92
- });
93
- test('right edge', () => {
94
- const x = (0, time_window_1.shouldBlockPipeline)(ics, new Date('2017-11-27T08:00:00.000Z'));
95
- expect(x && x.summary).toBe('Block2');
96
- });
97
- test('a blocked window starts AND finishes within margin', () => {
98
- // Using 72 hours padding to widely overlap Block3
99
- const x = (0, time_window_1.shouldBlockPipeline)(ics, new Date('2019-02-03T07:00:00.000Z'), 72 * 3600);
100
- expect(x && x.summary).toBe('Block3');
101
- });
102
- // Test that the initial event in a recurring series blocks the pipeline when
103
- // the left edge aligns with the current time.
104
- test('current time aligns with the left edge of the first event in a series blocks pipeline', () => {
105
- const x = (0, time_window_1.shouldBlockPipeline)(recurringIcs, new Date('2020-05-01T22:00:00.000Z'));
106
- expect(x && x.summary).toBe('RecurringBlock1');
107
- });
108
- // Test that a future event in a recurring series blocks the pipeline when
109
- // the left edge aligns with the current time.
110
- test('current time aligns with the left edge of future event in a series blocks pipeline', () => {
111
- const x = (0, time_window_1.shouldBlockPipeline)(recurringIcs, new Date('2020-05-22T22:00:00.000Z'));
112
- expect(x && x.summary).toBe('RecurringBlock1');
113
- });
114
- // Test that the initial event in a recurring series blocks the pipeline when
115
- // the right edge aligns with the current time.
116
- test('current time aligns with the right edge of the first occurrence blocks pipeline', () => {
117
- const x = (0, time_window_1.shouldBlockPipeline)(recurringIcs, new Date('2020-05-06T04:00:00.000Z'));
118
- expect(x && x.summary).toBe('RecurringBlock2');
119
- });
120
- // Test that a future event in a recurring series blocks the pipeline when
121
- // the right edge aligns with the current time.
122
- test('current time aligns with the right edge of future event in series blocks pipeline', () => {
123
- const x = (0, time_window_1.shouldBlockPipeline)(recurringIcs, new Date('2020-05-27T04:00:00.000Z'));
124
- expect(x && x.summary).toBe('RecurringBlock2');
125
- });
126
- // Test that we do not block between events in a recurring series.
127
- test('current time is between future events in recurring series does not block pipeline', () => {
128
- const x = (0, time_window_1.shouldBlockPipeline)(recurringIcs, new Date('2020-05-14T00:00:00.000Z'));
129
- expect(x).toBeUndefined();
130
- });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS13aW5kb3cudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRpbWUtd2luZG93LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5RUFBOEU7QUFDOUUsNEJBQTRCO0FBRTVCLE1BQU0sR0FBRyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E4QlgsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxZQUFZLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXdCcEIsQ0FBQztBQUVGLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7SUFDOUMsTUFBTSxDQUFDLEdBQUcsSUFBQSxpQ0FBbUIsRUFBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUEsaUNBQW1CLEVBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUNyQixNQUFNLENBQUMsR0FBRyxJQUFBLGlDQUFtQixFQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7SUFDekUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDdEIsTUFBTSxDQUFDLEdBQUcsSUFBQSxpQ0FBbUIsRUFBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7SUFDOUQsa0RBQWtEO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLElBQUEsaUNBQW1CLEVBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUssQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsQ0FBQztBQUVILDZFQUE2RTtBQUM3RSw4Q0FBOEM7QUFDOUMsSUFBSSxDQUFDLHVGQUF1RixFQUFFLEdBQUcsRUFBRTtJQUNqRyxNQUFNLENBQUMsR0FBRyxJQUFBLGlDQUFtQixFQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7SUFDbEYsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDLENBQUM7QUFFSCwwRUFBMEU7QUFDMUUsOENBQThDO0FBQzlDLElBQUksQ0FBQyxvRkFBb0YsRUFBRSxHQUFHLEVBQUU7SUFDOUYsTUFBTSxDQUFDLEdBQUcsSUFBQSxpQ0FBbUIsRUFBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyxDQUFDO0FBRUgsNkVBQTZFO0FBQzdFLCtDQUErQztBQUMvQyxJQUFJLENBQUMsaUZBQWlGLEVBQUUsR0FBRyxFQUFFO0lBQzNGLE1BQU0sQ0FBQyxHQUFHLElBQUEsaUNBQW1CLEVBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztJQUNsRixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMsQ0FBQztBQUdILDBFQUEwRTtBQUMxRSwrQ0FBK0M7QUFDL0MsSUFBSSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtJQUM3RixNQUFNLENBQUMsR0FBRyxJQUFBLGlDQUFtQixFQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7SUFDbEYsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDLENBQUM7QUFFSCxrRUFBa0U7QUFDbEUsSUFBSSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtJQUM3RixNQUFNLENBQUMsR0FBRyxJQUFBLGlDQUFtQixFQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7SUFDbEYsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzVCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2hvdWxkQmxvY2tQaXBlbGluZSB9IGZyb20gJy4uLy4uL2NoYW5nZS1jb250cm9sLWxhbWJkYS90aW1lLXdpbmRvdyc7XG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG5cbmNvbnN0IGljcyA9IGBcbkJFR0lOOlZDQUxFTkRBUlxuVkVSU0lPTjoyLjBcblBST0RJRDotLy9FdmVudHMgQ2FsZW5kYXIvL2lDYWw0aiAxLjAvL0VOXG5cbkJFR0lOOlZFVkVOVFxuVUlEOjIwMTctMDQtMTJUMDc6MDA6MDAuMDAwWiB0byAyMDE3LTA0LTE5VDA2OjU5OjU5LjAwMFpcbkRUU1RBTVA6MjAxOTAxMTRUMTYxOTU2WlxuRFRTVEFSVDoyMDE3MDQxMlQwNzAwMDBaXG5EVEVORDoyMDE3MDQxOVQwNjU5NTlaXG5TVU1NQVJZOkJsb2NrMVxuRU5EOlZFVkVOVFxuXG5CRUdJTjpWRVZFTlRcblVJRDoyMDE3LTExLTIzVDA4OjAwOjAwLjAwMFogdG8gMjAxNy0xMS0yN1QwODowMDowMC4wMDBaXG5EVFNUQU1QOjIwMTkwMTE0VDE2MTk1NlpcbkRUU1RBUlQ6MjAxNzExMjNUMDgwMDAwWlxuRFRFTkQ6MjAxNzExMjdUMDgwMDAwWlxuU1VNTUFSWTpCbG9jazJcbkVORDpWRVZFTlRcblxuQkVHSU46VkVWRU5UXG5VSUQ6MjAxOS0wMi0wM1QwODowMDowMC4wMDBaIHRvIDIwMTktMDItMDRUMDc6NTk6MDAuMDAwWlxuRFRTVEFNUDoyMDE5MDExNFQxNjE5NTZaXG5EVFNUQVJUOjIwMTkwMjAzVDA4MDAwMFpcbkRURU5EOjIwMTkwMjA0VDA3NTkwMFpcblNVTU1BUlk6QmxvY2szXG5FTkQ6VkVWRU5UXG5cbkVORDpWQ0FMRU5EQVJcbmA7XG5cbi8qKlxuICogQW4gZXZlbnQgd2l0aCBhbiAnUlJVTEUnIHByb3BlcnR5IHdpbGwgYmUgcmVjdXJyaW5nLiBFdmVudHMgZm9sbG93aW5nIHRoZVxuICogaW5pdGlhbCBldmVudCBhcmUgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgUlJVTEUgc3BlY2lmaWVkIGFuZCB0aGVcbiAqIGluaXRpYWwgZXZlbnQuXG4gKlxuICogaHR0cHM6Ly9pY2FsZW5kYXIub3JnL2lDYWxlbmRhci1SRkMtNTU0NS8zLTMtMTAtcmVjdXJyZW5jZS1ydWxlLmh0bWxcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIEJFR0lOOlZFVkVOVFxuICogUlJVTEU6RlJFUT1XRUVLTFk7SU5URVJWQUw9MSAgPC0tLSBXZWVrbHkgcmVjdXJyZW5jZSwgZXZlcnkgMSB3ZWVrLiBJZiB3ZSBzZXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIElOVEVSVkFMPTIsIGl0IHdvdWxkIGJlIGV2ZXJ5IDIgd2Vla3MuXG4gKiBEVFNUQVJUOjIwMjAwNTAxVDIyMDAwMFogICAgICA8LS0tIFN0YXJ0IGRhdGV0aW1lIG9mIHRoZSBpbml0aWFsIGV2ZW50IGluIHRoZSBzZXJpZXMuXG4gKiBEVEVORDoyMDIwMDUwNFQxNzAwMDBaICAgICAgICA8LS0tIEVuZCBkYXRldGltZSBvZiB0aGUgaW5pdGlhbCBldmVudCBpbiB0aGUgc2VyaWVzLlxuICogU1VNTUFSWTpSZWN1cnJpbmdCbG9jazFcbiAqIERUU1RBTVA6MjAyMDA1MDFUMTYzNjQxWlxuICogU0VRVUVOQ0U6MFxuICogRU5EOlZFVkVOVFxuICpcbiAqL1xuY29uc3QgcmVjdXJyaW5nSWNzID0gYFxuQkVHSU46VkNBTEVOREFSXG5WRVJTSU9OOjIuMFxuUFJPRElEOi0vL0V2ZW50cyBDYWxlbmRhci8vaUNhbDRqIDEuMC8vRU5cblxuQkVHSU46VkVWRU5UXG5SUlVMRTpGUkVRPVdFRUtMWTtJTlRFUlZBTD0xXG5EVFNUQVJUOjIwMjAwNTAxVDIyMDAwMFpcbkRURU5EOjIwMjAwNTA0VDE3MDAwMFpcbkRUU1RBTVA6MjAyMDA1MDFUMTYzNjQxWlxuU1VNTUFSWTpSZWN1cnJpbmdCbG9jazFcblNFUVVFTkNFOjBcbkVORDpWRVZFTlRcblxuQkVHSU46VkVWRU5UXG5SUlVMRTpGUkVRPVdFRUtMWTtJTlRFUlZBTD0xXG5EVFNUQVJUOjIwMjAwNTA1VDIyMDAwMFpcbkRURU5EOjIwMjAwNTA2VDA0MDAwMFpcbkRUU1RBTVA6MjAyMDA1MDFUMTYzNjQxWlxuU1VNTUFSWTpSZWN1cnJpbmdCbG9jazJcblNFUVVFTkNFOjBcbkVORDpWRVZFTlRcblxuRU5EOlZDQUxFTkRBUlxuYDtcblxudGVzdCgnbm9uIGJsb2NrZWQgdGltZSBiZWZvcmUgYWxsIGV2ZW50cycsICgpID0+IHtcbiAgY29uc3QgeCA9IHNob3VsZEJsb2NrUGlwZWxpbmUoaWNzLCBuZXcgRGF0ZSgnMjAxOS0wMi0wM1QwNzowMDowMC4wMDBaJyksIDMwMCk7XG4gIGV4cGVjdCh4KS50b0JlVW5kZWZpbmVkKCk7XG59KTtcblxudGVzdCgnbm9uIGJsb2NrZWQgdGltZSBpbiBiZXR3ZWVuIGV2ZW50cycsICgpID0+IHtcbiAgY29uc3QgeCA9IHNob3VsZEJsb2NrUGlwZWxpbmUoaWNzLCBuZXcgRGF0ZSgnMjAxNy0wNy0xMlQwNzowMDowMC4wMDBaJykpO1xuICBleHBlY3QoeCkudG9CZVVuZGVmaW5lZCgpO1xufSk7XG5cbnRlc3QoJ2xlZnQgZWRnZScsICgpID0+IHtcbiAgY29uc3QgeCA9IHNob3VsZEJsb2NrUGlwZWxpbmUoaWNzLCBuZXcgRGF0ZSgnMjAxNy0wNC0xMlQwNzowMDowMC4wMDBaJykpO1xuICBleHBlY3QoeCAmJiB4LnN1bW1hcnkpLnRvQmUoJ0Jsb2NrMScpO1xufSk7XG5cbnRlc3QoJ3JpZ2h0IGVkZ2UnLCAoKSA9PiB7XG4gIGNvbnN0IHggPSBzaG91bGRCbG9ja1BpcGVsaW5lKGljcywgbmV3IERhdGUoJzIwMTctMTEtMjdUMDg6MDA6MDAuMDAwWicpKTtcbiAgZXhwZWN0KHggJiYgeC5zdW1tYXJ5KS50b0JlKCdCbG9jazInKTtcbn0pO1xuXG50ZXN0KCdhIGJsb2NrZWQgd2luZG93IHN0YXJ0cyBBTkQgZmluaXNoZXMgd2l0aGluIG1hcmdpbicsICgpID0+IHtcbiAgLy8gVXNpbmcgNzIgaG91cnMgcGFkZGluZyB0byB3aWRlbHkgb3ZlcmxhcCBCbG9jazNcbiAgY29uc3QgeCA9IHNob3VsZEJsb2NrUGlwZWxpbmUoaWNzLCBuZXcgRGF0ZSgnMjAxOS0wMi0wM1QwNzowMDowMC4wMDBaJyksIDcyICogM182MDApO1xuICBleHBlY3QoeCAmJiB4LnN1bW1hcnkpLnRvQmUoJ0Jsb2NrMycpO1xufSk7XG5cbi8vIFRlc3QgdGhhdCB0aGUgaW5pdGlhbCBldmVudCBpbiBhIHJlY3VycmluZyBzZXJpZXMgYmxvY2tzIHRoZSBwaXBlbGluZSB3aGVuXG4vLyB0aGUgbGVmdCBlZGdlIGFsaWducyB3aXRoIHRoZSBjdXJyZW50IHRpbWUuXG50ZXN0KCdjdXJyZW50IHRpbWUgYWxpZ25zIHdpdGggdGhlIGxlZnQgZWRnZSBvZiB0aGUgZmlyc3QgZXZlbnQgaW4gYSBzZXJpZXMgYmxvY2tzIHBpcGVsaW5lJywgKCkgPT4ge1xuICBjb25zdCB4ID0gc2hvdWxkQmxvY2tQaXBlbGluZShyZWN1cnJpbmdJY3MsIG5ldyBEYXRlKCcyMDIwLTA1LTAxVDIyOjAwOjAwLjAwMFonKSk7XG4gIGV4cGVjdCh4ICYmIHguc3VtbWFyeSkudG9CZSgnUmVjdXJyaW5nQmxvY2sxJyk7XG59KTtcblxuLy8gVGVzdCB0aGF0IGEgZnV0dXJlIGV2ZW50IGluIGEgcmVjdXJyaW5nIHNlcmllcyBibG9ja3MgdGhlIHBpcGVsaW5lIHdoZW5cbi8vIHRoZSBsZWZ0IGVkZ2UgYWxpZ25zIHdpdGggdGhlIGN1cnJlbnQgdGltZS5cbnRlc3QoJ2N1cnJlbnQgdGltZSBhbGlnbnMgd2l0aCB0aGUgbGVmdCBlZGdlIG9mIGZ1dHVyZSBldmVudCBpbiBhIHNlcmllcyBibG9ja3MgcGlwZWxpbmUnLCAoKSA9PiB7XG4gIGNvbnN0IHggPSBzaG91bGRCbG9ja1BpcGVsaW5lKHJlY3VycmluZ0ljcywgbmV3IERhdGUoJzIwMjAtMDUtMjJUMjI6MDA6MDAuMDAwWicpKTtcbiAgZXhwZWN0KHggJiYgeC5zdW1tYXJ5KS50b0JlKCdSZWN1cnJpbmdCbG9jazEnKTtcbn0pO1xuXG4vLyBUZXN0IHRoYXQgdGhlIGluaXRpYWwgZXZlbnQgaW4gYSByZWN1cnJpbmcgc2VyaWVzIGJsb2NrcyB0aGUgcGlwZWxpbmUgd2hlblxuLy8gdGhlIHJpZ2h0IGVkZ2UgYWxpZ25zIHdpdGggdGhlIGN1cnJlbnQgdGltZS5cbnRlc3QoJ2N1cnJlbnQgdGltZSBhbGlnbnMgd2l0aCB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBibG9ja3MgcGlwZWxpbmUnLCAoKSA9PiB7XG4gIGNvbnN0IHggPSBzaG91bGRCbG9ja1BpcGVsaW5lKHJlY3VycmluZ0ljcywgbmV3IERhdGUoJzIwMjAtMDUtMDZUMDQ6MDA6MDAuMDAwWicpKTtcbiAgZXhwZWN0KHggJiYgeC5zdW1tYXJ5KS50b0JlKCdSZWN1cnJpbmdCbG9jazInKTtcbn0pO1xuXG5cbi8vIFRlc3QgdGhhdCBhIGZ1dHVyZSBldmVudCBpbiBhIHJlY3VycmluZyBzZXJpZXMgYmxvY2tzIHRoZSBwaXBlbGluZSB3aGVuXG4vLyB0aGUgcmlnaHQgZWRnZSBhbGlnbnMgd2l0aCB0aGUgY3VycmVudCB0aW1lLlxudGVzdCgnY3VycmVudCB0aW1lIGFsaWducyB3aXRoIHRoZSByaWdodCBlZGdlIG9mIGZ1dHVyZSBldmVudCBpbiBzZXJpZXMgYmxvY2tzIHBpcGVsaW5lJywgKCkgPT4ge1xuICBjb25zdCB4ID0gc2hvdWxkQmxvY2tQaXBlbGluZShyZWN1cnJpbmdJY3MsIG5ldyBEYXRlKCcyMDIwLTA1LTI3VDA0OjAwOjAwLjAwMFonKSk7XG4gIGV4cGVjdCh4ICYmIHguc3VtbWFyeSkudG9CZSgnUmVjdXJyaW5nQmxvY2syJyk7XG59KTtcblxuLy8gVGVzdCB0aGF0IHdlIGRvIG5vdCBibG9jayBiZXR3ZWVuIGV2ZW50cyBpbiBhIHJlY3VycmluZyBzZXJpZXMuXG50ZXN0KCdjdXJyZW50IHRpbWUgaXMgYmV0d2VlbiBmdXR1cmUgZXZlbnRzIGluIHJlY3VycmluZyBzZXJpZXMgZG9lcyBub3QgYmxvY2sgcGlwZWxpbmUnLCAoKSA9PiB7XG4gIGNvbnN0IHggPSBzaG91bGRCbG9ja1BpcGVsaW5lKHJlY3VycmluZ0ljcywgbmV3IERhdGUoJzIwMjAtMDUtMTRUMDA6MDA6MDAuMDAwWicpKTtcbiAgZXhwZWN0KHgpLnRvQmVVbmRlZmluZWQoKTtcbn0pO1xuIl19
@@ -1,6 +0,0 @@
1
- import { Construct, aws_codepipeline as aws_codepipeline, aws_codepipeline_actions as aws_codepipeline_actions } from 'monocdk';
2
- import '@monocdk-experiment/assert/jest';
3
- export declare class FakeSourceAction extends aws_codepipeline_actions.Action {
4
- constructor();
5
- protected bound(_scope: Construct, _stage: aws_codepipeline.IStage, _options: aws_codepipeline.ActionBindOptions): aws_codepipeline.ActionConfig;
6
- }
@@ -1,138 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FakeSourceAction = void 0;
4
- const monocdk_1 = require("monocdk");
5
- const lib_1 = require("../../lib");
6
- const notifier_handler_1 = require("../../lib/chime-notifier/handler/notifier-handler");
7
- // eslint-disable-next-line @typescript-eslint/no-require-imports
8
- const https = require('https');
9
- require("@monocdk-experiment/assert/jest");
10
- jest.mock('https');
11
- const mockHttpsWrite = jest.fn();
12
- https.request = jest.fn((_url, _options, cb) => {
13
- return {
14
- on: jest.fn(),
15
- write: mockHttpsWrite,
16
- end: () => cb({
17
- statusCode: 200,
18
- headers: {},
19
- setEncoding: () => undefined,
20
- on: (event, listener) => {
21
- if (event === 'end') {
22
- listener();
23
- }
24
- },
25
- }),
26
- };
27
- });
28
- test('call codepipeline and then post to webhooks', async () => {
29
- notifier_handler_1.codePipeline.getPipelineExecution = jest.fn().mockReturnValue({
30
- promise: () => Promise.resolve({
31
- pipelineExecution: {
32
- pipelineExecutionId: 'xyz',
33
- pipelineVersion: 1,
34
- pipelineName: 'xyz',
35
- status: 'Succeeded',
36
- artifactRevisions: [
37
- {
38
- revisionUrl: 'revision.com/url',
39
- revisionId: '1234',
40
- name: 'Source',
41
- revisionSummary: 'A thing happened',
42
- },
43
- ],
44
- },
45
- }),
46
- });
47
- notifier_handler_1.codePipeline.listActionExecutions = jest.fn().mockReturnValue({
48
- promise: () => Promise.resolve({
49
- actionExecutionDetails: [
50
- {
51
- stageName: 'Source',
52
- actionName: 'Source',
53
- status: 'Succeeded',
54
- output: {
55
- executionResult: {
56
- externalExecutionUrl: 'https://SUCCEED',
57
- },
58
- },
59
- },
60
- {
61
- stageName: 'Build',
62
- actionName: 'Build',
63
- status: 'Failed',
64
- output: {
65
- executionResult: {
66
- externalExecutionUrl: 'https://FAIL',
67
- },
68
- },
69
- },
70
- ],
71
- }),
72
- });
73
- await (0, notifier_handler_1.handler)({
74
- webhookUrls: ['https://my.url/'],
75
- message: "Pipeline '$PIPELINE' failed on '$REVISION' in '$ACTION' (see $URL)",
76
- detail: {
77
- 'pipeline': 'myPipeline',
78
- 'version': '1',
79
- 'state': 'FAILED',
80
- 'execution-id': 'abcdef',
81
- },
82
- });
83
- expect(https.request).toBeCalledWith('https://my.url/', expect.objectContaining({
84
- method: 'POST',
85
- }), expect.any(Function));
86
- expect(mockHttpsWrite).toBeCalledWith(expect.stringContaining('"Content"')); // Contains JSON
87
- expect(mockHttpsWrite).toBeCalledWith(expect.stringContaining('myPipeline')); // Contains the pipeline name
88
- expect(mockHttpsWrite).toBeCalledWith(expect.stringContaining('A thing happened')); // Contains the revision summary
89
- expect(mockHttpsWrite).toBeCalledWith(expect.stringContaining('Build')); // Contains the failing action name
90
- expect(mockHttpsWrite).toBeCalledWith(expect.stringContaining('https://FAIL')); // Contains the failing URL
91
- });
92
- test('can add to stack', () => {
93
- const stack = new monocdk_1.Stack(new monocdk_1.App(), 'TestStack');
94
- const pipeline = new monocdk_1.aws_codepipeline.Pipeline(stack, 'Pipe');
95
- pipeline.addStage({ stageName: 'Source', actions: [new FakeSourceAction()] });
96
- pipeline.addStage({ stageName: 'Build', actions: [new monocdk_1.aws_codepipeline_actions.ManualApprovalAction({ actionName: 'Dummy' })] });
97
- new lib_1.ChimeNotifier(stack, 'Chime', {
98
- pipeline,
99
- webhookUrls: ['https://go/'],
100
- });
101
- // EXPECT: no error
102
- expect(stack).toHaveResource('AWS::Lambda::Function');
103
- });
104
- test('webhook url can be a token', () => {
105
- const stack = new monocdk_1.Stack(new monocdk_1.App(), 'TestStack');
106
- const pipeline = new monocdk_1.aws_codepipeline.Pipeline(stack, 'Pipe');
107
- pipeline.addStage({ stageName: 'Source', actions: [new FakeSourceAction()] });
108
- pipeline.addStage({ stageName: 'Build', actions: [new monocdk_1.aws_codepipeline_actions.ManualApprovalAction({ actionName: 'Dummy' })] });
109
- new lib_1.ChimeNotifier(stack, 'Chime', {
110
- pipeline,
111
- webhookUrls: [monocdk_1.Lazy.stringValue({ produce: () => 'https://go/' })],
112
- });
113
- expect(stack).toHaveResource('AWS::Lambda::Function');
114
- });
115
- class FakeSourceAction extends monocdk_1.aws_codepipeline_actions.Action {
116
- constructor() {
117
- super({
118
- actionName: 'Fake',
119
- category: monocdk_1.aws_codepipeline.ActionCategory.SOURCE,
120
- provider: 'FAKE',
121
- artifactBounds: {
122
- minInputs: 0,
123
- maxInputs: 0,
124
- minOutputs: 1,
125
- maxOutputs: 1,
126
- },
127
- outputs: [new monocdk_1.aws_codepipeline.Artifact('bla')],
128
- });
129
- }
130
- // tslint:disable-next-line: max-line-length
131
- bound(_scope, _stage, _options) {
132
- return {
133
- configuration: {},
134
- };
135
- }
136
- }
137
- exports.FakeSourceAction = FakeSourceAction;
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbWUtbm90aWZpZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoaW1lLW5vdGlmaWVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBSWlCO0FBQ2pCLG1DQUEwQztBQUMxQyx3RkFBMEY7QUFDMUYsaUVBQWlFO0FBQ2pFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQiwyQ0FBeUM7QUFFekMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVuQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDaEMsS0FBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN0RCxPQUFPO1FBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDYixLQUFLLEVBQUUsY0FBYztRQUNyQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ1osVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTO1lBQzVCLEVBQUUsRUFBRSxDQUFDLEtBQWEsRUFBRSxRQUFvQixFQUFFLEVBQUU7Z0JBQzFDLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtvQkFBRSxRQUFRLEVBQUUsQ0FBQztpQkFBRTtZQUN0QyxDQUFDO1NBQ0YsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM3RCwrQkFBWSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUM7UUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENB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LENBQUMsY0FBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0tBQ2xFLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMsQ0FBQztBQUVILE1BQWEsZ0JBQWlCLFNBQVEsa0NBQXdCLENBQUMsTUFBTTtJQUNuRTtRQUNFLEtBQUssQ0FBQztZQUNKLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFFBQVEsRUFBRSwwQkFBZ0IsQ0FBQyxjQUFjLENBQUMsTUFBTTtZQUNoRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixjQUFjLEVBQUU7Z0JBQ2QsU0FBUyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxFQUFFLENBQUM7Z0JBQ1osVUFBVSxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxFQUFFLENBQUM7YUFDZDtZQUNELE9BQU8sRUFBRSxDQUFDLElBQUksMEJBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw0Q0FBNEM7SUFDbEMsS0FBSyxDQUFDLE1BQWlCLEVBQUUsTUFBK0IsRUFBRSxRQUE0QztRQUM5RyxPQUFPO1lBQ0wsYUFBYSxFQUFFLEVBQUc7U0FDbkIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRCRCw0Q0FzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHAsIENvbnN0cnVjdCwgTGF6eSwgU3RhY2ssXG4gIGF3c19jb2RlcGlwZWxpbmUgYXMgYXdzX2NvZGVwaXBlbGluZSxcbiAgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGF3c19jb2RlcGlwZWxpbmVfYWN0aW9ucyxcbn0gZnJvbSAnbW9ub2Nkayc7XG5pbXBvcnQgeyBDaGltZU5vdGlmaWVyIH0gZnJvbSAnLi4vLi4vbGliJztcbmltcG9ydCB7IGNvZGVQaXBlbGluZSwgaGFuZGxlciB9IGZyb20gJy4uLy4uL2xpYi9jaGltZS1ub3RpZmllci9oYW5kbGVyL25vdGlmaWVyLWhhbmRsZXInO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmltcG9ydCAnQG1vbm9jZGstZXhwZXJpbWVudC9hc3NlcnQvamVzdCc7XG5cbmplc3QubW9jaygnaHR0cHMnKTtcblxuY29uc3QgbW9ja0h0dHBzV3JpdGUgPSBqZXN0LmZuKCk7XG4oaHR0cHMgYXMgYW55KS5yZXF1ZXN0ID0gamVzdC5mbigoX3VybCwgX29wdGlvbnMsIGNiKSA9PiB7XG4gIHJldHVybiB7XG4gICAgb246IGplc3QuZm4oKSxcbiAgICB3cml0ZTogbW9ja0h0dHBzV3JpdGUsXG4gICAgZW5kOiAoKSA9PiBjYih7XG4gICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHNldEVuY29kaW5nOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBvbjogKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgIGlmIChldmVudCA9PT0gJ2VuZCcpIHsgbGlzdGVuZXIoKTsgfVxuICAgICAgfSxcbiAgICB9KSxcbiAgfTtcbn0pO1xuXG50ZXN0KCdjYWxsIGNvZGVwaXBlbGluZSBhbmQgdGhlbiBwb3N0IHRvIHdlYmhvb2tzJywgYXN5bmMgKCkgPT4ge1xuICBjb2RlUGlwZWxpbmUuZ2V0UGlwZWxpbmVFeGVjdXRpb24gPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICBwcm9taXNlOiAoKSA9PiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgcGlwZWxpbmVFeGVjdXRpb246IHtcbiAgICAgICAgcGlwZWxpbmVFeGVjdXRpb25JZDogJ3h5eicsXG4gICAgICAgIHBpcGVsaW5lVmVyc2lvbjogMSxcbiAgICAgICAgcGlwZWxpbmVOYW1lOiAneHl6JyxcbiAgICAgICAgc3RhdHVzOiAnU3VjY2VlZGVkJyxcbiAgICAgICAgYXJ0aWZhY3RSZXZpc2lvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXZpc2lvblVybDogJ3JldmlzaW9uLmNvbS91cmwnLFxuICAgICAgICAgICAgcmV2aXNpb25JZDogJzEyMzQnLFxuICAgICAgICAgICAgbmFtZTogJ1NvdXJjZScsXG4gICAgICAgICAgICByZXZpc2lvblN1bW1hcnk6ICdBIHRoaW5nIGhhcHBlbmVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KSxcbiAgfSk7XG5cbiAgY29kZVBpcGVsaW5lLmxpc3RBY3Rpb25FeGVjdXRpb25zID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7XG4gICAgcHJvbWlzZTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIGFjdGlvbkV4ZWN1dGlvbkRldGFpbHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YWdlTmFtZTogJ1NvdXJjZScsXG4gICAgICAgICAgYWN0aW9uTmFtZTogJ1NvdXJjZScsXG4gICAgICAgICAgc3RhdHVzOiAnU3VjY2VlZGVkJyxcbiAgICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICAgIGV4ZWN1dGlvblJlc3VsdDoge1xuICAgICAgICAgICAgICBleHRlcm5hbEV4ZWN1dGlvblVybDogJ2h0dHBzOi8vU1VDQ0VFRCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFnZU5hbWU6ICdCdWlsZCcsXG4gICAgICAgICAgYWN0aW9uTmFtZTogJ0J1aWxkJyxcbiAgICAgICAgICBzdGF0dXM6ICdGYWlsZWQnLFxuICAgICAgICAgIG91dHB1dDoge1xuICAgICAgICAgICAgZXhlY3V0aW9uUmVzdWx0OiB7XG4gICAgICAgICAgICAgIGV4dGVybmFsRXhlY3V0aW9uVXJsOiAnaHR0cHM6Ly9GQUlMJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSksXG4gIH0pO1xuXG4gIGF3YWl0IGhhbmRsZXIoe1xuICAgIHdlYmhvb2tVcmxzOiBbJ2h0dHBzOi8vbXkudXJsLyddLFxuICAgIG1lc3NhZ2U6IFwiUGlwZWxpbmUgJyRQSVBFTElORScgZmFpbGVkIG9uICckUkVWSVNJT04nIGluICckQUNUSU9OJyAoc2VlICRVUkwpXCIsXG4gICAgZGV0YWlsOiB7XG4gICAgICAncGlwZWxpbmUnOiAnbXlQaXBlbGluZScsXG4gICAgICAndmVyc2lvbic6ICcxJyxcbiAgICAgICdzdGF0ZSc6ICdGQUlMRUQnLFxuICAgICAgJ2V4ZWN1dGlvbi1pZCc6ICdhYmNkZWYnLFxuICAgIH0sXG4gIH0pO1xuXG4gIGV4cGVjdChodHRwcy5yZXF1ZXN0KS50b0JlQ2FsbGVkV2l0aCgnaHR0cHM6Ly9teS51cmwvJywgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICB9KSwgZXhwZWN0LmFueShGdW5jdGlvbikpO1xuICBleHBlY3QobW9ja0h0dHBzV3JpdGUpLnRvQmVDYWxsZWRXaXRoKGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdcIkNvbnRlbnRcIicpKTsgLy8gQ29udGFpbnMgSlNPTlxuXG4gIGV4cGVjdChtb2NrSHR0cHNXcml0ZSkudG9CZUNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ215UGlwZWxpbmUnKSk7IC8vIENvbnRhaW5zIHRoZSBwaXBlbGluZSBuYW1lXG4gIGV4cGVjdChtb2NrSHR0cHNXcml0ZSkudG9CZUNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ0EgdGhpbmcgaGFwcGVuZWQnKSk7IC8vIENvbnRhaW5zIHRoZSByZXZpc2lvbiBzdW1tYXJ5XG4gIGV4cGVjdChtb2NrSHR0cHNXcml0ZSkudG9CZUNhbGxlZFdpdGgoZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ0J1aWxkJykpOyAvLyBDb250YWlucyB0aGUgZmFpbGluZyBhY3Rpb24gbmFtZVxuICBleHBlY3QobW9ja0h0dHBzV3JpdGUpLnRvQmVDYWxsZWRXaXRoKGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdodHRwczovL0ZBSUwnKSk7IC8vIENvbnRhaW5zIHRoZSBmYWlsaW5nIFVSTFxufSk7XG5cbnRlc3QoJ2NhbiBhZGQgdG8gc3RhY2snLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBBcHAoKSwgJ1Rlc3RTdGFjaycpO1xuICBjb25zdCBwaXBlbGluZSA9IG5ldyBhd3NfY29kZXBpcGVsaW5lLlBpcGVsaW5lKHN0YWNrLCAnUGlwZScpO1xuICBwaXBlbGluZS5hZGRTdGFnZSh7IHN0YWdlTmFtZTogJ1NvdXJjZScsIGFjdGlvbnM6IFtuZXcgRmFrZVNvdXJjZUFjdGlvbigpXSB9KTtcbiAgcGlwZWxpbmUuYWRkU3RhZ2UoeyBzdGFnZU5hbWU6ICdCdWlsZCcsIGFjdGlvbnM6IFtuZXcgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zLk1hbnVhbEFwcHJvdmFsQWN0aW9uKHsgYWN0aW9uTmFtZTogJ0R1bW15JyB9KV0gfSk7XG5cbiAgbmV3IENoaW1lTm90aWZpZXIoc3RhY2ssICdDaGltZScsIHtcbiAgICBwaXBlbGluZSxcbiAgICB3ZWJob29rVXJsczogWydodHRwczovL2dvLyddLFxuICB9KTtcblxuICAvLyBFWFBFQ1Q6IG5vIGVycm9yXG4gIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpO1xufSk7XG5cbnRlc3QoJ3dlYmhvb2sgdXJsIGNhbiBiZSBhIHRva2VuJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhuZXcgQXBwKCksICdUZXN0U3RhY2snKTtcbiAgY29uc3QgcGlwZWxpbmUgPSBuZXcgYXdzX2NvZGVwaXBlbGluZS5QaXBlbGluZShzdGFjaywgJ1BpcGUnKTtcbiAgcGlwZWxpbmUuYWRkU3RhZ2UoeyBzdGFnZU5hbWU6ICdTb3VyY2UnLCBhY3Rpb25zOiBbbmV3IEZha2VTb3VyY2VBY3Rpb24oKV0gfSk7XG4gIHBpcGVsaW5lLmFkZFN0YWdlKHsgc3RhZ2VOYW1lOiAnQnVpbGQnLCBhY3Rpb25zOiBbbmV3IGF3c19jb2RlcGlwZWxpbmVfYWN0aW9ucy5NYW51YWxBcHByb3ZhbEFjdGlvbih7IGFjdGlvbk5hbWU6ICdEdW1teScgfSldIH0pO1xuXG4gIG5ldyBDaGltZU5vdGlmaWVyKHN0YWNrLCAnQ2hpbWUnLCB7XG4gICAgcGlwZWxpbmUsXG4gICAgd2ViaG9va1VybHM6IFtMYXp5LnN0cmluZ1ZhbHVlKHsgcHJvZHVjZTogKCkgPT4gJ2h0dHBzOi8vZ28vJyB9KV0sXG4gIH0pO1xuXG4gIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpO1xufSk7XG5cbmV4cG9ydCBjbGFzcyBGYWtlU291cmNlQWN0aW9uIGV4dGVuZHMgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zLkFjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHtcbiAgICAgIGFjdGlvbk5hbWU6ICdGYWtlJyxcbiAgICAgIGNhdGVnb3J5OiBhd3NfY29kZXBpcGVsaW5lLkFjdGlvbkNhdGVnb3J5LlNPVVJDRSxcbiAgICAgIHByb3ZpZGVyOiAnRkFLRScsXG4gICAgICBhcnRpZmFjdEJvdW5kczoge1xuICAgICAgICBtaW5JbnB1dHM6IDAsXG4gICAgICAgIG1heElucHV0czogMCxcbiAgICAgICAgbWluT3V0cHV0czogMSxcbiAgICAgICAgbWF4T3V0cHV0czogMSxcbiAgICAgIH0sXG4gICAgICBvdXRwdXRzOiBbbmV3IGF3c19jb2RlcGlwZWxpbmUuQXJ0aWZhY3QoJ2JsYScpXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gIHByb3RlY3RlZCBib3VuZChfc2NvcGU6IENvbnN0cnVjdCwgX3N0YWdlOiBhd3NfY29kZXBpcGVsaW5lLklTdGFnZSwgX29wdGlvbnM6IGF3c19jb2RlcGlwZWxpbmUuQWN0aW9uQmluZE9wdGlvbnMpOiBhd3NfY29kZXBpcGVsaW5lLkFjdGlvbkNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHsgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1 +0,0 @@
1
- import '@monocdk-experiment/assert/jest';