@mavogel/cdk-vscode-server 0.0.55 → 0.0.56

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 (62) hide show
  1. package/.claude/hooks/file_checker.sh +0 -0
  2. package/.jsii +96 -24
  3. package/API.md +56 -0
  4. package/CLAUDE.md +84 -118
  5. package/README.md +48 -0
  6. package/assets/installer/installer.lambda/index.js +14 -2
  7. package/examples/custom-domain/main.ts +49 -0
  8. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.assets.json +7 -6
  9. package/integ-tests/integ.al2023.ts.snapshot/IntegSetupVSCodeOnAl2023DefaultTestDeployAssert74D8F645.template.json +6 -6
  10. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.assets.json +20 -12
  11. package/integ-tests/integ.al2023.ts.snapshot/IntegTestStackAl2023.template.json +36 -152
  12. package/integ-tests/integ.al2023.ts.snapshot/{asset.23732f3d1982f7fb0da3bd6638a8107337bb767fea165b45eae12000a1dd67ce → asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4}/index.js +988 -1165
  13. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.a9865c9d36c7aa999e28cb7926e7a3a8e0b6d0854b25131a172024c5777442fa.lambda → integ.al2023.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda}/index.js +14 -2
  14. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle → integ.al2023.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle}/index.js +296 -191
  15. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.ce2f3595a340d6c519a65888ef97e3b9b64f053f83608e32cc28162e22d7d99a → integ.al2023.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00}/index.js +1 -1
  16. package/integ-tests/integ.al2023.ts.snapshot/cdk.out +1 -1
  17. package/integ-tests/integ.al2023.ts.snapshot/integ.json +4 -3
  18. package/integ-tests/integ.al2023.ts.snapshot/manifest.json +956 -7
  19. package/integ-tests/integ.al2023.ts.snapshot/tree.json +1 -3228
  20. package/integ-tests/integ.custom-domain.ts +87 -0
  21. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.assets.json +33 -0
  22. package/integ-tests/integ.custom-domain.ts.snapshot/IntegSetupVSCodeOnCustomDomainDefaultTestDeployAssert6982D514.template.json +333 -0
  23. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.assets.json +132 -0
  24. package/integ-tests/integ.custom-domain.ts.snapshot/IntegTestStackCustomDomain.template.json +2862 -0
  25. package/integ-tests/{integ.ubuntu.ts.snapshot/asset.23732f3d1982f7fb0da3bd6638a8107337bb767fea165b45eae12000a1dd67ce → integ.custom-domain.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4}/index.js +988 -1165
  26. package/integ-tests/integ.custom-domain.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
  27. package/integ-tests/{integ.al2023.ts.snapshot/asset.a9865c9d36c7aa999e28cb7926e7a3a8e0b6d0854b25131a172024c5777442fa.lambda → integ.custom-domain.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda}/index.js +14 -2
  28. package/integ-tests/{integ.al2023.ts.snapshot/asset.f692c9f68e4daba2abc99103efd3518bced1e9d7a2a89847b9b5d5473c64f1bd.bundle → integ.custom-domain.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle}/index.js +296 -191
  29. package/integ-tests/integ.custom-domain.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
  30. package/integ-tests/integ.custom-domain.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
  31. package/integ-tests/integ.custom-domain.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
  32. package/integ-tests/{integ.al2023.ts.snapshot/asset.ce2f3595a340d6c519a65888ef97e3b9b64f053f83608e32cc28162e22d7d99a → integ.custom-domain.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00}/index.js +1 -1
  33. package/integ-tests/integ.custom-domain.ts.snapshot/asset.b073cebcf4d61fb152a30f5a5e57a94df7f980a549fdf1a79a0b18c5750522d8/index.js +1 -0
  34. package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
  35. package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
  36. package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
  37. package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
  38. package/integ-tests/integ.custom-domain.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
  39. package/integ-tests/integ.custom-domain.ts.snapshot/integ.json +23 -0
  40. package/integ-tests/integ.custom-domain.ts.snapshot/manifest.json +1653 -0
  41. package/integ-tests/integ.custom-domain.ts.snapshot/tree.json +1 -0
  42. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.assets.json +7 -6
  43. package/integ-tests/integ.ubuntu.ts.snapshot/IntegSetupVSCodeOnUbuntuDefaultTestDeployAssertFF8DF2C5.template.json +6 -6
  44. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.assets.json +20 -12
  45. package/integ-tests/integ.ubuntu.ts.snapshot/IntegTestStackUbuntu22.template.json +36 -72
  46. package/integ-tests/integ.ubuntu.ts.snapshot/asset.0ad50fc42afd768c3d0bfdd4701e43284fb077a25f19eea1e8c51a5ca36ebfe4/index.js +5992 -0
  47. package/integ-tests/integ.ubuntu.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda/index.js +143 -0
  48. package/integ-tests/integ.ubuntu.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
  49. package/integ-tests/integ.ubuntu.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
  50. package/integ-tests/integ.ubuntu.ts.snapshot/cdk.out +1 -1
  51. package/integ-tests/integ.ubuntu.ts.snapshot/integ.json +3 -2
  52. package/integ-tests/integ.ubuntu.ts.snapshot/manifest.json +956 -7
  53. package/integ-tests/integ.ubuntu.ts.snapshot/tree.json +1 -3070
  54. package/lib/installer/installer.d.ts +7 -0
  55. package/lib/installer/installer.js +15 -7
  56. package/lib/installer/installer.lambda.js +20 -3
  57. package/lib/vscode-server.d.ts +33 -0
  58. package/lib/vscode-server.js +165 -5
  59. package/mavogelcdkvscodeserver/go.mod +1 -1
  60. package/mavogelcdkvscodeserver/jsii/jsii.go +2 -2
  61. package/mavogelcdkvscodeserver/version +1 -1
  62. package/package.json +4 -4
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/installer/installer.lambda.ts
21
+ var installer_lambda_exports = {};
22
+ __export(installer_lambda_exports, {
23
+ handler: () => handler
24
+ });
25
+ module.exports = __toCommonJS(installer_lambda_exports);
26
+ var import_client_ssm = require("@aws-sdk/client-ssm");
27
+ var ssm = new import_client_ssm.SSM();
28
+ var SLEEP_MS = 2900;
29
+ var handler = async (event, context) => {
30
+ console.log("Event: %j", { ...event, ResponseURL: "..." });
31
+ if (event.RequestType !== "Create") {
32
+ return {};
33
+ }
34
+ const resourceProperties = event.ResourceProperties;
35
+ const instanceId = event.ResourceProperties.InstanceId;
36
+ const documentName = event.ResourceProperties.DocumentName;
37
+ const cloudWatchLogGroupName = event.ResourceProperties.CloudWatchLogGroupName;
38
+ console.log("ResourceProperties raw: %j", resourceProperties);
39
+ console.log("InstanceId: %s", event.ResourceProperties.InstanceId);
40
+ console.log("VSCodePassword: %s", event.ResourceProperties.VSCodePassword);
41
+ const resourcePropertiesPartial = resourceProperties;
42
+ console.log("ResourceProperties before: %j", resourcePropertiesPartial);
43
+ delete resourcePropertiesPartial.ServiceToken;
44
+ if (resourcePropertiesPartial.ServiceTimeout) {
45
+ delete resourcePropertiesPartial.ServiceTimeout;
46
+ }
47
+ delete resourcePropertiesPartial.InstanceId;
48
+ delete resourcePropertiesPartial.DocumentName;
49
+ delete resourcePropertiesPartial.CloudWatchLogGroupName;
50
+ if (resourcePropertiesPartial.PhysicalResourceId) {
51
+ delete resourcePropertiesPartial.PhysicalResourceId;
52
+ }
53
+ console.log(
54
+ "ResourceProperties filtered after: %j",
55
+ resourcePropertiesPartial
56
+ );
57
+ const parameters = {};
58
+ for (const [key, value] of Object.entries(resourcePropertiesPartial)) {
59
+ parameters[key] = [value];
60
+ }
61
+ console.log("mapped parameters: %j", parameters);
62
+ let attemptNo = 0;
63
+ let timeRemaining = context.getRemainingTimeInMillis();
64
+ console.log(
65
+ `Running SSM Document '${documentName}' on EC2 instance '${instanceId}'. Logging to '${cloudWatchLogGroupName}' with parameters: '${JSON.stringify(parameters)}'`
66
+ );
67
+ while (true) {
68
+ attemptNo += 1;
69
+ console.log(
70
+ `Attempt: ${attemptNo}. Time Remaining: ${timeRemaining / 1e3}s`
71
+ );
72
+ 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)}`);
83
+ const command = response.Command;
84
+ const commandId = command.CommandId;
85
+ const responseData = { CommandId: commandId };
86
+ switch (command.Status) {
87
+ case "Pending":
88
+ case "InProgress":
89
+ timeRemaining = context.getRemainingTimeInMillis();
90
+ if (timeRemaining > SLEEP_MS) {
91
+ console.log(
92
+ `Instance ${instanceId} not ready: 'InProgress'. Sleeping: ${SLEEP_MS / 1e3}s`
93
+ );
94
+ await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
95
+ break;
96
+ } else {
97
+ throw new Error(
98
+ `SSM Document ${documentName} on EC2 instance ${instanceId} timed out while lambda in progress`
99
+ );
100
+ }
101
+ case "Success":
102
+ console.log(`Instance ${instanceId} successfully bootstrapped`);
103
+ return { Data: responseData };
104
+ case "TimedOut":
105
+ throw new Error(
106
+ `SSM Document ${documentName} on EC2 instance ${instanceId} timed out`
107
+ );
108
+ case "Cancelled":
109
+ throw new Error(
110
+ `SSM Document ${documentName} on EC2 instance ${instanceId} cancelled`
111
+ );
112
+ case "Failed":
113
+ throw new Error(
114
+ `SSM Document ${documentName} on EC2 instance ${instanceId} failed`
115
+ );
116
+ default:
117
+ throw new Error(
118
+ `SSM Document ${documentName} on EC2 instance ${instanceId} status ${command.Status}`
119
+ );
120
+ }
121
+ return { Data: responseData };
122
+ } 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) {
129
+ console.log(
130
+ `Retryable error encountered (${error.name}). Attempt ${attemptNo}. Sleeping: ${SLEEP_MS / 1e3}s before retry`
131
+ );
132
+ await new Promise((resolve) => setTimeout(resolve, SLEEP_MS));
133
+ } else {
134
+ console.log("Non-retryable error or timeout. Failing...");
135
+ throw error;
136
+ }
137
+ }
138
+ }
139
+ };
140
+ // Annotate the CommonJS export names for ESM import in node:
141
+ 0 && (module.exports = {
142
+ handler
143
+ });