@go-to-k/cdkd 0.260.8 → 0.260.10

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.
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import { $ as getBootstrapMarkerKey, A as refStateLookupFromResource, At as resolveBucketRegion, B as S3StateBackend, Bt as LocalMigrateError, C as findActionableSilentDrops, Ct as CFN_TEMPLATE_URL_LIMIT, D as isTerminationProtectionPropagationError, Dt as expectedOwnerParam, E as disableInstanceApiTermination, Et as uploadCfnTemplate, F as applyRoleArnIfSet, G as WorkGraph, Gt as PartialFailureError, H as shouldRetainResource, I as DiffCalculator, It as CdkdError, J as loadPublishableAssetManifest, Jt as ResourceUpdateNotSupportedError, K as buildAssetRedirectMap, Kt as ProvisioningError, L as DagBuilder, M as normalizeAwsTagsToCfn, Mt as getAwsClients, N as resolveExplicitPhysicalId, Nt as resetAwsClients, O as IntrinsicFunctionResolver, Ot as AssemblyReader, P as assertRegionMatch, Pt as setAwsClients, Q as ensureAssetStorage, R as TemplateParser, S as ProviderRegistry, St as CFN_TEMPLATE_BODY_LIMIT, T as slowCcOperationTimeoutMs, Tt as findLargeInlineResources, U as AssetPublisher, Ut as MissingCdkCliError, V as rebuildClientForBucketRegion, Vt as LocalStartServiceError, W as stringifyValue, Wt as NestedStackChildDirectDestroyError, X as AssetModeResolver, Xt as StackTerminationProtectionError, Y as rewriteTemplateAssetReferences, Yt as StackHasActiveImportsError, Z as BOOTSTRAP_MARKER_PREFIX, _ as green, _t as resolveSkipPrefix, a as withRetry, at as getDockerCmd, b as IAMRoleProvider, bt as resolveUseCdkBootstrapAssets, c as computeImplicitDeleteEdges, ct as AssetManifestLoader, d as isStatefulRecreateTargetSync, dt as synthesisStatusMessage, et as parseBootstrapMarker, f as renderStatefulReason, ft as getDefaultStateBucketName, g as gray, gt as resolveCaptureObservedState, h as cyan, ht as resolveAutoAssetStorage, i as withResourceDeadline, it as formatDockerLoginError, j as WAFv2WebACLProvider, jt as AwsClients, k as cfnRefValueFromPhysicalId, l as extractDeploymentEventError, lt as getDockerImageBySourceHash, m as bold, mt as resolveApp, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as withErrorHandling, nt as validateContainerRepoName, o as isRetryableTransientError, ot as runDockerForeground, p as formatResourceLine, pt as getLegacyStateBucketName, q as createAssetRedirectResolver, qt as ResourceTimeoutError, r as DeployEngine, rt as buildDockerImage, s as IMPLICIT_DELETE_DEPENDENCIES, st as runDockerStreaming, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as normalizeAwsError, tt as validateAssetBucketName, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, ut as Synthesizer, v as red, vt as resolveStateBucketWithDefault, w as CloudControlProvider, wt as MIGRATE_TMP_PREFIX, x as collectInlinePolicyNamesManagedBySiblings, xt as warnDeprecatedNoPrefixCliFlag, y as yellow, yt as resolveStateBucketWithDefaultAndSource, z as LockManager, zt as LocalInvokeBuildError$1 } from "./deploy-engine-Dg51mHCV.js";
2
+ import { $ as getBootstrapMarkerKey, A as refStateLookupFromResource, At as resolveBucketRegion, B as S3StateBackend, Bt as LocalMigrateError, C as findActionableSilentDrops, Ct as CFN_TEMPLATE_URL_LIMIT, D as isTerminationProtectionPropagationError, Dt as expectedOwnerParam, E as disableInstanceApiTermination, Et as uploadCfnTemplate, F as applyRoleArnIfSet, G as WorkGraph, Gt as PartialFailureError, H as shouldRetainResource, I as DiffCalculator, It as CdkdError, J as loadPublishableAssetManifest, Jt as ResourceUpdateNotSupportedError, K as buildAssetRedirectMap, Kt as ProvisioningError, L as DagBuilder, M as normalizeAwsTagsToCfn, Mt as getAwsClients, N as resolveExplicitPhysicalId, Nt as resetAwsClients, O as IntrinsicFunctionResolver, Ot as AssemblyReader, P as assertRegionMatch, Pt as setAwsClients, Q as ensureAssetStorage, R as TemplateParser, S as ProviderRegistry, St as CFN_TEMPLATE_BODY_LIMIT, T as slowCcOperationTimeoutMs, Tt as findLargeInlineResources, U as AssetPublisher, Ut as MissingCdkCliError, V as rebuildClientForBucketRegion, Vt as LocalStartServiceError, W as stringifyValue, Wt as NestedStackChildDirectDestroyError, X as AssetModeResolver, Xt as StackTerminationProtectionError, Y as rewriteTemplateAssetReferences, Yt as StackHasActiveImportsError, Z as BOOTSTRAP_MARKER_PREFIX, _ as green, _t as resolveSkipPrefix, a as withRetry, at as getDockerCmd, b as IAMRoleProvider, bt as resolveUseCdkBootstrapAssets, c as computeImplicitDeleteEdges, ct as AssetManifestLoader, d as isStatefulRecreateTargetSync, dt as synthesisStatusMessage, et as parseBootstrapMarker, f as renderStatefulReason, ft as getDefaultStateBucketName, g as gray, gt as resolveCaptureObservedState, h as cyan, ht as resolveAutoAssetStorage, i as withResourceDeadline, it as formatDockerLoginError, j as WAFv2WebACLProvider, jt as AwsClients, k as cfnRefValueFromPhysicalId, l as extractDeploymentEventError, lt as getDockerImageBySourceHash, m as bold, mt as resolveApp, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as withErrorHandling, nt as validateContainerRepoName, o as isRetryableTransientError, ot as runDockerForeground, p as formatResourceLine, pt as getLegacyStateBucketName, q as createAssetRedirectResolver, qt as ResourceTimeoutError, r as DeployEngine, rt as buildDockerImage, s as IMPLICIT_DELETE_DEPENDENCIES, st as runDockerStreaming, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as normalizeAwsError, tt as validateAssetBucketName, u as MULTI_REGION_RECREATE_BLOCKED_TYPES, ut as Synthesizer, v as red, vt as resolveStateBucketWithDefault, w as CloudControlProvider, wt as MIGRATE_TMP_PREFIX, x as collectInlinePolicyNamesManagedBySiblings, xt as warnDeprecatedNoPrefixCliFlag, y as yellow, yt as resolveStateBucketWithDefaultAndSource, z as LockManager, zt as LocalInvokeBuildError$1 } from "./deploy-engine-DBNn0Aq7.js";
3
3
  import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, f as withSkipPrefix, i as runStackBuffered, n as getLogger, o as PATTERN_B_NAME_OPTIONS, p as withStackName, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-BYMEE-BS.js";
