alchemy 0.54.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 (91) hide show
  1. package/lib/aws/ec2/index.d.ts +10 -0
  2. package/lib/aws/ec2/index.d.ts.map +1 -0
  3. package/lib/aws/ec2/index.js +10 -0
  4. package/lib/aws/ec2/index.js.map +1 -0
  5. package/lib/aws/ec2/internet-gateway-attachment.d.ts +150 -0
  6. package/lib/aws/ec2/internet-gateway-attachment.d.ts.map +1 -0
  7. package/lib/aws/ec2/internet-gateway-attachment.js +248 -0
  8. package/lib/aws/ec2/internet-gateway-attachment.js.map +1 -0
  9. package/lib/aws/ec2/internet-gateway.d.ts +132 -0
  10. package/lib/aws/ec2/internet-gateway.d.ts.map +1 -0
  11. package/lib/aws/ec2/internet-gateway.js +311 -0
  12. package/lib/aws/ec2/internet-gateway.js.map +1 -0
  13. package/lib/aws/ec2/nat-gateway.d.ts +145 -0
  14. package/lib/aws/ec2/nat-gateway.d.ts.map +1 -0
  15. package/lib/aws/ec2/nat-gateway.js +618 -0
  16. package/lib/aws/ec2/nat-gateway.js.map +1 -0
  17. package/lib/aws/ec2/route-table-association.d.ts +134 -0
  18. package/lib/aws/ec2/route-table-association.d.ts.map +1 -0
  19. package/lib/aws/ec2/route-table-association.js +364 -0
  20. package/lib/aws/ec2/route-table-association.js.map +1 -0
  21. package/lib/aws/ec2/route-table.d.ts +94 -0
  22. package/lib/aws/ec2/route-table.d.ts.map +1 -0
  23. package/lib/aws/ec2/route-table.js +253 -0
  24. package/lib/aws/ec2/route-table.js.map +1 -0
  25. package/lib/aws/ec2/route.d.ts +130 -0
  26. package/lib/aws/ec2/route.d.ts.map +1 -0
  27. package/lib/aws/ec2/route.js +253 -0
  28. package/lib/aws/ec2/route.js.map +1 -0
  29. package/lib/aws/ec2/security-group-rule.d.ts +84 -0
  30. package/lib/aws/ec2/security-group-rule.d.ts.map +1 -0
  31. package/lib/aws/ec2/security-group-rule.js +123 -0
  32. package/lib/aws/ec2/security-group-rule.js.map +1 -0
  33. package/lib/aws/ec2/security-group.d.ts +84 -0
  34. package/lib/aws/ec2/security-group.d.ts.map +1 -0
  35. package/lib/aws/ec2/security-group.js +207 -0
  36. package/lib/aws/ec2/security-group.js.map +1 -0
  37. package/lib/aws/ec2/subnet.d.ts +110 -0
  38. package/lib/aws/ec2/subnet.d.ts.map +1 -0
  39. package/lib/aws/ec2/subnet.js +336 -0
  40. package/lib/aws/ec2/subnet.js.map +1 -0
  41. package/lib/aws/ec2/utils.d.ts +15 -0
  42. package/lib/aws/ec2/utils.d.ts.map +1 -0
  43. package/lib/aws/ec2/utils.js +79 -0
  44. package/lib/aws/ec2/utils.js.map +1 -0
  45. package/lib/aws/ec2/vpc.d.ts +160 -0
  46. package/lib/aws/ec2/vpc.d.ts.map +1 -0
  47. package/lib/aws/ec2/vpc.js +453 -0
  48. package/lib/aws/ec2/vpc.js.map +1 -0
  49. package/lib/aws/index.d.ts +7 -0
  50. package/lib/aws/index.d.ts.map +1 -1
  51. package/lib/aws/index.js +8 -0
  52. package/lib/aws/index.js.map +1 -1
  53. package/lib/aws/utils.d.ts +25 -0
  54. package/lib/aws/utils.d.ts.map +1 -0
  55. package/lib/aws/utils.js +89 -0
  56. package/lib/aws/utils.js.map +1 -0
  57. package/lib/build-date.d.ts +6 -0
  58. package/lib/build-date.d.ts.map +1 -0
  59. package/lib/build-date.js +8 -0
  60. package/lib/build-date.js.map +1 -0
  61. package/lib/util/params.d.ts +5 -0
  62. package/lib/util/params.d.ts.map +1 -0
  63. package/lib/util/params.js +30 -0
  64. package/lib/util/params.js.map +1 -0
  65. package/lib/util/timeout.d.ts +31 -0
  66. package/lib/util/timeout.d.ts.map +1 -0
  67. package/lib/util/timeout.js +109 -0
  68. package/lib/util/timeout.js.map +1 -0
  69. package/lib/util/xml.d.ts +5 -0
  70. package/lib/util/xml.d.ts.map +1 -0
  71. package/lib/util/xml.js +8 -0
  72. package/lib/util/xml.js.map +1 -0
  73. package/package.json +3 -1
  74. package/src/aws/ec2/index.ts +9 -0
  75. package/src/aws/ec2/internet-gateway-attachment.ts +468 -0
  76. package/src/aws/ec2/internet-gateway.ts +557 -0
  77. package/src/aws/ec2/nat-gateway.ts +1123 -0
  78. package/src/aws/ec2/route-table-association.ts +747 -0
  79. package/src/aws/ec2/route-table.ts +452 -0
  80. package/src/aws/ec2/route.ts +447 -0
  81. package/src/aws/ec2/security-group-rule.ts +229 -0
  82. package/src/aws/ec2/security-group.ts +418 -0
  83. package/src/aws/ec2/subnet.ts +625 -0
  84. package/src/aws/ec2/utils.ts +102 -0
  85. package/src/aws/ec2/vpc.ts +969 -0
  86. package/src/aws/index.ts +9 -0
  87. package/src/aws/utils.ts +137 -0
  88. package/src/build-date.ts +8 -0
  89. package/src/util/params.ts +33 -0
  90. package/src/util/timeout.ts +178 -0
  91. package/src/util/xml.ts +7 -0
