@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
@@ -59,47 +59,89 @@ var handler = async (event, context) => {
59
59
  parameters[key] = [value];
60
60
  }
61
61
  console.log("mapped parameters: %j", parameters);
62
- let attemptNo = 0;
63
- let timeRemaining = context.getRemainingTimeInMillis();
64
62
  console.log(
65
63
  `Running SSM Document '${documentName}' on EC2 instance '${instanceId}'. Logging to '${cloudWatchLogGroupName}' with parameters: '${JSON.stringify(parameters)}'`
66
64
  );
65
+ let commandId;
66
+ let attemptNo = 0;
67
67
  while (true) {
68
68
  attemptNo += 1;
69
+ const timeRemaining = context.getRemainingTimeInMillis();
69
70
  console.log(
70
- `Attempt: ${attemptNo}. Time Remaining: ${timeRemaining / 1e3}s`
71
+ `Send attempt: ${attemptNo}. Time Remaining: ${timeRemaining / 1e3}s`
71
72
  );
72
73
  try {
73
- const response = await ssm.sendCommand({
74
- DocumentName: documentName,
75
- InstanceIds: [instanceId],
76
- CloudWatchOutputConfig: {
77
- CloudWatchLogGroupName: cloudWatchLogGroupName,
78
- CloudWatchOutputEnabled: true
79
- },
80
- Parameters: parameters
81
- });
82
- console.log(`response: ${JSON.stringify(response)}`);
74
+ const response = await ssm.send(
75
+ new import_client_ssm.SendCommandCommand({
76
+ DocumentName: documentName,
77
+ InstanceIds: [instanceId],
78
+ CloudWatchOutputConfig: {
79
+ CloudWatchLogGroupName: cloudWatchLogGroupName,
80
+ CloudWatchOutputEnabled: true
81
+ },
82
+ Parameters: parameters
83
+ })
84
+ );
85
+ console.log(`sendCommand response: ${JSON.stringify(response)}`);
83
86
  const command = response.Command;
84
- const commandId = command.CommandId;
85
- const responseData = { CommandId: commandId };
86
- switch (command.Status) {
87
+ commandId = command.CommandId;
88
+ console.log(`Command sent successfully. CommandId: ${commandId}`);
89
+ break;
90
+ } catch (error) {
91
+ console.log("Error sending command:", error);
92
+ const isUnauthorized = error.name === "UnauthorizedException" || error.name === "AccessDeniedException" || error.message && error.message.includes("not authorized");
93
+ const isThrottled = error.name === "ThrottlingException" || error.name === "TooManyRequestsException";
94
+ const isRetryable = isUnauthorized || isThrottled;
95
+ const remainingTime = context.getRemainingTimeInMillis();
96
+ if (isRetryable && remainingTime > SLEEP_MS) {
97
+ console.log(
98
+ `Retryable error encountered (${error.name}). Attempt ${attemptNo}. Sleeping: ${SLEEP_MS / 1e3}s before retry`
99
+ );
100
+ await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
101
+ } else {
102
+ console.log("Non-retryable error or timeout. Failing...");
103
+ throw error;
104
+ }
105
+ }
106
+ }
107
+ let pollAttemptNo = 0;
108
+ const responseData = { CommandId: commandId };
109
+ while (true) {
110
+ pollAttemptNo += 1;
111
+ const timeRemaining = context.getRemainingTimeInMillis();
112
+ console.log(
113
+ `Poll attempt: ${pollAttemptNo}. Time Remaining: ${timeRemaining / 1e3}s`
114
+ );
115
+ try {
116
+ const invocationResponse = await ssm.send(
117
+ new import_client_ssm.GetCommandInvocationCommand({
118
+ CommandId: commandId,
119
+ InstanceId: instanceId
120
+ })
121
+ );
122
+ console.log(
123
+ `getCommandInvocation response: ${JSON.stringify(invocationResponse)}`
124
+ );
125
+ const status = invocationResponse.Status;
126
+ switch (status) {
87
127
  case "Pending":
88
128
  case "InProgress":
89
- timeRemaining = context.getRemainingTimeInMillis();
129
+ case "Delayed":
90
130
  if (timeRemaining > SLEEP_MS) {
91
131
  console.log(
92
- `Instance ${instanceId} not ready: 'InProgress'. Sleeping: ${SLEEP_MS / 1e3}s`
132
+ `Command ${commandId} status: '${status}'. Sleeping: ${SLEEP_MS / 1e3}s`
93
133
  );
94
134
  await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
95
135
  break;
96
136
  } else {
97
137
  throw new Error(
98
- `SSM Document ${documentName} on EC2 instance ${instanceId} timed out while lambda in progress`
138
+ `SSM Document ${documentName} on EC2 instance ${instanceId} timed out while lambda waiting (status: ${status})`
99
139
  );
100
140
  }
101
141
  case "Success":
102
- console.log(`Instance ${instanceId} successfully bootstrapped`);
142
+ console.log(
143
+ `Instance ${instanceId} successfully bootstrapped. Command ${commandId} completed.`
144
+ );
103
145
  return { Data: responseData };
104
146
  case "TimedOut":
105
147
  throw new Error(
@@ -115,23 +157,18 @@ var handler = async (event, context) => {
115
157
  );
116
158
  default:
117
159
  throw new Error(
118
- `SSM Document ${documentName} on EC2 instance ${instanceId} status ${command.Status}`
160
+ `SSM Document ${documentName} on EC2 instance ${instanceId} unknown status: ${status}`
119
161
  );
120
162
  }
121
- return { Data: responseData };
122
163
  } catch (error) {
123
- console.log("Error occurred:", error);
124
- const isUnauthorized = error.name === "UnauthorizedException" || error.name === "AccessDeniedException" || error.message && error.message.includes("not authorized");
125
- const isThrottled = error.name === "ThrottlingException" || error.name === "TooManyRequestsException";
126
- const isRetryable = isUnauthorized || isThrottled;
127
- timeRemaining = context.getRemainingTimeInMillis();
128
- if (isRetryable && timeRemaining > SLEEP_MS) {
164
+ const remainingTime = context.getRemainingTimeInMillis();
165
+ if (error.name === "InvocationDoesNotExist" && remainingTime > SLEEP_MS) {
129
166
  console.log(
130
- `Retryable error encountered (${error.name}). Attempt ${attemptNo}. Sleeping: ${SLEEP_MS / 1e3}s before retry`
167
+ `Invocation not yet available. Sleeping: ${SLEEP_MS / 1e3}s`
131
168
  );
132
169
  await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
133
170
  } else {
134
- console.log("Non-retryable error or timeout. Failing...");
171
+ console.log("Error checking command status:", error);
135
172
  throw error;
136
173
  }
137
174
  }
@@ -5944,37 +5944,62 @@ var handler = async (event) => {
5944
5944
  message: "Login in",
5945
5945
  event
5946
5946
  });
5947
- let htmlContent = "";
5948
- try {
5949
- if (!domainName || !password) {
5950
- throw new Error("Domain name and password are required");
5951
- }
5952
- const url = domainName.startsWith("http") ? domainName : `https://${domainName}`;
5953
- const response = await fetch(url);
5954
- if (!response.ok) {
5955
- throw new Error(`HTTP error! status: ${response.status}`);
5956
- }
5957
- htmlContent = await response.text();
5958
- const root = (0, import_node_html_parser.parse)(htmlContent);
5959
- const centerContainer = root.querySelector(".center-container");
5960
- if (!centerContainer) {
5947
+ const maxRetries = 20;
5948
+ const retryDelayMs = 15e3;
5949
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
5950
+ log({ message: `Login attempt ${attempt}/${maxRetries}` });
5951
+ try {
5952
+ if (!domainName || !password) {
5953
+ throw new Error("Domain name and password are required");
5954
+ }
5955
+ const url = domainName.startsWith("http") ? domainName : `https://${domainName}`;
5956
+ const response = await fetch(url);
5957
+ if (!response.ok) {
5958
+ log({ message: `HTTP ${response.status}, retrying...` });
5959
+ if (attempt < maxRetries) {
5960
+ await sleep(retryDelayMs);
5961
+ continue;
5962
+ }
5963
+ throw new Error(`HTTP error! status: ${response.status}`);
5964
+ }
5965
+ const htmlContent = await response.text();
5966
+ const root = (0, import_node_html_parser.parse)(htmlContent);
5967
+ const centerContainer = root.querySelector(".center-container");
5968
+ if (!centerContainer) {
5969
+ log({ message: "Center container not found yet, retrying..." });
5970
+ if (attempt < maxRetries) {
5971
+ await sleep(retryDelayMs);
5972
+ continue;
5973
+ }
5974
+ error({
5975
+ message: "Center container NOT found after all retries",
5976
+ htmlContent
5977
+ });
5978
+ return "NOK";
5979
+ }
5980
+ log({ message: `Found center container on attempt ${attempt}. TADA` });
5981
+ return "OK";
5982
+ } catch (err) {
5983
+ log({
5984
+ message: `Attempt ${attempt} failed`,
5985
+ error: err instanceof Error ? err.message : String(err)
5986
+ });
5987
+ if (attempt < maxRetries) {
5988
+ await sleep(retryDelayMs);
5989
+ continue;
5990
+ }
5961
5991
  error({
5962
- message: "Center container NOT found. See retrieved htmlContent",
5963
- htmlContent
5992
+ message: "All retry attempts failed",
5993
+ err
5964
5994
  });
5965
5995
  return "NOK";
5966
5996
  }
5967
- log({ message: "Found center container. TADA" });
5968
- return "OK";
5969
- } catch (err) {
5970
- error({
5971
- message: "Error fetching or processing document",
5972
- err,
5973
- htmlContent
5974
- });
5975
- return "NOK";
5976
5997
  }
5998
+ return "NOK";
5977
5999
  };
6000
+ function sleep(ms) {
6001
+ return new Promise((resolve) => setTimeout(resolve, ms));
6002
+ }
5978
6003
  function log(msg) {
5979
6004
  console.log(JSON.stringify(msg));
5980
6005
  }
@@ -6,7 +6,7 @@
6
6
  "IntegTestStackUbuntu22"
7
7
  ],
8
8
  "regions": [
9
- "${Token[AWS.Region.9]}"
9
+ "${Token[AWS.Region.5]}"
10
10
  ],
11
11
  "cdkCommandOptions": {
12
12
  "destroy": {
@@ -18,7 +18,7 @@
18
18
  "validateOnSynth": false,
19
19
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
20
20
  "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
21
- "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/a7c2aeec7d9d4fadadd4ac092c193c570531ae7b013f8f6300d15855836ea007.json",
21
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/e14cfe27e172f52786e832de7e08efedf5e9432c9fadb5ad9bb8a8b516ba3a9b.json",
22
22
  "requiresBootstrapStackVersion": 6,
23
23
  "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
24
24
  "additionalDependencies": [
@@ -732,7 +732,10 @@
732
732
  "/IntegTestStackUbuntu22/IntegVSCodeServer/server-instance/Resource": [
733
733
  {
734
734
  "type": "aws:cdk:logicalId",
735
- "data": "IntegVSCodeServerserverinstance0A3D62D7"
735
+ "data": "IntegVSCodeServerserverinstance0A3D62D7",
736
+ "trace": [
737
+ "!!DESTRUCTIVE_CHANGES: WILL_REPLACE"
738
+ ]
736
739
  }
737
740
  ],
738
741
  "/IntegTestStackUbuntu22/IntegVSCodeServer/server-instance/LaunchTemplate": [
@@ -867,6 +870,14 @@
867
870
  "*"
868
871
  ]
869
872
  }
873
+ },
874
+ {
875
+ "type": "aws:cdk:analytics:method",
876
+ "data": {
877
+ "addToPrincipalPolicy": [
878
+ {}
879
+ ]
880
+ }
870
881
  }
871
882
  ],
872
883
  "/IntegTestStackUbuntu22/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/ImportServiceRole": [
@@ -902,6 +913,14 @@
902
913
  ]
903
914
  }
904
915
  },
