@go-to-k/cdkd 0.278.39 → 0.278.41

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 describeTypeWithThrottleRetry, $t as AwsClients, A as red, At as Synthesizer, B as isTerminationProtectionPropagationError, Bt as resolveUseCdkBootstrapAssets, C as isStatefulRecreateTargetSync, Ct as buildDockerImage, D as cyan, Dt as runDockerStreaming, E as bold, Et as runDockerForeground, F as ProviderRegistry, Ft as resolveAutoAssetStorage, G as normalizeAwsTagsToCfn, Gt as MIGRATE_TMP_PREFIX, H as cfnRefValueFromPhysicalId, Ht as warnDeprecatedNoPrefixCliFlag, I as findActionableSilentDrops, It as resolveCaptureObservedState, J as readConfigString, Jt as expectedOwnerParam, K as resolveExplicitPhysicalId, Kt as findLargeInlineResources, L as CloudControlProvider, Lt as resolveSkipPrefix, M as IAMRoleProvider, Mt as getDefaultStateBucketName, N as collectInlinePolicyNamesManagedBySiblings, Nt as getLegacyStateBucketName, O as gray, Ot as AssetManifestLoader, P as clearOnUpdateRemoval, Pt as resolveApp, Q as DiffCalculator, Qt as resolveBucketRegion, R as slowCcOperationTimeoutMs, Rt as resolveStateBucketWithDefault, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as validateContainerRepoName, T as formatResourceLine, Tn as withErrorHandling, Tt as getDockerCmd, U as refStateLookupFromResource, Ut as CFN_TEMPLATE_BODY_LIMIT, V as IntrinsicFunctionResolver, Vt as stateBucketExistenceConfirmed, W as WAFv2WebACLProvider, Wt as CFN_TEMPLATE_URL_LIMIT, X as requireConfigString, Xt as processStackMessages, Y as requireConfigArray, Yt as AssemblyReader, Z as applyRoleArnIfSet, _ as createPreDeleteFinalSnapshot, _n as ResourceUpdateNotSupportedError, _t as BOOTSTRAP_MARKER_PREFIX, a as DeploymentEventsStore, at as LockManager, b as unsupportedFinalSnapshotError, bt as parseBootstrapMarker, c as replayFailedOperations, cn as LocalInvokeBuildError$1, ct as shouldRetainResource, d as IMPLICIT_DELETE_DEPENDENCIES, dt as WorkGraph, en as getAwsClients, et as withRetry, f as computeImplicitDeleteEdges, fn as MissingCdkCliError, ft as buildAssetRedirectMap, g as ccRoutedFinalSnapshotError, gn as ResourceTimeoutError, gt as AssetModeResolver, h as buildFinalSnapshotIdentifier, hn as ProvisioningError, ht as rewriteTemplateAssetReferences, i as DeploymentEventsReader, in as CdkdError, it as TemplateParser, j as yellow, jt as synthesisStatusMessage, k as green, kt as getDockerImageBySourceHash, l as replayRollback, ln as LocalMigrateError, lt as AssetPublisher, m as PRE_DELETE_SNAPSHOT_TYPES, mn as PartialFailureError, mt as loadPublishableAssetManifest, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as setAwsClients, nt as isThrottlingError, o as planFailedOps, ot as S3StateBackend, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as NestedStackChildDirectDestroyError, pt as createAssetRedirectResolver, q as assertRegionMatch, qt as uploadCfnTemplate, r as DeployEngine, rt as DagBuilder, s as planRollback, sn as DeployCancelledError, st as rebuildClientForBucketRegion, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resetAwsClients, tt as isRetryableTransientError, u as withResourceDeadline, un as LocalStartServiceError, ut as stringifyValue, v as isFinalSnapshotError, vn as StackHasActiveImportsError, vt as ensureAssetStorage, w as renderStatefulReason, wn as normalizeAwsError, wt as formatDockerLoginError, x as extractDeploymentEventError, xt as validateAssetBucketName, y as refusesFinalSnapshot, yn as StackTerminationProtectionError, yt as getBootstrapMarkerKey, z as disableInstanceApiTermination, zt as resolveStateBucketWithDefaultAndSource } from "./deploy-engine-BJVpWi-B.js";
2
+ import { $ as describeTypeWithThrottleRetry, $t as AwsClients, A as red, At as Synthesizer, B as isTerminationProtectionPropagationError, Bt as resolveUseCdkBootstrapAssets, C as isStatefulRecreateTargetSync, Ct as buildDockerImage, D as cyan, Dt as runDockerStreaming, E as bold, Et as runDockerForeground, F as ProviderRegistry, Ft as resolveAutoAssetStorage, G as normalizeAwsTagsToCfn, Gt as MIGRATE_TMP_PREFIX, H as cfnRefValueFromPhysicalId, Ht as warnDeprecatedNoPrefixCliFlag, I as findActionableSilentDrops, It as resolveCaptureObservedState, J as readConfigString, Jt as expectedOwnerParam, K as resolveExplicitPhysicalId, Kt as findLargeInlineResources, L as CloudControlProvider, Lt as resolveSkipPrefix, M as IAMRoleProvider, Mt as getDefaultStateBucketName, N as collectInlinePolicyNamesManagedBySiblings, Nt as getLegacyStateBucketName, O as gray, Ot as AssetManifestLoader, P as clearOnUpdateRemoval, Pt as resolveApp, Q as DiffCalculator, Qt as resolveBucketRegion, R as slowCcOperationTimeoutMs, Rt as resolveStateBucketWithDefault, S as MULTI_REGION_RECREATE_BLOCKED_TYPES, St as validateContainerRepoName, T as formatResourceLine, Tn as withErrorHandling, Tt as getDockerCmd, U as refStateLookupFromResource, Ut as CFN_TEMPLATE_BODY_LIMIT, V as IntrinsicFunctionResolver, Vt as stateBucketExistenceConfirmed, W as WAFv2WebACLProvider, Wt as CFN_TEMPLATE_URL_LIMIT, X as requireConfigString, Xt as processStackMessages, Y as requireConfigArray, Yt as AssemblyReader, Z as applyRoleArnIfSet, _ as createPreDeleteFinalSnapshot, _n as ResourceUpdateNotSupportedError, _t as BOOTSTRAP_MARKER_PREFIX, a as DeploymentEventsStore, at as LockManager, b as unsupportedFinalSnapshotError, bt as parseBootstrapMarker, c as replayFailedOperations, cn as LocalInvokeBuildError$1, ct as shouldRetainResource, d as IMPLICIT_DELETE_DEPENDENCIES, dt as WorkGraph, en as getAwsClients, et as withRetry, f as computeImplicitDeleteEdges, fn as MissingCdkCliError, ft as buildAssetRedirectMap, g as ccRoutedFinalSnapshotError, gn as ResourceTimeoutError, gt as AssetModeResolver, h as buildFinalSnapshotIdentifier, hn as ProvisioningError, ht as rewriteTemplateAssetReferences, i as DeploymentEventsReader, in as CdkdError, it as TemplateParser, j as yellow, jt as synthesisStatusMessage, k as green, kt as getDockerImageBySourceHash, l as replayRollback, ln as LocalMigrateError, lt as AssetPublisher, m as PRE_DELETE_SNAPSHOT_TYPES, mn as PartialFailureError, mt as loadPublishableAssetManifest, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as setAwsClients, nt as isThrottlingError, o as planFailedOps, ot as S3StateBackend, p as ATOMIC_FINAL_SNAPSHOT_TYPES, pn as NestedStackChildDirectDestroyError, pt as createAssetRedirectResolver, q as assertRegionMatch, qt as uploadCfnTemplate, r as DeployEngine, rt as DagBuilder, s as planRollback, sn as DeployCancelledError, st as rebuildClientForBucketRegion, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as resetAwsClients, tt as isRetryableTransientError, u as withResourceDeadline, un as LocalStartServiceError, ut as stringifyValue, v as isFinalSnapshotError, vn as StackHasActiveImportsError, vt as ensureAssetStorage, w as renderStatefulReason, wn as normalizeAwsError, wt as formatDockerLoginError, x as extractDeploymentEventError, xt as validateAssetBucketName, y as refusesFinalSnapshot, yn as StackTerminationProtectionError, yt as getBootstrapMarkerKey, z as disableInstanceApiTermination, zt as resolveStateBucketWithDefaultAndSource } from "./deploy-engine-CiMIsVFt.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-CJJC8plY.js";
4
+ import { t as ASGProvider } from "./asg-provider-CoBHZKJt.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, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, 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";
@@ -5109,7 +5109,8 @@ var S3BucketProvider = class S3BucketProvider {
5109
5109
  });
