@go-to-k/cdkd 0.285.12 → 0.285.14

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.
@@ -1,8 +1,8 @@
1
- import { $ as DEFAULT_STATE_PREFIX, $n as resolveUseCdkBootstrapAssets, $t as isSingleDynamicReferenceToken, A as bold, An as validateAssetBucketName, Ar as LocalStartServiceError, At as requireConfigObject, B as secretBearingStateKeyWarning, Bn as runDockerStreaming, Bt as DiffCalculator, C as unsupportedFinalSnapshotError, Cn as BOOTSTRAP_MARKER_PREFIX, Ct as assertRegionMatch, D as isStatefulRecreateTargetSync, Dn as isCrossRegionRedirect, Dr as DynamicReferenceRegionAmbiguousError, Dt as readConfigString, E as MULTI_REGION_RECREATE_BLOCKED_TYPES, En as getBootstrapMarkerKey, Er as DeployCancelledError, Et as configStringRefusal, F as yellow, Fn as dockerSpawnEnvWithSensitive, Fr as ProvisioningError, Ft as s3BucketDomainName, G as clearOnUpdateRemoval, Gn as getDefaultStateBucketName, Gr as withErrorHandling, Gt as TemplateParser, H as getCurrentResourceSecrets, Hn as getDockerImageBySourceHash, Ht as describeTypeWithThrottleRetry, I as collectDeclaredOutputNames, In as formatDockerLoginError, Ir as ResourceTimeoutError, It as s3BucketDualStackDomainName, J as findSilentDropProperties, Jn as resolveAutoAssetStorage, Jr as isThrottlingError, Jt as TEMPLATE_SOURCED_RULES, K as ProviderRegistry, Kn as getLegacyStateBucketName, Kr as isMarkedNonRetryable, Kt as STATE_SOURCED_CROSS_GENERATION_RULES, L as collectPublishedOutputNames, Ln as getDockerCmd, Lr as ResourceUpdateNotSupportedError, Lt as s3BucketRegionalDomainName, M as gray, Mn as buildDenyExternalAccessPolicy, Mr as MissingCdkCliError, Mt as classifyReplaySecretRegion, N as green, Nn as describeAwsFailure, Nr as NestedStackChildDirectDestroyError, Nt as producerRegionsFromState, O as renderStatefulReason, On as parseBootstrapMarker, Or as LocalInvokeBuildError$1, Ot as replayWarn, P as red, Pn as buildDockerImage, Pr as PartialFailureError, Pt as s3BucketArn, Q as CUSTOM_RESOURCE_RESPONSE_PREFIX, Qn as resolveStateBucketWithDefaultAndSource, Qr as retryClassificationText, Qt as errorCauseChain, R as exportAliasCollisionScrubWarning, Rn as partitionSensitiveEnv, Rr as StackHasActiveImportsError, Rt as s3BucketWebsiteUrl, S as refusesFinalSnapshot, Sn as AssetModeResolver, Sr as CdkdError, St as resolveExplicitPhysicalId, T as extractDeploymentEventError, Tn as ensureAssetStorage, Tt as configBooleanRefusal, U as IAMRoleProvider, Un as Synthesizer, Ut as withRetry, V as stateKeySecretExposure, Vn as AssetManifestLoader, Vt as INTRINSIC_KEYS, W as collectInlinePolicyNamesManagedBySiblings, Wn as synthesisStatusMessage, Wr as normalizeAwsError, Wt as DagBuilder, X as maskDeep, Xn as resolveSkipPrefix, Xr as markNonRetryable, Xt as createSecretMasker, Y as createMaskedRetryLogger, Yn as resolveCaptureObservedState, Yr as isTransientServerError, Yt as carriesSecretMask, Z as maskerOrIdentity, Zn as resolveStateBucketWithDefault, Zr as markRedactedCause, Zt as dynamicReferenceTokens, _ as PRE_DELETE_SNAPSHOT_TYPES, _n as createAssetRedirectResolver, _r as AwsClients, _t as isUnboundTemplateParameter, a as DeploymentEventsStore, an as scrubResourceRecord, ar as findLargeInlineResources, at as CloudControlProvider, b as createPreDeleteFinalSnapshot, bn as escapeRegExp, br as setAwsClients, bt as WAFv2WebACLProvider, c as replayFailedOperations, cn as rebuildClientForBucketRegion, cr as displaySafe, ct as deleteIndeterminateGuards, d as updatePartialReason, dn as importableOutputs, dr as canonicalizeRegion, dt as isTerminationProtectionPropagationError, en as maskSecretsInError, er as stateBucketExistenceConfirmed, et as beginCommandInterruptScope, f as withResourceDeadline, fn as shouldRetainResource, fr as derivePartitionAndUrlSuffix, ft as IntrinsicFunctionResolver, g as ATOMIC_FINAL_SNAPSHOT_TYPES, gn as buildAssetRedirectMap, gr as resolveBucketRegion, gt as getAccountInfo, h as computeImplicitDeleteEdges, hn as WorkGraph, ht as coerceParameterTypedValue, i as DeploymentEventsReader, in as redactSecretsForState, ir as MIGRATE_TMP_PREFIX, it as startInterruptWatch, j as cyan, jn as validateContainerRepoName, jt as requireConfigString, k as formatResourceLine, kn as readBootstrapMarkerBody, kr as LocalMigrateError, kt as requireConfigArray, l as replayRollback, ln as exportNamesCarriedFrom, lr as expectedOwnerParam, lt as deleteSkipReason, m as IMPLICIT_DELETE_DEPENDENCIES, mn as stringifyValue, mr as processStackMessages, mt as cfnRefValueFromPhysicalId, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as recordMaskOnlyValue, nr as CFN_TEMPLATE_BODY_LIMIT, nt as interruptWatchListenerCount, o as planFailedOps, on as LockManager, or as uploadCfnTemplate, ot as slowCcOperationTimeoutMs, p as maskingRetryLogger, pn as AssetPublisher, pr as AssemblyReader, pt as carriesDynamicReference, q as findActionableSilentDrops, qn as resolveApp, qr as isRetryableTransientError, qt as STATE_SOURCED_READBACK_RULES, r as DeployEngine, rn as recoverMaskedOutput, rr as CFN_TEMPLATE_URL_LIMIT, rt as isInterruptedWaitError, s as planRollback, sn as S3StateBackend, sr as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, st as UNSPECIFIED_SKIP_REASON, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as maskSecretsInText, tr as warnDeprecatedNoPrefixCliFlag, tt as endCommandInterruptScope, u as updatePartialMessage, un as importableOutputKeys, ur as PARTITION_TABLE, ut as disableInstanceApiTermination, v as buildFinalSnapshotIdentifier, vn as loadPublishableAssetManifest, vr as getAwsClients, vt as parameterTypeMayLoseSecretIdentity, w as makeCanonicalizePropertiesFn, wn as assertAssetBucketRegion, wr as CrossAccountSecretRefusalError, wt as coerceCfnBoolean, x as isFinalSnapshotError, xn as stripControlChars, xt as normalizeAwsTagsToCfn, y as ccRoutedFinalSnapshotError, yn as rewriteTemplateAssetReferences, yr as resetAwsClients, yt as refStateLookupFromResource, z as isExportAliasCollision, zn as runDockerForeground, zr as StackTerminationProtectionError, zt as applyRoleArnIfSet } from "./deploy-engine-C3epVkTj.js";
1
+ import { $ as DEFAULT_STATE_PREFIX, $n as resolveUseCdkBootstrapAssets, $r as retryClassificationText, $t as isSingleDynamicReferenceToken, A as bold, An as validateAssetBucketName, Ar as LocalMigrateError, At as requireConfigObject, B as secretBearingStateKeyWarning, Bn as runDockerStreaming, Br as StackTerminationProtectionError, Bt as DiffCalculator, C as unsupportedFinalSnapshotError, Cn as BOOTSTRAP_MARKER_PREFIX, Ct as assertRegionMatch, D as isStatefulRecreateTargetSync, Dn as isCrossRegionRedirect, Dr as DynamicReferenceRegionAmbiguousError, Dt as readConfigString, E as MULTI_REGION_RECREATE_BLOCKED_TYPES, En as getBootstrapMarkerKey, Er as DeployCancelledError, Et as configStringRefusal, F as yellow, Fn as dockerSpawnEnvWithSensitive, Fr as PartialFailureError, Ft as s3BucketDomainName, G as clearOnUpdateRemoval, Gn as getDefaultStateBucketName, Gr as normalizeAwsError, Gt as TemplateParser, H as getCurrentResourceSecrets, Hn as getDockerImageBySourceHash, Ht as describeTypeWithThrottleRetry, I as collectDeclaredOutputNames, In as formatDockerLoginError, Ir as ProvisioningError, It as s3BucketDualStackDomainName, J as findSilentDropProperties, Jn as resolveAutoAssetStorage, Jr as isRetryableTransientError, Jt as TEMPLATE_SOURCED_RULES, K as ProviderRegistry, Kn as getLegacyStateBucketName, Kr as withErrorHandling, Kt as STATE_SOURCED_CROSS_GENERATION_RULES, L as collectPublishedOutputNames, Ln as getDockerCmd, Lr as ResourceTimeoutError, Lt as s3BucketRegionalDomainName, M as gray, Mn as buildDenyExternalAccessPolicy, Mt as classifyReplaySecretRegion, N as green, Nn as describeAwsFailure, Nr as MissingCdkCliError, Nt as producerRegionsFromState, O as renderStatefulReason, On as parseBootstrapMarker, Or as IntrinsicResolutionRefusalError, Ot as replayWarn, P as red, Pn as buildDockerImage, Pr as NestedStackChildDirectDestroyError, Pt as s3BucketArn, Q as CUSTOM_RESOURCE_RESPONSE_PREFIX, Qn as resolveStateBucketWithDefaultAndSource, Qr as markRedactedCause, Qt as errorCauseChain, R as exportAliasCollisionScrubWarning, Rn as partitionSensitiveEnv, Rr as ResourceUpdateNotSupportedError, Rt as s3BucketWebsiteUrl, S as refusesFinalSnapshot, Sn as AssetModeResolver, Sr as CdkdError, St as resolveExplicitPhysicalId, T as extractDeploymentEventError, Tn as ensureAssetStorage, Tt as configBooleanRefusal, U as IAMRoleProvider, Un as Synthesizer, Ut as withRetry, V as stateKeySecretExposure, Vn as AssetManifestLoader, Vt as INTRINSIC_KEYS, W as collectInlinePolicyNamesManagedBySiblings, Wn as synthesisStatusMessage, Wt as DagBuilder, X as maskDeep, Xn as resolveSkipPrefix, Xr as isTransientServerError, Xt as createSecretMasker, Y as createMaskedRetryLogger, Yn as resolveCaptureObservedState, Yr as isThrottlingError, Yt as carriesSecretMask, Z as maskerOrIdentity, Zn as resolveStateBucketWithDefault, Zr as markNonRetryable, Zt as dynamicReferenceTokens, _ as PRE_DELETE_SNAPSHOT_TYPES, _n as createAssetRedirectResolver, _r as AwsClients, _t as isUnboundTemplateParameter, a as DeploymentEventsStore, an as scrubResourceRecord, ar as findLargeInlineResources, at as CloudControlProvider, b as createPreDeleteFinalSnapshot, bn as escapeRegExp, br as setAwsClients, bt as WAFv2WebACLProvider, c as replayFailedOperations, cn as rebuildClientForBucketRegion, cr as displaySafe, ct as deleteIndeterminateGuards, d as updatePartialReason, dn as importableOutputs, dr as canonicalizeRegion, dt as isTerminationProtectionPropagationError, en as maskSecretsInError, er as stateBucketExistenceConfirmed, et as beginCommandInterruptScope, f as withResourceDeadline, fn as shouldRetainResource, fr as derivePartitionAndUrlSuffix, ft as IntrinsicFunctionResolver, g as ATOMIC_FINAL_SNAPSHOT_TYPES, gn as buildAssetRedirectMap, gr as resolveBucketRegion, gt as getAccountInfo, h as computeImplicitDeleteEdges, hn as WorkGraph, ht as coerceParameterTypedValue, i as DeploymentEventsReader, in as redactSecretsForState, ir as MIGRATE_TMP_PREFIX, it as startInterruptWatch, j as cyan, jn as validateContainerRepoName, jr as LocalStartServiceError, jt as requireConfigString, k as formatResourceLine, kn as readBootstrapMarkerBody, kr as LocalInvokeBuildError$1, kt as requireConfigArray, l as replayRollback, ln as exportNamesCarriedFrom, lr as expectedOwnerParam, lt as deleteSkipReason, m as IMPLICIT_DELETE_DEPENDENCIES, mn as stringifyValue, mr as processStackMessages, mt as cfnRefValueFromPhysicalId, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as recordMaskOnlyValue, nr as CFN_TEMPLATE_BODY_LIMIT, nt as interruptWatchListenerCount, o as planFailedOps, on as LockManager, or as uploadCfnTemplate, ot as slowCcOperationTimeoutMs, p as maskingRetryLogger, pn as AssetPublisher, pr as AssemblyReader, pt as carriesDynamicReference, q as findActionableSilentDrops, qn as resolveApp, qr as isMarkedNonRetryable, qt as STATE_SOURCED_READBACK_RULES, r as DeployEngine, rn as recoverMaskedOutput, rr as CFN_TEMPLATE_URL_LIMIT, rt as isInterruptedWaitError, s as planRollback, sn as S3StateBackend, sr as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, st as UNSPECIFIED_SKIP_REASON, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as maskSecretsInText, tr as warnDeprecatedNoPrefixCliFlag, tt as endCommandInterruptScope, u as updatePartialMessage, un as importableOutputKeys, ur as PARTITION_TABLE, ut as disableInstanceApiTermination, v as buildFinalSnapshotIdentifier, vn as loadPublishableAssetManifest, vr as getAwsClients, vt as parameterTypeMayLoseSecretIdentity, w as makeCanonicalizePropertiesFn, wn as assertAssetBucketRegion, wr as CrossAccountSecretRefusalError, wt as coerceCfnBoolean, x as isFinalSnapshotError, xn as stripControlChars, xt as normalizeAwsTagsToCfn, y as ccRoutedFinalSnapshotError, yn as rewriteTemplateAssetReferences, yr as resetAwsClients, yt as refStateLookupFromResource, z as isExportAliasCollision, zn as runDockerForeground, zr as StackHasActiveImportsError, zt as applyRoleArnIfSet } from "./deploy-engine-CA50haPO.js";
2
2
  import { _ as withStackName, c as PATTERN_B_NAME_OPTIONS, f as generateResourceName, g as withSkipPrefix, i as reserveStdoutForPayload, l as PATTERN_B_NAME_PROPERTIES, m as getCurrentStackName, n as getLogger, o as runStackBuffered, p as generateResourceNameWithFallback, s as getLiveRenderer, u as PATTERN_B_RESOURCE_TYPES } from "./logger-Dw-3y48G.js";
