alchemy 0.53.0 → 0.55.0

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 (214) hide show
  1. package/bin/alchemy.js +196353 -0
  2. package/bin/alchemy.ts +2 -2
  3. package/bin/commands/init.ts +1190 -0
  4. package/bin/constants.ts +18 -0
  5. package/bin/services/execute-alchemy.ts +7 -2
  6. package/bin/services/package-manager.ts +1 -1
  7. package/bin/types.ts +14 -5
  8. package/lib/aws/ec2/index.d.ts +10 -0
  9. package/lib/aws/ec2/index.d.ts.map +1 -0
  10. package/lib/aws/ec2/index.js +10 -0
  11. package/lib/aws/ec2/index.js.map +1 -0
  12. package/lib/aws/ec2/internet-gateway-attachment.d.ts +150 -0
  13. package/lib/aws/ec2/internet-gateway-attachment.d.ts.map +1 -0
  14. package/lib/aws/ec2/internet-gateway-attachment.js +248 -0
  15. package/lib/aws/ec2/internet-gateway-attachment.js.map +1 -0
  16. package/lib/aws/ec2/internet-gateway.d.ts +132 -0
  17. package/lib/aws/ec2/internet-gateway.d.ts.map +1 -0
  18. package/lib/aws/ec2/internet-gateway.js +311 -0
  19. package/lib/aws/ec2/internet-gateway.js.map +1 -0
  20. package/lib/aws/ec2/nat-gateway.d.ts +145 -0
  21. package/lib/aws/ec2/nat-gateway.d.ts.map +1 -0
  22. package/lib/aws/ec2/nat-gateway.js +618 -0
  23. package/lib/aws/ec2/nat-gateway.js.map +1 -0
  24. package/lib/aws/ec2/route-table-association.d.ts +134 -0
  25. package/lib/aws/ec2/route-table-association.d.ts.map +1 -0
  26. package/lib/aws/ec2/route-table-association.js +364 -0
  27. package/lib/aws/ec2/route-table-association.js.map +1 -0
  28. package/lib/aws/ec2/route-table.d.ts +94 -0
  29. package/lib/aws/ec2/route-table.d.ts.map +1 -0
  30. package/lib/aws/ec2/route-table.js +253 -0
  31. package/lib/aws/ec2/route-table.js.map +1 -0
  32. package/lib/aws/ec2/route.d.ts +130 -0
  33. package/lib/aws/ec2/route.d.ts.map +1 -0
  34. package/lib/aws/ec2/route.js +253 -0
  35. package/lib/aws/ec2/route.js.map +1 -0
  36. package/lib/aws/ec2/security-group-rule.d.ts +84 -0
  37. package/lib/aws/ec2/security-group-rule.d.ts.map +1 -0
  38. package/lib/aws/ec2/security-group-rule.js +123 -0
  39. package/lib/aws/ec2/security-group-rule.js.map +1 -0
  40. package/lib/aws/ec2/security-group.d.ts +84 -0
  41. package/lib/aws/ec2/security-group.d.ts.map +1 -0
  42. package/lib/aws/ec2/security-group.js +207 -0
  43. package/lib/aws/ec2/security-group.js.map +1 -0
  44. package/lib/aws/ec2/subnet.d.ts +110 -0
  45. package/lib/aws/ec2/subnet.d.ts.map +1 -0
  46. package/lib/aws/ec2/subnet.js +336 -0
  47. package/lib/aws/ec2/subnet.js.map +1 -0
  48. package/lib/aws/ec2/utils.d.ts +15 -0
  49. package/lib/aws/ec2/utils.d.ts.map +1 -0
  50. package/lib/aws/ec2/utils.js +79 -0
  51. package/lib/aws/ec2/utils.js.map +1 -0
  52. package/lib/aws/ec2/vpc.d.ts +160 -0
  53. package/lib/aws/ec2/vpc.d.ts.map +1 -0
  54. package/lib/aws/ec2/vpc.js +453 -0
  55. package/lib/aws/ec2/vpc.js.map +1 -0
  56. package/lib/aws/index.d.ts +7 -0
  57. package/lib/aws/index.d.ts.map +1 -1
  58. package/lib/aws/index.js +8 -0
  59. package/lib/aws/index.js.map +1 -1
  60. package/lib/aws/utils.d.ts +25 -0
  61. package/lib/aws/utils.d.ts.map +1 -0
  62. package/lib/aws/utils.js +89 -0
  63. package/lib/aws/utils.js.map +1 -0
  64. package/lib/build-date.d.ts +6 -0
  65. package/lib/build-date.d.ts.map +1 -0
  66. package/lib/build-date.js +8 -0
  67. package/lib/build-date.js.map +1 -0
  68. package/lib/cloudflare/astro.d.ts.map +1 -1
  69. package/lib/cloudflare/astro.js +4 -3
  70. package/lib/cloudflare/astro.js.map +1 -1
  71. package/lib/cloudflare/bundle/externals.d.ts +3 -0
  72. package/lib/cloudflare/bundle/externals.d.ts.map +1 -0
  73. package/lib/cloudflare/bundle/externals.js +35 -0
  74. package/lib/cloudflare/bundle/externals.js.map +1 -0
  75. package/lib/cloudflare/bundle/internal-worker-bundle.d.ts +8 -1
  76. package/lib/cloudflare/bundle/internal-worker-bundle.d.ts.map +1 -1
  77. package/lib/cloudflare/bundle/internal-worker-bundle.js +11 -4
  78. package/lib/cloudflare/bundle/internal-worker-bundle.js.map +1 -1
  79. package/lib/cloudflare/bundle/plugin-hot-reload.d.ts +4 -1
  80. package/lib/cloudflare/bundle/plugin-hot-reload.d.ts.map +1 -1
  81. package/lib/cloudflare/bundle/plugin-hot-reload.js +27 -11
  82. package/lib/cloudflare/bundle/plugin-hot-reload.js.map +1 -1
  83. package/lib/cloudflare/bundle/plugin-hybrid-node-compat.js +5 -1
  84. package/lib/cloudflare/bundle/plugin-hybrid-node-compat.js.map +1 -1
  85. package/lib/cloudflare/bundle/plugin-wasm.d.ts +6 -2
  86. package/lib/cloudflare/bundle/plugin-wasm.d.ts.map +1 -1
  87. package/lib/cloudflare/bundle/plugin-wasm.js +21 -47
  88. package/lib/cloudflare/bundle/plugin-wasm.js.map +1 -1
  89. package/lib/cloudflare/bundle/validate-node-compat.d.ts +2 -1
  90. package/lib/cloudflare/bundle/validate-node-compat.d.ts.map +1 -1
  91. package/lib/cloudflare/bundle/validate-node-compat.js +5 -4
  92. package/lib/cloudflare/bundle/validate-node-compat.js.map +1 -1
  93. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  94. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  95. package/lib/cloudflare/d1-database.js +1 -1
  96. package/lib/cloudflare/d1-database.js.map +1 -1
  97. package/lib/cloudflare/d1-migrations.d.ts.map +1 -1
  98. package/lib/cloudflare/d1-migrations.js +8 -10
  99. package/lib/cloudflare/d1-migrations.js.map +1 -1
  100. package/lib/cloudflare/miniflare/miniflare-worker-options.d.ts +3 -3
  101. package/lib/cloudflare/miniflare/miniflare-worker-options.d.ts.map +1 -1
  102. package/lib/cloudflare/miniflare/miniflare-worker-options.js +23 -6
  103. package/lib/cloudflare/miniflare/miniflare-worker-options.js.map +1 -1
  104. package/lib/cloudflare/miniflare/miniflare.d.ts.map +1 -1
  105. package/lib/cloudflare/miniflare/miniflare.js +2 -4
  106. package/lib/cloudflare/miniflare/miniflare.js.map +1 -1
  107. package/lib/cloudflare/miniflare/remote-binding-proxy.d.ts.map +1 -1
  108. package/lib/cloudflare/miniflare/remote-binding-proxy.js +4 -6
  109. package/lib/cloudflare/miniflare/remote-binding-proxy.js.map +1 -1
  110. package/lib/cloudflare/react-router.d.ts +4 -0
  111. package/lib/cloudflare/react-router.d.ts.map +1 -1
  112. package/lib/cloudflare/react-router.js +8 -5
  113. package/lib/cloudflare/react-router.js.map +1 -1
  114. package/lib/cloudflare/worker-bundle.d.ts +80 -0
  115. package/lib/cloudflare/worker-bundle.d.ts.map +1 -0
  116. package/lib/cloudflare/worker-bundle.js +266 -0
  117. package/lib/cloudflare/worker-bundle.js.map +1 -0
  118. package/lib/cloudflare/worker.d.ts +1 -1
  119. package/lib/cloudflare/worker.d.ts.map +1 -1
  120. package/lib/cloudflare/worker.js +81 -195
  121. package/lib/cloudflare/worker.js.map +1 -1
  122. package/lib/esbuild/bundle.d.ts +1 -0
  123. package/lib/esbuild/bundle.d.ts.map +1 -1
  124. package/lib/state/cloudflare-state-store.js +1 -5
  125. package/lib/state/cloudflare-state-store.js.map +1 -1
  126. package/lib/state/dofs-state-store/store.d.ts.map +1 -1
  127. package/lib/state/dofs-state-store/store.js +4 -4
  128. package/lib/state/dofs-state-store/store.js.map +1 -1
  129. package/lib/util/params.d.ts +5 -0
  130. package/lib/util/params.d.ts.map +1 -0
  131. package/lib/util/params.js +30 -0
  132. package/lib/util/params.js.map +1 -0
  133. package/lib/util/timeout.d.ts +31 -0
  134. package/lib/util/timeout.d.ts.map +1 -0
  135. package/lib/util/timeout.js +109 -0
  136. package/lib/util/timeout.js.map +1 -0
  137. package/lib/util/xml.d.ts +5 -0
  138. package/lib/util/xml.d.ts.map +1 -0
  139. package/lib/util/xml.js +8 -0
  140. package/lib/util/xml.js.map +1 -0
  141. package/package.json +12 -5
  142. package/src/aws/ec2/index.ts +9 -0
  143. package/src/aws/ec2/internet-gateway-attachment.ts +468 -0
  144. package/src/aws/ec2/internet-gateway.ts +557 -0
  145. package/src/aws/ec2/nat-gateway.ts +1123 -0
  146. package/src/aws/ec2/route-table-association.ts +747 -0
  147. package/src/aws/ec2/route-table.ts +452 -0
  148. package/src/aws/ec2/route.ts +447 -0
  149. package/src/aws/ec2/security-group-rule.ts +229 -0
  150. package/src/aws/ec2/security-group.ts +418 -0
  151. package/src/aws/ec2/subnet.ts +625 -0
  152. package/src/aws/ec2/utils.ts +102 -0
  153. package/src/aws/ec2/vpc.ts +969 -0
  154. package/src/aws/index.ts +9 -0
  155. package/src/aws/utils.ts +137 -0
  156. package/src/build-date.ts +8 -0
  157. package/src/cloudflare/astro.ts +4 -3
  158. package/src/cloudflare/bundle/externals.ts +36 -0
  159. package/src/cloudflare/bundle/internal-worker-bundle.ts +12 -3
  160. package/src/cloudflare/bundle/plugin-hot-reload.ts +32 -12
  161. package/src/cloudflare/bundle/plugin-hybrid-node-compat.ts +6 -1
  162. package/src/cloudflare/bundle/plugin-wasm.ts +26 -54
  163. package/src/cloudflare/bundle/validate-node-compat.ts +6 -5
  164. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  165. package/src/cloudflare/d1-database.ts +1 -1
  166. package/src/cloudflare/d1-migrations.ts +19 -18
  167. package/src/cloudflare/miniflare/miniflare-worker-options.ts +27 -13
  168. package/src/cloudflare/miniflare/miniflare.ts +2 -4
  169. package/src/cloudflare/miniflare/remote-binding-proxy.ts +5 -7
  170. package/src/cloudflare/react-router.ts +14 -6
  171. package/src/cloudflare/worker-bundle.ts +364 -0
  172. package/src/cloudflare/worker.ts +104 -241
  173. package/src/state/cloudflare-state-store.ts +1 -5
  174. package/src/state/dofs-state-store/store.ts +4 -4
  175. package/src/util/params.ts +33 -0
  176. package/src/util/timeout.ts +178 -0
  177. package/src/util/xml.ts +7 -0
  178. package/templates/nuxt/package.json +1 -1
  179. package/templates/nuxt/types/env.d.ts +11 -0
  180. package/templates/react-router/workers/app.ts +2 -2
  181. package/templates/rwsdk/.cursor/rules/alchemy_cloudflare.mdc +385 -0
  182. package/templates/rwsdk/wrangler.jsonc +10 -7
  183. package/templates/typescript/tsconfig.json +1 -2
  184. package/bin/alchemy.mjs +0 -51766
  185. package/lib/cloudflare/bundle/esbuild.d.ts +0 -16
  186. package/lib/cloudflare/bundle/esbuild.d.ts.map +0 -1
  187. package/lib/cloudflare/bundle/esbuild.js +0 -159
  188. package/lib/cloudflare/bundle/esbuild.js.map +0 -1
  189. package/lib/cloudflare/bundle/fs.d.ts +0 -18
  190. package/lib/cloudflare/bundle/fs.d.ts.map +0 -1
  191. package/lib/cloudflare/bundle/fs.js +0 -78
  192. package/lib/cloudflare/bundle/fs.js.map +0 -1
  193. package/lib/cloudflare/bundle/index.d.ts +0 -3
  194. package/lib/cloudflare/bundle/index.d.ts.map +0 -1
  195. package/lib/cloudflare/bundle/index.js +0 -2
  196. package/lib/cloudflare/bundle/index.js.map +0 -1
  197. package/lib/cloudflare/bundle/inline.d.ts +0 -12
  198. package/lib/cloudflare/bundle/inline.d.ts.map +0 -1
  199. package/lib/cloudflare/bundle/inline.js +0 -32
  200. package/lib/cloudflare/bundle/inline.js.map +0 -1
  201. package/lib/cloudflare/bundle/normalize.d.ts +0 -21
  202. package/lib/cloudflare/bundle/normalize.d.ts.map +0 -1
  203. package/lib/cloudflare/bundle/normalize.js +0 -49
  204. package/lib/cloudflare/bundle/normalize.js.map +0 -1
  205. package/lib/cloudflare/bundle/shared.d.ts +0 -30
  206. package/lib/cloudflare/bundle/shared.d.ts.map +0 -1
  207. package/lib/cloudflare/bundle/shared.js +0 -34
  208. package/lib/cloudflare/bundle/shared.js.map +0 -1
  209. package/src/cloudflare/bundle/esbuild.ts +0 -194
  210. package/src/cloudflare/bundle/fs.ts +0 -103
  211. package/src/cloudflare/bundle/index.ts +0 -6
  212. package/src/cloudflare/bundle/inline.ts +0 -42
  213. package/src/cloudflare/bundle/normalize.ts +0 -76
  214. package/src/cloudflare/bundle/shared.ts +0 -73