5110
5110
  await this.s3Client.send(new PutBucketLifecycleConfigurationCommand({
5111
5111
  Bucket: bucketName,
5112
- LifecycleConfiguration: { Rules: rules }
5112
+ LifecycleConfiguration: { Rules: rules },
5113
+ TransitionDefaultMinimumObjectSize: lifecycleConfig["TransitionDefaultMinimumObjectSize"]
5113
5114
  }));
5114
5115
  this.logger.debug(`Applied lifecycle configuration to bucket ${bucketName}`);
5115
5116
  }
@@ -5146,12 +5147,14 @@ var S3BucketProvider = class S3BucketProvider {
5146
5147
  if (!Array.isArray(encryptionConfig?.ServerSideEncryptionConfiguration)) throw new Error(`BucketEncryption.ServerSideEncryptionConfiguration must be an array (got ${encryptionConfig?.ServerSideEncryptionConfiguration === void 0 ? "undefined" : typeof encryptionConfig.ServerSideEncryptionConfiguration}) — check for an unresolved intrinsic or a mis-nested template value`);
5147
5148
  const rules = encryptionConfig.ServerSideEncryptionConfiguration.map((rule) => {
5148
5149
  const byDefault = rule["ServerSideEncryptionByDefault"];
5150
+ const blocked = rule["BlockedEncryptionTypes"];
5149
5151
  return {
5150
5152
  ApplyServerSideEncryptionByDefault: byDefault ? {
5151
5153
  SSEAlgorithm: byDefault["SSEAlgorithm"],
5152
5154
  KMSMasterKeyID: byDefault["KMSMasterKeyID"]
5153
5155
  } : void 0,
5154
- BucketKeyEnabled: rule["BucketKeyEnabled"]
5156
+ BucketKeyEnabled: rule["BucketKeyEnabled"],
5157
+ BlockedEncryptionTypes: blocked != null && blocked["EncryptionType"] !== void 0 ? { EncryptionType: blocked["EncryptionType"] } : void 0
5155
5158
  };
5156
5159
  });
5157
5160
  await this.s3Client.send(new PutBucketEncryptionCommand({
@@ -5178,12 +5181,21 @@ var S3BucketProvider = class S3BucketProvider {
5178
5181
  this.logger.debug(`Cleared logging configuration on bucket ${bucketName}`);
5179
5182
  return;
5180
5183
  }
5184
+ const loggingEnabled = {
5185
+ TargetBucket: destinationBucket,
5186
+ TargetPrefix: readConfigString(loggingConfig, "LogFilePrefix", "", "AWS::S3::Bucket LoggingConfiguration")
5187
+ };
5188
+ const keyFormat = loggingConfig["TargetObjectKeyFormat"];
5189
+ if (keyFormat != null) {
5190
+ const sdkKeyFormat = {};
5191
+ if (keyFormat["SimplePrefix"] !== void 0) sdkKeyFormat.SimplePrefix = {};
5192
+ const partitioned = keyFormat["PartitionedPrefix"];
5193
+ if (partitioned != null && partitioned["PartitionDateSource"] !== void 0) sdkKeyFormat.PartitionedPrefix = { PartitionDateSource: partitioned["PartitionDateSource"] };
5194
+ if (Object.keys(sdkKeyFormat).length > 0) loggingEnabled.TargetObjectKeyFormat = sdkKeyFormat;
5195
+ }
5181
5196
  await this.s3Client.send(new PutBucketLoggingCommand({
5182
5197
  Bucket: bucketName,
5183
- BucketLoggingStatus: { LoggingEnabled: {
5184
- TargetBucket: destinationBucket,
5185
- TargetPrefix: readConfigString(loggingConfig, "LogFilePrefix", "", "AWS::S3::Bucket LoggingConfiguration")
5186
- } }
5198
+ BucketLoggingStatus: { LoggingEnabled: loggingEnabled }
5187
5199
  }));
5188
5200
  this.logger.debug(`Applied logging configuration to bucket ${bucketName}`);
5189
5201
  }
@@ -5454,6 +5466,54 @@ var S3BucketProvider = class S3BucketProvider {
5454
5466
  * - Rules[] (replication rules)
5455
5467
  * SDK: PutBucketReplication with ReplicationConfiguration
5456
5468
  */
5469
+ /**
5470
+ * Build the SDK `Destination` for one replication rule.
5471
+ *
5472
+ * Before issue #1495 this was an inline literal carrying `Bucket` / `Account`
5473
+ * / `StorageClass` only, so FOUR whole sub-blocks the CFn schema declares
5474
+ * were accepted from the template and never sent — each one silently:
5475
+ *
5476
+ * - `AccessControlTranslation` — cross-account replication with owner
5477
+ * override; without it the replicas keep the SOURCE account's ownership.
5478
+ * - `EncryptionConfiguration.ReplicaKmsKeyID` — the replica-side SSE-KMS key;
5479
+ * dropped, the replicas are not encrypted with the declared key. CDK's
5480
+ * `aws-s3` L2 emits this for a `replicationRules` entry with a KMS key.
5481
+ * - `ReplicationTime` + `Metrics` — S3 Replication Time Control. RTC is a
5482
+ * billed SLA feature and both blocks are required to enable it, so a
5483
+ * template asking for RTC got plain asynchronous replication.
5484
+ *
5485
+ * CFn and the SDK spell every member identically here (verified against
5486
+ * `@aws-sdk/client-s3`'s `Destination`), but the block is assembled member by
5487
+ * member rather than forwarded so a CFn-only member cannot ride through.
5488
+ */
5489
+ buildReplicationDestination(dest) {
5490
+ const sdkDest = {
5491
+ Bucket: dest["Bucket"],
5492
+ Account: dest["Account"],
5493
+ StorageClass: dest["StorageClass"]
5494
+ };
5495
+ const acl = dest["AccessControlTranslation"];
5496
+ if (acl != null && acl["Owner"] !== void 0) sdkDest["AccessControlTranslation"] = { Owner: acl["Owner"] };
5497
+ const encryption = dest["EncryptionConfiguration"];
5498
+ if (encryption != null && encryption["ReplicaKmsKeyID"] !== void 0) sdkDest["EncryptionConfiguration"] = { ReplicaKmsKeyID: encryption["ReplicaKmsKeyID"] };
5499
+ const replicationTime = dest["ReplicationTime"];
5500
+ if (replicationTime != null) {
5501
+ const time = replicationTime["Time"];
5502
+ const rt = {};
5503
+ if (replicationTime["Status"] !== void 0) rt["Status"] = replicationTime["Status"];
5504
+ if (time != null && time["Minutes"] !== void 0) rt["Time"] = { Minutes: time["Minutes"] };
5505
+ if (Object.keys(rt).length > 0) sdkDest["ReplicationTime"] = rt;
5506
+ }
5507
+ const metrics = dest["Metrics"];
5508
+ if (metrics != null) {
5509
+ const threshold = metrics["EventThreshold"];
5510
+ const m = {};
5511
+ if (metrics["Status"] !== void 0) m["Status"] = metrics["Status"];
5512
+ if (threshold != null && threshold["Minutes"] !== void 0) m["EventThreshold"] = { Minutes: threshold["Minutes"] };
5513
+ if (Object.keys(m).length > 0) sdkDest["Metrics"] = m;
5514
+ }
5515
+ return sdkDest;
5516
+ }
5457
5517
  async applyReplicationConfiguration(bucketName, replConfig) {
5458
5518
  const rules = replConfig["Rules"];
5459
5519
  await this.s3Client.send(new PutBucketReplicationCommand({
@@ -5466,12 +5526,17 @@ var S3BucketProvider = class S3BucketProvider {
5466
5526
  ID: rule["Id"],
5467
5527
  Status: readConfigString(rule, "Status", "Enabled", "AWS::S3::Bucket ReplicationConfiguration.Rules[]"),
5468
5528
  Priority: rule["Priority"],
5469
- Destination: {
5470
- Bucket: dest["Bucket"],
5471
- Account: dest["Account"],
5472
- StorageClass: dest["StorageClass"]
5473
- }
5529
+ Destination: this.buildReplicationDestination(dest)
5474
5530
  };
5531
+ const criteria = rule["SourceSelectionCriteria"];
5532
+ if (criteria != null) {
5533
+ const sdkCriteria = {};
5534
+ const replicaMods = criteria["ReplicaModifications"];
5535
+ if (replicaMods != null && replicaMods["Status"] !== void 0) sdkCriteria["ReplicaModifications"] = { Status: replicaMods["Status"] };
5536
+ const sseKms = criteria["SseKmsEncryptedObjects"];
5537
+ if (sseKms != null && sseKms["Status"] !== void 0) sdkCriteria["SseKmsEncryptedObjects"] = { Status: sseKms["Status"] };
5538
+ if (Object.keys(sdkCriteria).length > 0) sdkRule["SourceSelectionCriteria"] = sdkCriteria;
5539
+ }
5475
5540
  const filter = rule["Filter"];
5476
5541
  if (filter) {
5477
5542
  const and = filter["And"];
@@ -5987,6 +6052,7 @@ var S3BucketProvider = class S3BucketProvider {
5987
6052
  out["ServerSideEncryptionByDefault"] = sseOut;
5988
6053
  }
5989
6054
  if (rule.BucketKeyEnabled !== void 0) out["BucketKeyEnabled"] = rule.BucketKeyEnabled;
6055
+ if (rule.BlockedEncryptionTypes?.EncryptionType !== void 0) out["BlockedEncryptionTypes"] = { EncryptionType: rule.BlockedEncryptionTypes.EncryptionType };
5990
6056
  return out;
5991
6057
  }) };
5992
6058
  } catch (err) {
@@ -6023,59 +6089,66 @@ var S3BucketProvider = class S3BucketProvider {
6023
6089
  }
6024
6090
  async readLifecycle(bucket) {
6025
6091
  try {
6026
- return { Rules: ((await this.s3Client.send(new GetBucketLifecycleConfigurationCommand({ Bucket: bucket }))).Rules ?? []).map((r) => {
6027
- const out = {};
6028
- if (r.ID !== void 0) out["Id"] = r.ID;
6029
- if (r.Status !== void 0) out["Status"] = r.Status;
6030
- if (r.Prefix !== void 0) out["Prefix"] = r.Prefix;
6031
- if (r.Expiration) {
6032
- const exp = {};
6033
- if (r.Expiration.Days !== void 0) exp["Days"] = r.Expiration.Days;
6034
- if (r.Expiration.Date !== void 0) exp["Date"] = r.Expiration.Date.toISOString();
6035
- if (r.Expiration.ExpiredObjectDeleteMarker !== void 0) exp["ExpiredObjectDeleteMarker"] = r.Expiration.ExpiredObjectDeleteMarker;
6036
- out["Expiration"] = exp;
6037
- }
6038
- if (r.Transitions && r.Transitions.length > 0) out["Transitions"] = r.Transitions.map((t) => {
6039
- const item = {};
6040
- if (t.Days !== void 0) item["TransitionInDays"] = t.Days;
6041
- if (t.Date !== void 0) item["TransitionDate"] = t.Date.toISOString();
6042
- if (t.StorageClass !== void 0) item["StorageClass"] = t.StorageClass;
6043
- return item;
6044
- });
6045
- if (r.NoncurrentVersionExpiration) {
6046
- const nve = {};
6047
- if (r.NoncurrentVersionExpiration.NoncurrentDays !== void 0) nve["NoncurrentDays"] = r.NoncurrentVersionExpiration.NoncurrentDays;
6048
- if (r.NoncurrentVersionExpiration.NewerNoncurrentVersions !== void 0) nve["NewerNoncurrentVersions"] = r.NoncurrentVersionExpiration.NewerNoncurrentVersions;
6049
- out["NoncurrentVersionExpiration"] = nve;
6050
- }
6051
- if (r.NoncurrentVersionTransitions && r.NoncurrentVersionTransitions.length > 0) out["NoncurrentVersionTransitions"] = r.NoncurrentVersionTransitions.map((nvt) => {
6052
- const item = {};
6053
- if (nvt.NoncurrentDays !== void 0) item["TransitionInDays"] = nvt.NoncurrentDays;
6054
- if (nvt.StorageClass !== void 0) item["StorageClass"] = nvt.StorageClass;
6055
- if (nvt.NewerNoncurrentVersions !== void 0) item["NewerNoncurrentVersions"] = nvt.NewerNoncurrentVersions;
6056
- return item;
6057
- });
6058
- if (r.AbortIncompleteMultipartUpload) out["AbortIncompleteMultipartUpload"] = { DaysAfterInitiation: r.AbortIncompleteMultipartUpload.DaysAfterInitiation };
6059
- if (r.Filter) {
6060
- const f = r.Filter;
6061
- const cfnFilter = {};
6062
- const and = f["And"];
6063
- const tagOnly = f["Tag"];
6064
- if (and) {
6065
- if (and["Prefix"] !== void 0) cfnFilter["Prefix"] = and["Prefix"];
6066
- if (and["Tags"]) cfnFilter["TagFilters"] = and["Tags"];
6067
- if (and["ObjectSizeGreaterThan"] !== void 0) cfnFilter["ObjectSizeGreaterThan"] = and["ObjectSizeGreaterThan"];
6068
- if (and["ObjectSizeLessThan"] !== void 0) cfnFilter["ObjectSizeLessThan"] = and["ObjectSizeLessThan"];
6069
- } else if (tagOnly) cfnFilter["TagFilters"] = [tagOnly];
6070
- else {
6071
- if (f["Prefix"] !== void 0) cfnFilter["Prefix"] = f["Prefix"];
6072
- if (f["ObjectSizeGreaterThan"] !== void 0) cfnFilter["ObjectSizeGreaterThan"] = f["ObjectSizeGreaterThan"];
6073
- if (f["ObjectSizeLessThan"] !== void 0) cfnFilter["ObjectSizeLessThan"] = f["ObjectSizeLessThan"];
6092
+ const resp = await this.s3Client.send(new GetBucketLifecycleConfigurationCommand({ Bucket: bucket }));
6093
+ const rules = resp.Rules ?? [];
6094
+ const lifecycleOut = {};
6095
+ if (resp.TransitionDefaultMinimumObjectSize !== void 0) lifecycleOut["TransitionDefaultMinimumObjectSize"] = resp.TransitionDefaultMinimumObjectSize;
6096
+ return {
6097
+ ...lifecycleOut,
6098
+ Rules: rules.map((r) => {
6099
+ const out = {};
6100
+ if (r.ID !== void 0) out["Id"] = r.ID;
6101
+ if (r.Status !== void 0) out["Status"] = r.Status;
6102
+ if (r.Prefix !== void 0) out["Prefix"] = r.Prefix;
6103
+ if (r.Expiration) {
6104
+ const exp = {};
6105
+ if (r.Expiration.Days !== void 0) exp["Days"] = r.Expiration.Days;
6106
+ if (r.Expiration.Date !== void 0) exp["Date"] = r.Expiration.Date.toISOString();
6107
+ if (r.Expiration.ExpiredObjectDeleteMarker !== void 0) exp["ExpiredObjectDeleteMarker"] = r.Expiration.ExpiredObjectDeleteMarker;
6108
+ out["Expiration"] = exp;
6074
6109
  }
6075
- if (Object.keys(cfnFilter).length > 0) out["Filter"] = cfnFilter;
6076
- }
6077
- return out;
6078
- }) };
6110
+ if (r.Transitions && r.Transitions.length > 0) out["Transitions"] = r.Transitions.map((t) => {
6111
+ const item = {};
6112
+ if (t.Days !== void 0) item["TransitionInDays"] = t.Days;
6113
+ if (t.Date !== void 0) item["TransitionDate"] = t.Date.toISOString();
6114
+ if (t.StorageClass !== void 0) item["StorageClass"] = t.StorageClass;
6115
+ return item;
6116
+ });
6117
+ if (r.NoncurrentVersionExpiration) {
6118
+ const nve = {};
6119
+ if (r.NoncurrentVersionExpiration.NoncurrentDays !== void 0) nve["NoncurrentDays"] = r.NoncurrentVersionExpiration.NoncurrentDays;
6120
+ if (r.NoncurrentVersionExpiration.NewerNoncurrentVersions !== void 0) nve["NewerNoncurrentVersions"] = r.NoncurrentVersionExpiration.NewerNoncurrentVersions;
6121
+ out["NoncurrentVersionExpiration"] = nve;
6122
+ }
6123
+ if (r.NoncurrentVersionTransitions && r.NoncurrentVersionTransitions.length > 0) out["NoncurrentVersionTransitions"] = r.NoncurrentVersionTransitions.map((nvt) => {
6124
+ const item = {};
6125
+ if (nvt.NoncurrentDays !== void 0) item["TransitionInDays"] = nvt.NoncurrentDays;
6126
+ if (nvt.StorageClass !== void 0) item["StorageClass"] = nvt.StorageClass;
6127
+ if (nvt.NewerNoncurrentVersions !== void 0) item["NewerNoncurrentVersions"] = nvt.NewerNoncurrentVersions;
6128
+ return item;
6129
+ });
6130
+ if (r.AbortIncompleteMultipartUpload) out["AbortIncompleteMultipartUpload"] = { DaysAfterInitiation: r.AbortIncompleteMultipartUpload.DaysAfterInitiation };
6131
+ if (r.Filter) {
6132
+ const f = r.Filter;
6133
+ const cfnFilter = {};
6134
+ const and = f["And"];
6135
+ const tagOnly = f["Tag"];
6136
+ if (and) {
6137
+ if (and["Prefix"] !== void 0) cfnFilter["Prefix"] = and["Prefix"];
6138
+ if (and["Tags"]) cfnFilter["TagFilters"] = and["Tags"];
6139
+ if (and["ObjectSizeGreaterThan"] !== void 0) cfnFilter["ObjectSizeGreaterThan"] = and["ObjectSizeGreaterThan"];
6140
+ if (and["ObjectSizeLessThan"] !== void 0) cfnFilter["ObjectSizeLessThan"] = and["ObjectSizeLessThan"];
6141
+ } else if (tagOnly) cfnFilter["TagFilters"] = [tagOnly];
6142
+ else {
6143
+ if (f["Prefix"] !== void 0) cfnFilter["Prefix"] = f["Prefix"];
6144
+ if (f["ObjectSizeGreaterThan"] !== void 0) cfnFilter["ObjectSizeGreaterThan"] = f["ObjectSizeGreaterThan"];
6145
+ if (f["ObjectSizeLessThan"] !== void 0) cfnFilter["ObjectSizeLessThan"] = f["ObjectSizeLessThan"];
6146
+ }
6147
+ if (Object.keys(cfnFilter).length > 0) out["Filter"] = cfnFilter;
6148
+ }
6149
+ return out;
6150
+ })
6151
+ };
6079
6152
  } catch (err) {
6080
6153
  if (err.name === "NoSuchLifecycleConfiguration") return { Rules: [] };
6081
6154
  throw err;
@@ -6141,6 +6214,17 @@ var S3BucketProvider = class S3BucketProvider {
6141
6214
  const out = {};
6142
6215
  if (resp.LoggingEnabled.TargetBucket !== void 0) out["DestinationBucketName"] = resp.LoggingEnabled.TargetBucket;
6143
6216
  if (resp.LoggingEnabled.TargetPrefix !== void 0) out["LogFilePrefix"] = resp.LoggingEnabled.TargetPrefix;
6217
+ const keyFormat = resp.LoggingEnabled.TargetObjectKeyFormat;
6218
+ if (keyFormat) {
6219
+ const cfnKeyFormat = {};
6220
+ if (keyFormat.SimplePrefix !== void 0) cfnKeyFormat["SimplePrefix"] = {};
6221
+ if (keyFormat.PartitionedPrefix) {
6222
+ const partitioned = {};
6223
+ if (keyFormat.PartitionedPrefix.PartitionDateSource !== void 0) partitioned["PartitionDateSource"] = keyFormat.PartitionedPrefix.PartitionDateSource;
6224
+ cfnKeyFormat["PartitionedPrefix"] = partitioned;
6225
+ }
6226
+ if (Object.keys(cfnKeyFormat).length > 0) out["TargetObjectKeyFormat"] = cfnKeyFormat;
6227
+ }
6144
6228
  return out;
6145
6229
  }
6146
6230
  async readNotification(bucket) {
@@ -6201,8 +6285,34 @@ var S3BucketProvider = class S3BucketProvider {
6201
6285
  if (r.Destination.Bucket !== void 0) d["Bucket"] = r.Destination.Bucket;
6202
6286
  if (r.Destination.Account !== void 0) d["Account"] = r.Destination.Account;
6203
6287
  if (r.Destination.StorageClass !== void 0) d["StorageClass"] = r.Destination.StorageClass;
6288
+ const acl = r.Destination.AccessControlTranslation;
6289
+ if (acl?.Owner !== void 0) d["AccessControlTranslation"] = { Owner: acl.Owner };
6290
+ const enc = r.Destination.EncryptionConfiguration;
6291
+ if (enc?.ReplicaKmsKeyID !== void 0) d["EncryptionConfiguration"] = { ReplicaKmsKeyID: enc.ReplicaKmsKeyID };
6292
+ const rtIn = r.Destination.ReplicationTime;
6293
+ if (rtIn) {
6294
+ const rt = {};
6295
+ if (rtIn.Status !== void 0) rt["Status"] = rtIn.Status;
6296
+ if (rtIn.Time?.Minutes !== void 0) rt["Time"] = { Minutes: rtIn.Time.Minutes };
6297
+ if (Object.keys(rt).length > 0) d["ReplicationTime"] = rt;
6298
+ }
6299
+ const metricsIn = r.Destination.Metrics;
6300
+ if (metricsIn) {
6301
+ const m = {};
6302
+ if (metricsIn.Status !== void 0) m["Status"] = metricsIn.Status;
6303
+ if (metricsIn.EventThreshold?.Minutes !== void 0) m["EventThreshold"] = { Minutes: metricsIn.EventThreshold.Minutes };
6304
+ if (Object.keys(m).length > 0) d["Metrics"] = m;
6305
+ }
6204
6306
  ruleOut["Destination"] = d;
6205
6307
  }
6308
+ if (r.SourceSelectionCriteria) {
6309
+ const criteria = {};
6310
+ const replicaMods = r.SourceSelectionCriteria.ReplicaModifications;
6311
+ if (replicaMods?.Status !== void 0) criteria["ReplicaModifications"] = { Status: replicaMods.Status };
6312
+ const sseKms = r.SourceSelectionCriteria.SseKmsEncryptedObjects;
6313
+ if (sseKms?.Status !== void 0) criteria["SseKmsEncryptedObjects"] = { Status: sseKms.Status };
6314
+ if (Object.keys(criteria).length > 0) ruleOut["SourceSelectionCriteria"] = criteria;
6315
+ }
6206
6316
  if (r.Filter) {
6207
6317
  const f = r.Filter;
6208
6318
  const cfnFilter = {};
@@ -6218,7 +6328,7 @@ var S3BucketProvider = class S3BucketProvider {
6218
6328
  else if (f["Prefix"] !== void 0) cfnFilter["Prefix"] = f["Prefix"];
6219
6329
  if (Object.keys(cfnFilter).length > 0) ruleOut["Filter"] = cfnFilter;
6220
6330
  }
6221
- if (r.DeleteMarkerReplication) ruleOut["DeleteMarkerReplication"] = { Status: r.DeleteMarkerReplication.Status };
6331
+ if (r.DeleteMarkerReplication?.Status !== void 0) ruleOut["DeleteMarkerReplication"] = { Status: r.DeleteMarkerReplication.Status };
6222
6332
  return ruleOut;
6223
6333
  });
6224
6334
  return out;
@@ -26676,10 +26786,11 @@ var ELBv2Provider = class {
26676
26786
  try {
26677
26787
  const rawMatcher = properties["Matcher"];
26678
26788
  const matcher = rawMatcher && (rawMatcher.HttpCode !== void 0 || rawMatcher.GrpcCode !== void 0) ? rawMatcher : void 0;
26789
+ const healthCheckPort = String(properties["Protocol"] ?? previousProperties["Protocol"] ?? "").toUpperCase() === "GENEVE" ? properties["HealthCheckPort"] : clearOnUpdateRemoval(properties["HealthCheckPort"], previousProperties["HealthCheckPort"], "traffic-port");
26679
26790
  await this.getClient().send(new ModifyTargetGroupCommand({
26680
26791
  TargetGroupArn: physicalId,
26681
26792
  HealthCheckProtocol: properties["HealthCheckProtocol"],
26682
- HealthCheckPort: properties["HealthCheckPort"],
26793
+ HealthCheckPort: healthCheckPort,
26683
26794
  HealthCheckPath: properties["HealthCheckPath"],
26684
26795
  HealthCheckEnabled: properties["HealthCheckEnabled"] !== void 0 ? Boolean(properties["HealthCheckEnabled"]) : void 0,
26685
26796
  HealthCheckIntervalSeconds: properties["HealthCheckIntervalSeconds"] !== void 0 ? Number(properties["HealthCheckIntervalSeconds"]) : void 0,
@@ -67218,7 +67329,7 @@ function createMigrateCommand() {
67218
67329
  */
67219
67330
  function buildProgram() {
67220
67331
  const program = new Command();
67221
- program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.39");
67332
+ program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.278.41");
67222
67333
  program.hook("preAction", (_thisCommand, actionCommand) => {
67223
67334
  const { profile } = actionCommand.optsWithGlobals();
67224
67335
  if (profile !== void 0) process.env["AWS_PROFILE"] = profile;