3
3
  import { t as awsClientDefaults } from "./aws-client-defaults-D-iYiIJ6.js";
4
- import { t as getCdkdVersion } from "./version-CS-eKBJA.js";
5
- import { t as ASGProvider } from "./asg-provider-CXkE2U3z.js";
4
+ import { t as getCdkdVersion } from "./version-DP5kGlzj.js";
5
+ import { t as ASGProvider } from "./asg-provider-BvIH9Ivw.js";
6
6
  import { AsyncLocalStorage } from "node:async_hooks";
7
7
  import { createHash, randomBytes, randomUUID } from "node:crypto";
8
8
  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";
@@ -1098,7 +1098,10 @@ async function resolveSdkDefaultRegion(profile) {
1098
1098
  const { STSClient } = await import("@aws-sdk/client-sts");
1099
1099
  let client;
1100
1100
  try {
1101
- client = new STSClient({ ...profile && { profile } });
1101
+ client = new STSClient({
1102
+ ...awsClientDefaults({ profile }),
1103
+ ...profile && { profile }
1104
+ });
1102
1105
  return await client.config.region() || void 0;
1103
1106
  } catch {
1104
1107
  return;
@@ -1290,6 +1293,7 @@ async function emptyAndDeleteBucket(s3Client, bucket, accountId, label, logger,
1290
1293
  */
1291
1294
  async function deleteContainerRepo(containerRepo, region, profile, logger) {
1292
1295
  const ecrClient = new ECRClient({
1296
+ ...awsClientDefaults({ profile }),
1293
1297
  region,
1294
1298
  ...profile && { profile }
1295
1299
  });
@@ -1390,6 +1394,7 @@ async function bootstrapDestroyCommand(options) {
1390
1394
  let region = effective.region;
1391
1395
  if (regionNeedsReconciliation(effective)) {
1392
1396
  const probeBackend = new S3StateBackend(new S3Client({
1397
+ ...awsClientDefaults({ profile: options.profile }),
1393
1398
  region: effective.region,
1394
1399
  ...options.profile && { profile: options.profile }
1395
1400
  }), {
@@ -1418,6 +1423,7 @@ async function bootstrapDestroyCommand(options) {
1418
1423
  if (awsClients !== accountClients) accountClients.destroy();
1419
1424
  setAwsClients(awsClients);
1420
1425
  const markerS3Client = new S3Client({
1426
+ ...awsClientDefaults({ profile: options.profile }),
1421
1427
  region,
1422
1428
  ...options.profile && { profile: options.profile }
1423
1429
  });
@@ -19281,7 +19287,10 @@ var DynamoDBGlobalTableProvider = class {
19281
19287
  getRegionalClient(region) {
19282
19288
  const cached = this.regionalClientCache.get(region);
19283
19289
  if (cached) return cached;
19284
- const client = new DynamoDBClient({ region });
19290
+ const client = new DynamoDBClient({
19291
+ ...awsClientDefaults(),
19292
+ region
19293
+ });
19285
19294
  this.regionalClientCache.set(region, client);
19286
19295
  return client;
19287
19296
  }
@@ -19299,7 +19308,10 @@ var DynamoDBGlobalTableProvider = class {
19299
19308
  getRegionalAutoScalingClient(region) {
19300
19309
  const cached = this.regionalAutoScalingClientCache.get(region);
19301
19310
  if (cached) return cached;
19302
- const client = new ApplicationAutoScalingClient({ region });
19311
+ const client = new ApplicationAutoScalingClient({
19312
+ ...awsClientDefaults(),
19313
+ region
19314
+ });
19303
19315
  this.regionalAutoScalingClientCache.set(region, client);
19304
19316
  return client;
19305
19317
  }
@@ -19314,7 +19326,10 @@ var DynamoDBGlobalTableProvider = class {
19314
19326
  async getLocalAutoScalingClient() {
19315
19327
  if (this.localAutoScalingClient) return this.localAutoScalingClient;
19316
19328
  const region = await this.dynamoDBClient.config.region() ?? "";
19317
- this.localAutoScalingClient = new ApplicationAutoScalingClient({ region });
19329
+ this.localAutoScalingClient = new ApplicationAutoScalingClient({
19330
+ ...awsClientDefaults(),
19331
+ region
19332
+ });
19318
19333
  return this.localAutoScalingClient;
19319
19334
  }
19320
19335
  /**
@@ -20916,7 +20931,10 @@ var DynamoDBGlobalTableProvider = class {
20916
20931
  async readAutoScalingSettings(tableName, scalableDimension, client, indexName) {
20917
20932
  const resourceId = autoScalingResourceId(tableName, indexName);
20918
20933
  try {
20919
- const asClient = client ?? new ApplicationAutoScalingClient({ region: await this.dynamoDBClient.config.region() ?? "" });
20934
+ const asClient = client ?? new ApplicationAutoScalingClient({
20935
+ ...awsClientDefaults(),
20936
+ region: await this.dynamoDBClient.config.region() ?? ""
20937
+ });
20920
20938
  const targets = (await asClient.send(new DescribeScalableTargetsCommand({
20921
20939
  ServiceNamespace: "dynamodb",
20922
20940
  ResourceIds: [resourceId],
@@ -30593,7 +30611,10 @@ var ApiGatewayV2Provider = class {
30593
30611
  ["CredentialsArn", "Quick-create shortcut (paired with RouteKey/Target); cdkd models the integration as an explicit AWS::ApiGatewayV2::Integration resource instead."]
30594
30612
  ])]]);
30595
30613
  getClient() {
30596
- if (!this.client) this.client = new ApiGatewayV2Client(this.providerRegion ? { region: this.providerRegion } : {});
30614
+ if (!this.client) this.client = new ApiGatewayV2Client({
30615
+ ...awsClientDefaults(),
30616
+ ...this.providerRegion ? { region: this.providerRegion } : {}
30617
+ });
30597
30618
  return this.client;
30598
30619
  }
30599
30620
  /**
@@ -34319,11 +34340,17 @@ var StepFunctionsProvider = class {
34319
34340
  "EncryptionConfiguration"
34320
34341
  ])]]);
34321
34342
  getClient() {
34322
- if (!this.sfnClient) this.sfnClient = new SFNClient(this.providerRegion ? { region: this.providerRegion } : {});
34343
+ if (!this.sfnClient) this.sfnClient = new SFNClient({
34344
+ ...awsClientDefaults(),
34345
+ ...this.providerRegion ? { region: this.providerRegion } : {}
34346
+ });
34323
34347
  return this.sfnClient;
34324
34348
  }
34325
34349
  getS3Client() {
34326
- if (!this.s3Client) this.s3Client = new S3Client(this.providerRegion ? { region: this.providerRegion } : {});
34350
+ if (!this.s3Client) this.s3Client = new S3Client({
34351
+ ...awsClientDefaults(),
34352
+ ...this.providerRegion ? { region: this.providerRegion } : {}
34353
+ });
34327
34354
  return this.s3Client;
34328
34355
  }
34329
34356
  /**
@@ -34950,7 +34977,10 @@ var ECSProvider = class {
34950
34977
  ]);
34951
34978
  unhandledByDesign = /* @__PURE__ */ new Map([["AWS::ECS::TaskDefinition", /* @__PURE__ */ new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])]]);
34952
34979
  getClient() {
34953
- if (!this.ecsClient) this.ecsClient = new ECSClient(this.providerRegion ? { region: this.providerRegion } : {});
34980
+ if (!this.ecsClient) this.ecsClient = new ECSClient({
34981
+ ...awsClientDefaults(),
34982
+ ...this.providerRegion ? { region: this.providerRegion } : {}
34983
+ });
34954
34984
  return this.ecsClient;
34955
34985
  }
34956
34986
  async create(logicalId, resourceType, properties) {
@@ -36738,7 +36768,10 @@ var ELBv2Provider = class {
36738
36768
  ])]
36739
36769
  ]);
36740
36770
  getClient() {
36741
- if (!this.elbv2Client) this.elbv2Client = new ElasticLoadBalancingV2Client(this.providerRegion ? { region: this.providerRegion } : {});
36771
+ if (!this.elbv2Client) this.elbv2Client = new ElasticLoadBalancingV2Client({
36772
+ ...awsClientDefaults(),
36773
+ ...this.providerRegion ? { region: this.providerRegion } : {}
36774
+ });
36742
36775
  return this.elbv2Client;
36743
36776
  }
36744
36777
  /**
@@ -38007,7 +38040,10 @@ var RDSProvider = class {
38007
38040
  ["DeleteAutomatedBackups", "delete-time lifecycle flag not threaded through cdkd destroy; final snapshots are governed by DeletionPolicy: Snapshot (issue #1352), which this flag does not control"]
38008
38041
  ])]]);
38009
38042
  getClient() {
38010
- if (!this.rdsClient) this.rdsClient = new RDSClient(this.providerRegion ? { region: this.providerRegion } : {});
38043
+ if (!this.rdsClient) this.rdsClient = new RDSClient({
38044
+ ...awsClientDefaults(),
38045
+ ...this.providerRegion ? { region: this.providerRegion } : {}
38046
+ });
38011
38047
  return this.rdsClient;
38012
38048
  }
38013
38049
  async create(logicalId, resourceType, properties) {
@@ -38758,7 +38794,10 @@ var RDSDBProxyProvider = class {
38758
38794
  "Tags"
38759
38795
  ])]]);
38760
38796
  getClient() {
38761
- if (!this.rdsClient) this.rdsClient = new RDSClient(this.providerRegion ? { region: this.providerRegion } : {});
38797
+ if (!this.rdsClient) this.rdsClient = new RDSClient({
38798
+ ...awsClientDefaults(),
38799
+ ...this.providerRegion ? { region: this.providerRegion } : {}
38800
+ });
38762
38801
  return this.rdsClient;
38763
38802
  }
38764
38803
  async create(logicalId, resourceType, properties) {
@@ -39090,7 +39129,10 @@ var RDSDBProxyEndpointProvider = class {
39090
39129
  "Tags"
39091
39130
  ])]]);
39092
39131
  getClient() {
39093
- if (!this.rdsClient) this.rdsClient = new RDSClient(this.providerRegion ? { region: this.providerRegion } : {});
39132
+ if (!this.rdsClient) this.rdsClient = new RDSClient({
39133
+ ...awsClientDefaults(),
39134
+ ...this.providerRegion ? { region: this.providerRegion } : {}
39135
+ });
39094
39136
  return this.rdsClient;
39095
39137
  }
39096
39138
  async create(logicalId, resourceType, properties) {
@@ -39396,7 +39438,10 @@ var RDSDBProxyTargetGroupProvider = class {
39396
39438
  "ConnectionPoolConfigurationInfo"
39397
39439
  ])]]);
39398
39440
  getClient() {
39399
- if (!this.rdsClient) this.rdsClient = new RDSClient(this.providerRegion ? { region: this.providerRegion } : {});
39441
+ if (!this.rdsClient) this.rdsClient = new RDSClient({
39442
+ ...awsClientDefaults(),
39443
+ ...this.providerRegion ? { region: this.providerRegion } : {}
39444
+ });
39400
39445
  return this.rdsClient;
39401
39446
  }
39402
39447
  async create(logicalId, resourceType, properties, context) {
@@ -39707,7 +39752,10 @@ var DocDBProvider = class {
39707
39752
  ])]
39708
39753
  ]);
39709
39754
  getClient() {
39710
- if (!this.docdbClient) this.docdbClient = new DocDBClient(this.providerRegion ? { region: this.providerRegion } : {});
39755
+ if (!this.docdbClient) this.docdbClient = new DocDBClient({
39756
+ ...awsClientDefaults(),
39757
+ ...this.providerRegion ? { region: this.providerRegion } : {}
39758
+ });
39711
39759
  return this.docdbClient;
39712
39760
  }
39713
39761
  async create(logicalId, resourceType, properties) {
@@ -40340,7 +40388,10 @@ var NeptuneProvider = class {
40340
40388
  ])]
40341
40389
  ]);
40342
40390
  getClient() {
40343
- if (!this.neptuneClient) this.neptuneClient = new NeptuneClient(this.providerRegion ? { region: this.providerRegion } : {});
40391
+ if (!this.neptuneClient) this.neptuneClient = new NeptuneClient({
40392
+ ...awsClientDefaults(),
40393
+ ...this.providerRegion ? { region: this.providerRegion } : {}
40394
+ });
40344
40395
  return this.neptuneClient;
40345
40396
  }
40346
40397
  async create(logicalId, resourceType, properties) {
@@ -41101,7 +41152,10 @@ var Route53Provider = class {
41101
41152
  "CidrRoutingConfig"
41102
41153
  ])]]);
41103
41154
  getClient() {
41104
- if (!this.route53Client) this.route53Client = new Route53Client(this.providerRegion ? { region: this.providerRegion } : {});
41155
+ if (!this.route53Client) this.route53Client = new Route53Client({
41156
+ ...awsClientDefaults(),
41157
+ ...this.providerRegion ? { region: this.providerRegion } : {}
41158
+ });
41105
41159
  return this.route53Client;
41106
41160
  }
41107
41161
  async create(logicalId, resourceType, properties, context) {
@@ -43113,7 +43167,10 @@ var CognitoUserPoolProvider = class {
43113
43167
  return narrowMfaConfiguration(properties);
43114
43168
  }
43115
43169
  getClient() {
43116
- if (!this.cognitoClient) this.cognitoClient = new CognitoIdentityProviderClient(this.providerRegion ? { region: this.providerRegion } : {});
43170
+ if (!this.cognitoClient) this.cognitoClient = new CognitoIdentityProviderClient({
43171
+ ...awsClientDefaults(),
43172
+ ...this.providerRegion ? { region: this.providerRegion } : {}
43173
+ });
43117
43174
  return this.cognitoClient;
43118
43175
  }
43119
43176
  /**
@@ -43865,7 +43922,10 @@ var ElastiCacheProvider = class {
43865
43922
  ])]]);
43866
43923
  unhandledByDesign = /* @__PURE__ */ new Map([["AWS::ElastiCache::CacheCluster", /* @__PURE__ */ new Map([["CacheSecurityGroupNames", "EC2-Classic-only — use VpcSecurityGroupIds for VPC-deployed clusters (EC2-Classic retired 2022-08-15)"]])]]);
43867
43924
  getClient() {
43868
- if (!this.client) this.client = new ElastiCacheClient(this.providerRegion ? { region: this.providerRegion } : {});
43925
+ if (!this.client) this.client = new ElastiCacheClient({
43926
+ ...awsClientDefaults(),
43927
+ ...this.providerRegion ? { region: this.providerRegion } : {}
43928
+ });
43869
43929
  return this.client;
43870
43930
  }
43871
43931
  async create(logicalId, resourceType, properties) {
@@ -44394,11 +44454,17 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
44394
44454
  ])]
44395
44455
  ]);
44396
44456
  getClient() {
44397
- if (!this.client) this.client = new ServiceDiscoveryClient(this.providerRegion ? { region: this.providerRegion } : {});
44457
+ if (!this.client) this.client = new ServiceDiscoveryClient({
44458
+ ...awsClientDefaults(),
44459
+ ...this.providerRegion ? { region: this.providerRegion } : {}
44460
+ });
44398
44461
  return this.client;
44399
44462
  }
44400
44463
  getStsClient() {
44401
- if (!this.stsClient) this.stsClient = new STSClient(this.providerRegion ? { region: this.providerRegion } : {});
44464
+ if (!this.stsClient) this.stsClient = new STSClient({
44465
+ ...awsClientDefaults(),
44466
+ ...this.providerRegion ? { region: this.providerRegion } : {}
44467
+ });
44402
44468
  return this.stsClient;
44403
44469
  }
44404
44470
  /**
@@ -45444,7 +45510,10 @@ var AppSyncProvider = class {
45444
45510
  ])]
45445
45511
  ]);
45446
45512
  getClient() {
45447
- if (!this.client) this.client = new AppSyncClient(this.providerRegion ? { region: this.providerRegion } : {});
45513
+ if (!this.client) this.client = new AppSyncClient({
45514
+ ...awsClientDefaults(),
45515
+ ...this.providerRegion ? { region: this.providerRegion } : {}
45516
+ });
45448
45517
  return this.client;
45449
45518
  }
45450
45519
  /**
@@ -45636,7 +45705,10 @@ var AppSyncProvider = class {
45636
45705
  * implementation).
45637
45706
  */
45638
45707
  getS3Client() {
45639
- if (!this.s3Client) this.s3Client = new S3Client(this.providerRegion ? { region: this.providerRegion } : {});
45708
+ if (!this.s3Client) this.s3Client = new S3Client({
45709
+ ...awsClientDefaults(),
45710
+ ...this.providerRegion ? { region: this.providerRegion } : {}
45711
+ });
45640
45712
  return this.s3Client;
45641
45713
  }
45642
45714
  async create(logicalId, resourceType, properties, context) {
@@ -47267,7 +47339,10 @@ var GlueProvider = class {
47267
47339
  "OpenTableFormatInput"
47268
47340
  ])]]);