@@ -0,0 +1,336 @@
1
+ import { XMLParser } from "fast-xml-parser";
2
+ import { Resource } from "../../resource.js";
3
+ import { ignore } from "../../util/ignore.js";
4
+ import { logger } from "../../util/logger.js";
5
+ import { mergeTimeoutConfig, waitForResourceState, } from "../../util/timeout.js";
6
+ import { retry } from "../retry.js";
7
+ import { callEC2Api, createEC2Client } from "./utils.js";
8
+ /**
9
+ * Wait for subnet to be in available state
10
+ */
11
+ async function waitForSubnetAvailable(client, subnetId, timeoutConfig) {
12
+ const checkFunction = async () => {
13
+ const response = await callEC2Api(client, "DescribeSubnets", parseSubnetXmlResponse, {
14
+ "SubnetId.1": subnetId,
15
+ });
16
+ return response.Subnets?.[0];
17
+ };
18
+ const isReady = (subnet) => {
19
+ return subnet?.State === "available";
20
+ };
21
+ await waitForResourceState(checkFunction, isReady, timeoutConfig, subnetId, "Subnet", "is now available");
22
+ }
23
+ /**
24
+ * Wait for Subnet to be deleted
25
+ */
26
+ async function waitForSubnetDeleted(client, subnetId, timeoutConfig) {
27
+ const checkFunction = async () => {
28
+ try {
29
+ const response = await callEC2Api(client, "DescribeSubnets", parseSubnetXmlResponse, {
30
+ "SubnetId.1": subnetId,
31
+ });
32
+ return response.Subnets?.[0];
33
+ }
34
+ catch (error) {
35
+ // If Subnet is not found, it's been deleted - return undefined
36
+ if (error.code === "InvalidSubnetID.NotFound" ||
37
+ error.code === "InvalidSubnet.NotFound") {
38
+ return undefined;
39
+ }
40
+ throw error;
41
+ }
42
+ };
43
+ const isReady = (subnet) => {
44
+ // Subnet is deleted if it doesn't exist
45
+ return !subnet;
46
+ };
47
+ await waitForResourceState(checkFunction, isReady, timeoutConfig, subnetId, "Subnet", "be deleted");
48
+ }
49
+ /**
50
+ * AWS Subnet Resource
51
+ *
52
+ * Creates and manages subnets within a VPC. Subnets are used to segment
53
+ * your VPC into smaller networks for organizing resources.
54
+ *
55
+ * @example
56
+ * // Create a public subnet for web servers
57
+ * const publicSubnet = await Subnet("public-subnet", {
58
+ * vpc: myVpc,
59
+ * cidrBlock: "10.0.1.0/24",
60
+ * availabilityZone: process.env.AWS_REGION ? `${process.env.AWS_REGION}a` : "us-east-1a",
61
+ * mapPublicIpOnLaunch: true,
62
+ * tags: {
63
+ * Name: "public-subnet",
64
+ * Type: "public"
65
+ * }
66
+ * });
67
+ *
68
+ * @example
69
+ * // Create a private subnet for databases
70
+ * const privateSubnet = await Subnet("private-subnet", {
71
+ * vpc: myVpc,
72
+ * cidrBlock: "10.0.2.0/24",
73
+ * availabilityZone: "us-west-2b",
74
+ * mapPublicIpOnLaunch: false,
75
+ * tags: {
76
+ * Name: "private-subnet",
77
+ * Type: "private"
78
+ * }
79
+ * });
80
+ *
81
+ * @example
82
+ * // Create a subnet with custom timeout configuration
83
+ * const customSubnet = await Subnet("custom-subnet", {
84
+ * vpc: myVpc,
85
+ * cidrBlock: "10.0.3.0/24",
86
+ * availabilityZone: "us-west-2c",
87
+ * timeout: {
88
+ * maxAttempts: 50,
89
+ * delayMs: 500
90
+ * }
91
+ * });
92
+ */
93
+ export const Subnet = Resource("aws::Subnet", async function (_id, props) {
94
+ const client = await createEC2Client();
95
+ const vpcId = typeof props.vpc === "string" ? props.vpc : props.vpc.vpcId;
96
+ // Validate timeout config early, but use default for deletion if invalid
97
+ let timeoutConfig;
98
+ try {
99
+ timeoutConfig = mergeTimeoutConfig(SUBNET_TIMEOUT, props.timeout);
100
+ }
101
+ catch (error) {
102
+ if (this.phase === "delete") {
103
+ // Use default timeout for deletion to avoid blocking cleanup
104
+ timeoutConfig = SUBNET_TIMEOUT;
105
+ }
106
+ else {
107
+ // Re-throw validation error during creation/update
108
+ throw error;
109
+ }
110
+ }
111
+ if (this.phase === "delete") {
112
+ if (this.output?.subnetId) {
113
+ logger.log(`🗑️ Deleting Subnet: ${this.output.subnetId}`);
114
+ await retry(async () => {
115
+ await ignore("InvalidSubnetID.NotFound", async () => {
116
+ await callEC2Api(client, "DeleteSubnet", parseSubnetXmlResponse, {
117
+ SubnetId: this.output.subnetId,
118
+ });
119
+ });
120
+ });
121
+ // Wait for Subnet to be fully deleted to avoid dependency violations
122
+ logger.log(` Waiting for Subnet ${this.output.subnetId} to be fully deleted...`);
123
+ await waitForSubnetDeleted(client, this.output.subnetId, timeoutConfig);
124
+ logger.log(` ✅ Subnet ${this.output.subnetId} deletion completed`);
125
+ }
126
+ return this.destroy();
127
+ }
128
+ let subnet;
129
+ if (this.phase === "update" && this.output?.subnetId) {
130
+ // Get existing subnet
131
+ const response = await callEC2Api(client, "DescribeSubnets", parseSubnetXmlResponse, {
132
+ "SubnetId.1": this.output.subnetId,
133
+ });
134
+ if (!response.Subnets?.[0]) {
135
+ throw new Error(`Subnet ${this.output.subnetId} not found`);
136
+ }
137
+ subnet = response.Subnets[0];
138
+ // Update public IP assignment if it has changed
139
+ if (props.mapPublicIpOnLaunch !== undefined) {
140
+ await callEC2Api(client, "ModifySubnetAttribute", parseSubnetXmlResponse, {
141
+ SubnetId: subnet.SubnetId,
142
+ "MapPublicIpOnLaunch.Value": props.mapPublicIpOnLaunch.toString(),
143
+ });
144
+ }
145
+ // Update tags if provided
146
+ if (props.tags) {
147
+ const tagParams = {};
148
+ Object.entries(props.tags).forEach(([key, value], index) => {
149
+ tagParams[`Tag.${index + 1}.Key`] = key;
150
+ tagParams[`Tag.${index + 1}.Value`] = value;
151
+ });
152
+ await callEC2Api(client, "CreateTags", parseSubnetXmlResponse, {
153
+ "ResourceId.1": subnet.SubnetId,
154
+ ...tagParams,
155
+ });
156
+ }
157
+ }
158
+ else {
159
+ // Create new subnet
160
+ const createSubnetParams = {
161
+ VpcId: vpcId,
162
+ CidrBlock: props.cidrBlock,
163
+ AvailabilityZone: props.availabilityZone,
164
+ };
165
+ // Add tags if specified
166
+ if (props.tags) {
167
+ createSubnetParams.TagSpecifications = [
168
+ {
169
+ ResourceType: "subnet",
170
+ Tags: Object.entries(props.tags).map(([key, value]) => ({
171
+ Key: key,
172
+ Value: value,
173
+ })),
174
+ },
175
+ ];
176
+ }
177
+ const createParams = convertCreateSubnetParamsToAwsFormat(createSubnetParams);
178
+ const response = await callEC2Api(client, "CreateSubnet", parseSubnetXmlResponse, createParams);
179
+ if (!response.Subnet) {
180
+ throw new Error("Failed to create subnet");
181
+ }
182
+ subnet = response.Subnet;
183
+ // Set public IP assignment if specified
184
+ if (props.mapPublicIpOnLaunch !== undefined) {
185
+ await callEC2Api(client, "ModifySubnetAttribute", parseSubnetXmlResponse, {
186
+ SubnetId: subnet.SubnetId,
187
+ "MapPublicIpOnLaunch.Value": props.mapPublicIpOnLaunch.toString(),
188
+ });
189
+ }
190
+ // Wait for subnet to be available
191
+ await waitForSubnetAvailable(client, subnet.SubnetId, timeoutConfig);
192
+ }
193
+ return this({
194
+ subnetId: subnet.SubnetId,
195
+ vpcId: subnet.VpcId,
196
+ state: subnet.State,
197
+ availableIpAddressCount: subnet.AvailableIpAddressCount,
198
+ defaultForAz: subnet.DefaultForAz,
199
+ ...props,
200
+ vpc: vpcId,
201
+ });
202
+ });
203
+ /**
204
+ * Parse XML responses specifically for Subnet operations
205
+ */
206
+ function parseSubnetXmlResponse(xmlText) {
207
+ const parser = new XMLParser({
208
+ ignoreAttributes: true,
209
+ parseAttributeValue: true,
210
+ parseTagValue: true,
211
+ trimValues: true,
212
+ });
213
+ const parsed = parser.parse(xmlText);
214
+ const result = {};
215
+ // Parse CreateSubnetResponse
216
+ if (parsed.CreateSubnetResponse) {
217
+ const subnet = parsed.CreateSubnetResponse.subnet;
218
+ if (subnet) {
219
+ result.Subnet = {
220
+ SubnetId: subnet.subnetId,
221
+ VpcId: subnet.vpcId,
222
+ State: subnet.state,
223
+ CidrBlock: subnet.cidrBlock,
224
+ AvailabilityZone: subnet.availabilityZone,
225
+ AvailableIpAddressCount: subnet.availableIpAddressCount,
226
+ DefaultForAz: subnet.defaultForAz,
227
+ MapPublicIpOnLaunch: subnet.mapPublicIpOnLaunch,
228
+ };
229
+ }
230
+ }
231
+ // Parse DescribeSubnetsResponse
232
+ if (parsed.DescribeSubnetsResponse) {
233
+ const subnetSet = parsed.DescribeSubnetsResponse.subnetSet;
234
+ if (subnetSet?.item) {
235
+ const subnets = Array.isArray(subnetSet.item)
236
+ ? subnetSet.item
237
+ : [subnetSet.item];
238
+ result.Subnets = subnets.map((subnet) => ({
239
+ SubnetId: subnet.subnetId,
240
+ VpcId: subnet.vpcId,
241
+ State: subnet.state,
242
+ CidrBlock: subnet.cidrBlock,
243
+ AvailabilityZone: subnet.availabilityZone,
244
+ AvailableIpAddressCount: subnet.availableIpAddressCount,
245
+ DefaultForAz: subnet.defaultForAz,
246
+ MapPublicIpOnLaunch: subnet.mapPublicIpOnLaunch,
247
+ }));
248
+ }
249
+ else {
250
+ result.Subnets = [];
251
+ }
252
+ }
253
+ // Generic success responses
254
+ const successResponses = [
255
+ "ModifySubnetAttributeResponse",
256
+ "DeleteSubnetResponse",
257
+ ];
258
+ for (const responseType of successResponses) {
259
+ if (parsed[responseType]) {
260
+ result.success = true;
261
+ break;
262
+ }
263
+ }
264
+ return result;
265
+ }
266
+ /**
267
+ * Subnet timeout constants
268
+ */
269
+ export const SUBNET_TIMEOUT = {
270
+ maxAttempts: 30,
271
+ delayMs: 1000, // 1 second - Subnets are quick
272
+ };
273
+ /**
274
+ * Helper functions to convert typed parameters to AWS API format
275
+ */
276
+ function convertCreateSubnetParamsToAwsFormat(params) {
277
+ const awsParams = {
278
+ VpcId: params.VpcId,
279
+ };
280
+ if (params.CidrBlock) {
281
+ awsParams.CidrBlock = params.CidrBlock;
282
+ }
283
+ if (params.Ipv6CidrBlock) {
284
+ awsParams.Ipv6CidrBlock = params.Ipv6CidrBlock;
285
+ }
286
+ if (params.AvailabilityZone) {
287
+ awsParams.AvailabilityZone = params.AvailabilityZone;
288
+ }
289
+ if (params.AvailabilityZoneId) {
290
+ awsParams.AvailabilityZoneId = params.AvailabilityZoneId;
291
+ }
292
+ if (params.OutpostArn) {
293
+ awsParams.OutpostArn = params.OutpostArn;
294
+ }
295
+ if (params.CustomerOwnedIpv4Pool) {
296
+ awsParams.CustomerOwnedIpv4Pool = params.CustomerOwnedIpv4Pool;
297
+ }
298
+ if (params.MapPublicIpOnLaunch !== undefined) {
299
+ awsParams.MapPublicIpOnLaunch = params.MapPublicIpOnLaunch.toString();
300
+ }
301
+ if (params.MapCustomerOwnedIpOnLaunch !== undefined) {
302
+ awsParams.MapCustomerOwnedIpOnLaunch =
303
+ params.MapCustomerOwnedIpOnLaunch.toString();
304
+ }
305
+ if (params.Ipv4IpamPoolId) {
306
+ awsParams.Ipv4IpamPoolId = params.Ipv4IpamPoolId;
307
+ }
308
+ if (params.Ipv4NetmaskLength !== undefined) {
309
+ awsParams.Ipv4NetmaskLength = params.Ipv4NetmaskLength.toString();
310
+ }
311
+ if (params.Ipv6IpamPoolId) {
312
+ awsParams.Ipv6IpamPoolId = params.Ipv6IpamPoolId;
313
+ }
314
+ if (params.Ipv6NetmaskLength !== undefined) {
315
+ awsParams.Ipv6NetmaskLength = params.Ipv6NetmaskLength.toString();
316
+ }
317
+ if (params.DryRun !== undefined) {
318
+ awsParams.DryRun = params.DryRun.toString();
319
+ }
320
+ // Handle TagSpecifications
321
+ if (params.TagSpecifications) {
322
+ params.TagSpecifications.forEach((tagSpec, specIndex) => {
323
+ const specNum = specIndex + 1;
324
+ awsParams[`TagSpecification.${specNum}.ResourceType`] =
325
+ tagSpec.ResourceType;
326
+ tagSpec.Tags.forEach((tag, tagIndex) => {
327
+ const tagNum = tagIndex + 1;
328
+ awsParams[`TagSpecification.${specNum}.Tag.${tagNum}.Key`] = tag.Key;
329
+ awsParams[`TagSpecification.${specNum}.Tag.${tagNum}.Value`] =
330
+ tag.Value;
331
+ });
332
+ });
333
+ }
334
+ return awsParams;
335
+ }
336
+ //# sourceMappingURL=subnet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subnet.js","sourceRoot":"","sources":["../../../src/aws/ec2/subnet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAElB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAsEzD;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,MAAiB,EACjB,QAAgB,EAChB,aAA4B;IAE5B,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAC/B,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB;YACE,YAAY,EAAE,QAAQ;SACvB,CACF,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,MAA6B,EAAE,EAAE;QAChD,OAAO,MAAM,EAAE,KAAK,KAAK,WAAW,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,oBAAoB,CACxB,aAAa,EACb,OAAO,EACP,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,kBAAkB,CACnB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CACjC,MAAiB,EACjB,QAAgB,EAChB,aAA4B;IAE5B,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAC/B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAC/B,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB;gBACE,YAAY,EAAE,QAAQ;aACvB,CACF,CAAC;YACF,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,+DAA+D;YAC/D,IACE,KAAK,CAAC,IAAI,KAAK,0BAA0B;gBACzC,KAAK,CAAC,IAAI,KAAK,wBAAwB,EACvC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,MAA6B,EAAE,EAAE;QAChD,wCAAwC;QACxC,OAAO,CAAC,MAAM,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,oBAAoB,CACxB,aAAa,EACb,OAAO,EACP,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,YAAY,CACb,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAC5B,aAAa,EACb,KAAK,WAEH,GAAW,EACX,KAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IAE1E,yEAAyE;IACzE,IAAI,aAA4B,CAAC;IACjC,IAAI,CAAC;QACH,aAAa,GAAG,kBAAkB,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,6DAA6D;YAC7D,aAAa,GAAG,cAAc,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,mDAAmD;YACnD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC,KAAK,IAAI,EAAE;gBACrB,MAAM,MAAM,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;oBAClD,MAAM,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,sBAAsB,EAAE;wBAC/D,QAAQ,EAAE,IAAI,CAAC,MAAO,CAAC,QAAQ;qBAChC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,qEAAqE;YACrE,MAAM,CAAC,GAAG,CACR,wBAAwB,IAAI,CAAC,MAAM,CAAC,QAAQ,yBAAyB,CACtE,CAAC;YACF,MAAM,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACxE,MAAM,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,QAAQ,qBAAqB,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,IAAI,MAAiB,CAAC;IAEtB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;QACrD,sBAAsB;QACtB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAC/B,MAAM,EACN,iBAAiB,EACjB,sBAAsB,EACtB;YACE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;SACnC,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,YAAY,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE7B,gDAAgD;QAChD,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,UAAU,CACd,MAAM,EACN,uBAAuB,EACvB,sBAAsB,EACtB;gBACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,2BAA2B,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE;aAClE,CACF,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,SAAS,GAA2B,EAAE,CAAC;YAC7C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;gBACzD,SAAS,CAAC,OAAO,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;gBACxC,SAAS,CAAC,OAAO,KAAK,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;YAC9C,CAAC,CAAC,CAAC;YAEH,MAAM,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE;gBAC7D,cAAc,EAAE,MAAM,CAAC,QAAQ;gBAC/B,GAAG,SAAS;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,oBAAoB;QACpB,MAAM,kBAAkB,GAAuB;YAC7C,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;SACzC,CAAC;QAEF,wBAAwB;QACxB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,kBAAkB,CAAC,iBAAiB,GAAG;gBACrC;oBACE,YAAY,EAAE,QAAQ;oBACtB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;wBACtD,GAAG,EAAE,GAAG;wBACR,KAAK,EAAE,KAAK;qBACb,CAAC,CAAC;iBACJ;aACF,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAChB,oCAAoC,CAAC,kBAAkB,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAC/B,MAAM,EACN,cAAc,EACd,sBAAsB,EACtB,YAAY,CACb,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAEzB,wCAAwC;QACxC,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,UAAU,CACd,MAAM,EACN,uBAAuB,EACvB,sBAAsB,EACtB;gBACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,2BAA2B,EAAE,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE;aAClE,CACF,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,MAAM,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,IAAI,CAAC;QACV,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAgC;QAC9C,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,GAAG,KAAK;QACR,GAAG,EAAE,KAAK;KACX,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEF;;GAEG;AACH,SAAS,sBAAsB,CAK7B,OAAe;IACf,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,gBAAgB,EAAE,IAAI;QACtB,mBAAmB,EAAE,IAAI;QACzB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,6BAA6B;IAC7B,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,MAAyB,CAAC;QACrE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,GAAG;gBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;gBACvD,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;aAChD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,uBAAuB,CAAC,SAAS,CAAC;QAC3D,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC3C,CAAC,CAAC,SAAS,CAAC,IAAI;gBAChB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAuB,EAAE,EAAE,CAAC,CAAC;gBACzD,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;gBACvD,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;aAChD,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG;QACvB,+BAA+B;QAC/B,sBAAsB;KACvB,CAAC;IAEF,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,WAAW,EAAE,EAAE;IACf,OAAO,EAAE,IAAI,EAAE,+BAA+B;CAC/C,CAAC;AA+EF;;GAEG;AACH,SAAS,oCAAoC,CAC3C,MAA0B;IAE1B,MAAM,SAAS,GAA2B;QACxC,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IACjD,CAAC;IAED,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,SAAS,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,SAAS,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAC3D,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC3C,CAAC;IAED,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACjC,SAAS,CAAC,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACjE,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC7C,SAAS,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,MAAM,CAAC,0BAA0B,KAAK,SAAS,EAAE,CAAC;QACpD,SAAS,CAAC,0BAA0B;YAClC,MAAM,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC3C,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC3C,SAAS,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC7B,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;YACtD,MAAM,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;YAC9B,SAAS,CAAC,oBAAoB,OAAO,eAAe,CAAC;gBACnD,OAAO,CAAC,YAAY,CAAC;YAEvB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;gBACrC,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC;gBAC5B,SAAS,CAAC,oBAAoB,OAAO,QAAQ,MAAM,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;gBACrE,SAAS,CAAC,oBAAoB,OAAO,QAAQ,MAAM,QAAQ,CAAC;oBAC1D,GAAG,CAAC,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { AwsClient } from "aws4fetch";
2
+ import { getRegion } from "../utils.ts";
3
+ /**
4
+ * Shared EC2 utilities for all EC2 resources
5
+ */
6
+ /**
7
+ * Create an AWS EC2 client
8
+ */
9
+ export declare function createEC2Client(): Promise<AwsClient>;
10
+ /**
11
+ * Make an EC2 API call with custom response parser
12
+ */
13
+ export declare function callEC2Api<T>(client: AwsClient, action: string, responseParser: (xmlText: string) => T, params?: Record<string, any>): Promise<T>;
14
+ export { getRegion };
15
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AAEH;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,SAAS,CAAC,CAS1D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,CAAC,EACtC,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAC/B,OAAO,CAAC,CAAC,CAAC,CAkEZ;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { fromNodeProviderChain } from "@aws-sdk/credential-providers";
2
+ import { AwsClient } from "aws4fetch";
3
+ import { logger } from "../../util/logger.js";
4
+ import { flattenParams } from "../../util/params.js";
5
+ import { getRegion } from "../utils.js";
6
+ /**
7
+ * Shared EC2 utilities for all EC2 resources
8
+ */
9
+ /**
10
+ * Create an AWS EC2 client
11
+ */
12
+ export async function createEC2Client() {
13
+ const credentials = await fromNodeProviderChain()();
14
+ const region = await getRegion();
15
+ return new AwsClient({
16
+ ...credentials,
17
+ service: "ec2",
18
+ region,
19
+ });
20
+ }
21
+ /**
22
+ * Make an EC2 API call with custom response parser
23
+ */
24
+ export async function callEC2Api(client, action, responseParser, params = {}) {
25
+ // Try the API call, and retry once with fresh credentials on auth failure
26
+ for (let attempt = 1; attempt <= 2; attempt++) {
27
+ try {
28
+ const region = await getRegion();
29
+ const url = `https://ec2.${region}.amazonaws.com/`;
30
+ const body = new URLSearchParams({
31
+ Action: action,
32
+ Version: "2016-11-15",
33
+ ...flattenParams(params),
34
+ });
35
+ const signedRequest = await client.sign(url, {
36
+ method: "POST",
37
+ headers: {
38
+ "Content-Type": "application/x-www-form-urlencoded",
39
+ },
40
+ body: body.toString(),
41
+ });
42
+ const response = await fetch(signedRequest);
43
+ if (!response.ok) {
44
+ const errorText = await response.text();
45
+ // Parse AWS error code from XML response
46
+ const errorCodeMatch = errorText.match(/<Code>([^<]+)<\/Code>/);
47
+ const errorCode = errorCodeMatch ? errorCodeMatch[1] : null;
48
+ // If this is an auth failure and we haven't retried yet, create a fresh client and retry
49
+ if (errorCode === "AuthFailure" && attempt === 1) {
50
+ logger.log(`🔄 Auth failure detected, refreshing credentials and retrying ${action}...`);
51
+ // Create a fresh client with new credentials
52
+ client = await createEC2Client();
53
+ continue; // Retry with fresh client
54
+ }
55
+ const error = new Error(`EC2 API error: ${response.status} ${response.statusText}\n${errorText}`);
56
+ // Set the error code for the ignore function
57
+ if (errorCode) {
58
+ error.code = errorCode;
59
+ }
60
+ throw error;
61
+ }
62
+ const xmlText = await response.text();
63
+ const parsed = responseParser(xmlText);
64
+ return parsed;
65
+ }
66
+ catch (error) {
67
+ // If it's not an auth failure or we've already retried, throw the error
68
+ if (attempt === 2 || !error?.message?.includes("AuthFailure")) {
69
+ throw error;
70
+ }
71
+ // Otherwise, continue to retry
72
+ }
73
+ }
74
+ // This should never be reached, but TypeScript needs it
75
+ throw new Error("Unexpected error in API call retry logic");
76
+ }
77
+ // Re-export getRegion for convenience
78
+ export { getRegion };
79
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/aws/ec2/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ import type { Context } from "../../context.ts";
2
+ import { Resource } from "../../resource.ts";
3
+ import { type TimeoutConfig } from "../../util/timeout.ts";
4
+ /**
5
+ * Properties for creating or updating a VPC
6
+ */
7
+ export interface VpcProps {
8
+ /**
9
+ * The IPv4 network range for the VPC, in CIDR notation
10
+ * @example "10.0.0.0/16"
11
+ */
12
+ cidrBlock: string;
13
+ /**
14
+ * Whether to enable DNS resolution for the VPC
15
+ * @default true
16
+ */
17
+ enableDnsSupport?: boolean;
18
+ /**
19
+ * Whether to enable DNS hostnames for the VPC
20
+ * @default true
21
+ */
22
+ enableDnsHostnames?: boolean;
23
+ /**
24
+ * The tenancy option for instances launched into the VPC
25
+ * @default "default"
26
+ */
27
+ instanceTenancy?: "default" | "dedicated" | "host";
28
+ /**
29
+ * Additional IPv4 CIDR blocks to associate with the VPC
30
+ * These will be associated after VPC creation
31
+ */
32
+ additionalCidrBlocks?: string[];
33
+ /**
34
+ * IPv6 CIDR block configuration
35
+ */
36
+ ipv6Config?: {
37
+ /**
38
+ * Whether to assign an Amazon-provided IPv6 CIDR block
39
+ */
40
+ amazonProvidedIpv6CidrBlock?: boolean;
41
+ /**
42
+ * The ID of an IPv6 address pool from which to allocate the IPv6 CIDR block
43
+ */
44
+ ipv6Pool?: string;
45
+ /**
46
+ * The netmask length of the IPv6 CIDR block
47
+ * @default 56
48
+ */
49
+ ipv6CidrBlockNetworkBorderGroup?: string;
50
+ };
51
+ /**
52
+ * Tags to apply to the VPC
53
+ */
54
+ tags?: Record<string, string>;
55
+ /**
56
+ * Timeout configuration for VPC operations
57
+ * @default VPC-specific sensible defaults (60 attempts, 2000ms delay)
58
+ */
59
+ timeout?: Partial<TimeoutConfig>;
60
+ }
61
+ /**
62
+ * Output returned after VPC creation/update
63
+ */
64
+ export interface Vpc extends Resource<"aws::Vpc">, VpcProps {
65
+ /**
66
+ * The ID of the VPC
67
+ */
68
+ vpcId: string;
69
+ /**
70
+ * The current state of the VPC
71
+ */
72
+ state: "pending" | "available";
73
+ /**
74
+ * Whether the VPC is the default VPC
75
+ */
76
+ isDefault: boolean;
77
+ /**
78
+ * The ID of the set of DHCP options associated with the VPC
79
+ */
80
+ dhcpOptionsId: string;
81
+ /**
82
+ * Information about the IPv4 CIDR blocks associated with the VPC
83
+ */
84
+ cidrBlockAssociationSet?: Array<{
85
+ associationId: string;
86
+ cidrBlock: string;
87
+ cidrBlockState: {
88
+ state: "associating" | "associated" | "disassociating" | "disassociated" | "failing" | "failed";
89
+ statusMessage?: string;
90
+ };
91
+ }>;
92
+ /**
93
+ * Information about the IPv6 CIDR blocks associated with the VPC
94
+ */
95
+ ipv6CidrBlockAssociationSet?: Array<{
96
+ associationId: string;
97
+ ipv6CidrBlock: string;
98
+ ipv6CidrBlockState: {
99
+ state: "associating" | "associated" | "disassociating" | "disassociated" | "failing" | "failed";
100
+ statusMessage?: string;
101
+ };
102
+ networkBorderGroup?: string;
103
+ ipv6Pool?: string;
104
+ }>;
105
+ /**
106
+ * The ID of the AWS account that owns the VPC
107
+ */
108
+ ownerId?: string;
109
+ }
110
+ /**
111
+ * AWS VPC (Virtual Private Cloud) Resource
112
+ *
113
+ * Creates and manages Amazon VPC instances with configurable CIDR blocks,
114
+ * DNS settings, and instance tenancy options.
115
+ *
116
+ * @example
117
+ * // Create a basic VPC with default settings
118
+ * const vpc = await Vpc("main-vpc", {
119
+ * cidrBlock: "10.0.0.0/16",
120
+ * tags: {
121
+ * Name: "main-vpc",
122
+ * Environment: "production"
123
+ * }
124
+ * });
125
+ *
126
+ * @example
127
+ * // Create a VPC with custom DNS settings
128
+ * const vpc = await Vpc("custom-vpc", {
129
+ * cidrBlock: "172.16.0.0/16",
130
+ * enableDnsSupport: true,
131
+ * enableDnsHostnames: true,
132
+ * instanceTenancy: "default",
133
+ * tags: {
134
+ * Name: "custom-vpc"
135
+ * }
136
+ * });
137
+ *
138
+ * @example
139
+ * // Create a VPC with dedicated tenancy and custom timeout
140
+ * const dedicatedVpc = await Vpc("dedicated-vpc", {
141
+ * cidrBlock: "192.168.0.0/16",
142
+ * instanceTenancy: "dedicated",
143
+ * enableDnsSupport: false,
144
+ * enableDnsHostnames: false,
145
+ * timeout: {
146
+ * maxAttempts: 90,
147
+ * delayMs: 3000
148
+ * },
149
+ * tags: {
150
+ * Name: "dedicated-vpc",
151
+ * Type: "isolated"
152
+ * }
153
+ * });
154
+ */
155
+ export declare const Vpc: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<Vpc>, _id: string, props: VpcProps) => Promise<Vpc>);
156
+ /**
157
+ * VPC timeout constants
158
+ */
159
+ export declare const VPC_TIMEOUT: TimeoutConfig;
160
+ //# sourceMappingURL=vpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vpc.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/vpc.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IAEnD;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,EAAE;QACX;;WAEG;QACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;QACtC;;WAEG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;WAGG;QACH,+BAA+B,CAAC,EAAE,MAAM,CAAC;KAC1C,CAAC;IAEF;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,GAAI,SAAQ,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ;IACzD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC;IAE/B;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,uBAAuB,CAAC,EAAE,KAAK,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE;YACd,KAAK,EACD,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,QAAQ,CAAC;YACb,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC,CAAC;IAEH;;OAEG;IACH,2BAA2B,CAAC,EAAE,KAAK,CAAC;QAClC,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,kBAAkB,EAAE;YAClB,KAAK,EACD,aAAa,GACb,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,QAAQ,CAAC;YACb,aAAa,CAAC,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IAEH;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,eAAO,MAAM,GAAG,yFAGN,OAAO,CAAC,GAAG,CAAC,OACb,MAAM,SACJ,QAAQ,KACd,OAAO,CAAC,GAAG,CAAC,CAwJhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,aAGzB,CAAC"}