aws-cdk 2.1143.0 → 2.1145.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.
- package/README.md +69 -0
- package/THIRD_PARTY_LICENSES +22 -22
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/api-private-error.d.ts +1 -0
- package/lib/api-private-error.js +9 -0
- package/lib/api-private.d.ts +0 -1
- package/lib/api-private.js +2 -4
- package/lib/cli/cdk-toolkit.d.ts +13 -8
- package/lib/cli/cdk-toolkit.js +87 -22
- package/lib/cli/cli-config.js +10 -3
- package/lib/cli/cli-type-registry.json +20 -2
- package/lib/cli/cli.js +15 -6
- package/lib/cli/convert-to-user-input.js +5 -1
- package/lib/cli/io-host/cli-io-host.d.ts +21 -2
- package/lib/cli/io-host/cli-io-host.js +12 -8
- package/lib/cli/parse-command-line-arguments.js +17 -3
- package/lib/cli/proxy-agent.d.ts +55 -4
- package/lib/cli/proxy-agent.js +71 -33
- package/lib/cli/telemetry/post-telemetry.d.ts +31 -0
- package/lib/cli/telemetry/post-telemetry.js +76 -0
- package/lib/cli/telemetry/sender-bundle.d.ts +1 -0
- package/lib/cli/telemetry/sender-bundle.js +32542 -0
- package/lib/cli/telemetry/sender.d.ts +50 -0
- package/lib/cli/telemetry/sender.js +103 -0
- package/lib/cli/telemetry/sink/subprocess-sink.d.ts +77 -0
- package/lib/cli/telemetry/sink/subprocess-sink.js +209 -0
- package/lib/cli/user-input.d.ts +15 -1
- package/lib/cli/user-input.js +1 -1
- package/lib/index.js +4403 -3254
- package/lib/index_bg.wasm +0 -0
- package/lib/init-templates/.init-version.json +1 -1
- package/package.json +12 -12
- package/lib/cli/telemetry/sink/endpoint-sink.d.ts +0 -44
- package/lib/cli/telemetry/sink/endpoint-sink.js +0 -108
package/lib/index_bg.wasm
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"aws-cdk-lib": "^2.
|
|
1
|
+
{"aws-cdk-lib": "^2.272.0", "constructs": "^10.5.0"}
|
package/package.json
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@aws-cdk/cli-plugin-contract": "2.182.2",
|
|
44
44
|
"@aws-cdk/private-tools": "0.0.0",
|
|
45
45
|
"@aws-cdk/user-input-gen": "0.0.0",
|
|
46
|
-
"@cdklabs/eslint-plugin": "^2.0.
|
|
46
|
+
"@cdklabs/eslint-plugin": "^2.0.22",
|
|
47
47
|
"@stylistic/eslint-plugin": "^3",
|
|
48
48
|
"@types/fs-extra": "^11",
|
|
49
49
|
"@types/jest": "^29.5.14",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"@types/yazl": "^3.3.1",
|
|
58
58
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
59
59
|
"@typescript-eslint/parser": "^8",
|
|
60
|
-
"aws-cdk-lib": "2.
|
|
60
|
+
"aws-cdk-lib": "2.272.0",
|
|
61
61
|
"aws-sdk-client-mock": "^4.1.0",
|
|
62
62
|
"aws-sdk-client-mock-jest": "^4.1.0",
|
|
63
63
|
"commit-and-tag-version": "^13",
|
|
@@ -77,21 +77,21 @@
|
|
|
77
77
|
"jest-mock": "^29.7.0",
|
|
78
78
|
"license-checker": "^25.0.1",
|
|
79
79
|
"nock": "13",
|
|
80
|
-
"node-backpack": "^1.1.
|
|
80
|
+
"node-backpack": "^1.1.50",
|
|
81
81
|
"nx": "^22.7.12",
|
|
82
82
|
"prettier": "^2.8",
|
|
83
|
-
"projen": "^0.103.
|
|
83
|
+
"projen": "^0.103.27",
|
|
84
84
|
"sinon": "^19.0.5",
|
|
85
|
-
"ts-jest": "^29.4.
|
|
85
|
+
"ts-jest": "^29.4.14",
|
|
86
86
|
"ts-mock-imports": "^1.3.19",
|
|
87
|
-
"tsx": "^4.23.
|
|
87
|
+
"tsx": "^4.23.15",
|
|
88
88
|
"typescript": "5.9",
|
|
89
|
-
"@aws-cdk/cdk-assets-lib": "^1.5.
|
|
90
|
-
"@aws-cdk/cloud-assembly-api": "2.
|
|
91
|
-
"@aws-cdk/cloud-assembly-schema": ">=
|
|
89
|
+
"@aws-cdk/cdk-assets-lib": "^1.5.1",
|
|
90
|
+
"@aws-cdk/cloud-assembly-api": "2.5.0",
|
|
91
|
+
"@aws-cdk/cloud-assembly-schema": ">=55.0.0",
|
|
92
92
|
"@aws-cdk/cloudformation-diff": "2.187.5",
|
|
93
93
|
"@aws-cdk/cx-api": "^2",
|
|
94
|
-
"@aws-cdk/toolkit-lib": "^1.
|
|
94
|
+
"@aws-cdk/toolkit-lib": "^1.43.0",
|
|
95
95
|
"@aws-sdk/client-appsync": "^3",
|
|
96
96
|
"@aws-sdk/client-bedrock-agentcore-control": "^3",
|
|
97
97
|
"@aws-sdk/client-cloudcontrol": "^3",
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"@smithy/util-retry": "^4",
|
|
123
123
|
"@smithy/util-waiter": "^4",
|
|
124
124
|
"camelcase": "^6",
|
|
125
|
-
"cdk-from-cfn": "^0.
|
|
125
|
+
"cdk-from-cfn": "^0.336.0",
|
|
126
126
|
"chalk": "^4",
|
|
127
127
|
"chokidar": "^4",
|
|
128
128
|
"cross-spawn": "^7.0.6",
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
"publishConfig": {
|
|
164
164
|
"access": "public"
|
|
165
165
|
},
|
|
166
|
-
"version": "2.
|
|
166
|
+
"version": "2.1145.0",
|
|
167
167
|
"packageManager": "yarn@4.17.1",
|
|
168
168
|
"types": "lib/index.d.ts",
|
|
169
169
|
"exports": {
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { Agent } from 'https';
|
|
2
|
-
import type { IIoHost } from '../../io-host';
|
|
3
|
-
import type { TelemetrySchema } from '../schema';
|
|
4
|
-
import type { ITelemetrySink } from './sink-interface';
|
|
5
|
-
/**
|
|
6
|
-
* Properties for the Endpoint Telemetry Client
|
|
7
|
-
*/
|
|
8
|
-
export interface EndpointTelemetrySinkProps {
|
|
9
|
-
/**
|
|
10
|
-
* The external endpoint to hit
|
|
11
|
-
*/
|
|
12
|
-
readonly endpoint: string;
|
|
13
|
-
/**
|
|
14
|
-
* Where messages are going to be sent
|
|
15
|
-
*/
|
|
16
|
-
readonly ioHost: IIoHost;
|
|
17
|
-
/**
|
|
18
|
-
* The agent responsible for making the network requests.
|
|
19
|
-
*
|
|
20
|
-
* Use this to set up a proxy connection.
|
|
21
|
-
*
|
|
22
|
-
* @default - Uses the shared global node agent
|
|
23
|
-
*/
|
|
24
|
-
readonly agent?: Agent;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* The telemetry client that hits an external endpoint.
|
|
28
|
-
*/
|
|
29
|
-
export declare class EndpointTelemetrySink implements ITelemetrySink {
|
|
30
|
-
private events;
|
|
31
|
-
private endpoint;
|
|
32
|
-
private ioHelper;
|
|
33
|
-
private agent?;
|
|
34
|
-
constructor(props: EndpointTelemetrySinkProps);
|
|
35
|
-
/**
|
|
36
|
-
* Add an event to the collection.
|
|
37
|
-
*/
|
|
38
|
-
emit(event: TelemetrySchema): Promise<void>;
|
|
39
|
-
flush(): Promise<void>;
|
|
40
|
-
/**
|
|
41
|
-
* Returns true if telemetry successfully posted, false otherwise.
|
|
42
|
-
*/
|
|
43
|
-
private https;
|
|
44
|
-
}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EndpointTelemetrySink = void 0;
|
|
4
|
-
const https_1 = require("https");
|
|
5
|
-
const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
|
|
6
|
-
const network_detector_1 = require("../../../api/network-detector");
|
|
7
|
-
const api_private_1 = require("../../../api-private");
|
|
8
|
-
const REQUEST_ATTEMPT_TIMEOUT_MS = 500;
|
|
9
|
-
/**
|
|
10
|
-
* The telemetry client that hits an external endpoint.
|
|
11
|
-
*/
|
|
12
|
-
class EndpointTelemetrySink {
|
|
13
|
-
events = [];
|
|
14
|
-
endpoint;
|
|
15
|
-
ioHelper;
|
|
16
|
-
agent;
|
|
17
|
-
constructor(props) {
|
|
18
|
-
this.endpoint = new URL(props.endpoint);
|
|
19
|
-
if (!this.endpoint.hostname || !this.endpoint.pathname) {
|
|
20
|
-
throw new toolkit_lib_1.ToolkitError('MalformedEndpoint', `Telemetry Endpoint malformed. Received hostname: ${this.endpoint.hostname}, pathname: ${this.endpoint.pathname}`);
|
|
21
|
-
}
|
|
22
|
-
this.ioHelper = api_private_1.IoHelper.fromActionAwareIoHost(props.ioHost);
|
|
23
|
-
this.agent = props.agent;
|
|
24
|
-
// Batch events every 30 seconds
|
|
25
|
-
setInterval(() => this.flush(), 30000).unref();
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Add an event to the collection.
|
|
29
|
-
*/
|
|
30
|
-
async emit(event) {
|
|
31
|
-
try {
|
|
32
|
-
this.events.push(event);
|
|
33
|
-
}
|
|
34
|
-
catch (e) {
|
|
35
|
-
// Never throw errors, just log them via ioHost
|
|
36
|
-
await this.ioHelper.defaults.trace(`Failed to add telemetry event: ${e.message}`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
async flush() {
|
|
40
|
-
try {
|
|
41
|
-
if (this.events.length === 0) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
const res = await this.https(this.endpoint, { events: this.events });
|
|
45
|
-
// Clear the events array after successful output
|
|
46
|
-
if (res) {
|
|
47
|
-
this.events = [];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
catch (e) {
|
|
51
|
-
// Never throw errors, just log them via ioHost
|
|
52
|
-
await this.ioHelper.defaults.trace(`Failed to send telemetry event: ${e.message}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Returns true if telemetry successfully posted, false otherwise.
|
|
57
|
-
*/
|
|
58
|
-
async https(url, body) {
|
|
59
|
-
// Check connectivity before attempting network request
|
|
60
|
-
const hasConnectivity = await network_detector_1.NetworkDetector.hasConnectivity(this.agent);
|
|
61
|
-
if (!hasConnectivity) {
|
|
62
|
-
await this.ioHelper.defaults.trace('No internet connectivity detected, skipping telemetry');
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
try {
|
|
66
|
-
const res = await doRequest(url, body, this.agent);
|
|
67
|
-
// Successfully posted
|
|
68
|
-
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
69
|
-
await this.ioHelper.defaults.trace('Telemetry Sent Successfully');
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
await this.ioHelper.defaults.trace(`Telemetry Unsuccessful: POST ${url.hostname}${url.pathname}: ${res.statusCode}:${res.statusMessage}`);
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
catch (e) {
|
|
76
|
-
await this.ioHelper.defaults.trace(`Telemetry Error: POST ${url.hostname}${url.pathname}: ${JSON.stringify(e)}`);
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
exports.EndpointTelemetrySink = EndpointTelemetrySink;
|
|
82
|
-
/**
|
|
83
|
-
* A Promisified version of `https.request()`
|
|
84
|
-
*/
|
|
85
|
-
function doRequest(url, data, agent) {
|
|
86
|
-
return new Promise((ok, ko) => {
|
|
87
|
-
const payload = JSON.stringify(data);
|
|
88
|
-
const req = (0, https_1.request)({
|
|
89
|
-
hostname: url.hostname,
|
|
90
|
-
port: url.port || null,
|
|
91
|
-
path: url.pathname,
|
|
92
|
-
method: 'POST',
|
|
93
|
-
headers: {
|
|
94
|
-
'content-type': 'application/json',
|
|
95
|
-
'content-length': payload.length,
|
|
96
|
-
},
|
|
97
|
-
agent,
|
|
98
|
-
timeout: REQUEST_ATTEMPT_TIMEOUT_MS,
|
|
99
|
-
}, ok);
|
|
100
|
-
req.on('error', ko);
|
|
101
|
-
req.on('timeout', () => {
|
|
102
|
-
const error = new toolkit_lib_1.ToolkitError('RequestTimeout', `Timeout after ${REQUEST_ATTEMPT_TIMEOUT_MS}ms, aborting request`);
|
|
103
|
-
req.destroy(error);
|
|
104
|
-
});
|
|
105
|
-
req.end(payload);
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQtc2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVuZHBvaW50LXNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsaUNBQWdDO0FBQ2hDLHNEQUFvRDtBQUNwRCxvRUFBZ0U7QUFDaEUsc0RBQWdEO0FBS2hELE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO0FBMEJ2Qzs7R0FFRztBQUNILE1BQWEscUJBQXFCO0lBQ3hCLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQy9CLFFBQVEsQ0FBTTtJQUNkLFFBQVEsQ0FBVztJQUNuQixLQUFLLENBQVM7SUFFdEIsWUFBbUIsS0FBaUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksMEJBQVksQ0FBQyxtQkFBbUIsRUFBRSxvREFBb0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLGVBQWUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pLLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLHNCQUFRLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUV6QixnQ0FBZ0M7UUFDaEMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQXNCO1FBQ3RDLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxN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QyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUEsZUFBTyxFQUFDO1lBQ2xCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJO1lBQ3RCLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUTtZQUNsQixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTTthQUNqQztZQUNELEtBQUs7WUFDTCxPQUFPLEVBQUUsMEJBQTBCO1NBQ3BDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQixHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSwwQkFBWSxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQiwwQkFBMEIsc0JBQXNCLENBQUMsQ0FBQztZQUNwSCxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnO1xuaW1wb3J0IHR5cGUgeyBBZ2VudCB9IGZyb20gJ2h0dHBzJztcbmltcG9ydCB7IHJlcXVlc3QgfSBmcm9tICdodHRwcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBOZXR3b3JrRGV0ZWN0b3IgfSBmcm9tICcuLi8uLi8uLi9hcGkvbmV0d29yay1kZXRlY3Rvcic7XG5pbXBvcnQgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL2FwaS1wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgSUlvSG9zdCB9IGZyb20gJy4uLy4uL2lvLWhvc3QnO1xuaW1wb3J0IHR5cGUgeyBUZWxlbWV0cnlTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBJVGVsZW1ldHJ5U2luayB9IGZyb20gJy4vc2luay1pbnRlcmZhY2UnO1xuXG5jb25zdCBSRVFVRVNUX0FUVEVNUFRfVElNRU9VVF9NUyA9IDUwMDtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciB0aGUgRW5kcG9pbnQgVGVsZW1ldHJ5IENsaWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuZHBvaW50VGVsZW1ldHJ5U2lua1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBlbmRwb2ludCB0byBoaXRcbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXJlIG1lc3NhZ2VzIGFyZSBnb2luZyB0byBiZSBzZW50XG4gICAqL1xuICByZWFkb25seSBpb0hvc3Q6IElJb0hvc3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBhZ2VudCByZXNwb25zaWJsZSBmb3IgbWFraW5nIHRoZSBuZXR3b3JrIHJlcXVlc3RzLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBzZXQgdXAgYSBwcm94eSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFVzZXMgdGhlIHNoYXJlZCBnbG9iYWwgbm9kZSBhZ2VudFxuICAgKi9cbiAgcmVhZG9ubHkgYWdlbnQ/OiBBZ2VudDtcbn1cblxuLyoqXG4gKiBUaGUgdGVsZW1ldHJ5IGNsaWVudCB0aGF0IGhpdHMgYW4gZXh0ZXJuYWwgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBFbmRwb2ludFRlbGVtZXRyeVNpbmsgaW1wbGVtZW50cyBJVGVsZW1ldHJ5U2luayB7XG4gIHByaXZhdGUgZXZlbnRzOiBUZWxlbWV0cnlTY2hlbWFbXSA9IFtdO1xuICBwcml2YXRlIGVuZHBvaW50OiBVUkw7XG4gIHByaXZhdGUgaW9IZWxwZXI6IElvSGVscGVyO1xuICBwcml2YXRlIGFnZW50PzogQWdlbnQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBFbmRwb2ludFRlbGVtZXRyeVNpbmtQcm9wcykge1xuICAgIHRoaXMuZW5kcG9pbnQgPSBuZXcgVVJMKHByb3BzLmVuZHBvaW50KTtcblxuICAgIGlmICghdGhpcy5lbmRwb2ludC5ob3N0bmFtZSB8fCAhdGhpcy5lbmRwb2ludC5wYXRobmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignTWFsZm9ybWVkRW5kcG9pbnQnLCBgVGVsZW1ldHJ5IEVuZHBvaW50IG1hbGZvcm1lZC4gUmVjZWl2ZWQgaG9zdG5hbWU6ICR7dGhpcy5lbmRwb2ludC5ob3N0bmFtZX0sIHBhdGhuYW1lOiAke3RoaXMuZW5kcG9pbnQucGF0aG5hbWV9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5pb0hlbHBlciA9IElvSGVscGVyLmZyb21BY3Rpb25Bd2FyZUlvSG9zdChwcm9wcy5pb0hvc3QpO1xuICAgIHRoaXMuYWdlbnQgPSBwcm9wcy5hZ2VudDtcblxuICAgIC8vIEJhdGNoIGV2ZW50cyBldmVyeSAzMCBzZWNvbmRzXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5mbHVzaCgpLCAzMDAwMCkudW5yZWYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZXZlbnQgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW1pdChldmVudDogVGVsZW1ldHJ5U2NoZW1hKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXZlbnRzLnB1c2goZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gTmV2ZXIgdGhyb3cgZXJyb3JzLCBqdXN0IGxvZyB0aGVtIHZpYSBpb0hvc3RcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoYEZhaWxlZCB0byBhZGQgdGVsZW1ldHJ5IGV2ZW50OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmh0dHBzKHRoaXMuZW5kcG9pbnQsIHsgZXZlbnRzOiB0aGlzLmV2ZW50cyB9KTtcblxuICAgICAgLy8gQ2xlYXIgdGhlIGV2ZW50cyBhcnJheSBhZnRlciBzdWNjZXNzZnVsIG91dHB1dFxuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gTmV2ZXIgdGhyb3cgZXJyb3JzLCBqdXN0IGxvZyB0aGVtIHZpYSBpb0hvc3RcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoYEZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeSBldmVudDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0ZWxlbWV0cnkgc3VjY2Vzc2Z1bGx5IHBvc3RlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBodHRwcyhcbiAgICB1cmw6IFVSTCxcbiAgICBib2R5OiB7IGV2ZW50czogVGVsZW1ldHJ5U2NoZW1hW10gfSxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gQ2hlY2sgY29ubmVjdGl2aXR5IGJlZm9yZSBhdHRlbXB0aW5nIG5ldHdvcmsgcmVxdWVzdFxuICAgIGNvbnN0IGhhc0Nvbm5lY3Rpdml0eSA9IGF3YWl0IE5ldHdvcmtEZXRlY3Rvci5oYXNDb25uZWN0aXZpdHkodGhpcy5hZ2VudCk7XG4gICAgaWYgKCFoYXNDb25uZWN0aXZpdHkpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoJ05vIGludGVybmV0IGNvbm5lY3Rpdml0eSBkZXRlY3RlZCwgc2tpcHBpbmcgdGVsZW1ldHJ5Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRvUmVxdWVzdCh1cmwsIGJvZHksIHRoaXMuYWdlbnQpO1xuXG4gICAgICAvLyBTdWNjZXNzZnVsbHkgcG9zdGVkXG4gICAgICBpZiAocmVzLnN0YXR1c0NvZGUgJiYgcmVzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoJ1RlbGVtZXRyeSBTZW50IFN1Y2Nlc3NmdWxseScpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5kZWZhdWx0cy50cmFjZShgVGVsZW1ldHJ5IFVuc3VjY2Vzc2Z1bDogUE9TVCAke3VybC5ob3N0bmFtZX0ke3VybC5wYXRobmFtZX06ICR7cmVzLnN0YXR1c0NvZGV9OiR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoYFRlbGVtZXRyeSBFcnJvcjogUE9TVCAke3VybC5ob3N0bmFtZX0ke3VybC5wYXRobmFtZX06ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBQcm9taXNpZmllZCB2ZXJzaW9uIG9mIGBodHRwcy5yZXF1ZXN0KClgXG4gKi9cbmZ1bmN0aW9uIGRvUmVxdWVzdChcbiAgdXJsOiBVUkwsXG4gIGRhdGE6IHsgZXZlbnRzOiBUZWxlbWV0cnlTY2hlbWFbXSB9LFxuICBhZ2VudD86IEFnZW50LFxuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxJbmNvbWluZ01lc3NhZ2U+KChvaywga28pID0+IHtcbiAgICBjb25zdCBwYXlsb2FkOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICBjb25zdCByZXEgPSByZXF1ZXN0KHtcbiAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiB1cmwucG9ydCB8fCBudWxsLFxuICAgICAgcGF0aDogdXJsLnBhdGhuYW1lLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdjb250ZW50LWxlbmd0aCc6IHBheWxvYWQubGVuZ3RoLFxuICAgICAgfSxcbiAgICAgIGFnZW50LFxuICAgICAgdGltZW91dDogUkVRVUVTVF9BVFRFTVBUX1RJTUVPVVRfTVMsXG4gICAgfSwgb2spO1xuXG4gICAgcmVxLm9uKCdlcnJvcicsIGtvKTtcbiAgICByZXEub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBUb29sa2l0RXJyb3IoJ1JlcXVlc3RUaW1lb3V0JywgYFRpbWVvdXQgYWZ0ZXIgJHtSRVFVRVNUX0FUVEVNUFRfVElNRU9VVF9NU31tcywgYWJvcnRpbmcgcmVxdWVzdGApO1xuICAgICAgcmVxLmRlc3Ryb3koZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgcmVxLmVuZChwYXlsb2FkKTtcbiAgfSk7XG59XG4iXX0=
|