@liflig/cdk 2.9.2 → 2.10.0

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.
@@ -1 +1,2 @@
1
1
  export { Webapp, WebappProps } from "./webapp";
2
+ export { generateContentSecurityPolicyHeader } from "./security-headers";
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Webapp = void 0;
3
+ exports.generateContentSecurityPolicyHeader = exports.Webapp = void 0;
4
4
  var webapp_1 = require("./webapp");
5
5
  Object.defineProperty(exports, "Webapp", { enumerable: true, get: function () { return webapp_1.Webapp; } });
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2ViYXBwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE4QztBQUFyQyxnR0FBQSxNQUFNLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBXZWJhcHAsIFdlYmFwcFByb3BzIH0gZnJvbSBcIi4vd2ViYXBwXCJcbiJdfQ==
6
+ var security_headers_1 = require("./security-headers");
7
+ Object.defineProperty(exports, "generateContentSecurityPolicyHeader", { enumerable: true, get: function () { return security_headers_1.generateContentSecurityPolicyHeader; } });
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2ViYXBwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE4QztBQUFyQyxnR0FBQSxNQUFNLE9BQUE7QUFDZix1REFBd0U7QUFBL0QsdUlBQUEsbUNBQW1DLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBXZWJhcHAsIFdlYmFwcFByb3BzIH0gZnJvbSBcIi4vd2ViYXBwXCJcbmV4cG9ydCB7IGdlbmVyYXRlQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyIH0gZnJvbSBcIi4vc2VjdXJpdHktaGVhZGVyc1wiXG4iXX0=
@@ -1,18 +1,15 @@
1
1
  import * as constructs from "constructs";
2
2
  import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
