@mavogel/cdk-vscode-server 0.0.62 → 0.0.64

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.
Files changed (123) hide show
  1. package/.jsii +124 -178
  2. package/API.md +105 -200
  3. package/CLAUDE.md +288 -58
  4. package/README.md +40 -2
  5. package/assets/idle-monitor-enabler/idle-monitor-enabler.lambda/index.js +67 -0
  6. package/assets/installer/installer.lambda/index.js +67 -30
  7. package/awslint.json +5 -0
  8. package/examples/auto-stop/main.ts +1 -1
  9. package/examples/custom/main.ts +1 -1
  10. package/examples/git-repo/main.ts +30 -0
  11. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +2 -2
  12. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +1 -1
  13. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +8 -8
  14. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +257 -94
  15. package/integ-tests/{integ.stop-on-idle.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.al2023.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  16. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.al2023.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  17. package/integ-tests/integ.al2023.ts.snapshot/integ.json +1 -1
  18. package/integ-tests/integ.al2023.ts.snapshot/manifest.json +19 -3
  19. package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -1
  20. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +2 -2
  21. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +1 -1
  22. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +8 -8
  23. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +273 -97
  24. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.custom-domain.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  25. package/integ-tests/{integ.al2023.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.custom-domain.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  26. package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +1 -1
  27. package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +25 -6
  28. package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -1
  29. package/integ-tests/integ.stop-on-idle.ts +1 -4
  30. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.assets.json +2 -2
  31. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.template.json +4 -4
  32. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.assets.json +23 -9
  33. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.template.json +758 -197
  34. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.22c8a6c357b704e370bef317ae1b52c59f684aa7640422a3d1dfe813d1f77853.lambda/index.js +67 -0
  35. package/integ-tests/{integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.stop-on-idle.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  36. package/integ-tests/integ.stop-on-idle.ts.snapshot/manifest.json +363 -76
  37. package/integ-tests/integ.stop-on-idle.ts.snapshot/tree.json +1 -1
  38. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +2 -2
  39. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +1 -1
  40. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +8 -8
  41. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +273 -97
  42. package/integ-tests/{integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda → integ.ubuntu.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda}/index.js +67 -30
  43. package/integ-tests/{integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4 → integ.ubuntu.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9}/index.js +50 -25
  44. package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +1 -1
  45. package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +25 -6
  46. package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -1
  47. package/integ-tests/integ.ubuntu24.ts +69 -0
  48. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +33 -0
  49. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +337 -0
  50. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.assets.json +118 -0
  51. package/integ-tests/integ.ubuntu24.ts.snapshot/IntegTestStackUbuntu24.template.json +2725 -0
  52. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
  53. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
  54. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
  55. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
  56. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
  57. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
  58. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
  59. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
  60. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
  61. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
  62. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
  63. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
  64. package/integ-tests/integ.ubuntu24.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
  65. package/integ-tests/integ.ubuntu24.ts.snapshot/integ.json +23 -0
  66. package/integ-tests/integ.ubuntu24.ts.snapshot/manifest.json +1473 -0
  67. package/integ-tests/integ.ubuntu24.ts.snapshot/tree.json +1 -0
  68. package/integ-tests/integ.ubuntu25.ts +69 -0
  69. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.assets.json +33 -0
  70. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegSetupVSCodeOnUbuntu25DefaultTestDeployAssert48DBCF35.template.json +337 -0
  71. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.assets.json +118 -0
  72. package/integ-tests/integ.ubuntu25.ts.snapshot/IntegTestStackUbuntu25.template.json +2725 -0
  73. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
  74. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.2f99f38311da357eaaea1284d67c759759324dec4a1cd11621d9c59eea9e81df.lambda/index.js +180 -0
  75. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
  76. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
  77. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
  78. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
  79. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
  80. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
  81. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
  82. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
  83. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
  84. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
  85. package/integ-tests/integ.ubuntu25.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
  86. package/integ-tests/integ.ubuntu25.ts.snapshot/integ.json +23 -0
  87. package/integ-tests/integ.ubuntu25.ts.snapshot/manifest.json +1473 -0
  88. package/integ-tests/integ.ubuntu25.ts.snapshot/tree.json +1 -0
  89. package/lib/idle-monitor/idle-monitor-function.js +2 -2
  90. package/lib/idle-monitor/idle-monitor.js +5 -2
  91. package/lib/idle-monitor-enabler/idle-monitor-enabler-function.d.ts +13 -0
  92. package/lib/idle-monitor-enabler/idle-monitor-enabler-function.js +22 -0
  93. package/lib/idle-monitor-enabler/idle-monitor-enabler.d.ts +25 -0
  94. package/lib/idle-monitor-enabler/idle-monitor-enabler.js +76 -0
  95. package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.d.ts +9 -0
  96. package/lib/idle-monitor-enabler/idle-monitor-enabler.lambda.js +48 -0
  97. package/lib/index.d.ts +0 -1
  98. package/lib/index.js +1 -2
  99. package/lib/installer/installer-function.js +2 -2
  100. package/lib/installer/installer.d.ts +105 -0
  101. package/lib/installer/installer.js +659 -301
  102. package/lib/installer/installer.lambda.js +64 -30
  103. package/lib/mappings.js +11 -3
  104. package/lib/secret-retriever/secret-retriever-function.js +2 -2
  105. package/lib/vscode-server.d.ts +45 -1
  106. package/lib/vscode-server.js +35 -5
  107. package/package.json +12 -12
  108. package/.claude/hooks/file_checker.sh +0 -178
  109. package/.qlty/.gitignore +0 -7
  110. package/.qlty/configs/.yamllint.yaml +0 -21
  111. package/.qlty/qlty.toml +0 -115
  112. package/assets/status-check/status-check.lambda/index.js +0 -123
  113. package/integ-tests/integ.al2023.ts.snapshot/cdk.out +0 -1
  114. package/integ-tests/integ.al2023.ts.snapshot/read.13497.1.lock +0 -1
  115. package/integ-tests/integ.custom-domain.ts.snapshot/read.13497.1.lock +0 -1
  116. package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +0 -1
  117. package/integ-tests/integ.ubuntu.ts.snapshot/read.13497.1.lock +0 -1
  118. package/lib/status-check/status-check-function.d.ts +0 -13
  119. package/lib/status-check/status-check-function.js +0 -22
  120. package/lib/status-check/status-check.d.ts +0 -36
  121. package/lib/status-check/status-check.js +0 -109
  122. package/lib/status-check/status-check.lambda.d.ts +0 -2
  123. 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
- console.log(`Attempt: ${attemptNo}. Time Remaining: ${timeRemaining / 1000}s`);
48
+ const timeRemaining = context.getRemainingTimeInMillis();
49
+ console.log(`Send attempt: ${attemptNo}. Time Remaining: ${timeRemaining / 1000}s`);
47
50
  try {
48
- const response = await ssm.sendCommand({
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
- const commandId = command.CommandId;
60
- const responseData = { CommandId: commandId };
61
- switch (command.Status) {
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
- timeRemaining = context.getRemainingTimeInMillis();
105
+ case 'Delayed':
65
106
  if (timeRemaining > SLEEP_MS) {
66
- console.log(`Instance ${instanceId} not ready: 'InProgress'. Sleeping: ${SLEEP_MS / 1000}s`);
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 in progress`);
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 ${command.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
- console.log('Error occurred:', error);
89
- // Check if this is a retryable error (IAM propagation, throttling, etc.)
90
- const isUnauthorized = error.name === 'UnauthorizedException' ||
91
- error.name === 'AccessDeniedException' ||
92
- (error.message && error.message.includes('not authorized'));
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 to next iteration of while loop
134
+ // Continue polling
101
135
  }
102
136
  else {
103
137
  // Non-retryable error or out of time
104
- console.log('Non-retryable error or timeout. Failing...');
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGVyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnN0YWxsZXIvaW5zdGFsbGVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFLNkI7QUFTN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBRWYsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUMxQixLQUFxQixFQUNyQixPQUFnQixFQUNVLEVBQUU7SUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUUzRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELG1CQUFtQjtJQUNuQixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7SUFDM0QsTUFBTSxzQkFBc0IsR0FDMUIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDO0lBRWxELFFBQVE7SUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDOUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFM0UsNEJB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WSxDQUN2RSxDQUFDO2dCQUNKLEtBQUssUUFBUTtvQkFDWCxNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixZQUFZLG9CQUFvQixVQUFVLFNBQVMsQ0FDcEUsQ0FBQztnQkFDSjtvQkFDRSxNQUFNLElBQUksS0FBSyxDQUNiLGdCQUFnQixZQUFZLG9CQUFvQixVQUFVLG9CQUFvQixNQUFNLEVBQUUsQ0FDdkYsQ0FBQztZQUNOLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQix5REFBeUQ7WUFDekQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFFekQsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLHdCQUF3QjtnQkFDdkMsYUFBYSxHQUFHLFFBQVEsRUFDeEIsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUNULDJDQUEyQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQzlELENBQUM7Z0JBQ0YsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxtQkFBbUI7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHFDQUFxQztnQkFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUM7QUFqTVcsUUFBQSxPQUFPLFdBaU1sQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbW1hbmQsXG4gIEdldENvbW1hbmRJbnZvY2F0aW9uQ29tbWFuZCxcbiAgU2VuZENvbW1hbmRDb21tYW5kLFxuICBTU00sXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHR5cGUge1xuICBPbkV2ZW50UmVxdWVzdCxcbiAgT25FdmVudFJlc3BvbnNlLFxufSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzL2xpYi9wcm92aWRlci1mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc291cmNlUHJvcGVydGllc0NvbW1vbiB9IGZyb20gJ2F3cy1sYW1iZGEvdHJpZ2dlci9jbG91ZGZvcm1hdGlvbi1jdXN0b20tcmVzb3VyY2UnO1xuXG5jb25zdCBzc20gPSBuZXcgU1NNKCk7XG5jb25zdCBTTEVFUF9NUyA9IDI5MDA7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogT25FdmVudFJlcXVlc3QsXG4gIGNvbnRleHQ6IENvbnRleHQsXG4pOiBQcm9taXNlPE9uRXZlbnRSZXNwb25zZT4gPT4ge1xuICBjb25zb2xlLmxvZygnRXZlbnQ6ICVqJywgeyAuLi5ldmVudCwgUmVzcG9uc2VVUkw6ICcuLi4nIH0pO1xuXG4gIGlmIChldmVudC5SZXF1ZXN0VHlwZSAhPT0gJ0NyZWF0ZScpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gb25seSBDcmVhdGUgY2FzZVxuICBjb25zdCByZXNvdXJjZVByb3BlcnRpZXMgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXM7XG4gIGNvbnN0IGluc3RhbmNlSWQgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuSW5zdGFuY2VJZDtcbiAgY29uc3QgZG9jdW1lbnROYW1lID0gZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkRvY3VtZW50TmFtZTtcbiAgY29uc3QgY2xvdWRXYXRjaExvZ0dyb3VwTmFtZSA9XG4gICAgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkNsb3VkV2F0Y2hMb2dHcm91cE5hbWU7XG5cbiAgLy8gZGVidWdcbiAgY29uc29sZS5sb2coJ1Jlc291cmNlUHJvcGVydGllcyByYXc6ICVqJywgcmVzb3VyY2VQcm9wZXJ0aWVzKTtcbiAgY29uc29sZS5sb2coJ0luc3RhbmNlSWQ6ICVzJywgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLkluc3RhbmNlSWQpO1xuICBjb25zb2xlLmxvZygnVlNDb2RlUGFzc3dvcmQ6ICVzJywgZXZlbnQuUmVzb3VyY2VQcm9wZXJ0aWVzLlZTQ29kZVBhc3N3b3JkKTtcblxuICAvLyB0byBiZSBhYmxlIHRvIG1vZGlmeSB0aGVtXG4gIGNvbnN0IHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwgPVxuICAgIHJlc291cmNlUHJvcGVydGllcyBhcyBQYXJ0aWFsPENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNvdXJjZVByb3BlcnRpZXNDb21tb24+O1xuICBjb25zb2xlLmxvZygnUmVzb3VyY2VQcm9wZXJ0aWVzIGJlZm9yZTogJWonLCByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsKTtcbiAgZGVsZXRlIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuU2VydmljZVRva2VuO1xuICBpZiAocmVzb3VyY2VQcm9wZXJ0aWVzUGFydGlhbC5TZXJ2aWNlVGltZW91dCkge1xuICAgIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLlNlcnZpY2VUaW1lb3V0O1xuICB9XG4gIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLkluc3RhbmNlSWQ7XG4gIGRlbGV0ZSByZXNvdXJjZVByb3BlcnRpZXNQYXJ0aWFsLkRvY3VtZW50TmFtZTtcbiAgZGVsZXRlIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuQ2xvdWRXYXRjaExvZ0dyb3VwTmFtZTtcbiAgaWYgKHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuUGh5c2ljYWxSZXNvdXJjZUlkKSB7XG4gICAgZGVsZXRlIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwuUGh5c2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgY29uc29sZS5sb2coXG4gICAgJ1Jlc291cmNlUHJvcGVydGllcyBmaWx0ZXJlZCBhZnRlcjogJWonLFxuICAgIHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwsXG4gICk7XG5cbiAgY29uc3QgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlc291cmNlUHJvcGVydGllc1BhcnRpYWwpKSB7XG4gICAgcGFyYW1ldGVyc1trZXldID0gW3ZhbHVlXTtcbiAgfVxuICBjb25zb2xlLmxvZygnbWFwcGVkIHBhcmFtZXRlcnM6ICVqJywgcGFyYW1ldGVycyk7XG5cbiAgY29uc29sZS5sb2coXG4gICAgYFJ1bm5pbmcgU1NNIERvY3VtZW50ICcke2RvY3VtZW50TmFtZX0nIG9uIEVDMiBpbnN0YW5jZSAnJHtpbnN0YW5jZUlkfScuIExvZ2dpbmcgdG8gJyR7Y2xvdWRXYXRjaExvZ0dyb3VwTmFtZX0nIHdpdGggcGFyYW1ldGVyczogJyR7SlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycyl9J2AsXG4gICk7XG5cbiAgLy8gU3RlcCAxOiBTZW5kIHRoZSBTU00gY29tbWFuZCBvbmNlIGFuZCBnZXQgdGhlIENvbW1hbmRJZFxuICBsZXQgY29tbWFuZElkOiBzdHJpbmc7XG4gIGxldCBhdHRlbXB0Tm8gPSAwO1xuXG4gIC8vIFJldHJ5IGxvb3AgZm9yIHNlbmRpbmcgdGhlIGNvbW1hbmQgKGhhbmRsZXMgSUFNIHByb3BhZ2F0aW9uIGlzc3VlcylcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBhdHRlbXB0Tm8gKz0gMTtcbiAgICBjb25zdCB0aW1lUmVtYWluaW5nID0gY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBTZW5kIGF0dGVtcHQ6ICR7YXR0ZW1wdE5vfS4gVGltZSBSZW1haW5pbmc6ICR7dGltZVJlbWFpbmluZyAvIDEwMDB9c2AsXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNzbS5zZW5kKFxuICAgICAgICBuZXcgU2VuZENvbW1hbmRDb21tYW5kKHtcbiAgICAgICAgICBEb2N1bWVudE5hbWU6IGRvY3VtZW50TmFtZSxcbiAgICAgICAgICBJbnN0YW5jZUlkczogW2luc3RhbmNlSWRdLFxuICAgICAgICAgIENsb3VkV2F0Y2hPdXRwdXRDb25maWc6IHtcbiAgICAgICAgICAgIENsb3VkV2F0Y2hMb2dHcm91cE5hbWU6IGNsb3VkV2F0Y2hMb2dHcm91cE5hbWUsXG4gICAgICAgICAgICBDbG91ZFdhdGNoT3V0cHV0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coYHNlbmRDb21tYW5kIHJlc3BvbnNlOiAke0pTT04uc3RyaW5naWZ5KHJlc3BvbnNlKX1gKTtcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmQgPSByZXNwb25zZS5Db21tYW5kITtcbiAgICAgIGNvbW1hbmRJZCA9IGNvbW1hbmQuQ29tbWFuZElkITtcbiAgICAgIGNvbnNvbGUubG9nKGBDb21tYW5kIHNlbnQgc3VjY2Vzc2Z1bGx5LiBDb21tYW5kSWQ6ICR7Y29tbWFuZElkfWApO1xuICAgICAgYnJlYWs7IC8vIFN1Y2Nlc3NmdWxseSBzZW50IGNvbW1hbmQsIGV4aXQgcmV0cnkgbG9vcFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBzZW5kaW5nIGNvbW1hbmQ6JywgZXJyb3IpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmV0cnlhYmxlIGVycm9yIChJQU0gcHJvcGFnYXRpb24sIHRocm90dGxpbmcsIGV0Yy4pXG4gICAgICBjb25zdCBpc1VuYXV0aG9yaXplZCA9XG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdVbmF1dGhvcml6ZWRFeGNlcHRpb24nIHx8XG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nIHx8XG4gICAgICAgIChlcnJvci5tZXNzYWdlICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBhdXRob3JpemVkJykpO1xuICAgICAgY29uc3QgaXNUaHJvdHRsZWQgPVxuICAgICAgICBlcnJvci5uYW1lID09PSAnVGhyb3R0bGluZ0V4Y2VwdGlvbicgfHxcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1Rvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbic7XG4gICAgICBjb25zdCBpc1JldHJ5YWJsZSA9IGlzVW5hdXRob3JpemVkIHx8IGlzVGhyb3R0bGVkO1xuXG4gICAgICBjb25zdCByZW1haW5pbmdUaW1lID0gY29udGV4dC5nZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMoKTtcblxuICAgICAgaWYgKGlzUmV0cnlhYmxlICYmIHJlbWFpbmluZ1RpbWUgPiBTTEVFUF9NUykge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgUmV0cnlhYmxlIGVycm9yIGVuY291bnRlcmVkICgke2Vycm9yLm5hbWV9KS4gQXR0ZW1wdCAke2F0dGVtcHROb30uIFNsZWVwaW5nOiAke1NMRUVQX01TIC8gMTAwMH1zIGJlZm9yZSByZXRyeWAsXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIFNMRUVQX01TKSk7XG4gICAgICAgIC8vIENvbnRpbnVlIHRvIG5leHQgaXRlcmF0aW9uIG9mIHdoaWxlIGxvb3BcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vbi1yZXRyeWFibGUgZXJyb3Igb3Igb3V0IG9mIHRpbWVcbiAgICAgICAgY29uc29sZS5sb2coJ05vbi1yZXRyeWFibGUgZXJyb3Igb3IgdGltZW91dC4gRmFpbGluZy4uLicpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDI6IFBvbGwgZm9yIGNvbW1hbmQgY29tcGxldGlvbiB1c2luZyBnZXRDb21tYW5kSW52b2NhdGlvblxuICBsZXQgcG9sbEF0dGVtcHRObyA9IDA7XG4gIGNvbnN0IHJlc3BvbnNlRGF0YTogYW55ID0geyBDb21tYW5kSWQ6IGNvbW1hbmRJZCB9O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcG9sbEF0dGVtcHRObyArPSAxO1xuICAgIGNvbnN0IHRpbWVSZW1haW5pbmcgPSBjb250ZXh0LmdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcygpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFBvbGwgYXR0ZW1wdDogJHtwb2xsQXR0ZW1wdE5vfS4gVGltZSBSZW1haW5pbmc6ICR7dGltZVJlbWFpbmluZyAvIDEwMDB9c2AsXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnZvY2F0aW9uUmVzcG9uc2UgPSBhd2FpdCBzc20uc2VuZChcbiAgICAgICAgbmV3IEdldENvbW1hbmRJbnZvY2F0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgQ29tbWFuZElkOiBjb21tYW5kSWQsXG4gICAgICAgICAgSW5zdGFuY2VJZDogaW5zdGFuY2VJZCxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYGdldENvbW1hbmRJbnZvY2F0aW9uIHJlc3BvbnNlOiAke0pTT04uc3RyaW5naWZ5KGludm9jYXRpb25SZXNwb25zZSl9YCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzdGF0dXMgPSBpbnZvY2F0aW9uUmVzcG9uc2UuU3RhdHVzITtcblxuICAgICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgICAgY2FzZSAnUGVuZGluZyc6XG4gICAgICAgIGNhc2UgJ0luUHJvZ3Jlc3MnOlxuICAgICAgICBjYXNlICdEZWxheWVkJzpcbiAgICAgICAgICBpZiAodGltZVJlbWFpbmluZyA+IFNMRUVQX01TKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgYENvbW1hbmQgJHtjb21tYW5kSWR9IHN0YXR1czogJyR7c3RhdHVzfScuIFNsZWVwaW5nOiAke1NMRUVQX01TIC8gMTAwMH1zYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBTTEVFUF9NUykpO1xuICAgICAgICAgICAgYnJlYWs7IC8vIENvbnRpbnVlIHBvbGxpbmdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgU1NNIERvY3VtZW50ICR7ZG9jdW1lbnROYW1lfSBvbiBFQzIgaW5zdGFuY2UgJHtpbnN0YW5jZUlkfSB0aW1lZCBvdXQgd2hpbGUgbGFtYmRhIHdhaXRpbmcgKHN0YXR1czogJHtzdGF0dXN9KWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnU3VjY2Vzcyc6XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgSW5zdGFuY2UgJHtpbnN0YW5jZUlkfSBzdWNjZXNzZnVsbHkgYm9vdHN0cmFwcGVkLiBDb21tYW5kICR7Y29tbWFuZElkfSBjb21wbGV0ZWQuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7IERhdGE6IHJlc3BvbnNlRGF0YSB9O1xuICAgICAgICBjYXNlICdUaW1lZE91dCc6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNTTSBEb2N1bWVudCAke2RvY3VtZW50TmFtZX0gb24gRUMyIGluc3RhbmNlICR7aW5zdGFuY2VJZH0gdGltZWQgb3V0YCxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlICdDYW5jZWxsZWQnOlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBTU00gRG9jdW1lbnQgJHtkb2N1bWVudE5hbWV9IG9uIEVDMiBpbnN0YW5jZSAke2luc3RhbmNlSWR9IGNhbmNlbGxlZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnRmFpbGVkJzpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgU1NNIERvY3VtZW50ICR7ZG9jdW1lbnROYW1lfSBvbiBFQzIgaW5zdGFuY2UgJHtpbnN0YW5jZUlkfSBmYWlsZWRgLFxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFNTTSBEb2N1bWVudCAke2RvY3VtZW50TmFtZX0gb24gRUMyIGluc3RhbmNlICR7aW5zdGFuY2VJZH0gdW5rbm93biBzdGF0dXM6ICR7c3RhdHVzfWAsXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGludm9jYXRpb24gbm90IGF2YWlsYWJsZSB5ZXQgZXJyb3JcbiAgICAgIGNvbnN0IHJlbWFpbmluZ1RpbWUgPSBjb250ZXh0LmdldFJlbWFpbmluZ1RpbWVJbk1pbGxpcygpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdJbnZvY2F0aW9uRG9lc05vdEV4aXN0JyAmJlxuICAgICAgICByZW1haW5pbmdUaW1lID4gU0xFRVBfTVNcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgSW52b2NhdGlvbiBub3QgeWV0IGF2YWlsYWJsZS4gU2xlZXBpbmc6ICR7U0xFRVBfTVMgLyAxMDAwfXNgLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBTTEVFUF9NUykpO1xuICAgICAgICAvLyBDb250aW51ZSBwb2xsaW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb24tcmV0cnlhYmxlIGVycm9yIG9yIG91dCBvZiB0aW1lXG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBjaGVja2luZyBjb21tYW5kIHN0YXR1czonLCBlcnJvcik7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiJdfQ==
package/lib/mappings.js CHANGED
@@ -4,8 +4,8 @@ exports.getAmiSSMParameterForLinuxArchitectureAndFlavor = getAmiSSMParameterForL
4
4
  /**
5
5
  * SSM Parameters for the Architecture and Flavor of the Linux system.
6
6
  *
7
- * aws ssm get-parameters-by-path --path "/aws/service/canonical/ubuntu/" --recursive --query "Parameters[*].Name" > canonical-ami.txt
8
- * aws ssm get-parameters-by-path --path "/aws/service/ami-amazon-linux-latest/" --recursive --query "Parameters[*].Name" > amazon-ami.txt
7
+ * aws ssm get-parameters-by-path --path "/aws/service/canonical/ubuntu/" --recursive --query "Parameters[*].Name" --region us-east-1 > canonical-ami.txt
8
+ * aws ssm get-parameters-by-path --path "/aws/service/ami-amazon-linux-latest/" --recursive --query "Parameters[*].Name" --region us-east-1 > amazon-ami.txt
9
9
  */
10
10
  const AmiSSMParameterForLinuxArchitectureAndFlavor = new Map([
11
11
  // key, value
@@ -17,6 +17,10 @@ const AmiSSMParameterForLinuxArchitectureAndFlavor = new Map([
17
17
  'arm-ubuntu24',
18
18
  '/aws/service/canonical/ubuntu/server/noble/stable/current/arm64/hvm/ebs-gp3/ami-id',
19
19
  ],
20
+ [
21
+ 'arm-ubuntu25',
22
+ '/aws/service/canonical/ubuntu/server/plucky/stable/current/arm64/hvm/ebs-gp3/ami-id',
23
+ ],
20
24
  [
21
25
  'arm-al2023',
22
26
  '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-arm64',
@@ -29,6 +33,10 @@ const AmiSSMParameterForLinuxArchitectureAndFlavor = new Map([
29
33
  'amd64-ubuntu24',
30
34
  '/aws/service/canonical/ubuntu/server/noble/stable/current/amd64/hvm/ebs-gp3/ami-id',
31
35
  ],
36
+ [
37
+ 'amd64-ubuntu25',
38
+ '/aws/service/canonical/ubuntu/server/plucky/stable/current/amd64/hvm/ebs-gp3/ami-id',
39
+ ],
32
40
  [
33
41
  'amd64-al2023',
34
42
  '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64',
@@ -40,4 +48,4 @@ function getAmiSSMParameterForLinuxArchitectureAndFlavor(arch, flavor) {
40
48
  }
41
49
  throw new Error(`Linux architecture '${arch}' and flavor '${flavor}' not supported`);
42
50
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQ0EsMEdBWUM7QUE5Q0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLDRDQUE0QyxHQUFHLElBQUksR0FBRyxDQUFpQjtJQUMzRSxhQUFhO0lBQ2I7UUFDRSxjQUFjO1FBQ2Qsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxjQUFjO1FBQ2Qsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxZQUFZO1FBQ1osc0VBQXNFO0tBQ3ZFO0lBQ0Q7UUFDRSxnQkFBZ0I7UUFDaEIsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxnQkFBZ0I7UUFDaEIsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxjQUFjO1FBQ2QsdUVBQXVFO0tBQ3hFO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsU0FBZ0IsK0NBQStDLENBQzdELElBQTJCLEVBQzNCLE1BQXVCO0lBRXZCLElBQUksNENBQTRDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxRSxPQUFPLDRDQUE0QyxDQUFDLEdBQUcsQ0FDckQsR0FBRyxJQUFJLElBQUksTUFBTSxFQUFFLENBQ25CLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsSUFBSSxpQkFBaUIsTUFBTSxpQkFBaUIsQ0FDcEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW51eEFyY2hpdGVjdHVyZVR5cGUsIExpbnV4Rmxhdm9yVHlwZSB9IGZyb20gJy4vdnNjb2RlLXNlcnZlcic7XG4vKipcbiAqIFNTTSBQYXJhbWV0ZXJzIGZvciB0aGUgQXJjaGl0ZWN0dXJlIGFuZCBGbGF2b3Igb2YgdGhlIExpbnV4IHN5c3RlbS5cbiAqXG4gKiBhd3Mgc3NtIGdldC1wYXJhbWV0ZXJzLWJ5LXBhdGggLS1wYXRoIFwiL2F3cy9zZXJ2aWNlL2Nhbm9uaWNhbC91YnVudHUvXCIgLS1yZWN1cnNpdmUgLS1xdWVyeSBcIlBhcmFtZXRlcnNbKl0uTmFtZVwiICA+IGNhbm9uaWNhbC1hbWkudHh0XG4gKiBhd3Mgc3NtIGdldC1wYXJhbWV0ZXJzLWJ5LXBhdGggLS1wYXRoIFwiL2F3cy9zZXJ2aWNlL2FtaS1hbWF6b24tbGludXgtbGF0ZXN0L1wiIC0tcmVjdXJzaXZlIC0tcXVlcnkgXCJQYXJhbWV0ZXJzWypdLk5hbWVcIiAgPiBhbWF6b24tYW1pLnR4dFxuICovXG5jb25zdCBBbWlTU01QYXJhbWV0ZXJGb3JMaW51eEFyY2hpdGVjdHVyZUFuZEZsYXZvciA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgLy8ga2V5LCB2YWx1ZVxuICBbXG4gICAgJ2FybS11YnVudHUyMicsXG4gICAgJy9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9qYW1teS9zdGFibGUvY3VycmVudC9hcm02NC9odm0vZWJzLWdwMi9hbWktaWQnLFxuICBdLFxuICBbXG4gICAgJ2FybS11YnVudHUyNCcsXG4gICAgJy9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9ub2JsZS9zdGFibGUvY3VycmVudC9hcm02NC9odm0vZWJzLWdwMy9hbWktaWQnLFxuICBdLFxuICBbXG4gICAgJ2FybS1hbDIwMjMnLFxuICAgICcvYXdzL3NlcnZpY2UvYW1pLWFtYXpvbi1saW51eC1sYXRlc3QvYWwyMDIzLWFtaS1rZXJuZWwtZGVmYXVsdC1hcm02NCcsXG4gIF0sXG4gIFtcbiAgICAnYW1kNjQtdWJ1bnR1MjInLFxuICAgICcvYXdzL3NlcnZpY2UvY2Fub25pY2FsL3VidW50dS9zZXJ2ZXIvamFtbXkvc3RhYmxlL2N1cnJlbnQvYW1kNjQvaHZtL2Vicy1ncDIvYW1pLWlkJyxcbiAgXSxcbiAgW1xuICAgICdhbWQ2NC11YnVudHUyNCcsXG4gICAgJy9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9ub2JsZS9zdGFibGUvY3VycmVudC9hbWQ2NC9odm0vZWJzLWdwMy9hbWktaWQnLFxuICBdLFxuICBbXG4gICAgJ2FtZDY0LWFsMjAyMycsXG4gICAgJy9hd3Mvc2VydmljZS9hbWktYW1hem9uLWxpbnV4LWxhdGVzdC9hbDIwMjMtYW1pLWtlcm5lbC1kZWZhdWx0LXg4Nl82NCcsXG4gIF0sXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yKFxuICBhcmNoOiBMaW51eEFyY2hpdGVjdHVyZVR5cGUsXG4gIGZsYXZvcjogTGludXhGbGF2b3JUeXBlLFxuKTogc3RyaW5nIHtcbiAgaWYgKEFtaVNTTVBhcmFtZXRlckZvckxpbnV4QXJjaGl0ZWN0dXJlQW5kRmxhdm9yLmhhcyhgJHthcmNofS0ke2ZsYXZvcn1gKSkge1xuICAgIHJldHVybiBBbWlTU01QYXJhbWV0ZXJGb3JMaW51eEFyY2hpdGVjdHVyZUFuZEZsYXZvci5nZXQoXG4gICAgICBgJHthcmNofS0ke2ZsYXZvcn1gLFxuICAgICkhO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgTGludXggYXJjaGl0ZWN0dXJlICcke2FyY2h9JyBhbmQgZmxhdm9yICcke2ZsYXZvcn0nIG5vdCBzdXBwb3J0ZWRgLFxuICApO1xufVxuIl19
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWFwcGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyQ0EsMEdBWUM7QUF0REQ7Ozs7O0dBS0c7QUFDSCxNQUFNLDRDQUE0QyxHQUFHLElBQUksR0FBRyxDQUFpQjtJQUMzRSxhQUFhO0lBQ2I7UUFDRSxjQUFjO1FBQ2Qsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxjQUFjO1FBQ2Qsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxjQUFjO1FBQ2QscUZBQXFGO0tBQ3RGO0lBQ0Q7UUFDRSxZQUFZO1FBQ1osc0VBQXNFO0tBQ3ZFO0lBQ0Q7UUFDRSxnQkFBZ0I7UUFDaEIsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxnQkFBZ0I7UUFDaEIsb0ZBQW9GO0tBQ3JGO0lBQ0Q7UUFDRSxnQkFBZ0I7UUFDaEIscUZBQXFGO0tBQ3RGO0lBQ0Q7UUFDRSxjQUFjO1FBQ2QsdUVBQXVFO0tBQ3hFO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsU0FBZ0IsK0NBQStDLENBQzdELElBQTJCLEVBQzNCLE1BQXVCO0lBRXZCLElBQUksNENBQTRDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMxRSxPQUFPLDRDQUE0QyxDQUFDLEdBQUcsQ0FDckQsR0FBRyxJQUFJLElBQUksTUFBTSxFQUFFLENBQ25CLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsSUFBSSxpQkFBaUIsTUFBTSxpQkFBaUIsQ0FDcEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW51eEFyY2hpdGVjdHVyZVR5cGUsIExpbnV4Rmxhdm9yVHlwZSB9IGZyb20gJy4vdnNjb2RlLXNlcnZlcic7XG4vKipcbiAqIFNTTSBQYXJhbWV0ZXJzIGZvciB0aGUgQXJjaGl0ZWN0dXJlIGFuZCBGbGF2b3Igb2YgdGhlIExpbnV4IHN5c3RlbS5cbiAqXG4gKiBhd3Mgc3NtIGdldC1wYXJhbWV0ZXJzLWJ5LXBhdGggLS1wYXRoIFwiL2F3cy9zZXJ2aWNlL2Nhbm9uaWNhbC91YnVudHUvXCIgLS1yZWN1cnNpdmUgLS1xdWVyeSBcIlBhcmFtZXRlcnNbKl0uTmFtZVwiIC0tcmVnaW9uIHVzLWVhc3QtMSA+IGNhbm9uaWNhbC1hbWkudHh0XG4gKiBhd3Mgc3NtIGdldC1wYXJhbWV0ZXJzLWJ5LXBhdGggLS1wYXRoIFwiL2F3cy9zZXJ2aWNlL2FtaS1hbWF6b24tbGludXgtbGF0ZXN0L1wiIC0tcmVjdXJzaXZlIC0tcXVlcnkgXCJQYXJhbWV0ZXJzWypdLk5hbWVcIiAtLXJlZ2lvbiB1cy1lYXN0LTEgPiBhbWF6b24tYW1pLnR4dFxuICovXG5jb25zdCBBbWlTU01QYXJhbWV0ZXJGb3JMaW51eEFyY2hpdGVjdHVyZUFuZEZsYXZvciA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgLy8ga2V5LCB2YWx1ZVxuICBbXG4gICAgJ2FybS11YnVudHUyMicsXG4gICAgJy9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9qYW1teS9zdGFibGUvY3VycmVudC9hcm02NC9odm0vZWJzLWdwMi9hbWktaWQnLFxuICBdLFxuICBbXG4gICAgJ2FybS11YnVudHUyNCcsXG4gICAgJy9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9ub2JsZS9zdGFibGUvY3VycmVudC9hcm02NC9odm0vZWJzLWdwMy9hbWktaWQnLFxuICBdLFxuICBbXG4gICAgJ2FybS11YnVudHUyNScsXG4gICAgJy9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9wbHVja3kvc3RhYmxlL2N1cnJlbnQvYXJtNjQvaHZtL2Vicy1ncDMvYW1pLWlkJyxcbiAgXSxcbiAgW1xuICAgICdhcm0tYWwyMDIzJyxcbiAgICAnL2F3cy9zZXJ2aWNlL2FtaS1hbWF6b24tbGludXgtbGF0ZXN0L2FsMjAyMy1hbWkta2VybmVsLWRlZmF1bHQtYXJtNjQnLFxuICBdLFxuICBbXG4gICAgJ2FtZDY0LXVidW50dTIyJyxcbiAgICAnL2F3cy9zZXJ2aWNlL2Nhbm9uaWNhbC91YnVudHUvc2VydmVyL2phbW15L3N0YWJsZS9jdXJyZW50L2FtZDY0L2h2bS9lYnMtZ3AyL2FtaS1pZCcsXG4gIF0sXG4gIFtcbiAgICAnYW1kNjQtdWJ1bnR1MjQnLFxuICAgICcvYXdzL3NlcnZpY2UvY2Fub25pY2FsL3VidW50dS9zZXJ2ZXIvbm9ibGUvc3RhYmxlL2N1cnJlbnQvYW1kNjQvaHZtL2Vicy1ncDMvYW1pLWlkJyxcbiAgXSxcbiAgW1xuICAgICdhbWQ2NC11YnVudHUyNScsXG4gICAgJy9hd3Mvc2VydmljZS9jYW5vbmljYWwvdWJ1bnR1L3NlcnZlci9wbHVja3kvc3RhYmxlL2N1cnJlbnQvYW1kNjQvaHZtL2Vicy1ncDMvYW1pLWlkJyxcbiAgXSxcbiAgW1xuICAgICdhbWQ2NC1hbDIwMjMnLFxuICAgICcvYXdzL3NlcnZpY2UvYW1pLWFtYXpvbi1saW51eC1sYXRlc3QvYWwyMDIzLWFtaS1rZXJuZWwtZGVmYXVsdC14ODZfNjQnLFxuICBdLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbWlTU01QYXJhbWV0ZXJGb3JMaW51eEFyY2hpdGVjdHVyZUFuZEZsYXZvcihcbiAgYXJjaDogTGludXhBcmNoaXRlY3R1cmVUeXBlLFxuICBmbGF2b3I6IExpbnV4Rmxhdm9yVHlwZSxcbik6IHN0cmluZyB7XG4gIGlmIChBbWlTU01QYXJhbWV0ZXJGb3JMaW51eEFyY2hpdGVjdHVyZUFuZEZsYXZvci5oYXMoYCR7YXJjaH0tJHtmbGF2b3J9YCkpIHtcbiAgICByZXR1cm4gQW1pU1NNUGFyYW1ldGVyRm9yTGludXhBcmNoaXRlY3R1cmVBbmRGbGF2b3IuZ2V0KFxuICAgICAgYCR7YXJjaH0tJHtmbGF2b3J9YCxcbiAgICApITtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYExpbnV4IGFyY2hpdGVjdHVyZSAnJHthcmNofScgYW5kIGZsYXZvciAnJHtmbGF2b3J9JyBub3Qgc3VwcG9ydGVkYCxcbiAgKTtcbn1cbiJdfQ==
@@ -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('nodejs20.x', lambda.RuntimeFamily.NODEJS),
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LXJldHJpZXZlci1mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQzFELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsaURBQWlEO1lBQzlELEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSx1REFBdUQsQ0FBQyxDQUFDO1NBQzNHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELDBEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBTZWNyZXRSZXRyaWV2ZXJGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldFJldHJpZXZlckZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb25PcHRpb25zIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRSZXRyaWV2ZXJGdW5jdGlvbiBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU2VjcmV0UmV0cmlldmVyRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvc2VjcmV0LXJldHJpZXZlci9zZWNyZXQtcmV0cmlldmVyLmxhbWJkYS50cycsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJ1bnRpbWU6IG5ldyBsYW1iZGEuUnVudGltZSgnbm9kZWpzMjAueCcsIGxhbWJkYS5SdW50aW1lRmFtaWx5Lk5PREVKUyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Fzc2V0cy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXIubGFtYmRhJykpLFxuICAgIH0pO1xuICB9XG59Il19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0LXJldHJpZXZlci1mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQzFELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUsaURBQWlEO1lBQzlELEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSx1REFBdUQsQ0FBQyxDQUFDO1NBQzNHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELDBEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBTZWNyZXRSZXRyaWV2ZXJGdW5jdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3JldFJldHJpZXZlckZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb25PcHRpb25zIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWNyZXRSZXRyaWV2ZXJGdW5jdGlvbiBleHRlbmRzIGxhbWJkYS5GdW5jdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogU2VjcmV0UmV0cmlldmVyRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvc2VjcmV0LXJldHJpZXZlci9zZWNyZXQtcmV0cmlldmVyLmxhbWJkYS50cycsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHJ1bnRpbWU6IG5ldyBsYW1iZGEuUnVudGltZSgnbm9kZWpzMjIueCcsIGxhbWJkYS5SdW50aW1lRmFtaWx5Lk5PREVKUyksXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Fzc2V0cy9zZWNyZXQtcmV0cmlldmVyL3NlY3JldC1yZXRyaWV2ZXIubGFtYmRhJykpLFxuICAgIH0pO1xuICB9XG59Il19
@@ -45,7 +45,7 @@ export interface VSCodeServerProps {
45
45
  /**
46
46
  * VSCode Server EC2 operating system
47
47
  *
48
- * @default - Ubuntu-22
48
+ * @default - Ubuntu-24
49
49
  */
50
50
  readonly instanceOperatingSystem?: LinuxFlavorType;
51
51
  /**
@@ -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
@@ -165,6 +205,10 @@ export declare enum LinuxFlavorType {
165
205
  * Ubuntu 24
166
206
  */
167
207
  UBUNTU_24 = "ubuntu24",
208
+ /**
209
+ * Ubuntu 25
210
+ */
211
+ UBUNTU_25 = "ubuntu25",
168
212
  /**
169
213
  * Amazon Linux 2023
170
214
  */