47269
47341
  getClient() {
47270
- if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
47342
+ if (!this.client) this.client = new GlueClient({
47343
+ ...awsClientDefaults(),
47344
+ ...this.providerRegion ? { region: this.providerRegion } : {}
47345
+ });
47271
47346
  return this.client;
47272
47347
  }
47273
47348
  async create(logicalId, resourceType, properties, context) {
@@ -48118,7 +48193,10 @@ var GlueWorkflowProvider = class {
48118
48193
  "Tags"
48119
48194
  ])]]);
48120
48195
  getClient() {
48121
- if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
48196
+ if (!this.client) this.client = new GlueClient({
48197
+ ...awsClientDefaults(),
48198
+ ...this.providerRegion ? { region: this.providerRegion } : {}
48199
+ });
48122
48200
  return this.client;
48123
48201
  }
48124
48202
  async create(logicalId, resourceType, properties) {
@@ -48244,7 +48322,10 @@ var GlueWorkflowProvider = class {
48244
48322
  }
48245
48323
  async getAccountId() {
48246
48324
  if (this.cachedAccountId) return this.cachedAccountId;
48247
- if (!this.stsClient) this.stsClient = new STSClient(this.providerRegion ? { region: this.providerRegion } : {});
48325
+ if (!this.stsClient) this.stsClient = new STSClient({
48326
+ ...awsClientDefaults(),
48327
+ ...this.providerRegion ? { region: this.providerRegion } : {}
48328
+ });
48248
48329
  const identity = await this.stsClient.send(new GetCallerIdentityCommand({}));
48249
48330
  if (!identity.Account) throw new Error("Failed to resolve AWS account id from STS");
48250
48331
  this.cachedAccountId = identity.Account;
@@ -48269,7 +48350,10 @@ var GlueSecurityConfigurationProvider = class {
48269
48350
  logger = getLogger().child("GlueSecurityConfigurationProvider");
48270
48351
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::SecurityConfiguration", /* @__PURE__ */ new Set(["Name", "EncryptionConfiguration"])]]);
48271
48352
  getClient() {
48272
- if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
48353
+ if (!this.client) this.client = new GlueClient({
48354
+ ...awsClientDefaults(),
48355
+ ...this.providerRegion ? { region: this.providerRegion } : {}
48356
+ });
48273
48357
  return this.client;
48274
48358
  }
48275
48359
  async create(logicalId, resourceType, properties) {
@@ -48628,11 +48712,17 @@ var GlueJobProvider = class {
48628
48712
  "Tags"
48629
48713
  ])]]);
48630
48714
  getClient() {
48631
- if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
48715
+ if (!this.client) this.client = new GlueClient({
48716
+ ...awsClientDefaults(),
48717
+ ...this.providerRegion ? { region: this.providerRegion } : {}
48718
+ });
48632
48719
  return this.client;
48633
48720
  }
48634
48721
  getStsClient() {
48635
- if (!this.stsClient) this.stsClient = new STSClient(this.providerRegion ? { region: this.providerRegion } : {});
48722
+ if (!this.stsClient) this.stsClient = new STSClient({
48723
+ ...awsClientDefaults(),
48724
+ ...this.providerRegion ? { region: this.providerRegion } : {}
48725
+ });
48636
48726
  return this.stsClient;
48637
48727
  }
