alchemy-effect 0.4.0 → 0.6.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 (251) hide show
  1. package/README.md +13 -7
  2. package/bin/alchemy-effect.js +307 -266
  3. package/bin/alchemy-effect.js.map +1 -1
  4. package/lib/apply.d.ts.map +1 -1
  5. package/lib/apply.js +253 -246
  6. package/lib/apply.js.map +1 -1
  7. package/lib/aws/client.d.ts.map +1 -1
  8. package/lib/aws/client.js +15 -2
  9. package/lib/aws/client.js.map +1 -1
  10. package/lib/aws/dynamodb/secondary-index.d.ts.map +1 -1
  11. package/lib/aws/dynamodb/table.d.ts.map +1 -1
  12. package/lib/aws/dynamodb/table.js.map +1 -1
  13. package/lib/aws/dynamodb/table.provider.d.ts.map +1 -1
  14. package/lib/aws/dynamodb/table.provider.js +10 -2
  15. package/lib/aws/dynamodb/table.provider.js.map +1 -1
  16. package/lib/aws/ec2/egress-only-igw.d.ts +55 -0
  17. package/lib/aws/ec2/egress-only-igw.d.ts.map +1 -0
  18. package/lib/aws/ec2/egress-only-igw.js +4 -0
  19. package/lib/aws/ec2/egress-only-igw.js.map +1 -0
  20. package/lib/aws/ec2/egress-only-igw.provider.d.ts +6 -0
  21. package/lib/aws/ec2/egress-only-igw.provider.d.ts.map +1 -0
  22. package/lib/aws/ec2/egress-only-igw.provider.js +114 -0
  23. package/lib/aws/ec2/egress-only-igw.provider.js.map +1 -0
  24. package/lib/aws/ec2/eip.d.ts +85 -0
  25. package/lib/aws/ec2/eip.d.ts.map +1 -0
  26. package/lib/aws/ec2/eip.js +4 -0
  27. package/lib/aws/ec2/eip.js.map +1 -0
  28. package/lib/aws/ec2/eip.provider.d.ts +6 -0
  29. package/lib/aws/ec2/eip.provider.d.ts.map +1 -0
  30. package/lib/aws/ec2/eip.provider.js +135 -0
  31. package/lib/aws/ec2/eip.provider.js.map +1 -0
  32. package/lib/aws/ec2/index.d.ts +18 -0
  33. package/lib/aws/ec2/index.d.ts.map +1 -1
  34. package/lib/aws/ec2/index.js +18 -0
  35. package/lib/aws/ec2/index.js.map +1 -1
  36. package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
  37. package/lib/aws/ec2/internet-gateway.provider.d.ts.map +1 -1
  38. package/lib/aws/ec2/internet-gateway.provider.js +9 -5
  39. package/lib/aws/ec2/internet-gateway.provider.js.map +1 -1
  40. package/lib/aws/ec2/nat-gateway.d.ts +127 -0
  41. package/lib/aws/ec2/nat-gateway.d.ts.map +1 -0
  42. package/lib/aws/ec2/nat-gateway.js +4 -0
  43. package/lib/aws/ec2/nat-gateway.js.map +1 -0
  44. package/lib/aws/ec2/nat-gateway.provider.d.ts +6 -0
  45. package/lib/aws/ec2/nat-gateway.provider.d.ts.map +1 -0
  46. package/lib/aws/ec2/nat-gateway.provider.js +222 -0
  47. package/lib/aws/ec2/nat-gateway.provider.js.map +1 -0
  48. package/lib/aws/ec2/network-acl-association.d.ts +44 -0
  49. package/lib/aws/ec2/network-acl-association.d.ts.map +1 -0
  50. package/lib/aws/ec2/network-acl-association.js +4 -0
  51. package/lib/aws/ec2/network-acl-association.js.map +1 -0
  52. package/lib/aws/ec2/network-acl-association.provider.d.ts +4 -0
  53. package/lib/aws/ec2/network-acl-association.provider.d.ts.map +1 -0
  54. package/lib/aws/ec2/network-acl-association.provider.js +115 -0
  55. package/lib/aws/ec2/network-acl-association.provider.js.map +1 -0
  56. package/lib/aws/ec2/network-acl-entry.d.ts +118 -0
  57. package/lib/aws/ec2/network-acl-entry.d.ts.map +1 -0
  58. package/lib/aws/ec2/network-acl-entry.js +3 -0
  59. package/lib/aws/ec2/network-acl-entry.js.map +1 -0
  60. package/lib/aws/ec2/network-acl-entry.provider.d.ts +4 -0
  61. package/lib/aws/ec2/network-acl-entry.provider.d.ts.map +1 -0
  62. package/lib/aws/ec2/network-acl-entry.provider.js +129 -0
  63. package/lib/aws/ec2/network-acl-entry.provider.js.map +1 -0
  64. package/lib/aws/ec2/network-acl.d.ts +82 -0
  65. package/lib/aws/ec2/network-acl.d.ts.map +1 -0
  66. package/lib/aws/ec2/network-acl.js +4 -0
  67. package/lib/aws/ec2/network-acl.js.map +1 -0
  68. package/lib/aws/ec2/network-acl.provider.d.ts +6 -0
  69. package/lib/aws/ec2/network-acl.provider.d.ts.map +1 -0
  70. package/lib/aws/ec2/network-acl.provider.js +136 -0
  71. package/lib/aws/ec2/network-acl.provider.js.map +1 -0
  72. package/lib/aws/ec2/route-table-association.d.ts.map +1 -1
  73. package/lib/aws/ec2/route-table-association.provider.d.ts.map +1 -1
  74. package/lib/aws/ec2/route-table-association.provider.js.map +1 -1
  75. package/lib/aws/ec2/route-table.d.ts.map +1 -1
  76. package/lib/aws/ec2/route-table.provider.d.ts.map +1 -1
  77. package/lib/aws/ec2/route-table.provider.js.map +1 -1
  78. package/lib/aws/ec2/route.d.ts.map +1 -1
  79. package/lib/aws/ec2/route.provider.d.ts.map +1 -1
  80. package/lib/aws/ec2/route.provider.js.map +1 -1
  81. package/lib/aws/ec2/security-group-rule.d.ts +118 -0
  82. package/lib/aws/ec2/security-group-rule.d.ts.map +1 -0
  83. package/lib/aws/ec2/security-group-rule.js +4 -0
  84. package/lib/aws/ec2/security-group-rule.js.map +1 -0
  85. package/lib/aws/ec2/security-group-rule.provider.d.ts +4 -0
  86. package/lib/aws/ec2/security-group-rule.provider.d.ts.map +1 -0
  87. package/lib/aws/ec2/security-group-rule.provider.js +193 -0
  88. package/lib/aws/ec2/security-group-rule.provider.js.map +1 -0
  89. package/lib/aws/ec2/security-group.d.ts +147 -0
  90. package/lib/aws/ec2/security-group.d.ts.map +1 -0
  91. package/lib/aws/ec2/security-group.js +4 -0
  92. package/lib/aws/ec2/security-group.js.map +1 -0
  93. package/lib/aws/ec2/security-group.provider.d.ts +6 -0
  94. package/lib/aws/ec2/security-group.provider.d.ts.map +1 -0
  95. package/lib/aws/ec2/security-group.provider.js +291 -0
  96. package/lib/aws/ec2/security-group.provider.js.map +1 -0
  97. package/lib/aws/ec2/subnet.d.ts.map +1 -1
  98. package/lib/aws/ec2/subnet.provider.d.ts.map +1 -1
  99. package/lib/aws/ec2/subnet.provider.js +33 -30
  100. package/lib/aws/ec2/subnet.provider.js.map +1 -1
  101. package/lib/aws/ec2/vpc-endpoint.d.ts +176 -0
  102. package/lib/aws/ec2/vpc-endpoint.d.ts.map +1 -0
  103. package/lib/aws/ec2/vpc-endpoint.js +4 -0
  104. package/lib/aws/ec2/vpc-endpoint.js.map +1 -0
  105. package/lib/aws/ec2/vpc-endpoint.provider.d.ts +6 -0
  106. package/lib/aws/ec2/vpc-endpoint.provider.d.ts.map +1 -0
  107. package/lib/aws/ec2/vpc-endpoint.provider.js +315 -0
  108. package/lib/aws/ec2/vpc-endpoint.provider.js.map +1 -0
  109. package/lib/aws/ec2/vpc.d.ts.map +1 -1
  110. package/lib/aws/ec2/vpc.provider.d.ts.map +1 -1
  111. package/lib/aws/ec2/vpc.provider.js +38 -32
  112. package/lib/aws/ec2/vpc.provider.js.map +1 -1
  113. package/lib/aws/index.d.ts +2 -2
  114. package/lib/aws/index.d.ts.map +1 -1
  115. package/lib/aws/index.js +1 -1
  116. package/lib/aws/index.js.map +1 -1
  117. package/lib/aws/lambda/function.d.ts.map +1 -1
  118. package/lib/aws/lambda/function.invoke.d.ts.map +1 -1
  119. package/lib/aws/lambda/function.invoke.js.map +1 -1
  120. package/lib/aws/lambda/function.js.map +1 -1
  121. package/lib/aws/lambda/function.provider.d.ts.map +1 -1
  122. package/lib/aws/lambda/function.provider.js +19 -23
  123. package/lib/aws/lambda/function.provider.js.map +1 -1
  124. package/lib/aws/sqs/queue.d.ts +1 -2
  125. package/lib/aws/sqs/queue.d.ts.map +1 -1
  126. package/lib/aws/sqs/queue.event-source.d.ts.map +1 -1
  127. package/lib/aws/sqs/queue.event-source.js +2 -2
  128. package/lib/aws/sqs/queue.event-source.js.map +1 -1
  129. package/lib/aws/sqs/queue.js.map +1 -1
  130. package/lib/aws/sqs/queue.provider.d.ts +1 -2
  131. package/lib/aws/sqs/queue.provider.d.ts.map +1 -1
  132. package/lib/aws/sqs/queue.provider.js +35 -20
  133. package/lib/aws/sqs/queue.provider.js.map +1 -1
  134. package/lib/aws/sqs/queue.send-message.d.ts.map +1 -1
  135. package/lib/aws/sqs/queue.send-message.js.map +1 -1
  136. package/lib/binding.d.ts.map +1 -1
  137. package/lib/cli/components/PlanProgress.d.ts.map +1 -1
  138. package/lib/cli/components/PlanProgress.js.map +1 -1
  139. package/lib/cli/index.d.ts +8 -4
  140. package/lib/cli/index.d.ts.map +1 -1
  141. package/lib/cli/index.js.map +1 -1
  142. package/lib/cloudflare/kv/namespace.binding.d.ts.map +1 -1
  143. package/lib/cloudflare/kv/namespace.binding.js.map +1 -1
  144. package/lib/cloudflare/kv/namespace.d.ts.map +1 -1
  145. package/lib/cloudflare/kv/namespace.provider.d.ts +1 -2
  146. package/lib/cloudflare/kv/namespace.provider.d.ts.map +1 -1
  147. package/lib/cloudflare/kv/namespace.provider.js +11 -8
  148. package/lib/cloudflare/kv/namespace.provider.js.map +1 -1
  149. package/lib/cloudflare/r2/bucket.binding.d.ts.map +1 -1
  150. package/lib/cloudflare/r2/bucket.binding.js +1 -1
  151. package/lib/cloudflare/r2/bucket.binding.js.map +1 -1
  152. package/lib/cloudflare/r2/bucket.d.ts +1 -1
  153. package/lib/cloudflare/r2/bucket.d.ts.map +1 -1
  154. package/lib/cloudflare/r2/bucket.provider.d.ts +1 -2
  155. package/lib/cloudflare/r2/bucket.provider.d.ts.map +1 -1
  156. package/lib/cloudflare/r2/bucket.provider.js +20 -14
  157. package/lib/cloudflare/r2/bucket.provider.js.map +1 -1
  158. package/lib/cloudflare/worker/worker.d.ts +2 -2
  159. package/lib/cloudflare/worker/worker.d.ts.map +1 -1
  160. package/lib/cloudflare/worker/worker.provider.d.ts +1 -2
  161. package/lib/cloudflare/worker/worker.provider.d.ts.map +1 -1
  162. package/lib/cloudflare/worker/worker.provider.js +40 -13
  163. package/lib/cloudflare/worker/worker.provider.js.map +1 -1
  164. package/lib/instance-id.d.ts +5 -1
  165. package/lib/instance-id.d.ts.map +1 -1
  166. package/lib/instance-id.js +4 -0
  167. package/lib/instance-id.js.map +1 -1
  168. package/lib/output.d.ts.map +1 -1
  169. package/lib/output.js.map +1 -1
  170. package/lib/physical-name.d.ts +15 -4
  171. package/lib/physical-name.d.ts.map +1 -1
  172. package/lib/physical-name.js +12 -3
  173. package/lib/physical-name.js.map +1 -1
  174. package/lib/plan.d.ts +2 -2
  175. package/lib/plan.d.ts.map +1 -1
  176. package/lib/plan.js +73 -24
  177. package/lib/plan.js.map +1 -1
  178. package/lib/provider.d.ts +1 -2
  179. package/lib/provider.d.ts.map +1 -1
  180. package/lib/resource.d.ts +3 -2
  181. package/lib/resource.d.ts.map +1 -1
  182. package/lib/resource.js.map +1 -1
  183. package/lib/runtime.d.ts.map +1 -1
  184. package/lib/tags.d.ts +12 -0
  185. package/lib/tags.d.ts.map +1 -1
  186. package/lib/tags.js +24 -0
  187. package/lib/tags.js.map +1 -1
  188. package/lib/tsconfig.test.tsbuildinfo +1 -1
  189. package/package.json +51 -51
  190. package/src/apply.ts +316 -297
  191. package/src/aws/client.ts +22 -1
  192. package/src/aws/dynamodb/secondary-index.ts +5 -5
  193. package/src/aws/dynamodb/table.provider.ts +15 -4
  194. package/src/aws/dynamodb/table.ts +8 -11
  195. package/src/aws/ec2/egress-only-igw.provider.ts +181 -0
  196. package/src/aws/ec2/egress-only-igw.ts +77 -0
  197. package/src/aws/ec2/eip.provider.ts +191 -0
  198. package/src/aws/ec2/eip.ts +106 -0
  199. package/src/aws/ec2/index.ts +18 -0
  200. package/src/aws/ec2/internet-gateway.provider.ts +15 -6
  201. package/src/aws/ec2/internet-gateway.ts +6 -6
  202. package/src/aws/ec2/nat-gateway.provider.ts +341 -0
  203. package/src/aws/ec2/nat-gateway.ts +155 -0
  204. package/src/aws/ec2/network-acl-association.provider.ts +181 -0
  205. package/src/aws/ec2/network-acl-association.ts +60 -0
  206. package/src/aws/ec2/network-acl-entry.provider.ts +218 -0
  207. package/src/aws/ec2/network-acl-entry.ts +140 -0
  208. package/src/aws/ec2/network-acl.provider.ts +195 -0
  209. package/src/aws/ec2/network-acl.ts +102 -0
  210. package/src/aws/ec2/route-table-association.provider.ts +1 -2
  211. package/src/aws/ec2/route-table-association.ts +6 -6
  212. package/src/aws/ec2/route-table.provider.ts +1 -2
  213. package/src/aws/ec2/route-table.ts +6 -6
  214. package/src/aws/ec2/route.provider.ts +1 -2
  215. package/src/aws/ec2/route.ts +6 -6
  216. package/src/aws/ec2/security-group-rule.provider.ts +264 -0
  217. package/src/aws/ec2/security-group-rule.ts +151 -0
  218. package/src/aws/ec2/security-group.provider.ts +392 -0
  219. package/src/aws/ec2/security-group.ts +182 -0
  220. package/src/aws/ec2/subnet.provider.ts +57 -56
  221. package/src/aws/ec2/subnet.ts +6 -6
  222. package/src/aws/ec2/vpc-endpoint.provider.ts +466 -0
  223. package/src/aws/ec2/vpc-endpoint.ts +213 -0
  224. package/src/aws/ec2/vpc.provider.ts +60 -52
  225. package/src/aws/ec2/vpc.ts +6 -6
  226. package/src/aws/index.ts +9 -0
  227. package/src/aws/lambda/function.invoke.ts +4 -2
  228. package/src/aws/lambda/function.provider.ts +42 -31
  229. package/src/aws/lambda/function.ts +4 -2
  230. package/src/aws/sqs/queue.event-source.ts +12 -14
  231. package/src/aws/sqs/queue.provider.ts +40 -24
  232. package/src/aws/sqs/queue.send-message.ts +4 -2
  233. package/src/aws/sqs/queue.ts +1 -8
  234. package/src/binding.ts +7 -7
  235. package/src/cli/components/PlanProgress.tsx +3 -2
  236. package/src/cloudflare/kv/namespace.binding.ts +4 -2
  237. package/src/cloudflare/kv/namespace.provider.ts +18 -16
  238. package/src/cloudflare/kv/namespace.ts +6 -6
  239. package/src/cloudflare/r2/bucket.binding.ts +5 -3
  240. package/src/cloudflare/r2/bucket.provider.ts +34 -30
  241. package/src/cloudflare/r2/bucket.ts +7 -7
  242. package/src/cloudflare/worker/worker.provider.ts +39 -13
  243. package/src/cloudflare/worker/worker.ts +2 -2
  244. package/src/instance-id.ts +5 -1
  245. package/src/output.ts +5 -3
  246. package/src/physical-name.ts +27 -5
  247. package/src/plan.ts +108 -41
  248. package/src/provider.ts +12 -12
  249. package/src/resource.ts +17 -6
  250. package/src/runtime.ts +2 -2
  251. package/src/tags.ts +29 -0