4
- import { t as ASGProvider } from "./asg-provider-rcNqhfPS.js";
4
+ import { t as ASGProvider } from "./asg-provider-CU5tyKkY.js";
5
5
  import { AsyncLocalStorage } from "node:async_hooks";
6
6
  import { createHash, randomBytes, randomUUID } from "node:crypto";
7
7
  import { CopyObjectCommand, CreateBucketCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -10,7 +10,7 @@ import { CreateQueueCommand, DeleteQueueCommand, GetQueueAttributesCommand, GetQ
10
10
  import { CreateTopicCommand, DeleteTopicCommand, GetSubscriptionAttributesCommand, GetTopicAttributesCommand, ListSubscriptionsByTopicCommand, ListTagsForResourceCommand, ListTopicsCommand, NotFoundException, SNSClient, SetTopicAttributesCommand, SubscribeCommand, TagResourceCommand, UnsubscribeCommand, UntagResourceCommand } from "@aws-sdk/client-sns";
11
11
  import { AddPermissionCommand, CreateEventSourceMappingCommand, CreateFunctionCommand, CreateFunctionUrlConfigCommand, DeleteEventSourceMappingCommand, DeleteFunctionCommand, DeleteFunctionConcurrencyCommand, DeleteFunctionEventInvokeConfigCommand, DeleteFunctionUrlConfigCommand, DeleteLayerVersionCommand, GetEventSourceMappingCommand, GetFunctionCommand, GetFunctionConcurrencyCommand, GetFunctionEventInvokeConfigCommand, GetFunctionRecursionConfigCommand, GetFunctionUrlConfigCommand, GetLayerVersionByArnCommand, GetPolicyCommand as GetPolicyCommand$1, LambdaClient, ListTagsCommand, PublishLayerVersionCommand, PutFunctionConcurrencyCommand, PutFunctionEventInvokeConfigCommand, PutFunctionRecursionConfigCommand, RemovePermissionCommand, ResourceNotFoundException, TagResourceCommand as TagResourceCommand$1, UntagResourceCommand as UntagResourceCommand$1, UpdateEventSourceMappingCommand, UpdateFunctionCodeCommand, UpdateFunctionConfigurationCommand, UpdateFunctionUrlConfigCommand, waitUntilFunctionUpdatedV2 } from "@aws-sdk/client-lambda";
12
12
  import { AssumeRoleCommand, GetCallerIdentityCommand, STSClient } from "@aws-sdk/client-sts";
13
- import { AssociateIamInstanceProfileCommand, AssociateRouteTableCommand, AttachInternetGatewayCommand, AuthorizeSecurityGroupEgressCommand, AuthorizeSecurityGroupIngressCommand, CreateInternetGatewayCommand, CreateNatGatewayCommand, CreateNetworkAclCommand, CreateNetworkAclEntryCommand, CreateRouteCommand, CreateRouteTableCommand, CreateSecurityGroupCommand, CreateSubnetCommand, CreateTagsCommand, CreateVpcCommand, DeleteInternetGatewayCommand, DeleteNatGatewayCommand, DeleteNetworkAclCommand, DeleteNetworkAclEntryCommand, DeleteNetworkInterfaceCommand, DeleteRouteCommand, DeleteRouteTableCommand, DeleteSecurityGroupCommand, DeleteSubnetCommand, DeleteTagsCommand, DeleteVpcCommand, DescribeAvailabilityZonesCommand, DescribeIamInstanceProfileAssociationsCommand, DescribeInstanceAttributeCommand, DescribeInstanceCreditSpecificationsCommand, DescribeInstancesCommand, DescribeInternetGatewaysCommand, DescribeNatGatewaysCommand, DescribeNetworkAclsCommand, DescribeNetworkInterfacesCommand, DescribeRouteTablesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVolumesCommand, DescribeVpcAttributeCommand, DescribeVpcsCommand, DetachInternetGatewayCommand, DisassociateRouteTableCommand, EC2Client, ModifyInstanceAttributeCommand, ModifyInstanceCreditSpecificationCommand, ModifyInstanceMetadataOptionsCommand, ModifySubnetAttributeCommand, ModifyVpcAttributeCommand, MonitorInstancesCommand, ReplaceNetworkAclAssociationCommand, RevokeSecurityGroupEgressCommand, RevokeSecurityGroupIngressCommand, RunInstancesCommand, TerminateInstancesCommand, UnmonitorInstancesCommand, waitUntilInstanceRunning, waitUntilInstanceTerminated, waitUntilNatGatewayAvailable, waitUntilNatGatewayDeleted } from "@aws-sdk/client-ec2";
13
+ import { AllocateAddressCommand, AssociateAddressCommand, AssociateIamInstanceProfileCommand, AssociateRouteTableCommand, AttachInternetGatewayCommand, AuthorizeSecurityGroupEgressCommand, AuthorizeSecurityGroupIngressCommand, CreateInternetGatewayCommand, CreateNatGatewayCommand, CreateNetworkAclCommand, CreateNetworkAclEntryCommand, CreateRouteCommand, CreateRouteTableCommand, CreateSecurityGroupCommand, CreateSubnetCommand, CreateTagsCommand, CreateVpcCommand, DeleteInternetGatewayCommand, DeleteNatGatewayCommand, DeleteNetworkAclCommand, DeleteNetworkAclEntryCommand, DeleteNetworkInterfaceCommand, DeleteRouteCommand, DeleteRouteTableCommand, DeleteSecurityGroupCommand, DeleteSubnetCommand, DeleteTagsCommand, DeleteVpcCommand, DescribeAddressesCommand, DescribeAvailabilityZonesCommand, DescribeIamInstanceProfileAssociationsCommand, DescribeInstanceAttributeCommand, DescribeInstanceCreditSpecificationsCommand, DescribeInstancesCommand, DescribeInternetGatewaysCommand, DescribeNatGatewaysCommand, DescribeNetworkAclsCommand, DescribeNetworkInterfacesCommand, DescribeRouteTablesCommand, DescribeSecurityGroupsCommand, DescribeSubnetsCommand, DescribeVolumesCommand, DescribeVpcAttributeCommand, DescribeVpcsCommand, DetachInternetGatewayCommand, DisassociateAddressCommand, DisassociateRouteTableCommand, EC2Client, ModifyInstanceAttributeCommand, ModifyInstanceCreditSpecificationCommand, ModifyInstanceMetadataOptionsCommand, ModifySubnetAttributeCommand, ModifyVpcAttributeCommand, MonitorInstancesCommand, ReleaseAddressCommand, ReplaceNetworkAclAssociationCommand, RevokeSecurityGroupEgressCommand, RevokeSecurityGroupIngressCommand, RunInstancesCommand, TerminateInstancesCommand, UnmonitorInstancesCommand, waitUntilInstanceRunning, waitUntilInstanceTerminated, waitUntilNatGatewayAvailable, waitUntilNatGatewayDeleted } from "@aws-sdk/client-ec2";
14
14
  import { CreateTableCommand, DeleteResourcePolicyCommand, DeleteTableCommand, DescribeContinuousBackupsCommand, DescribeContributorInsightsCommand, DescribeKinesisStreamingDestinationCommand, DescribeTableCommand, DescribeTimeToLiveCommand, DisableKinesisStreamingDestinationCommand, DynamoDBClient, EnableKinesisStreamingDestinationCommand, GetResourcePolicyCommand, ListTagsOfResourceCommand, PutResourcePolicyCommand, ResourceNotFoundException as ResourceNotFoundException$1, TagResourceCommand as TagResourceCommand$2, UntagResourceCommand as UntagResourceCommand$2, UpdateContinuousBackupsCommand, UpdateContributorInsightsCommand, UpdateTableCommand, UpdateTimeToLiveCommand } from "@aws-sdk/client-dynamodb";
15
15
  import { CloudFormationClient, CreateChangeSetCommand, DeleteChangeSetCommand, DeleteStackCommand, DescribeChangeSetCommand, DescribeStackEventsCommand, DescribeStackResourcesCommand, DescribeStacksCommand, DescribeTypeCommand, ExecuteChangeSetCommand, GetTemplateCommand, UpdateStackCommand, waitUntilChangeSetCreateComplete, waitUntilStackDeleteComplete, waitUntilStackImportComplete, waitUntilStackUpdateComplete } from "@aws-sdk/client-cloudformation";
16
16
  import { APIGatewayClient, CreateAuthorizerCommand, CreateDeploymentCommand, CreateResourceCommand, CreateStageCommand, DeleteAuthorizerCommand, DeleteDeploymentCommand, DeleteMethodCommand, DeleteResourceCommand, DeleteStageCommand, GetAccountCommand, GetAuthorizerCommand, GetDeploymentCommand, GetMethodCommand, GetResourceCommand, GetStageCommand, NotFoundException as NotFoundException$1, PutIntegrationCommand, PutIntegrationResponseCommand, PutMethodCommand, PutMethodResponseCommand, TagResourceCommand as TagResourceCommand$3, UntagResourceCommand as UntagResourceCommand$3, UpdateAccountCommand, UpdateAuthorizerCommand, UpdateMethodCommand, UpdateStageCommand } from "@aws-sdk/client-api-gateway";
@@ -1901,7 +1901,7 @@ const FLUSH_INTERVAL_MS = 2e3;
1901
1901
  const FLUSH_EVENT_THRESHOLD = 50;
1902
1902
  /** Build-time cdkd version, with a dev fallback for non-built contexts. */
1903
1903
  function getCdkdVersion() {
1904
- return "0.260.8";
1904
+ return "0.260.10";
1905
1905
  }
1906
1906
  /**
1907
1907
  * Generate a time-sortable unique run id, e.g.
@@ -8385,7 +8385,7 @@ var LambdaFunctionProvider = class {
8385
8385
  ])]]);
8386
8386
  eniWaitTimeoutMs = 600 * 1e3;
8387
8387
  eniWaitInitialDelayMs = 1e4;
8388
- eniWaitMaxDelayMs = 3e4;
8388
+ eniWaitMaxDelayMs = 1e4;
8389
8389
  functionUpdateMaxWaitSeconds = 600;
8390
8390
  eniInitialSleepMs = 1e4;
8391
8391
  eniDeleteRetryBudgetMs = 1800 * 1e3;
@@ -8742,7 +8742,7 @@ var LambdaFunctionProvider = class {
8742
8742
  * "myfn" matching for function "fn".
8743
8743
  *
8744
8744
  * Polling: starts at eniWaitInitialDelayMs (10s), exponential backoff up
8745
- * to eniWaitMaxDelayMs (30s), bounded by eniWaitTimeoutMs (10min).
8745
+ * to eniWaitMaxDelayMs (10s), bounded by eniWaitTimeoutMs (10min).
8746
8746
  * Timeout is a soft warning — downstream Subnet/SG deletion has its own
8747
8747
  * retries.
8748
8748
  */
@@ -15032,6 +15032,13 @@ var EC2Provider = class {
15032
15032
  "Tags"
15033
15033
  ])],