48638
48728
  async create(logicalId, resourceType, properties) {
@@ -48998,11 +49088,17 @@ var GlueCrawlerProvider = class {
48998
49088
  "Tags"
48999
49089
  ])]]);
49000
49090
  getClient() {
49001
- if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
49091
+ if (!this.client) this.client = new GlueClient({
49092
+ ...awsClientDefaults(),
49093
+ ...this.providerRegion ? { region: this.providerRegion } : {}
49094
+ });
49002
49095
  return this.client;
49003
49096
  }
49004
49097
  getStsClient() {
49005
- if (!this.stsClient) this.stsClient = new STSClient(this.providerRegion ? { region: this.providerRegion } : {});
49098
+ if (!this.stsClient) this.stsClient = new STSClient({
49099
+ ...awsClientDefaults(),
49100
+ ...this.providerRegion ? { region: this.providerRegion } : {}
49101
+ });
49006
49102
  return this.stsClient;
49007
49103
  }
49008
49104
  async create(logicalId, resourceType, properties) {
@@ -49306,7 +49402,10 @@ var GlueConnectionProvider = class {
49306
49402
  logger = getLogger().child("GlueConnectionProvider");
49307
49403
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Connection", /* @__PURE__ */ new Set(["ConnectionInput", "CatalogId"])]]);
49308
49404
  getClient() {
49309
- if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
49405
+ if (!this.client) this.client = new GlueClient({
49406
+ ...awsClientDefaults(),
49407
+ ...this.providerRegion ? { region: this.providerRegion } : {}
49408
+ });
49310
49409
  return this.client;
49311
49410
  }
49312
49411
  async create(logicalId, resourceType, properties) {
@@ -49468,11 +49567,17 @@ var GlueTriggerProvider = class {
49468
49567
  "Tags"
49469
49568
  ])]]);
49470
49569
  getClient() {
49471
- if (!this.client) this.client = new GlueClient(this.providerRegion ? { region: this.providerRegion } : {});
49570
+ if (!this.client) this.client = new GlueClient({
49571
+ ...awsClientDefaults(),
49572
+ ...this.providerRegion ? { region: this.providerRegion } : {}
49573
+ });
49472
49574
  return this.client;
49473
49575
  }
49474
49576
  getStsClient() {
49475
- if (!this.stsClient) this.stsClient = new STSClient(this.providerRegion ? { region: this.providerRegion } : {});
49577
+ if (!this.stsClient) this.stsClient = new STSClient({
49578
+ ...awsClientDefaults(),
49579
+ ...this.providerRegion ? { region: this.providerRegion } : {}
49580
+ });
49476
49581
  return this.stsClient;
49477
49582
  }
49478
49583
  async create(logicalId, resourceType, properties) {
@@ -49686,7 +49791,10 @@ var KMSProvider = class {
49686
49791
  "BypassPolicyLockoutSafetyCheck"
49687
49792
  ])], ["AWS::KMS::Alias", /* @__PURE__ */ new Set(["AliasName", "TargetKeyId"])]]);
49688
49793
  getClient() {
49689
- if (!this.client) this.client = new KMSClient(this.providerRegion ? { region: this.providerRegion } : {});
49794
+ if (!this.client) this.client = new KMSClient({
49795
+ ...awsClientDefaults(),
49796
+ ...this.providerRegion ? { region: this.providerRegion } : {}
49797
+ });
49690
49798
  return this.client;
49691
49799
  }
49692
49800
  async create(logicalId, resourceType, properties) {
@@ -50125,7 +50233,10 @@ var BudgetsBudgetProvider = class {
50125
50233
  "ResourceTags"
50126
50234
  ])]]);
50127
50235
  getClient() {
50128
- if (!this.client) this.client = new BudgetsClient(this.providerRegion ? { region: this.providerRegion } : {});
50236
+ if (!this.client) this.client = new BudgetsClient({
50237
+ ...awsClientDefaults(),
50238
+ ...this.providerRegion ? { region: this.providerRegion } : {}
50239
+ });
50129
50240
  return this.client;
50130
50241
  }
50131
50242
  /**
@@ -50738,7 +50849,10 @@ var KinesisStreamProvider = class {
50738
50849
  "MaxRecordSizeInKiB"
50739
50850
  ])]]);
50740
50851
  getClient() {
50741
- if (!this.client) this.client = new KinesisClient(this.providerRegion ? { region: this.providerRegion } : {});
50852
+ if (!this.client) this.client = new KinesisClient({
50853
+ ...awsClientDefaults(),
50854
+ ...this.providerRegion ? { region: this.providerRegion } : {}
50855
+ });
50742
50856
  return this.client;
50743
50857
  }
50744
50858
  /**
@@ -51210,7 +51324,10 @@ var KinesisStreamConsumerProvider = class {
51210
51324
  "Tags"
51211
51325
  ])]]);
51212
51326
  getClient() {
51213
- if (!this.client) this.client = new KinesisClient(this.providerRegion ? { region: this.providerRegion } : {});
51327
+ if (!this.client) this.client = new KinesisClient({
51328
+ ...awsClientDefaults(),
51329
+ ...this.providerRegion ? { region: this.providerRegion } : {}
51330
+ });
51214
51331
  return this.client;
51215
51332
  }
51216
51333
  /**
@@ -51494,7 +51611,10 @@ var SchedulerScheduleProvider = class {
51494
51611
  "Target"
51495
51612
  ])]]);
51496
51613
  getClient() {
51497
- if (!this.client) this.client = new SchedulerClient(this.providerRegion ? { region: this.providerRegion } : {});
51614
+ if (!this.client) this.client = new SchedulerClient({
51615
+ ...awsClientDefaults(),
51616
+ ...this.providerRegion ? { region: this.providerRegion } : {}
51617
+ });
51498
51618
  return this.client;
51499
51619
  }
51500
51620
  /**
@@ -51787,7 +51907,10 @@ var EFSProvider = class {
51787
51907
  ]);
51788
51908
  unhandledByDesign = /* @__PURE__ */ new Map([["AWS::EFS::FileSystem", /* @__PURE__ */ new Map([["ReplicationConfiguration", "Cross-region EFS replication (CreateReplicationConfiguration) provisions a separate destination file system in another region with its own lifecycle, KMS key, and availability-zone placement; replicating + then tearing down the destination on destroy is a multi-resource, cross-region orchestration that is out of scope for the single-resource SDK provider. Tracked as a follow-up to issue #609."]])], ["AWS::EFS::AccessPoint", /* @__PURE__ */ new Map([["ClientToken", "cdkd supplies its own retry-stable ClientToken on CreateAccessPoint (issues #2039 and #2080), so a template-supplied value would be overwritten. The SDK does not own this field either: measured against @aws-sdk/client-efs 3.1018.0, an omitted ClientToken is auto-filled with a FRESH uuid per attempt, which leaves a retried 500 free to mint a second access point, while a caller-supplied value goes on the wire verbatim."]])]]);
51789
51909
  getClient() {
51790
- if (!this.client) this.client = new EFSClient(this.providerRegion ? { region: this.providerRegion } : {});
51910
+ if (!this.client) this.client = new EFSClient({
51911
+ ...awsClientDefaults(),
51912
+ ...this.providerRegion ? { region: this.providerRegion } : {}
51913
+ });
51791
51914
  return this.client;
51792
51915
  }
51793
51916
  async create(logicalId, resourceType, properties) {
@@ -52701,7 +52824,10 @@ var FSxFileSystemProvider = class {
52701
52824
  ])]]);
52702
52825
  unhandledByDesign = /* @__PURE__ */ new Map();
52703
52826
  getClient() {
52704
- if (!this.client) this.client = new FSxClient(this.providerRegion ? { region: this.providerRegion } : {});
52827
+ if (!this.client) this.client = new FSxClient({
52828
+ ...awsClientDefaults(),
52829
+ ...this.providerRegion ? { region: this.providerRegion } : {}
52830
+ });
52705
52831
  return this.client;
52706
52832
  }
52707
52833
  /**
@@ -53809,7 +53935,10 @@ var EMRClusterProvider = class {
53809
53935
  "VisibleToAllUsers"
53810
53936
  ])]]);
53811
53937
  getClient() {
53812
- if (!this.client) this.client = new EMRClient(this.providerRegion ? { region: this.providerRegion } : {});
53938
+ if (!this.client) this.client = new EMRClient({
53939
+ ...awsClientDefaults(),
53940
+ ...this.providerRegion ? { region: this.providerRegion } : {}
53941
+ });
53813
53942
  return this.client;
53814
53943
  }
53815
53944
  /**
@@ -54571,7 +54700,10 @@ var EMRInstanceGroupConfigProvider = class {
54571
54700
  "Name"
54572
54701
  ])]]);
54573
54702
  getClient() {
54574
- if (!this.client) this.client = new EMRClient(this.providerRegion ? { region: this.providerRegion } : {});
54703
+ if (!this.client) this.client = new EMRClient({
54704
+ ...awsClientDefaults(),
54705
+ ...this.providerRegion ? { region: this.providerRegion } : {}
54706
+ });
54575
54707
  return this.client;
54576
54708
  }
54577
54709
  getMinResourceTimeoutMs() {
@@ -54884,7 +55016,10 @@ var EMRInstanceFleetConfigProvider = class {
54884
55016
  "TargetSpotCapacity"
54885
55017
  ])]]);
54886
55018
  getClient() {
54887
- if (!this.client) this.client = new EMRClient(this.providerRegion ? { region: this.providerRegion } : {});
55019
+ if (!this.client) this.client = new EMRClient({
55020
+ ...awsClientDefaults(),
55021
+ ...this.providerRegion ? { region: this.providerRegion } : {}
55022
+ });
54888
55023
  return this.client;
54889
55024
  }
54890
55025
  getMinResourceTimeoutMs() {
@@ -55182,7 +55317,10 @@ var FirehoseProvider = class {
55182
55317
  "DeliveryStreamEncryptionConfigurationInput"
55183
55318
  ])]]);
55184
55319
  getClient() {
55185
- if (!this.client) this.client = new FirehoseClient(this.providerRegion ? { region: this.providerRegion } : {});
55320
+ if (!this.client) this.client = new FirehoseClient({
55321
+ ...awsClientDefaults(),
55322
+ ...this.providerRegion ? { region: this.providerRegion } : {}
55323
+ });
55186
55324
  return this.client;
55187
55325
  }
55188
55326
  /**
@@ -56527,7 +56665,10 @@ var CloudTrailProvider = class {
56527
56665
  "IsOrganizationTrail"
56528
56666
  ])]]);
56529
56667
  getClient() {
56530
- if (!this.client) this.client = new CloudTrailClient(this.providerRegion ? { region: this.providerRegion } : {});
56668
+ if (!this.client) this.client = new CloudTrailClient({
56669
+ ...awsClientDefaults(),
56670
+ ...this.providerRegion ? { region: this.providerRegion } : {}
56671
+ });
56531
56672
  return this.client;
56532
56673
  }
56533
56674
  async create(logicalId, resourceType, properties) {
@@ -56869,7 +57010,10 @@ var CodeBuildProvider = class {
56869
57010
  "AutoRetryLimit"
56870
57011
  ])]]);
56871
57012
  getClient() {
56872
- if (!this.client) this.client = new CodeBuildClient(this.providerRegion ? { region: this.providerRegion } : {});
57013
+ if (!this.client) this.client = new CodeBuildClient({
57014
+ ...awsClientDefaults(),
57015
+ ...this.providerRegion ? { region: this.providerRegion } : {}
57016
+ });
56873
57017
  return this.client;
56874
57018
  }
56875
57019
  /**
@@ -57430,11 +57574,17 @@ var CodeCommitRepositoryProvider = class {
57430
57574
  "Triggers"
57431
57575
  ])]]);
57432
57576
  getClient() {
57433
- if (!this.client) this.client = new CodeCommitClient(this.providerRegion ? { region: this.providerRegion } : {});
57577
+ if (!this.client) this.client = new CodeCommitClient({
57578
+ ...awsClientDefaults(),
57579
+ ...this.providerRegion ? { region: this.providerRegion } : {}
57580
+ });
57434
57581
  return this.client;
57435
57582
  }
57436
57583
  getS3Client() {
57437
- if (!this.s3Client) this.s3Client = new S3Client(this.providerRegion ? { region: this.providerRegion } : {});
57584
+ if (!this.s3Client) this.s3Client = new S3Client({
57585
+ ...awsClientDefaults(),
57586
+ ...this.providerRegion ? { region: this.providerRegion } : {}
57587
+ });
57438
57588
  return this.s3Client;
57439
57589
  }
57440
57590
  /**
@@ -57864,7 +58014,10 @@ var DLMLifecyclePolicyProvider = class {
57864
58014
  "Exclusions"
57865
58015
  ])]]);
57866
58016
  getClient() {
57867
- if (!this.client) this.client = new DLMClient(this.providerRegion ? { region: this.providerRegion } : {});
58017
+ if (!this.client) this.client = new DLMClient({
58018
+ ...awsClientDefaults(),
58019
+ ...this.providerRegion ? { region: this.providerRegion } : {}
58020
+ });
57868
58021
  return this.client;
57869
58022
  }
57870
58023
  /**
@@ -58156,7 +58309,10 @@ var S3VectorsProvider = class {
58156
58309
  "Tags"
58157
58310
  ])]]);
58158
58311
  getClient() {
58159
- if (!this.client) this.client = new S3VectorsClient(this.providerRegion ? { region: this.providerRegion } : {});
58312
+ if (!this.client) this.client = new S3VectorsClient({
58313
+ ...awsClientDefaults(),
58314
+ ...this.providerRegion ? { region: this.providerRegion } : {}
58315
+ });
58160
58316
  return this.client;
58161
58317
  }
58162
58318
  async create(logicalId, resourceType, properties) {
@@ -58406,7 +58562,10 @@ var S3DirectoryBucketProvider = class {
58406
58562
  this.stsClient = awsClients.sts;
58407
58563
  }
58408
58564
  getEc2Client() {
58409
- if (!this.ec2Client) this.ec2Client = new EC2Client(this.providerRegion ? { region: this.providerRegion } : {});
58565
+ if (!this.ec2Client) this.ec2Client = new EC2Client({
58566
+ ...awsClientDefaults(),
58567
+ ...this.providerRegion ? { region: this.providerRegion } : {}
58568
+ });
58410
58569
  return this.ec2Client;
58411
58570
  }
58412
58571
  /**
@@ -58417,7 +58576,10 @@ var S3DirectoryBucketProvider = class {
58417
58576
  * `s3express:UntagResource` / `s3express:ListTagsForResource` permissions).
58418
58577
  */