916
+ {
917
+ "type": "aws:cdk:analytics:method",
918
+ "data": {
919
+ "addStatements": [
920
+ {}
921
+ ]
922
+ }
923
+ },
905
924
  {
906
925
  "type": "aws:cdk:analytics:method",
907
926
  "data": {
@@ -1144,10 +1163,10 @@
1144
1163
  "data": "AWS679f53fac002430cb0da5b7982bd22872D164C4C"
1145
1164
  }
1146
1165
  ],
1147
- "/IntegTestStackUbuntu22/SsmParameterValue:--aws--service--canonical--ubuntu--server--jammy--stable--current--arm64--hvm--ebs-gp2--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter": [
1166
+ "/IntegTestStackUbuntu22/SsmParameterValue:--aws--service--canonical--ubuntu--server--noble--stable--current--arm64--hvm--ebs-gp3--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter": [
1148
1167
  {
1149
1168
  "type": "aws:cdk:logicalId",
1150
- "data": "SsmParameterValueawsservicecanonicalubuntuserverjammystablecurrentarm64hvmebsgp2amiidC96584B6F00A464EAD1953AFF4B05118Parameter"
1169
+ "data": "SsmParameterValueawsservicecanonicalubuntuservernoblestablecurrentarm64hvmebsgp3amiidC96584B6F00A464EAD1953AFF4B05118Parameter"
1151
1170
  }
1152
1171
  ],
1153
1172
  "/IntegTestStackUbuntu22/login-handler": [
@@ -1364,7 +1383,7 @@
1364
1383
  "validateOnSynth": false,
1365
1384
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
1366
1385
  "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
1367
- "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/4b172853f97562ce69aef5c13e0e47c1b57b0743f17f3f26595522493ca8c6a9.json",
1386
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/f30731a6d1757a30f07aa0c72d87be4cdbd161f1e7e6f82651dc46ab2d9543f5.json",
1368
1387
  "requiresBootstrapStackVersion": 6,
1369
1388
  "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
1370
1389
  "additionalDependencies": [
@@ -1453,5 +1472,5 @@
1453
1472
  }
1454
1473
  }
1455
1474
  },
1456
- "minimumCliVersion": "2.1025.0"
1475
+ "minimumCliVersion": "2.1031.0"
1457
1476
  }