3
- export interface FrameOptionsHeader {
4
- value?: "DENY" | "SAMEORIGIN";
5
- }
6
- export interface ReferrerPolicyHeader {
7
- value?: string;
8
- }
9
- export interface StrictTransportSecurityHeader {
10
- maxAge?: number;
11
- includeSubDomains?: boolean;
12
- preload?: boolean;
13
- }
3
+ export type WebappSecurityHeadersProps = Partial<cloudfront.ResponseSecurityHeadersBehavior & {
4
+ contentSecurityPolicy?: cloudfront.ResponseSecurityHeadersBehavior["contentSecurityPolicy"] & {
5
+ /**
6
+ * Whether to only monitor the effects of the content security policy without actually blocking anything.
7
+ * @default false
8
+ */
9
+ reportOnly?: boolean;
10
+ };
11
+ }>;
14
12
  export interface ContentSecurityPolicyHeader {
15
- reportOnly?: boolean;
16
13
  baseUri?: string;
17
14
  childSrc?: string;
18
15
  defaultSrc?: string;
@@ -28,13 +25,14 @@ export interface ContentSecurityPolicyHeader {
28
25
  styleSrc?: string;
29
26
  connectSrc?: string;
30
27
  }
31
- export interface SecurityHeaders {
32
- contentSecurityPolicy?: ContentSecurityPolicyHeader;
33
- strictTransportSecurity?: StrictTransportSecurityHeader;
34
- referrerPolicy?: ReferrerPolicyHeader;
35
- frameOptions?: FrameOptionsHeader;
36
- }
28
+ /**
29
+ * Helper function that generates a string containing a Content Security Policy that can be
30
+ * used in a security header.
31
+ *
32
+ * NOTE: The string can be further extended using string concatenation for directives that aren't currently supported by the function.
33
+ */
34
+ export declare function generateContentSecurityPolicyHeader(headerOptions?: ContentSecurityPolicyHeader): string;
37
35
  export declare class WebappSecurityHeaders extends constructs.Construct {
38
- readonly securityHeadersFunction: cloudfront.Function;
39
- constructor(scope: constructs.Construct, id: string, props: SecurityHeaders);
36
+ readonly responseHeadersPolicy: cloudfront.ResponseHeadersPolicy;
37
+ constructor(scope: constructs.Construct, id: string, props: WebappSecurityHeadersProps);
40
38
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebappSecurityHeaders = void 0;
3
+ exports.WebappSecurityHeaders = exports.generateContentSecurityPolicyHeader = void 0;
4
+ const cdk = require("aws-cdk-lib");
4
5
  const constructs = require("constructs");
5
6
  const cloudfront = require("aws-cdk-lib/aws-cloudfront");
6
7
  function validateCspParam(param) {
@@ -19,17 +20,23 @@ function validateCspParam(param) {
19
20
  function trim(value) {
20
21
  return value.replace(/\s+/g, " ").trim();
21
22
  }
23
+ /**
24
+ * Helper function that generates a string containing a Content Security Policy that can be
25
+ * used in a security header.
26
+ *
27
+ * NOTE: The string can be further extended using string concatenation for directives that aren't currently supported by the function.
28
+ */
22
29
  function generateContentSecurityPolicyHeader(headerOptions) {
23
30
  const defaultValues = {
24
31
  baseUri: "'self'",
25
- childSrc: "'none'",
26
- connectSrc: "'self'",
27
- defaultSrc: "'self'",
32
+ childSrc: "'self'",
33
+ connectSrc: "'self' https:",
34
+ defaultSrc: "'none'",
28
35
  fontSrc: "'self'",
29
- formAction: "'self'",
36
+ formAction: "'none'",
30
37
  frameAncestors: "'none'",
31
38
  frameSrc: "'self'",
32
- imgSrc: "'self'",
39
+ imgSrc: "'self' data:",
33
40
  manifestSrc: "'self'",
34
41
  mediaSrc: "'self'",
35
42
  objectSrc: "'none'",
@@ -53,74 +60,68 @@ function generateContentSecurityPolicyHeader(headerOptions) {
53
60
  headerValue += `media-src ${trim(options.mediaSrc)};`;
54
61
  headerValue += `object-src ${trim(options.objectSrc)};`;
55
62
  headerValue += `script-src ${trim(options.scriptSrc)};`;
56
- headerValue += `style-src ${trim(options.styleSrc)};`;
63
+ headerValue += `style-src ${trim(options.styleSrc)}`;
57
64
  return trim(headerValue);
58
65
  }
59
- function generateStrictTransportSecurityHeader(headerOptions) {
60
- const defaultValues = {
61
- maxAge: 63072000,
62
- includeSubDomains: false,
63
- preload: false,
64
- };
65
- const options = {
66
- ...defaultValues,
67
- ...headerOptions,
68
- };
69
- let headerValue = "";
70
- headerValue += `max-age=${options.maxAge};`;
71
- headerValue += options.preload ? "preload;" : "";
72
- headerValue += options.includeSubDomains ? "includeSubDomains;" : "";
73
- return trim(headerValue);
74
- }
75
- function generateReferrerPolicyHeader(headerOptions) {
76
- const defaultValues = {
77
- value: "strict-origin-when-cross-origin",
78
- };
79
- const options = {
80
- ...defaultValues,
81
- ...headerOptions,
82
- };
83
- return options.value;
84
- }
85
- function generateFrameOptionsHeader(headerOptions) {
86
- const defaultValues = {
87
- value: "DENY",
88
- };
89
- const options = {
90
- ...defaultValues,
91
- ...headerOptions,
92
- };
93
- return trim(options.value);
94
- }
66
+ exports.generateContentSecurityPolicyHeader = generateContentSecurityPolicyHeader;
95
67
  class WebappSecurityHeaders extends constructs.Construct {
96
68
  constructor(scope, id, props) {
97
- var _a;
98
69
  super(scope, id);
99
- const cspHeaderName = ((_a = props.contentSecurityPolicy) === null || _a === void 0 ? void 0 : _a.reportOnly)
100
- ? "content-security-policy-report-only"
101
- : "content-security-policy";
102
- const contentSecurityPolicy = generateContentSecurityPolicyHeader(props.contentSecurityPolicy);
103
- const strictTransportSecurity = generateStrictTransportSecurityHeader(props.strictTransportSecurity);
104
- const referrerPolicy = generateReferrerPolicyHeader(props.referrerPolicy);
105
- const frameOptions = generateFrameOptionsHeader(props.frameOptions);
106
- const lambdaCode = `function handler(event) {
107
- var response = event.response;
108
- var headers = response.headers;
109
- headers['referrer-policy'] = {value: '${referrerPolicy}'};
110
- headers['strict-transport-security'] = {value: '${strictTransportSecurity}'};
111
- headers['x-content-type-options'] = {value: 'nosniff'};
112
- headers['x-frame-options'] = {value: '${frameOptions}'};
113
- headers['x-xss-protection'] = {value: '1; mode=block'};
114
- headers['${cspHeaderName}'] = {value: "${contentSecurityPolicy}"};
115
- return response;
116
- }`;
117
- // Hardcoded logical ID due to bug: https://github.com/aws/aws-cdk/issues/15523
118
- const functionId = `Function${this.node.addr}`;
119
- this.securityHeadersFunction = new cloudfront.Function(this, functionId, {
120
- functionName: functionId,
121
- code: cloudfront.FunctionCode.fromInline(lambdaCode),
70
+ const { contentSecurityPolicy: contentSecurityPolicyOverride, ...overrides } = props;
71
+ const contentSecurityPolicyCustomHeader = contentSecurityPolicyOverride || {
72
+ reportOnly: false,
73
+ contentSecurityPolicy: generateContentSecurityPolicyHeader(),
74
+ override: true,
75
+ };
76
+ const defaultValues = {
77
+ contentTypeOptions: {
78
+ override: true,
79
+ },
80
+ referrerPolicy: {
81
+ override: true,
82
+ referrerPolicy: cloudfront.HeadersReferrerPolicy.SAME_ORIGIN,
83
+ },
84
+ frameOptions: {
85
+ frameOption: cloudfront.HeadersFrameOption.DENY,
86
+ override: true,
87
+ },
88
+ strictTransportSecurity: {
89
+ override: true,
90
+ accessControlMaxAge: cdk.Duration.days(182.5),
91
+ includeSubdomains: false,
92
+ preload: false,
93
+ },
94
+ xssProtection: {
95
+ override: true,
96
+ protection: true,
97
+ modeBlock: true,
98
+ },
99
+ };
100
+ this.responseHeadersPolicy = new cloudfront.ResponseHeadersPolicy(this, "ResponseHeadersPolicy", {
101
+ securityHeadersBehavior: {
102
+ ...defaultValues,
103
+ ...overrides,
104
+ ...(!contentSecurityPolicyCustomHeader.reportOnly && {
105
+ contentSecurityPolicy: {
106
+ contentSecurityPolicy: contentSecurityPolicyCustomHeader.contentSecurityPolicy,
107
+ override: contentSecurityPolicyCustomHeader.override,
108
+ },
109
+ }),
110
+ },
111
+ ...(contentSecurityPolicyCustomHeader.reportOnly && {
112
+ customHeadersBehavior: {
113
+ // Report only is not supported by securityHeadersBehavior in AWS and must be defined as custom header
114
+ customHeaders: [
115
+ {
116
+ header: "Content-Security-Policy-Report-Only",
117
+ value: contentSecurityPolicyCustomHeader.contentSecurityPolicy,
118
+ override: contentSecurityPolicyCustomHeader.override,
119
+ },
120
+ ],
121
+ },
122
+ }),
122
123
  });
123
124
  }
124
125
  }
125
126
  exports.WebappSecurityHeaders = WebappSecurityHeaders;
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktaGVhZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93ZWJhcHAvc2VjdXJpdHktaGVhZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBd0M7QUFDeEMseURBQXdEO0FBeUN4RCxTQUFTLGdCQUFnQixDQUFDLEtBQWE7SUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7S0FDekQ7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtLQUN6RDtJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUM5QixNQUFNLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFBO0tBQzFEO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsNERBQTREO0FBQzVELFNBQVMsSUFBSSxDQUFDLEtBQWE7SUFDekIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsU0FBUyxtQ0FBbUMsQ0FDMUMsYUFBMkM7SUFFM0MsTUFBTSxhQUFhLEdBQUc7UUFDcEIsT0FBTyxFQUFFLFFBQVE7UUFDakIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsT0FBTyxFQUFFLFFBQVE7UUFDakIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsY0FBYyxFQUFFLFFBQVE7UUFDeEIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsV0FB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WUFDeEIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztTQUNyRCxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUF2Q0Qsc0RBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBjbG91ZGZyb250IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRnJhbWVPcHRpb25zSGVhZGVyIHtcbiAgdmFsdWU/OiBcIkRFTllcIiB8IFwiU0FNRU9SSUdJTlwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmZXJyZXJQb2xpY3lIZWFkZXIge1xuICB2YWx1ZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyIHtcbiAgbWF4QWdlPzogbnVtYmVyXG4gIGluY2x1ZGVTdWJEb21haW5zPzogYm9vbGVhblxuICBwcmVsb2FkPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlciB7XG4gIHJlcG9ydE9ubHk/OiBib29sZWFuXG4gIGJhc2VVcmk/OiBzdHJpbmdcbiAgY2hpbGRTcmM/OiBzdHJpbmdcbiAgZGVmYXVsdFNyYz86IHN0cmluZ1xuICBmb250U3JjPzogc3RyaW5nXG4gIGZyYW1lU3JjPzogc3RyaW5nXG4gIGZvcm1BY3Rpb24/OiBzdHJpbmdcbiAgZnJhbWVBbmNlc3RvcnM/OiBzdHJpbmdcbiAgaW1nU3JjPzogc3RyaW5nXG4gIG1hbmlmZXN0U3JjPzogc3RyaW5nXG4gIG1lZGlhU3JjPzogc3RyaW5nXG4gIG9iamVjdFNyYz86IHN0cmluZ1xuICBzY3JpcHRTcmM/OiBzdHJpbmdcbiAgc3R5bGVTcmM/OiBzdHJpbmdcbiAgY29ubmVjdFNyYz86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5SGVhZGVycyB7XG4gIGNvbnRlbnRTZWN1cml0eVBvbGljeT86IENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclxuICBzdHJpY3RUcmFuc3BvcnRTZWN1cml0eT86IFN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyXG4gIHJlZmVycmVyUG9saWN5PzogUmVmZXJyZXJQb2xpY3lIZWFkZXJcbiAgZnJhbWVPcHRpb25zPzogRnJhbWVPcHRpb25zSGVhZGVyXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ3NwUGFyYW0ocGFyYW06IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwYXJhbS5pbmRleE9mKCdcIicpICE9PSAtMSkge1xuICAgIHRocm93IEVycm9yKCdDU1Agb3ZlcnJpZGUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgXCInKVxuICB9XG5cbiAgaWYgKHBhcmFtLmluZGV4T2YoXCI7XCIpICE9PSAtMSkge1xuICAgIHRocm93IEVycm9yKFwiQ1NQIG92ZXJyaWRlIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyIDtcIilcbiAgfVxuXG4gIGlmIChwYXJhbS5pbmRleE9mKFwiXFxcXFwiKSAhPT0gLTEpIHtcbiAgICB0aHJvdyBFcnJvcihcIkNTUCBvdmVycmlkZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciBcXFxcXCIpXG4gIH1cblxuICByZXR1cm4gcGFyYW1cbn1cblxuLyogUmVwbGFjZSBhbGwgd2hpdGVzcGFjZSBpbiBhIHN0cmluZyB3aXRoIGEgc2luZ2xlIHNwYWNlICovXG5mdW5jdGlvbiB0cmltKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxzKy9nLCBcIiBcIikudHJpbSgpXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyKFxuICBoZWFkZXJPcHRpb25zPzogQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVyLFxuKSB7XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSB7XG4gICAgYmFzZVVyaTogXCInc2VsZidcIixcbiAgICBjaGlsZFNyYzogXCInbm9uZSdcIixcbiAgICBjb25uZWN0U3JjOiBcIidzZWxmJ1wiLFxuICAgIGRlZmF1bHRTcmM6IFwiJ3NlbGYnXCIsXG4gICAgZm9udFNyYzogXCInc2VsZidcIixcbiAgICBmb3JtQWN0aW9uOiBcIidzZWxmJ1wiLFxuICAgIGZyYW1lQW5jZXN0b3JzOiBcIidub25lJ1wiLFxuICAgIGZyYW1lU3JjOiBcIidzZWxmJ1wiLFxuICAgIGltZ1NyYzogXCInc2VsZidcIixcbiAgICBtYW5pZmVzdFNyYzogXCInc2VsZidcIixcbiAgICBtZWRpYVNyYzogXCInc2VsZidcIixcbiAgICBvYmplY3RTcmM6IFwiJ25vbmUnXCIsXG4gICAgc2NyaXB0U3JjOiBcIidzZWxmJ1wiLFxuICAgIHN0eWxlU3JjOiBcIidzZWxmJ1wiLFxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0VmFsdWVzLFxuICAgIC4uLmhlYWRlck9wdGlvbnMsXG4gIH1cblxuICBPYmplY3QudmFsdWVzKG9wdGlvbnMpLmZvckVhY2goXG4gICAgKHYpID0+IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiICYmIHZhbGlkYXRlQ3NwUGFyYW0odiksXG4gIClcblxuICBsZXQgaGVhZGVyVmFsdWUgPSBcIlwiXG4gIGhlYWRlclZhbHVlICs9IGBiYXNlLXVyaSAke3RyaW0ob3B0aW9ucy5iYXNlVXJpKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgY2hpbGQtc3JjICR7dHJpbShvcHRpb25zLmNoaWxkU3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgY29ubmVjdC1zcmMgJHt0cmltKG9wdGlvbnMuY29ubmVjdFNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYGRlZmF1bHQtc3JjICR7dHJpbShvcHRpb25zLmRlZmF1bHRTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBmb250LXNyYyAke3RyaW0ob3B0aW9ucy5mb250U3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgZnJhbWUtc3JjICR7dHJpbShvcHRpb25zLmZyYW1lU3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgaW1nLXNyYyAke3RyaW0ob3B0aW9ucy5pbWdTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBtYW5pZmVzdC1zcmMgJHt0cmltKG9wdGlvbnMubWFuaWZlc3RTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBtZWRpYS1zcmMgJHt0cmltKG9wdGlvbnMubWVkaWFTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBvYmplY3Qtc3JjICR7dHJpbShvcHRpb25zLm9iamVjdFNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYHNjcmlwdC1zcmMgJHt0cmltKG9wdGlvbnMuc2NyaXB0U3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgc3R5bGUtc3JjICR7dHJpbShvcHRpb25zLnN0eWxlU3JjKX07YFxuXG4gIHJldHVybiB0cmltKGhlYWRlclZhbHVlKVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZVN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyKFxuICBoZWFkZXJPcHRpb25zPzogU3RyaWN0VHJhbnNwb3J0U2VjdXJpdHlIZWFkZXIsXG4pIHtcbiAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHtcbiAgICBtYXhBZ2U6IDYzMDcyMDAwLFxuICAgIGluY2x1ZGVTdWJEb21haW5zOiBmYWxzZSxcbiAgICBwcmVsb2FkOiBmYWxzZSxcbiAgfVxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRWYWx1ZXMsXG4gICAgLi4uaGVhZGVyT3B0aW9ucyxcbiAgfVxuICBsZXQgaGVhZGVyVmFsdWUgPSBcIlwiXG4gIGhlYWRlclZhbHVlICs9IGBtYXgtYWdlPSR7b3B0aW9ucy5tYXhBZ2V9O2BcbiAgaGVhZGVyVmFsdWUgKz0gb3B0aW9ucy5wcmVsb2FkID8gXCJwcmVsb2FkO1wiIDogXCJcIlxuICBoZWFkZXJWYWx1ZSArPSBvcHRpb25zLmluY2x1ZGVTdWJEb21haW5zID8gXCJpbmNsdWRlU3ViRG9tYWlucztcIiA6IFwiXCJcbiAgcmV0dXJuIHRyaW0oaGVhZGVyVmFsdWUpXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUmVmZXJyZXJQb2xpY3lIZWFkZXIoaGVhZGVyT3B0aW9ucz86IFJlZmVycmVyUG9saWN5SGVhZGVyKSB7XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSB7XG4gICAgdmFsdWU6IFwic3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpblwiLFxuICB9XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdFZhbHVlcyxcbiAgICAuLi5oZWFkZXJPcHRpb25zLFxuICB9XG4gIHJldHVybiBvcHRpb25zLnZhbHVlXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlRnJhbWVPcHRpb25zSGVhZGVyKGhlYWRlck9wdGlvbnM/OiBGcmFtZU9wdGlvbnNIZWFkZXIpIHtcbiAgY29uc3QgZGVmYXVsdFZhbHVlcyA9IHtcbiAgICB2YWx1ZTogXCJERU5ZXCIsXG4gIH1cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0VmFsdWVzLFxuICAgIC4uLmhlYWRlck9wdGlvbnMsXG4gIH1cbiAgcmV0dXJuIHRyaW0ob3B0aW9ucy52YWx1ZSlcbn1cblxuZXhwb3J0IGNsYXNzIFdlYmFwcFNlY3VyaXR5SGVhZGVycyBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5SGVhZGVyc0Z1bmN0aW9uOiBjbG91ZGZyb250LkZ1bmN0aW9uXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VjdXJpdHlIZWFkZXJzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgY3NwSGVhZGVyTmFtZSA9IHByb3BzLmNvbnRlbnRTZWN1cml0eVBvbGljeT8ucmVwb3J0T25seVxuICAgICAgPyBcImNvbnRlbnQtc2VjdXJpdHktcG9saWN5LXJlcG9ydC1vbmx5XCJcbiAgICAgIDogXCJjb250ZW50LXNlY3VyaXR5LXBvbGljeVwiXG5cbiAgICBjb25zdCBjb250ZW50U2VjdXJpdHlQb2xpY3kgPSBnZW5lcmF0ZUNvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlcihcbiAgICAgIHByb3BzLmNvbnRlbnRTZWN1cml0eVBvbGljeSxcbiAgICApXG4gICAgY29uc3Qgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHkgPSBnZW5lcmF0ZVN0cmljdFRyYW5zcG9ydFNlY3VyaXR5SGVhZGVyKFxuICAgICAgcHJvcHMuc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHksXG4gICAgKVxuICAgIGNvbnN0IHJlZmVycmVyUG9saWN5ID0gZ2VuZXJhdGVSZWZlcnJlclBvbGljeUhlYWRlcihwcm9wcy5yZWZlcnJlclBvbGljeSlcbiAgICBjb25zdCBmcmFtZU9wdGlvbnMgPSBnZW5lcmF0ZUZyYW1lT3B0aW9uc0hlYWRlcihwcm9wcy5mcmFtZU9wdGlvbnMpXG5cbiAgICBjb25zdCBsYW1iZGFDb2RlID0gYGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlO1xuICAgICAgdmFyIGhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzO1xuICAgICAgaGVhZGVyc1sncmVmZXJyZXItcG9saWN5J10gPSB7dmFsdWU6ICcke3JlZmVycmVyUG9saWN5fSd9O1xuICAgICAgaGVhZGVyc1snc3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSddID0ge3ZhbHVlOiAnJHtzdHJpY3RUcmFuc3BvcnRTZWN1cml0eX0nfTtcbiAgICAgIGhlYWRlcnNbJ3gtY29udGVudC10eXBlLW9wdGlvbnMnXSA9IHt2YWx1ZTogJ25vc25pZmYnfTtcbiAgICAgIGhlYWRlcnNbJ3gtZnJhbWUtb3B0aW9ucyddID0ge3ZhbHVlOiAnJHtmcmFtZU9wdGlvbnN9J307XG4gICAgICBoZWFkZXJzWyd4LXhzcy1wcm90ZWN0aW9uJ10gPSB7dmFsdWU6ICcxOyBtb2RlPWJsb2NrJ307XG4gICAgICBoZWFkZXJzWycke2NzcEhlYWRlck5hbWV9J10gPSB7dmFsdWU6IFwiJHtjb250ZW50U2VjdXJpdHlQb2xpY3l9XCJ9O1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1gXG5cbiAgICAvLyBIYXJkY29kZWQgbG9naWNhbCBJRCBkdWUgdG8gYnVnOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE1NTIzXG4gICAgY29uc3QgZnVuY3Rpb25JZCA9IGBGdW5jdGlvbiR7dGhpcy5ub2RlLmFkZHJ9YFxuXG4gICAgdGhpcy5zZWN1cml0eUhlYWRlcnNGdW5jdGlvbiA9IG5ldyBjbG91ZGZyb250LkZ1bmN0aW9uKHRoaXMsIGZ1bmN0aW9uSWQsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25JZCxcbiAgICAgIGNvZGU6IGNsb3VkZnJvbnQuRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUobGFtYmRhQ29kZSksXG4gICAgfSlcbiAgfVxufVxuIl19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktaGVhZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93ZWJhcHAvc2VjdXJpdHktaGVhZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBa0M7QUFDbEMseUNBQXdDO0FBQ3hDLHlEQUF3RDtBQStCeEQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFhO0lBQ3JDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUM3QixNQUFNLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0tBQ3pEO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7S0FDekQ7SUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQTtLQUMxRDtJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFTLElBQUksQ0FBQyxLQUFhO0lBQ3pCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7QUFDMUMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsbUNBQW1DLENBQ2pELGFBQTJDO0lBRTNDLE1BQU0sYUFBYSxHQUFHO1FBQ3BCLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFVBQVUsRUFBRSxlQUFlO1FBQzNCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLFFBQVEsRUFBRSxRQUFRO1FB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QWlCLEVBQUUsS0FBSztnQkFDeEIsT0FBTyxFQUFFLEtBQUs7YUFDZjtZQUNELGFBQWEsRUFBRTtnQkFDYixRQUFRLEVBQUUsSUFBSTtnQkFDZCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsU0FBUyxFQUFFLElBQUk7YUFDaEI7U0FDRixDQUFBO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksVUFBVSxDQUFDLHFCQUFxQixDQUMvRCxJQUFJLEVBQ0osdUJBQXVCLEVBQ3ZCO1lBQ0UsdUJBQXVCLEVBQUU7Z0JBQ3ZCLEdBQUcsYUFBYTtnQkFDaEIsR0FBRyxTQUFTO2dCQUNaLEdBQUcsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLFVBQVUsSUFBSTtvQkFDbkQscUJBQXFCLEVBQUU7d0JBQ3JCLHFCQUFxQixFQUNuQixpQ0FBaUMsQ0FBQyxxQkFBcUI7d0JBQ3pELFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxRQUFRO3FCQUNyRDtpQkFDRixDQUFDO2FBQ0g7WUFDRCxHQUFHLENBQUMsaUNBQWlDLENBQUMsVUFBVSxJQUFJO2dCQUNsRCxxQkFBcUIsRUFBRTtvQkFDckIsc0dBQXNHO29CQUN0RyxhQUFhLEVBQUU7d0JBQ2I7NEJBQ0UsTUFBTSxFQUFFLHFDQUFxQzs0QkFDN0MsS0FBSyxFQUFFLGlDQUFpQyxDQUFDLHFCQUFxQjs0QkFDOUQsUUFBUSxFQUFFLGlDQUFpQyxDQUFDLFFBQVE7eUJBQ3JEO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQztTQUNILENBQ0YsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQS9FRCxzREErRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIlxuXG5leHBvcnQgdHlwZSBXZWJhcHBTZWN1cml0eUhlYWRlcnNQcm9wcyA9IFBhcnRpYWw8XG4gIGNsb3VkZnJvbnQuUmVzcG9uc2VTZWN1cml0eUhlYWRlcnNCZWhhdmlvciAmIHtcbiAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k/OiBjbG91ZGZyb250LlJlc3BvbnNlU2VjdXJpdHlIZWFkZXJzQmVoYXZpb3JbXCJjb250ZW50U2VjdXJpdHlQb2xpY3lcIl0gJiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gb25seSBtb25pdG9yIHRoZSBlZmZlY3RzIG9mIHRoZSBjb250ZW50IHNlY3VyaXR5IHBvbGljeSB3aXRob3V0IGFjdHVhbGx5IGJsb2NraW5nIGFueXRoaW5nLlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgcmVwb3J0T25seT86IGJvb2xlYW5cbiAgICB9XG4gIH1cbj5cblxuZXhwb3J0IGludGVyZmFjZSBDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXIge1xuICBiYXNlVXJpPzogc3RyaW5nXG4gIGNoaWxkU3JjPzogc3RyaW5nXG4gIGRlZmF1bHRTcmM/OiBzdHJpbmdcbiAgZm9udFNyYz86IHN0cmluZ1xuICBmcmFtZVNyYz86IHN0cmluZ1xuICBmb3JtQWN0aW9uPzogc3RyaW5nXG4gIGZyYW1lQW5jZXN0b3JzPzogc3RyaW5nXG4gIGltZ1NyYz86IHN0cmluZ1xuICBtYW5pZmVzdFNyYz86IHN0cmluZ1xuICBtZWRpYVNyYz86IHN0cmluZ1xuICBvYmplY3RTcmM/OiBzdHJpbmdcbiAgc2NyaXB0U3JjPzogc3RyaW5nXG4gIHN0eWxlU3JjPzogc3RyaW5nXG4gIGNvbm5lY3RTcmM/OiBzdHJpbmdcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDc3BQYXJhbShwYXJhbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHBhcmFtLmluZGV4T2YoJ1wiJykgIT09IC0xKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0NTUCBvdmVycmlkZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlciBcIicpXG4gIH1cblxuICBpZiAocGFyYW0uaW5kZXhPZihcIjtcIikgIT09IC0xKSB7XG4gICAgdGhyb3cgRXJyb3IoXCJDU1Agb3ZlcnJpZGUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgO1wiKVxuICB9XG5cbiAgaWYgKHBhcmFtLmluZGV4T2YoXCJcXFxcXCIpICE9PSAtMSkge1xuICAgIHRocm93IEVycm9yKFwiQ1NQIG92ZXJyaWRlIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyIFxcXFxcIilcbiAgfVxuXG4gIHJldHVybiBwYXJhbVxufVxuXG4vKiBSZXBsYWNlIGFsbCB3aGl0ZXNwYWNlIGluIGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgc3BhY2UgKi9cbmZ1bmN0aW9uIHRyaW0odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKS50cmltKClcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHRoYXQgY2FuIGJlXG4gKiB1c2VkIGluIGEgc2VjdXJpdHkgaGVhZGVyLlxuICpcbiAqIE5PVEU6IFRoZSBzdHJpbmcgY2FuIGJlIGZ1cnRoZXIgZXh0ZW5kZWQgdXNpbmcgc3RyaW5nIGNvbmNhdGVuYXRpb24gZm9yIGRpcmVjdGl2ZXMgdGhhdCBhcmVuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSB0aGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlcihcbiAgaGVhZGVyT3B0aW9ucz86IENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlcixcbikge1xuICBjb25zdCBkZWZhdWx0VmFsdWVzID0ge1xuICAgIGJhc2VVcmk6IFwiJ3NlbGYnXCIsXG4gICAgY2hpbGRTcmM6IFwiJ3NlbGYnXCIsXG4gICAgY29ubmVjdFNyYzogXCInc2VsZicgaHR0cHM6XCIsXG4gICAgZGVmYXVsdFNyYzogXCInbm9uZSdcIixcbiAgICBmb250U3JjOiBcIidzZWxmJ1wiLFxuICAgIGZvcm1BY3Rpb246IFwiJ25vbmUnXCIsXG4gICAgZnJhbWVBbmNlc3RvcnM6IFwiJ25vbmUnXCIsXG4gICAgZnJhbWVTcmM6IFwiJ3NlbGYnXCIsXG4gICAgaW1nU3JjOiBcIidzZWxmJyBkYXRhOlwiLFxuICAgIG1hbmlmZXN0U3JjOiBcIidzZWxmJ1wiLFxuICAgIG1lZGlhU3JjOiBcIidzZWxmJ1wiLFxuICAgIG9iamVjdFNyYzogXCInbm9uZSdcIixcbiAgICBzY3JpcHRTcmM6IFwiJ3NlbGYnXCIsXG4gICAgc3R5bGVTcmM6IFwiJ3NlbGYnXCIsXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC4uLmRlZmF1bHRWYWx1ZXMsXG4gICAgLi4uaGVhZGVyT3B0aW9ucyxcbiAgfVxuXG4gIE9iamVjdC52YWx1ZXMob3B0aW9ucykuZm9yRWFjaChcbiAgICAodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdmFsaWRhdGVDc3BQYXJhbSh2KSxcbiAgKVxuXG4gIGxldCBoZWFkZXJWYWx1ZSA9IFwiXCJcbiAgaGVhZGVyVmFsdWUgKz0gYGJhc2UtdXJpICR7dHJpbShvcHRpb25zLmJhc2VVcmkpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBjaGlsZC1zcmMgJHt0cmltKG9wdGlvbnMuY2hpbGRTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBjb25uZWN0LXNyYyAke3RyaW0ob3B0aW9ucy5jb25uZWN0U3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgZGVmYXVsdC1zcmMgJHt0cmltKG9wdGlvbnMuZGVmYXVsdFNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYGZvbnQtc3JjICR7dHJpbShvcHRpb25zLmZvbnRTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBmcmFtZS1zcmMgJHt0cmltKG9wdGlvbnMuZnJhbWVTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBpbWctc3JjICR7dHJpbShvcHRpb25zLmltZ1NyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYG1hbmlmZXN0LXNyYyAke3RyaW0ob3B0aW9ucy5tYW5pZmVzdFNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYG1lZGlhLXNyYyAke3RyaW0ob3B0aW9ucy5tZWRpYVNyYyl9O2BcbiAgaGVhZGVyVmFsdWUgKz0gYG9iamVjdC1zcmMgJHt0cmltKG9wdGlvbnMub2JqZWN0U3JjKX07YFxuICBoZWFkZXJWYWx1ZSArPSBgc2NyaXB0LXNyYyAke3RyaW0ob3B0aW9ucy5zY3JpcHRTcmMpfTtgXG4gIGhlYWRlclZhbHVlICs9IGBzdHlsZS1zcmMgJHt0cmltKG9wdGlvbnMuc3R5bGVTcmMpfWBcblxuICByZXR1cm4gdHJpbShoZWFkZXJWYWx1ZSlcbn1cbmV4cG9ydCBjbGFzcyBXZWJhcHBTZWN1cml0eUhlYWRlcnMgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZUhlYWRlcnNQb2xpY3k6IGNsb3VkZnJvbnQuUmVzcG9uc2VIZWFkZXJzUG9saWN5XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IFdlYmFwcFNlY3VyaXR5SGVhZGVyc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICBjb25zdCB7XG4gICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IGNvbnRlbnRTZWN1cml0eVBvbGljeU92ZXJyaWRlLFxuICAgICAgLi4ub3ZlcnJpZGVzXG4gICAgfSA9IHByb3BzXG5cbiAgICBjb25zdCBjb250ZW50U2VjdXJpdHlQb2xpY3lDdXN0b21IZWFkZXIgPSBjb250ZW50U2VjdXJpdHlQb2xpY3lPdmVycmlkZSB8fCB7XG4gICAgICByZXBvcnRPbmx5OiBmYWxzZSxcbiAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeTogZ2VuZXJhdGVDb250ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXIoKSxcbiAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXM6IE9taXQ8XG4gICAgICBjbG91ZGZyb250LlJlc3BvbnNlU2VjdXJpdHlIZWFkZXJzQmVoYXZpb3IsXG4gICAgICBcImNvbnRlbnRTZWN1cml0eVBvbGljeVwiXG4gICAgPiA9IHtcbiAgICAgIGNvbnRlbnRUeXBlT3B0aW9uczoge1xuICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICByZWZlcnJlclBvbGljeToge1xuICAgICAgICBvdmVycmlkZTogdHJ1ZSxcbiAgICAgICAgcmVmZXJyZXJQb2xpY3k6IGNsb3VkZnJvbnQuSGVhZGVyc1JlZmVycmVyUG9saWN5LlNBTUVfT1JJR0lOLFxuICAgICAgfSxcbiAgICAgIGZyYW1lT3B0aW9uczoge1xuICAgICAgICBmcmFtZU9wdGlvbjogY2xvdWRmcm9udC5IZWFkZXJzRnJhbWVPcHRpb24uREVOWSxcbiAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgc3RyaWN0VHJhbnNwb3J0U2VjdXJpdHk6IHtcbiAgICAgICAgb3ZlcnJpZGU6IHRydWUsXG4gICAgICAgIGFjY2Vzc0NvbnRyb2xNYXhBZ2U6IGNkay5EdXJhdGlvbi5kYXlzKDE4Mi41KSxcbiAgICAgICAgaW5jbHVkZVN1YmRvbWFpbnM6IGZhbHNlLFxuICAgICAgICBwcmVsb2FkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB4c3NQcm90ZWN0aW9uOiB7XG4gICAgICAgIG92ZXJyaWRlOiB0cnVlLFxuICAgICAgICBwcm90ZWN0aW9uOiB0cnVlLFxuICAgICAgICBtb2RlQmxvY2s6IHRydWUsXG4gICAgICB9LFxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gbmV3IGNsb3VkZnJvbnQuUmVzcG9uc2VIZWFkZXJzUG9saWN5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzcG9uc2VIZWFkZXJzUG9saWN5XCIsXG4gICAgICB7XG4gICAgICAgIHNlY3VyaXR5SGVhZGVyc0JlaGF2aW9yOiB7XG4gICAgICAgICAgLi4uZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgICAgLi4uKCFjb250ZW50U2VjdXJpdHlQb2xpY3lDdXN0b21IZWFkZXIucmVwb3J0T25seSAmJiB7XG4gICAgICAgICAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IHtcbiAgICAgICAgICAgICAgY29udGVudFNlY3VyaXR5UG9saWN5OlxuICAgICAgICAgICAgICAgIGNvbnRlbnRTZWN1cml0eVBvbGljeUN1c3RvbUhlYWRlci5jb250ZW50U2VjdXJpdHlQb2xpY3ksXG4gICAgICAgICAgICAgIG92ZXJyaWRlOiBjb250ZW50U2VjdXJpdHlQb2xpY3lDdXN0b21IZWFkZXIub3ZlcnJpZGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICAuLi4oY29udGVudFNlY3VyaXR5UG9saWN5Q3VzdG9tSGVhZGVyLnJlcG9ydE9ubHkgJiYge1xuICAgICAgICAgIGN1c3RvbUhlYWRlcnNCZWhhdmlvcjoge1xuICAgICAgICAgICAgLy8gUmVwb3J0IG9ubHkgaXMgbm90IHN1cHBvcnRlZCBieSBzZWN1cml0eUhlYWRlcnNCZWhhdmlvciBpbiBBV1MgYW5kIG11c3QgYmUgZGVmaW5lZCBhcyBjdXN0b20gaGVhZGVyXG4gICAgICAgICAgICBjdXN0b21IZWFkZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IFwiQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHlcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29udGVudFNlY3VyaXR5UG9saWN5Q3VzdG9tSGVhZGVyLmNvbnRlbnRTZWN1cml0eVBvbGljeSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZTogY29udGVudFNlY3VyaXR5UG9saWN5Q3VzdG9tSGVhZGVyLm92ZXJyaWRlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKVxuICB9XG59XG4iXX0=
@@ -5,7 +5,7 @@ import * as origins from "aws-cdk-lib/aws-cloudfront-origins";
5
5
  import * as r53 from "aws-cdk-lib/aws-route53";
6
6
  import * as s3 from "aws-cdk-lib/aws-s3";
7
7
  import * as webappDeploy from "@capraconsulting/webapp-deploy-lambda";
8
- import { SecurityHeaders } from "./security-headers";
8
+ import { WebappSecurityHeadersProps } from "./security-headers";
9
9
  export interface WebappProps {
10
10
  /**
11
11
  * ACM certificate that covers the specifeid domain names.
@@ -42,27 +42,44 @@ export interface WebappProps {
42
42
  */
43
43
  webAclErrorPagePath?: string;
44
44
  /**
45
- * Enable adding common security headers to CloudFront responses using a CloudFront Function.
46
- *
47
- * If enabled, the default behavior is to add the following headers with fairly strict defaults. Most of the headers can be customized:
48
- * - Content-Security-Policy
49
- * - Referrer-Policy
50
- * - Strict-Transport-Security
51
- * - X-Content-Type-Options
52
- * - X-Frame-Options
53
- * - X-XSS-Protection
54
- *
55
- * @default - No security headers will be added to responses
45
+ * Enable, disable or configure security headers for the web application
46
+ * @default - a set of strict security headers are configured by default
56
47
  */
57
- enableSecurityHeaders?: boolean;
48
+ securityHeaders?: {
49
+ /**
50
+ * Enable adding common security headers to CloudFront responses
51
+ *
52
+ * If enabled, the default behavior is to add the following headers with fairly strict defaults. Most of the headers can be customized:
53
+ * - Content-Security-Policy
54
+ * - Referrer-Policy
55
+ * - Strict-Transport-Security
56
+ * - X-Content-Type-Options
57
+ * - X-Frame-Options
58
+ * - X-XSS-Protection
59
+ *
60
+ *
61
+ * @default true
62
+ */
63
+ enabled?: boolean;
64
+ /**
65
+ * Security headers overrides.
66
+ *
67
+ * Used to override certain default security header values if the webapp requires different settings than the defaults.
68
+ *
69
+ * NOTE: If you need to disable certain headers, you must explicitly set them to undefined
70
+ *
71
+ * @default - A set of strict security header values will be used
72
+ */
73
+ behaviorOverrides?: WebappSecurityHeadersProps;
74
+ };
58
75
  /**
59
- * Security headers overrides.
76
+ * Cloudfront behavior overrides.
60
77
  *
61
- * Used to override certain security header values if the webapp requires more lax settings compared to the defaults.
78
+ * Used to override cloudfront behavior
62
79
  *
63
- * @default - A set of strict security header values will be used
80
+ * NOTE: ResponseHeadersPolicy defined here will overwrite BOTH the default security headers policy and
81
+ * any values specified in securityHeaders.behaviorOverrides.
64
82
  */
65
- securityHeadersOverrides?: SecurityHeaders;
66
83
  overrideCloudFrontBehaviourOptions?: Partial<cloudfront.BehaviorOptions>;
67
84
  }
68
85
  /**
@@ -19,6 +19,7 @@ const security_headers_1 = require("./security-headers");
19
19
  */
20
20
  class Webapp extends constructs.Construct {
21
21
  constructor(scope, id, props) {
22
+ var _a, _b, _c;
22
23
  super(scope, id);
23
24
  if (props.webAclErrorPagePath != null && props.webAclId == null) {
24
25
  throw new Error("webAclErrorPagePath set but webAclId is missing");
@@ -62,23 +63,18 @@ class Webapp extends constructs.Construct {
62
63
  responsePagePath: props.webAclErrorPagePath,
63
64
  });
64
65
  }
65
- let functionAssociations;
66
- if (props.enableSecurityHeaders) {
66
+ let responseHeadersPolicy;
67
+ if ((_b = (_a = props.securityHeaders) === null || _a === void 0 ? void 0 : _a.enabled) !== null && _b !== void 0 ? _b : true) {
67
68
  const securityHeaders = new security_headers_1.WebappSecurityHeaders(this, "SecurityHeaders", {
68
- ...props.securityHeadersOverrides,
69
+ ...(_c = props.securityHeaders) === null || _c === void 0 ? void 0 : _c.behaviorOverrides,
69
70
  });
70
- functionAssociations = [
71
- {
72
- function: securityHeaders.securityHeadersFunction,
73
- eventType: cloudfront.FunctionEventType.VIEWER_RESPONSE,
74
- },
75
- ];
71
+ responseHeadersPolicy = securityHeaders.responseHeadersPolicy;
76
72
  }
77
73
  this.distribution = new cloudfront.Distribution(this, "Distribution", {
78
74
  defaultBehavior: {
79
75
  origin: this.webappOrigin,
80
76
  viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
81
- functionAssociations: functionAssociations,
77
+ responseHeadersPolicy: responseHeadersPolicy,
82
78
  ...props.overrideCloudFrontBehaviourOptions,
83
79
  },
84
80
  defaultRootObject: "index.html",
@@ -118,4 +114,4 @@ class Webapp extends constructs.Construct {
118
114
  }
119
115
  }
120
116
  exports.Webapp = Webapp;
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYmFwcC93ZWJhcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBRXhDLHlEQUF3RDtBQUN4RCw4REFBNkQ7QUFDN0QsMkNBQTBDO0FBQzFDLCtDQUE4QztBQUM5Qyx3REFBdUQ7QUFDdkQseUNBQXdDO0FBQ3hDLHNFQUFxRTtBQUNyRSx5REFBMkU7QUE4RDNFOzs7Ozs7R0FNRztBQUNILE1BQWEsTUFBTyxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBSzlDLFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBa0I7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO1NBQ25FO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNoRCxVQUFVLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFVBQVU7U0FDM0MsQ0FBQyxDQUFBO1FBRUYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsQ0FDOUQsSUFBSSxFQUNKLHNCQUFzQixDQUN2QixDQUFBO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FDbkMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3RCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUN6QixVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUM7U0FDbEQs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LENBQUUsZ0JBQWdCLG1DQUFJLEtBQUssQ0FBQTtRQUV6RCxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUM1QyxNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM1QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDekQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBeklELHdCQXlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0ICogYXMgY2VydGlmaWNhdGVtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyXCJcbmltcG9ydCAqIGFzIGNsb3VkZnJvbnQgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCJcbmltcG9ydCAqIGFzIG9yaWdpbnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250LW9yaWdpbnNcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIHI1MyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTNcIlxuaW1wb3J0ICogYXMgcjUzdCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJvdXRlNTMtdGFyZ2V0c1wiXG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCJcbmltcG9ydCAqIGFzIHdlYmFwcERlcGxveSBmcm9tIFwiQGNhcHJhY29uc3VsdGluZy93ZWJhcHAtZGVwbG95LWxhbWJkYVwiXG5pbXBvcnQgeyBXZWJhcHBTZWN1cml0eUhlYWRlcnMsIFNlY3VyaXR5SGVhZGVycyB9IGZyb20gXCIuL3NlY3VyaXR5LWhlYWRlcnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmFwcFByb3BzIHtcbiAgLyoqXG4gICAqIEFDTSBjZXJ0aWZpY2F0ZSB0aGF0IGNvdmVycyB0aGUgc3BlY2lmZWlkIGRvbWFpbiBuYW1lcy5cbiAgICpcbiAgICogVGhpcyBjZXJ0aWZpY2F0ZSBtdXN0IGJlIGNyZWF0ZWQgaW4gdGhlIHJlZ2lvbiB1cy1lYXN0LTEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIENsb3VkRnJvbnQgd2lsZGNhcmQgY2VydGlmaWNhdGUgKCouY2xvdWRmcm9udC5uZXQpIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIGNsb3VkZnJvbnRDZXJ0aWZpY2F0ZT86IGNlcnRpZmljYXRlbWFuYWdlci5JQ2VydGlmaWNhdGVcbiAgLyoqXG4gICAqIExpc3Qgb2YgZG9tYWluIG5hbWVzIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBzaG91bGQgdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEdlbmVyYXRlZCBuYW1lIChlLmcuLCBkMTExMTExYWJjZGVmOC5jbG91ZGZyb250Lm5ldClcbiAgICovXG4gIGRvbWFpbk5hbWVzPzogc3RyaW5nW11cbiAgLyoqXG4gICAqIEFXUyBXQUYgd2ViIEFDTCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFRvIHNwZWNpZnkgYSB3ZWIgQUNMIGNyZWF0ZWQgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEFXUyBXQUYsIHVzZSB0aGUgQUNMIEFSTiwgZm9yIGV4YW1wbGVcbiAgICogYGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL0V4YW1wbGVXZWJBQ0wvNDczZTY0ZmQtZjMwYi00NzY1LTgxYTAtNjJhZDk2ZGQxNjdhYC5cbiAgICogVG8gc3BlY2lmeSBhIHdlYiBBQ0wgY3JlYXRlZCB1c2luZyBBV1MgV0FGIENsYXNzaWMsIHVzZSB0aGUgQUNMIElELCBmb3IgZXhhbXBsZSBgNDczZTY0ZmQtZjMwYi00NzY1LTgxYTAtNjJhZDk2ZGQxNjdhYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBBV1MgV2ViIEFwcGxpY2F0aW9uIEZpcmV3YWxsIHdlYiBhY2Nlc3MgY29udHJvbCBsaXN0ICh3ZWIgQUNMKS5cbiAgICovXG4gIHdlYkFjbElkPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgcGFnZSB0aGF0IHdpbGwgYmUgc2VydmVkIGZvciB1c2VycyBub3QgYWxsb3dlZCB0byBhY2Nlc3NcbiAgICogdGhlIHNpdGUgd2hlbiB1c2luZyBXQUYuIEUuZy4gXCIvNHh4LWVycm9ycy80MDMtZm9yYmlkZGVuLmh0bWxcIi5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsIGNhdGNoIGFueSA0MDMgZXJyb3JzIGZyb20gdGhlIG9yaWdpbihzKSwgdGhhdCBtaWdodFxuICAgKiBjb3ZlciBhbnkgb3RoZXIgYmVoYXZpb3JzIGlzIGFkZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGN1c3RvbSBwYWdlIGZvciA0MDMgZXJyb3JzLlxuICAgKi9cbiAgd2ViQWNsRXJyb3JQYWdlUGF0aD86IHN0cmluZ1xuICAvKipcbiAgICogRW5hYmxlIGFkZGluZyBjb21tb24gc2VjdXJpdHkgaGVhZGVycyB0byBDbG91ZEZyb250IHJlc3BvbnNlcyB1c2luZyBhIENsb3VkRnJvbnQgRnVuY3Rpb24uXG4gICAqXG4gICAqIElmIGVuYWJsZWQsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGFkZCB0aGUgZm9sbG93aW5nIGhlYWRlcnMgd2l0aCBmYWlybHkgc3RyaWN0IGRlZmF1bHRzLiBNb3N0IG9mIHRoZSBoZWFkZXJzIGNhbiBiZSBjdXN0b21pemVkOlxuICAgKiAtIENvbnRlbnQtU2VjdXJpdHktUG9saWN5XG4gICAqIC0gUmVmZXJyZXItUG9saWN5XG4gICAqIC0gU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eVxuICAgKiAtIFgtQ29udGVudC1UeXBlLU9wdGlvbnNcbiAgICogLSBYLUZyYW1lLU9wdGlvbnNcbiAgICogLSBYLVhTUy1Qcm90ZWN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc2VjdXJpdHkgaGVhZGVycyB3aWxsIGJlIGFkZGVkIHRvIHJlc3BvbnNlc1xuICAgKi9cbiAgZW5hYmxlU2VjdXJpdHlIZWFkZXJzPzogYm9vbGVhblxuICAvKipcbiAgICogU2VjdXJpdHkgaGVhZGVycyBvdmVycmlkZXMuXG4gICAqXG4gICAqIFVzZWQgdG8gb3ZlcnJpZGUgY2VydGFpbiBzZWN1cml0eSBoZWFkZXIgdmFsdWVzIGlmIHRoZSB3ZWJhcHAgcmVxdWlyZXMgbW9yZSBsYXggc2V0dGluZ3MgY29tcGFyZWQgdG8gdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgc2V0IG9mIHN0cmljdCBzZWN1cml0eSBoZWFkZXIgdmFsdWVzIHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgc2VjdXJpdHlIZWFkZXJzT3ZlcnJpZGVzPzogU2VjdXJpdHlIZWFkZXJzXG4gIG92ZXJyaWRlQ2xvdWRGcm9udEJlaGF2aW91ck9wdGlvbnM/OiBQYXJ0aWFsPGNsb3VkZnJvbnQuQmVoYXZpb3JPcHRpb25zPlxufVxuXG4vKipcbiAqIENsb3VkRnJvbnQgZm9yIGEgU2luZ2xlLVBhZ2UtQXBwbGljYXRpb24uXG4gKlxuICogQSBidWNrZXQgd2lsbCBiZSBjcmVhdGVkIGFuZCBpdHMgcHJlZml4IFwid2ViXCIgaXMgdXNlZCB0b1xuICogc2VydmUgZmlsZXMuIFVzZSB0aGUgYWRkRGVwbG95bWVudCBtZXRob2QgdG8gYXV0b21hdGljYWxseVxuICogZGVwbG95IGZpbGVzIGFzIHBhcnQgdGhlIHRoZSBDREsgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYmFwcCBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogY2xvdWRmcm9udC5EaXN0cmlidXRpb25cbiAgcHVibGljIHJlYWRvbmx5IHdlYmFwcEJ1Y2tldDogczMuQnVja2V0XG4gIHB1YmxpYyByZWFkb25seSB3ZWJhcHBPcmlnaW46IG9yaWdpbnMuUzNPcmlnaW5cblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXZWJhcHBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIGlmIChwcm9wcy53ZWJBY2xFcnJvclBhZ2VQYXRoICE9IG51bGwgJiYgcHJvcHMud2ViQWNsSWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwid2ViQWNsRXJyb3JQYWdlUGF0aCBzZXQgYnV0IHdlYkFjbElkIGlzIG1pc3NpbmdcIilcbiAgICB9XG5cbiAgICB0aGlzLndlYmFwcEJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgXCJCdWNrZXRcIiwge1xuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIH0pXG5cbiAgICBjb25zdCBvcmlnaW5BY2Nlc3NJZGVudGl0eSA9IG5ldyBjbG91ZGZyb250Lk9yaWdpbkFjY2Vzc0lkZW50aXR5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiT3JpZ2luQWNjZXNzSWRlbnRpdHlcIixcbiAgICApXG5cbiAgICB0aGlzLndlYmFwcEJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLndlYmFwcEJ1Y2tldC5hcm5Gb3JPYmplY3RzKFwiKlwiKV0sXG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldE9iamVjdFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW29yaWdpbkFjY2Vzc0lkZW50aXR5LmdyYW50UHJpbmNpcGFsXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIHRoaXMud2ViYXBwQnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHJlc291cmNlczogW3RoaXMud2ViYXBwQnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgIC8vIEdyYW50IHMzOkxpc3RCdWNrZXQgc28gdGhhdCBDbG91ZEZyb250IHJlY2VpdmVzIDQwNCBmcm9tXG4gICAgICAgIC8vIHRoZSBvcmlnaW4gcmF0aGVyIHRoYW4gNDAzIHdoZW4gYWNjZXNzaW5nIGZpbGVzIHRoYXRcbiAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QuIFdlIGNhbm5vdCBmYWxsYmFjayB0byBpbmRleC5odG1sIGZvciA0MDNcbiAgICAgICAgLy8gZXJyb3JzIHNpbmNlIGl0IHdvdWxkIGFsc28gYmUgc2VydmVkIGlmIHVzaW5nIGEgV0FGLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9wcmVtaXVtc3VwcG9ydC9rbm93bGVkZ2UtY2VudGVyL3MzLXdlYnNpdGUtY2xvdWRmcm9udC1lcnJvci00MDMvI1RoZV9yZXF1ZXN0ZWRfb2JqZWN0c19tdXN0X2V4aXN0X2luX3RoZV9idWNrZXRcbiAgICAgICAgYWN0aW9uczogW1wiczM6TGlzdEJ1Y2tldFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW29yaWdpbkFjY2Vzc0lkZW50aXR5LmdyYW50UHJpbmNpcGFsXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIHRoaXMud2ViYXBwT3JpZ2luID0gbmV3IG9yaWdpbnMuUzNPcmlnaW4odGhpcy53ZWJhcHBCdWNrZXQsIHtcbiAgICAgIC8vIHdlYmFwcC1kZXBsb3ktbGFtYmRhIHdpbGwgdXBsb2FkIGZpbGVzIHRvIHRoaXMgZm9sZGVyXG4gICAgICAvLyBzaW5jZSBpdCBrZWVwcyBzb21lIG90aGVyIGFkbWluaXN0cmF0aXZlIGZpbGVzIG91dHNpZGUuXG4gICAgICBvcmlnaW5QYXRoOiBcIi93ZWJcIixcbiAgICAgIG9yaWdpbkFjY2Vzc0lkZW50aXR5LFxuICAgIH0pXG5cbiAgICBjb25zdCBlcnJvclJlc3BvbnNlczogY2xvdWRmcm9udC5FcnJvclJlc3BvbnNlW10gPSBbXG4gICAgICB7XG4gICAgICAgIGh0dHBTdGF0dXM6IDQwNCxcbiAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IFwiL2luZGV4Lmh0bWxcIixcbiAgICAgIH0sXG4gICAgXVxuXG4gICAgaWYgKHByb3BzLndlYkFjbEVycm9yUGFnZVBhdGggIT0gbnVsbCkge1xuICAgICAgZXJyb3JSZXNwb25zZXMucHVzaCh7XG4gICAgICAgIGh0dHBTdGF0dXM6IDQwMyxcbiAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiA0MDMsXG4gICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6IHByb3BzLndlYkFjbEVycm9yUGFnZVBhdGgsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGxldCBmdW5jdGlvbkFzc29jaWF0aW9uczogY2xvdWRmcm9udC5GdW5jdGlvbkFzc29jaWF0aW9uW10gfCB1bmRlZmluZWRcbiAgICBpZiAocHJvcHMuZW5hYmxlU2VjdXJpdHlIZWFkZXJzKSB7XG4gICAgICBjb25zdCBzZWN1cml0eUhlYWRlcnMgPSBuZXcgV2ViYXBwU2VjdXJpdHlIZWFkZXJzKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNlY3VyaXR5SGVhZGVyc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucHJvcHMuc2VjdXJpdHlIZWFkZXJzT3ZlcnJpZGVzLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBmdW5jdGlvbjogc2VjdXJpdHlIZWFkZXJzLnNlY3VyaXR5SGVhZGVyc0Z1bmN0aW9uLFxuICAgICAgICAgIGV2ZW50VHlwZTogY2xvdWRmcm9udC5GdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVTUE9OU0UsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuXG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSBuZXcgY2xvdWRmcm9udC5EaXN0cmlidXRpb24odGhpcywgXCJEaXN0cmlidXRpb25cIiwge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogdGhpcy53ZWJhcHBPcmlnaW4sXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBjbG91ZGZyb250LlZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICBmdW5jdGlvbkFzc29jaWF0aW9uczogZnVuY3Rpb25Bc3NvY2lhdGlvbnMsXG4gICAgICAgIC4uLnByb3BzLm92ZXJyaWRlQ2xvdWRGcm9udEJlaGF2aW91ck9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdFJvb3RPYmplY3Q6IFwiaW5kZXguaHRtbFwiLFxuICAgICAgcHJpY2VDbGFzczogY2xvdWRmcm9udC5QcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jbG91ZGZyb250Q2VydGlmaWNhdGUsXG4gICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICBlcnJvclJlc3BvbnNlcyxcbiAgICAgIHdlYkFjbElkOiBwcm9wcy53ZWJBY2xJZCxcbiAgICB9KVxuICB9XG5cbiAgYWRkRG5zUmVjb3JkKGhvc3RlZFpvbmU6IHI1My5JSG9zdGVkWm9uZSwgZG9tYWluTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IHI1My5BUmVjb3JkKHRoaXMsIGBEbnNSZWNvcmQke2RvbWFpbk5hbWV9YCwge1xuICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgIHJlY29yZE5hbWU6IGAke2RvbWFpbk5hbWV9LmAsXG4gICAgICB0YXJnZXQ6IHI1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgcjUzdC5DbG91ZEZyb250VGFyZ2V0KHRoaXMuZGlzdHJpYnV0aW9uKSxcbiAgICAgICksXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkZXBsb3ltZW50IHVzaW5nIHdlYmFwcC1kZXBsb3ktbGFtYmRhLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhcHJhY29uc3VsdGluZy93ZWJhcHAtZGVwbG95LWxhbWJkYVxuICAgKiBmb3IgZGV0YWlscyBhYm91dCBob3cgdGhpcyB3b3Jrcy5cbiAgICovXG4gIGFkZERlcGxveW1lbnQoXG4gICAgLyoqXG4gICAgICogVGhlIGRlcGxveW1lbnQgc291cmNlLlxuICAgICAqL1xuICAgIHNvdXJjZTogd2ViYXBwRGVwbG95LklTb3VyY2UsXG4gICAgcHJvcHM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIEluY2x1ZGUgc291cmNlIG1hcHMgaW4gdGhlIGRlcGxveW1lbnQuXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZGVwbG95U291cmNlTWFwcz86IGJvb2xlYW5cbiAgICB9LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkZXBsb3lTb3VyY2VNYXBzID0gcHJvcHM/LmRlcGxveVNvdXJjZU1hcHMgPz8gZmFsc2VcblxuICAgIG5ldyB3ZWJhcHBEZXBsb3kuV2ViYXBwRGVwbG95KHRoaXMsIFwiRGVwbG95XCIsIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgd2ViQnVja2V0OiB0aGlzLndlYmFwcEJ1Y2tldCxcbiAgICAgIGRpc3RyaWJ1dGlvbjogdGhpcy5kaXN0cmlidXRpb24sXG4gICAgICBleGNsdWRlUGF0dGVybjogZGVwbG95U291cmNlTWFwcyA/IHVuZGVmaW5lZCA6IFwiXFxcXC5tYXAkXCIsXG4gICAgfSlcbiAgfVxufVxuIl19
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dlYmFwcC93ZWJhcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXdDO0FBRXhDLHlEQUF3RDtBQUN4RCw4REFBNkQ7QUFDN0QsMkNBQTBDO0FBQzFDLCtDQUE4QztBQUM5Qyx3REFBdUQ7QUFDdkQseUNBQXdDO0FBQ3hDLHNFQUFxRTtBQUNyRSx5REFHMkI7QUErRTNCOzs7Ozs7R0FNRztBQUNILE1BQWEsTUFBTyxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBSzlDLFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBa0I7O1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQy9ELE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQTtTQUNuRTtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDaEQsVUFBVSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVO1NBQzNDLENBQUMsQ0FBQTtRQUVGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQzlELElBQUksRUFDSixzQkFBc0IsQ0FDdkIsQ0FBQTtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQ25DLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7WUFDekIsVUFBVSxFQUFFLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDO1NBQ2xE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RXpELElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQzVDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzVCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUN6RCxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFySUQsd0JBcUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgKiBhcyBjZXJ0aWZpY2F0ZW1hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXJcIlxuaW1wb3J0ICogYXMgY2xvdWRmcm9udCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIlxuaW1wb3J0ICogYXMgb3JpZ2lucyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2luc1wiXG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIlxuaW1wb3J0ICogYXMgcjUzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1M1wiXG5pbXBvcnQgKiBhcyByNTN0IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzXCJcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIlxuaW1wb3J0ICogYXMgd2ViYXBwRGVwbG95IGZyb20gXCJAY2FwcmFjb25zdWx0aW5nL3dlYmFwcC1kZXBsb3ktbGFtYmRhXCJcbmltcG9ydCB7XG4gIFdlYmFwcFNlY3VyaXR5SGVhZGVycyxcbiAgV2ViYXBwU2VjdXJpdHlIZWFkZXJzUHJvcHMsXG59IGZyb20gXCIuL3NlY3VyaXR5LWhlYWRlcnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYmFwcFByb3BzIHtcbiAgLyoqXG4gICAqIEFDTSBjZXJ0aWZpY2F0ZSB0aGF0IGNvdmVycyB0aGUgc3BlY2lmZWlkIGRvbWFpbiBuYW1lcy5cbiAgICpcbiAgICogVGhpcyBjZXJ0aWZpY2F0ZSBtdXN0IGJlIGNyZWF0ZWQgaW4gdGhlIHJlZ2lvbiB1cy1lYXN0LTEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIENsb3VkRnJvbnQgd2lsZGNhcmQgY2VydGlmaWNhdGUgKCouY2xvdWRmcm9udC5uZXQpIHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIGNsb3VkZnJvbnRDZXJ0aWZpY2F0ZT86IGNlcnRpZmljYXRlbWFuYWdlci5JQ2VydGlmaWNhdGVcbiAgLyoqXG4gICAqIExpc3Qgb2YgZG9tYWluIG5hbWVzIHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBzaG91bGQgdXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEdlbmVyYXRlZCBuYW1lIChlLmcuLCBkMTExMTExYWJjZGVmOC5jbG91ZGZyb250Lm5ldClcbiAgICovXG4gIGRvbWFpbk5hbWVzPzogc3RyaW5nW11cbiAgLyoqXG4gICAqIEFXUyBXQUYgd2ViIEFDTCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFRvIHNwZWNpZnkgYSB3ZWIgQUNMIGNyZWF0ZWQgdXNpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEFXUyBXQUYsIHVzZSB0aGUgQUNMIEFSTiwgZm9yIGV4YW1wbGVcbiAgICogYGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL0V4YW1wbGVXZWJBQ0wvNDczZTY0ZmQtZjMwYi00NzY1LTgxYTAtNjJhZDk2ZGQxNjdhYC5cbiAgICogVG8gc3BlY2lmeSBhIHdlYiBBQ0wgY3JlYXRlZCB1c2luZyBBV1MgV0FGIENsYXNzaWMsIHVzZSB0aGUgQUNMIElELCBmb3IgZXhhbXBsZSBgNDczZTY0ZmQtZjMwYi00NzY1LTgxYTAtNjJhZDk2ZGQxNjdhYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBBV1MgV2ViIEFwcGxpY2F0aW9uIEZpcmV3YWxsIHdlYiBhY2Nlc3MgY29udHJvbCBsaXN0ICh3ZWIgQUNMKS5cbiAgICovXG4gIHdlYkFjbElkPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgcGFnZSB0aGF0IHdpbGwgYmUgc2VydmVkIGZvciB1c2VycyBub3QgYWxsb3dlZCB0byBhY2Nlc3NcbiAgICogdGhlIHNpdGUgd2hlbiB1c2luZyBXQUYuIEUuZy4gXCIvNHh4LWVycm9ycy80MDMtZm9yYmlkZGVuLmh0bWxcIi5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsIGNhdGNoIGFueSA0MDMgZXJyb3JzIGZyb20gdGhlIG9yaWdpbihzKSwgdGhhdCBtaWdodFxuICAgKiBjb3ZlciBhbnkgb3RoZXIgYmVoYXZpb3JzIGlzIGFkZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGN1c3RvbSBwYWdlIGZvciA0MDMgZXJyb3JzLlxuICAgKi9cbiAgd2ViQWNsRXJyb3JQYWdlUGF0aD86IHN0cmluZ1xuICAvKipcbiAgICogIEVuYWJsZSwgZGlzYWJsZSBvciBjb25maWd1cmUgc2VjdXJpdHkgaGVhZGVycyBmb3IgdGhlIHdlYiBhcHBsaWNhdGlvblxuICAgKiBAZGVmYXVsdCAtIGEgc2V0IG9mIHN0cmljdCBzZWN1cml0eSBoZWFkZXJzIGFyZSBjb25maWd1cmVkIGJ5IGRlZmF1bHRcbiAgICovXG4gIHNlY3VyaXR5SGVhZGVycz86IHtcbiAgICAvKipcbiAgICAgKiBFbmFibGUgYWRkaW5nIGNvbW1vbiBzZWN1cml0eSBoZWFkZXJzIHRvIENsb3VkRnJvbnQgcmVzcG9uc2VzXG4gICAgICpcbiAgICAgKiBJZiBlbmFibGVkLCB0aGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBhZGQgdGhlIGZvbGxvd2luZyBoZWFkZXJzIHdpdGggZmFpcmx5IHN0cmljdCBkZWZhdWx0cy4gTW9zdCBvZiB0aGUgaGVhZGVycyBjYW4gYmUgY3VzdG9taXplZDpcbiAgICAgKiAtIENvbnRlbnQtU2VjdXJpdHktUG9saWN5XG4gICAgICogLSBSZWZlcnJlci1Qb2xpY3lcbiAgICAgKiAtIFN0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHlcbiAgICAgKiAtIFgtQ29udGVudC1UeXBlLU9wdGlvbnNcbiAgICAgKiAtIFgtRnJhbWUtT3B0aW9uc1xuICAgICAqIC0gWC1YU1MtUHJvdGVjdGlvblxuICAgICAqXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTZWN1cml0eSBoZWFkZXJzIG92ZXJyaWRlcy5cbiAgICAgKlxuICAgICAqIFVzZWQgdG8gb3ZlcnJpZGUgY2VydGFpbiBkZWZhdWx0IHNlY3VyaXR5IGhlYWRlciB2YWx1ZXMgaWYgdGhlIHdlYmFwcCByZXF1aXJlcyBkaWZmZXJlbnQgc2V0dGluZ3MgdGhhbiB0aGUgZGVmYXVsdHMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBJZiB5b3UgbmVlZCB0byBkaXNhYmxlIGNlcnRhaW4gaGVhZGVycywgeW91IG11c3QgZXhwbGljaXRseSBzZXQgdGhlbSB0byB1bmRlZmluZWRcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IC0gQSBzZXQgb2Ygc3RyaWN0IHNlY3VyaXR5IGhlYWRlciB2YWx1ZXMgd2lsbCBiZSB1c2VkXG4gICAgICovXG4gICAgYmVoYXZpb3JPdmVycmlkZXM/OiBXZWJhcHBTZWN1cml0eUhlYWRlcnNQcm9wc1xuICB9XG4gIC8qKlxuICAgKiBDbG91ZGZyb250IGJlaGF2aW9yIG92ZXJyaWRlcy5cbiAgICpcbiAgICogVXNlZCB0byBvdmVycmlkZSBjbG91ZGZyb250IGJlaGF2aW9yXG4gICAqXG4gICAqIE5PVEU6IFJlc3BvbnNlSGVhZGVyc1BvbGljeSBkZWZpbmVkIGhlcmUgd2lsbCBvdmVyd3JpdGUgQk9USCB0aGUgZGVmYXVsdCBzZWN1cml0eSBoZWFkZXJzIHBvbGljeSBhbmRcbiAgICogYW55IHZhbHVlcyBzcGVjaWZpZWQgaW4gc2VjdXJpdHlIZWFkZXJzLmJlaGF2aW9yT3ZlcnJpZGVzLlxuICAgKi9cbiAgb3ZlcnJpZGVDbG91ZEZyb250QmVoYXZpb3VyT3B0aW9ucz86IFBhcnRpYWw8Y2xvdWRmcm9udC5CZWhhdmlvck9wdGlvbnM+XG59XG5cbi8qKlxuICogQ2xvdWRGcm9udCBmb3IgYSBTaW5nbGUtUGFnZS1BcHBsaWNhdGlvbi5cbiAqXG4gKiBBIGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQgYW5kIGl0cyBwcmVmaXggXCJ3ZWJcIiBpcyB1c2VkIHRvXG4gKiBzZXJ2ZSBmaWxlcy4gVXNlIHRoZSBhZGREZXBsb3ltZW50IG1ldGhvZCB0byBhdXRvbWF0aWNhbGx5XG4gKiBkZXBsb3kgZmlsZXMgYXMgcGFydCB0aGUgdGhlIENESyBkZXBsb3ltZW50LlxuICovXG5leHBvcnQgY2xhc3MgV2ViYXBwIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uOiBjbG91ZGZyb250LkRpc3RyaWJ1dGlvblxuICBwdWJsaWMgcmVhZG9ubHkgd2ViYXBwQnVja2V0OiBzMy5CdWNrZXRcbiAgcHVibGljIHJlYWRvbmx5IHdlYmFwcE9yaWdpbjogb3JpZ2lucy5TM09yaWdpblxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFdlYmFwcFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgaWYgKHByb3BzLndlYkFjbEVycm9yUGFnZVBhdGggIT0gbnVsbCAmJiBwcm9wcy53ZWJBY2xJZCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3ZWJBY2xFcnJvclBhZ2VQYXRoIHNldCBidXQgd2ViQWNsSWQgaXMgbWlzc2luZ1wiKVxuICAgIH1cblxuICAgIHRoaXMud2ViYXBwQnVja2V0ID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCBcIkJ1Y2tldFwiLCB7XG4gICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgfSlcblxuICAgIGNvbnN0IG9yaWdpbkFjY2Vzc0lkZW50aXR5ID0gbmV3IGNsb3VkZnJvbnQuT3JpZ2luQWNjZXNzSWRlbnRpdHkoXG4gICAgICB0aGlzLFxuICAgICAgXCJPcmlnaW5BY2Nlc3NJZGVudGl0eVwiLFxuICAgIClcblxuICAgIHRoaXMud2ViYXBwQnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHJlc291cmNlczogW3RoaXMud2ViYXBwQnVja2V0LmFybkZvck9iamVjdHMoXCIqXCIpXSxcbiAgICAgICAgYWN0aW9uczogW1wiczM6R2V0T2JqZWN0XCJdLFxuICAgICAgICBwcmluY2lwYWxzOiBbb3JpZ2luQWNjZXNzSWRlbnRpdHkuZ3JhbnRQcmluY2lwYWxdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgdGhpcy53ZWJhcHBCdWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy53ZWJhcHBCdWNrZXQuYnVja2V0QXJuXSxcbiAgICAgICAgLy8gR3JhbnQgczM6TGlzdEJ1Y2tldCBzbyB0aGF0IENsb3VkRnJvbnQgcmVjZWl2ZXMgNDA0IGZyb21cbiAgICAgICAgLy8gdGhlIG9yaWdpbiByYXRoZXIgdGhhbiA0MDMgd2hlbiBhY2Nlc3NpbmcgZmlsZXMgdGhhdFxuICAgICAgICAvLyBkb2VzIG5vdCBleGlzdC4gV2UgY2Fubm90IGZhbGxiYWNrIHRvIGluZGV4Lmh0bWwgZm9yIDQwM1xuICAgICAgICAvLyBlcnJvcnMgc2luY2UgaXQgd291bGQgYWxzbyBiZSBzZXJ2ZWQgaWYgdXNpbmcgYSBXQUYuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL3ByZW1pdW1zdXBwb3J0L2tub3dsZWRnZS1jZW50ZXIvczMtd2Vic2l0ZS1jbG91ZGZyb250LWVycm9yLTQwMy8jVGhlX3JlcXVlc3RlZF9vYmplY3RzX211c3RfZXhpc3RfaW5fdGhlX2J1Y2tldFxuICAgICAgICBhY3Rpb25zOiBbXCJzMzpMaXN0QnVja2V0XCJdLFxuICAgICAgICBwcmluY2lwYWxzOiBbb3JpZ2luQWNjZXNzSWRlbnRpdHkuZ3JhbnRQcmluY2lwYWxdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgdGhpcy53ZWJhcHBPcmlnaW4gPSBuZXcgb3JpZ2lucy5TM09yaWdpbih0aGlzLndlYmFwcEJ1Y2tldCwge1xuICAgICAgLy8gd2ViYXBwLWRlcGxveS1sYW1iZGEgd2lsbCB1cGxvYWQgZmlsZXMgdG8gdGhpcyBmb2xkZXJcbiAgICAgIC8vIHNpbmNlIGl0IGtlZXBzIHNvbWUgb3RoZXIgYWRtaW5pc3RyYXRpdmUgZmlsZXMgb3V0c2lkZS5cbiAgICAgIG9yaWdpblBhdGg6IFwiL3dlYlwiLFxuICAgICAgb3JpZ2luQWNjZXNzSWRlbnRpdHksXG4gICAgfSlcblxuICAgIGNvbnN0IGVycm9yUmVzcG9uc2VzOiBjbG91ZGZyb250LkVycm9yUmVzcG9uc2VbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgaHR0cFN0YXR1czogNDA0LFxuICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogXCIvaW5kZXguaHRtbFwiLFxuICAgICAgfSxcbiAgICBdXG5cbiAgICBpZiAocHJvcHMud2ViQWNsRXJyb3JQYWdlUGF0aCAhPSBudWxsKSB7XG4gICAgICBlcnJvclJlc3BvbnNlcy5wdXNoKHtcbiAgICAgICAgaHR0cFN0YXR1czogNDAzLFxuICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDQwMyxcbiAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogcHJvcHMud2ViQWNsRXJyb3JQYWdlUGF0aCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgbGV0IHJlc3BvbnNlSGVhZGVyc1BvbGljeTogY2xvdWRmcm9udC5JUmVzcG9uc2VIZWFkZXJzUG9saWN5IHwgdW5kZWZpbmVkXG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlIZWFkZXJzPy5lbmFibGVkID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IHNlY3VyaXR5SGVhZGVycyA9IG5ldyBXZWJhcHBTZWN1cml0eUhlYWRlcnMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiU2VjdXJpdHlIZWFkZXJzXCIsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5wcm9wcy5zZWN1cml0eUhlYWRlcnM/LmJlaGF2aW9yT3ZlcnJpZGVzLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gc2VjdXJpdHlIZWFkZXJzLnJlc3BvbnNlSGVhZGVyc1BvbGljeVxuICAgIH1cblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uID0gbmV3IGNsb3VkZnJvbnQuRGlzdHJpYnV0aW9uKHRoaXMsIFwiRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW46IHRoaXMud2ViYXBwT3JpZ2luLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogY2xvdWRmcm9udC5WaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzUG9saWN5OiByZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICAgIC4uLnByb3BzLm92ZXJyaWRlQ2xvdWRGcm9udEJlaGF2aW91ck9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgZGVmYXVsdFJvb3RPYmplY3Q6IFwiaW5kZXguaHRtbFwiLFxuICAgICAgcHJpY2VDbGFzczogY2xvdWRmcm9udC5QcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMCxcbiAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jbG91ZGZyb250Q2VydGlmaWNhdGUsXG4gICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICBlcnJvclJlc3BvbnNlcyxcbiAgICAgIHdlYkFjbElkOiBwcm9wcy53ZWJBY2xJZCxcbiAgICB9KVxuICB9XG5cbiAgYWRkRG5zUmVjb3JkKGhvc3RlZFpvbmU6IHI1My5JSG9zdGVkWm9uZSwgZG9tYWluTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IHI1My5BUmVjb3JkKHRoaXMsIGBEbnNSZWNvcmQke2RvbWFpbk5hbWV9YCwge1xuICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgIHJlY29yZE5hbWU6IGAke2RvbWFpbk5hbWV9LmAsXG4gICAgICB0YXJnZXQ6IHI1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgcjUzdC5DbG91ZEZyb250VGFyZ2V0KHRoaXMuZGlzdHJpYnV0aW9uKSxcbiAgICAgICksXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkZXBsb3ltZW50IHVzaW5nIHdlYmFwcC1kZXBsb3ktbGFtYmRhLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhcHJhY29uc3VsdGluZy93ZWJhcHAtZGVwbG95LWxhbWJkYVxuICAgKiBmb3IgZGV0YWlscyBhYm91dCBob3cgdGhpcyB3b3Jrcy5cbiAgICovXG4gIGFkZERlcGxveW1lbnQoXG4gICAgLyoqXG4gICAgICogVGhlIGRlcGxveW1lbnQgc291cmNlLlxuICAgICAqL1xuICAgIHNvdXJjZTogd2ViYXBwRGVwbG95LklTb3VyY2UsXG4gICAgcHJvcHM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIEluY2x1ZGUgc291cmNlIG1hcHMgaW4gdGhlIGRlcGxveW1lbnQuXG4gICAgICAgKlxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgZGVwbG95U291cmNlTWFwcz86IGJvb2xlYW5cbiAgICB9LFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkZXBsb3lTb3VyY2VNYXBzID0gcHJvcHM/LmRlcGxveVNvdXJjZU1hcHMgPz8gZmFsc2VcblxuICAgIG5ldyB3ZWJhcHBEZXBsb3kuV2ViYXBwRGVwbG95KHRoaXMsIFwiRGVwbG95XCIsIHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgd2ViQnVja2V0OiB0aGlzLndlYmFwcEJ1Y2tldCxcbiAgICAgIGRpc3RyaWJ1dGlvbjogdGhpcy5kaXN0cmlidXRpb24sXG4gICAgICBleGNsdWRlUGF0dGVybjogZGVwbG95U291cmNlTWFwcyA/IHVuZGVmaW5lZCA6IFwiXFxcXC5tYXAkXCIsXG4gICAgfSlcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liflig/cdk",
3
- "version": "2.9.2",
3
+ "version": "2.10.0",
4
4
  "description": "CDK library for Liflig",
5
5
  "repository": {
6
6
  "type": "git",
@@ -36,15 +36,15 @@
36
36
  "devDependencies": {
37
37
  "@commitlint/cli": "17.4.2",
38
38
  "@commitlint/config-conventional": "17.4.2",
39
- "@aws-cdk/assert": "2.61.1",
40
- "@types/aws-lambda": "8.10.109",
39
+ "@aws-cdk/assert": "2.62.0",
40
+ "@types/aws-lambda": "8.10.110",
41
41
  "@types/jest": "27.5.2",
42
42
  "@types/node": "18.11.18",
43
43
  "@typescript-eslint/eslint-plugin": "5.49.0",
44
44
  "@typescript-eslint/parser": "5.49.0",
45
- "aws-cdk": "2.61.1",
46
- "aws-cdk-lib": "2.61.1",
47
- "constructs": "10.1.229",
45
+ "aws-cdk": "2.62.0",
46
+ "aws-cdk-lib": "2.62.0",
47
+ "constructs": "10.1.232",
48
48
  "eslint": "8.32.0",
49
49
  "eslint-config-prettier": "8.6.0",
50
50
  "eslint-plugin-prettier": "4.2.1",
@@ -52,7 +52,7 @@
52
52
  "jest": "27.5.1",
53
53
  "jest-cdk-snapshot": "2.0.1",
54
54
  "prettier": "2.8.3",
55
- "semantic-release": "20.0.4",
55
+ "semantic-release": "20.1.0",
56
56
  "ts-jest": "27.1.5",
57
57
  "ts-node": "10.9.1",
58
58
  "typescript": "4.9.4"