aws-delivlib 13.7.10 → 14.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdk.out/asset.1f7e277bd526ebce1983fa1e7a84a5281ec533d9187caaebb773681bbf7bf4c1/__entrypoint__.js +119 -0
- package/cdk.out/{asset.15684a15d07860e99d2a8079150ad33dd2cb743677fcd7016dd07345e1b69538 → asset.1f7e277bd526ebce1983fa1e7a84a5281ec533d9187caaebb773681bbf7bf4c1}/index.d.ts +0 -0
- package/cdk.out/{asset.15684a15d07860e99d2a8079150ad33dd2cb743677fcd7016dd07345e1b69538 → asset.1f7e277bd526ebce1983fa1e7a84a5281ec533d9187caaebb773681bbf7bf4c1}/index.js +0 -0
- package/cdk.out/{asset.ca50c9b7760151d8e8ce6e39851032d4eff4836ea1ee806eaa944aaef110a353 → asset.7ada94e893d605ebbcf2f5b3bedc83bad3c704ab7892c1f2af45bfd79fb751e7}/index.js +20 -4
- package/cdk.out/{asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451 → asset.7bfdb1075bf8728fe236bcef49fbf08ac3ead6c9947f5d65f25b5a7c09758bb1}/create-release.js +0 -0
- package/cdk.out/{asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451 → asset.7bfdb1075bf8728fe236bcef49fbf08ac3ead6c9947f5d65f25b5a7c09758bb1}/package-lock.json +0 -0
- package/cdk.out/{asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451 → asset.7bfdb1075bf8728fe236bcef49fbf08ac3ead6c9947f5d65f25b5a7c09758bb1}/package.json +0 -0
- package/cdk.out/{asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451 → asset.7bfdb1075bf8728fe236bcef49fbf08ac3ead6c9947f5d65f25b5a7c09758bb1}/publish.sh +0 -0
- package/cdk.out/{asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451 → asset.7bfdb1075bf8728fe236bcef49fbf08ac3ead6c9947f5d65f25b5a7c09758bb1}/sign-files.sh +0 -0
- package/cdk.out/{asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451 → asset.7bfdb1075bf8728fe236bcef49fbf08ac3ead6c9947f5d65f25b5a7c09758bb1}/with-signing-key.sh +1 -7
- package/cdk.out/cdk.out +1 -1
- package/cdk.out/delivlib-test.assets.json +12 -12
- package/cdk.out/delivlib-test.template.json +7135 -7704
- package/cdk.out/manifest.json +152 -2498
- package/cdk.out/tree.json +1059 -1427
- package/lib/auto-build.d.ts +2 -1
- package/lib/auto-build.js +8 -7
- package/lib/auto-build.ts +3 -2
- package/lib/build-env.d.ts +1 -1
- package/lib/build-env.js +4 -4
- package/lib/build-env.ts +1 -1
- package/lib/canary.d.ts +2 -1
- package/lib/canary.js +7 -6
- package/lib/canary.ts +2 -2
- package/lib/change-controller.d.ts +2 -1
- package/lib/change-controller.js +20 -18
- package/lib/change-controller.ts +6 -5
- package/lib/chime-notifier/chime-notifier.d.ts +2 -1
- package/lib/chime-notifier/chime-notifier.js +12 -11
- package/lib/chime-notifier/chime-notifier.ts +3 -2
- package/lib/code-signing/certificate-signing-request.d.ts +1 -1
- package/lib/code-signing/certificate-signing-request.js +16 -14
- package/lib/code-signing/certificate-signing-request.ts +7 -5
- package/lib/code-signing/code-signing-certificate.d.ts +2 -1
- package/lib/code-signing/code-signing-certificate.js +12 -11
- package/lib/code-signing/code-signing-certificate.ts +5 -4
- package/lib/code-signing/private-key.d.ts +2 -1
- package/lib/code-signing/private-key.js +28 -26
- package/lib/code-signing/private-key.ts +10 -8
- package/lib/credential-pair.d.ts +1 -1
- package/lib/credential-pair.js +1 -1
- package/lib/credential-pair.ts +1 -1
- package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
- package/lib/open-pgp-key-pair.d.ts +2 -1
- package/lib/open-pgp-key-pair.js +28 -27
- package/lib/open-pgp-key-pair.ts +12 -10
- package/lib/package-integrity/handler/validate.bundle.js +814 -457
- package/lib/package-integrity/integrity.d.ts +2 -1
- package/lib/package-integrity/integrity.js +7 -6
- package/lib/package-integrity/integrity.ts +2 -2
- package/lib/permissions.d.ts +1 -1
- package/lib/permissions.js +5 -5
- package/lib/permissions.ts +4 -4
- package/lib/pipeline-notifications/slack.d.ts +1 -1
- package/lib/pipeline-notifications/slack.js +4 -4
- package/lib/pipeline-notifications/slack.ts +1 -1
- package/lib/pipeline-watcher/watcher.d.ts +2 -1
- package/lib/pipeline-watcher/watcher.js +16 -15
- package/lib/pipeline-watcher/watcher.ts +3 -3
- package/lib/pipeline.d.ts +2 -1
- package/lib/pipeline.js +19 -18
- package/lib/pipeline.ts +5 -4
- package/lib/publishing/github/with-signing-key.sh +1 -7
- package/lib/publishing.d.ts +2 -1
- package/lib/publishing.js +36 -35
- package/lib/publishing.ts +9 -8
- package/lib/pull-request/bump.d.ts +3 -3
- package/lib/pull-request/bump.js +3 -26
- package/lib/pull-request/bump.ts +3 -3
- package/lib/pull-request/merge-back.d.ts +3 -3
- package/lib/pull-request/merge-back.js +3 -3
- package/lib/pull-request/merge-back.ts +3 -3
- package/lib/pull-request/pr.d.ts +2 -1
- package/lib/pull-request/pr.js +11 -10
- package/lib/pull-request/pr.ts +3 -2
- package/lib/registry-sync/ecr-mirror.d.ts +2 -1
- package/lib/registry-sync/ecr-mirror.js +22 -21
- package/lib/registry-sync/ecr-mirror.ts +4 -3
- package/lib/registry-sync/mirror-source.d.ts +2 -1
- package/lib/registry-sync/mirror-source.js +3 -3
- package/lib/registry-sync/mirror-source.ts +2 -2
- package/lib/repo.d.ts +2 -1
- package/lib/repo.js +12 -12
- package/lib/repo.ts +3 -2
- package/lib/shellable.d.ts +2 -1
- package/lib/shellable.js +23 -22
- package/lib/shellable.ts +5 -4
- package/lib/signing-key.d.ts +2 -1
- package/lib/signing-key.js +6 -5
- package/lib/signing-key.ts +3 -2
- package/lib/util.d.ts +1 -1
- package/lib/util.js +1 -1
- package/lib/util.ts +1 -1
- package/package.json +12 -10
- package/cdk.out/asset.15684a15d07860e99d2a8079150ad33dd2cb743677fcd7016dd07345e1b69538/__entrypoint__.js +0 -119
package/lib/signing-key.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OpenPgpKey = void 0;
|
|
4
|
-
const
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
5
6
|
const open_pgp_key_pair_1 = require("./open-pgp-key-pair");
|
|
6
7
|
/**
|
|
7
8
|
* A combination of a Secrets Manager secret and a unique KMS key per secret
|
|
@@ -11,12 +12,12 @@ const open_pgp_key_pair_1 = require("./open-pgp-key-pair");
|
|
|
11
12
|
*
|
|
12
13
|
* @deprecated Use the OpenPGPKeyPair class instead.
|
|
13
14
|
*/
|
|
14
|
-
class OpenPgpKey extends
|
|
15
|
+
class OpenPgpKey extends constructs_1.Construct {
|
|
15
16
|
constructor(parent, name, props) {
|
|
16
17
|
super(parent, name);
|
|
17
|
-
this.scope = props.secretName || this.node.
|
|
18
|
+
this.scope = props.secretName || this.node.addr;
|
|
18
19
|
const secretName = `${this.scope}/SigningKey`;
|
|
19
|
-
this.key = new
|
|
20
|
+
this.key = new aws_cdk_lib_1.aws_kms.Key(this, 'Key', {
|
|
20
21
|
description: `Encryption key for PGP secret ${secretName}`,
|
|
21
22
|
});
|
|
22
23
|
// The key has an alias for descriptive purposes, but the alias is not used
|
|
@@ -37,4 +38,4 @@ class OpenPgpKey extends monocdk_1.Construct {
|
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
exports.OpenPgpKey = OpenPgpKey;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmluZy1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaWduaW5nLWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBNkQ7QUFDN0QsMkNBQXVDO0FBQ3ZDLDJEQUFxRDtBQTJCckQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsVUFBVyxTQUFRLHNCQUFTO0lBTXZDLFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBc0I7UUFDakUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxhQUFhLENBQUM7UUFFOUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLHFCQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDbEMsV0FBVyxFQUFFLGlDQUFpQyxVQUFVLEVBQUU7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsVUFBVSxLQUFLLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksa0NBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQy9DLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsTUFBTSxFQUFFLElBQUk7WUFDWixVQUFVO1lBQ1YsbUJBQW1CLEVBQUUsSUFBSSxVQUFVLE1BQU07WUFDekMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxRQUF3QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FDRjtBQWxDRCxnQ0FrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfaWFtIGFzIGlhbSwgYXdzX2ttcyBhcyBrbXMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IE9wZW5QR1BLZXlQYWlyIH0gZnJvbSAnLi9vcGVuLXBncC1rZXktcGFpcic7XG5cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBTaWduaW5nS2V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmluZ0tleVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBuYW1lIHRvIHVzZSBmb3IgdGhpcyBrZXkuXG4gICAqXG4gICAqIFRoZSBzZWNyZXQgd2lsbCBiZSBuYW1lZCBcIjxzY29wZT4vU2lnbmluZ0tleVwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBIHVuaXF1ZSBzZWNyZXQgbmFtZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkXG4gICAqL1xuICBzZWNyZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIHRvIHB1dCBvbiBrZXlcbiAgICovXG4gIGlkZW50aXR5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVtYWlsIGFkZHJlc3MgdG8gcHV0IG9uIGtleVxuICAgKi9cbiAgZW1haWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGNvbWJpbmF0aW9uIG9mIGEgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBhbmQgYSB1bmlxdWUgS01TIGtleSBwZXIgc2VjcmV0XG4gKlxuICogVGhlIEtNUyBrZXkgaXMgdGhlcmUgdG8gY29udHJvbCBhY2Nlc3MgdG8gdGhlIHNlY3JldCwgYXMgdGhlIHNlY3JldFxuICogaXRzZWxmIGRvZXNuJ3Qgc3VwcG9ydCByZXNvdXJjZSBwb2xpY2llcyB5ZXQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBPcGVuUEdQS2V5UGFpciBjbGFzcyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY2xhc3MgT3BlblBncEtleSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBzY29wZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkga2V5OiBrbXMuSUtleTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWNyZXQ6IE9wZW5QR1BLZXlQYWlyO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmVudDogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBTaWduaW5nS2V5UHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgdGhpcy5zY29wZSA9IHByb3BzLnNlY3JldE5hbWUgfHwgdGhpcy5ub2RlLmFkZHI7XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IGAke3RoaXMuc2NvcGV9L1NpZ25pbmdLZXlgO1xuXG4gICAgdGhpcy5rZXkgPSBuZXcga21zLktleSh0aGlzLCAnS2V5Jywge1xuICAgICAgZGVzY3JpcHRpb246IGBFbmNyeXB0aW9uIGtleSBmb3IgUEdQIHNlY3JldCAke3NlY3JldE5hbWV9YCxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBrZXkgaGFzIGFuIGFsaWFzIGZvciBkZXNjcmlwdGl2ZSBwdXJwb3NlcywgYnV0IHRoZSBhbGlhcyBpcyBub3QgdXNlZFxuICAgIHRoaXMua2V5LmFkZEFsaWFzKGBhbGlhcy8ke3NlY3JldE5hbWV9S2V5YCk7XG5cbiAgICB0aGlzLnNlY3JldCA9IG5ldyBPcGVuUEdQS2V5UGFpcih0aGlzLCAnU2VjcmV0Jywge1xuICAgICAgaWRlbnRpdHk6IHByb3BzLmlkZW50aXR5LFxuICAgICAgZW1haWw6IHByb3BzLmVtYWlsLFxuICAgICAga2V5U2l6ZUJpdHM6IDQwOTYsXG4gICAgICBleHBpcnk6ICc0eScsXG4gICAgICBzZWNyZXROYW1lLFxuICAgICAgcHViS2V5UGFyYW1ldGVyTmFtZTogYC8ke3NlY3JldE5hbWV9LnB1YmAsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmtleSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRSZWFkKGlkZW50aXR5OiBpYW0uSVByaW5jaXBhbCkge1xuICAgIHJldHVybiB0aGlzLnNlY3JldC5ncmFudFJlYWQoaWRlbnRpdHkpO1xuICB9XG59XG4iXX0=
|
package/lib/signing-key.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { aws_iam as iam, aws_kms as kms } from 'aws-cdk-lib';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
2
3
|
import { OpenPGPKeyPair } from './open-pgp-key-pair';
|
|
3
4
|
|
|
4
5
|
|
|
@@ -43,7 +44,7 @@ export class OpenPgpKey extends Construct {
|
|
|
43
44
|
constructor(parent: Construct, name: string, props: SigningKeyProps) {
|
|
44
45
|
super(parent, name);
|
|
45
46
|
|
|
46
|
-
this.scope = props.secretName || this.node.
|
|
47
|
+
this.scope = props.secretName || this.node.addr;
|
|
47
48
|
const secretName = `${this.scope}/SigningKey`;
|
|
48
49
|
|
|
49
50
|
this.key = new kms.Key(this, 'Key', {
|
package/lib/util.d.ts
CHANGED
package/lib/util.js
CHANGED
|
@@ -102,4 +102,4 @@ function flatMap(xs, fn) {
|
|
|
102
102
|
return ret;
|
|
103
103
|
}
|
|
104
104
|
exports.flatMap = flatMap;
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUk3Qjs7OztHQUlHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYSxFQUFFLFdBQW9CO0lBQ25FLGlEQUFpRDtJQUNqRCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDN0IsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBUEQsOENBT0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsU0FBaUI7SUFDbkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtRQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUQ7S0FDRjtTQUFNO1FBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQVpELGtEQVlDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsR0FBMkMsRUFBRSxJQUEwQztJQUNoSSxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1IsT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFFRCxNQUFNLEdBQUcsR0FBdUQsRUFBRyxDQUFDO0lBQ3BFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzlDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDNUI7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQVpELGdFQVlDO0FBRUQsU0FBZ0IsV0FBVyxDQUFJLEVBQWM7SUFDM0MsTUFBTSxHQUFHLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1o7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQVJELGtDQVFDO0FBRUQsU0FBZ0IsU0FBUyxDQUFPLEVBQXNCLEVBQUUsRUFBZTtJQUNyRSxNQUFNLEdBQUcsR0FBdUIsRUFBRSxDQUFDO0lBQ25DLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFORCw4QkFNQztBQUVELFNBQWdCLE9BQU8sQ0FBTyxFQUFPLEVBQUUsRUFBaUI7SUFDdEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUssQ0FBQztJQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNsQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDcEI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFORCwwQkFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkIH0gZnJvbSAnYXdzLWNkay1saWInO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgXCJSdW5PcmRlclwiIHByb3BlcnR5IGZvciB0aGUgbmV4dCBhY3Rpb24gdG8gYmUgYWRkZWQgdG8gYSBzdGFnZS5cbiAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiBuZXcgYWN0aW9uXG4gKiBAcGFyYW0gY29uY3VycmVuY3kgVGhlIGNvbmN1cnJlbmN5IGxpbWl0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVSdW5PcmRlcihpbmRleDogbnVtYmVyLCBjb25jdXJyZW5jeT86IG51bWJlcik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIC8vIG5vIHJ1bk9yZGVyIGlmIHdlIGFyZSBhdCB1bmxpbWl0ZWQgY29uY3VycmVuY3lcbiAgaWYgKGNvbmN1cnJlbmN5ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguZmxvb3IoaW5kZXggLyBjb25jdXJyZW5jeSkgKyAxO1xufVxuXG4vKipcbiAqIEhhc2hlcyB0aGUgY29udGVudHMgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeS4gSWYgdGhlIGFyZ3VtZW50IGlzIGEgZGlyZWN0b3J5LFxuICogaXQgaXMgYXNzdW1lZCBub3QgdG8gY29udGFpbiBzeW1saW5rcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIGN5Y2xpYyB0cmVlLlxuICpcbiAqIEBwYXJhbSBmaWxlT3JEaXIgdGhlIHBhdGggdG8gdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHRoYXQgc2hvdWxkIGJlIGhhc2hlZC5cbiAqXG4gKiBAcmV0dXJucyBhIFNIQTI1NiBoYXNoLCBiYXNlLTY0IGVuY29kZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoRmlsZU9yRGlyZWN0b3J5KGZpbGVPckRpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdTSEEyNTYnKTtcbiAgaGFzaC51cGRhdGUocGF0aC5iYXNlbmFtZShmaWxlT3JEaXIpKS51cGRhdGUoJ1xcMCcpO1xuICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZmlsZU9yRGlyKTtcbiAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBmcy5yZWFkZGlyU3luYyhmaWxlT3JEaXIpLnNvcnQoKSkge1xuICAgICAgaGFzaC51cGRhdGUoaGFzaEZpbGVPckRpcmVjdG9yeShwYXRoLmpvaW4oZmlsZU9yRGlyLCBpdGVtKSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoYXNoLnVwZGF0ZShmcy5yZWFkRmlsZVN5bmMoZmlsZU9yRGlyKSk7XG4gIH1cbiAgcmV0dXJuIGhhc2guZGlnZXN0KCdiYXNlNjQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVudmlyb25tZW50VmFyaWFibGVzKGVudj86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0sIHR5cGU/OiBjYnVpbGQuQnVpbGRFbnZpcm9ubWVudFZhcmlhYmxlVHlwZSkge1xuICBpZiAoIWVudikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBvdXQ6IHsgW2tleTogc3RyaW5nXTogY2J1aWxkLkJ1aWxkRW52aXJvbm1lbnRWYXJpYWJsZSB9ID0geyB9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYpKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dFtrZXldID0geyB2YWx1ZSwgdHlwZSB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9VbmRlZmluZWQ8VD4oeHM6IFBhcnRpYWw8VD4pOiB7W2sgaW4ga2V5b2YgVF06IFRba119IHtcbiAgY29uc3QgcmV0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoeHMpKSB7XG4gICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0W2tdID0gdjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFZhbHVlczxULCBVPih4czoge1trZXk6IHN0cmluZ106IFR9LCBmbjogKHg6IFQpID0+IFUpOiB7W2tleTogc3RyaW5nXTogVX0ge1xuICBjb25zdCByZXQ6IHtba2V5OiBzdHJpbmddOiBVfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh4cykpIHtcbiAgICByZXRba10gPSBmbih2KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdE1hcDxULCBVPih4czogVFtdLCBmbjogKHg6IFQpID0+IFVbXSk6IFVbXSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxVPigpO1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICByZXQucHVzaCguLi5mbih4KSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
|
package/lib/util.ts
CHANGED
package/package.json
CHANGED
|
@@ -37,9 +37,8 @@
|
|
|
37
37
|
"organization": false
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@monocdk-experiment/assert": "^1.154.0",
|
|
41
40
|
"@types/adm-zip": "^0.5.0",
|
|
42
|
-
"@types/aws-lambda": "^8.10.
|
|
41
|
+
"@types/aws-lambda": "^8.10.97",
|
|
43
42
|
"@types/fs-extra": "^9.0.13",
|
|
44
43
|
"@types/jest": "^27.5.0",
|
|
45
44
|
"@types/node": "^14",
|
|
@@ -47,10 +46,11 @@
|
|
|
47
46
|
"@typescript-eslint/eslint-plugin": "^5",
|
|
48
47
|
"@typescript-eslint/parser": "^5",
|
|
49
48
|
"adm-zip": "^0.5.9",
|
|
50
|
-
"aws-cdk": "^
|
|
51
|
-
"aws-
|
|
49
|
+
"aws-cdk": "^2.23.0",
|
|
50
|
+
"aws-cdk-lib": "^2.3.0",
|
|
51
|
+
"aws-sdk": "^2.1131.0",
|
|
52
52
|
"aws-sdk-mock": "^5.7.0",
|
|
53
|
-
"constructs": "^
|
|
53
|
+
"constructs": "^10.1.4",
|
|
54
54
|
"esbuild": "^0.14.38",
|
|
55
55
|
"eslint": "^8",
|
|
56
56
|
"eslint-import-resolver-node": "^0.3.6",
|
|
@@ -62,10 +62,9 @@
|
|
|
62
62
|
"jest-junit": "^13",
|
|
63
63
|
"json-schema": "^0.4.0",
|
|
64
64
|
"JSONStream": "^1.3.5",
|
|
65
|
-
"monocdk": "^1.154.0",
|
|
66
65
|
"node-ical": "^0.15.1",
|
|
67
66
|
"npm-check-updates": "^12",
|
|
68
|
-
"projen": "^0.
|
|
67
|
+
"projen": "^0.56.2",
|
|
69
68
|
"rrule": "^2.6.9",
|
|
70
69
|
"standard-version": "^9",
|
|
71
70
|
"tar": "^6.1.11",
|
|
@@ -73,8 +72,8 @@
|
|
|
73
72
|
"typescript": "~4.6.4"
|
|
74
73
|
},
|
|
75
74
|
"peerDependencies": {
|
|
76
|
-
"
|
|
77
|
-
"
|
|
75
|
+
"aws-cdk-lib": "^2.3.0",
|
|
76
|
+
"constructs": "^10.1.4"
|
|
78
77
|
},
|
|
79
78
|
"dependencies": {
|
|
80
79
|
"changelog-parser": "^2.8.1"
|
|
@@ -85,9 +84,12 @@
|
|
|
85
84
|
"continuous-delivery",
|
|
86
85
|
"continuous-integration"
|
|
87
86
|
],
|
|
87
|
+
"engines": {
|
|
88
|
+
"node": ">= 14.17.0"
|
|
89
|
+
},
|
|
88
90
|
"main": "lib/index.js",
|
|
89
91
|
"license": "Apache-2.0",
|
|
90
|
-
"version": "
|
|
92
|
+
"version": "14.0.2",
|
|
91
93
|
"jest": {
|
|
92
94
|
"testMatch": [
|
|
93
95
|
"**/lib/__tests__/**/?(*.)+(spec|test).js?(x)"
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handler = exports.external = void 0;
|
|
4
|
-
const https = require("https");
|
|
5
|
-
const url = require("url");
|
|
6
|
-
// for unit tests
|
|
7
|
-
exports.external = {
|
|
8
|
-
sendHttpRequest: defaultSendHttpRequest,
|
|
9
|
-
log: defaultLog,
|
|
10
|
-
includeStackTraces: true,
|
|
11
|
-
userHandlerIndex: './index',
|
|
12
|
-
};
|
|
13
|
-
const CREATE_FAILED_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::CREATE_FAILED';
|
|
14
|
-
const MISSING_PHYSICAL_ID_MARKER = 'AWSCDK::CustomResourceProviderFramework::MISSING_PHYSICAL_ID';
|
|
15
|
-
async function handler(event, context) {
|
|
16
|
-
exports.external.log(JSON.stringify(event, undefined, 2));
|
|
17
|
-
// ignore DELETE event when the physical resource ID is the marker that
|
|
18
|
-
// indicates that this DELETE is a subsequent DELETE to a failed CREATE
|
|
19
|
-
// operation.
|
|
20
|
-
if (event.RequestType === 'Delete' && event.PhysicalResourceId === CREATE_FAILED_PHYSICAL_ID_MARKER) {
|
|
21
|
-
exports.external.log('ignoring DELETE event caused by a failed CREATE event');
|
|
22
|
-
await submitResponse('SUCCESS', event);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
// invoke the user handler. this is intentionally inside the try-catch to
|
|
27
|
-
// ensure that if there is an error it's reported as a failure to
|
|
28
|
-
// cloudformation (otherwise cfn waits).
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
30
|
-
const userHandler = require(exports.external.userHandlerIndex).handler;
|
|
31
|
-
const result = await userHandler(event, context);
|
|
32
|
-
// validate user response and create the combined event
|
|
33
|
-
const responseEvent = renderResponse(event, result);
|
|
34
|
-
// submit to cfn as success
|
|
35
|
-
await submitResponse('SUCCESS', responseEvent);
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
const resp = {
|
|
39
|
-
...event,
|
|
40
|
-
Reason: exports.external.includeStackTraces ? e.stack : e.message,
|
|
41
|
-
};
|
|
42
|
-
if (!resp.PhysicalResourceId) {
|
|
43
|
-
// special case: if CREATE fails, which usually implies, we usually don't
|
|
44
|
-
// have a physical resource id. in this case, the subsequent DELETE
|
|
45
|
-
// operation does not have any meaning, and will likely fail as well. to
|
|
46
|
-
// address this, we use a marker so the provider framework can simply
|
|
47
|
-
// ignore the subsequent DELETE.
|
|
48
|
-
if (event.RequestType === 'Create') {
|
|
49
|
-
exports.external.log('CREATE failed, responding with a marker physical resource id so that the subsequent DELETE will be ignored');
|
|
50
|
-
resp.PhysicalResourceId = CREATE_FAILED_PHYSICAL_ID_MARKER;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
// otherwise, if PhysicalResourceId is not specified, something is
|
|
54
|
-
// terribly wrong because all other events should have an ID.
|
|
55
|
-
exports.external.log(`ERROR: Malformed event. "PhysicalResourceId" is required: ${JSON.stringify(event)}`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// this is an actual error, fail the activity altogether and exist.
|
|
59
|
-
await submitResponse('FAILED', resp);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
exports.handler = handler;
|
|
63
|
-
function renderResponse(cfnRequest, handlerResponse = {}) {
|
|
64
|
-
var _a, _b;
|
|
65
|
-
// if physical ID is not returned, we have some defaults for you based
|
|
66
|
-
// on the request type.
|
|
67
|
-
const physicalResourceId = (_b = (_a = handlerResponse.PhysicalResourceId) !== null && _a !== void 0 ? _a : cfnRequest.PhysicalResourceId) !== null && _b !== void 0 ? _b : cfnRequest.RequestId;
|
|
68
|
-
// if we are in DELETE and physical ID was changed, it's an error.
|
|
69
|
-
if (cfnRequest.RequestType === 'Delete' && physicalResourceId !== cfnRequest.PhysicalResourceId) {
|
|
70
|
-
throw new Error(`DELETE: cannot change the physical resource ID from "${cfnRequest.PhysicalResourceId}" to "${handlerResponse.PhysicalResourceId}" during deletion`);
|
|
71
|
-
}
|
|
72
|
-
// merge request event and result event (result prevails).
|
|
73
|
-
return {
|
|
74
|
-
...cfnRequest,
|
|
75
|
-
...handlerResponse,
|
|
76
|
-
PhysicalResourceId: physicalResourceId,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
async function submitResponse(status, event) {
|
|
80
|
-
var _a;
|
|
81
|
-
const json = {
|
|
82
|
-
Status: status,
|
|
83
|
-
Reason: (_a = event.Reason) !== null && _a !== void 0 ? _a : status,
|
|
84
|
-
StackId: event.StackId,
|
|
85
|
-
RequestId: event.RequestId,
|
|
86
|
-
PhysicalResourceId: event.PhysicalResourceId || MISSING_PHYSICAL_ID_MARKER,
|
|
87
|
-
LogicalResourceId: event.LogicalResourceId,
|
|
88
|
-
NoEcho: event.NoEcho,
|
|
89
|
-
Data: event.Data,
|
|
90
|
-
};
|
|
91
|
-
exports.external.log('submit response to cloudformation', json);
|
|
92
|
-
const responseBody = JSON.stringify(json);
|
|
93
|
-
const parsedUrl = url.parse(event.ResponseURL);
|
|
94
|
-
const req = {
|
|
95
|
-
hostname: parsedUrl.hostname,
|
|
96
|
-
path: parsedUrl.path,
|
|
97
|
-
method: 'PUT',
|
|
98
|
-
headers: { 'content-type': '', 'content-length': responseBody.length },
|
|
99
|
-
};
|
|
100
|
-
await exports.external.sendHttpRequest(req, responseBody);
|
|
101
|
-
}
|
|
102
|
-
async function defaultSendHttpRequest(options, responseBody) {
|
|
103
|
-
return new Promise((resolve, reject) => {
|
|
104
|
-
try {
|
|
105
|
-
const request = https.request(options, _ => resolve());
|
|
106
|
-
request.on('error', reject);
|
|
107
|
-
request.write(responseBody);
|
|
108
|
-
request.end();
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
reject(e);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
function defaultLog(fmt, ...params) {
|
|
116
|
-
// eslint-disable-next-line no-console
|
|
117
|
-
console.log(fmt, ...params);
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLWVudHJ5cG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJub2RlanMtZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsMkJBQTJCO0FBRTNCLGlCQUFpQjtBQUNKLFFBQUEsUUFBUSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsR0FBRyxFQUFFLFVBQVU7SUFDZixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFFLFNBQVM7Q0FDNUIsQ0FBQztBQUVGLE1BQU0sZ0NBQWdDLEdBQUcsd0RBQXdELENBQUM7QUFDbEcsTUFBTSwwQkFBMEIsR0FBRyw4REFBOEQsQ0FBQztBQVczRixLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQWtELEVBQUUsT0FBMEI7SUFDMUcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFbEQsdUVBQXVFO0lBQ3ZFLHVFQUF1RTtJQUN2RSxhQUFhO0lBQ2IsSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssZ0NBQWdDLEVBQUU7UUFDbkcsZ0JBQVEsQ0FBQyxHQUFHLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUN0RSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTztLQUNSO0lBRUQsSUFBSTtRQUNGLHlFQUF5RTtRQUN6RSxpRUFBaUU7UUFDakUsd0NBQXdDO1FBQ3hDLGlFQUFpRTtRQUNqRSxNQUFNLFdBQVcsR0FBWSxPQUFPLENBQUMsZ0JBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakQsdURBQXVEO1FB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QUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFO0tBQ3ZFLENBQUM7SUFFRixNQUFNLGdCQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsS0FBSyxVQUFVLHNCQUFzQixDQUFDLE9BQTZCLEVBQUUsWUFBb0I7SUFDdkYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxJQUFJO1lBQ0YsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ2Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNYO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBVyxFQUFFLEdBQUcsTUFBYTtJQUMvQyxzQ0FBc0M7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5cbi8vIGZvciB1bml0IHRlc3RzXG5leHBvcnQgY29uc3QgZXh0ZXJuYWwgPSB7XG4gIHNlbmRIdHRwUmVxdWVzdDogZGVmYXVsdFNlbmRIdHRwUmVxdWVzdCxcbiAgbG9nOiBkZWZhdWx0TG9nLFxuICBpbmNsdWRlU3RhY2tUcmFjZXM6IHRydWUsXG4gIHVzZXJIYW5kbGVySW5kZXg6ICcuL2luZGV4Jyxcbn07XG5cbmNvbnN0IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSID0gJ0FXU0NESzo6Q3VzdG9tUmVzb3VyY2VQcm92aWRlckZyYW1ld29yazo6Q1JFQVRFX0ZBSUxFRCc7XG5jb25zdCBNSVNTSU5HX1BIWVNJQ0FMX0lEX01BUktFUiA9ICdBV1NDREs6OkN1c3RvbVJlc291cmNlUHJvdmlkZXJGcmFtZXdvcms6Ok1JU1NJTkdfUEhZU0lDQUxfSUQnO1xuXG5leHBvcnQgdHlwZSBSZXNwb25zZSA9IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQgJiBIYW5kbGVyUmVzcG9uc2U7XG5leHBvcnQgdHlwZSBIYW5kbGVyID0gKGV2ZW50OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LCBjb250ZXh0OiBBV1NMYW1iZGEuQ29udGV4dCkgPT4gUHJvbWlzZTxIYW5kbGVyUmVzcG9uc2UgfCB2b2lkPjtcbmV4cG9ydCB0eXBlIEhhbmRsZXJSZXNwb25zZSA9IHVuZGVmaW5lZCB8IHtcbiAgRGF0YT86IGFueTtcbiAgUGh5c2ljYWxSZXNvdXJjZUlkPzogc3RyaW5nO1xuICBSZWFzb24/OiBzdHJpbmc7XG4gIE5vRWNobz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQVdTTGFtYmRhLkNsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCwgY29udGV4dDogQVdTTGFtYmRhLkNvbnRleHQpIHtcbiAgZXh0ZXJuYWwubG9nKEpTT04uc3RyaW5naWZ5KGV2ZW50LCB1bmRlZmluZWQsIDIpKTtcblxuICAvLyBpZ25vcmUgREVMRVRFIGV2ZW50IHdoZW4gdGhlIHBoeXNpY2FsIHJlc291cmNlIElEIGlzIHRoZSBtYXJrZXIgdGhhdFxuICAvLyBpbmRpY2F0ZXMgdGhhdCB0aGlzIERFTEVURSBpcyBhIHN1YnNlcXVlbnQgREVMRVRFIHRvIGEgZmFpbGVkIENSRUFURVxuICAvLyBvcGVyYXRpb24uXG4gIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScgJiYgZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID09PSBDUkVBVEVfRkFJTEVEX1BIWVNJQ0FMX0lEX01BUktFUikge1xuICAgIGV4dGVybmFsLmxvZygnaWdub3JpbmcgREVMRVRFIGV2ZW50IGNhdXNlZCBieSBhIGZhaWxlZCBDUkVBVEUgZXZlbnQnKTtcbiAgICBhd2FpdCBzdWJtaXRSZXNwb25zZSgnU1VDQ0VTUycsIGV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIC8vIGludm9rZSB0aGUgdXNlciBoYW5kbGVyLiB0aGlzIGlzIGludGVudGlvbmFsbHkgaW5zaWRlIHRoZSB0cnktY2F0Y2ggdG9cbiAgICAvLyBlbnN1cmUgdGhhdCBpZiB0aGVyZSBpcyBhbiBlcnJvciBpdCdzIHJlcG9ydGVkIGFzIGEgZmFpbHVyZSB0b1xuICAgIC8vIGNsb3VkZm9ybWF0aW9uIChvdGhlcndpc2UgY2ZuIHdhaXRzKS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgIGNvbnN0IHVzZXJIYW5kbGVyOiBIYW5kbGVyID0gcmVxdWlyZShleHRlcm5hbC51c2VySGFuZGxlckluZGV4KS5oYW5kbGVyO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVzZXJIYW5kbGVyKGV2ZW50LCBjb250ZXh0KTtcblxuICAgIC8vIHZhbGlkYXRlIHVzZXIgcmVzcG9uc2UgYW5kIGNyZWF0ZSB0aGUgY29tYmluZWQgZXZlbnRcbiAgICBjb25zdCByZXNwb25zZUV2ZW50ID0gcmVuZGVyUmVzcG9uc2UoZXZlbnQsIHJlc3VsdCk7XG5cbiAgICAvLyBzdWJtaXQgdG8gY2ZuIGFzIHN1Y2Nlc3NcbiAgICBhd2FpdCBzdWJtaXRSZXNwb25zZSgnU1VDQ0VTUycsIHJlc3BvbnNlRXZlbnQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgcmVzcDogUmVzcG9uc2UgPSB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIFJlYXNvbjogZXh0ZXJuYWwuaW5jbHVkZVN0YWNrVHJhY2VzID8gZS5zdGFjayA6IGUubWVzc2FnZSxcbiAgICB9O1xuXG4gICAgaWYgKCFyZXNwLlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgICAgLy8gc3BlY2lhbCBjYXNlOiBpZiBDUkVBVEUgZmFpbHMsIHdoaWNoIHVzdWFsbHkgaW1wbGllcywgd2UgdXN1YWxseSBkb24ndFxuICAgICAgLy8gaGF2ZSBhIHBoeXNpY2FsIHJlc291cmNlIGlkLiBpbiB0aGlzIGNhc2UsIHRoZSBzdWJzZXF1ZW50IERFTEVURVxuICAgICAgLy8gb3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgYW55IG1lYW5pbmcsIGFuZCB3aWxsIGxpa2VseSBmYWlsIGFzIHdlbGwuIHRvXG4gICAgICAvLyBhZGRyZXNzIHRoaXMsIHdlIHVzZSBhIG1hcmtlciBzbyB0aGUgcHJvdmlkZXIgZnJhbWV3b3JrIGNhbiBzaW1wbHlcbiAgICAgIC8vIGlnbm9yZSB0aGUgc3Vic2VxdWVudCBERUxFVEUuXG4gICAgICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgPT09ICdDcmVhdGUnKSB7XG4gICAgICAgIGV4dGVybmFsLmxvZygnQ1JFQVRFIGZhaWxlZCwgcmVzcG9uZGluZyB3aXRoIGEgbWFya2VyIHBoeXNpY2FsIHJlc291cmNlIGlkIHNvIHRoYXQgdGhlIHN1YnNlcXVlbnQgREVMRVRFIHdpbGwgYmUgaWdub3JlZCcpO1xuICAgICAgICByZXNwLlBoeXNpY2FsUmVzb3VyY2VJZCA9IENSRUFURV9GQUlMRURfUEhZU0lDQUxfSURfTUFSS0VSO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBpZiBQaHlzaWNhbFJlc291cmNlSWQgaXMgbm90IHNwZWNpZmllZCwgc29tZXRoaW5nIGlzXG4gICAgICAgIC8vIHRlcnJpYmx5IHdyb25nIGJlY2F1c2UgYWxsIG90aGVyIGV2ZW50cyBzaG91bGQgaGF2ZSBhbiBJRC5cbiAgICAgICAgZXh0ZXJuYWwubG9nKGBFUlJPUjogTWFsZm9ybWVkIGV2ZW50LiBcIlBoeXNpY2FsUmVzb3VyY2VJZFwiIGlzIHJlcXVpcmVkOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50KX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGFuIGFjdHVhbCBlcnJvciwgZmFpbCB0aGUgYWN0aXZpdHkgYWx0b2dldGhlciBhbmQgZXhpc3QuXG4gICAgYXdhaXQgc3VibWl0UmVzcG9uc2UoJ0ZBSUxFRCcsIHJlc3ApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJlc3BvbnNlKFxuICBjZm5SZXF1ZXN0OiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50ICYgeyBQaHlzaWNhbFJlc291cmNlSWQ/OiBzdHJpbmcgfSxcbiAgaGFuZGxlclJlc3BvbnNlOiB2b2lkIHwgSGFuZGxlclJlc3BvbnNlID0geyB9KTogUmVzcG9uc2Uge1xuXG4gIC8vIGlmIHBoeXNpY2FsIElEIGlzIG5vdCByZXR1cm5lZCwgd2UgaGF2ZSBzb21lIGRlZmF1bHRzIGZvciB5b3UgYmFzZWRcbiAgLy8gb24gdGhlIHJlcXVlc3QgdHlwZS5cbiAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gaGFuZGxlclJlc3BvbnNlLlBoeXNpY2FsUmVzb3VyY2VJZCA/PyBjZm5SZXF1ZXN0LlBoeXNpY2FsUmVzb3VyY2VJZCA/PyBjZm5SZXF1ZXN0LlJlcXVlc3RJZDtcblxuICAvLyBpZiB3ZSBhcmUgaW4gREVMRVRFIGFuZCBwaHlzaWNhbCBJRCB3YXMgY2hhbmdlZCwgaXQncyBhbiBlcnJvci5cbiAgaWYgKGNmblJlcXVlc3QuUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnICYmIHBoeXNpY2FsUmVzb3VyY2VJZCAhPT0gY2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERFTEVURTogY2Fubm90IGNoYW5nZSB0aGUgcGh5c2ljYWwgcmVzb3VyY2UgSUQgZnJvbSBcIiR7Y2ZuUmVxdWVzdC5QaHlzaWNhbFJlc291cmNlSWR9XCIgdG8gXCIke2hhbmRsZXJSZXNwb25zZS5QaHlzaWNhbFJlc291cmNlSWR9XCIgZHVyaW5nIGRlbGV0aW9uYCk7XG4gIH1cblxuICAvLyBtZXJnZSByZXF1ZXN0IGV2ZW50IGFuZCByZXN1bHQgZXZlbnQgKHJlc3VsdCBwcmV2YWlscykuXG4gIHJldHVybiB7XG4gICAgLi4uY2ZuUmVxdWVzdCxcbiAgICAuLi5oYW5kbGVyUmVzcG9uc2UsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBwaHlzaWNhbFJlc291cmNlSWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdFJlc3BvbnNlKHN0YXR1czogJ1NVQ0NFU1MnIHwgJ0ZBSUxFRCcsIGV2ZW50OiBSZXNwb25zZSkge1xuICBjb25zdCBqc29uOiBBV1NMYW1iZGEuQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlID0ge1xuICAgIFN0YXR1czogc3RhdHVzLFxuICAgIFJlYXNvbjogZXZlbnQuUmVhc29uID8/IHN0YXR1cyxcbiAgICBTdGFja0lkOiBldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkIHx8IE1JU1NJTkdfUEhZU0lDQUxfSURfTUFSS0VSLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBOb0VjaG86IGV2ZW50Lk5vRWNobyxcbiAgICBEYXRhOiBldmVudC5EYXRhLFxuICB9O1xuXG4gIGV4dGVybmFsLmxvZygnc3VibWl0IHJlc3BvbnNlIHRvIGNsb3VkZm9ybWF0aW9uJywganNvbik7XG5cbiAgY29uc3QgcmVzcG9uc2VCb2R5ID0gSlNPTi5zdHJpbmdpZnkoanNvbik7XG4gIGNvbnN0IHBhcnNlZFVybCA9IHVybC5wYXJzZShldmVudC5SZXNwb25zZVVSTCk7XG4gIGNvbnN0IHJlcSA9IHtcbiAgICBob3N0bmFtZTogcGFyc2VkVXJsLmhvc3RuYW1lLFxuICAgIHBhdGg6IHBhcnNlZFVybC5wYXRoLFxuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJycsICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlQm9keS5sZW5ndGggfSxcbiAgfTtcblxuICBhd2FpdCBleHRlcm5hbC5zZW5kSHR0cFJlcXVlc3QocmVxLCByZXNwb25zZUJvZHkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0U2VuZEh0dHBSZXF1ZXN0KG9wdGlvbnM6IGh0dHBzLlJlcXVlc3RPcHRpb25zLCByZXNwb25zZUJvZHk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gaHR0cHMucmVxdWVzdChvcHRpb25zLCBfID0+IHJlc29sdmUoKSk7XG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICByZXF1ZXN0LndyaXRlKHJlc3BvbnNlQm9keSk7XG4gICAgICByZXF1ZXN0LmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0TG9nKGZtdDogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUubG9nKGZtdCwgLi4ucGFyYW1zKTtcbn1cbiJdfQ==
|