58419
58578
  getS3ControlClient() {
58420
- if (!this.s3ControlClient) this.s3ControlClient = new S3ControlClient(this.providerRegion ? { region: this.providerRegion } : {});
58579
+ if (!this.s3ControlClient) this.s3ControlClient = new S3ControlClient({
58580
+ ...awsClientDefaults(),
58581
+ ...this.providerRegion ? { region: this.providerRegion } : {}
58582
+ });
58421
58583
  return this.s3ControlClient;
58422
58584
  }
58423
58585
  /**
@@ -58829,7 +58991,10 @@ var S3TablesProvider = class {
58829
58991
  ])]
58830
58992
  ]);
58831
58993
  getClient() {
58832
- if (!this.client) this.client = new S3TablesClient(this.providerRegion ? { region: this.providerRegion } : {});
58994
+ if (!this.client) this.client = new S3TablesClient({
58995
+ ...awsClientDefaults(),
58996
+ ...this.providerRegion ? { region: this.providerRegion } : {}
58997
+ });
58833
58998
  return this.client;
58834
58999
  }
58835
59000
  async create(logicalId, resourceType, properties, context) {
@@ -59622,7 +59787,10 @@ var ECRProvider = class {
59622
59787
  "ImageTagMutabilityExclusionFilters"
59623
59788
  ])]]);
59624
59789
  getClient() {
59625
- if (!this.client) this.client = new ECRClient(this.providerRegion ? { region: this.providerRegion } : {});
59790
+ if (!this.client) this.client = new ECRClient({
59791
+ ...awsClientDefaults(),
59792
+ ...this.providerRegion ? { region: this.providerRegion } : {}
59793
+ });
59626
59794
  return this.client;
59627
59795
  }
59628
59796
  /**
@@ -62194,7 +62362,10 @@ async function deployCommand(stacks, options) {
62194
62362
  });
62195
62363
  await synthesizer.expandMacrosForStacks(targetStacks, synthOptions);
62196
62364
  const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
62197
- const stsClient = new STSClient({ region: namedCliRegion(options.region) ?? "us-east-1" });
62365
+ const stsClient = new STSClient({
62366
+ ...awsClientDefaults(),
62367
+ region: namedCliRegion(options.region) ?? "us-east-1"
62368
+ });
62198
62369
  const accountId = (await stsClient.send(new GetCallerIdentityCommand({}))).Account;
62199
62370
  stsClient.destroy();
62200
62371
  const assetPublisher = new AssetPublisher();
@@ -65220,15 +65391,14 @@ const DYNAMIC_REFERENCE_OPENING = "{{resolve:";
65220
65391
  * unactionable for prose. Requiring the service makes the count a count of
65221
65392
  * SECRET references rather than of the characters `{{resolve:`.
65222
65393
  *
65223
- * `secretsmanager` / `ssm` mirror `REPLAY_SECRET_SERVICES` in
65224
- * `rollback-executor.ts`, whose {@link classifyReplaySecretRegion} is what
65225
- * classifies the tokens below — the same set on both sides, so the count and
65226
- * the classification never disagree about what is in scope. `ssm-secure` is
65227
- * added on top: it IS a CloudFormation secret spelling, and although cdkd does
65228
- * not resolve it today (the resolver's unsupported-service arm leaves it
65229
- * verbatim, so it can never become a wrong-region needle), counting it costs
65230
- * only an assembled `ssm-secure` reference in a cross-region stack and keeps
65231
- * the guard correct the day that arm changes.
65394
+ * All three mirror `REPLAY_SECRET_SERVICES` in
65395
+ * `secret-region-classification.ts`, whose {@link classifyReplaySecretRegion}
65396
+ * is what classifies the tokens below — the same set on both sides, so the
65397
+ * count and the classification never disagree about what is in scope. Until
65398
+ * issue #2482 `ssm-secure` was counted here AHEAD of that set (cdkd did not
65399
+ * resolve it, so it could never become a wrong-region needle, and counting it
65400
+ * kept the guard correct for the day the resolver's arm changed); that day
65401
+ * came, and the two lists agree again.
65232
65402
  *
65233
65403
  * THE TRADE, stated rather than hidden: an `Fn::Join` that splits BEFORE the
65234
65404
  * service name (`['{{resolve:', 'secretsmanager:db:SecretString:pw}}']`) has no
@@ -67580,9 +67750,9 @@ var DriftDetectedError = class DriftDetectedError extends CdkdError {
67580
67750
  *
67581
67751
  * SCOPED TO THE CLEARABLE CAUSES, not to everything the report calls
67582
67752
  * `notCompared`. The roll-up also contains resources whose only problem is a
67583
- * surviving `{{resolve:ssm-secure:...}}` token — a pre-existing population cdkd resolves
67584
- * for nobody, which can never clear on a re-run, and which this change did not
67585
- * create. Exiting non-zero for them would break `cdkd drift` in CI forever over
67753
+ * surviving `{{resolve:...}}` token cdkd resolves for nobody — a look-alike
67754
+ * spelling, since issue #2482 moved `ssm-secure` onto the `ssm` path which
67755
+ * can never clear on a re-run, and which this change did not create. Exiting non-zero for them would break `cdkd drift` in CI forever over
67586
67756
  * an unrelated defect, so the exit reads `refused` and `readFailed` while the
67587
67757
  * report covers all three. See `NotComparedCause` and `outcomeExitSignal`.
67588
67758
  *
@@ -67616,12 +67786,15 @@ var DriftDetectedError = class DriftDetectedError extends CdkdError {
67616
67786
  * honest SENTENCE, since their no-drift line claimed a clean bill of health for
67617
67787
  * a stack they had not read. See {@link incompleteRemediationMessage}.
67618
67788
  *
67619
- * WHAT DOES NOT TRIGGER IT: a stack whose properties reference
67620
- * `{{resolve:ssm-secure:...}}` still exits 0. Those properties genuinely are not
67621
- * compared and the report says so, but nothing REFUSED them — cdkd has never
67622
- * resolved that spelling — so the condition is permanent, unclearable by any
67623
- * action the user can take, and predates this change. It is reported as
67624
- * information and kept out of the exit code.
67789
+ * WHAT DOES NOT TRIGGER IT: a stack whose properties carry a `{{resolve:...}}`
67790
+ * spelling cdkd resolves for nobody still exits 0. Those properties genuinely
67791
+ * are not compared and the report says so, but nothing REFUSED them — cdkd has
67792
+ * never resolved that spelling — so the condition is permanent, unclearable by
67793
+ * any action the user can take, and predates this change. It is reported as
67794
+ * information and kept out of the exit code. (`ssm-secure` was that spelling
67795
+ * when this was written; since issue #2482 it resolves like `ssm`, and a
67796
+ * lookup that fails for it lands with the other resolution failures, not
67797
+ * here.)
67625
67798
  *
67626
67799
  * Carries no message of its own for the same reason {@link DriftDetectedError}
67627
67800
  * does -- the report was already printed.
@@ -67692,8 +67865,7 @@ function notComparedOutcomes(report) {
67692
67865
  * code covers only the CLEARABLE ones — `refused` (the population #2108 created)
67693
67866
  * and `readFailed` (issues #2151 / #1945). Exiting non-zero on
67694
67867
  * `unresolvedToken` would break `cdkd drift` in CI forever for every stack
67695
- * holding an `{{resolve:ssm-secure:...}}` reference — permanent, unclearable,
67696
- * and unrelated. See {@link NotComparedCause}.
67868
+ * holding such a spelling — permanent, unclearable, and unrelated. See {@link NotComparedCause}.
67697
67869
  *
67698
67870
  * A `drifted` outcome reports `drifted` even when its own comparison was
67699
67871
  * refused: drift is the stronger, actionable signal and the caller ranks it
@@ -67829,7 +68001,7 @@ function uncomparedTally(reports) {
67829
68001
  *
67830
68002
  * - The TRIGGER is `anyIncomplete`, i.e. {@link outcomeExitSignal}'s
67831
68003
  * `incomplete`. It is narrow on purpose: a stack whose ONLY uncompared
67832
- * resource holds a `{{resolve:ssm-secure:...}}` token must not start
68004
+ * resource holds a `{{resolve:...}}` token cdkd resolves for nobody must not start
67833
68005
  * shouting on every run about a comparison no action of the user's can ever
67834
68006
  * complete -- the same CI-forever hazard that cause is kept out of the exit
67835
68007
  * code on.
@@ -68114,25 +68286,6 @@ function carriesRecordedSecret(value, secrets) {
68114
68286
  return false;
68115
68287
  }
68116
68288
  /**
68117
- * Is this unresolvable token one whose value is a SECRET by definition?
68118
- *
68119
- * `ssm-secure` is the only such spelling, and it is decidable with no lookup:
68120
- * CloudFormation defines exactly three dynamic-reference services (`ssm`,
68121
- * `ssm-secure`, `secretsmanager`), cdkd resolves the other two, and
68122
- * `ssm-secure` is the encrypted one.
68123
- *
68124
- * Anything else reaching the survivor arm is not a CloudFormation dynamic
68125
- * reference at all — it is text that merely looks like one — and treating it as
68126
- * secret is not the safe direction it appears to be: the path would be masked
68127
- * to `***`, refused by `--accept`, and pinned to the live value by
68128
- * {@link preserveLiveValuesAtUnresolvedTokens}, which is permanently stuck
68129
- * drift with no remedy the user can apply. Such a token is still REPORTED; it
68130
- * just does not claim to be a secret.
68131
- */
68132
- function isSecretBySpelling(token) {
68133
- return token.startsWith("{{resolve:ssm-secure:");
68134
- }
68135
- /**
68136
68289
  * Every `{{resolve:...}}` token still present in `value`.
68137
68290
  *
68138
68291
  * Used to NAME an unresolvable reference without quoting the string it sits in.
@@ -68285,10 +68438,13 @@ var DriftSecretRefusalError = class DriftSecretRefusalError extends CdkdError {
68285
68438
  /**
68286
68439
  * Whether an error thrown out of `resolveStateSecretExpressions` is a
68287
68440
  * deliberate REFUSAL rather than a failed read. See
68288
- * {@link DriftSecretRefusalError}.
68441
+ * {@link DriftSecretRefusalError} — drift's own region refusal — and
68442
+ * `IntrinsicResolutionRefusalError`, the resolver's: since issue #2482 the
68443
+ * `ssm-secure` arm refuses a definitive `String` / `StringList` parameter with
68444
+ * the latter, and that is a decision, not an IAM problem to go hunting for.
68289
68445
  */