@@ -0,0 +1,222 @@
1
+ import * as Data from "effect/Data";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Schedule from "effect/Schedule";
4
+ import { createAlchemyTagFilters, createTagger, createTagsList, diffTags, } from "../../tags.js";
5
+ import { Account } from "../account.js";
6
+ import { Region } from "../region.js";
7
+ import { EC2Client } from "./client.js";
8
+ import { NatGateway, } from "./nat-gateway.js";
9
+ export const natGatewayProvider = () => NatGateway.provider.effect(
10
+ // @ts-expect-error
11
+ Effect.gen(function* () {
12
+ const ec2 = yield* EC2Client;
13
+ const region = yield* Region;
14
+ const accountId = yield* Account;
15
+ const tagged = yield* createTagger();
16
+ const createTags = (id, tags) => ({
17
+ Name: id,
18
+ ...tagged(id),
19
+ ...tags,
20
+ });
21
+ const describeNatGateway = (natGatewayId) => ec2.describeNatGateways({ NatGatewayIds: [natGatewayId] }).pipe(Effect.map((r) => r.NatGateways?.[0]), Effect.flatMap((gw) => gw
22
+ ? Effect.succeed(gw)
23
+ : Effect.fail(new Error(`NAT Gateway ${natGatewayId} not found`))));
24
+ const toAttrs = (gw) => {
25
+ const primaryAddress = gw.NatGatewayAddresses?.find((a) => a.IsPrimary) ??
26
+ gw.NatGatewayAddresses?.[0];
27
+ return {
28
+ natGatewayId: gw.NatGatewayId,
29
+ natGatewayArn: `arn:aws:ec2:${region}:${accountId}:natgateway/${gw.NatGatewayId}`,
30
+ subnetId: gw.SubnetId,
31
+ vpcId: gw.VpcId,
32
+ state: gw.State,
33
+ connectivityType: gw.ConnectivityType,
34
+ publicIp: primaryAddress?.PublicIp,
35
+ privateIp: primaryAddress?.PrivateIp,
36
+ natGatewayAddresses: gw.NatGatewayAddresses?.map((a) => ({
37
+ allocationId: a.AllocationId,
38
+ networkInterfaceId: a.NetworkInterfaceId,
39
+ privateIp: a.PrivateIp,
40
+ publicIp: a.PublicIp,
41
+ associationId: a.AssociationId,
42
+ isPrimary: a.IsPrimary,
43
+ failureMessage: a.FailureMessage,
44
+ status: a.Status,
45
+ })),
46
+ failureCode: gw.FailureCode,
47
+ failureMessage: gw.FailureMessage,
48
+ createTime: gw.CreateTime instanceof Date
49
+ ? gw.CreateTime.toISOString()
50
+ : gw.CreateTime,
51
+ deleteTime: gw.DeleteTime instanceof Date
52
+ ? gw.DeleteTime.toISOString()
53
+ : gw.DeleteTime,
54
+ };
55
+ };
56
+ // Find NAT Gateway by alchemy tags when we don't have the ID
57
+ const findNatGatewayByTags = Effect.fn(function* (id) {
58
+ const filters = yield* createAlchemyTagFilters(id);
59
+ const result = yield* ec2.describeNatGateways({ Filter: filters });
60
+ // Find a NAT Gateway that's not deleted and has matching tags
61
+ for (const gw of result.NatGateways ?? []) {
62
+ return gw;
63
+ }
64
+ return undefined;
65
+ });
66
+ return {
67
+ stables: ["natGatewayId", "natGatewayArn", "vpcId"],
68
+ read: Effect.fn(function* ({ id, output }) {
69
+ if (output) {
70
+ // We have the NAT Gateway ID, use it directly
71
+ return toAttrs(yield* describeNatGateway(output.natGatewayId));
72
+ }
73
+ // No output - try to find by tags (recovery from incomplete create)
74
+ const gw = yield* findNatGatewayByTags(id);
75
+ if (gw) {
76
+ return toAttrs(gw);
77
+ }
78
+ // Not found
79
+ return undefined;
80
+ }),
81
+ diff: Effect.fn(function* ({ news, olds }) {
82
+ // NAT Gateway is mostly immutable - any change to core properties requires replacement
83
+ if (news.subnetId !== olds.subnetId ||
84
+ news.connectivityType !== olds.connectivityType ||
85
+ news.allocationId !== olds.allocationId) {
86
+ return { action: "replace" };
87
+ }
88
+ // Tags can be updated in-place
89
+ }),
90
+ create: Effect.fn(function* ({ id, news, session }) {
91
+ yield* session.note("Creating NAT Gateway...");
92
+ const result = yield* ec2.createNatGateway({
93
+ SubnetId: news.subnetId,
94
+ AllocationId: news.allocationId,
95
+ ConnectivityType: news.connectivityType ?? "public",
96
+ PrivateIpAddress: news.privateIpAddress,
97
+ SecondaryAllocationIds: news.secondaryAllocationIds,
98
+ SecondaryPrivateIpAddresses: news.secondaryPrivateIpAddresses,
99
+ SecondaryPrivateIpAddressCount: news.secondaryPrivateIpAddressCount,
100
+ TagSpecifications: [
101
+ {
102
+ ResourceType: "natgateway",
103
+ Tags: createTagsList(createTags(id, news.tags)),
104
+ },
105
+ ],
106
+ DryRun: false,
107
+ });
108
+ const natGatewayId = result.NatGateway.NatGatewayId;
109
+ yield* session.note(`NAT Gateway created: ${natGatewayId}`);
110
+ // Wait for NAT Gateway to be available
111
+ const gw = yield* waitForNatGatewayAvailable(natGatewayId, session);
112
+ return toAttrs(gw);
113
+ }),
114
+ update: Effect.fn(function* ({ id, news, output, session }) {
115
+ const natGatewayId = output.natGatewayId;
116
+ // Handle tag updates
117
+ const newTags = createTags(id, news.tags);
118
+ const oldTags = (yield* ec2
119
+ .describeTags({
120
+ Filters: [
121
+ { Name: "resource-id", Values: [natGatewayId] },
122
+ { Name: "resource-type", Values: ["natgateway"] },
123
+ ],
124
+ })
125
+ .pipe(Effect.map((r) => Object.fromEntries(r.Tags?.map((t) => [t.Key, t.Value]) ?? [])))) ?? {};
126
+ const { removed, upsert } = diffTags(oldTags, newTags);
127
+ if (removed.length > 0) {
128
+ yield* ec2.deleteTags({
129
+ Resources: [natGatewayId],
130
+ Tags: removed.map((key) => ({ Key: key })),
131
+ DryRun: false,
132
+ });
133
+ }
134
+ if (upsert.length > 0) {
135
+ yield* ec2.createTags({
136
+ Resources: [natGatewayId],
137
+ Tags: upsert,
138
+ DryRun: false,
139
+ });
140
+ yield* session.note("Updated tags");
141
+ }
142
+ // Refresh state
143
+ const gw = yield* describeNatGateway(natGatewayId);
144
+ return toAttrs(gw);
145
+ }),
146
+ delete: Effect.fn(function* ({ output, session }) {
147
+ const natGatewayId = output.natGatewayId;
148
+ yield* session.note(`Deleting NAT Gateway: ${natGatewayId}`);
149
+ yield* ec2
150
+ .deleteNatGateway({
151
+ NatGatewayId: natGatewayId,
152
+ DryRun: false,
153
+ })
154
+ .pipe(Effect.catchTag("NatGatewayNotFound", () => Effect.void));
155
+ // Wait for NAT Gateway to be deleted
156
+ yield* waitForNatGatewayDeleted(natGatewayId, session);
157
+ yield* session.note(`NAT Gateway ${natGatewayId} deleted`);
158
+ }),
159
+ };
160
+ }));
161
+ // Retryable error: NAT Gateway is still pending
162
+ class NatGatewayPending extends Data.TaggedError("NatGatewayPending") {
163
+ }
164
+ // Terminal error: NAT Gateway creation failed
165
+ class NatGatewayFailed extends Data.TaggedError("NatGatewayFailed") {
166
+ }
167
+ // Terminal error: NAT Gateway not found
168
+ class NatGatewayNotFound extends Data.TaggedError("NatGatewayNotFound") {
169
+ }
170
+ /**
171
+ * Wait for NAT Gateway to be in available state
172
+ */
173
+ const waitForNatGatewayAvailable = (natGatewayId, session) => Effect.gen(function* () {
174
+ const ec2 = yield* EC2Client;
175
+ const result = yield* ec2.describeNatGateways({
176
+ NatGatewayIds: [natGatewayId],
177
+ });
178
+ const gw = result.NatGateways?.[0];
179
+ if (!gw) {
180
+ return yield* new NatGatewayNotFound({ natGatewayId });
181
+ }
182
+ if (gw.State === "available") {
183
+ return gw;
184
+ }
185
+ if (gw.State === "failed") {
186
+ return yield* new NatGatewayFailed({
187
+ natGatewayId,
188
+ failureCode: gw.FailureCode,
189
+ failureMessage: gw.FailureMessage,
190
+ });
191
+ }
192
+ // Still pending - this is the only retryable case
193
+ return yield* new NatGatewayPending({ natGatewayId, state: gw.State });
194
+ }).pipe(Effect.tapError(Effect.logDebug), Effect.retry({
195
+ while: (e) => e._tag === "NatGatewayPending",
196
+ schedule: Schedule.fixed(5000).pipe(Schedule.intersect(Schedule.recurs(60)), // Max 5 minutes
197
+ Schedule.tapOutput(([, attempt]) => session.note(`Waiting for NAT Gateway to be available... (${(attempt + 1) * 5}s)`))),
198
+ }));
199
+ // Retryable error: NAT Gateway is still deleting
200
+ class NatGatewayDeleting extends Data.TaggedError("NatGatewayDeleting") {
201
+ }
202
+ /**
203
+ * Wait for NAT Gateway to be deleted
204
+ */
205
+ const waitForNatGatewayDeleted = (natGatewayId, session) => Effect.gen(function* () {
206
+ const ec2 = yield* EC2Client;
207
+ const result = yield* ec2
208
+ .describeNatGateways({ NatGatewayIds: [natGatewayId] })
209
+ .pipe(Effect.catchTag("NatGatewayNotFound", () => Effect.succeed({ NatGateways: [] })));
210
+ const gw = result.NatGateways?.[0];
211
+ if (!gw || gw.State === "deleted") {
212
+ return; // Successfully deleted
213
+ }
214
+ yield* Effect.logDebug(gw);
215
+ // Still deleting - this is the only retryable case
216
+ return yield* new NatGatewayDeleting({ natGatewayId, state: gw.State });
217
+ }).pipe(Effect.tapError(Effect.logDebug), Effect.retry({
218
+ while: (e) => e._tag === "NatGatewayDeleting",
219
+ schedule: Schedule.fixed(5000).pipe(Schedule.intersect(Schedule.recurs(60)), // Max 5 minutes
220
+ Schedule.tapOutput(([, attempt]) => session.note(`Waiting for NAT Gateway deletion... (${(attempt + 1) * 5}s)`))),
221
+ }));
222
+ //# sourceMappingURL=nat-gateway.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nat-gateway.provider.js","sourceRoot":"","sources":["../../../src/aws/ec2/nat-gateway.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { Input } from "../../input.ts";
2
+ import { Resource } from "../../resource.ts";
3
+ import type { NetworkAclId } from "./network-acl.ts";
4
+ import type { SubnetId } from "./subnet.ts";
5
+ export declare const NetworkAclAssociation: (<const ID extends string, const Props extends NetworkAclAssociationProps>(id: ID, props: Props) => NetworkAclAssociation<ID, Props>) & {
6
+ new (): NetworkAclAssociation<string, NetworkAclAssociationProps> & {
7
+ parent: NetworkAclAssociation<string, NetworkAclAssociationProps>;
8
+ };
9
+ type: "AWS.EC2.NetworkAclAssociation";
10
+ parent: NetworkAclAssociation<string, NetworkAclAssociationProps>;
11
+ provider: import("../../resource.ts").ResourceTags<NetworkAclAssociation<string, NetworkAclAssociationProps>>;
12
+ } & {
13
+ type: "AWS.EC2.NetworkAclAssociation";
14
+ provider: import("../../resource.ts").ResourceTags<NetworkAclAssociation<string, NetworkAclAssociationProps>>;
15
+ };
16
+ export interface NetworkAclAssociation<ID extends string = string, Props extends NetworkAclAssociationProps = NetworkAclAssociationProps> extends Resource<"AWS.EC2.NetworkAclAssociation", ID, Props, NetworkAclAssociationAttrs<Input.Resolve<Props>>, NetworkAclAssociation> {
17
+ }
18
+ export type NetworkAclAssociationId<ID extends string = string> = `aclassoc-${ID}`;
19
+ export declare const NetworkAclAssociationId: <ID extends string>(id: ID) => ID & NetworkAclAssociationId<ID>;
20
+ export interface NetworkAclAssociationProps {
21
+ /**
22
+ * The ID of the new network ACL to associate with the subnet.
23
+ */
24
+ networkAclId: Input<NetworkAclId>;
25
+ /**
26
+ * The ID of the subnet to associate with the network ACL.
27
+ */
28
+ subnetId: Input<SubnetId>;
29
+ }
30
+ export interface NetworkAclAssociationAttrs<Props extends Input.Resolve<NetworkAclAssociationProps>> {
31
+ /**
32
+ * The ID of the association between the network ACL and subnet.
33
+ */
34
+ associationId: NetworkAclAssociationId;
35
+ /**
36
+ * The ID of the network ACL.
37
+ */
38
+ networkAclId: Props["networkAclId"];
39
+ /**
40
+ * The ID of the subnet.
41
+ */
42
+ subnetId: Props["subnetId"];
43
+ }
44
+ //# sourceMappingURL=network-acl-association.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl-association.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,qBAAqB,UACzB,EAAE,SAAS,MAAM,QAAQ,KAAK,SAAS,0BAA0B,MAClE,EAAE,SACC,KAAK,KACX,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC;;;;;;;;;;CACF,CAAC;AAEpC,MAAM,WAAW,qBAAqB,CACpC,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,KAAK,SAAS,0BAA0B,GAAG,0BAA0B,CACrE,SAAQ,QAAQ,CAChB,+BAA+B,EAC/B,EAAE,EACF,KAAK,EACL,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAChD,qBAAqB,CACtB;CAAG;AAEJ,MAAM,MAAM,uBAAuB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAC5D,YAAY,EAAE,EAAE,CAAC;AACnB,eAAO,MAAM,uBAAuB,GAAI,EAAE,SAAS,MAAM,EACvD,IAAI,EAAE,KACL,EAAE,GAAG,uBAAuB,CAAC,EAAE,CACoB,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B,CACzC,KAAK,SAAS,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC;IAEvD;;OAEG;IACH,aAAa,EAAE,uBAAuB,CAAC;IAEvC;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAEpC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;CAC7B"}
@@ -0,0 +1,4 @@
1
+ import { Resource } from "../../resource.js";
2
+ export const NetworkAclAssociation = Resource("AWS.EC2.NetworkAclAssociation");
3
+ export const NetworkAclAssociationId = (id) => `aclassoc-${id}`;
4
+ //# sourceMappingURL=network-acl-association.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl-association.js","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAK1C,+BAA+B,CAAC,CAAC;AAepC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,EAAM,EAC4B,EAAE,CACpC,YAAY,EAAE,EAAsC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { EC2Client } from "./client.ts";
2
+ import { NetworkAclAssociation } from "./network-acl-association.ts";
3
+ export declare const networkAclAssociationProvider: () => import("effect/Layer").Layer<import("../../provider.ts").Provider<NetworkAclAssociation<string, import("./network-acl-association.ts").NetworkAclAssociationProps>>, never, EC2Client>;
4
+ //# sourceMappingURL=network-acl-association.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl-association.provider.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,qBAAqB,EAEtB,MAAM,8BAA8B,CAAC;AAItC,eAAO,MAAM,6BAA6B,8LAyKvC,CAAC"}
@@ -0,0 +1,115 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { EC2Client } from "./client.js";
3
+ import { NetworkAclAssociation, } from "./network-acl-association.js";
4
+ export const networkAclAssociationProvider = () => NetworkAclAssociation.provider.effect(Effect.gen(function* () {
5
+ const ec2 = yield* EC2Client;
6
+ const findAssociation = (subnetId) => ec2
7
+ .describeNetworkAcls({
8
+ Filters: [{ Name: "association.subnet-id", Values: [subnetId] }],
9
+ })
10
+ .pipe(Effect.map((r) => {
11
+ const acl = r.NetworkAcls?.[0];
12
+ const assoc = acl?.Associations?.find((a) => a.SubnetId === subnetId);
13
+ return assoc
14
+ ? {
15
+ associationId: assoc.NetworkAclAssociationId,
16
+ networkAclId: assoc.NetworkAclId,
17
+ subnetId: assoc.SubnetId,
18
+ }
19
+ : undefined;
20
+ }));
21
+ return {
22
+ stables: ["subnetId"],
23
+ read: Effect.fn(function* ({ olds }) {
24
+ if (!olds)
25
+ return undefined;
26
+ const assoc = yield* findAssociation(olds.subnetId);
27
+ if (!assoc) {
28
+ return yield* Effect.fail(new Error(`Network ACL Association not found for subnet ${olds.subnetId}`));
29
+ }
30
+ return {
31
+ associationId: assoc.associationId,
32
+ networkAclId: assoc.networkAclId,
33
+ subnetId: assoc.subnetId,
34
+ };
35
+ }),
36
+ diff: Effect.fn(function* ({ news, olds }) {
37
+ // Subnet change requires replacement
38
+ if (news.subnetId !== olds.subnetId) {
39
+ return { action: "replace" };
40
+ }
41
+ // Network ACL change can be done via replaceNetworkAclAssociation
42
+ }),
43
+ create: Effect.fn(function* ({ news, session }) {
44
+ yield* session.note(`Creating Network ACL Association for subnet ${news.subnetId}...`);
45
+ // First, find the current association for this subnet (every subnet has one)
46
+ const currentAssoc = yield* findAssociation(news.subnetId);
47
+ if (!currentAssoc) {
48
+ return yield* Effect.fail(new Error(`No existing Network ACL Association found for subnet ${news.subnetId}`));
49
+ }
50
+ // Replace the association with the new network ACL
51
+ const result = yield* ec2.replaceNetworkAclAssociation({
52
+ AssociationId: currentAssoc.associationId,
53
+ NetworkAclId: news.networkAclId,
54
+ DryRun: false,
55
+ });
56
+ const newAssociationId = result.NewAssociationId;
57
+ yield* session.note(`Network ACL Association created: ${newAssociationId}`);
58
+ return {
59
+ associationId: newAssociationId,
60
+ networkAclId: news.networkAclId,
61
+ subnetId: news.subnetId,
62
+ };
63
+ }),
64
+ update: Effect.fn(function* ({ news, output, session }) {
65
+ yield* session.note(`Updating Network ACL Association...`);
66
+ // Replace the association with the new network ACL
67
+ const result = yield* ec2.replaceNetworkAclAssociation({
68
+ AssociationId: output.associationId,
69
+ NetworkAclId: news.networkAclId,
70
+ DryRun: false,
71
+ });
72
+ const newAssociationId = result.NewAssociationId;
73
+ yield* session.note(`Network ACL Association updated: ${newAssociationId}`);
74
+ return {
75
+ associationId: newAssociationId,
76
+ networkAclId: news.networkAclId,
77
+ subnetId: news.subnetId,
78
+ };
79
+ }),
80
+ delete: Effect.fn(function* ({ olds, output, session }) {
81
+ yield* session.note(`Deleting Network ACL Association...`);
82
+ // When deleting, we need to associate the subnet back to the default NACL
83
+ // Find the default NACL for the VPC
84
+ const subnetResult = yield* ec2.describeSubnets({
85
+ SubnetIds: [olds.subnetId],
86
+ });
87
+ const vpcId = subnetResult.Subnets?.[0]?.VpcId;
88
+ if (vpcId) {
89
+ const defaultAclResult = yield* ec2.describeNetworkAcls({
90
+ Filters: [
91
+ { Name: "vpc-id", Values: [vpcId] },
92
+ { Name: "default", Values: ["true"] },
93
+ ],
94
+ });
95
+ const defaultAclId = defaultAclResult.NetworkAcls?.[0]?.NetworkAclId;
96
+ if (defaultAclId &&
97
+ defaultAclId !== olds.networkAclId) {
98
+ // Replace with default NACL
99
+ yield* ec2
100
+ .replaceNetworkAclAssociation({
101
+ AssociationId: output.associationId,
102
+ NetworkAclId: defaultAclId,
103
+ DryRun: false,
104
+ })
105
+ .pipe(Effect.catchTag("InvalidAssociationID.NotFound", () => Effect.void));
106
+ yield* session.note(`Network ACL Association reverted to default`);
107
+ }
108
+ else {
109
+ yield* session.note(`Already using default Network ACL, nothing to do`);
110
+ }
111
+ }
112
+ }),
113
+ };
114
+ }));
115
+ //# sourceMappingURL=network-acl-association.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl-association.provider.js","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import type * as EC2 from "itty-aws/ec2";
2
+ import type { Input } from "../../input.ts";
3
+ import { Resource } from "../../resource.ts";
4
+ import type { NetworkAclId } from "./network-acl.ts";
5
+ export declare const NetworkAclEntry: (<const ID extends string, const Props extends NetworkAclEntryProps>(id: ID, props: Props) => NetworkAclEntry<ID, Props>) & {
6
+ new (): NetworkAclEntry<string, NetworkAclEntryProps> & {
7
+ parent: NetworkAclEntry<string, NetworkAclEntryProps>;
8
+ };
9
+ type: "AWS.EC2.NetworkAclEntry";
10
+ parent: NetworkAclEntry<string, NetworkAclEntryProps>;
11
+ provider: import("../../resource.ts").ResourceTags<NetworkAclEntry<string, NetworkAclEntryProps>>;
12
+ } & {
13
+ type: "AWS.EC2.NetworkAclEntry";
14
+ provider: import("../../resource.ts").ResourceTags<NetworkAclEntry<string, NetworkAclEntryProps>>;
15
+ };
16
+ export interface NetworkAclEntry<ID extends string = string, Props extends NetworkAclEntryProps = NetworkAclEntryProps> extends Resource<"AWS.EC2.NetworkAclEntry", ID, Props, NetworkAclEntryAttrs<Input.Resolve<Props>>, NetworkAclEntry> {
17
+ }
18
+ export interface NetworkAclEntryProps {
19
+ /**
20
+ * The ID of the network ACL.
21
+ */
22
+ networkAclId: Input<NetworkAclId>;
23
+ /**
24
+ * The rule number for the entry (1-32766).
25
+ * Rules are evaluated in order from lowest to highest.
26
+ */
27
+ ruleNumber: number;
28
+ /**
29
+ * The protocol number.
30
+ * A value of "-1" means all protocols.
31
+ * Common values: 6 (TCP), 17 (UDP), 1 (ICMP)
32
+ */
33
+ protocol: string;
34
+ /**
35
+ * Whether to allow or deny the traffic that matches the rule.
36
+ */
37
+ ruleAction: EC2.RuleAction;
38
+ /**
39
+ * Whether this is an egress (outbound) rule.
40
+ * @default false (ingress)
41
+ */
42
+ egress?: boolean;
43
+ /**
44
+ * The IPv4 CIDR block.
45
+ * Either cidrBlock or ipv6CidrBlock must be specified.
46
+ */
47
+ cidrBlock?: string;
48
+ /**
49
+ * The IPv6 CIDR block.
50
+ * Either cidrBlock or ipv6CidrBlock must be specified.
51
+ */
52
+ ipv6CidrBlock?: string;
53
+ /**
54
+ * ICMP type and code. Required if protocol is 1 (ICMP) or 58 (ICMPv6).
55
+ */
56
+ icmpTypeCode?: {
57
+ /**
58
+ * The ICMP code. Use -1 to specify all codes.
59
+ */
60
+ code?: number;
61
+ /**
62
+ * The ICMP type. Use -1 to specify all types.
63
+ */
64
+ type?: number;
65
+ };
66
+ /**
67
+ * The port range for TCP/UDP protocols.
68
+ */
69
+ portRange?: {
70
+ /**
71
+ * The first port in the range.
72
+ */
73
+ from?: number;
74
+ /**
75
+ * The last port in the range.
76
+ */
77
+ to?: number;
78
+ };
79
+ }
80
+ export interface NetworkAclEntryAttrs<Props extends NetworkAclEntryProps> {
81
+ /**
82
+ * The ID of the network ACL.
83
+ */
84
+ networkAclId: Props["networkAclId"];
85
+ /**
86
+ * The rule number.
87
+ */
88
+ ruleNumber: Props["ruleNumber"];
89
+ /**
90
+ * Whether this is an egress rule.
91
+ */
92
+ egress: boolean;
93
+ /**
94
+ * The protocol.
95
+ */
96
+ protocol: Props["protocol"];
97
+ /**
98
+ * The rule action (allow or deny).
99
+ */
100
+ ruleAction: Props["ruleAction"];
101
+ /**
102
+ * The IPv4 CIDR block.
103
+ */
104
+ cidrBlock?: Props["cidrBlock"];
105
+ /**
106
+ * The IPv6 CIDR block.
107
+ */
108
+ ipv6CidrBlock?: Props["ipv6CidrBlock"];
109
+ /**
110
+ * The ICMP type and code.
111
+ */
112
+ icmpTypeCode?: Props["icmpTypeCode"];
113
+ /**
114
+ * The port range.
115
+ */
116
+ portRange?: Props["portRange"];
117
+ }
118
+ //# sourceMappingURL=network-acl-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl-entry.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,eAAO,MAAM,eAAe,UACnB,EAAE,SAAS,MAAM,QAAQ,KAAK,SAAS,oBAAoB,MAC5D,EAAE,SACC,KAAK,KACX,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC;;;;;;;;;;CACF,CAAC;AAE9B,MAAM,WAAW,eAAe,CAC9B,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,KAAK,SAAS,oBAAoB,GAAG,oBAAoB,CACzD,SAAQ,QAAQ,CAChB,yBAAyB,EACzB,EAAE,EACF,KAAK,EACL,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC1C,eAAe,CAChB;CAAG;AAEJ,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAElC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE;QACV;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,oBAAoB;IACtE;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEhC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5B;;OAEG;IACH,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAE/B;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAEvC;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CAChC"}
@@ -0,0 +1,3 @@
1
+ import { Resource } from "../../resource.js";
2
+ export const NetworkAclEntry = Resource("AWS.EC2.NetworkAclEntry");
3
+ //# sourceMappingURL=network-acl-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl-entry.js","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-entry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAKpC,yBAAyB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { EC2Client } from "./client.ts";
2
+ import { NetworkAclEntry, type NetworkAclEntryProps } from "./network-acl-entry.ts";
3
+ export declare const networkAclEntryProvider: () => import("effect/Layer").Layer<import("../../provider.ts").Provider<NetworkAclEntry<string, NetworkAclEntryProps>>, never, EC2Client>;
4
+ //# sourceMappingURL=network-acl-entry.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-acl-entry.provider.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-entry.provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,eAAe,EAEf,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,uBAAuB,2IAgNjC,CAAC"}