@@ -0,0 +1,618 @@
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 { callEC2Api, createEC2Client } from "./utils.js";
7
+ /**
8
+ * AWS NAT Gateway Resource
9
+ *
10
+ * Creates and manages NAT Gateways that provide outbound internet access
11
+ * for instances in private subnets. Automatically allocates an Elastic IP
12
+ * if one is not provided. NAT Gateways are slow resources that can take
13
+ * up to 10 minutes to become available.
14
+ *
15
+ * @example
16
+ * // Create a NAT Gateway with automatic Elastic IP allocation
17
+ * const natGateway = await NatGateway("main-nat", {
18
+ * subnet: publicSubnet,
19
+ * tags: {
20
+ * Name: "main-nat-gateway",
21
+ * Environment: "production"
22
+ * }
23
+ * });
24
+ *
25
+ * @example
26
+ * // Create a NAT Gateway with existing Elastic IP
27
+ * const natGateway = await NatGateway("custom-nat", {
28
+ * subnet: "subnet-12345678",
29
+ * allocationId: "eipalloc-12345678",
30
+ * connectivityType: "public",
31
+ * tags: {
32
+ * Name: "custom-nat-gateway"
33
+ * }
34
+ * });
35
+ *
36
+ * @example
37
+ * // Create a private NAT Gateway (for VPC-to-VPC communication)
38
+ * const privateNat = await NatGateway("private-nat", {
39
+ * subnet: privateSubnet,
40
+ * connectivityType: "private",
41
+ * tags: {
42
+ * Name: "private-nat-gateway",
43
+ * Type: "internal"
44
+ * }
45
+ * });
46
+ *
47
+ * @example
48
+ * // Create a NAT Gateway with custom timeout configuration
49
+ * const slowNat = await NatGateway("slow-nat", {
50
+ * subnet: publicSubnet,
51
+ * timeout: {
52
+ * maxAttempts: 180, // Wait up to 15 minutes
53
+ * delayMs: 5000 // Check every 5 seconds
54
+ * },
55
+ * tags: {
56
+ * Name: "slow-nat-gateway"
57
+ * }
58
+ * });
59
+ *
60
+ * @example
61
+ * // Use NAT Gateway in route table for private subnet internet access
62
+ * const privateRoute = await Route("private-internet", {
63
+ * routeTable: privateRouteTable,
64
+ * destinationCidrBlock: "0.0.0.0/0",
65
+ * natGateway: natGateway,
66
+ * tags: {
67
+ * Name: "private-to-internet"
68
+ * }
69
+ * });
70
+ */
71
+ export const NatGateway = Resource("aws::NatGateway", async function (_id, props) {
72
+ const subnetId = typeof props.subnet === "string" ? props.subnet : props.subnet.subnetId;
73
+ const timeoutConfig = mergeTimeoutConfig(NAT_GATEWAY_TIMEOUT, props.timeout);
74
+ if (this.phase === "delete") {
75
+ if (this.output?.natGatewayId) {
76
+ logger.log(`🗑️ Deleting NAT Gateway: ${this.output.natGatewayId}`);
77
+ // Delete NAT Gateway if it exists
78
+ await ignore("InvalidNatGatewayID.NotFound", async () => {
79
+ const client = await createEC2Client();
80
+ await callEC2Api(client, "DeleteNatGateway", parseNatGatewayXmlResponse, convertDeleteNatGatewayParamsToAwsFormat({
81
+ NatGatewayId: this.output.natGatewayId,
82
+ }));
83
+ });
84
+ // Wait for NAT Gateway to be deleted AND network interfaces to be cleaned up
85
+ logger.log(` Waiting for NAT Gateway ${this.output.natGatewayId} to be fully deleted...`);
86
+ await waitForNatGatewayFullyDeleted(this.output.natGatewayId, timeoutConfig);
87
+ logger.log(` ✅ NAT Gateway ${this.output.natGatewayId} deletion completed`);
88
+ // Release Elastic IP if we created it and it exists
89
+ if (this.output.createdElasticIp && this.output.allocationId) {
90
+ logger.log(` Releasing Elastic IP: ${this.output.allocationId}`);
91
+ await ignore(["InvalidAllocationID.NotFound", "InvalidAddress.NotFound"], async () => {
92
+ const eipClient = await createEC2Client();
93
+ await callEC2Api(eipClient, "ReleaseAddress", parseNatGatewayXmlResponse, convertReleaseAddressParamsToAwsFormat({
94
+ AllocationId: this.output.allocationId,
95
+ }));
96
+ });
97
+ // Wait for the EIP to be fully released
98
+ await waitForEipReleased(this.output.allocationId, timeoutConfig);
99
+ logger.log(` ✅ Elastic IP ${this.output.allocationId} released successfully`);
100
+ }
101
+ }
102
+ return this.destroy();
103
+ }
104
+ let natGateway;
105
+ let allocationId = props.allocationId;
106
+ let createdElasticIp = false;
107
+ let publicIp;
108
+ if (this.phase === "update" && this.output?.natGatewayId) {
109
+ // Get existing NAT Gateway
110
+ const client = await createEC2Client();
111
+ const response = await callEC2Api(client, "DescribeNatGateways", parseNatGatewayXmlResponse, convertDescribeNatGatewaysParamsToAwsFormat({
112
+ NatGatewayIds: [this.output.natGatewayId],
113
+ }));
114
+ if (!response.NatGateways?.[0]) {
115
+ throw new Error(`NAT Gateway ${this.output.natGatewayId} not found`);
116
+ }
117
+ natGateway = response.NatGateways[0];
118
+ allocationId = this.output.allocationId;
119
+ createdElasticIp = this.output.createdElasticIp;
120
+ publicIp = this.output.publicIp;
121
+ }
122
+ else {
123
+ // Allocate Elastic IP if not provided
124
+ if (!allocationId) {
125
+ const eipParams = {
126
+ Domain: "vpc",
127
+ };
128
+ // Add tags if specified
129
+ if (props.tags) {
130
+ eipParams.TagSpecifications = [
131
+ {
132
+ ResourceType: "elastic-ip",
133
+ Tags: Object.entries(props.tags).map(([key, value]) => ({
134
+ Key: `${key}-eip`,
135
+ Value: value,
136
+ })),
137
+ },
138
+ ];
139
+ }
140
+ const client = await createEC2Client();
141
+ const eipResponse = await callEC2Api(client, "AllocateAddress", parseNatGatewayXmlResponse, convertAllocateAddressParamsToAwsFormat(eipParams));
142
+ if (!eipResponse.AllocationId) {
143
+ throw new Error("Failed to allocate Elastic IP");
144
+ }
145
+ allocationId = eipResponse.AllocationId;
146
+ publicIp = eipResponse.PublicIp;
147
+ createdElasticIp = true;
148
+ }
149
+ else {
150
+ // Get public IP of existing allocation
151
+ const client = await createEC2Client();
152
+ const addressResponse = await callEC2Api(client, "DescribeAddresses", parseNatGatewayXmlResponse, convertDescribeAddressesParamsToAwsFormat({
153
+ AllocationIds: [allocationId],
154
+ }));
155
+ publicIp = addressResponse.Addresses?.[0]?.PublicIp;
156
+ }
157
+ // Create NAT Gateway
158
+ const createParams = {
159
+ SubnetId: subnetId,
160
+ AllocationId: allocationId,
161
+ ConnectivityType: props.connectivityType || "public",
162
+ };
163
+ // Add tags if specified
164
+ if (props.tags) {
165
+ createParams.TagSpecifications = [
166
+ {
167
+ ResourceType: "natgateway",
168
+ Tags: Object.entries(props.tags).map(([key, value]) => ({
169
+ Key: key,
170
+ Value: value,
171
+ })),
172
+ },
173
+ ];
174
+ }
175
+ const natClient = await createEC2Client();
176
+ const response = await callEC2Api(natClient, "CreateNatGateway", parseNatGatewayXmlResponse, convertCreateNatGatewayParamsToAwsFormat(createParams));
177
+ if (!response.NatGateway) {
178
+ throw new Error("Failed to create NAT Gateway");
179
+ }
180
+ natGateway = response.NatGateway;
181
+ // Wait for NAT Gateway to be available
182
+ await waitForNatGatewayAvailable(natGateway.NatGatewayId, timeoutConfig);
183
+ }
184
+ const result = this({
185
+ natGatewayId: natGateway.NatGatewayId,
186
+ subnetId: natGateway.SubnetId,
187
+ vpcId: natGateway.VpcId,
188
+ state: natGateway.State,
189
+ allocationId: allocationId,
190
+ publicIp,
191
+ privateIp: natGateway.NatGatewayAddresses?.[0]?.PrivateIp,
192
+ createdElasticIp,
193
+ ...props,
194
+ subnet: subnetId,
195
+ });
196
+ return result;
197
+ });
198
+ /**
199
+ * Wait for NAT Gateway to be in available state
200
+ */
201
+ async function waitForNatGatewayAvailable(natGatewayId, timeoutConfig) {
202
+ const checkFunction = async () => {
203
+ const client = await createEC2Client();
204
+ const response = await callEC2Api(client, "DescribeNatGateways", parseNatGatewayXmlResponse, convertDescribeNatGatewaysParamsToAwsFormat({
205
+ NatGatewayIds: [natGatewayId],
206
+ }));
207
+ return response.NatGateways?.[0];
208
+ };
209
+ const isReady = (natGateway) => {
210
+ // Check for non-retryable failure states
211
+ if (natGateway?.State === "failed") {
212
+ throw new NatGatewayNonRetryableError(`NAT Gateway ${natGatewayId} failed to create`);
213
+ }
214
+ return natGateway?.State === "available";
215
+ };
216
+ await waitForResourceState(checkFunction, isReady, timeoutConfig, natGatewayId, "NAT Gateway", "is now available");
217
+ }
218
+ /**
219
+ * Wait for NAT Gateway to be deleted
220
+ */
221
+ async function waitForNatGatewayDeleted(natGatewayId, timeoutConfig) {
222
+ const checkFunction = async () => {
223
+ try {
224
+ const client = await createEC2Client();
225
+ const response = await callEC2Api(client, "DescribeNatGateways", parseNatGatewayXmlResponse, convertDescribeNatGatewaysParamsToAwsFormat({
226
+ NatGatewayIds: [natGatewayId],
227
+ }));
228
+ return response.NatGateways?.[0];
229
+ }
230
+ catch (error) {
231
+ // If NAT Gateway is not found, it's been deleted - return undefined
232
+ if (error.code === "InvalidNatGatewayID.NotFound" ||
233
+ error.code === "InvalidNatGateway.NotFound" ||
234
+ error.code === "NatGatewayNotFound") {
235
+ return undefined;
236
+ }
237
+ throw error;
238
+ }
239
+ };
240
+ const isReady = (natGateway) => {
241
+ // NAT Gateway is deleted if it doesn't exist or is in deleted state
242
+ return !natGateway || natGateway.State === "deleted";
243
+ };
244
+ await waitForResourceState(checkFunction, isReady, timeoutConfig, natGatewayId, "NAT Gateway", "deletion completed");
245
+ }
246
+ /**
247
+ * Parse XML response for DescribeNetworkInterfaces
248
+ */
249
+ function parseDescribeNetworkInterfacesResponse(xmlText) {
250
+ const parser = new XMLParser({
251
+ ignoreAttributes: true,
252
+ parseAttributeValue: true,
253
+ parseTagValue: true,
254
+ trimValues: true,
255
+ });
256
+ const parsed = parser.parse(xmlText);
257
+ const result = { NetworkInterfaces: [] };
258
+ if (parsed.DescribeNetworkInterfacesResponse) {
259
+ const networkInterfaceSet = parsed.DescribeNetworkInterfacesResponse.networkInterfaceSet;
260
+ if (networkInterfaceSet?.item) {
261
+ const items = Array.isArray(networkInterfaceSet.item)
262
+ ? networkInterfaceSet.item
263
+ : [networkInterfaceSet.item];
264
+ result.NetworkInterfaces = items.map((item) => ({
265
+ NetworkInterfaceId: item.networkInterfaceId,
266
+ Description: item.description,
267
+ Status: item.status,
268
+ }));
269
+ }
270
+ }
271
+ return result;
272
+ }
273
+ /**
274
+ * Wait for an Elastic IP to be released.
275
+ */
276
+ async function waitForEipReleased(allocationId, timeoutConfig) {
277
+ const checkFunction = async () => {
278
+ try {
279
+ const eipClient = await createEC2Client();
280
+ const addressResponse = await callEC2Api(eipClient, "DescribeAddresses", parseNatGatewayXmlResponse, convertDescribeAddressesParamsToAwsFormat({
281
+ AllocationIds: [allocationId],
282
+ }));
283
+ return addressResponse.Addresses?.[0];
284
+ }
285
+ catch (error) {
286
+ if (error.code === "InvalidAllocationID.NotFound" ||
287
+ error.code === "InvalidAddress.NotFound") {
288
+ return undefined;
289
+ }
290
+ throw error;
291
+ }
292
+ };
293
+ const isReady = (address) => {
294
+ return !address;
295
+ };
296
+ await waitForResourceState(checkFunction, isReady, timeoutConfig, allocationId, "Elastic IP", "to be released");
297
+ }
298
+ /**
299
+ * Wait for NAT Gateway to be fully deleted including network interface cleanup
300
+ */
301
+ async function waitForNatGatewayFullyDeleted(natGatewayId, timeoutConfig) {
302
+ // First wait for the NAT Gateway itself to be deleted
303
+ await waitForNatGatewayDeleted(natGatewayId, timeoutConfig);
304
+ // Then wait for network interfaces to be cleaned up
305
+ const checkNetworkInterfaces = async () => {
306
+ try {
307
+ const client = await createEC2Client();
308
+ const response = await callEC2Api(client, "DescribeNetworkInterfaces", parseDescribeNetworkInterfacesResponse, {
309
+ "Filter.1.Name": "description",
310
+ "Filter.1.Value.1": `Interface for NAT Gateway ${natGatewayId}`,
311
+ });
312
+ return response.NetworkInterfaces || [];
313
+ }
314
+ catch (error) {
315
+ // If we can't check network interfaces, assume cleanup is complete
316
+ logger.log(` Could not check network interfaces for NAT Gateway ${natGatewayId}, assuming cleanup complete`, error);
317
+ return [];
318
+ }
319
+ };
320
+ const isNetworkInterfacesCleanedUp = (networkInterfaces) => {
321
+ if (networkInterfaces.length > 0) {
322
+ logger.log(` NAT Gateway ${natGatewayId} still has ${networkInterfaces.length} network interfaces, waiting for cleanup...`);
323
+ return false;
324
+ }
325
+ return true;
326
+ };
327
+ await waitForResourceState(checkNetworkInterfaces, isNetworkInterfacesCleanedUp, timeoutConfig, natGatewayId, "NAT Gateway network interfaces", "cleanup completed");
328
+ }
329
+ /**
330
+ * Non-retryable error for NAT Gateway operations
331
+ */
332
+ export class NatGatewayNonRetryableError extends Error {
333
+ constructor(message) {
334
+ super(message);
335
+ this.name = "NatGatewayNonRetryableError";
336
+ }
337
+ }
338
+ /**
339
+ * NAT Gateway timeout constants
340
+ */
341
+ export const NAT_GATEWAY_TIMEOUT = {
342
+ maxAttempts: 120, // NAT Gateways are slow resources - can take up to 10 minutes
343
+ delayMs: 5000, // Check every 5 seconds
344
+ };
345
+ /**
346
+ * Parse XML responses specifically for NAT Gateway operations
347
+ */
348
+ function parseNatGatewayXmlResponse(xmlText) {
349
+ const parser = new XMLParser({
350
+ ignoreAttributes: true,
351
+ parseAttributeValue: true,
352
+ parseTagValue: true,
353
+ trimValues: true,
354
+ });
355
+ const parsed = parser.parse(xmlText);
356
+ const result = {};
357
+ // Parse CreateNatGatewayResponse
358
+ if (parsed.CreateNatGatewayResponse) {
359
+ const natGateway = parsed.CreateNatGatewayResponse
360
+ .natGateway;
361
+ if (natGateway) {
362
+ const addresses = natGateway.natGatewayAddressSet?.item
363
+ ? Array.isArray(natGateway.natGatewayAddressSet.item)
364
+ ? natGateway.natGatewayAddressSet.item
365
+ : [natGateway.natGatewayAddressSet.item]
366
+ : [];
367
+ const tags = natGateway.tagSet?.item
368
+ ? Array.isArray(natGateway.tagSet.item)
369
+ ? natGateway.tagSet.item
370
+ : [natGateway.tagSet.item]
371
+ : [];
372
+ result.NatGateway = {
373
+ NatGatewayId: natGateway.natGatewayId,
374
+ SubnetId: natGateway.subnetId,
375
+ VpcId: natGateway.vpcId,
376
+ State: natGateway.state,
377
+ ConnectivityType: natGateway.connectivityType,
378
+ NatGatewayAddresses: addresses.map((address) => ({
379
+ AllocationId: address.allocationId,
380
+ NetworkInterfaceId: address.networkInterfaceId,
381
+ PrivateIp: address.privateIp,
382
+ PublicIp: address.publicIp,
383
+ })),
384
+ Tags: tags.map((tag) => ({
385
+ Key: tag.key,
386
+ Value: tag.value,
387
+ })),
388
+ CreateTime: natGateway.createTime,
389
+ DeleteTime: natGateway.deleteTime,
390
+ FailureCode: natGateway.failureCode,
391
+ FailureMessage: natGateway.failureMessage,
392
+ };
393
+ }
394
+ }
395
+ // Parse DescribeNatGatewaysResponse
396
+ if (parsed.DescribeNatGatewaysResponse) {
397
+ const natGatewaySet = parsed.DescribeNatGatewaysResponse.natGatewaySet;
398
+ if (natGatewaySet?.item) {
399
+ const natGateways = Array.isArray(natGatewaySet.item)
400
+ ? natGatewaySet.item
401
+ : [natGatewaySet.item];
402
+ result.NatGateways = natGateways.map((natGateway) => {
403
+ const addresses = natGateway.natGatewayAddressSet?.item
404
+ ? Array.isArray(natGateway.natGatewayAddressSet.item)
405
+ ? natGateway.natGatewayAddressSet.item
406
+ : [natGateway.natGatewayAddressSet.item]
407
+ : [];
408
+ const tags = natGateway.tagSet?.item
409
+ ? Array.isArray(natGateway.tagSet.item)
410
+ ? natGateway.tagSet.item
411
+ : [natGateway.tagSet.item]
412
+ : [];
413
+ return {
414
+ NatGatewayId: natGateway.natGatewayId,
415
+ SubnetId: natGateway.subnetId,
416
+ VpcId: natGateway.vpcId,
417
+ State: natGateway.state,
418
+ ConnectivityType: natGateway.connectivityType,
419
+ NatGatewayAddresses: addresses.map((address) => ({
420
+ AllocationId: address.allocationId,
421
+ NetworkInterfaceId: address.networkInterfaceId,
422
+ PrivateIp: address.privateIp,
423
+ PublicIp: address.publicIp,
424
+ })),
425
+ Tags: tags.map((tag) => ({
426
+ Key: tag.key,
427
+ Value: tag.value,
428
+ })),
429
+ CreateTime: natGateway.createTime,
430
+ DeleteTime: natGateway.deleteTime,
431
+ FailureCode: natGateway.failureCode,
432
+ FailureMessage: natGateway.failureMessage,
433
+ };
434
+ });
435
+ }
436
+ else {
437
+ result.NatGateways = [];
438
+ }
439
+ }
440
+ // Parse AllocateAddressResponse (for EIP allocation)
441
+ if (parsed.AllocateAddressResponse) {
442
+ result.AllocationId = parsed.AllocateAddressResponse.allocationId;
443
+ result.PublicIp = parsed.AllocateAddressResponse.publicIp;
444
+ }
445
+ // Parse DescribeAddressesResponse (for EIP lookup)
446
+ if (parsed.DescribeAddressesResponse) {
447
+ const addressesSet = parsed.DescribeAddressesResponse.addressesSet;
448
+ if (addressesSet?.item) {
449
+ const addresses = Array.isArray(addressesSet.item)
450
+ ? addressesSet.item
451
+ : [addressesSet.item];
452
+ result.Addresses = addresses.map((address) => ({
453
+ AllocationId: address.allocationId,
454
+ PublicIp: address.publicIp,
455
+ PrivateIpAddress: address.privateIpAddress,
456
+ Domain: address.domain,
457
+ }));
458
+ }
459
+ else {
460
+ result.Addresses = [];
461
+ }
462
+ }
463
+ // Handle success responses
464
+ if (parsed.DeleteNatGatewayResponse || parsed.ReleaseAddressResponse) {
465
+ result.success = true;
466
+ }
467
+ return result;
468
+ }
469
+ /**
470
+ * Helper functions to convert typed parameters to AWS API format
471
+ */
472
+ function convertCreateNatGatewayParamsToAwsFormat(params) {
473
+ const awsParams = {
474
+ SubnetId: params.SubnetId,
475
+ };
476
+ if (params.AllocationId !== undefined) {
477
+ awsParams.AllocationId = params.AllocationId;
478
+ }
479
+ if (params.ConnectivityType !== undefined) {
480
+ awsParams.ConnectivityType = params.ConnectivityType;
481
+ }
482
+ if (params.DryRun !== undefined) {
483
+ awsParams.DryRun = params.DryRun.toString();
484
+ }
485
+ if (params.ClientToken !== undefined) {
486
+ awsParams.ClientToken = params.ClientToken;
487
+ }
488
+ // Handle TagSpecifications
489
+ if (params.TagSpecifications) {
490
+ params.TagSpecifications.forEach((tagSpec, specIndex) => {
491
+ const specNum = specIndex + 1;
492
+ awsParams[`TagSpecification.${specNum}.ResourceType`] =
493
+ tagSpec.ResourceType;
494
+ tagSpec.Tags.forEach((tag, tagIndex) => {
495
+ const tagNum = tagIndex + 1;
496
+ awsParams[`TagSpecification.${specNum}.Tag.${tagNum}.Key`] = tag.Key;
497
+ awsParams[`TagSpecification.${specNum}.Tag.${tagNum}.Value`] =
498
+ tag.Value;
499
+ });
500
+ });
501
+ }
502
+ return awsParams;
503
+ }
504
+ function convertDescribeNatGatewaysParamsToAwsFormat(params) {
505
+ const awsParams = {};
506
+ if (params.NatGatewayIds) {
507
+ params.NatGatewayIds.forEach((id, index) => {
508
+ awsParams[`NatGatewayId.${index + 1}`] = id;
509
+ });
510
+ }
511
+ if (params.Filters) {
512
+ params.Filters.forEach((filter, filterIndex) => {
513
+ const filterNum = filterIndex + 1;
514
+ awsParams[`Filter.${filterNum}.Name`] = filter.Name;
515
+ filter.Values.forEach((value, valueIndex) => {
516
+ awsParams[`Filter.${filterNum}.Value.${valueIndex + 1}`] = value;
517
+ });
518
+ });
519
+ }
520
+ if (params.NextToken !== undefined) {
521
+ awsParams.NextToken = params.NextToken;
522
+ }
523
+ if (params.MaxResults !== undefined) {
524
+ awsParams.MaxResults = params.MaxResults.toString();
525
+ }
526
+ if (params.DryRun !== undefined) {
527
+ awsParams.DryRun = params.DryRun.toString();
528
+ }
529
+ return awsParams;
530
+ }
531
+ function convertDeleteNatGatewayParamsToAwsFormat(params) {
532
+ const awsParams = {
533
+ NatGatewayId: params.NatGatewayId,
534
+ };
535
+ if (params.DryRun !== undefined) {
536
+ awsParams.DryRun = params.DryRun.toString();
537
+ }
538
+ return awsParams;
539
+ }
540
+ function convertAllocateAddressParamsToAwsFormat(params) {
541
+ const awsParams = {};
542
+ if (params.Domain !== undefined) {
543
+ awsParams.Domain = params.Domain;
544
+ }
545
+ if (params.Address !== undefined) {
546
+ awsParams.Address = params.Address;
547
+ }
548
+ if (params.PublicIpv4Pool !== undefined) {
549
+ awsParams.PublicIpv4Pool = params.PublicIpv4Pool;
550
+ }
551
+ if (params.NetworkBorderGroup !== undefined) {
552
+ awsParams.NetworkBorderGroup = params.NetworkBorderGroup;
553
+ }
554
+ if (params.CustomerOwnedIpv4Pool !== undefined) {
555
+ awsParams.CustomerOwnedIpv4Pool = params.CustomerOwnedIpv4Pool;
556
+ }
557
+ if (params.DryRun !== undefined) {
558
+ awsParams.DryRun = params.DryRun.toString();
559
+ }
560
+ // Handle TagSpecifications
561
+ if (params.TagSpecifications) {
562
+ params.TagSpecifications.forEach((tagSpec, specIndex) => {
563
+ const specNum = specIndex + 1;
564
+ awsParams[`TagSpecification.${specNum}.ResourceType`] =
565
+ tagSpec.ResourceType;
566
+ tagSpec.Tags.forEach((tag, tagIndex) => {
567
+ const tagNum = tagIndex + 1;
568
+ awsParams[`TagSpecification.${specNum}.Tag.${tagNum}.Key`] = tag.Key;
569
+ awsParams[`TagSpecification.${specNum}.Tag.${tagNum}.Value`] =
570
+ tag.Value;
571
+ });
572
+ });
573
+ }
574
+ return awsParams;
575
+ }
576
+ function convertDescribeAddressesParamsToAwsFormat(params) {
577
+ const awsParams = {};
578
+ if (params.AllocationIds) {
579
+ params.AllocationIds.forEach((id, index) => {
580
+ awsParams[`AllocationId.${index + 1}`] = id;
581
+ });
582
+ }
583
+ if (params.PublicIps) {
584
+ params.PublicIps.forEach((ip, index) => {
585
+ awsParams[`PublicIp.${index + 1}`] = ip;
586
+ });
587
+ }
588
+ if (params.Filters) {
589
+ params.Filters.forEach((filter, filterIndex) => {
590
+ const filterNum = filterIndex + 1;
591
+ awsParams[`Filter.${filterNum}.Name`] = filter.Name;
592
+ filter.Values.forEach((value, valueIndex) => {
593
+ awsParams[`Filter.${filterNum}.Value.${valueIndex + 1}`] = value;
594
+ });
595
+ });
596
+ }
597
+ if (params.DryRun !== undefined) {
598
+ awsParams.DryRun = params.DryRun.toString();
599
+ }
600
+ return awsParams;
601
+ }
602
+ function convertReleaseAddressParamsToAwsFormat(params) {
603
+ const awsParams = {};
604
+ if (params.AllocationId !== undefined) {
605
+ awsParams.AllocationId = params.AllocationId;
606
+ }
607
+ if (params.PublicIp !== undefined) {
608
+ awsParams.PublicIp = params.PublicIp;
609
+ }
610
+ if (params.NetworkBorderGroup !== undefined) {
611
+ awsParams.NetworkBorderGroup = params.NetworkBorderGroup;
612
+ }
613
+ if (params.DryRun !== undefined) {
614
+ awsParams.DryRun = params.DryRun.toString();
615
+ }
616
+ return awsParams;
617
+ }
618
+ //# sourceMappingURL=nat-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nat-gateway.js","sourceRoot":"","sources":["../../../src/aws/ec2/nat-gateway.ts"],"names":[],"mappings":"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"}