68290
68446
  function isDriftSecretRefusal(err) {
68291
- return err instanceof DriftSecretRefusalError;
68447
+ return err instanceof DriftSecretRefusalError || err instanceof IntrinsicResolutionRefusalError;
68292
68448
  }
68293
68449
  /**
68294
68450
  * One-line human phrasing for a {@link NotComparedCause}, used per entry in the
@@ -68467,17 +68623,19 @@ async function resolveDriftLeafByRegion(leaf, propertyPath, logicalId, consumerR
68467
68623
  *
68468
68624
  * A `{{resolve:...}}` token that SURVIVES the pass is reported through
68469
68625
  * `onUnresolved` and left in place — it is not an error. The resolver's
68470
- * unsupported-service arm (`ssm-secure:` is the live example) warns and returns
68471
- * the literal, and `cdkd deploy` resolves through the very same code, so AWS is
68472
- * ALREADY holding that literal string and state records it. Replaying it is
68473
- * therefore a correct no-op, and failing the resource over it would take every
68474
- * other drifted property on that resource down with it (plus exit 2). The
68475
- * report exists so the user learns cdkd is shipping a token it cannot resolve,
68476
- * which is a real thing to know and not a reason to stop.
68626
+ * unsupported-service arm warns and returns the literal (`ssm-secure:` was the
68627
+ * live example until issue #2482 gave it an arm; what reaches it now is text
68628
+ * that merely looks like a reference), and `cdkd deploy` resolves through the
68629
+ * very same code, so AWS is ALREADY holding that literal string and state
68630
+ * records it. Replaying it is therefore a correct no-op, and failing the
68631
+ * resource over it would take every other drifted property on that resource
68632
+ * down with it (plus exit 2). The report exists so the user learns cdkd is
68633
+ * shipping a token it cannot resolve, which is a real thing to know and not a
68634
+ * reason to stop.
68477
68635
  *
68478
68636
  * Only the TOKENS are reported, never the leaf that held them: the leaf is
68479
68637
  * partially substituted by this point, so a mixed `secretsmanager` +
68480
- * `ssm-secure` string comes back carrying real plaintext.
68638
+ * look-alike string comes back carrying real plaintext.
68481
68639
  *
68482
68640
  * Returns the input by identity when it holds no dynamic reference, so the
68483
68641
  * non-secret path is unchanged down to object identity.
@@ -68500,10 +68658,7 @@ async function resolveStateSecretExpressions(props, resolvers, secrets, options)
68500
68658
  if (!v.includes("{{resolve:")) return v;
68501
68659
  const resolved = await resolveDriftLeafByRegion(v, path, logicalId, consumerRegion, producerRegions, resolvers, ctx);
68502
68660
  const survivors = survivingDynamicReferences(resolved).filter((t) => v.includes(t));
68503
- if (survivors.length > 0) {
68504
- if (survivors.some(isSecretBySpelling)) secretPaths?.add(path);
68505
- onUnresolved?.(survivors, path);
68506
- }
68661
+ if (survivors.length > 0) onUnresolved?.(survivors, path);
68507
68662
  if (carriesRecordedSecret(resolved, secrets)) secretPaths?.add(path);
68508
68663
  return resolved;
68509
68664
  }
@@ -68763,7 +68918,7 @@ async function runDriftForStack(stackName, region, stateBackend, providerRegistr
68763
68918
  logger.warn(`${logicalId} (${resource.resourceType}): ` + (refused ? "refused to resolve a dynamic reference this resource's state records, so its secret-bearing properties are NOT compared — " : "could not resolve the dynamic reference(s) this resource's state records, so its secret-bearing properties are NOT compared — ") + `${maskSecretsInText(err instanceof Error ? err.message : String(err), secrets)}`);
68764
68919
  secrets.clear();
68765
68920
  }
68766
- if (unresolvedTokens.size > 0) logger.warn(`${logicalId} (${resource.resourceType}): cdkd cannot resolve ${maskSecretsInText([...unresolvedTokens].join(", "), secrets)} — those properties are NOT compared. A revert leaves a property whose WHOLE value is one of these tokens untouched; where a token is EMBEDDED in a longer string, the revert writes that string with the token literal, exactly as 'cdkd deploy' does — so a resolved value AWS holds there WOULD be overwritten. cdkd resolves 'secretsmanager' and 'ssm' references only.`);
68921
+ if (unresolvedTokens.size > 0) logger.warn(`${logicalId} (${resource.resourceType}): cdkd cannot resolve ${maskSecretsInText([...unresolvedTokens].join(", "), secrets)} — those properties are NOT compared. A revert leaves a property whose WHOLE value is one of these tokens untouched; where a token is EMBEDDED in a longer string, the revert writes that string with the token literal, exactly as 'cdkd deploy' does — so a resolved value AWS holds there WOULD be overwritten. cdkd resolves 'secretsmanager', 'ssm' and 'ssm-secure' references; anything else is left as written.`);
68767
68922
  const observedIgnorePaths = useObserved ? undeclaredEmptyObservedKeys(resource.observedProperties, resource.properties ?? {}) : [];
68768
68923
  const normalized = await canonicalizePrincipalUniqueIds(comparisonBaseline, aws, resolvePrincipalUniqueId);
68769
68924
  const protocolNormalized = canonicalizeIpProtocols(normalized.baseline, normalized.aws, resource.resourceType);
@@ -69334,19 +69489,24 @@ function mergeUntemplatedValue(awsValue, desiredValue) {
69334
69489
  * warning, on the premise that `cdkd deploy` resolves through the
69335
69490
  * resolver's same unsupported-service arm — so AWS already holds the literal
69336
69491
  * and replaying it is a no-op. **That premise holds only for records cdkd
69337
- * deployed.** CloudFormation resolves `ssm-secure` SERVER-side, so a record
69338
- * adopted by `cdkd import --migrate-from-cloudformation` has the literal token
69339
- * in state while the live resource holds the PLAINTEXT. `diffAt` skips such a
69340
- * leaf, so it never drifts — but `buildRevertNewProperties` overlays the whole
69341
- * top-level subtree when any SIBLING key drifts, which would push the literal
69342
- * token over a resolved value. That is defect 1 of this issue surviving in a
69343
- * narrower case, on a live AWS write.
69492
+ * deployed.** A record adopted by `cdkd import --migrate-from-cloudformation`,
69493
+ * or one whose position was edited out of band, holds something ELSE there.
69494
+ * `diffAt` skips such a leaf, so it never drifts but
69495
+ * `buildRevertNewProperties` overlays the whole top-level subtree when any
69496
+ * SIBLING key drifts, which would push the literal token over that value. That
69497
+ * is defect 1 of this issue surviving in a narrower case, on a live AWS write.
69498
+ *
69499
+ * (When this was written the population was `ssm-secure`, which CloudFormation
69500
+ * resolves SERVER-side, so a migrated record held the PLAINTEXT on AWS. Since
69501
+ * issue #2482 cdkd resolves that spelling itself and the token never reaches
69502
+ * this pass; what survives is a spelling nobody resolves, so the live value
69503
+ * here is whatever the user or another tool put at that position.)
69344
69504
  *
69345
69505
  * Deciding by PROVENANCE would need a flag state does not carry. Deciding by
69346
69506
  * what AWS actually holds needs nothing and is exact in both directions: for a
69347
69507
  * cdkd-deployed record AWS holds the token, so copying it back is the same
69348
- * no-op the premise described; for a migrated record AWS holds the resolved
69349
- * value, which is left untouched.
69508
+ * no-op the premise described; for any other record AWS holds a value cdkd
69509
+ * cannot compare, which is left untouched.
69350
69510
  *
69351
69511
  * Falls back to KEEPING the token wherever AWS has nothing at that position —
69352
69512
  * that is what `cdkd deploy` sends, so it is the safe residual rather than
@@ -69354,12 +69514,11 @@ function mergeUntemplatedValue(awsValue, desiredValue) {
69354
69514
  * and bails to that same residual on any length mismatch, since a reordered
69355
69515
  * readback cannot be positioned against.
69356
69516
  */
