@liflig/cdk 2.18.10 → 2.19.1
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.
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import * as iam from "aws-cdk-lib/aws-iam";
|
|
2
|
+
import * as constructs from "constructs";
|
|
3
|
+
export interface Props {
|
|
4
|
+
/**
|
|
5
|
+
* A list of trusted GitHub repository owners.
|
|
6
|
+
*
|
|
7
|
+
* This functions as a sort of whitelist to catch
|
|
8
|
+
* potential typos in {@link repositories}.
|
|
9
|
+
*/
|
|
10
|
+
trustedOwners: string[];
|
|
11
|
+
/**
|
|
12
|
+
* The name of the trusted branch.
|
|
13
|
+
*
|
|
14
|
+
* The wildcard characters '*' and '?' can be used to
|
|
15
|
+
* represent any combination of characters and any single
|
|
16
|
+
* character, respectively.
|
|
17
|
+
*
|
|
18
|
+
* @default "master"
|
|
19
|
+
*/
|
|
20
|
+
trustedBranch?: string;
|
|
21
|
+
/**
|
|
22
|
+
* The name of the role to create.
|
|
23
|
+
*
|
|
24
|
+
* @default "github-actions-role"
|
|
25
|
+
*/
|
|
26
|
+
roleName?: string;
|
|
27
|
+
/**
|
|
28
|
+
* The GitHub repositories that the principal trusts.
|
|
29
|
+
*/
|
|
30
|
+
repositories: {
|
|
31
|
+
/**
|
|
32
|
+
* The name of the GitHub repository.
|
|
33
|
+
*
|
|
34
|
+
* The wildcard characters '*' and '?' can be used to
|
|
35
|
+
* represent any combination of characters and any single
|
|
36
|
+
* character, respectively.
|
|
37
|
+
*
|
|
38
|
+
* NOTE: Be careful when using wildcard characters as you
|
|
39
|
+
* may grant access to repositories you did not intend.
|
|
40
|
+
*
|
|
41
|
+
* @example "my-repository"
|
|
42
|
+
* @example "my-team-*"
|
|
43
|
+
*/
|
|
44
|
+
name: string;
|
|
45
|
+
/**
|
|
46
|
+
* The name of the owner of the GitHub repository.
|
|
47
|
+
*
|
|
48
|
+
* NOTE: The owner must explicitly be whitelisted in {@link trustedOwners}.
|
|
49
|
+
*/
|
|
50
|
+
owner: string;
|
|
51
|
+
}[];
|
|
52
|
+
/**
|
|
53
|
+
* An existing OpenID Connect Provider for GitHub Actions.
|
|
54
|
+
*/
|
|
55
|
+
oidcProvider: iam.IOpenIdConnectProvider;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Utility function for validating the construct properties.
|
|
59
|
+
*/
|
|
60
|
+
export declare const validateProps: (props: Props) => boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Creates an IAM role that can be assumed by GitHub Actions workflows
|
|
63
|
+
* in specific GitHub repositories and branches using OpenID Connect.
|
|
64
|
+
*/
|
|
65
|
+
export declare class GithubActionsRole extends constructs.Construct {
|
|
66
|
+
readonly role: iam.Role;
|
|
67
|
+
constructor(scope: constructs.Construct, id: string, props: Props);
|
|
68
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GithubActionsRole = exports.validateProps = void 0;
|
|
4
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
5
|
+
const constructs = require("constructs");
|
|
6
|
+
/**
|
|
7
|
+
* Utility function for validating the construct properties.
|
|
8
|
+
*/
|
|
9
|
+
const validateProps = (props) => {
|
|
10
|
+
let valid = true;
|
|
11
|
+
if (props.trustedOwners.length === 0) {
|
|
12
|
+
console.error("At least 1 trusted owner must be supplied, but 0 were given");
|
|
13
|
+
valid = false;
|
|
14
|
+
}
|
|
15
|
+
if (props.repositories.length === 0) {
|
|
16
|
+
console.error("At least 1 repository must be supplied, but 0 were given");
|
|
17
|
+
valid = false;
|
|
18
|
+
}
|
|
19
|
+
props.trustedOwners.forEach((owner) => {
|
|
20
|
+
if (!owner.match(/^[a-zA-Z0-9-]+$/)) {
|
|
21
|
+
console.error(`Trusted owner ${owner} contains invalid characters`);
|
|
22
|
+
valid = false;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
props.repositories.forEach((repository) => {
|
|
26
|
+
if (!props.trustedOwners.includes(repository.owner)) {
|
|
27
|
+
console.error(`Owner ${repository.owner} of repository ${repository.name} not configured as a trusted owner`);
|
|
28
|
+
valid = false;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return valid;
|
|
32
|
+
};
|
|
33
|
+
exports.validateProps = validateProps;
|
|
34
|
+
/**
|
|
35
|
+
* Creates an IAM role that can be assumed by GitHub Actions workflows
|
|
36
|
+
* in specific GitHub repositories and branches using OpenID Connect.
|
|
37
|
+
*/
|
|
38
|
+
class GithubActionsRole extends constructs.Construct {
|
|
39
|
+
constructor(scope, id, props) {
|
|
40
|
+
var _a;
|
|
41
|
+
super(scope, id);
|
|
42
|
+
if (!(0, exports.validateProps)(props)) {
|
|
43
|
+
throw new Error("Invalid props were supplied");
|
|
44
|
+
}
|
|
45
|
+
const subjects = props.repositories.map((repository) => { var _a; return `repo:${repository.owner}/${repository.name}:ref:refs/heads/${(_a = props.trustedBranch) !== null && _a !== void 0 ? _a : "master"}`; });
|
|
46
|
+
const fullyQualifiedSubjects = subjects.filter((subject) => !(subject.includes("?") || subject.includes("*")));
|
|
47
|
+
const wildcardSubjects = subjects.filter((subject) => subject.includes("?") || subject.includes("*"));
|
|
48
|
+
const principalConditions = {
|
|
49
|
+
...(fullyQualifiedSubjects.length && {
|
|
50
|
+
StringEquals: {
|
|
51
|
+
"token.actions.githubusercontent.com:sub": fullyQualifiedSubjects,
|
|
52
|
+
},
|
|
53
|
+
}),
|
|
54
|
+
...(wildcardSubjects.length && {
|
|
55
|
+
StringLike: {
|
|
56
|
+
"token.actions.githubusercontent.com:sub": wildcardSubjects,
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
const principal = new iam.FederatedPrincipal(props.oidcProvider.openIdConnectProviderArn, principalConditions, "sts:AssumeRoleWithWebIdentity");
|
|
61
|
+
// Verify that the principal is configured with a trust relationship
|
|
62
|
+
// that contains at least one IAM condition with a context key and values
|
|
63
|
+
if (!Object.values(principalConditions).some((conditionElement) => Object.entries(conditionElement).some(([conditionKey, conditionValue]) => conditionKey && conditionValue.length))) {
|
|
64
|
+
throw new Error("The principal's trust policy needs to be configured with at least one IAM condition");
|
|
65
|
+
}
|
|
66
|
+
this.role = new iam.Role(this, "Role", {
|
|
67
|
+
roleName: (_a = props.roleName) !== null && _a !== void 0 ? _a : "github-actions-role",
|
|
68
|
+
assumedBy: principal,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.GithubActionsRole = GithubActionsRole;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWFjdGlvbnMtcm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZC1hcnRpZmFjdHMvZ2l0aHViLWFjdGlvbnMtcm9sZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBMEM7QUFDMUMseUNBQXdDO0FBeUR4Qzs7R0FFRztBQUNJLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7SUFDNUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFBO0lBQ2hCLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFBO1FBQzVFLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDZixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUE7UUFDekUsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNmLENBQUM7SUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixLQUFLLDhCQUE4QixDQUFDLENBQUE7WUFDbkUsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNmLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxL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bmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BzIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiB0cnVzdGVkIEdpdEh1YiByZXBvc2l0b3J5IG93bmVycy5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbnMgYXMgYSBzb3J0IG9mIHdoaXRlbGlzdCB0byBjYXRjaFxuICAgKiBwb3RlbnRpYWwgdHlwb3MgaW4ge0BsaW5rIHJlcG9zaXRvcmllc30uXG4gICAqL1xuICB0cnVzdGVkT3duZXJzOiBzdHJpbmdbXVxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRydXN0ZWQgYnJhbmNoLlxuICAgKlxuICAgKiBUaGUgd2lsZGNhcmQgY2hhcmFjdGVycyAnKicgYW5kICc/JyBjYW4gYmUgdXNlZCB0b1xuICAgKiByZXByZXNlbnQgYW55IGNvbWJpbmF0aW9uIG9mIGNoYXJhY3RlcnMgYW5kIGFueSBzaW5nbGVcbiAgICogY2hhcmFjdGVyLCByZXNwZWN0aXZlbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwibWFzdGVyXCJcbiAgICovXG4gIHRydXN0ZWRCcmFuY2g/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb2xlIHRvIGNyZWF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJnaXRodWItYWN0aW9ucy1yb2xlXCJcbiAgICovXG4gIHJvbGVOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIHJlcG9zaXRvcmllcyB0aGF0IHRoZSBwcmluY2lwYWwgdHJ1c3RzLlxuICAgKi9cbiAgcmVwb3NpdG9yaWVzOiB7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIEdpdEh1YiByZXBvc2l0b3J5LlxuICAgICAqXG4gICAgICogVGhlIHdpbGRjYXJkIGNoYXJhY3RlcnMgJyonIGFuZCAnPycgY2FuIGJlIHVzZWQgdG9cbiAgICAgKiByZXByZXNlbnQgYW55IGNvbWJpbmF0aW9uIG9mIGNoYXJhY3RlcnMgYW5kIGFueSBzaW5nbGVcbiAgICAgKiBjaGFyYWN0ZXIsIHJlc3BlY3RpdmVseS5cbiAgICAgKlxuICAgICAqIE5PVEU6IEJlIGNhcmVmdWwgd2hlbiB1c2luZyB3aWxkY2FyZCBjaGFyYWN0ZXJzIGFzIHlvdVxuICAgICAqIG1heSBncmFudCBhY2Nlc3MgdG8gcmVwb3NpdG9yaWVzIHlvdSBkaWQgbm90IGludGVuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFwibXktcmVwb3NpdG9yeVwiXG4gICAgICogQGV4YW1wbGUgXCJteS10ZWFtLSpcIlxuICAgICAqL1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBvd25lciBvZiB0aGUgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGUgb3duZXIgbXVzdCBleHBsaWNpdGx5IGJlIHdoaXRlbGlzdGVkIGluIHtAbGluayB0cnVzdGVkT3duZXJzfS5cbiAgICAgKi9cbiAgICBvd25lcjogc3RyaW5nXG4gIH1bXVxuICAvKipcbiAgICogQW4gZXhpc3RpbmcgT3BlbklEIENvbm5lY3QgUHJvdmlkZXIgZm9yIEdpdEh1YiBBY3Rpb25zLlxuICAgKi9cbiAgb2lkY1Byb3ZpZGVyOiBpYW0uSU9wZW5JZENvbm5lY3RQcm92aWRlclxufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgdGhlIGNvbnN0cnVjdCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgbGV0IHZhbGlkID0gdHJ1ZVxuICBpZiAocHJvcHMudHJ1c3RlZE93bmVycy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmVycm9yKFwiQXQgbGVhc3QgMSB0cnVzdGVkIG93bmVyIG11c3QgYmUgc3VwcGxpZWQsIGJ1dCAwIHdlcmUgZ2l2ZW5cIilcbiAgICB2YWxpZCA9IGZhbHNlXG4gIH1cbiAgaWYgKHByb3BzLnJlcG9zaXRvcmllcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmVycm9yKFwiQXQgbGVhc3QgMSByZXBvc2l0b3J5IG11c3QgYmUgc3VwcGxpZWQsIGJ1dCAwIHdlcmUgZ2l2ZW5cIilcbiAgICB2YWxpZCA9IGZhbHNlXG4gIH1cbiAgcHJvcHMudHJ1c3RlZE93bmVycy5mb3JFYWNoKChvd25lcikgPT4ge1xuICAgIGlmICghb3duZXIubWF0Y2goL15bYS16QS1aMC05LV0rJC8pKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBUcnVzdGVkIG93bmVyICR7b3duZXJ9IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2ApXG4gICAgICB2YWxpZCA9IGZhbHNlXG4gICAgfVxuICB9KVxuXG4gIHByb3BzLnJlcG9zaXRvcmllcy5mb3JFYWNoKChyZXBvc2l0b3J5KSA9PiB7XG4gICAgaWYgKCFwcm9wcy50cnVzdGVkT3duZXJzLmluY2x1ZGVzKHJlcG9zaXRvcnkub3duZXIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgT3duZXIgJHtyZXBvc2l0b3J5Lm93bmVyfSBvZiByZXBvc2l0b3J5ICR7cmVwb3NpdG9yeS5uYW1lfSBub3QgY29uZmlndXJlZCBhcyBhIHRydXN0ZWQgb3duZXJgLFxuICAgICAgKVxuICAgICAgdmFsaWQgPSBmYWxzZVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHZhbGlkXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBJQU0gcm9sZSB0aGF0IGNhbiBiZSBhc3N1bWVkIGJ5IEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93c1xuICogaW4gc3BlY2lmaWMgR2l0SHViIHJlcG9zaXRvcmllcyBhbmQgYnJhbmNoZXMgdXNpbmcgT3BlbklEIENvbm5lY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRodWJBY3Rpb25zUm9sZSBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5Sb2xlXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG4gICAgaWYgKCF2YWxpZGF0ZVByb3BzKHByb3BzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwcm9wcyB3ZXJlIHN1cHBsaWVkXCIpXG4gICAgfVxuXG4gICAgY29uc3Qgc3ViamVjdHMgPSBwcm9wcy5yZXBvc2l0b3JpZXMubWFwKFxuICAgICAgKHJlcG9zaXRvcnkpID0+XG4gICAgICAgIGByZXBvOiR7cmVwb3NpdG9yeS5vd25lcn0vJHtyZXBvc2l0b3J5Lm5hbWV9OnJlZjpyZWZzL2hlYWRzLyR7cHJvcHMudHJ1c3RlZEJyYW5jaCA/PyBcIm1hc3RlclwifWAsXG4gICAgKVxuICAgIGNvbnN0IGZ1bGx5UXVhbGlmaWVkU3ViamVjdHMgPSBzdWJqZWN0cy5maWx0ZXIoXG4gICAgICAoc3ViamVjdCkgPT4gIShzdWJqZWN0LmluY2x1ZGVzKFwiP1wiKSB8fCBzdWJqZWN0LmluY2x1ZGVzKFwiKlwiKSksXG4gICAgKVxuXG4gICAgY29uc3Qgd2lsZGNhcmRTdWJqZWN0cyA9IHN1YmplY3RzLmZpbHRlcihcbiAgICAgIChzdWJqZWN0KSA9PiBzdWJqZWN0LmluY2x1ZGVzKFwiP1wiKSB8fCBzdWJqZWN0LmluY2x1ZGVzKFwiKlwiKSxcbiAgICApXG4gICAgY29uc3QgcHJpbmNpcGFsQ29uZGl0aW9ucyA9IHtcbiAgICAgIC4uLihmdWxseVF1YWxpZmllZFN1YmplY3RzLmxlbmd0aCAmJiB7XG4gICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgIFwidG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb206c3ViXCI6IGZ1bGx5UXVhbGlmaWVkU3ViamVjdHMsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIC4uLih3aWxkY2FyZFN1YmplY3RzLmxlbmd0aCAmJiB7XG4gICAgICAgIFN0cmluZ0xpa2U6IHtcbiAgICAgICAgICBcInRva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tOnN1YlwiOiB3aWxkY2FyZFN1YmplY3RzLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfVxuXG4gICAgY29uc3QgcHJpbmNpcGFsID0gbmV3IGlhbS5GZWRlcmF0ZWRQcmluY2lwYWwoXG4gICAgICBwcm9wcy5vaWRjUHJvdmlkZXIub3BlbklkQ29ubmVjdFByb3ZpZGVyQXJuLFxuICAgICAgcHJpbmNpcGFsQ29uZGl0aW9ucyxcbiAgICAgIFwic3RzOkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHlcIixcbiAgICApXG5cbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgcHJpbmNpcGFsIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIHRydXN0IHJlbGF0aW9uc2hpcFxuICAgIC8vIHRoYXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIElBTSBjb25kaXRpb24gd2l0aCBhIGNvbnRleHQga2V5IGFuZCB2YWx1ZXNcbiAgICBpZiAoXG4gICAgICAhT2JqZWN0LnZhbHVlcyhwcmluY2lwYWxDb25kaXRpb25zKS5zb21lKChjb25kaXRpb25FbGVtZW50KSA9PlxuICAgICAgICBPYmplY3QuZW50cmllcyhjb25kaXRpb25FbGVtZW50KS5zb21lKFxuICAgICAgICAgIChbY29uZGl0aW9uS2V5LCBjb25kaXRpb25WYWx1ZV0pID0+XG4gICAgICAgICAgICBjb25kaXRpb25LZXkgJiYgY29uZGl0aW9uVmFsdWUubGVuZ3RoLFxuICAgICAgICApLFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSBwcmluY2lwYWwncyB0cnVzdCBwb2xpY3kgbmVlZHMgdG8gYmUgY29uZmlndXJlZCB3aXRoIGF0IGxlYXN0IG9uZSBJQU0gY29uZGl0aW9uXCIsXG4gICAgICApXG4gICAgfVxuICAgIHRoaXMucm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIlJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IHByb3BzLnJvbGVOYW1lID8/IFwiZ2l0aHViLWFjdGlvbnMtcm9sZVwiLFxuICAgICAgYXNzdW1lZEJ5OiBwcmluY2lwYWwsXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -1,57 +1,94 @@
|
|
|
1
1
|
import * as constructs from "constructs";
|
|
2
2
|
import * as ecr from "aws-cdk-lib/aws-ecr";
|
|
3
|
+
import * as iam from "aws-cdk-lib/aws-iam";
|
|
4
|
+
import { Props as GithubActionsRoleProps } from "./github-actions-role";
|
|
3
5
|
interface Props {
|
|
4
6
|
/**
|
|
5
|
-
* The name to use for the S3 Bucket.
|
|
6
|
-
* so that it will not conflict with other accounts/regions.
|
|
7
|
+
* The name to use for the S3 Bucket.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
+
* NOTE: Should include both account and region so that it will
|
|
10
|
+
* not conflict with other accounts/regions.
|
|
9
11
|
*/
|
|
10
|
-
bucketName
|
|
12
|
+
bucketName: string;
|
|
11
13
|
/**
|
|
12
14
|
* The name to use for the ECR Repository.
|
|
13
15
|
*/
|
|
14
16
|
ecrRepositoryName: string;
|
|
15
17
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* @default - Expire images after 180 days
|
|
19
|
-
*/
|
|
20
|
-
ecrRepositoryLifecycleRules?: ecr.LifecycleRule[];
|
|
21
|
-
/**
|
|
22
|
-
* Reference to the IAM Role that will be granted permission to
|
|
23
|
-
* assume the CI role. This role must have permission to assume
|
|
24
|
-
* the CI role.
|
|
18
|
+
* Create a role that can be assumed by Liflig Jenkins.
|
|
25
19
|
*
|
|
26
|
-
* @
|
|
20
|
+
* @deprecated
|
|
21
|
+
* @default - no role will be created
|
|
27
22
|
*/
|
|
28
|
-
|
|
23
|
+
ciRoleName?: string;
|
|
29
24
|
/**
|
|
30
|
-
* The
|
|
31
|
-
* from the CI system.
|
|
25
|
+
* The lifecycle rules to apply to images stored in the ECR repository.
|
|
32
26
|
*
|
|
33
|
-
* @default -
|
|
27
|
+
* @default - Expire images after 180 days
|
|
34
28
|
*/
|
|
35
|
-
|
|
29
|
+
ecrRepositoryLifecycleRules?: ecr.LifecycleRule[];
|
|
36
30
|
/**
|
|
37
|
-
*
|
|
31
|
+
* ID of AWS accounts that will be granted permission to read from
|
|
38
32
|
* the artifact repos.
|
|
39
33
|
*/
|
|
40
|
-
targetAccountIds
|
|
34
|
+
targetAccountIds?: string[];
|
|
41
35
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* reference existing artifacts and roles.
|
|
36
|
+
* Configuration for creating IAM roles that can be assumed
|
|
37
|
+
* by GitHub Actions in specific GitHub repositories.
|
|
45
38
|
*
|
|
46
|
-
* @default
|
|
39
|
+
* @default - no roles are created.
|
|
47
40
|
*/
|
|
48
|
-
|
|
41
|
+
githubActions?: Omit<GithubActionsRoleProps, "trustedOwners" | "trustedBranch" | "oidcProvider" | "roleName"> & {
|
|
42
|
+
/**
|
|
43
|
+
* A list of trusted GitHub repository owners.
|
|
44
|
+
*
|
|
45
|
+
* @default ["capralifecycle"]
|
|
46
|
+
*/
|
|
47
|
+
trustedOwners?: string[];
|
|
48
|
+
/**
|
|
49
|
+
* The name of the role to create.
|
|
50
|
+
*
|
|
51
|
+
* @default "github-actions-role"
|
|
52
|
+
*/
|
|
53
|
+
roleName?: string;
|
|
54
|
+
/**
|
|
55
|
+
* The name of the default branch in all repositories.
|
|
56
|
+
*
|
|
57
|
+
* @default "master"
|
|
58
|
+
*/
|
|
59
|
+
defaultBranch?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Configuration for a limited role that can be used on non-default
|
|
62
|
+
* branches with less IAM permissions than the main role.
|
|
63
|
+
*
|
|
64
|
+
* @default - a limited role is created.
|
|
65
|
+
*/
|
|
66
|
+
limitedRoleConfiguration?: {
|
|
67
|
+
/**
|
|
68
|
+
* Whether to create the role or not.
|
|
69
|
+
*
|
|
70
|
+
* @default true
|
|
71
|
+
*/
|
|
72
|
+
enabled?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The name of the role to create.
|
|
75
|
+
*
|
|
76
|
+
* @default "github-actions-limited-role"
|
|
77
|
+
*/
|
|
78
|
+
roleName?: string;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
49
81
|
}
|
|
50
82
|
/**
|
|
51
|
-
*
|
|
83
|
+
* Utility function for validating the construct properties.
|
|
84
|
+
*/
|
|
85
|
+
export declare const validateProps: (props: Props) => boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Create various artifacts used as part of Continuous Integration (CI).
|
|
52
88
|
*
|
|
53
|
-
* This
|
|
54
|
-
*
|
|
89
|
+
* This includes artifact repositories such as S3 bucket and ECR
|
|
90
|
+
* repository, as well as IAM role(s) that grant the CI server write
|
|
91
|
+
* access to these repositories.
|
|
55
92
|
*
|
|
56
93
|
* TODO: How can we cleanup stuff that goes into this S3 Bucket and
|
|
57
94
|
* ECR Repository? Can we ever reliably cleanup? We probably need
|
|
@@ -63,6 +100,8 @@ export declare class BuildArtifacts extends constructs.Construct {
|
|
|
63
100
|
readonly bucketName: string | undefined;
|
|
64
101
|
readonly ecrRepositoryArn: string;
|
|
65
102
|
readonly ecrRepositoryName: string;
|
|
103
|
+
readonly role?: iam.Role;
|
|
104
|
+
readonly limitedRole?: iam.Role;
|
|
66
105
|
constructor(scope: constructs.Construct, id: string, props: Props);
|
|
67
106
|
}
|
|
68
107
|
export {};
|
|
@@ -1,17 +1,59 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BuildArtifacts = void 0;
|
|
3
|
+
exports.BuildArtifacts = exports.validateProps = void 0;
|
|
4
4
|
const constructs = require("constructs");
|
|
5
5
|
const ecr = require("aws-cdk-lib/aws-ecr");
|
|
6
6
|
const iam = require("aws-cdk-lib/aws-iam");
|
|
7
7
|
const s3 = require("aws-cdk-lib/aws-s3");
|
|
8
8
|
const cdk = require("aws-cdk-lib");
|
|
9
|
-
const
|
|
9
|
+
const github_actions_role_1 = require("./github-actions-role");
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Utility functions for generating IAM statements.
|
|
12
|
+
*/
|
|
13
|
+
const policyStatements = {
|
|
14
|
+
allowPipelineVariables: (scope, prefix) => new iam.PolicyStatement({
|
|
15
|
+
effect: iam.Effect.ALLOW,
|
|
16
|
+
actions: ["ssm:PutParameter"],
|
|
17
|
+
resources: [
|
|
18
|
+
`arn:aws:ssm:${cdk.Stack.of(scope).region}:${cdk.Stack.of(scope).account}:parameter/liflig-cdk/*/pipeline-variables/${prefix !== null && prefix !== void 0 ? prefix : "*"}`,
|
|
19
|
+
],
|
|
20
|
+
}),
|
|
21
|
+
denyProdPipelines: (scope, bucket) => new iam.PolicyStatement({
|
|
22
|
+
effect: iam.Effect.DENY,
|
|
23
|
+
actions: ["s3:*"],
|
|
24
|
+
resources: [
|
|
25
|
+
bucket.arnForObjects("pipelines/*-prod/*"),
|
|
26
|
+
bucket.arnForObjects("pipelines/*-prod-*/*"),
|
|
27
|
+
],
|
|
28
|
+
}),
|
|
29
|
+
denyProdPipelineVariables: (scope) => new iam.PolicyStatement({
|
|
30
|
+
effect: iam.Effect.DENY,
|
|
31
|
+
actions: ["ssm:PutParameter"],
|
|
32
|
+
resources: [
|
|
33
|
+
`arn:aws:ssm:${cdk.Stack.of(scope).region}:${cdk.Stack.of(scope).account}:parameter/liflig-cdk/*/pipeline-variables/prod*`,
|
|
34
|
+
],
|
|
35
|
+
}),
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Utility function for validating the construct properties.
|
|
39
|
+
*/
|
|
40
|
+
const validateProps = (props) => {
|
|
41
|
+
var _a;
|
|
42
|
+
let valid = true;
|
|
43
|
+
if (((_a = props.githubActions) === null || _a === void 0 ? void 0 : _a.defaultBranch) &&
|
|
44
|
+
!props.githubActions.defaultBranch.match(/^[a-zA-Z0-9-]+$/)) {
|
|
45
|
+
console.error(`Default branch ${props.githubActions.defaultBranch} contains invalid characters`);
|
|
46
|
+
valid = false;
|
|
47
|
+
}
|
|
48
|
+
return valid;
|
|
49
|
+
};
|
|
50
|
+
exports.validateProps = validateProps;
|
|
51
|
+
/**
|
|
52
|
+
* Create various artifacts used as part of Continuous Integration (CI).
|
|
12
53
|
*
|
|
13
|
-
* This
|
|
14
|
-
*
|
|
54
|
+
* This includes artifact repositories such as S3 bucket and ECR
|
|
55
|
+
* repository, as well as IAM role(s) that grant the CI server write
|
|
56
|
+
* access to these repositories.
|
|
15
57
|
*
|
|
16
58
|
* TODO: How can we cleanup stuff that goes into this S3 Bucket and
|
|
17
59
|
* ECR Repository? Can we ever reliably cleanup? We probably need
|
|
@@ -21,8 +63,11 @@ const griid_1 = require("../griid");
|
|
|
21
63
|
*/
|
|
22
64
|
class BuildArtifacts extends constructs.Construct {
|
|
23
65
|
constructor(scope, id, props) {
|
|
24
|
-
var _a;
|
|
66
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
25
67
|
super(scope, id);
|
|
68
|
+
if (!(0, exports.validateProps)(props)) {
|
|
69
|
+
throw new Error("Invalid props were supplied");
|
|
70
|
+
}
|
|
26
71
|
this.bucketName = props.bucketName;
|
|
27
72
|
this.ecrRepositoryName = props.ecrRepositoryName;
|
|
28
73
|
this.ecrRepositoryArn = cdk.Arn.format({
|
|
@@ -30,38 +75,19 @@ class BuildArtifacts extends constructs.Construct {
|
|
|
30
75
|
resource: "repository",
|
|
31
76
|
resourceName: this.ecrRepositoryName,
|
|
32
77
|
}, cdk.Stack.of(this));
|
|
33
|
-
const externalRoleArn = (_a = props.externalRoleArn) !== null && _a !== void 0 ? _a : "arn:aws:iam::923402097046:role/buildtools-jenkins-RoleJenkinsSlave-JQGYHR5WE6C5";
|
|
34
78
|
const ecrRepositoryName = props.ecrRepositoryName;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
],
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
const ciRole = props.ciRoleName
|
|
51
|
-
? new iam.Role(this, "CiRole", {
|
|
52
|
-
roleName: props.ciRoleName,
|
|
53
|
-
assumedBy: new iam.ArnPrincipal(externalRoleArn),
|
|
54
|
-
})
|
|
55
|
-
: undefined;
|
|
56
|
-
const griidCiRole = props.griid
|
|
57
|
-
? (0, griid_1.getGriidCiRole)(this)
|
|
58
|
-
: undefined;
|
|
59
|
-
if (bucket && ciRole) {
|
|
60
|
-
bucket.grantReadWrite(ciRole);
|
|
61
|
-
}
|
|
62
|
-
if (bucket && griidCiRole) {
|
|
63
|
-
bucket.grantReadWrite(griidCiRole);
|
|
64
|
-
}
|
|
79
|
+
const bucket = new s3.Bucket(this, "S3Bucket", {
|
|
80
|
+
bucketName: props.bucketName,
|
|
81
|
+
encryption: s3.BucketEncryption.S3_MANAGED,
|
|
82
|
+
eventBridgeEnabled: true,
|
|
83
|
+
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
|
|
84
|
+
versioned: true,
|
|
85
|
+
lifecycleRules: [
|
|
86
|
+
{
|
|
87
|
+
noncurrentVersionExpiration: cdk.Duration.days(10),
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
});
|
|
65
91
|
const ecrRepo = new ecr.Repository(this, "EcrRepository", {
|
|
66
92
|
repositoryName: ecrRepositoryName,
|
|
67
93
|
lifecycleRules: props.ecrRepositoryLifecycleRules || [
|
|
@@ -71,48 +97,89 @@ class BuildArtifacts extends constructs.Construct {
|
|
|
71
97
|
},
|
|
72
98
|
],
|
|
73
99
|
});
|
|
74
|
-
if (ciRole) {
|
|
75
|
-
ecrRepo.grantPullPush(ciRole);
|
|
76
|
-
}
|
|
77
|
-
if (griidCiRole) {
|
|
78
|
-
ecrRepo.grantPullPush(griidCiRole);
|
|
79
|
-
}
|
|
80
100
|
// Allow a target to read from the repos. As any specific roles need
|
|
81
101
|
// to exist before we can grant access, we delegate that responsibility
|
|
82
102
|
// to the target account.
|
|
83
|
-
for (const targetAccountId of props.targetAccountIds) {
|
|
84
|
-
|
|
85
|
-
bucket.grantRead(new iam.AccountPrincipal(targetAccountId));
|
|
86
|
-
}
|
|
103
|
+
for (const targetAccountId of props.targetAccountIds || []) {
|
|
104
|
+
bucket.grantRead(new iam.AccountPrincipal(targetAccountId));
|
|
87
105
|
ecrRepo.grantPull(new iam.AccountPrincipal(targetAccountId));
|
|
88
106
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
if (props.githubActions) {
|
|
108
|
+
const trustedOwners = (_a = props.githubActions.trustedOwners) !== null && _a !== void 0 ? _a : [
|
|
109
|
+
"capralifecycle",
|
|
110
|
+
];
|
|
111
|
+
// NOTE: There's an L2 construct that predates the official CloudFormation resource,
|
|
112
|
+
// and it is therefore implemented as a custom resource.
|
|
113
|
+
// We use the L1 CloudFormation resource instead because:
|
|
114
|
+
// 1) it's simpler
|
|
115
|
+
// 2) there's a chance the L2 construct will be deprecated in the future in favor
|
|
116
|
+
// of the official CloudFormation resource.
|
|
117
|
+
const cfnOidcProvider = new iam.CfnOIDCProvider(this, "OpenIdConnectProvider", {
|
|
118
|
+
url: "https://token.actions.githubusercontent.com",
|
|
119
|
+
clientIdList: ["sts.amazonaws.com"],
|
|
120
|
+
// NOTE: The thumbprint isn't actually used, but the AWS API still requires us to supply it.
|
|
121
|
+
// More details here: https://web.archive.org/web/20240122155758/https://github.com/aws-actions/configure-aws-credentials/issues/357#issuecomment-1626357333
|
|
122
|
+
thumbprintList: ["1c58a3a8518e8759bf075b76b750d4f2df264fcd"],
|
|
98
123
|
});
|
|
99
|
-
|
|
100
|
-
|
|
124
|
+
const oidcProvider = iam.OpenIdConnectProvider.fromOpenIdConnectProviderArn(this, "Provider", cfnOidcProvider.ref);
|
|
125
|
+
const createLimitedRole = (_c = (_b = props.githubActions.limitedRoleConfiguration) === null || _b === void 0 ? void 0 : _b.enabled) !== null && _c !== void 0 ? _c : true;
|
|
126
|
+
const role = new github_actions_role_1.GithubActionsRole(this, "GithubActionsRole", {
|
|
127
|
+
oidcProvider,
|
|
128
|
+
trustedOwners,
|
|
129
|
+
roleName: (_d = props.githubActions.roleName) !== null && _d !== void 0 ? _d : "github-actions-role",
|
|
130
|
+
trustedBranch: createLimitedRole
|
|
131
|
+
? (_e = props.githubActions.defaultBranch) !== null && _e !== void 0 ? _e : "master"
|
|
132
|
+
: // NOTE: If the limited role is disabled, only one role will be created
|
|
133
|
+
// and that role then needs to be assumable from all branches.
|
|
134
|
+
"*",
|
|
135
|
+
repositories: props.githubActions.repositories,
|
|
136
|
+
});
|
|
137
|
+
this.role = role.role;
|
|
138
|
+
this.role.addToPolicy(policyStatements.allowPipelineVariables(this));
|
|
139
|
+
bucket.grantPut(this.role);
|
|
140
|
+
ecrRepo.grantPullPush(this.role);
|
|
141
|
+
if (createLimitedRole) {
|
|
142
|
+
const limitedRole = new github_actions_role_1.GithubActionsRole(this, "GithubActionsLimitedRole", {
|
|
143
|
+
oidcProvider,
|
|
144
|
+
trustedOwners,
|
|
145
|
+
roleName: (_g = (_f = props.githubActions.limitedRoleConfiguration) === null || _f === void 0 ? void 0 : _f.roleName) !== null && _g !== void 0 ? _g : "github-actions-limited-role",
|
|
146
|
+
// NOTE: The limited role can be assumed from all branches.
|
|
147
|
+
trustedBranch: "*",
|
|
148
|
+
repositories: props.githubActions.repositories,
|
|
149
|
+
});
|
|
150
|
+
this.limitedRole = limitedRole.role;
|
|
151
|
+
this.limitedRole.addToPolicy(policyStatements.allowPipelineVariables(this, "dev*"));
|
|
152
|
+
this.limitedRole.addToPolicy(policyStatements.denyProdPipelines(scope, bucket));
|
|
153
|
+
bucket.grantPut(this.limitedRole);
|
|
154
|
+
ecrRepo.grantPullPush(this.limitedRole);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (props.ciRoleName) {
|
|
158
|
+
const legacyRoleForJenkins = new iam.Role(this, "CiRole", {
|
|
159
|
+
roleName: props.ciRoleName,
|
|
160
|
+
assumedBy: new iam.ArnPrincipal("arn:aws:iam::923402097046:role/buildtools-jenkins-RoleJenkinsSlave-JQGYHR5WE6C5"),
|
|
161
|
+
});
|
|
162
|
+
legacyRoleForJenkins.addToPolicy(policyStatements.allowPipelineVariables(this));
|
|
163
|
+
bucket.grantPut(legacyRoleForJenkins);
|
|
164
|
+
ecrRepo.grantPullPush(legacyRoleForJenkins);
|
|
101
165
|
}
|
|
102
166
|
new cdk.CfnOutput(this, "EcrRepoUri", {
|
|
103
167
|
value: ecrRepo.repositoryUri,
|
|
104
168
|
});
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
169
|
+
new cdk.CfnOutput(this, "BucketName", {
|
|
170
|
+
value: bucket.bucketName,
|
|
171
|
+
});
|
|
172
|
+
if (this.role) {
|
|
173
|
+
new cdk.CfnOutput(this, "RoleArn", {
|
|
174
|
+
value: this.role.roleArn,
|
|
108
175
|
});
|
|
109
176
|
}
|
|
110
|
-
if (
|
|
111
|
-
new cdk.CfnOutput(this, "
|
|
112
|
-
value:
|
|
177
|
+
if (this.limitedRole) {
|
|
178
|
+
new cdk.CfnOutput(this, "LimitedRoleArn", {
|
|
179
|
+
value: this.limitedRole.roleArn,
|
|
113
180
|
});
|
|
114
181
|
}
|
|
115
182
|
}
|
|
116
183
|
}
|
|
117
184
|
exports.BuildArtifacts = BuildArtifacts;
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGQtYXJ0aWZhY3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF3QztBQUN4QywyQ0FBMEM7QUFDMUMsMkNBQTBDO0FBQzFDLHlDQUF3QztBQUN4QyxtQ0FBa0M7QUFDbEMsb0NBQXlDO0FBa0R6Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEsY0FBZSxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBS3RELFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBWTs7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQTtRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQ3BDO1lBQ0UsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRLEVBQUUsWUFBWTtZQUN0QixZQUFZLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUNyQyxFQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUNuQixDQUFBO1FBRUQsTUFBTSxlQUFlLEdBQ25CLE1BQUEsS0FBSyxDQUFDLGVBQWUsbUNBQ3JCLGlGQUFpRixDQUFBO1FBRW5GLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFBO1FBRWpELElBQUksTUFBTSxHQUEwQixTQUFTLENBQUE7UUFFN0MsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN2QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7Z0JBQzVCLFVB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TixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxjQUFjLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDdEQsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFFLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM3RCxDQUFDO1FBRUQsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDcEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxhQUFhO1NBQzdCLENBQUMsQ0FBQTtRQUVGLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFDcEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVO2FBQ3pCLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ25DLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTzthQUN0QixDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBeEhELHdDQXdIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgZWNyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHsgZ2V0R3JpaWRDaVJvbGUgfSBmcm9tIFwiLi4vZ3JpaWRcIlxuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgUzMgQnVja2V0LiBTaG91bGQgaW5jbHVkZSBib3RoIGFjY291bnQgYW5kIHJlZ2lvblxuICAgKiBzbyB0aGF0IGl0IHdpbGwgbm90IGNvbmZsaWN0IHdpdGggb3RoZXIgYWNjb3VudHMvcmVnaW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBidWNrZXQgd2lsbCBiZSBjcmVhdGVkXG4gICAqL1xuICBidWNrZXROYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBFQ1IgUmVwb3NpdG9yeS5cbiAgICovXG4gIGVjclJlcG9zaXRvcnlOYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gYXBwbHkgdG8gaW1hZ2VzIHN0b3JlZCBpbiB0aGUgRUNSIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXhwaXJlIGltYWdlcyBhZnRlciAxODAgZGF5c1xuICAgKi9cbiAgZWNyUmVwb3NpdG9yeUxpZmVjeWNsZVJ1bGVzPzogZWNyLkxpZmVjeWNsZVJ1bGVbXVxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBJQU0gUm9sZSB0aGF0IHdpbGwgYmUgZ3JhbnRlZCBwZXJtaXNzaW9uIHRvXG4gICAqIGFzc3VtZSB0aGUgQ0kgcm9sZS4gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFzc3VtZVxuICAgKiB0aGUgQ0kgcm9sZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgTGlmbGlnIEplbmtpbnMgcm9sZVxuICAgKi9cbiAgZXh0ZXJuYWxSb2xlQXJuPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcm9sZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCB0aGF0IHdpbGwgYmUgYXNzdW1lZFxuICAgKiBmcm9tIHRoZSBDSSBzeXN0ZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcm9sZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIGNpUm9sZU5hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBBV1MgQWNjb3VudHMgdGhhdCB3aWxsIGJlIGdyYW50ZWQgcGVybWlzc2lvbiB0byByZWFkIGZyb21cbiAgICogdGhlIGFydGlmYWN0IHJlcG9zLlxuICAgKi9cbiAgdGFyZ2V0QWNjb3VudElkczogc3RyaW5nW11cbiAgLyoqXG4gICAqIEZsYWcgaWYgR3JpaWQgaXMgYm9vdHN0cmFwcGVkIGFuZCB0aGUgYWNjb3VudCB0aGlzIGNvbnN0cnVjdCBpc1xuICAgKiBkZXBsb3llZCB0byBpcyB0aGUgYnVpbGQgYWNjb3VudC4gV2lsbCBhdHRhY2ggcG9saWNpZXMgYW5kXG4gICAqIHJlZmVyZW5jZSBleGlzdGluZyBhcnRpZmFjdHMgYW5kIHJvbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZ3JpaWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogQnVpbGQgYXJ0aWZhY3RzLlxuICpcbiAqIFRoaXMgaG9sZHMgYSBTMyBCdWNrZXQsIGEgRUNSIFJlcG9zaXRvcnkgYW5kIHJvbGVzIHRvIGJlIHVzZWRcbiAqIGZyb20gQ0kgc3lzdGVtIGZvciB1cGxvYWRpbmcuXG4gKlxuICogVE9ETzogSG93IGNhbiB3ZSBjbGVhbnVwIHN0dWZmIHRoYXQgZ29lcyBpbnRvIHRoaXMgUzMgQnVja2V0IGFuZFxuICogIEVDUiBSZXBvc2l0b3J5PyBDYW4gd2UgZXZlciByZWxpYWJseSBjbGVhbnVwPyBXZSBwcm9iYWJseSBuZWVkXG4gKiAgc29tZSBzdHJhdGVneSBmb3IgaG93IHdlIHB1dCBzdHVmZiBoZXJlIHRvIGJlIGFibGUgdG8gZG8gaXQuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgQnVpbGRBcnRpZmFjdHMgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGJ1Y2tldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICByZWFkb25seSBlY3JSZXBvc2l0b3J5QXJuOiBzdHJpbmdcbiAgcmVhZG9ubHkgZWNyUmVwb3NpdG9yeU5hbWU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5idWNrZXROYW1lID0gcHJvcHMuYnVja2V0TmFtZVxuICAgIHRoaXMuZWNyUmVwb3NpdG9yeU5hbWUgPSBwcm9wcy5lY3JSZXBvc2l0b3J5TmFtZVxuICAgIHRoaXMuZWNyUmVwb3NpdG9yeUFybiA9IGNkay5Bcm4uZm9ybWF0KFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlOiBcImVjclwiLFxuICAgICAgICByZXNvdXJjZTogXCJyZXBvc2l0b3J5XCIsXG4gICAgICAgIHJlc291cmNlTmFtZTogdGhpcy5lY3JSZXBvc2l0b3J5TmFtZSxcbiAgICAgIH0sXG4gICAgICBjZGsuU3RhY2sub2YodGhpcyksXG4gICAgKVxuXG4gICAgY29uc3QgZXh0ZXJuYWxSb2xlQXJuID1cbiAgICAgIHByb3BzLmV4dGVybmFsUm9sZUFybiA/P1xuICAgICAgXCJhcm46YXdzOmlhbTo6OTIzNDAyMDk3MDQ2OnJvbGUvYnVpbGR0b29scy1qZW5raW5zLVJvbGVKZW5raW5zU2xhdmUtSlFHWUhSNVdFNkM1XCJcblxuICAgIGNvbnN0IGVjclJlcG9zaXRvcnlOYW1lID0gcHJvcHMuZWNyUmVwb3NpdG9yeU5hbWVcblxuICAgIGxldCBidWNrZXQ6IHMzLkJ1Y2tldCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgaWYgKHByb3BzLmJ1Y2tldE5hbWUpIHtcbiAgICAgIGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgXCJTM0J1Y2tldFwiLCB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldE5hbWUsXG4gICAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgICAgZXZlbnRCcmlkZ2VFbmFibGVkOiB0cnVlLFxuICAgICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uOiBjZGsuRHVyYXRpb24uZGF5cygxMCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgY2lSb2xlOiBpYW0uUm9sZSB8IHVuZGVmaW5lZCA9IHByb3BzLmNpUm9sZU5hbWVcbiAgICAgID8gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiQ2lSb2xlXCIsIHtcbiAgICAgICAgICByb2xlTmFtZTogcHJvcHMuY2lSb2xlTmFtZSxcbiAgICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uQXJuUHJpbmNpcGFsKGV4dGVybmFsUm9sZUFybiksXG4gICAgICAgIH0pXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgY29uc3QgZ3JpaWRDaVJvbGU6IGlhbS5JUm9sZSB8IHVuZGVmaW5lZCA9IHByb3BzLmdyaWlkXG4gICAgICA/IGdldEdyaWlkQ2lSb2xlKHRoaXMpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKGJ1Y2tldCAmJiBjaVJvbGUpIHtcbiAgICAgIGJ1Y2tldC5ncmFudFJlYWRXcml0ZShjaVJvbGUpXG4gICAgfVxuXG4gICAgaWYgKGJ1Y2tldCAmJiBncmlpZENpUm9sZSkge1xuICAgICAgYnVja2V0LmdyYW50UmVhZFdyaXRlKGdyaWlkQ2lSb2xlKVxuICAgIH1cblxuICAgIGNvbnN0IGVjclJlcG8gPSBuZXcgZWNyLlJlcG9zaXRvcnkodGhpcywgXCJFY3JSZXBvc2l0b3J5XCIsIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiBlY3JSZXBvc2l0b3J5TmFtZSxcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBwcm9wcy5lY3JSZXBvc2l0b3J5TGlmZWN5Y2xlUnVsZXMgfHwgW1xuICAgICAgICB7XG4gICAgICAgICAgbWF4SW1hZ2VBZ2U6IGNkay5EdXJhdGlvbi5kYXlzKDE4MCksXG4gICAgICAgICAgdGFnU3RhdHVzOiBlY3IuVGFnU3RhdHVzLkFOWSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIGlmIChjaVJvbGUpIHtcbiAgICAgIGVjclJlcG8uZ3JhbnRQdWxsUHVzaChjaVJvbGUpXG4gICAgfVxuXG4gICAgaWYgKGdyaWlkQ2lSb2xlKSB7XG4gICAgICBlY3JSZXBvLmdyYW50UHVsbFB1c2goZ3JpaWRDaVJvbGUpXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgYSB0YXJnZXQgdG8gcmVhZCBmcm9tIHRoZSByZXBvcy4gQXMgYW55IHNwZWNpZmljIHJvbGVzIG5lZWRcbiAgICAvLyB0byBleGlzdCBiZWZvcmUgd2UgY2FuIGdyYW50IGFjY2Vzcywgd2UgZGVsZWdhdGUgdGhhdCByZXNwb25zaWJpbGl0eVxuICAgIC8vIHRvIHRoZSB0YXJnZXQgYWNjb3VudC5cbiAgICBmb3IgKGNvbnN0IHRhcmdldEFjY291bnRJZCBvZiBwcm9wcy50YXJnZXRBY2NvdW50SWRzKSB7XG4gICAgICBpZiAoYnVja2V0KSB7XG4gICAgICAgIGJ1Y2tldC5ncmFudFJlYWQobmV3IGlhbS5BY2NvdW50UHJpbmNpcGFsKHRhcmdldEFjY291bnRJZCkpXG4gICAgICB9XG4gICAgICBlY3JSZXBvLmdyYW50UHVsbChuZXcgaWFtLkFjY291bnRQcmluY2lwYWwodGFyZ2V0QWNjb3VudElkKSlcbiAgICB9XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byB3cml0ZSBwaXBlbGluZSB2YXJpYWJsZXMuXG4gICAgaWYgKGNpUm9sZSB8fCBncmlpZENpUm9sZSkge1xuICAgICAgY29uc3QgYWNjb3VudCA9IGNkay5TdGFjay5vZih0aGlzKS5hY2NvdW50XG4gICAgICBjb25zdCByZWdpb24gPSBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uXG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpQdXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOnNzbToke3JlZ2lvbn06JHthY2NvdW50fTpwYXJhbWV0ZXIvbGlmbGlnLWNkay8qL3BpcGVsaW5lLXZhcmlhYmxlcy8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pXG5cbiAgICAgIGNpUm9sZT8uZ3JhbnRQcmluY2lwYWwuYWRkVG9QcmluY2lwYWxQb2xpY3koc3RhdGVtZW50KVxuICAgICAgZ3JpaWRDaVJvbGU/LmdyYW50UHJpbmNpcGFsLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudClcbiAgICB9XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkVjclJlcG9VcmlcIiwge1xuICAgICAgdmFsdWU6IGVjclJlcG8ucmVwb3NpdG9yeVVyaSxcbiAgICB9KVxuXG4gICAgaWYgKGJ1Y2tldCkge1xuICAgICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJCdWNrZXROYW1lXCIsIHtcbiAgICAgICAgdmFsdWU6IGJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoY2lSb2xlKSB7XG4gICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkNpUm9sZUFyblwiLCB7XG4gICAgICAgIHZhbHVlOiBjaVJvbGUucm9sZUFybixcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGQtYXJ0aWZhY3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUF3QztBQUN4QywyQ0FBMEM7QUFDMUMsMkNBQTBDO0FBQzFDLHlDQUF3QztBQUN4QyxtQ0FBa0M7QUFDbEMsK0RBRzhCO0FBbUY5Qjs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsc0JBQXNCLEVBQUUsQ0FBQyxLQUEyQixFQUFFLE1BQWUsRUFBRSxFQUFFLENBQ3ZFLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQ3hCLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO1FBQzdCLFNBQVMsRUFBRTtZQUNULGVBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sOENBQThDLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLEdBQUcsRUFBRTtTQUN0STtLQUNGLENBQUM7SUFDSixpQkFBaUIsRUFBRSxDQUFDLEtBQTJCLEVBQUUsTUFBa0IsRUFBRSxFQUFFLENBQ3JFLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixTQUFTLEVBQUU7WUFDVCxNQUFNLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDO1lBQzFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUM7U0FDN0M7S0FDRixDQUFDO0lBQ0oseUJBQXlCLEVBQUUsQ0FBQyxLQUEyQixFQUFFLEVBQUUsQ0FDekQsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDdkIsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7UUFDN0IsU0FBUyxFQUFFO1lBQ1QsZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQ3ZDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQ3RCLGtEQUFrRDtTQUNuRDtLQUNGLENBQUM7Q0FDTCxDQUFBO0FBRUQ7O0dBRUc7QUFDSSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFOztJQUM1QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUE7SUFDaEIsSUFDRSxDQUFBLE1BQUEsS0FBSyxDQUFDLGFBQWEsMENBQUUsYUFBYTtRQUNsQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUMzRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FDWCxrQkFBa0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLDhCQUE4QixDQUNsRixDQUFBO1FBQ0QsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNmLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUMsQ0FBQTtBQVpZLFFBQUEsYUFBYSxpQkFZekI7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxVQUFVLENBQUMsU0FBUztJQU90RCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQVk7O1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLElBQUEscUJBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUNoRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUE7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUNwQztZQUNFLE9BQU8sRUFBRSxLQUFLO1lBQ2QsUUFBUSxFQUFFLFlBQVk7WUFDdEIsWUFBWSxFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDckMsRUFDRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDbkIsQ0FBQTtRQUVELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFBO1FBRWpELE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQzdDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixVQUFVLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFVBQVU7WUFDMUMsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUztZQUNqRCxTQUFTLEVBQUUsSUFBSTtZQUNmLGNBQWMsRUFBRTtnQkFDZDtvQkFDRSwyQkFBMkIsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQ25EO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUN4RCxjQUFjLEVBQUUsaUJBQWlCO1lBQ2pDLGNBQWMsRUFBRSxLQUFLLENBQUMsMkJBQTJCLElBQUk7Z0JBQ25EO29CQUNFLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ25DLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUc7aUJBQzdCO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFFRixvRUFBb0U7UUFDcEUsdUVBQXVFO1FBQ3ZFLHlCQUF5QjtRQUN6QixLQUFLLE1BQU0sZUFBZSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMzRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUE7WUFDM0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFBO1FBQzlELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixNQUFNLGFBQWEsR0FBRyxNQUFBLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxtQ0FBSTtnQkFDekQsZ0JBQWdCO2FBQ2pCLENBQUE7WUFDRCxvRkFBb0Y7WUFDcEYsd0RBQXdEO1lBQ3hELHlEQUF5RDtZQUN6RCxrQkFBa0I7WUFDbEIsaUZBQWlGO1lBQ2pGLDJDQUEyQztZQUMzQyxNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQzdDLElBQUksRUFDSix1QkFBdUIsRUFDdkI7Z0JBQ0UsR0FBRyxFQUFFLDZDQUE2QztnQkFDbEQsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7Z0JBQ25DLDRGQUE0RjtnQkFDNUYsNEpBQTRKO2dCQUM1SixjQUFjLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQzthQUM3RCxDQUNGLENBQUE7WUFDRCxNQUFNLFlBQVksR0FDaEIsR0FBRyxDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixDQUNwRCxJQUFJLEVBQ0osVUFBVSxFQUNWLGVBQWUsQ0FBQyxHQUFHLENBQ3BCLENBQUE7WUFDSCxNQUFNLGlCQUFpQixHQUNyQixNQUFBLE1BQUEsS0FBSyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsMENBQUUsT0FBTyxtQ0FBSSxJQUFJLENBQUE7WUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSx1Q0FBaUIsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7Z0JBQzVELFlBQVk7Z0JBQ1osYUFBYTtnQkFDYixRQUFRLEVBQUUsTUFBQSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsbUNBQUkscUJBQXFCO2dCQUMvRCxhQUFhLEVBQUUsaUJBQWlCO29CQUM5QixDQUFDLENBQUMsTUFBQSxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWEsbUNBQUksUUFBUTtvQkFDL0MsQ0FBQyxDQUFDLHVFQUF1RTt3QkFDdkUsOERBQThEO3dCQUM5RCxHQUFHO2dCQUNQLFlBQVksRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVk7YUFDL0MsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDcEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDaEMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLHVDQUFpQixDQUN2QyxJQUFJLEVBQ0osMEJBQTBCLEVBQzFCO29CQUNFLFlBQVk7b0JBQ1osYUFBYTtvQkFDYixRQUFRLEVBQ04sTUFBQSxNQUFBLEtBQUssQ0FBQyxhQUFhLENBQUMsd0JBQXdCLDBDQUFFLFFBQVEsbUNBQ3RELDZCQUE2QjtvQkFDL0IsMkRBQTJEO29CQUMzRCxhQUFhLEVBQUUsR0FBRztvQkFDbEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWTtpQkFDL0MsQ0FDRixDQUFBO2dCQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQTtnQkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQzFCLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FDdEQsQ0FBQTtnQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDMUIsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUNsRCxDQUFBO2dCQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUNqQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQ3hELFFBQVEsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDMUIsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLFlBQVksQ0FDN0IsaUZBQWlGLENBQ2xGO2FBQ0YsQ0FBQyxDQUFBO1lBQ0Ysb0JBQW9CLENBQUMsV0FBVyxDQUM5QixnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FDOUMsQ0FBQTtZQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtZQUNyQyxPQUFPLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDN0MsQ0FBQztRQUVELElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3BDLEtBQUssRUFBRSxPQUFPLENBQUMsYUFBYTtTQUM3QixDQUFDLENBQUE7UUFFRixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNwQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVU7U0FDekIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTzthQUN6QixDQUFDLENBQUE7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTzthQUNoQyxDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaktELHdDQWlLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgZWNyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0IHtcbiAgR2l0aHViQWN0aW9uc1JvbGUsXG4gIFByb3BzIGFzIEdpdGh1YkFjdGlvbnNSb2xlUHJvcHMsXG59IGZyb20gXCIuL2dpdGh1Yi1hY3Rpb25zLXJvbGVcIlxuXG5pbnRlcmZhY2UgUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgUzMgQnVja2V0LlxuICAgKlxuICAgKiBOT1RFOiBTaG91bGQgaW5jbHVkZSBib3RoIGFjY291bnQgYW5kIHJlZ2lvbiBzbyB0aGF0IGl0IHdpbGxcbiAgICogbm90IGNvbmZsaWN0IHdpdGggb3RoZXIgYWNjb3VudHMvcmVnaW9ucy5cbiAgICovXG4gIGJ1Y2tldE5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgRUNSIFJlcG9zaXRvcnkuXG4gICAqL1xuICBlY3JSZXBvc2l0b3J5TmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByb2xlIHRoYXQgY2FuIGJlIGFzc3VtZWQgYnkgTGlmbGlnIEplbmtpbnMuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqIEBkZWZhdWx0IC0gbm8gcm9sZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIGNpUm9sZU5hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gYXBwbHkgdG8gaW1hZ2VzIHN0b3JlZCBpbiB0aGUgRUNSIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXhwaXJlIGltYWdlcyBhZnRlciAxODAgZGF5c1xuICAgKi9cbiAgZWNyUmVwb3NpdG9yeUxpZmVjeWNsZVJ1bGVzPzogZWNyLkxpZmVjeWNsZVJ1bGVbXVxuICAvKipcbiAgICogSUQgb2YgQVdTIGFjY291bnRzIHRoYXQgd2lsbCBiZSBncmFudGVkIHBlcm1pc3Npb24gdG8gcmVhZCBmcm9tXG4gICAqIHRoZSBhcnRpZmFjdCByZXBvcy5cbiAgICovXG4gIHRhcmdldEFjY291bnRJZHM/OiBzdHJpbmdbXVxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgY3JlYXRpbmcgSUFNIHJvbGVzIHRoYXQgY2FuIGJlIGFzc3VtZWRcbiAgICogYnkgR2l0SHViIEFjdGlvbnMgaW4gc3BlY2lmaWMgR2l0SHViIHJlcG9zaXRvcmllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByb2xlcyBhcmUgY3JlYXRlZC5cbiAgICovXG4gIGdpdGh1YkFjdGlvbnM/OiBPbWl0PFxuICAgIEdpdGh1YkFjdGlvbnNSb2xlUHJvcHMsXG4gICAgXCJ0cnVzdGVkT3duZXJzXCIgfCBcInRydXN0ZWRCcmFuY2hcIiB8IFwib2lkY1Byb3ZpZGVyXCIgfCBcInJvbGVOYW1lXCJcbiAgPiAmIHtcbiAgICAvKipcbiAgICAgKiBBIGxpc3Qgb2YgdHJ1c3RlZCBHaXRIdWIgcmVwb3NpdG9yeSBvd25lcnMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBbXCJjYXByYWxpZmVjeWNsZVwiXVxuICAgICAqL1xuICAgIHRydXN0ZWRPd25lcnM/OiBzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSByb2xlIHRvIGNyZWF0ZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwiZ2l0aHViLWFjdGlvbnMtcm9sZVwiXG4gICAgICovXG4gICAgcm9sZU5hbWU/OiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBicmFuY2ggaW4gYWxsIHJlcG9zaXRvcmllcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFwibWFzdGVyXCJcbiAgICAgKi9cbiAgICBkZWZhdWx0QnJhbmNoPzogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgYSBsaW1pdGVkIHJvbGUgdGhhdCBjYW4gYmUgdXNlZCBvbiBub24tZGVmYXVsdFxuICAgICAqIGJyYW5jaGVzIHdpdGggbGVzcyBJQU0gcGVybWlzc2lvbnMgdGhhbiB0aGUgbWFpbiByb2xlLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgLSBhIGxpbWl0ZWQgcm9sZSBpcyBjcmVhdGVkLlxuICAgICAqL1xuICAgIGxpbWl0ZWRSb2xlQ29uZmlndXJhdGlvbj86IHtcbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciB0byBjcmVhdGUgdGhlIHJvbGUgb3Igbm90LlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICAgIC8qKlxuICAgICAgICogVGhlIG5hbWUgb2YgdGhlIHJvbGUgdG8gY3JlYXRlLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IFwiZ2l0aHViLWFjdGlvbnMtbGltaXRlZC1yb2xlXCJcbiAgICAgICAqL1xuICAgICAgcm9sZU5hbWU/OiBzdHJpbmdcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgZ2VuZXJhdGluZyBJQU0gc3RhdGVtZW50cy5cbiAqL1xuY29uc3QgcG9saWN5U3RhdGVtZW50cyA9IHtcbiAgYWxsb3dQaXBlbGluZVZhcmlhYmxlczogKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgcHJlZml4Pzogc3RyaW5nKSA9PlxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIGFjdGlvbnM6IFtcInNzbTpQdXRQYXJhbWV0ZXJcIl0sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYGFybjphd3M6c3NtOiR7Y2RrLlN0YWNrLm9mKHNjb3BlKS5yZWdpb259OiR7Y2RrLlN0YWNrLm9mKHNjb3BlKS5hY2NvdW50fTpwYXJhbWV0ZXIvbGlmbGlnLWNkay8qL3BpcGVsaW5lLXZhcmlhYmxlcy8ke3ByZWZpeCA/PyBcIipcIn1gLFxuICAgICAgXSxcbiAgICB9KSxcbiAgZGVueVByb2RQaXBlbGluZXM6IChzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGJ1Y2tldDogczMuSUJ1Y2tldCkgPT5cbiAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuREVOWSxcbiAgICAgIGFjdGlvbnM6IFtcInMzOipcIl0sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgYnVja2V0LmFybkZvck9iamVjdHMoXCJwaXBlbGluZXMvKi1wcm9kLypcIiksXG4gICAgICAgIGJ1Y2tldC5hcm5Gb3JPYmplY3RzKFwicGlwZWxpbmVzLyotcHJvZC0qLypcIiksXG4gICAgICBdLFxuICAgIH0pLFxuICBkZW55UHJvZFBpcGVsaW5lVmFyaWFibGVzOiAoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0KSA9PlxuICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5ERU5ZLFxuICAgICAgYWN0aW9uczogW1wic3NtOlB1dFBhcmFtZXRlclwiXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOmF3czpzc206JHtjZGsuU3RhY2sub2Yoc2NvcGUpLnJlZ2lvbn06JHtcbiAgICAgICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmFjY291bnRcbiAgICAgICAgfTpwYXJhbWV0ZXIvbGlmbGlnLWNkay8qL3BpcGVsaW5lLXZhcmlhYmxlcy9wcm9kKmAsXG4gICAgICBdLFxuICAgIH0pLFxufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcgdGhlIGNvbnN0cnVjdCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQcm9wcyA9IChwcm9wczogUHJvcHMpID0+IHtcbiAgbGV0IHZhbGlkID0gdHJ1ZVxuICBpZiAoXG4gICAgcHJvcHMuZ2l0aHViQWN0aW9ucz8uZGVmYXVsdEJyYW5jaCAmJlxuICAgICFwcm9wcy5naXRodWJBY3Rpb25zLmRlZmF1bHRCcmFuY2gubWF0Y2goL15bYS16QS1aMC05LV0rJC8pXG4gICkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgRGVmYXVsdCBicmFuY2ggJHtwcm9wcy5naXRodWJBY3Rpb25zLmRlZmF1bHRCcmFuY2h9IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyc2AsXG4gICAgKVxuICAgIHZhbGlkID0gZmFsc2VcbiAgfVxuICByZXR1cm4gdmFsaWRcbn1cblxuLyoqXG4gKiBDcmVhdGUgdmFyaW91cyBhcnRpZmFjdHMgdXNlZCBhcyBwYXJ0IG9mIENvbnRpbnVvdXMgSW50ZWdyYXRpb24gKENJKS5cbiAqXG4gKiBUaGlzIGluY2x1ZGVzIGFydGlmYWN0IHJlcG9zaXRvcmllcyBzdWNoIGFzIFMzIGJ1Y2tldCBhbmQgRUNSXG4gKiByZXBvc2l0b3J5LCBhcyB3ZWxsIGFzIElBTSByb2xlKHMpIHRoYXQgZ3JhbnQgdGhlIENJIHNlcnZlciB3cml0ZVxuICogYWNjZXNzIHRvIHRoZXNlIHJlcG9zaXRvcmllcy5cbiAqXG4gKiBUT0RPOiBIb3cgY2FuIHdlIGNsZWFudXAgc3R1ZmYgdGhhdCBnb2VzIGludG8gdGhpcyBTMyBCdWNrZXQgYW5kXG4gKiAgRUNSIFJlcG9zaXRvcnk/IENhbiB3ZSBldmVyIHJlbGlhYmx5IGNsZWFudXA/IFdlIHByb2JhYmx5IG5lZWRcbiAqICBzb21lIHN0cmF0ZWd5IGZvciBob3cgd2UgcHV0IHN0dWZmIGhlcmUgdG8gYmUgYWJsZSB0byBkbyBpdC5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjbGFzcyBCdWlsZEFydGlmYWN0cyBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBwdWJsaWMgcmVhZG9ubHkgZWNyUmVwb3NpdG9yeUFybjogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSBlY3JSZXBvc2l0b3J5TmFtZTogc3RyaW5nXG4gIHB1YmxpYyByZWFkb25seSByb2xlPzogaWFtLlJvbGVcbiAgcHVibGljIHJlYWRvbmx5IGxpbWl0ZWRSb2xlPzogaWFtLlJvbGVcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIGlmICghdmFsaWRhdGVQcm9wcyhwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHJvcHMgd2VyZSBzdXBwbGllZFwiKVxuICAgIH1cblxuICAgIHRoaXMuYnVja2V0TmFtZSA9IHByb3BzLmJ1Y2tldE5hbWVcbiAgICB0aGlzLmVjclJlcG9zaXRvcnlOYW1lID0gcHJvcHMuZWNyUmVwb3NpdG9yeU5hbWVcbiAgICB0aGlzLmVjclJlcG9zaXRvcnlBcm4gPSBjZGsuQXJuLmZvcm1hdChcbiAgICAgIHtcbiAgICAgICAgc2VydmljZTogXCJlY3JcIixcbiAgICAgICAgcmVzb3VyY2U6IFwicmVwb3NpdG9yeVwiLFxuICAgICAgICByZXNvdXJjZU5hbWU6IHRoaXMuZWNyUmVwb3NpdG9yeU5hbWUsXG4gICAgICB9LFxuICAgICAgY2RrLlN0YWNrLm9mKHRoaXMpLFxuICAgIClcblxuICAgIGNvbnN0IGVjclJlcG9zaXRvcnlOYW1lID0gcHJvcHMuZWNyUmVwb3NpdG9yeU5hbWVcblxuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgXCJTM0J1Y2tldFwiLCB7XG4gICAgICBidWNrZXROYW1lOiBwcm9wcy5idWNrZXROYW1lLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgZXZlbnRCcmlkZ2VFbmFibGVkOiB0cnVlLFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb246IGNkay5EdXJhdGlvbi5kYXlzKDEwKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIGNvbnN0IGVjclJlcG8gPSBuZXcgZWNyLlJlcG9zaXRvcnkodGhpcywgXCJFY3JSZXBvc2l0b3J5XCIsIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiBlY3JSZXBvc2l0b3J5TmFtZSxcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBwcm9wcy5lY3JSZXBvc2l0b3J5TGlmZWN5Y2xlUnVsZXMgfHwgW1xuICAgICAgICB7XG4gICAgICAgICAgbWF4SW1hZ2VBZ2U6IGNkay5EdXJhdGlvbi5kYXlzKDE4MCksXG4gICAgICAgICAgdGFnU3RhdHVzOiBlY3IuVGFnU3RhdHVzLkFOWSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcblxuICAgIC8vIEFsbG93IGEgdGFyZ2V0IHRvIHJlYWQgZnJvbSB0aGUgcmVwb3MuIEFzIGFueSBzcGVjaWZpYyByb2xlcyBuZWVkXG4gICAgLy8gdG8gZXhpc3QgYmVmb3JlIHdlIGNhbiBncmFudCBhY2Nlc3MsIHdlIGRlbGVnYXRlIHRoYXQgcmVzcG9uc2liaWxpdHlcbiAgICAvLyB0byB0aGUgdGFyZ2V0IGFjY291bnQuXG4gICAgZm9yIChjb25zdCB0YXJnZXRBY2NvdW50SWQgb2YgcHJvcHMudGFyZ2V0QWNjb3VudElkcyB8fCBbXSkge1xuICAgICAgYnVja2V0LmdyYW50UmVhZChuZXcgaWFtLkFjY291bnRQcmluY2lwYWwodGFyZ2V0QWNjb3VudElkKSlcbiAgICAgIGVjclJlcG8uZ3JhbnRQdWxsKG5ldyBpYW0uQWNjb3VudFByaW5jaXBhbCh0YXJnZXRBY2NvdW50SWQpKVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5naXRodWJBY3Rpb25zKSB7XG4gICAgICBjb25zdCB0cnVzdGVkT3duZXJzID0gcHJvcHMuZ2l0aHViQWN0aW9ucy50cnVzdGVkT3duZXJzID8/IFtcbiAgICAgICAgXCJjYXByYWxpZmVjeWNsZVwiLFxuICAgICAgXVxuICAgICAgLy8gTk9URTogVGhlcmUncyBhbiBMMiBjb25zdHJ1Y3QgdGhhdCBwcmVkYXRlcyB0aGUgb2ZmaWNpYWwgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UsXG4gICAgICAvLyBhbmQgaXQgaXMgdGhlcmVmb3JlIGltcGxlbWVudGVkIGFzIGEgY3VzdG9tIHJlc291cmNlLlxuICAgICAgLy8gV2UgdXNlIHRoZSBMMSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZSBpbnN0ZWFkIGJlY2F1c2U6XG4gICAgICAvLyAxKSBpdCdzIHNpbXBsZXJcbiAgICAgIC8vIDIpIHRoZXJlJ3MgYSBjaGFuY2UgdGhlIEwyIGNvbnN0cnVjdCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZSBpbiBmYXZvclxuICAgICAgLy8gb2YgdGhlIG9mZmljaWFsIENsb3VkRm9ybWF0aW9uIHJlc291cmNlLlxuICAgICAgY29uc3QgY2ZuT2lkY1Byb3ZpZGVyID0gbmV3IGlhbS5DZm5PSURDUHJvdmlkZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiT3BlbklkQ29ubmVjdFByb3ZpZGVyXCIsXG4gICAgICAgIHtcbiAgICAgICAgICB1cmw6IFwiaHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbVwiLFxuICAgICAgICAgIGNsaWVudElkTGlzdDogW1wic3RzLmFtYXpvbmF3cy5jb21cIl0sXG4gICAgICAgICAgLy8gTk9URTogVGhlIHRodW1icHJpbnQgaXNuJ3QgYWN0dWFsbHkgdXNlZCwgYnV0IHRoZSBBV1MgQVBJIHN0aWxsIHJlcXVpcmVzIHVzIHRvIHN1cHBseSBpdC5cbiAgICAgICAgICAvLyBNb3JlIGRldGFpbHMgaGVyZTogaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMjQwMTIyMTU1NzU4L2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzL2lzc3Vlcy8zNTcjaXNzdWVjb21tZW50LTE2MjYzNTczMzNcbiAgICAgICAgICB0aHVtYnByaW50TGlzdDogW1wiMWM1OGEzYTg1MThlODc1OWJmMDc1Yjc2Yjc1MGQ0ZjJkZjI2NGZjZFwiXSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICAgIGNvbnN0IG9pZGNQcm92aWRlciA9XG4gICAgICAgIGlhbS5PcGVuSWRDb25uZWN0UHJvdmlkZXIuZnJvbU9wZW5JZENvbm5lY3RQcm92aWRlckFybihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFwiUHJvdmlkZXJcIixcbiAgICAgICAgICBjZm5PaWRjUHJvdmlkZXIucmVmLFxuICAgICAgICApXG4gICAgICBjb25zdCBjcmVhdGVMaW1pdGVkUm9sZSA9XG4gICAgICAgIHByb3BzLmdpdGh1YkFjdGlvbnMubGltaXRlZFJvbGVDb25maWd1cmF0aW9uPy5lbmFibGVkID8/IHRydWVcbiAgICAgIGNvbnN0IHJvbGUgPSBuZXcgR2l0aHViQWN0aW9uc1JvbGUodGhpcywgXCJHaXRodWJBY3Rpb25zUm9sZVwiLCB7XG4gICAgICAgIG9pZGNQcm92aWRlcixcbiAgICAgICAgdHJ1c3RlZE93bmVycyxcbiAgICAgICAgcm9sZU5hbWU6IHByb3BzLmdpdGh1YkFjdGlvbnMucm9sZU5hbWUgPz8gXCJnaXRodWItYWN0aW9ucy1yb2xlXCIsXG4gICAgICAgIHRydXN0ZWRCcmFuY2g6IGNyZWF0ZUxpbWl0ZWRSb2xlXG4gICAgICAgICAgPyBwcm9wcy5naXRodWJBY3Rpb25zLmRlZmF1bHRCcmFuY2ggPz8gXCJtYXN0ZXJcIlxuICAgICAgICAgIDogLy8gTk9URTogSWYgdGhlIGxpbWl0ZWQgcm9sZSBpcyBkaXNhYmxlZCwgb25seSBvbmUgcm9sZSB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgIC8vIGFuZCB0aGF0IHJvbGUgdGhlbiBuZWVkcyB0byBiZSBhc3N1bWFibGUgZnJvbSBhbGwgYnJhbmNoZXMuXG4gICAgICAgICAgICBcIipcIixcbiAgICAgICAgcmVwb3NpdG9yaWVzOiBwcm9wcy5naXRodWJBY3Rpb25zLnJlcG9zaXRvcmllcyxcbiAgICAgIH0pXG4gICAgICB0aGlzLnJvbGUgPSByb2xlLnJvbGVcbiAgICAgIHRoaXMucm9sZS5hZGRUb1BvbGljeShwb2xpY3lTdGF0ZW1lbnRzLmFsbG93UGlwZWxpbmVWYXJpYWJsZXModGhpcykpXG4gICAgICBidWNrZXQuZ3JhbnRQdXQodGhpcy5yb2xlKVxuICAgICAgZWNyUmVwby5ncmFudFB1bGxQdXNoKHRoaXMucm9sZSlcbiAgICAgIGlmIChjcmVhdGVMaW1pdGVkUm9sZSkge1xuICAgICAgICBjb25zdCBsaW1pdGVkUm9sZSA9IG5ldyBHaXRodWJBY3Rpb25zUm9sZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFwiR2l0aHViQWN0aW9uc0xpbWl0ZWRSb2xlXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2lkY1Byb3ZpZGVyLFxuICAgICAgICAgICAgdHJ1c3RlZE93bmVycyxcbiAgICAgICAgICAgIHJvbGVOYW1lOlxuICAgICAgICAgICAgICBwcm9wcy5naXRodWJBY3Rpb25zLmxpbWl0ZWRSb2xlQ29uZmlndXJhdGlvbj8ucm9sZU5hbWUgPz9cbiAgICAgICAgICAgICAgXCJnaXRodWItYWN0aW9ucy1saW1pdGVkLXJvbGVcIixcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoZSBsaW1pdGVkIHJvbGUgY2FuIGJlIGFzc3VtZWQgZnJvbSBhbGwgYnJhbmNoZXMuXG4gICAgICAgICAgICB0cnVzdGVkQnJhbmNoOiBcIipcIixcbiAgICAgICAgICAgIHJlcG9zaXRvcmllczogcHJvcHMuZ2l0aHViQWN0aW9ucy5yZXBvc2l0b3JpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmxpbWl0ZWRSb2xlID0gbGltaXRlZFJvbGUucm9sZVxuICAgICAgICB0aGlzLmxpbWl0ZWRSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgICAgIHBvbGljeVN0YXRlbWVudHMuYWxsb3dQaXBlbGluZVZhcmlhYmxlcyh0aGlzLCBcImRldipcIiksXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5saW1pdGVkUm9sZS5hZGRUb1BvbGljeShcbiAgICAgICAgICBwb2xpY3lTdGF0ZW1lbnRzLmRlbnlQcm9kUGlwZWxpbmVzKHNjb3BlLCBidWNrZXQpLFxuICAgICAgICApXG4gICAgICAgIGJ1Y2tldC5ncmFudFB1dCh0aGlzLmxpbWl0ZWRSb2xlKVxuICAgICAgICBlY3JSZXBvLmdyYW50UHVsbFB1c2godGhpcy5saW1pdGVkUm9sZSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzLmNpUm9sZU5hbWUpIHtcbiAgICAgIGNvbnN0IGxlZ2FjeVJvbGVGb3JKZW5raW5zID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiQ2lSb2xlXCIsIHtcbiAgICAgICAgcm9sZU5hbWU6IHByb3BzLmNpUm9sZU5hbWUsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5Bcm5QcmluY2lwYWwoXG4gICAgICAgICAgXCJhcm46YXdzOmlhbTo6OTIzNDAyMDk3MDQ2OnJvbGUvYnVpbGR0b29scy1qZW5raW5zLVJvbGVKZW5raW5zU2xhdmUtSlFHWUhSNVdFNkM1XCIsXG4gICAgICAgICksXG4gICAgICB9KVxuICAgICAgbGVnYWN5Um9sZUZvckplbmtpbnMuYWRkVG9Qb2xpY3koXG4gICAgICAgIHBvbGljeVN0YXRlbWVudHMuYWxsb3dQaXBlbGluZVZhcmlhYmxlcyh0aGlzKSxcbiAgICAgIClcbiAgICAgIGJ1Y2tldC5ncmFudFB1dChsZWdhY3lSb2xlRm9ySmVua2lucylcbiAgICAgIGVjclJlcG8uZ3JhbnRQdWxsUHVzaChsZWdhY3lSb2xlRm9ySmVua2lucylcbiAgICB9XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkVjclJlcG9VcmlcIiwge1xuICAgICAgdmFsdWU6IGVjclJlcG8ucmVwb3NpdG9yeVVyaSxcbiAgICB9KVxuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJCdWNrZXROYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBidWNrZXQuYnVja2V0TmFtZSxcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMucm9sZSkge1xuICAgICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJSb2xlQXJuXCIsIHtcbiAgICAgICAgdmFsdWU6IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHRoaXMubGltaXRlZFJvbGUpIHtcbiAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiTGltaXRlZFJvbGVBcm5cIiwge1xuICAgICAgICB2YWx1ZTogdGhpcy5saW1pdGVkUm9sZS5yb2xlQXJuLFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@liflig/cdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.19.1",
|
|
4
4
|
"description": "CDK library for Liflig",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@aws-cdk/assert": "2.68.0",
|
|
43
|
-
"@commitlint/cli": "18.
|
|
44
|
-
"@commitlint/config-conventional": "18.
|
|
45
|
-
"@types/aws-lambda": "8.10.
|
|
43
|
+
"@commitlint/cli": "18.6.0",
|
|
44
|
+
"@commitlint/config-conventional": "18.6.0",
|
|
45
|
+
"@types/aws-lambda": "8.10.132",
|
|
46
46
|
"@types/jest": "29.5.11",
|
|
47
|
-
"@types/node": "18.19.
|
|
47
|
+
"@types/node": "18.19.10",
|
|
48
48
|
"@typescript-eslint/eslint-plugin": "5.62.0",
|
|
49
49
|
"@typescript-eslint/parser": "5.62.0",
|
|
50
50
|
"aws-cdk": "2.111.0",
|
|
@@ -52,19 +52,19 @@
|
|
|
52
52
|
"constructs": "10.3.0",
|
|
53
53
|
"eslint": "8.56.0",
|
|
54
54
|
"eslint-config-prettier": "9.1.0",
|
|
55
|
-
"eslint-plugin-prettier": "5.1.
|
|
55
|
+
"eslint-plugin-prettier": "5.1.3",
|
|
56
56
|
"husky": "8.0.3",
|
|
57
57
|
"jest": "29.7.0",
|
|
58
58
|
"jest-cdk-snapshot": "2.0.1",
|
|
59
|
-
"prettier": "3.
|
|
59
|
+
"prettier": "3.2.4",
|
|
60
60
|
"semantic-release": "22.0.12",
|
|
61
|
-
"ts-jest": "29.1.
|
|
61
|
+
"ts-jest": "29.1.2",
|
|
62
62
|
"ts-node": "10.9.2",
|
|
63
63
|
"typescript": "5.3.3"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@capraconsulting/webapp-deploy-lambda": "2.1.5",
|
|
67
|
-
"aws-sdk": "2.
|
|
67
|
+
"aws-sdk": "2.1545.0",
|
|
68
68
|
"cpy": "8.1.2",
|
|
69
69
|
"del": "6.1.1",
|
|
70
70
|
"execa": "5.1.1",
|