15034
15034
  ["AWS::EC2::InternetGateway", /* @__PURE__ */ new Set(["Tags"])],
15035
+ ["AWS::EC2::EIP", /* @__PURE__ */ new Set([
15036
+ "Domain",
15037
+ "InstanceId",
15038
+ "NetworkBorderGroup",
15039
+ "PublicIpv4Pool",
15040
+ "Tags"
15041
+ ])],
15035
15042
  ["AWS::EC2::VPCGatewayAttachment", /* @__PURE__ */ new Set(["VpcId", "InternetGatewayId"])],
15036
15043
  ["AWS::EC2::NatGateway", /* @__PURE__ */ new Set([
15037
15044
  "AllocationId",
@@ -15111,7 +15118,12 @@ var EC2Provider = class {
15111
15118
  unhandledByDesign = /* @__PURE__ */ new Map([
15112
15119
  ["AWS::EC2::Instance", /* @__PURE__ */ new Map([["ElasticGpuSpecifications", "AWS Elastic GPU end-of-life (announced 2023-11); no replacement API"], ["ElasticInferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])],
15113
15120
  ["AWS::EC2::SecurityGroupIngress", /* @__PURE__ */ new Map([["GroupName", "EC2-Classic-only — use GroupId for VPC security groups (EC2-Classic retired 2022-08-15)"], ["SourceSecurityGroupName", "EC2-Classic-only — use SourceSecurityGroupId for VPC peer security groups (EC2-Classic retired 2022-08-15)"]])],
15114
- ["AWS::EC2::NatGateway", /* @__PURE__ */ new Map([["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]])]
15121
+ ["AWS::EC2::NatGateway", /* @__PURE__ */ new Map([["VpcId", "AWS derives the VPC from SubnetId; the ec2:CreateNatGateway API has no VpcId parameter"]])],
15122
+ ["AWS::EC2::EIP", /* @__PURE__ */ new Map([
15123
+ ["Address", "Bring-your-own-IP: allocating a specific address you own is not yet supported; cdkd allocates an Amazon-owned address"],
15124
+ ["IpamPoolId", "Allocation from an IPAM pool is not yet supported"],
15125
+ ["TransferAddress", "Accepting a transferred Elastic IP is not yet supported (out-of-band EIP transfer flow)"]
15126
+ ])]
15115
15127
  ]);
15116
15128
  constructor() {
15117
15129
  const awsClients = getAwsClients();
@@ -15122,6 +15134,7 @@ var EC2Provider = class {
15122
15134
  case "AWS::EC2::VPC": return this.createVpc(logicalId, resourceType, properties);
15123
15135
  case "AWS::EC2::Subnet": return this.createSubnet(logicalId, resourceType, properties);
15124
15136
  case "AWS::EC2::InternetGateway": return this.createInternetGateway(logicalId, resourceType, properties);
15137
+ case "AWS::EC2::EIP": return this.createEip(logicalId, resourceType, properties);
15125
15138
  case "AWS::EC2::VPCGatewayAttachment": return this.createVpcGatewayAttachment(logicalId, resourceType, properties);
15126
15139
  case "AWS::EC2::NatGateway": return this.createNatGateway(logicalId, resourceType, properties);
15127
15140
  case "AWS::EC2::RouteTable": return this.createRouteTable(logicalId, resourceType, properties);
@@ -15141,6 +15154,7 @@ var EC2Provider = class {
15141
15154
  case "AWS::EC2::VPC": return this.updateVpc(logicalId, physicalId, resourceType, properties, previousProperties);
15142
15155
  case "AWS::EC2::Subnet": return this.updateSubnet(logicalId, physicalId);
15143
15156
  case "AWS::EC2::InternetGateway": return this.updateInternetGateway(logicalId, physicalId);
15157
+ case "AWS::EC2::EIP": return this.updateEip(logicalId, physicalId, properties, previousProperties);
15144
15158
  case "AWS::EC2::VPCGatewayAttachment": return this.updateVpcGatewayAttachment(logicalId, physicalId);
15145
15159
  case "AWS::EC2::NatGateway": return this.updateNatGateway(logicalId, physicalId);
15146
15160
  case "AWS::EC2::RouteTable": return this.updateRouteTable(logicalId, physicalId);
@@ -15160,6 +15174,7 @@ var EC2Provider = class {
15160
15174
  case "AWS::EC2::VPC": return this.deleteVpc(logicalId, physicalId, resourceType, context);
15161
15175
  case "AWS::EC2::Subnet": return this.deleteSubnet(logicalId, physicalId, resourceType, context);
15162
15176
  case "AWS::EC2::InternetGateway": return this.deleteInternetGateway(logicalId, physicalId, resourceType, context);
15177
+ case "AWS::EC2::EIP": return this.deleteEip(logicalId, physicalId, resourceType, context);
15163
15178
  case "AWS::EC2::VPCGatewayAttachment": return this.deleteVpcGatewayAttachment(logicalId, physicalId, resourceType, context);
15164
15179
  case "AWS::EC2::NatGateway": return this.deleteNatGateway(logicalId, physicalId, resourceType, context);
15165
15180
  case "AWS::EC2::RouteTable": return this.deleteRouteTable(logicalId, physicalId, resourceType, context);
@@ -15182,6 +15197,7 @@ var EC2Provider = class {
15182
15197
  case "AWS::EC2::Subnet": return this.getSubnetAttribute(physicalId, attributeName);
15183
15198
  case "AWS::EC2::SecurityGroup": return this.getSecurityGroupAttribute(physicalId, attributeName);
15184
15199
  case "AWS::EC2::Instance": return this.getInstanceAttribute(physicalId, attributeName);
15200
+ case "AWS::EC2::EIP": return this.getEipAttribute(physicalId, attributeName);
15185
15201
  default: return;
15186
15202
  }
15187
15203
  }
@@ -15490,6 +15506,111 @@ var EC2Provider = class {
15490
15506
  throw new ProvisioningError(`Failed to delete InternetGateway ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
15491
15507
  }
15492
15508
  }
15509
+ eipPhysicalId(publicIp, allocationId) {
15510
+ return `${publicIp}|${allocationId}`;
15511
+ }
15512
+ parseEipPhysicalId(physicalId) {
15513
+ if (physicalId.includes("|")) {
15514
+ const [publicIp, allocationId] = physicalId.split("|");
15515
+ return {
15516
+ publicIp,
15517
+ allocationId
15518
+ };
15519
+ }
15520
+ if (physicalId.startsWith("eipalloc-")) return { allocationId: physicalId };
15521
+ return { publicIp: physicalId };
15522
+ }
15523
+ async createEip(logicalId, resourceType, properties) {
15524
+ this.logger.debug(`Creating EIP ${logicalId}`);
15525
+ try {
15526
+ const response = await this.ec2Client.send(new AllocateAddressCommand({
15527
+ Domain: properties["Domain"] ?? "vpc",
15528
+ NetworkBorderGroup: properties["NetworkBorderGroup"],
15529
+ PublicIpv4Pool: properties["PublicIpv4Pool"]
15530
+ }));
15531
+ const allocationId = response.AllocationId;
15532
+ const publicIp = response.PublicIp;
15533
+ await this.applyTags(allocationId, properties, logicalId);
15534
+ const instanceId = properties["InstanceId"];
15535
+ if (instanceId) {
15536
+ await this.ec2Client.send(new AssociateAddressCommand({
15537
+ AllocationId: allocationId,
15538
+ InstanceId: instanceId
15539
+ }));
15540
+ this.logger.debug(`Associated EIP ${logicalId} (${allocationId}) to ${instanceId}`);
15541
+ }
15542
+ this.logger.debug(`Successfully created EIP ${logicalId}: ${allocationId} (${publicIp})`);
15543
+ return {
15544
+ physicalId: this.eipPhysicalId(publicIp, allocationId),
15545
+ attributes: {
15546
+ AllocationId: allocationId,
15547
+ PublicIp: publicIp
15548
+ }
15549
+ };
15550
+ } catch (error) {
15551
+ const cause = error instanceof Error ? error : void 0;
15552
+ throw new ProvisioningError(`Failed to create EIP ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, void 0, cause);
15553
+ }
15554
+ }
15555
+ async updateEip(logicalId, physicalId, properties, previousProperties) {
15556
+ this.logger.debug(`Updating EIP ${logicalId}: ${physicalId}`);
15557
+ const { allocationId } = this.parseEipPhysicalId(physicalId);
15558
+ if (allocationId) {
15559
+ await this.applyTagDiff(allocationId, previousProperties["Tags"], properties["Tags"]);
15560
+ const oldInstanceId = previousProperties["InstanceId"];
15561
+ const newInstanceId = properties["InstanceId"];
15562
+ if (oldInstanceId !== newInstanceId) if (newInstanceId) await this.ec2Client.send(new AssociateAddressCommand({
15563
+ AllocationId: allocationId,
15564
+ InstanceId: newInstanceId,
15565
+ AllowReassociation: true
15566
+ }));
15567
+ else {
15568
+ const associationId = (await this.ec2Client.send(new DescribeAddressesCommand({ AllocationIds: [allocationId] }))).Addresses?.[0]?.AssociationId;
15569
+ if (associationId) await this.ec2Client.send(new DisassociateAddressCommand({ AssociationId: associationId }));
15570
+ }
15571
+ }
15572
+ return {
15573
+ physicalId,
15574
+ wasReplaced: false
15575
+ };
15576
+ }
15577
+ async deleteEip(logicalId, physicalId, resourceType, context) {
15578
+ this.logger.debug(`Deleting EIP ${logicalId}: ${physicalId}`);
15579
+ const parsed = this.parseEipPhysicalId(physicalId);
15580
+ let allocationId = parsed.allocationId;
15581
+ if (!allocationId && parsed.publicIp) {
15582
+ allocationId = (await this.ec2Client.send(new DescribeAddressesCommand({ PublicIps: [parsed.publicIp] }))).Addresses?.[0]?.AllocationId;
15583
+ if (!allocationId) {
15584
+ this.logger.debug(`EIP ${physicalId} not found on lookup, skipping deletion`);
15585
+ return;
15586
+ }
15587
+ }
15588
+ try {
15589
+ await this.withDependencyViolationRetry(() => this.ec2Client.send(new ReleaseAddressCommand({ AllocationId: allocationId })), { description: `ReleaseAddress ${logicalId} (${allocationId})` });
15590
+ this.logger.debug(`Successfully deleted EIP ${logicalId}`);
15591
+ } catch (error) {
15592
+ if (this.isNotFoundError(error)) {
15593
+ assertRegionMatch(await this.ec2Client.config.region(), context?.expectedRegion, resourceType, logicalId, physicalId);
15594
+ this.logger.debug(`EIP ${physicalId} does not exist, skipping deletion`);
15595
+ return;
15596
+ }
15597
+ const cause = error instanceof Error ? error : void 0;
15598
+ throw new ProvisioningError(`Failed to delete EIP ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
15599
+ }
15600
+ }
15601
+ async getEipAttribute(physicalId, attributeName) {
15602
+ const { publicIp, allocationId } = this.parseEipPhysicalId(physicalId);
15603
+ if (attributeName === "AllocationId" && allocationId) return allocationId;
15604
+ if (attributeName === "PublicIp" && publicIp) return publicIp;
15605
+ const filter = allocationId ? { AllocationIds: [allocationId] } : { PublicIps: publicIp ? [publicIp] : [] };
15606
+ const addr = (await this.ec2Client.send(new DescribeAddressesCommand(filter))).Addresses?.[0];
15607
+ if (!addr) return void 0;
15608
+ switch (attributeName) {
15609
+ case "AllocationId": return addr.AllocationId;
15610
+ case "PublicIp": return addr.PublicIp;
15611
+ default: return;
15612
+ }
15613
+ }
15493
15614
  async createVpcGatewayAttachment(logicalId, resourceType, properties) {
15494
15615
  this.logger.debug(`Creating VPCGatewayAttachment ${logicalId}`);
15495
15616
  const vpcId = properties["VpcId"];
@@ -15554,7 +15675,9 @@ var EC2Provider = class {
15554
15675
  this.logger.debug(`Waiting for NatGateway ${natGatewayId} to reach available state...`);
15555
15676
  await waitUntilNatGatewayAvailable({
15556
15677
  client: this.ec2Client,
15557
- maxWaitTime: 900
15678
+ maxWaitTime: 900,
15679
+ minDelay: 5,
15680
+ maxDelay: 15
15558
15681
  }, { NatGatewayIds: [natGatewayId] });
15559
15682
  this.logger.debug(`NatGateway ${natGatewayId} is available`);
15560
15683
  } else this.logger.debug(`NatGateway ${natGatewayId} created (skipping available-state wait per --no-wait)`);
@@ -15588,7 +15711,9 @@ var EC2Provider = class {
15588
15711
  try {
15589
15712
  await waitUntilNatGatewayDeleted({
15590
15713
  client: this.ec2Client,
15591
- maxWaitTime: 900
15714
+ maxWaitTime: 900,
15715
+ minDelay: 5,
15716
+ maxDelay: 15
15592
15717
  }, { NatGatewayIds: [physicalId] });
15593
15718
  } catch (error) {
15594
15719
  this.logger.warn(`Wait for NatGateway ${physicalId} deletion did not complete cleanly: ${error instanceof Error ? error.message : String(error)} — proceeding with downstream delete steps`);
@@ -15996,7 +16121,9 @@ var EC2Provider = class {
15996
16121
  this.logger.debug(`Waiting for instance ${instanceId} to be running...`);
15997
16122
  await waitUntilInstanceRunning({
15998
16123
  client: this.ec2Client,
15999
- maxWaitTime: 300
16124
+ maxWaitTime: 300,
16125
+ minDelay: 5,
16126
+ maxDelay: 15
16000
16127
  }, { InstanceIds: [instanceId] });
16001
16128
  if (iamInstanceProfile) await this.ensureIamInstanceProfileAssociated(instanceId, iamInstanceProfile.arn, iamInstanceProfile.name, logicalId);
16002
16129
  const runningInstance = (await this.ec2Client.send(new DescribeInstancesCommand({ InstanceIds: [instanceId] }))).Reservations?.[0]?.Instances?.[0];
@@ -16245,7 +16372,9 @@ var EC2Provider = class {
16245
16372
  this.logger.debug(`Terminate requested for EC2 Instance ${logicalId}, waiting...`);
16246
16373
  await waitUntilInstanceTerminated({
16247
16374
  client: this.ec2Client,
16248
- maxWaitTime: 300
16375
+ maxWaitTime: 300,
16376
+ minDelay: 5,
16377
+ maxDelay: 15
16249
16378
  }, { InstanceIds: [physicalId] });
16250
16379
  this.logger.debug(`EC2 Instance ${logicalId} terminated: ${physicalId}`);
16251
16380
  return;
@@ -16700,7 +16829,7 @@ var EC2Provider = class {
16700
16829
  async withDependencyViolationRetry(operation, opts) {
16701
16830
  const totalBudgetMs = opts.totalBudgetMs ?? 6e5;
16702
16831
  const initialDelayMs = 5e3;
16703
- const maxDelayMs = 6e4;
16832
+ const maxDelayMs = 1e4;
16704
16833
  const startedAt = Date.now();
16705
16834
  let attempt = 0;
16706
16835
  let delay = initialDelayMs;
@@ -16748,7 +16877,7 @@ var EC2Provider = class {
16748
16877
  if (!(error instanceof Error)) return false;
16749
16878
  const message = error.message.toLowerCase();
16750
16879
  const name = error.name ?? "";
16751
- return message.includes("not found") || message.includes("does not exist") || message.includes("invalidparametervalue") || name === "InvalidVpcID.NotFound" || name === "InvalidSubnetID.NotFound" || name === "InvalidInternetGatewayID.NotFound" || name === "InvalidRouteTableID.NotFound" || name === "InvalidGroup.NotFound" || name === "InvalidAssociationID.NotFound" || name === "InvalidRoute.NotFound" || name === "InvalidInstanceID.NotFound" || name === "InvalidNetworkAclID.NotFound" || name === "InvalidNetworkAclEntry.NotFound";
16880
+ return message.includes("not found") || message.includes("does not exist") || message.includes("invalidparametervalue") || name === "InvalidVpcID.NotFound" || name === "InvalidSubnetID.NotFound" || name === "InvalidInternetGatewayID.NotFound" || name === "InvalidRouteTableID.NotFound" || name === "InvalidGroup.NotFound" || name === "InvalidAssociationID.NotFound" || name === "InvalidRoute.NotFound" || name === "InvalidInstanceID.NotFound" || name === "InvalidNetworkAclID.NotFound" || name === "InvalidNetworkAclEntry.NotFound" || name === "InvalidAllocationID.NotFound" || name === "InvalidAddressID.NotFound";
16752
16881
  }
16753
16882
  /**
16754
16883
  * Adopt an existing EC2 networking resource into cdkd state.
@@ -17289,6 +17418,19 @@ var EC2Provider = class {
17289
17418
  physicalId,
17290
17419
  attributes: {}
17291
17420
  } : null;
17421
+ case "AWS::EC2::EIP": {
17422
+ const { allocationId, publicIp } = this.parseEipPhysicalId(physicalId);
17423
+ const filter = allocationId ? { AllocationIds: [allocationId] } : { PublicIps: publicIp ? [publicIp] : [] };
17424
+ const addr = (await this.ec2Client.send(new DescribeAddressesCommand(filter))).Addresses?.[0];
17425
+ if (!addr?.AllocationId || !addr.PublicIp) return null;
17426
+ return {
17427
+ physicalId: this.eipPhysicalId(addr.PublicIp, addr.AllocationId),
17428
+ attributes: {
17429
+ AllocationId: addr.AllocationId,
17430
+ PublicIp: addr.PublicIp
17431
+ }
17432
+ };
17433
+ }
17292
17434
  default: return null;
17293
17435
  }
17294
17436
  } catch (error) {
@@ -20251,9 +20393,9 @@ var CloudFrontDistributionProvider = class {
20251
20393
  * Uses exponential backoff polling.
20252
20394
  */
20253
20395
  async waitForDistributionStable(distributionId, expectedEnabled) {
20254
- const maxAttempts = 60;
20396
+ const maxAttempts = 120;
20255
20397
  let delay = 5e3;
20256
- const maxDelay = 3e4;
20398
+ const maxDelay = 1e4;
20257
20399
  let interrupted = false;
20258
20400
  const sigintHandler = () => {
20259
20401
  interrupted = true;
@@ -24478,7 +24620,7 @@ var RDSProvider = class {
24478
24620
  this.logger.debug(`DBCluster ${dbClusterIdentifier} status: ${status}`);
24479
24621
  if (status === "available") return;
24480
24622
  await this.sleep(delay);
24481
- delay = Math.min(delay * 2, 3e4);
24623
+ delay = Math.min(delay * 2, 1e4);
24482
24624
  }
24483
24625
  throw new Error(`Timed out waiting for DBCluster ${dbClusterIdentifier} to become available`);
24484
24626
  }
@@ -24499,7 +24641,7 @@ var RDSProvider = class {
24499
24641
  throw error;
24500
24642
  }
24501
24643
  await this.sleep(delay);
24502
- delay = Math.min(delay * 2, 3e4);
24644
+ delay = Math.min(delay * 2, 1e4);
24503
24645
  }
24504
24646
  throw new Error(`Timed out waiting for DBCluster ${dbClusterIdentifier} to be deleted`);
24505
24647
  }
@@ -24514,7 +24656,7 @@ var RDSProvider = class {
24514
24656
  this.logger.debug(`DBInstance ${dbInstanceIdentifier} status: ${status}`);
24515
24657
  if (status === "available") return;
24516
24658
  await this.sleep(delay);
24517
- delay = Math.min(delay * 2, 3e4);
24659
+ delay = Math.min(delay * 2, 1e4);
24518
24660
  }
24519
24661
  throw new Error(`Timed out waiting for DBInstance ${dbInstanceIdentifier} to become available`);
24520
24662
  }
@@ -24535,7 +24677,7 @@ var RDSProvider = class {
24535
24677
  throw error;
24536
24678
  }
24537
24679
  await this.sleep(delay);
24538
- delay = Math.min(delay * 2, 3e4);
24680
+ delay = Math.min(delay * 2, 1e4);
24539
24681
  }
24540
24682
  throw new Error(`Timed out waiting for DBInstance ${dbInstanceIdentifier} to be deleted`);
24541
24683
  }
@@ -26077,7 +26219,7 @@ var DocDBProvider = class {
26077
26219
  this.logger.debug(`DocDB DBCluster ${dbClusterIdentifier} status: ${status}`);
26078
26220
  if (status === "available") return;
26079
26221
  await this.sleep(delay);
26080
- delay = Math.min(delay * 2, 3e4);
26222
+ delay = Math.min(delay * 2, 1e4);
26081
26223
  }
26082
26224
  throw new Error(`Timed out waiting for DocDB DBCluster ${dbClusterIdentifier} to become available`);
26083
26225
  }
@@ -26098,7 +26240,7 @@ var DocDBProvider = class {
26098
26240
  throw error;
26099
26241
  }
26100
26242
  await this.sleep(delay);
26101
- delay = Math.min(delay * 2, 3e4);
26243
+ delay = Math.min(delay * 2, 1e4);
26102
26244
  }
26103
26245
  throw new Error(`Timed out waiting for DocDB DBCluster ${dbClusterIdentifier} to be deleted`);
26104
26246
  }
@@ -26113,7 +26255,7 @@ var DocDBProvider = class {
26113
26255
  this.logger.debug(`DocDB DBInstance ${dbInstanceIdentifier} status: ${status}`);
26114
26256
  if (status === "available") return;
26115
26257
  await this.sleep(delay);
26116
- delay = Math.min(delay * 2, 3e4);
26258
+ delay = Math.min(delay * 2, 1e4);
26117
26259
  }
26118
26260
  throw new Error(`Timed out waiting for DocDB DBInstance ${dbInstanceIdentifier} to become available`);
26119
26261
  }
@@ -26131,7 +26273,7 @@ var DocDBProvider = class {
26131
26273
  throw error;
26132
26274
  }
26133
26275
  await this.sleep(delay);
26134
- delay = Math.min(delay * 2, 3e4);
26276
+ delay = Math.min(delay * 2, 1e4);
26135
26277
  }
26136
26278
  throw new Error(`Timed out waiting for DocDB DBInstance ${dbInstanceIdentifier} to be deleted`);
26137
26279
  }
@@ -26716,7 +26858,7 @@ var NeptuneProvider = class {
26716
26858
  this.logger.debug(`Neptune DBCluster ${dbClusterIdentifier} status: ${status}`);
26717
26859
  if (status === "available") return;
26718
26860
  await this.sleep(delay);
26719
- delay = Math.min(delay * 2, 3e4);
26861
+ delay = Math.min(delay * 2, 1e4);
26720
26862
  }
26721
26863
  throw new Error(`Timed out waiting for Neptune DBCluster ${dbClusterIdentifier} to become available`);
26722
26864
  }
@@ -26737,7 +26879,7 @@ var NeptuneProvider = class {
26737
26879
  throw error;
26738
26880
  }
26739
26881
  await this.sleep(delay);
26740
- delay = Math.min(delay * 2, 3e4);
26882
+ delay = Math.min(delay * 2, 1e4);
26741
26883
  }
26742
26884
  throw new Error(`Timed out waiting for Neptune DBCluster ${dbClusterIdentifier} to be deleted`);
26743
26885
  }
@@ -26752,7 +26894,7 @@ var NeptuneProvider = class {
26752
26894
  this.logger.debug(`Neptune DBInstance ${dbInstanceIdentifier} status: ${status}`);
26753
26895
  if (status === "available") return;
26754
26896
  await this.sleep(delay);
26755
- delay = Math.min(delay * 2, 3e4);
26897
+ delay = Math.min(delay * 2, 1e4);
26756
26898
  }
26757
26899
  throw new Error(`Timed out waiting for Neptune DBInstance ${dbInstanceIdentifier} to become available`);
26758
26900
  }
@@ -26770,7 +26912,7 @@ var NeptuneProvider = class {
26770
26912
  throw error;
26771
26913
  }
26772
26914
  await this.sleep(delay);
26773
- delay = Math.min(delay * 2, 3e4);
26915
+ delay = Math.min(delay * 2, 1e4);
26774
26916
  }
26775
26917
  throw new Error(`Timed out waiting for Neptune DBInstance ${dbInstanceIdentifier} to be deleted`);
26776
26918
  }
@@ -28530,7 +28672,7 @@ var ElastiCacheProvider = class {
28530
28672
  this.logger.debug(`CacheCluster ${cacheClusterId} status: ${status}`);
28531
28673
  if (status === "available") return;
28532
28674
  await this.sleep(delay);
28533
- delay = Math.min(delay * 2, 3e4);
28675
+ delay = Math.min(delay * 2, 1e4);
28534
28676
  }
28535
28677
  throw new Error(`Timed out waiting for CacheCluster ${cacheClusterId} to become available`);
28536
28678
  }
@@ -28551,7 +28693,7 @@ var ElastiCacheProvider = class {
28551
28693
  throw error;
28552
28694
  }
28553
28695
  await this.sleep(delay);
28554
- delay = Math.min(delay * 2, 3e4);
28696
+ delay = Math.min(delay * 2, 1e4);
28555
28697
  }
28556
28698
  throw new Error(`Timed out waiting for CacheCluster ${cacheClusterId} to be deleted`);
28557
28699
  }
@@ -42308,6 +42450,7 @@ function registerAllProviders(registry) {
42308
42450
  registry.register("AWS::EC2::VPC", ec2Provider);
42309
42451
  registry.register("AWS::EC2::Subnet", ec2Provider);
42310
42452
  registry.register("AWS::EC2::InternetGateway", ec2Provider);
42453
+ registry.register("AWS::EC2::EIP", ec2Provider);
42311
42454
  registry.register("AWS::EC2::VPCGatewayAttachment", ec2Provider);
42312
42455
  registry.register("AWS::EC2::NatGateway", ec2Provider);
42313
42456
  registry.register("AWS::EC2::RouteTable", ec2Provider);
@@ -61867,7 +62010,7 @@ function createMigrateCommand() {
61867
62010
  */
61868
62011
  function buildProgram() {
61869
62012
  const program = new Command();
61870
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.260.8");
62013
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.260.10");
61871
62014
  program.addCommand(createBootstrapCommand());
61872
62015
  program.addCommand(createSynthCommand());
61873
62016
  program.addCommand(createListCommand());