69357
- function preserveLiveValuesAtUnresolvedTokens(send, awsProperties, secrets) {
69517
+ function preserveLiveValuesAtUnresolvedTokens(send, awsProperties) {
69358
69518
  const walk = (value, live) => {
69359
69519
  if (typeof value === "string" && value.includes("{{resolve:")) {
69360
69520
  if (!isSingleDynamicReferenceToken(value)) return value;
69361
69521
  if (live === void 0) return value;
69362
- if (typeof live === "string" && live.length >= MIN_SECRET_NEEDLE_LENGTH && isSecretBySpelling(value)) secrets.set(live, value);
69363
69522
  return live;
69364
69523
  }
69365
69524
  if (Array.isArray(value)) {
@@ -69713,7 +69872,7 @@ async function runRevert(reports, providerRegistry, stateBackend, stateConfig, a
69713
69872
  let newProperties;
69714
69873
  try {
69715
69874
  const overlaid = buildRevertNewProperties(outcome.changes, desiredProperties, outcome.awsProperties, { preserveUntemplated: stateResource.observedProperties === void 0 });
69716
- const maskPreserved = preserveLiveValuesAtMaskedLeaves(unresolvedTokens.size > 0 ? preserveLiveValuesAtUnresolvedTokens(overlaid, outcome.awsProperties, secrets) : overlaid, outcome.awsProperties, secrets);
69875
+ const maskPreserved = preserveLiveValuesAtMaskedLeaves(unresolvedTokens.size > 0 ? preserveLiveValuesAtUnresolvedTokens(overlaid, outcome.awsProperties) : overlaid, outcome.awsProperties, secrets);
69717
69876
  if (maskPreserved.unpreservablePaths.length > 0) {
69718
69877
  totalUnresolvable++;
69719
69878
  logger.error(` ✗ ${report.stackName}/${outcome.logicalId} (${outcome.resourceType}): refused to revert ${maskPreserved.unpreservablePaths.join(", ")} — the recorded baseline holds only the redaction mask there (a NoEcho custom-resource value), and AWS reports nothing to preserve, so cdkd has no value it may write. Force that custom resource to update (change one of its properties, e.g. a nonce) and re-deploy, so its handler runs again and supplies the value — an ordinary re-deploy leaves it unchanged and the mask stays.`);
@@ -70485,7 +70644,11 @@ async function stateMigrateCommand(options) {
70485
70644
  logger.info("Migrating state bucket:");
70486
70645
  logger.info(` source: ${legacyBucket} (resolved for --region ${region})`);
70487
70646
  logger.info(` destination: ${newBucket}`);
70488
- const probe = new S3Client({ region: "us-east-1" });
70647
+ const probeRegion = "us-east-1";
70648
+ const probe = new S3Client({
70649
+ ...awsClientDefaults(),
70650
+ region: probeRegion
70651
+ });
70489
70652
  let sourceExists;
70490
70653
  try {
70491
70654
  sourceExists = await bucketExists(probe, legacyBucket);
@@ -70495,7 +70658,10 @@ async function stateMigrateCommand(options) {
70495
70658
  if (!sourceExists) throw new Error(`Source bucket '${legacyBucket}' does not exist. Nothing to migrate. (Tip: run \`cdkd state info\` to confirm which bucket cdkd is reading from.)`);
70496
70659
  const legacyRegion = await resolveBucketRegion(legacyBucket);
70497
70660
  logger.info(` source bucket actual region: ${legacyRegion}`);
70498
- const legacyS3 = new S3Client({ region: legacyRegion });
70661
+ const legacyS3 = new S3Client({
70662
+ ...awsClientDefaults(),
70663
+ region: legacyRegion
70664
+ });
70499
70665
  try {
70500
70666
  await assertNoActiveLocks(legacyS3, legacyBucket);
70501
70667
  const sourceObjects = await listAllObjects(legacyS3, legacyBucket);
@@ -70595,7 +70761,10 @@ async function assertNoActiveLocks(s3, bucket) {
70595
70761
  }
70596
70762
  }
70597
70763
  async function ensureDestinationBucket(bucketName, region, accountId, logger) {
70598
- const probe = new S3Client({ region });
70764
+ const probe = new S3Client({
70765
+ ...awsClientDefaults(),
70766
+ region
70767
+ });
70599
70768
  let exists;
70600
70769
  try {
70601
70770
  exists = await bucketExists(probe, bucketName);
@@ -70606,10 +70775,16 @@ async function ensureDestinationBucket(bucketName, region, accountId, logger) {
70606
70775
  logger.info(`Destination bucket ${bucketName} already exists; reusing it.`);
70607
70776
  const actual = await resolveBucketRegion(bucketName);
70608
70777
  if (actual !== region) logger.warn(`Destination bucket lives in ${actual}, but source is in ${region}. Cross-region copy is supported but slower; objects will be replicated to ${actual}.`);
70609
- return new S3Client({ region: actual });
70778
+ return new S3Client({
70779
+ ...awsClientDefaults(),
70780
+ region: actual
70781
+ });
70610
70782
  }
70611
70783
  logger.info(`Creating destination bucket ${bucketName} in ${region}...`);
70612
- const s3 = new S3Client({ region });
70784
+ const s3 = new S3Client({
70785
+ ...awsClientDefaults(),
70786
+ region
70787
+ });
70613
70788
  const createParams = { Bucket: bucketName };
70614
70789
  if (region !== "us-east-1") createParams.CreateBucketConfiguration = { LocationConstraint: region };
70615
70790
  await s3.send(new CreateBucketCommand(createParams));
@@ -71871,7 +72046,7 @@ const PRE_DELETE_HANDLERS = {
71871
72046
  const { ApiGatewayV2Client, DeleteStageCommand, NotFoundException } = await import("@aws-sdk/client-apigatewayv2");
71872
72047
  const apiId = entry.properties["ApiId"];
71873
72048
  if (typeof apiId !== "string" || !apiId) throw new Error(`cdkd state's properties for ${entry.logicalId} (${entry.resourceType}) is missing 'ApiId'`);
71874
- const client = new ApiGatewayV2Client({});
72049
+ const client = new ApiGatewayV2Client({ ...awsClientDefaults() });
71875
72050
  try {
71876
72051
  await client.send(new DeleteStageCommand({
71877
72052
  ApiId: apiId,
@@ -71890,7 +72065,7 @@ const PRE_DELETE_HANDLERS = {
71890
72065
  const users = entry.properties["Users"];
71891
72066
  const groups = entry.properties["Groups"];
71892
72067
  if (!((roles?.length ?? 0) + (users?.length ?? 0) + (groups?.length ?? 0) > 0)) throw new Error(`cdkd state's properties for ${entry.logicalId} (${entry.resourceType}) has no Roles/Users/Groups attachment recorded — cannot pre-delete the inline policy. State may be from a pre-v0.74 cdkd binary; re-run \`cdkd state refresh-observed\` before export.`);
71893
- const client = new IAMClient({});
72068
+ const client = new IAMClient({ ...awsClientDefaults() });
71894
72069
  const deleteSafely = async (op) => {
71895
72070
  try {
71896
72071
  await op();
@@ -74316,7 +74491,7 @@ async function confirmPrompt$3(prompt) {
74316
74491
  return confirmOrRefuse(prompt, { refusal: "The cdkd export confirmation prompt cannot run in a non-interactive environment. Pass -y / --yes to confirm, or run the command from a real terminal." });
74317
74492
  }
74318
74493
  function createExportCommand() {
74319
- const cmd = new Command("export").description("Hand a cdkd-managed stack over to CloudFormation via CFn IMPORT (changeset). AWS resources are unchanged; cdkd state for the stack is deleted on success. Mirror of `cdkd import` (AWS → cdkd) in the reverse direction (cdkd → CFn). Accepts JSON and YAML templates (YAML via a CFn-aware codec that preserves !Ref / !GetAtt / !Sub shorthand). Aborts if any resource is not CFn-importable.").argument("[stack]", "Stack name to export (auto-detected for single-stack apps)").option("--cfn-stack-name <name>", "Name of the destination CloudFormation stack for the root stack. Defaults to the cdkd stack name (or the cdkd2cfnStackName mapping when the name contains '~'). For per-nested-child overrides, use --cfn-child-stack-name.").option("--cfn-child-stack-name <pair...>", "Per-nested-child CFn stack-name override. Repeatable. Format: '<cdkdName>=<cfnName>' (e.g. --cfn-child-stack-name 'MyApp~Database=my-app-db'). The cdkd stack name for a nested child is '<parent>~<childLogicalId>' (v6 state-key form). Without an override the CFn name is derived by replacing '~' with '-'. Only consulted when the exported stack tree contains nested children; ignored for flat stacks.").option("--template <path>", "Path to a pre-rendered CloudFormation template (JSON or YAML — format auto-detected). Skips synth.").option("--stack-region <region>", "Region of the cdkd state record to operate on. Required when the same stack name has state in multiple regions.").option("--dry-run", "Print the import plan without creating a changeset.", false).option("--accept-transient-context", "Allow CLI -c key=value overrides at export time even though they are not persisted to cdk.json / cdk.context.json (default: refuse). When set, the user is responsible for passing the same -c flags to every future cdk deploy.", false).option("--include-non-importable", "Run a 2-phase migration when the stack contains non-importable resources (Custom::*). Phase 1 imports the importable resources; phase 2 CFn-CREATEs the non-importable ones, which re-invokes each Custom Resource's onCreate handler. Make sure onCreate is idempotent before enabling.", false).option("--parameter <key=value...>", "CFn template Parameter override, repeatable. Required when the synthesized template has Parameters without Default values; otherwise overrides the template's default value. Format: --parameter Key=Value.").option("--strict-cross-stack", "Refuse to export when sibling cdkd stacks in the same CDK app reference the exporting stack via Fn::GetStackOutput. Without the flag, cdkd warns and proceeds — the consumers keep resolving via the CloudFormation fallback (weak reference) unless they deploy with --no-cfn-fallback.", false).option("--skip-import-support-preflight", "Skip the pre-flight that refuses resource types whose CloudFormation registry schema says CFn cannot IMPORT them (no read handler AND NON_PROVISIONABLE), and let CreateChangeSet answer instead. The pre-flight is a registry HEURISTIC, not AWS's supported-for-import list, so this is the escape hatch for a type AWS has since made importable. Expect the changeset to be rejected if the heuristic was right.", false).option("--no-recreate-import-unsupported", "Block instead of auto-handling resource types AWS does NOT support in IMPORT changesets (currently only AWS::ApiGatewayV2::Stage, emitted by CDK HttpApi). Default behavior: cdkd skips these from phase 1, deletes the AWS-side resource between phases, and lets CFn re-CREATE in phase 2 (brief unavailability window). With this flag, the export aborts with a clear error instead.").action(withErrorHandling(exportCommand));
74494
+ const cmd = new Command("export").description("Hand a cdkd-managed stack over to CloudFormation via CFn IMPORT (changeset). AWS resources are unchanged; cdkd state for the stack is deleted on success. Mirror of `cdkd import` (AWS → cdkd) in the reverse direction (cdkd → CFn). Accepts JSON and YAML templates (YAML via a CFn-aware codec that preserves !Ref / !GetAtt / !Sub shorthand). Aborts if any resource is not CFn-importable.").argument("[stack]", "Stack name to export (auto-detected for single-stack apps)").option("--cfn-stack-name <name>", "Name of the destination CloudFormation stack for the root stack. Defaults to the cdkd stack name (or the cdkd2cfnStackName mapping when the name contains '~'). For per-nested-child overrides, use --cfn-child-stack-name.").option("--cfn-child-stack-name <pair...>", "Per-nested-child CFn stack-name override. Repeatable. Format: '<cdkdName>=<cfnName>' (e.g. --cfn-child-stack-name 'MyApp~Database=my-app-db'). The cdkd stack name for a nested child is '<parent>~<childLogicalId>' (v6 state-key form). Without an override the CFn name is derived by replacing '~' with '-'. Only consulted when the exported stack tree contains nested children; ignored for flat stacks.").option("--template <path>", "Path to a pre-rendered CloudFormation template (JSON or YAML — format auto-detected). Skips synth.").option("--stack-region <region>", "Region of the cdkd state record to operate on. Required when the same stack name has state in multiple regions.").option("--dry-run", "Print the import plan without creating a changeset.", false).option("--accept-transient-context", "Allow CLI -c key=value overrides at export time even though they are not persisted to cdk.json / cdk.context.json (default: refuse). When set, the user is responsible for passing the same -c flags to every future cdk deploy.", false).option("--include-non-importable", "Run a 2-phase migration when the stack contains non-importable resources (Custom::*). Phase 1 imports the importable resources; phase 2 CFn-CREATEs the non-importable ones, which re-invokes each Custom Resource's onCreate handler. Make sure onCreate is idempotent before enabling.", false).option("--parameter <key=value...>", "CFn template Parameter override, repeatable. Required when the synthesized template has Parameters without Default values; otherwise overrides the template's default value. Format: --parameter Key=Value.").option("--strict-cross-stack", "Refuse to export when sibling cdkd stacks in the same CDK app reference the exporting stack via Fn::GetStackOutput. Without the flag, cdkd warns and proceeds — the consumers keep resolving via the CloudFormation fallback (weak reference) unless they deploy with --no-cfn-fallback.", false).option("--skip-import-support-preflight", "Skip the pre-flight that refuses resource types whose CloudFormation registry schema says CFn cannot IMPORT them (no read handler AND NON_PROVISIONABLE), and let CreateChangeSet answer instead. The pre-flight is a registry HEURISTIC, not AWS's supported-for-import list, so this is the escape hatch for a type AWS has since made importable. Expect the changeset to be rejected if the heuristic was right.", false).option("--no-recreate-import-unsupported", "Block instead of auto-handling resource types AWS does NOT support in IMPORT changesets (AWS::ApiGatewayV2::Stage and AWS::IAM::Policy). Default behavior: cdkd skips these from phase 1, deletes the AWS-side resource between phases, and lets CFn re-CREATE in phase 2 (brief unavailability window). With this flag, the export aborts with a clear error instead.").action(withErrorHandling(exportCommand));
74320
74495
  [
74321
74496
  ...commonOptions,
74322
74497
  ...appOptions,
@@ -77488,6 +77663,7 @@ async function gcCommand(options) {
77488
77663
  const accountId = (await accountClients.sts.send(new GetCallerIdentityCommand({}))).Account;
77489
77664
  const bucketName = options.stateBucket ?? getDefaultStateBucketName(accountId);
77490
77665
  const markerS3Client = new S3Client({
77666
+ ...awsClientDefaults({ profile: options.profile }),
77491
77667
  region: effective.region,
77492
77668
  ...options.profile && { profile: options.profile }
77493
77669
  });
@@ -77512,6 +77688,7 @@ async function gcCommand(options) {
77512
77688
  if (awsClients !== accountClients) accountClients.destroy();
77513
77689
  setAwsClients(awsClients);
77514
77690
  const ecrClient = new ECRClient({
77691
+ ...awsClientDefaults({ profile: options.profile }),
77515
77692
  region,
77516
77693
  ...options.profile && { profile: options.profile }
77517
77694
  });
@@ -78401,7 +78578,10 @@ async function publishAssetsCommand(stacks, options) {
78401
78578
  if (targetStacks.length === 0) throw new Error(stackPatterns.length > 0 ? `No stacks matching ${stackPatterns.join(", ")} found in assembly. Available: ${allStacks.map(describeStack).join(", ")}` : "No stacks found in assembly");
78402
78579
  const baseRegion = namedCliRegion(options.region) ?? "us-east-1";
78403
78580
  const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
78404
- const stsClient = new STSClient({ region: baseRegion });
78581
+ const stsClient = new STSClient({
78582
+ ...awsClientDefaults(),
78583
+ region: baseRegion
78584
+ });
78405
78585
  const accountId = (await stsClient.send(new GetCallerIdentityCommand({}))).Account;
78406
78586
  stsClient.destroy();
78407
78587
  const useCdkBootstrapAssets = resolveUseCdkBootstrapAssets(options.useCdkBootstrapAssets);
@@ -82150,7 +82330,10 @@ async function pullEcrImage(imageUri, options) {
82150
82330
  const callerIdentityKey = callerRegion ?? "_unset";
82151
82331
  let callerAccount = CALLER_IDENTITY_CACHE.get(callerIdentityKey);
82152
82332
  if (callerAccount === void 0) {
82153
- const sts = new STSClient({ ...callerRegion && { region: callerRegion } });
82333
+ const sts = new STSClient({
82334
+ ...awsClientDefaults(),
82335
+ ...callerRegion && { region: callerRegion }
82336
+ });
82154
82337
  try {
82155
82338
  const identity = await sts.send(new GetCallerIdentityCommand({}));
82156
82339
  if (!identity.Account) throw new LocalInvokeBuildError$1("STS GetCallerIdentity returned no Account. Verify your AWS credentials.");
@@ -82177,6 +82360,7 @@ async function pullEcrImage(imageUri, options) {
82177
82360
  } else if (crossAccount) logger.info(`Cross-account ECR pull: image account ${parsed.accountId} != caller ${callerAccount}. Using the caller's credentials; pass --ecr-role-arn <arn> if AWS rejects with AccessDenied.`);
82178
82361
  if (crossRegion) logger.info(`Cross-region ECR pull: image region ${parsed.region} != caller ${callerRegion ?? "(unset)"}. Authenticating against the image region directly.`);
82179
82362
  const ecr = new ECRClient({
82363
+ ...awsClientDefaults(),
82180
82364
  region: parsed.region,
82181
82365
  ...assumed && { credentials: assumed }
82182
82366
  });
@@ -82202,7 +82386,10 @@ async function pullEcrImage(imageUri, options) {
82202
82386
  */
82203
82387
  async function assumeRoleForEcr(roleArn, callerRegion, logger) {
82204
82388
  logger.debug(`Assuming role ${roleArn} for ECR pull...`);
82205
- const sts = new STSClient({ ...callerRegion && { region: callerRegion } });
82389
+ const sts = new STSClient({
82390
+ ...awsClientDefaults(),
82391
+ ...callerRegion && { region: callerRegion }
82392
+ });
82206
82393
  try {
82207
82394
  const creds = (await sts.send(new AssumeRoleCommand({
82208
82395
  RoleArn: roleArn,
@@ -84531,7 +84718,10 @@ function forwardAwsEnv$2(env) {
84531
84718
  */
84532
84719
  async function resolveProfileCredentials(profile) {
84533
84720
  const { STSClient } = await import("@aws-sdk/client-sts");
84534
- const sts = new STSClient({ profile });
84721
+ const sts = new STSClient({
84722
+ ...awsClientDefaults({ profile }),
84723
+ profile
84724
+ });
84535
84725
  try {
84536
84726
  const credsProvider = sts.config.credentials;
84537
84727
  const creds = typeof credsProvider === "function" ? await credsProvider() : credsProvider;
@@ -84552,7 +84742,10 @@ async function resolveProfileCredentials(profile) {
84552
84742
  */
84553
84743
  async function assumeLambdaExecutionRole$1(roleArn, region) {
84554
84744
  const { STSClient, AssumeRoleCommand } = await import("@aws-sdk/client-sts");
84555
- const sts = new STSClient({ ...region && { region } });
84745
+ const sts = new STSClient({
84746
+ ...awsClientDefaults(),
84747
+ ...region && { region }
84748
+ });
84556
84749
  try {
84557
84750
  const creds = (await sts.send(new AssumeRoleCommand({
84558
84751
  RoleArn: roleArn,
@@ -84831,7 +85024,10 @@ async function resolvePseudoParametersForStartApi(stateRegion, options) {
84831
85024
  let accountId;
84832
85025
  try {
84833
85026
  const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
84834
- const sts = new STSClient({ ...region && { region } });
85027
+ const sts = new STSClient({
85028
+ ...awsClientDefaults(),
85029
+ ...region && { region }
85030
+ });
84835
85031
  try {
84836
85032
  accountId = (await sts.send(new GetCallerIdentityCommand({}))).Account;
84837
85033
  } finally {
@@ -85106,8 +85302,14 @@ var EcsSecretsResolutionError = class EcsSecretsResolutionError extends Error {
85106
85302
  async function resolveEcsSecrets(entries, options = {}) {
85107
85303
  if (entries.length === 0) return [];
85108
85304
  const logger = getLogger().child("ecs-secrets");
85109
- const secretsClient = options.secretsManagerClient ?? new SecretsManagerClient({ ...options.region && { region: options.region } });
85110
- const ssmClient = options.ssmClient ?? new SSMClient({ ...options.region && { region: options.region } });
85305
+ const secretsClient = options.secretsManagerClient ?? new SecretsManagerClient({
85306
+ ...awsClientDefaults(),
85307
+ ...options.region && { region: options.region }
85308
+ });
85309
+ const ssmClient = options.ssmClient ?? new SSMClient({
85310
+ ...awsClientDefaults(),
85311
+ ...options.region && { region: options.region }
85312
+ });
85111
85313
  const ownsSecretsClient = options.secretsManagerClient === void 0;
85112
85314
  const ownsSsmClient = options.ssmClient === void 0;
85113
85315
  try {
@@ -85901,7 +86103,10 @@ async function localRunTaskCommand(target, options) {
85901
86103
  async function resolvePlaceholderAccount(arn, region) {
85902
86104
  if (!arn.includes("${AWS::AccountId}")) return arn;
85903
86105
  const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
85904
- const sts = new STSClient({ ...region && { region } });
86106
+ const sts = new STSClient({
86107
+ ...awsClientDefaults(),
86108
+ ...region && { region }
86109
+ });
85905
86110
  try {
85906
86111
  const account = (await sts.send(new GetCallerIdentityCommand({}))).Account;
85907
86112
  if (!account) throw new Error(`--assume-task-role: GetCallerIdentity returned no Account; cannot resolve placeholder ARN '${arn}'. Pass the ARN explicitly: --assume-task-role <arn>`);
@@ -85916,7 +86121,10 @@ async function resolvePlaceholderAccount(arn, region) {
85916
86121
  */
85917
86122
  async function assumeTaskRole(roleArn, region) {
85918
86123
  const { STSClient, AssumeRoleCommand } = await import("@aws-sdk/client-sts");
85919
- const sts = new STSClient({ ...region && { region } });
86124
+ const sts = new STSClient({
86125
+ ...awsClientDefaults(),
86126
+ ...region && { region }
86127
+ });
85920
86128
  try {
85921
86129
  const creds = (await sts.send(new AssumeRoleCommand({
85922
86130
  RoleArn: roleArn,
@@ -86055,7 +86263,10 @@ function pickCandidateStack(stackPattern, stacks) {
86055
86263
  }
86056
86264
  async function resolveCallerAccountId$1(region) {
86057
86265
  const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
86058
- const sts = new STSClient({ ...region && { region } });
86266
+ const sts = new STSClient({
86267
+ ...awsClientDefaults(),
86268
+ ...region && { region }
86269
+ });
86059
86270
  try {
86060
86271
  return (await sts.send(new GetCallerIdentityCommand({}))).Account;
86061
86272
  } finally {
@@ -87215,6 +87426,7 @@ async function buildAgentCoreImageContext(candidate, stateProvider, options) {
87215
87426
  async function resolveCallerAccountId(region, profile) {
87216
87427
  const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
87217
87428
  const sts = new STSClient({
87429
+ ...awsClientDefaults({ profile }),
87218
87430
  ...region && { region },
87219
87431
  ...profile && { profile }
87220
87432
  });
@@ -87407,7 +87619,10 @@ function forwardAwsEnv$1(env) {
87407
87619
  }
87408
87620
  async function assumeAgentCoreExecutionRole(roleArn, region) {
87409
87621
  const { STSClient, AssumeRoleCommand } = await import("@aws-sdk/client-sts");
87410
- const sts = new STSClient({ ...region && { region } });
87622
+ const sts = new STSClient({
87623
+ ...awsClientDefaults(),
87624
+ ...region && { region }
87625
+ });
87411
87626
  try {
87412
87627
  const creds = (await sts.send(new AssumeRoleCommand({
87413
87628
  RoleArn: roleArn,
@@ -88194,7 +88409,10 @@ async function resolvePseudoParametersForInvoke(stackRegion, options) {
88194
88409
  let accountId;
88195
88410
  try {
88196
88411
  const { STSClient, GetCallerIdentityCommand } = await import("@aws-sdk/client-sts");
88197
- const sts = new STSClient({ ...region && { region } });
88412
+ const sts = new STSClient({
88413
+ ...awsClientDefaults(),
88414
+ ...region && { region }
88415
+ });
88198
88416
  try {
88199
88417
  accountId = (await sts.send(new GetCallerIdentityCommand({}))).Account;
88200
88418
  } finally {
@@ -88337,7 +88555,10 @@ async function applyLambdaCredentialEnv(dockerEnv, args) {
88337
88555
  */
88338
88556
  async function assumeLambdaExecutionRole(roleArn, region) {
88339
88557
  const { STSClient, AssumeRoleCommand } = await import("@aws-sdk/client-sts");
88340
- const sts = new STSClient({ ...region && { region } });
88558
+ const sts = new STSClient({
88559
+ ...awsClientDefaults(),
88560
+ ...region && { region }
88561
+ });
88341
88562
  try {
88342
88563
  const creds = (await sts.send(new AssumeRoleCommand({
88343
88564
  RoleArn: roleArn,
@@ -89660,4 +89881,4 @@ function buildProgram() {
89660
89881
 
89661
89882
  //#endregion
89662
89883
  export { buildProgram };
89663
- //# sourceMappingURL=program-C5evYwxk.js.map
89884
+ //# sourceMappingURL=program-BSanOkkV.js.map