@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
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handler = void 0;
|
|
4
|
-
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
5
|
-
const client_ec2_1 = require("@aws-sdk/client-ec2");
|
|
6
|
-
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
7
|
-
const ec2 = new client_ec2_1.EC2Client({});
|
|
8
|
-
const ddbClient = new client_dynamodb_1.DynamoDBClient({});
|
|
9
|
-
const ddb = lib_dynamodb_1.DynamoDBDocumentClient.from(ddbClient);
|
|
10
|
-
const TABLE_NAME = process.env.TABLE_NAME;
|
|
11
|
-
const handler = async (event) => {
|
|
12
|
-
console.log('StatusCheck/Start triggered', { event });
|
|
13
|
-
const instanceId = event.pathParameters?.instanceId;
|
|
14
|
-
const isStartRequest = event.resource?.includes('/start') && event.httpMethod === 'POST';
|
|
15
|
-
if (!instanceId) {
|
|
16
|
-
return {
|
|
17
|
-
statusCode: 400,
|
|
18
|
-
headers: {
|
|
19
|
-
'Content-Type': 'application/json',
|
|
20
|
-
'Access-Control-Allow-Origin': '*',
|
|
21
|
-
},
|
|
22
|
-
body: JSON.stringify({ error: 'Missing instanceId' }),
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
// Handle POST /status/{instanceId}/start - Start instance
|
|
27
|
-
if (isStartRequest) {
|
|
28
|
-
console.log('Starting instance:', instanceId);
|
|
29
|
-
const startCommand = new client_ec2_1.StartInstancesCommand({
|
|
30
|
-
InstanceIds: [instanceId],
|
|
31
|
-
});
|
|
32
|
-
await ec2.send(startCommand);
|
|
33
|
-
// Update DynamoDB state
|
|
34
|
-
await ddb.send(new lib_dynamodb_1.UpdateCommand({
|
|
35
|
-
TableName: TABLE_NAME,
|
|
36
|
-
Key: { instanceId },
|
|
37
|
-
UpdateExpression: 'SET instanceState = :state, lastActivityTime = :time',
|
|
38
|
-
ExpressionAttributeValues: {
|
|
39
|
-
':state': 'starting',
|
|
40
|
-
':time': new Date().toISOString(),
|
|
41
|
-
},
|
|
42
|
-
}));
|
|
43
|
-
return {
|
|
44
|
-
statusCode: 200,
|
|
45
|
-
headers: {
|
|
46
|
-
'Content-Type': 'application/json',
|
|
47
|
-
'Access-Control-Allow-Origin': '*',
|
|
48
|
-
},
|
|
49
|
-
body: JSON.stringify({
|
|
50
|
-
message: 'Instance start initiated',
|
|
51
|
-
state: 'starting',
|
|
52
|
-
instanceId,
|
|
53
|
-
}),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
// Handle GET /status/{instanceId} - Check status
|
|
57
|
-
const statusCommand = new client_ec2_1.DescribeInstanceStatusCommand({
|
|
58
|
-
InstanceIds: [instanceId],
|
|
59
|
-
IncludeAllInstances: true,
|
|
60
|
-
});
|
|
61
|
-
const statusResponse = await ec2.send(statusCommand);
|
|
62
|
-
const instanceStatus = statusResponse.InstanceStatuses?.[0];
|
|
63
|
-
const state = instanceStatus?.InstanceState?.Name || 'unknown';
|
|
64
|
-
console.log('Instance state:', state);
|
|
65
|
-
// If running, update DynamoDB
|
|
66
|
-
if (state === 'running') {
|
|
67
|
-
await ddb.send(new lib_dynamodb_1.UpdateCommand({
|
|
68
|
-
TableName: TABLE_NAME,
|
|
69
|
-
Key: { instanceId },
|
|
70
|
-
UpdateExpression: 'SET instanceState = :state, lastActivityTime = :time',
|
|
71
|
-
ExpressionAttributeValues: {
|
|
72
|
-
':state': 'running',
|
|
73
|
-
':time': new Date().toISOString(),
|
|
74
|
-
},
|
|
75
|
-
}));
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
statusCode: 200,
|
|
79
|
-
headers: {
|
|
80
|
-
'Content-Type': 'application/json',
|
|
81
|
-
'Access-Control-Allow-Origin': '*',
|
|
82
|
-
'Cache-Control': 'no-cache, no-store, must-revalidate',
|
|
83
|
-
},
|
|
84
|
-
body: JSON.stringify({
|
|
85
|
-
state,
|
|
86
|
-
ready: state === 'running',
|
|
87
|
-
instanceId,
|
|
88
|
-
}),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
console.error('Error in status check/start:', error);
|
|
93
|
-
return {
|
|
94
|
-
statusCode: 500,
|
|
95
|
-
headers: {
|
|
96
|
-
'Content-Type': 'application/json',
|
|
97
|
-
'Access-Control-Allow-Origin': '*',
|
|
98
|
-
},
|
|
99
|
-
body: JSON.stringify({ error: 'Internal server error' }),
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
exports.handler = handler;
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLWNoZWNrLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0dXMtY2hlY2svc3RhdHVzLWNoZWNrLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBMEQ7QUFDMUQsb0RBQXNHO0FBQ3RHLHdEQUE4RTtBQUc5RSxNQUFNLEdBQUcsR0FBRyxJQUFJLHNCQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQ0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sR0FBRyxHQUFHLHFDQUFzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVuRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVcsQ0FBQztBQUVwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQzFCLEtBQTJCLEVBQ0ssRUFBRTtJQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUV0RCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQztJQUNwRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQztJQUV6RixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTztZQUNMLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLDZCQUE2QixFQUFFLEdBQUc7YUFDbkM7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDO1NBQ3RELENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsMERBQTBE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QUMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztTQUN6RCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQXpHVyxRQUFBLE9BQU8sV0F5R2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHluYW1vREJDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xuaW1wb3J0IHsgRUMyQ2xpZW50LCBEZXNjcmliZUluc3RhbmNlU3RhdHVzQ29tbWFuZCwgU3RhcnRJbnN0YW5jZXNDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjMic7XG5pbXBvcnQgeyBEeW5hbW9EQkRvY3VtZW50Q2xpZW50LCBVcGRhdGVDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvbGliLWR5bmFtb2RiJztcbmltcG9ydCB0eXBlIHsgQVBJR2F0ZXdheVByb3h5RXZlbnQsIEFQSUdhdGV3YXlQcm94eVJlc3VsdCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuXG5jb25zdCBlYzIgPSBuZXcgRUMyQ2xpZW50KHt9KTtcbmNvbnN0IGRkYkNsaWVudCA9IG5ldyBEeW5hbW9EQkNsaWVudCh7fSk7XG5jb25zdCBkZGIgPSBEeW5hbW9EQkRvY3VtZW50Q2xpZW50LmZyb20oZGRiQ2xpZW50KTtcblxuY29uc3QgVEFCTEVfTkFNRSA9IHByb2Nlc3MuZW52LlRBQkxFX05BTUUhO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50LFxuKTogUHJvbWlzZTxBUElHYXRld2F5UHJveHlSZXN1bHQ+ID0+IHtcbiAgY29uc29sZS5sb2coJ1N0YXR1c0NoZWNrL1N0YXJ0IHRyaWdnZXJlZCcsIHsgZXZlbnQgfSk7XG5cbiAgY29uc3QgaW5zdGFuY2VJZCA9IGV2ZW50LnBhdGhQYXJhbWV0ZXJzPy5pbnN0YW5jZUlkO1xuICBjb25zdCBpc1N0YXJ0UmVxdWVzdCA9IGV2ZW50LnJlc291cmNlPy5pbmNsdWRlcygnL3N0YXJ0JykgJiYgZXZlbnQuaHR0cE1ldGhvZCA9PT0gJ1BPU1QnO1xuXG4gIGlmICghaW5zdGFuY2VJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogJ01pc3NpbmcgaW5zdGFuY2VJZCcgfSksXG4gICAgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gSGFuZGxlIFBPU1QgL3N0YXR1cy97aW5zdGFuY2VJZH0vc3RhcnQgLSBTdGFydCBpbnN0YW5jZVxuICAgIGlmIChpc1N0YXJ0UmVxdWVzdCkge1xuICAgICAgY29uc29sZS5sb2coJ1N0YXJ0aW5nIGluc3RhbmNlOicsIGluc3RhbmNlSWQpO1xuXG4gICAgICBjb25zdCBzdGFydENvbW1hbmQgPSBuZXcgU3RhcnRJbnN0YW5jZXNDb21tYW5kKHtcbiAgICAgICAgSW5zdGFuY2VJZHM6IFtpbnN0YW5jZUlkXSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBlYzIuc2VuZChzdGFydENvbW1hbmQpO1xuXG4gICAgICAvLyBVcGRhdGUgRHluYW1vREIgc3RhdGVcbiAgICAgIGF3YWl0IGRkYi5zZW5kKG5ldyBVcGRhdGVDb21tYW5kKHtcbiAgICAgICAgVGFibGVOYW1lOiBUQUJMRV9OQU1FLFxuICAgICAgICBLZXk6IHsgaW5zdGFuY2VJZCB9LFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnU0VUIGluc3RhbmNlU3RhdGUgPSA6c3RhdGUsIGxhc3RBY3Rpdml0eVRpbWUgPSA6dGltZScsXG4gICAgICAgIEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAnOnN0YXRlJzogJ3N0YXJ0aW5nJyxcbiAgICAgICAgICAnOnRpbWUnOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG1lc3NhZ2U6ICdJbnN0YW5jZSBzdGFydCBpbml0aWF0ZWQnLFxuICAgICAgICAgIHN0YXRlOiAnc3RhcnRpbmcnLFxuICAgICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgR0VUIC9zdGF0dXMve2luc3RhbmNlSWR9IC0gQ2hlY2sgc3RhdHVzXG4gICAgY29uc3Qgc3RhdHVzQ29tbWFuZCA9IG5ldyBEZXNjcmliZUluc3RhbmNlU3RhdHVzQ29tbWFuZCh7XG4gICAgICBJbnN0YW5jZUlkczogW2luc3RhbmNlSWRdLFxuICAgICAgSW5jbHVkZUFsbEluc3RhbmNlczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgZWMyLnNlbmQoc3RhdHVzQ29tbWFuZCk7XG4gICAgY29uc3QgaW5zdGFuY2VTdGF0dXMgPSBzdGF0dXNSZXNwb25zZS5JbnN0YW5jZVN0YXR1c2VzPy5bMF07XG4gICAgY29uc3Qgc3RhdGUgPSBpbnN0YW5jZVN0YXR1cz8uSW5zdGFuY2VTdGF0ZT8uTmFtZSB8fCAndW5rbm93bic7XG5cbiAgICBjb25zb2xlLmxvZygnSW5zdGFuY2Ugc3RhdGU6Jywgc3RhdGUpO1xuXG4gICAgLy8gSWYgcnVubmluZywgdXBkYXRlIER5bmFtb0RCXG4gICAgaWYgKHN0YXRlID09PSAncnVubmluZycpIHtcbiAgICAgIGF3YWl0IGRkYi5zZW5kKG5ldyBVcGRhdGVDb21tYW5kKHtcbiAgICAgICAgVGFibGVOYW1lOiBUQUJMRV9OQU1FLFxuICAgICAgICBLZXk6IHsgaW5zdGFuY2VJZCB9LFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnU0VUIGluc3RhbmNlU3RhdGUgPSA6c3RhdGUsIGxhc3RBY3Rpdml0eVRpbWUgPSA6dGltZScsXG4gICAgICAgIEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAnOnN0YXRlJzogJ3J1bm5pbmcnLFxuICAgICAgICAgICc6dGltZSc6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZSwgbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZScsXG4gICAgICB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBzdGF0ZSxcbiAgICAgICAgcmVhZHk6IHN0YXRlID09PSAncnVubmluZycsXG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHN0YXR1cyBjaGVjay9zdGFydDonLCBlcnJvcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZTogNTAwLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3InIH0pLFxuICAgIH07XG4gIH1cbn07XG4iXX0=
|