@mavogel/cdk-vscode-server 0.0.61 → 0.0.63
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/.jsii +117 -178
- package/API.md +96 -199
- package/CLAUDE.md +214 -57
- package/README.md +39 -1
- package/assets/idle-monitor-enabler/idle-monitor-enabler.lambda/index.js +67 -0
- package/assets/installer/installer.lambda/index.js +67 -30
- package/awslint.json +5 -0
- package/examples/git-repo/main.ts +30 -0
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +2 -2
- package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +8 -8
- package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +257 -94
- package/integ-tests/{integ.stop-on-idle.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.al2023.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.al2023.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.al2023.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.al2023.ts.snapshot/manifest.json +19 -3
- package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +2 -2
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +8 -8
- package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +270 -94
- package/integ-tests/{integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.custom-domain.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.al2023.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.custom-domain.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +19 -3
- package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.stop-on-idle.ts +1 -4
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.assets.json +2 -2
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.template.json +4 -4
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.assets.json +23 -9
- package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.template.json +755 -194
- package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.22c8a6c357b704e370bef317ae1b52c59f684aa7640422a3d1dfe813d1f77853.lambda/index.js +67 -0
- package/integ-tests/{integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.stop-on-idle.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/integ.stop-on-idle.ts.snapshot/manifest.json +353 -72
- package/integ-tests/integ.stop-on-idle.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +2 -2
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +8 -8
- package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +270 -94
- package/integ-tests/{integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.ubuntu.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
- package/integ-tests/{integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.ubuntu.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
- package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +1 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +19 -3
- package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -1
- package/integ-tests/integ.ubuntu24.ts +69 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +33 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +337 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.assets.json +118 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.template.json +2725 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/integ.json +23 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/manifest.json +1473 -0
- package/integ-tests/integ.ubuntu24.ts.snapshot/tree.json +1 -0
- package/lib/idle-monitor/idle-monitor-function.js +2 -2
- package/lib/idle-monitor/idle-monitor.js +5 -2
- package/lib/idle-monitor-enabler/idle-monitor-enabler-function.d.ts +13 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler-function.js +22 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.d.ts +25 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.js +76 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.d.ts +9 -0
- package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.js +48 -0
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -2
- package/lib/installer/installer-function.js +2 -2
- package/lib/installer/installer.d.ts +100 -0
- package/lib/installer/installer.js +658 -301
- package/lib/installer/installer.lambda.js +64 -30
- package/lib/secret-retriever/secret-retriever-function.js +2 -2
- package/lib/vscode-server.d.ts +40 -0
- package/lib/vscode-server.js +27 -4
- package/package.json +12 -12
- package/.claude/hooks/file_checker.sh +0 -178
- package/.qlty/.gitignore +0 -7
- package/.qlty/configs/.yamllint.yaml +0 -21
- package/.qlty/qlty.toml +0 -115
- package/assets/status-check/status-check.lambda/index.js +0 -123
- package/integ-tests/integ.al2023.ts.snapshot/cdk.out +0 -1
- package/integ-tests/integ.al2023.ts.snapshot/read.13497.1.lock +0 -1
- package/integ-tests/integ.custom-domain.ts.snapshot/read.13497.1.lock +0 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +0 -1
- package/integ-tests/integ.ubuntu.ts.snapshot/read.13497.1.lock +0 -1
- package/lib/status-check/status-check-function.d.ts +0 -13
- package/lib/status-check/status-check-function.js +0 -22
- package/lib/status-check/status-check.d.ts +0 -36
- package/lib/status-check/status-check.js +0 -109
- package/lib/status-check/status-check.lambda.d.ts +0 -2
- package/lib/status-check/status-check.lambda.js +0 -104
|
@@ -38,14 +38,17 @@ const handler = async (event, context) => {
|
|
|
38
38
|
parameters[key] = [value];
|
|
39
39
|
}
|
|
40
40
|
console.log('mapped parameters: %j', parameters);
|
|
41
|
-
let attemptNo = 0;
|
|
42
|
-
let timeRemaining = context.getRemainingTimeInMillis();
|
|
43
41
|
console.log(`Running SSM Document '${documentName}' on EC2 instance '${instanceId}'. Logging to '${cloudWatchLogGroupName}' with parameters: '${JSON.stringify(parameters)}'`);
|
|
42
|
+
// Step 1: Send the SSM command once and get the CommandId
|
|
43
|
+
let commandId;
|
|
44
|
+
let attemptNo = 0;
|
|
45
|
+
// Retry loop for sending the command (handles IAM propagation issues)
|
|
44
46
|
while (true) {
|
|
45
47
|
attemptNo += 1;
|
|
46
|
-
|
|
48
|
+
const timeRemaining = context.getRemainingTimeInMillis();
|
|
49
|
+
console.log(`Send attempt: ${attemptNo}. Time Remaining: ${timeRemaining / 1000}s`);
|
|
47
50
|
try {
|
|
48
|
-
const response = await ssm.
|
|
51
|
+
const response = await ssm.send(new client_ssm_1.SendCommandCommand({
|
|
49
52
|
DocumentName: documentName,
|
|
50
53
|
InstanceIds: [instanceId],
|
|
51
54
|
CloudWatchOutputConfig: {
|
|
@@ -53,25 +56,63 @@ const handler = async (event, context) => {
|
|
|
53
56
|
CloudWatchOutputEnabled: true,
|
|
54
57
|
},
|
|
55
58
|
Parameters: parameters,
|
|
56
|
-
});
|
|
57
|
-
console.log(`response: ${JSON.stringify(response)}`);
|
|
59
|
+
}));
|
|
60
|
+
console.log(`sendCommand response: ${JSON.stringify(response)}`);
|
|
58
61
|
const command = response.Command;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
commandId = command.CommandId;
|
|
63
|
+
console.log(`Command sent successfully. CommandId: ${commandId}`);
|
|
64
|
+
break; // Successfully sent command, exit retry loop
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.log('Error sending command:', error);
|
|
68
|
+
// Check if this is a retryable error (IAM propagation, throttling, etc.)
|
|
69
|
+
const isUnauthorized = error.name === 'UnauthorizedException' ||
|
|
70
|
+
error.name === 'AccessDeniedException' ||
|
|
71
|
+
(error.message && error.message.includes('not authorized'));
|
|
72
|
+
const isThrottled = error.name === 'ThrottlingException' ||
|
|
73
|
+
error.name === 'TooManyRequestsException';
|
|
74
|
+
const isRetryable = isUnauthorized || isThrottled;
|
|
75
|
+
const remainingTime = context.getRemainingTimeInMillis();
|
|
76
|
+
if (isRetryable && remainingTime > SLEEP_MS) {
|
|
77
|
+
console.log(`Retryable error encountered (${error.name}). Attempt ${attemptNo}. Sleeping: ${SLEEP_MS / 1000}s before retry`);
|
|
78
|
+
await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
|
|
79
|
+
// Continue to next iteration of while loop
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Non-retryable error or out of time
|
|
83
|
+
console.log('Non-retryable error or timeout. Failing...');
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Step 2: Poll for command completion using getCommandInvocation
|
|
89
|
+
let pollAttemptNo = 0;
|
|
90
|
+
const responseData = { CommandId: commandId };
|
|
91
|
+
while (true) {
|
|
92
|
+
pollAttemptNo += 1;
|
|
93
|
+
const timeRemaining = context.getRemainingTimeInMillis();
|
|
94
|
+
console.log(`Poll attempt: ${pollAttemptNo}. Time Remaining: ${timeRemaining / 1000}s`);
|
|
95
|
+
try {
|
|
96
|
+
const invocationResponse = await ssm.send(new client_ssm_1.GetCommandInvocationCommand({
|
|
97
|
+
CommandId: commandId,
|
|
98
|
+
InstanceId: instanceId,
|
|
99
|
+
}));
|
|
100
|
+
console.log(`getCommandInvocation response: ${JSON.stringify(invocationResponse)}`);
|
|
101
|
+
const status = invocationResponse.Status;
|
|
102
|
+
switch (status) {
|
|
62
103
|
case 'Pending':
|
|
63
104
|
case 'InProgress':
|
|
64
|
-
|
|
105
|
+
case 'Delayed':
|
|
65
106
|
if (timeRemaining > SLEEP_MS) {
|
|
66
|
-
console.log(`
|
|
107
|
+
console.log(`Command ${commandId} status: '${status}'. Sleeping: ${SLEEP_MS / 1000}s`);
|
|
67
108
|
await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
|
|
68
|
-
break;
|
|
109
|
+
break; // Continue polling
|
|
69
110
|
}
|
|
70
111
|
else {
|
|
71
|
-
throw new Error(`SSM Document ${documentName} on EC2 instance ${instanceId} timed out while lambda
|
|
112
|
+
throw new Error(`SSM Document ${documentName} on EC2 instance ${instanceId} timed out while lambda waiting (status: ${status})`);
|
|
72
113
|
}
|
|
73
114
|
case 'Success':
|
|
74
|
-
console.log(`Instance ${instanceId} successfully bootstrapped
|
|
115
|
+
console.log(`Instance ${instanceId} successfully bootstrapped. Command ${commandId} completed.`);
|
|
75
116
|
return { Data: responseData };
|
|
76
117
|
case 'TimedOut':
|
|
77
118
|
throw new Error(`SSM Document ${documentName} on EC2 instance ${instanceId} timed out`);
|
|
@@ -80,32 +121,25 @@ const handler = async (event, context) => {
|
|
|
80
121
|
case 'Failed':
|
|
81
122
|
throw new Error(`SSM Document ${documentName} on EC2 instance ${instanceId} failed`);
|
|
82
123
|
default:
|
|
83
|
-
throw new Error(`SSM Document ${documentName} on EC2 instance ${instanceId} status ${
|
|
124
|
+
throw new Error(`SSM Document ${documentName} on EC2 instance ${instanceId} unknown status: ${status}`);
|
|
84
125
|
}
|
|
85
|
-
return { Data: responseData };
|
|
86
126
|
}
|
|
87
127
|
catch (error) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
(
|
|
93
|
-
const isThrottled = error.name === 'ThrottlingException' ||
|
|
94
|
-
error.name === 'TooManyRequestsException';
|
|
95
|
-
const isRetryable = isUnauthorized || isThrottled;
|
|
96
|
-
timeRemaining = context.getRemainingTimeInMillis();
|
|
97
|
-
if (isRetryable && timeRemaining > SLEEP_MS) {
|
|
98
|
-
console.log(`Retryable error encountered (${error.name}). Attempt ${attemptNo}. Sleeping: ${SLEEP_MS / 1000}s before retry`);
|
|
128
|
+
// Check if this is an invocation not available yet error
|
|
129
|
+
const remainingTime = context.getRemainingTimeInMillis();
|
|
130
|
+
if (error.name === 'InvocationDoesNotExist' &&
|
|
131
|
+
remainingTime > SLEEP_MS) {
|
|
132
|
+
console.log(`Invocation not yet available. Sleeping: ${SLEEP_MS / 1000}s`);
|
|
99
133
|
await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
|
|
100
|
-
// Continue
|
|
134
|
+
// Continue polling
|
|
101
135
|
}
|
|
102
136
|
else {
|
|
103
137
|
// Non-retryable error or out of time
|
|
104
|
-
console.log('
|
|
138
|
+
console.log('Error checking command status:', error);
|
|
105
139
|
throw error;
|
|
106
140
|
}
|
|
107
141
|
}
|
|
108
142
|
}
|
|
109
143
|
};
|
|
110
144
|
exports.handler = handler;
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGVyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnN0YWxsZXIvaW5zdGFsbGVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFBbUQ7QUFTbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBRWYsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUMxQixLQUFxQixFQUNyQixPQUFnQixFQUNVLEVBQUU7SUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUUzRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELG1CQUFtQjtJQUNuQixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7SUFDM0QsTUFBTSxzQkFBc0IsR0FDMUIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO0lBRWxELFFBQVE7SUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFM0UsNEJB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Q0FBQyxJQUFJLEtBQUssMEJBQTBCLENBQUM7WUFDN0QsTUFBTSxXQUFXLEdBQUcsY0FBYyxJQUFJLFdBQVcsQ0FBQztZQUVsRCxhQUFhLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFbkQsSUFBSSxXQUFXLElBQUksYUFBYSxHQUFHLFFBQVEsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLENBQUMsR0FBRyxDQUNULGdDQUFnQyxLQUFLLENBQUMsSUFBSSxjQUFjLFNBQVMsZUFBZSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDaEgsQ0FBQztnQkFDRixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELDJDQUEyQztZQUM3QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04scUNBQXFDO2dCQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7Z0JBQzFELE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBN0lXLFFBQUEsT0FBTyxXQTZJbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kLCBTU00gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3NtJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB0eXBlIHtcbiAgT25FdmVudFJlcXVlc3QsXG4gIE9uRXZlbnRSZXNwb25zZSxcbn0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcy9saWIvcHJvdmlkZXItZnJhbWV3b3JrL3R5cGVzJztcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNvdXJjZVByb3BlcnRpZXNDb21tb24gfSBmcm9tICdhd3MtbGFtYmRhL3RyaWdnZXIvY2xvdWRmb3JtYXRpb24tY3VzdG9tLXJlc291cmNlJztcblxuY29uc3Qgc3NtID0gbmV3IFNTTSgpO1xuY29uc3QgU0xFRVBfTVMgPSAyOTAwO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6IE9uRXZlbnRSZXF1ZXN0LFxuICBjb250ZXh0OiBDb250ZXh0LFxuKTogUHJvbWlzZTxPbkV2ZW50UmVzcG9uc2U+ID0+IHtcbiAgY29uc29sZS5sb2coJ0V2ZW50OiAlaicsIHsgLi4uZXZlbnQsIFJlc3BvbnNlVVJMOiAnLi4uJyB9KTtcblxuICBpZiAoZXZlbnQuUmVxdWVzdFR5cGUgIT09ICdDcmVhdGUnKSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIG9ubHkgQ3JlYXRlIGNhc2VcbiAgY29uc3QgcmVzb3VyY2VQcm9wZXJ0aWVzID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzO1xuICBjb25zdCBpbnN0YW5jZUlkID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkluc3RhbmNlSWQ7XG4gIGNvbnN0IGRvY3VtZW50TmFtZSA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5Eb2N1bWVudE5hbWU7XG4gIGNvbnN0IGNsb3VkV2F0Y2hMb2dHcm91cE5hbWUgPVxuICAgIGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5DbG91ZFdhdGNoTG9nR3JvdXBOYW1lO1xuXG4gIC8vIGRlYnVnXG4gIGNvbnNvbGUubG9nKCdSZXNvdXJjZVByb3BlcnRpZXMgcmF3OiAlaicsIHJlc291cmNlUHJvcGVydGllcyk7XG4gIGNvbnNvbGUubG9nKCdJbnN0YW5jZUlkOiAlcycsIGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5JbnN0YW5jZUlkKTtcbiAgY29uc29sZS5sb2coJ1ZTQ29kZVBhc3N3b3JkOiAlcycsIGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5WU0NvZGVQYXNzd29yZCk7XG5cbiAgLy8gdG8gYmUgYWJsZSB0byBtb2RpZnkgdGhlbVxuICBjb25zdCByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsID1cbiAgICByZXNvdXJjZVByb3BlcnRpZXMgYXMgUGFydGlhbDxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzb3VyY2VQcm9wZXJ0aWVzQ29tbW9uPjtcbiAgY29uc29sZS5sb2coJ1Jlc291cmNlUHJvcGVydGllcyBiZWZvcmU6ICVqJywgcmVzb3VyY2VQcm9wZXJ0aWVzUGFydGlhbCk7XG4gIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLlNlcnZpY2VUb2tlbjtcbiAgaWYgKHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuU2VydmljZVRpbWVvdXQpIHtcbiAgICBkZWxldGUgcmVzb3VyY2VQcm9wZXJ0aWVzUGFydGlhbC5TZXJ2aWNlVGltZW91dDtcbiAgfVxuICBkZWxldGUgcmVzb3VyY2VQcm9wZXJ0aWVzUGFydGlhbC5JbnN0YW5jZUlkO1xuICBkZWxldGUgcmVzb3VyY2VQcm9wZXJ0aWVzUGFydGlhbC5Eb2N1bWVudE5hbWU7XG4gIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLkNsb3VkV2F0Y2hMb2dHcm91cE5hbWU7XG4gIGlmIChyZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLlBoeXNpY2FsUmVzb3VyY2VJZCkge1xuICAgIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLlBoeXNpY2FsUmVzb3VyY2VJZDtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKFxuICAgICdSZXNvdXJjZVByb3BlcnRpZXMgZmlsdGVyZWQgYWZ0ZXI6ICVqJyxcbiAgICByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLFxuICApO1xuXG4gIGNvbnN0IHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsKSkge1xuICAgIHBhcmFtZXRlcnNba2V5XSA9IFt2YWx1ZV07XG4gIH1cbiAgY29uc29sZS5sb2coJ21hcHBlZCBwYXJhbWV0ZXJzOiAlaicsIHBhcmFtZXRlcnMpO1xuXG4gIGxldCBhdHRlbXB0Tm86IG51bWJlciA9IDA7XG4gIGxldCB0aW1lUmVtYWluaW5nOiBudW1iZXIgPSBjb250ZXh0LmdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcygpO1xuXG4gIGNvbnNvbGUubG9nKFxuICAgIGBSdW5uaW5nIFNTTSBEb2N1bWVudCAnJHtkb2N1bWVudE5hbWV9JyBvbiBFQzIgaW5zdGFuY2UgJyR7aW5zdGFuY2VJZH0nLiBMb2dnaW5nIHRvICcke2Nsb3VkV2F0Y2hMb2dHcm91cE5hbWV9JyB3aXRoIHBhcmFtZXRlcnM6ICcke0pTT04uc3RyaW5naWZ5KHBhcmFtZXRlcnMpfSdgLFxuICApO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgYXR0ZW1wdE5vICs9IDE7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgQXR0ZW1wdDogJHthdHRlbXB0Tm99LiBUaW1lIFJlbWFpbmluZzogJHt0aW1lUmVtYWluaW5nIC8gMTAwMH1zYCxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc3NtLnNlbmRDb21tYW5kKHtcbiAgICAgICAgRG9jdW1lbnROYW1lOiBkb2N1bWVudE5hbWUsXG4gICAgICAgIEluc3RhbmNlSWRzOiBbaW5zdGFuY2VJZF0sXG4gICAgICAgIENsb3VkV2F0Y2hPdXRwdXRDb25maWc6IHtcbiAgICAgICAgICBDbG91ZFdhdGNoTG9nR3JvdXBOYW1lOiBjbG91ZFdhdGNoTG9nR3JvdXBOYW1lLFxuICAgICAgICAgIENsb3VkV2F0Y2hPdXRwdXRFbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGByZXNwb25zZTogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCk7XG4gICAgICBjb25zdCBjb21tYW5kOiBDb21tYW5kID0gcmVzcG9uc2UuQ29tbWFuZCE7XG4gICAgICBjb25zdCBjb21tYW5kSWQ6IHN0cmluZyA9IGNvbW1hbmQuQ29tbWFuZElkITtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YTogYW55ID0geyBDb21tYW5kSWQ6IGNvbW1hbmRJZCB9O1xuXG4gICAgICBzd2l0Y2ggKGNvbW1hbmQuU3RhdHVzISkge1xuICAgICAgICBjYXNlICdQZW5kaW5nJzpcbiAgICAgICAgY2FzZSAnSW5Qcm9ncmVzcyc6XG4gICAgICAgICAgdGltZVJlbWFpbmluZyA9IGNvbnRleHQuZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzKCk7XG4gICAgICAgICAgaWYgKHRpbWVSZW1haW5pbmcgPiBTTEVFUF9NUykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgIGBJbnN0YW5jZSAke2luc3RhbmNlSWR9IG5vdCByZWFkeTogJ0luUHJvZ3Jlc3MnLiBTbGVlcGluZzogJHtTTEVFUF9NUyAvIDEwMDB9c2AsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgU0xFRVBfTVMpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBTU00gRG9jdW1lbnQgJHtkb2N1bWVudE5hbWV9IG9uIEVDMiBpbnN0YW5jZSAke2luc3RhbmNlSWR9IHRpbWVkIG91dCB3aGlsZSBsYW1iZGEgaW4gcHJvZ3Jlc3NgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1N1Y2Nlc3MnOlxuICAgICAgICAgIGNvbnNvbGUubG9nKGBJbnN0YW5jZSAke2luc3RhbmNlSWR9IHN1Y2Nlc3NmdWxseSBib290c3RyYXBwZWRgKTtcbiAgICAgICAgICByZXR1cm4geyBEYXRhOiByZXNwb25zZURhdGEgfTtcbiAgICAgICAgY2FzZSAnVGltZWRPdXQnOlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBTU00gRG9jdW1lbnQgJHtkb2N1bWVudE5hbWV9IG9uIEVDMiBpbnN0YW5jZSAke2luc3RhbmNlSWR9IHRpbWVkIG91dGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnQ2FuY2VsbGVkJzpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU1NNIERvY3VtZW50ICR7ZG9jdW1lbnROYW1lfSBvbiBFQzIgaW5zdGFuY2UgJHtpbnN0YW5jZUlkfSBjYW5jZWxsZWRgLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ0ZhaWxlZCc6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNTTSBEb2N1bWVudCAke2RvY3VtZW50TmFtZX0gb24gRUMyIGluc3RhbmNlICR7aW5zdGFuY2VJZH0gZmFpbGVkYCxcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBTU00gRG9jdW1lbnQgJHtkb2N1bWVudE5hbWV9IG9uIEVDMiBpbnN0YW5jZSAke2luc3RhbmNlSWR9IHN0YXR1cyAke2NvbW1hbmQuU3RhdHVzIX1gLFxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IERhdGE6IHJlc3BvbnNlRGF0YSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvY2N1cnJlZDonLCBlcnJvcik7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZXRyeWFibGUgZXJyb3IgKElBTSBwcm9wYWdhdGlvbiwgdGhyb3R0bGluZywgZXRjLilcbiAgICAgIGNvbnN0IGlzVW5hdXRob3JpemVkID0gZXJyb3IubmFtZSA9PT0gJ1VuYXV0aG9yaXplZEV4Y2VwdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5uYW1lID09PSAnQWNjZXNzRGVuaWVkRXhjZXB0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvci5tZXNzYWdlICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhdXRob3JpemVkJykpO1xuICAgICAgY29uc3QgaXNUaHJvdHRsZWQgPSBlcnJvci5uYW1lID09PSAnVGhyb3R0bGluZ0V4Y2VwdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5uYW1lID09PSAnVG9vTWFueVJlcXVlc3RzRXhjZXB0aW9uJztcbiAgICAgIGNvbnN0IGlzUmV0cnlhYmxlID0gaXNVbmF1dGhvcml6ZWQgfHwgaXNUaHJvdHRsZWQ7XG5cbiAgICAgIHRpbWVSZW1haW5pbmcgPSBjb250ZXh0LmdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcygpO1xuXG4gICAgICBpZiAoaXNSZXRyeWFibGUgJiYgdGltZVJlbWFpbmluZyA+IFNMRUVQX01TKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBSZXRyeWFibGUgZXJyb3IgZW5jb3VudGVyZWQgKCR7ZXJyb3IubmFtZX0pLiBBdHRlbXB0ICR7YXR0ZW1wdE5vfS4gU2xlZXBpbmc6ICR7U0xFRVBfTVMgLyAxMDAwfXMgYmVmb3JlIHJldHJ5YCxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgU0xFRVBfTVMpKTtcbiAgICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBpdGVyYXRpb24gb2Ygd2hpbGUgbG9vcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm9uLXJldHJ5YWJsZSBlcnJvciBvciBvdXQgb2YgdGltZVxuICAgICAgICBjb25zb2xlLmxvZygnTm9uLXJldHJ5YWJsZSBlcnJvciBvciB0aW1lb3V0LiBGYWlsaW5nLi4uJyk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiJdfQ==
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGVyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnN0YWxsZXIvaW5zdGFsbGVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFLNkI7QUFTN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBRWYsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUMxQixLQUFxQixFQUNyQixPQUFnQixFQUNVLEVBQUU7SUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUUzRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELG1CQUFtQjtJQUNuQixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7SUFDM0QsTUFBTSxzQkFBc0IsR0FDMUIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO0lBRWxELFFBQVE7SUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFM0UsNEJBQTRCO0lBQzVCLE1BQU0seUJBQXlCLEdBQzdCLGtCQUFtRixDQUFDO0lBQ3RGLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUN4RSxPQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztJQUM5QyxJQUFJLHlCQUF5QixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLE9BQU8seUJBQXlCLENBQUMsY0FBYyxDQUFDO0lBQ2xELENBQUM7SUFDRCxPQUFPLHlCQUF5QixDQUFDLFVBQVUsQ0FBQztJQUM1QyxPQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztJQUM5QyxPQUFPLHlCQUF5QixDQUFDLHNCQUFzQixDQUFDO0lBQ3hELElBQUkseUJBQXlCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNqRCxPQUFPLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDO0lBQ3RELENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUNULHVDQUF1QyxFQUN2Qyx5QkFBeUIsQ0FDMUIsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUE2QixFQUFFLENBQUM7SUFDaEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO1FBQ3JFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBRWpELE9BQU8sQ0FBQyxHQUFHLENBQ1QseUJBQXlCLFlBQVksc0JBQXNCLFVBQVUsa0JBQWtCLHNCQUFzQix1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUNsSyxDQUFDO0lBRUYsMERBQTBEO0lBQzFELElBQUksU0FBaUIsQ0FBQztJQUN0QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFbEIsc0VBQXNFO0lBQ3RFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2YsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FDVCxpQkFBaUIsU0FBUyxxQkFBcUIsYUFBYSxHQUFHLElBQUksR0FBRyxDQUN2RSxDQUFDO1FBRUYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUM3QixJQUFJLCtCQUFrQixDQUFDO2dCQUNyQixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDO2dCQUN6QixzQkFBc0IsRUFBRTtvQkFDdEIsc0JBQXNCLEVBQUUsc0JBQXNCO29CQUM5Qyx1QkFBdUIsRUFBRSxJQUFJO2lCQUM5QjtnQkFDRCxVQUFVLEVBQUUsVUFBVTthQUN2QixDQUFDLENBQ0gsQ0FBQztZQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sT0FBTyxHQUFZLFFBQVEsQ0FBQyxPQUFRLENBQUM7WUFDM0MsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFVLENBQUM7WUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5Q0FBeUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsNkNBQTZDO1FBQ3RELENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFN0MseUVBQXlFO1lBQ3pFLE1BQU0sY0FBYyxHQUNsQixLQUFLLENBQUMsSUFBSSxLQUFLLHVCQUF1QjtnQkFDdEMsS0FBSyxDQUFDLElBQUksS0FBSyx1QkFBdUI7Z0JBQ3RDLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDOUQsTUFBTSxXQUFXLEdBQ2YsS0FBSyxDQUFDLElBQUksS0FBSyxxQkFBcUI7Z0JBQ3BDLEtBQUssQ0FBQyxJQUFJLEtBQUssMEJBQTBCLENBQUM7WUFDNUMsTUFBTSxXQUFXLEdBQUcsY0FBYyxJQUFJLFdBQVcsQ0FBQztZQUVsRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUV6RCxJQUFJLFdBQVcsSUFBSSxhQUFhLEdBQUcsUUFBUSxFQUFFLENBQUM7Z0JBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsZ0NBQWdDLEtBQUssQ0FBQyxJQUFJLGNBQWMsU0FBUyxlQUFlLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUNoSCxDQUFDO2dCQUNGLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDOUQsMkNBQTJDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixxQ0FBcUM7Z0JBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxpRUFBaUU7SUFDakUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sWUFBWSxHQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBRW5ELE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixhQUFhLElBQUksQ0FBQyxDQUFDO1FBQ25CLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQ1QsaUJBQWlCLGFBQWEscUJBQXFCLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FDM0UsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUN2QyxJQUFJLHdDQUEyQixDQUFDO2dCQUM5QixTQUFTLEVBQUUsU0FBUztnQkFDcEIsVUFBVSxFQUFFLFVBQVU7YUFDdkIsQ0FBQyxDQUNILENBQUM7WUFFRixPQUFPLENBQUMsR0FBRyxDQUNULGtDQUFrQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkUsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU8sQ0FBQztZQUUxQyxRQUFRLE1BQU0sRUFBRSxDQUFDO2dCQUNmLEtBQUssU0FBUyxDQUFDO2dCQUNmLEtBQUssWUFBWSxDQUFDO2dCQUNsQixLQUFLLFNBQVM7b0JBQ1osSUFBSSxhQUFhLEdBQUcsUUFBUSxFQUFFLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQ1QsV0FBVyxTQUFTLGFBQWEsTUFBTSxnQkFBZ0IsUUFBUSxHQUFHLElBQUksR0FBRyxDQUMxRSxDQUFDO3dCQUNGLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDOUQsTUFBTSxDQUFDLG1CQUFtQjtvQkFDNUIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0JBQWdCLFlBQVksb0JBQW9CLFVBQVUsNENBQTRDLE1BQU0sR0FBRyxDQUNoSCxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsS0FBSyxTQUFTO29CQUNaLE9BQU8sQ0FBQyxHQUFHLENBQ1QsWUFBWSxVQUFVLHVDQUF1QyxTQUFTLGFBQWEsQ0FDcEYsQ0FBQztvQkFDRixPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUNoQyxLQUFLLFVBQVU7b0JBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDYixnQkFBZ0IsWUFBWSxvQkFBb0IsVUFBVSxZQUFZLENBQ3ZFLENBQUM7Z0JBQ0osS0FBSyxXQUFXO29CQUNkLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0JBQWdCLFlBQVksb0JBQW9CLFVBQVUsWUFBWSxDQUN2RSxDQUFDO2dCQUNKLEtBQUssUUFBUTtvQkFDWCxNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixZQUFZLG9CQUFvQixVQUFVLFNBQVMsQ0FDcEUsQ0FBQztnQkFDSjtvQkFDRSxNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixZQUFZLG9CQUFvQixVQUFVLG9CQUFvQixNQUFNLEVBQUUsQ0FDdkYsQ0FBQztZQUNOLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQix5REFBeUQ7WUFDekQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFekQsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLHdCQUF3QjtnQkFDdkMsYUFBYSxHQUFHLFFBQVEsRUFDeEIsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUNULDJDQUEyQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQzlELENBQUM7Z0JBQ0YsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxtQkFBbUI7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHFDQUFxQztnQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUM7QUFqTVcsUUFBQSxPQUFPLFdBaU1sQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbW1hbmQsXG4gIEdldENvbW1hbmRJbnZvY2F0aW9uQ29tbWFuZCxcbiAgU2VuZENvbW1hbmRDb21tYW5kLFxuICBTU00sXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHR5cGUge1xuICBPbkV2ZW50UmVxdWVzdCxcbiAgT25FdmVudFJlc3BvbnNlLFxufSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzL2xpYi9wcm92aWRlci1mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc291cmNlUHJvcGVydGllc0NvbW1vbiB9IGZyb20gJ2F3cy1sYW1iZGEvdHJpZ2dlci9jbG91ZGZvcm1hdGlvbi1jdXN0b20tcmVzb3VyY2UnO1xuXG5jb25zdCBzc20gPSBuZXcgU1NNKCk7XG5jb25zdCBTTEVFUF9NUyA9IDI5MDA7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogT25FdmVudFJlcXVlc3QsXG4gIGNvbnRleHQ6IENvbnRleHQsXG4pOiBQcm9taXNlPE9uRXZlbnRSZXNwb25zZT4gPT4ge1xuICBjb25zb2xlLmxvZygnRXZlbnQ6ICVqJywgeyAuLi5ldmVudCwgUmVzcG9uc2VVUkw6ICcuLi4nIH0pO1xuXG4gIGlmIChldmVudC5SZXF1ZXN0VHlwZSAhPT0gJ0NyZWF0ZScpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gb25seSBDcmVhdGUgY2FzZVxuICBjb25zdCByZXNvdXJjZVByb3BlcnRpZXMgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXM7XG4gIGNvbnN0IGluc3RhbmNlSWQgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuSW5zdGFuY2VJZDtcbiAgY29uc3QgZG9jdW1lbnROYW1lID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkRvY3VtZW50TmFtZTtcbiAgY29uc3QgY2xvdWRXYXRjaExvZ0dyb3VwTmFtZSA9XG4gICAgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkNsb3VkV2F0Y2hMb2dHcm91cE5hbWU7XG5cbiAgLy8gZGVidWdcbiAgY29uc29sZS5sb2coJ1Jlc291cmNlUHJvcGVydGllcyByYXc6ICVqJywgcmVzb3VyY2VQcm9wZXJ0aWVzKTtcbiAgY29uc29sZS5sb2coJ0luc3RhbmNlSWQ6ICVzJywgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkluc3RhbmNlSWQpO1xuICBjb25zb2xlLmxvZygnVlNDb2RlUGFzc3dvcmQ6ICVzJywgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlZTQ29kZVBhc3N3b3JkKTtcblxuICAvLyB0byBiZSBhYmxlIHRvIG1vZGlmeSB0aGVtXG4gIGNvbnN0IHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwgPVxuICAgIHJlc291cmNlUHJvcGVydGllcyBhcyBQYXJ0aWFsPENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNvdXJjZVByb3BlcnRpZXNDb21tb24+O1xuICBjb25zb2xlLmxvZygnUmVzb3VyY2VQcm9wZXJ0aWVzIGJlZm9yZTogJWonLCByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsKTtcbiAgZGVsZXRlIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuU2VydmljZVRva2VuO1xuICBpZiAocmVzb3VyY2VQcm9wZXJ0aWVzUGFydGlhbC5TZXJ2aWNlVGltZW91dCkge1xuICAgIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLlNlcnZpY2VUaW1lb3V0O1xuICB9XG4gIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLkluc3RhbmNlSWQ7XG4gIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLkRvY3VtZW50TmFtZTtcbiAgZGVsZXRlIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuQ2xvdWRXYXRjaExvZ0dyb3VwTmFtZTtcbiAgaWYgKHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgZGVsZXRlIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuUGh5c2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgY29uc29sZS5sb2coXG4gICAgJ1Jlc291cmNlUHJvcGVydGllcyBmaWx0ZXJlZCBhZnRlcjogJWonLFxuICAgIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwsXG4gICk7XG5cbiAgY29uc3QgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwpKSB7XG4gICAgcGFyYW1ldGVyc1trZXldID0gW3ZhbHVlXTtcbiAgfVxuICBjb25zb2xlLmxvZygnbWFwcGVkIHBhcmFtZXRlcnM6ICVqJywgcGFyYW1ldGVycyk7XG5cbiAgY29uc29sZS5sb2coXG4gICAgYFJ1bm5pbmcgU1NNIERvY3VtZW50ICcke2RvY3VtZW50TmFtZX0nIG9uIEVDMiBpbnN0YW5jZSAnJHtpbnN0YW5jZUlkfScuIExvZ2dpbmcgdG8gJyR7Y2xvdWRXYXRjaExvZ0dyb3VwTmFtZX0nIHdpdGggcGFyYW1ldGVyczogJyR7SlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycyl9J2AsXG4gICk7XG5cbiAgLy8gU3RlcCAxOiBTZW5kIHRoZSBTU00gY29tbWFuZCBvbmNlIGFuZCBnZXQgdGhlIENvbW1hbmRJZFxuICBsZXQgY29tbWFuZElkOiBzdHJpbmc7XG4gIGxldCBhdHRlbXB0Tm8gPSAwO1xuXG4gIC8vIFJldHJ5IGxvb3AgZm9yIHNlbmRpbmcgdGhlIGNvbW1hbmQgKGhhbmRsZXMgSUFNIHByb3BhZ2F0aW9uIGlzc3VlcylcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBhdHRlbXB0Tm8gKz0gMTtcbiAgICBjb25zdCB0aW1lUmVtYWluaW5nID0gY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBTZW5kIGF0dGVtcHQ6ICR7YXR0ZW1wdE5vfS4gVGltZSBSZW1haW5pbmc6ICR7dGltZVJlbWFpbmluZyAvIDEwMDB9c2AsXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNzbS5zZW5kKFxuICAgICAgICBuZXcgU2VuZENvbW1hbmRDb21tYW5kKHtcbiAgICAgICAgICBEb2N1bWVudE5hbWU6IGRvY3VtZW50TmFtZSxcbiAgICAgICAgICBJbnN0YW5jZUlkczogW2luc3RhbmNlSWRdLFxuICAgICAgICAgIENsb3VkV2F0Y2hPdXRwdXRDb25maWc6IHtcbiAgICAgICAgICAgIENsb3VkV2F0Y2hMb2dHcm91cE5hbWU6IGNsb3VkV2F0Y2hMb2dHcm91cE5hbWUsXG4gICAgICAgICAgICBDbG91ZFdhdGNoT3V0cHV0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coYHNlbmRDb21tYW5kIHJlc3BvbnNlOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmQgPSByZXNwb25zZS5Db21tYW5kITtcbiAgICAgIGNvbW1hbmRJZCA9IGNvbW1hbmQuQ29tbWFuZElkITtcbiAgICAgIGNvbnNvbGUubG9nKGBDb21tYW5kIHNlbnQgc3VjY2Vzc2Z1bGx5LiBDb21tYW5kSWQ6ICR7Y29tbWFuZElkfWApO1xuICAgICAgYnJlYWs7IC8vIFN1Y2Nlc3NmdWxseSBzZW50IGNvbW1hbmQsIGV4aXQgcmV0cnkgbG9vcFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBzZW5kaW5nIGNvbW1hbmQ6JywgZXJyb3IpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmV0cnlhYmxlIGVycm9yIChJQU0gcHJvcGFnYXRpb24sIHRocm90dGxpbmcsIGV0Yy4pXG4gICAgICBjb25zdCBpc1VuYXV0aG9yaXplZCA9XG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdVbmF1dGhvcml6ZWRFeGNlcHRpb24nIHx8XG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nIHx8XG4gICAgICAgIChlcnJvci5tZXNzYWdlICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhdXRob3JpemVkJykpO1xuICAgICAgY29uc3QgaXNUaHJvdHRsZWQgPVxuICAgICAgICBlcnJvci5uYW1lID09PSAnVGhyb3R0bGluZ0V4Y2VwdGlvbicgfHxcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbic7XG4gICAgICBjb25zdCBpc1JldHJ5YWJsZSA9IGlzVW5hdXRob3JpemVkIHx8IGlzVGhyb3R0bGVkO1xuXG4gICAgICBjb25zdCByZW1haW5pbmdUaW1lID0gY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKTtcblxuICAgICAgaWYgKGlzUmV0cnlhYmxlICYmIHJlbWFpbmluZ1RpbWUgPiBTTEVFUF9NUykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgUmV0cnlhYmxlIGVycm9yIGVuY291bnRlcmVkICgke2Vycm9yLm5hbWV9KS4gQXR0ZW1wdCAke2F0dGVtcHROb30uIFNsZWVwaW5nOiAke1NMRUVQX01TIC8gMTAwMH1zIGJlZm9yZSByZXRyeWAsXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFNMRUVQX01TKSk7XG4gICAgICAgIC8vIENvbnRpbnVlIHRvIG5leHQgaXRlcmF0aW9uIG9mIHdoaWxlIGxvb3BcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vbi1yZXRyeWFibGUgZXJyb3Igb3Igb3V0IG9mIHRpbWVcbiAgICAgICAgY29uc29sZS5sb2coJ05vbi1yZXRyeWFibGUgZXJyb3Igb3IgdGltZW91dC4gRmFpbGluZy4uLicpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDI6IFBvbGwgZm9yIGNvbW1hbmQgY29tcGxldGlvbiB1c2luZyBnZXRDb21tYW5kSW52b2NhdGlvblxuICBsZXQgcG9sbEF0dGVtcHRObyA9IDA7XG4gIGNvbnN0IHJlc3BvbnNlRGF0YTogYW55ID0geyBDb21tYW5kSWQ6IGNvbW1hbmRJZCB9O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcG9sbEF0dGVtcHRObyArPSAxO1xuICAgIGNvbnN0IHRpbWVSZW1haW5pbmcgPSBjb250ZXh0LmdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcygpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFBvbGwgYXR0ZW1wdDogJHtwb2xsQXR0ZW1wdE5vfS4gVGltZSBSZW1haW5pbmc6ICR7dGltZVJlbWFpbmluZyAvIDEwMDB9c2AsXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnZvY2F0aW9uUmVzcG9uc2UgPSBhd2FpdCBzc20uc2VuZChcbiAgICAgICAgbmV3IEdldENvbW1hbmRJbnZvY2F0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgQ29tbWFuZElkOiBjb21tYW5kSWQsXG4gICAgICAgICAgSW5zdGFuY2VJZDogaW5zdGFuY2VJZCxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYGdldENvbW1hbmRJbnZvY2F0aW9uIHJlc3BvbnNlOiAke0pTT04uc3RyaW5naWZ5KGludm9jYXRpb25SZXNwb25zZSl9YCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBpbnZvY2F0aW9uUmVzcG9uc2UuU3RhdHVzITtcblxuICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSAnUGVuZGluZyc6XG4gICAgICAgIGNhc2UgJ0luUHJvZ3Jlc3MnOlxuICAgICAgICBjYXNlICdEZWxheWVkJzpcbiAgICAgICAgICBpZiAodGltZVJlbWFpbmluZyA+IFNMRUVQX01TKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgYENvbW1hbmQgJHtjb21tYW5kSWR9IHN0YXR1czogJyR7c3RhdHVzfScuIFNsZWVwaW5nOiAke1NMRUVQX01TIC8gMTAwMH1zYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBTTEVFUF9NUykpO1xuICAgICAgICAgICAgYnJlYWs7IC8vIENvbnRpbnVlIHBvbGxpbmdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgU1NNIERvY3VtZW50ICR7ZG9jdW1lbnROYW1lfSBvbiBFQzIgaW5zdGFuY2UgJHtpbnN0YW5jZUlkfSB0aW1lZCBvdXQgd2hpbGUgbGFtYmRhIHdhaXRpbmcgKHN0YXR1czogJHtzdGF0dXN9KWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3VjY2Vzcyc6XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgSW5zdGFuY2UgJHtpbnN0YW5jZUlkfSBzdWNjZXNzZnVsbHkgYm9vdHN0cmFwcGVkLiBDb21tYW5kICR7Y29tbWFuZElkfSBjb21wbGV0ZWQuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IERhdGE6IHJlc3BvbnNlRGF0YSB9O1xuICAgICAgICBjYXNlICdUaW1lZE91dCc6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNTTSBEb2N1bWVudCAke2RvY3VtZW50TmFtZX0gb24gRUMyIGluc3RhbmNlICR7aW5zdGFuY2VJZH0gdGltZWQgb3V0YCxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlICdDYW5jZWxsZWQnOlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBTU00gRG9jdW1lbnQgJHtkb2N1bWVudE5hbWV9IG9uIEVDMiBpbnN0YW5jZSAke2luc3RhbmNlSWR9IGNhbmNlbGxlZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnRmFpbGVkJzpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU1NNIERvY3VtZW50ICR7ZG9jdW1lbnROYW1lfSBvbiBFQzIgaW5zdGFuY2UgJHtpbnN0YW5jZUlkfSBmYWlsZWRgLFxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNTTSBEb2N1bWVudCAke2RvY3VtZW50TmFtZX0gb24gRUMyIGluc3RhbmNlICR7aW5zdGFuY2VJZH0gdW5rbm93biBzdGF0dXM6ICR7c3RhdHVzfWAsXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGludm9jYXRpb24gbm90IGF2YWlsYWJsZSB5ZXQgZXJyb3JcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBjb250ZXh0LmdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcygpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdJbnZvY2F0aW9uRG9lc05vdEV4aXN0JyAmJlxuICAgICAgICByZW1haW5pbmdUaW1lID4gU0xFRVBfTVNcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgSW52b2NhdGlvbiBub3QgeWV0IGF2YWlsYWJsZS4gU2xlZXBpbmc6ICR7U0xFRVBfTVMgLyAxMDAwfXNgLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBTTEVFUF9NUykpO1xuICAgICAgICAvLyBDb250aW51ZSBwb2xsaW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb24tcmV0cnlhYmxlIGVycm9yIG9yIG91dCBvZiB0aW1lXG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBjaGVja2luZyBjb21tYW5kIHN0YXR1czonLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiJdfQ==
|
|
@@ -12,11 +12,11 @@ class SecretRetrieverFunction extends lambda.Function {
|
|
|
12
12
|
super(scope, id, {
|
|
13
13
|
description: 'src/secret-retriever/secret-retriever.lambda.ts',
|
|
14
14
|
...props,
|
|
15
|
-
runtime: new lambda.Runtime('
|
|
15
|
+
runtime: new lambda.Runtime('nodejs22.x', lambda.RuntimeFamily.NODEJS),
|
|
16
16
|
handler: 'index.handler',
|
|
17
17
|
code: lambda.Code.fromAsset(path.join(__dirname, '../../assets/secret-retriever/secret-retriever.lambda')),
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.SecretRetrieverFunction = SecretRetrieverFunction;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LXJldHJpZXZlci1mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQzFELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsaURBQWlEO1lBQzlELEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSx1REFBdUQsQ0FBQyxDQUFDO1NBQzNHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELDBEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBTZWNyZXRSZXRyaWV2ZXJGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldFJldHJpZXZlckZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb25PcHRpb25zIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRSZXRyaWV2ZXJGdW5jdGlvbiBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU2VjcmV0UmV0cmlldmVyRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvc2VjcmV0LXJldHJpZXZlci9zZWNyZXQtcmV0cmlldmVyLmxhbWJkYS50cycsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJ1bnRpbWU6IG5ldyBsYW1iZGEuUnVudGltZSgnbm9kZWpzMjIueCcsIGxhbWJkYS5SdW50aW1lRmFtaWx5Lk5PREVKUyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Fzc2V0cy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXIubGFtYmRhJykpLFxuICAgIH0pO1xuICB9XG59Il19
|
package/lib/vscode-server.d.ts
CHANGED
|
@@ -152,6 +152,46 @@ export interface VSCodeServerProps {
|
|
|
152
152
|
* @default false
|
|
153
153
|
*/
|
|
154
154
|
readonly skipStatusChecks?: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Remote git repository URL to clone into the home folder.
|
|
157
|
+
*
|
|
158
|
+
* If provided, the repository will be cloned into the user's home folder during instance setup.
|
|
159
|
+
* Useful for pre-populating workshop environments with starter code.
|
|
160
|
+
*
|
|
161
|
+
* @example 'https://github.com/aws-samples/my-workshop-repo.git'
|
|
162
|
+
* @default - no repo cloned
|
|
163
|
+
*/
|
|
164
|
+
readonly repoUrl?: string;
|
|
165
|
+
/**
|
|
166
|
+
* S3 path to a zip file containing assets to extract into the home folder.
|
|
167
|
+
*
|
|
168
|
+
* The zip contents will be extracted to the user's home folder and committed to git.
|
|
169
|
+
* Use this to provide workshop materials, sample data, or configuration files.
|
|
170
|
+
*
|
|
171
|
+
* @example 'my-workshop-bucket/assets/workshop-materials.zip'
|
|
172
|
+
* @default - no assets downloaded
|
|
173
|
+
*/
|
|
174
|
+
readonly assetZipS3Path?: string;
|
|
175
|
+
/**
|
|
176
|
+
* S3 path to a zip file containing git branches to create in the home folder repository.
|
|
177
|
+
*
|
|
178
|
+
* Each top-level folder in the zip becomes a separate git branch with that folder's contents.
|
|
179
|
+
* Ideal for creating step-by-step workshop branches (e.g., step-1, step-2, solution).
|
|
180
|
+
*
|
|
181
|
+
* @example 'my-workshop-bucket/branches/lab-branches.zip' (containing folders: step-1/, step-2/, solution/)
|
|
182
|
+
* @default - no branches created
|
|
183
|
+
*/
|
|
184
|
+
readonly branchZipS3Path?: string;
|
|
185
|
+
/**
|
|
186
|
+
* S3 path to a zip file containing multiple folders to create as separate git repositories.
|
|
187
|
+
*
|
|
188
|
+
* Each top-level folder in the zip becomes a separate subfolder in the parent directory,
|
|
189
|
+
* initialized as its own git repository. Useful for multi-project workshops.
|
|
190
|
+
*
|
|
191
|
+
* @example 'my-workshop-bucket/folders/workshop-projects.zip' (containing folders: frontend/, backend/, infrastructure/)
|
|
192
|
+
* @default - no folders created
|
|
193
|
+
*/
|
|
194
|
+
readonly folderZipS3Path?: string;
|
|
155
195
|
}
|
|
156
196
|
/**
|
|
157
197
|
* The flavor of linux you want to run vscode server on
|