@go-to-k/cdkd 0.301.4 → 0.301.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/{asg-provider--GY-B-zI.js → asg-provider-GNiE6dR1.js} +2 -2
  2. package/dist/{asg-provider--GY-B-zI.js.map → asg-provider-GNiE6dR1.js.map} +1 -1
  3. package/dist/cli.js +2 -2
  4. package/dist/{deploy-engine-BIPU9Xdh.js → deploy-engine-D1z0QUsv.js} +19966 -19946
  5. package/dist/deploy-engine-D1z0QUsv.js.map +1 -0
  6. package/dist/{iam-role-provider-C58oW5zG.js → iam-role-provider-988BRmqF.js} +2 -2
  7. package/dist/{iam-role-provider-C58oW5zG.js.map → iam-role-provider-988BRmqF.js.map} +1 -1
  8. package/dist/index.d.ts +0 -5
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/{neptune-provider-DoKgbZCz.js → neptune-provider-DUaw7kpj.js} +2 -2
  12. package/dist/{neptune-provider-DoKgbZCz.js.map → neptune-provider-DUaw7kpj.js.map} +1 -1
  13. package/dist/{program-DYfZCsxM.js → program-Cqk1ZTsY.js} +116 -66
  14. package/dist/program-Cqk1ZTsY.js.map +1 -0
  15. package/dist/{provider-classes-BSUoljqw.js → provider-classes-CR4DtD8M.js} +151 -89
  16. package/dist/provider-classes-CR4DtD8M.js.map +1 -0
  17. package/dist/{rds-provider-DI_O0_iG.js → rds-provider-DBW972HG.js} +2 -2
  18. package/dist/{rds-provider-DI_O0_iG.js.map → rds-provider-DBW972HG.js.map} +1 -1
  19. package/dist/{version-Bft5jrTk.js → version-CnjZ9J4l.js} +2 -2
  20. package/dist/{version-Bft5jrTk.js.map → version-CnjZ9J4l.js.map} +1 -1
  21. package/package.json +1 -1
  22. package/dist/deploy-engine-BIPU9Xdh.js.map +0 -1
  23. package/dist/program-DYfZCsxM.js.map +0 -1
  24. package/dist/provider-classes-BSUoljqw.js.map +0 -1
@@ -2,12 +2,12 @@ import { r as getAwsClients } from "./aws-clients-B_CEQGE1.js";
2
2
  import { B as safeMsg, F as displaySafe, I as displayStackName, L as isPasteableIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displayIdent, a as getLogger, b as generateResourceNameWithFallback, n as isAwsAuthoredFailure, r as safeStringify, t as describeAwsFailure, y as generateResourceName, z as plainIdentOr } from "./aws-failure-text-BEQfs6za.js";
3
3
  import { $ as protectedReplacementAdvice, $n as explicitDenyPolicyKind, $t as ambientCredentialConfig, A as isQuotableImportValue, B as isTerminalDeleteFailure, C as setBounded, D as VALUE_NOT_SHOWN, E as assertRegionMatch, F as resolveExplicitPhysicalId, Fn as isInertUnquoted, H as observeThenDisableProtection, Hn as withheldTargetClause, In as pasteableCommand, Kt as injectiveKey, L as ProtectionFlipRegistry, M as quotedRemedyLogicalId, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as commandHole, Nt as markSupersedesEarlierCreate, O as isPlainImportJson, P as remedyLogicalId, Pn as hasClauseBreak, Q as pasteableAwsCommand, Qn as markReplayMayCollide, Qt as ambientClientDefaults, Rn as plainOrDescribed, S as replayedSendWindow, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tt as clearCreatedBeforeFailure, U as protectionFlipKey, V as logGroupProtectionSite, Vn as shellQuote, W as rdsFamilyProtectionSite, X as WITHHELD_AWS_COMMAND, Y as UNNAMEABLE_ID_CLAUSE, Z as isAwsCliLiteral, Zn as markNameCollision, Zt as withPasteableAwsProfile, _ as RecentIdSet, _t as createMaskedLogSinks, a as onlySecretDerived, ar as isRetryableTransientError, at as startInterruptWatch, b as isInsideWindow, bn as ResourceUpdateNotSupportedError, bt as maskDeep, c as recordedPrincipalsRepair, cr as THROTTLING_ERROR_NAMES, ct as canonicalizeRoute53QueryName, dr as markNonRetryable, dt as compositeIdSkipResult, en as clientDefaultsFor, et as renderDisableCommand, fr as markRedactedCause, ft as logicalIdShown, g as AmbiguousCreateLatch, gt as stateOrphanRecordRemedy, h as AMBIGUOUS_LATCH_TTL_MS, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CdkdError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jt as markAuxiliaryFailure, k as isPlainImportValue, lr as isMarkedNonRetryable, lt as compositeIdFormatMessage, nn as AccountIdUnavailableError, nr as isAmbiguousOutcomeError, o as readPrincipalLists, or as isTransientServerError, ot as ElapsedBudgetRegistry, p as withRemovalDefaults, pr as wrapMaskedAwsError, pt as packCompositeId, q as userPoolProtectionSite, qt as injectiveKeyPrefix, r as SECRET_DERIVED_READ_LIVE, rr as isExplicitDenyError, tn as credentialFingerprint, u as clearOnUpdateRemoval, ur as isThrottlingError, ut as compositeIdSeparatorRefusal, v as ambiguousAttemptLead, vn as ProvisioningError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, x as replayFollowedAmbiguousAttempt, xt as maskerOrIdentity, y as createAttemptKey, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation } from "./iam-policy-targets-BkeM7IXi.js";
4
4
  import { s as ambientRegion } from "./aws-client-defaults-DBXBcg0J.js";
5
- import { $ as markRefusedBeforeApplying, Ao as requireConfigArray, B as compensateRemovedDeletionProtection, Ci as s3BucketRegionalDomainName, Co as coerceCfnBoolean, Cs as withoutPhysicalNameCopies, Da as refuseMalformedNestedChildOutputs, Do as configStringRefusal, Dr as waitForLambdaFunctionActive, Ec as rewriteTemplateAssetReferences, Eo as configIntegerRefusal, G as INDEX_SETTLE_POLL_INTERVAL_MS, Gi as passedParameterClassesOf, Gl as resolveAssemblyPath, Gr as isWaitAbandonedError, Gt as awaitInFlightSibling, H as resolveDynamoDbDeleteBudgetClock, Hi as parseWebACLArn, Hl as describeFileReadFailure, Hn as secretNamedAttributeNamesOf, Ht as withNestedStackContext, Io as withRetry, Is as carriesSecretMask, J as ECR_AUTO_DELETE_IMAGES_TAG, Jr as ec2InstanceProtectionSite, K as deleteTableWithIndexBusyRetry, Kr as markWaitAbandoned, L as DynamoDBGlobalTableProvider, Lo as canonicalLambdaFunctionName, Lr as slowCcOperationTimeoutMs, Lt as revertNestedChildFromJournal, Mi as getAccountInfo, Ml as derivePartitionAndUrlSuffix, Mo as requireConfigString, Ms as physicalNameCopiesOf, Ns as recordAttributeIdCopy, Ol as decodeListingKey, Oo as readConfigString, Pt as getNestedRevertRun, Q as getPriorAttempts, Qi as accountArgs, Qr as reEnableInstanceApiTermination, R as DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, Ro as lambdaFunctionNameForMask, Rr as unchangedBehindSecretReference, Si as s3BucketDualStackDomainName, So as toFiniteNumber, To as configBooleanRefusal, Ts as dynamicReferenceTokens, U as resolveDynamoDbDeleteBudgetMs, Ul as displayAssemblyPath, Ur as deleteSkipReason, V as deleteBudgetKey, Vt as getCurrentNestedStackContext, W as DELETE_INDEX_WAIT_PROCEED_NOTE, Wl as renderAssemblyPathEscape, Wr as withIndeterminateGuard, X as hasCdkAutoDeleteTag, Xr as observeThenDisableInstanceApiTermination, Xt as replacedDeleteFailureVerdict, Y as S3_AUTO_DELETE_OBJECTS_TAG, Yr as isTerminationProtectionPropagationError, Z as isTruthyCfnBoolean, Zo as passedNoEchoParametersOf, Zr as reDisableInstanceApiTermination, _i as outputReferenceProvenanceOf, _r as refuseMalformedDesiredTags, _s as markSameGenerationBag, a as findNestedTemplateTreeDefect, ao as withheldAccountClause, as as hasMaskableValues, b as lookupEachName, bi as s3BucketArn, bo as isWarmThroughputDecrease, br as definedAttributes, bs as redactSecretsForState, c as renderNestedTemplateTreeDefect, cr as reserveStackCreateToken, dn as REDACTED_DELETE_ADDRESS_SKIP_REASON, dr as isRefusedByName, fn as isRedactedRecordedValue, fr as markDeleteStarted, gr as readTagList, hi as isSettledInstanceState, hr as planTagDiff, jl as canonicalizeRegion, jo as requireConfigObject, jr as getCurrentResourceSecrets, js as recoverMaskedOutput, ko as replayWarn, ln as getCurrentProducerRegions, lo as withoutSilentDropProperties, mn as redactedDeleteAddressSkip, mr as DBPROXY_TAG_OPTIONS, o as isAbsoluteAssetPath, or as earliestDefined, pn as redactedDeleteAddressFields, pr as DBPROXY_TAGS_WHAT, q as waitForIndexesSettled, qa as refuseMalformedResourcesForDestroy, qt as getStackRecords, s as listNestedTemplateRows, so as findSilentDropProperties, t as DeployEngine, ur as acquireIdempotencyToken, v as chunks, vo as WARM_THROUGHPUT_MEMBERS, vr as tagMapAsList, vs as recordReferenceProvenanceEntry, wi as s3BucketWebsiteUrl, wo as coerceCfnInteger, x as withApiLimit, xc as stringifyValue, xi as s3BucketDomainName, xo as toCfnInteger, xr as stringifyIfAssigned, y as isAccessDeniedError, yo as coerceWarmThroughput$1, yr as tagPlanWarning, ys as snapshotPassProvenance, z as beginDeleteWait, zo as sameLambdaFunctionAddress } from "./deploy-engine-BIPU9Xdh.js";
6
- import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-C58oW5zG.js";
7
- import { a as resolveSecretDerivedPrincipals, i as isResolvableSecretPrincipalList, n as runDestroyForStack, o as canonicalizeIpProtocolValue, r as holdsUnprovenSecretPrincipalToken, s as resolvedResourceTimeoutMs, t as canonicalizeIpv4Cidr } from "./program-DYfZCsxM.js";
8
- import { RDSProvider } from "./rds-provider-DI_O0_iG.js";
9
- import { NeptuneProvider } from "./neptune-provider-DoKgbZCz.js";
10
- import { ASGProvider } from "./asg-provider--GY-B-zI.js";
5
+ import { $i as accountArgs, Al as derivePartitionAndUrlSuffix, Ao as replayWarn, Bl as describeFileReadFailure, Bo as sameLambdaFunctionAddress, C as getPriorAttempts, Cn as awaitInFlightSibling, Co as toFiniteNumber, Dn as replacedDeleteFailureVerdict, Do as configIntegerRefusal, Dr as waitForLambdaFunctionActive, Dt as withApiLimit, El as decodeListingKey, Eo as configBooleanRefusal, Es as dynamicReferenceTokens, Et as lookupEachName, F as listNestedTemplateRows, Gr as isWaitAbandonedError, Hl as renderAssemblyPathEscape, I as renderNestedTemplateTreeDefect, Ja as refuseMalformedResourcesForDestroy, Jr as ec2InstanceProtectionSite, Jt as redactedDeleteAddressFields, Ki as passedParameterClassesOf, Kn as secretNamedAttributeNamesOf, Kr as markWaitAbandoned, Kt as REDACTED_DELETE_ADDRESS_SKIP_REASON, Lo as withRetry, Lr as slowCcOperationTimeoutMs, Ls as carriesSecretMask, Mo as requireConfigObject, Ms as recoverMaskedOutput, N as findNestedTemplateTreeDefect, Ni as getAccountInfo, No as requireConfigString, Ns as physicalNameCopiesOf, Oa as refuseMalformedNestedChildOutputs, Oo as configStringRefusal, P as isAbsoluteAssetPath, Ps as recordAttributeIdCopy, Qo as passedNoEchoParametersOf, Qr as reEnableInstanceApiTermination, Ro as canonicalLambdaFunctionName, Rr as unchangedBehindSecretReference, S as isTruthyCfnBoolean, So as toCfnInteger, Tn as getStackRecords, To as coerceCfnInteger, Tt as isAccessDeniedError, Ui as parseWebACLArn, Ul as resolveAssemblyPath, Ur as deleteSkipReason, Vl as displayAssemblyPath, Wr as withIndeterminateGuard, Wt as getCurrentProducerRegions, Xr as observeThenDisableInstanceApiTermination, Yr as isTerminationProtectionPropagationError, Yt as redactedDeleteAddressSkip, Zr as reDisableInstanceApiTermination, _ as deleteTableWithIndexBusyRetry, _r as refuseMalformedDesiredTags, ai as s3BucketDomainName, b as S3_AUTO_DELETE_OBJECTS_TAG, bo as coerceWarmThroughput$1, br as definedAttributes, bs as recordReferenceProvenanceEntry, c as DynamoDBGlobalTableProvider, ci as s3BucketWebsiteUrl, co as findSilentDropProperties, cr as reserveStackCreateToken, d as compensateRemovedDeletionProtection, dr as isRefusedByName, f as deleteBudgetKey, fr as markDeleteStarted, g as INDEX_SETTLE_POLL_INTERVAL_MS, gr as readTagList, h as DELETE_INDEX_WAIT_PROCEED_NOTE, hr as planTagDiff, ii as s3BucketArn, jo as requireConfigArray, jr as getCurrentResourceSecrets, kl as canonicalizeRegion, ko as readConfigString, l as DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, lt as revertNestedChildFromJournal, m as resolveDynamoDbDeleteBudgetMs, mr as DBPROXY_TAG_OPTIONS, mt as withNestedStackContext, oi as s3BucketDualStackDomainName, oo as withheldAccountClause, or as earliestDefined, ot as getNestedRevertRun, p as resolveDynamoDbDeleteBudgetClock, pi as outputReferenceProvenanceOf, pr as DBPROXY_TAGS_WHAT, pt as getCurrentNestedStackContext, qt as isRedactedRecordedValue, ri as isSettledInstanceState, rs as redactForState, si as s3BucketRegionalDomainName, ss as hasMaskableValues, t as DeployEngine, u as beginDeleteWait, uo as withoutSilentDropProperties, ur as acquireIdempotencyToken, v as waitForIndexesSettled, vr as tagMapAsList, w as markRefusedBeforeApplying, wc as rewriteTemplateAssetReferences, wo as coerceCfnBoolean, ws as withoutPhysicalNameCopies, wt as chunks, x as hasCdkAutoDeleteTag, xo as isWarmThroughputDecrease, xr as stringifyIfAssigned, xs as snapshotPassProvenance, y as ECR_AUTO_DELETE_IMAGES_TAG, yc as stringifyValue, yo as WARM_THROUGHPUT_MEMBERS, yr as tagPlanWarning, ys as markSameGenerationBag, zo as lambdaFunctionNameForMask } from "./deploy-engine-D1z0QUsv.js";
6
+ import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-988BRmqF.js";
7
+ import { a as resolveSecretDerivedPrincipals, i as isResolvableSecretPrincipalList, n as runDestroyForStack, o as canonicalizeIpProtocolValue, r as holdsUnprovenSecretPrincipalToken, s as resolvedResourceTimeoutMs, t as canonicalizeIpv4Cidr } from "./program-Cqk1ZTsY.js";
8
+ import { RDSProvider } from "./rds-provider-DBW972HG.js";
9
+ import { NeptuneProvider } from "./neptune-provider-DUaw7kpj.js";
10
+ import { ASGProvider } from "./asg-provider-GNiE6dR1.js";
11
11
  import { createHash, randomUUID } from "node:crypto";
12
12
  import { 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, ListBucketsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client } from "@aws-sdk/client-s3";
13
13
  import { AddRoleToInstanceProfileCommand, AddUserToGroupCommand, AttachGroupPolicyCommand, AttachRolePolicyCommand, AttachUserPolicyCommand, CreateAccessKeyCommand, CreateGroupCommand, CreateInstanceProfileCommand, CreateLoginProfileCommand, CreatePolicyCommand, CreatePolicyVersionCommand, CreateUserCommand, DeleteAccessKeyCommand, DeleteGroupCommand, DeleteGroupPolicyCommand, DeleteInstanceProfileCommand, DeleteLoginProfileCommand, DeletePolicyCommand, DeletePolicyVersionCommand, DeleteRolePolicyCommand, DeleteUserCommand, DeleteUserPermissionsBoundaryCommand, DeleteUserPolicyCommand, DetachGroupPolicyCommand, DetachRolePolicyCommand, DetachUserPolicyCommand, GetAccessKeyLastUsedCommand, GetGroupCommand, GetGroupPolicyCommand, GetInstanceProfileCommand, GetPolicyCommand, GetPolicyVersionCommand, GetRolePolicyCommand, GetUserCommand, GetUserPolicyCommand, IAMClient, ListAccessKeysCommand, ListAttachedGroupPoliciesCommand, ListAttachedUserPoliciesCommand, ListEntitiesForPolicyCommand, ListGroupPoliciesCommand, ListGroupsForUserCommand, ListPoliciesCommand, ListPolicyTagsCommand, ListPolicyVersionsCommand, ListUserPoliciesCommand, NoSuchEntityException, PutGroupPolicyCommand, PutRolePolicyCommand, PutUserPermissionsBoundaryCommand, PutUserPolicyCommand, RemoveRoleFromInstanceProfileCommand, RemoveUserFromGroupCommand, TagPolicyCommand, TagUserCommand, UntagPolicyCommand, UntagUserCommand, UpdateAccessKeyCommand, UpdateLoginProfileCommand } from "@aws-sdk/client-iam";
@@ -14586,7 +14586,10 @@ var SecretsManagerSecretProvider = class {
14586
14586
  }
14587
14587
  asPersisted(bag) {
14588
14588
  const secrets = getCurrentResourceSecrets();
14589
- return secrets !== void 0 && secrets.size > 0 ? redactSecretsForState(bag, secrets) : bag;
14589
+ return secrets !== void 0 && secrets.size > 0 ? redactForState(bag, {
14590
+ provenance: "value-scan",
14591
+ secrets
14592
+ }) : bag;
14590
14593
  }
14591
14594
  generateSecretString(config, options) {
14592
14595
  const refusal = generateMemberRefusal(config);
@@ -15390,6 +15393,14 @@ var EventBridgeBusProvider = class {
15390
15393
  "DeadLetterConfig",
15391
15394
  "LogConfig"
15392
15395
  ])]]);
15396
+ removalDefaults = /* @__PURE__ */ new Map([["AWS::Events::EventBus", /* @__PURE__ */ new Map([
15397
+ ["Description", ""],
15398
+ ["KmsKeyIdentifier", ""],
15399
+ ["LogConfig", {
15400
+ Level: "OFF",
15401
+ IncludeDetail: "NONE"
15402
+ }]
15403
+ ])]]);
15393
15404
  constructor() {
15394
15405
  this.eventBridgeClient = getAwsClients().eventBridge;
15395
15406
  }
@@ -15437,15 +15448,16 @@ var EventBridgeBusProvider = class {
15437
15448
  async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
15438
15449
  assertRegionMatch(context?.expectedRegion ? await this.eventBridgeClient.config.region() : void 0, context?.expectedRegion, resourceType, logicalId, physicalId, "pre-update");
15439
15450
  refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId, physicalId);
15451
+ properties = withRemovalDefaults(this.removalDefaults, resourceType, properties, previousProperties, context);
15440
15452
  try {
15441
- return await this.applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties);
15453
+ return await this.applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties, context);
15442
15454
  } catch (error) {
15443
15455
  if (error instanceof CdkdError) throw error;
15444
15456
  const cause = error instanceof Error ? error : void 0;
15445
15457
  throw new ProvisioningError(`Failed to update EventBus ${logicalId}: ${describeAwsFailure(error).detail}`, resourceType, logicalId, physicalId, cause);
15446
15458
  }
15447
15459
  }
15448
- async applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties) {
15460
+ async applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties, context) {
15449
15461
  this.logger.debug(`Updating EventBus ${logicalId}: ${physicalId}`);
15450
15462
  const descChanged = properties["Description"] !== previousProperties["Description"];
15451
15463
  const kmsChanged = properties["KmsKeyIdentifier"] !== previousProperties["KmsKeyIdentifier"];
@@ -15458,7 +15470,7 @@ var EventBridgeBusProvider = class {
15458
15470
  if (properties["DeadLetterConfig"] !== void 0) {
15459
15471
  const dlcUpdate = sanitizeDeadLetterConfig(properties["DeadLetterConfig"]);
15460
15472
  if (dlcUpdate) updateParams.DeadLetterConfig = dlcUpdate;
15461
- }
15473
+ } else if ((context?.removedProperties?.has("DeadLetterConfig") ?? previousProperties["DeadLetterConfig"] !== void 0) && sanitizeDeadLetterConfig(previousProperties["DeadLetterConfig"]) !== void 0) updateParams.DeadLetterConfig = { Arn: "" };
15462
15474
  if (properties["LogConfig"] !== void 0) updateParams.LogConfig = properties["LogConfig"];
15463
15475
  await this.eventBridgeClient.send(new UpdateEventBusCommand(updateParams));
15464
15476
  }
@@ -25254,35 +25266,9 @@ function targetsSecretCause(read) {
25254
25266
  return read.kind === "malformed" && read.onlySecret ? " (an Id holds a dynamic reference or its mask, which names no target Elastic Load Balancing accepts)" : "";
25255
25267
  }
25256
25268
  const TARGETS_WHAT = "targets, each with a string Id and, where given, an integer Port and a string AvailabilityZone";
25257
- const TARGET_GROUP_ATTRIBUTE_DEFAULTS = {
25258
- "deregistration_delay.timeout_seconds": "300",
25259
- "deregistration_delay.connection_termination.enabled": "false",
25260
- "stickiness.enabled": "false",
25261
- "stickiness.lb_cookie.duration_seconds": "86400",
25262
- "stickiness.app_cookie.duration_seconds": "86400",
25263
- "load_balancing.algorithm.type": "round_robin",
25264
- "load_balancing.algorithm.anomaly_mitigation": "off",
25265
- "load_balancing.cross_zone.enabled": "use_load_balancer_configuration",
25266
- "slow_start.duration_seconds": "0",
25267
- "lambda.multi_value_headers.enabled": "false",
25268
- "proxy_protocol_v2.enabled": "false"
25269
- };
25270
- const LOAD_BALANCER_ATTRIBUTE_DEFAULTS = {
25271
- "deletion_protection.enabled": "false",
25272
- "access_logs.s3.enabled": "false",
25273
- "connection_logs.s3.enabled": "false",
25274
- "health_check_logs.s3.enabled": "false",
25275
- "routing.http.desync_mitigation_mode": "defensive",
25276
- "routing.http.drop_invalid_header_fields.enabled": "false",
25277
- "routing.http.preserve_host_header.enabled": "false",
25278
- "routing.http.x_amzn_tls_version_and_cipher_suite.enabled": "false",
25279
- "routing.http.xff_client_port.enabled": "false",
25280
- "routing.http.xff_header_processing.mode": "append",
25281
- "routing.http2.enabled": "true",
25282
- "waf.fail_open.enabled": "false",
25283
- "zonal_shift.config.enabled": "false"
25284
- };
25285
- const LISTENER_ATTRIBUTE_DEFAULTS = { "routing.http.response.server.enabled": "true" };
25269
+ const RETAIN_REMOVED_ATTRIBUTE = () => void 0;
25270
+ const LOG_DELIVERY_ATTRIBUTE = /^[a-z_]+_logs\.s3\./;
25271
+ const MISLEADING_IF_KEPT_ATTRIBUTE = /^routing\.http\.(response\.access_control_|request\.[a-z0-9_]+\.header_name$)/;
25286
25272
  function loadBalancerAttributes(lb, lbArn) {
25287
25273
  return definedAttributes({
25288
25274
  DNSName: lb.DNSName,
@@ -25413,13 +25399,53 @@ var ELBv2Provider = class {
25413
25399
  "Tags"
25414
25400
  ])]
25415
25401
  ]);
25416
- removalHandledInUpdate = /* @__PURE__ */ new Map([["AWS::ElasticLoadBalancingV2::Listener", /* @__PURE__ */ new Set([
25417
- "LoadBalancerArn",
25418
- "DefaultActions",
25419
- "ListenerAttributes",
25420
- "Tags",
25421
- ...LISTENER_LEFT_IN_PLACE_ON_REMOVAL
25422
- ])]]);
25402
+ removalHandledInUpdate = /* @__PURE__ */ new Map([
25403
+ ["AWS::ElasticLoadBalancingV2::LoadBalancer", /* @__PURE__ */ new Set([
25404
+ "Name",
25405
+ "Scheme",
25406
+ "Type",
25407
+ "Subnets",
25408
+ "SubnetMappings",
25409
+ "SecurityGroups",
25410
+ "Tags",
25411
+ "IpAddressType",
25412
+ "Ipv4IpamPoolId",
25413
+ "MinimumLoadBalancerCapacity",
25414
+ "EnableCapacityReservationProvisionStabilize",
25415
+ "LoadBalancerAttributes",
25416
+ "EnablePrefixForIpv6SourceNat",
25417
+ "EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic"
25418
+ ])],
25419
+ ["AWS::ElasticLoadBalancingV2::TargetGroup", /* @__PURE__ */ new Set([
25420
+ "Protocol",
25421
+ "Port",
25422
+ "VpcId",
25423
+ "TargetType",
25424
+ "ProtocolVersion",
25425
+ "Name",
25426
+ "IpAddressType",
25427
+ "TargetControlPort",
25428
+ "HealthCheckPort",
25429
+ "Targets",
25430
+ "Tags",
25431
+ "HealthCheckProtocol",
25432
+ "HealthCheckPath",
25433
+ "HealthCheckEnabled",
25434
+ "HealthCheckIntervalSeconds",
25435
+ "HealthCheckTimeoutSeconds",
25436
+ "HealthyThresholdCount",
25437
+ "UnhealthyThresholdCount",
25438
+ "Matcher",
25439
+ "TargetGroupAttributes"
25440
+ ])],
25441
+ ["AWS::ElasticLoadBalancingV2::Listener", /* @__PURE__ */ new Set([
25442
+ "LoadBalancerArn",
25443
+ "DefaultActions",
25444
+ "ListenerAttributes",
25445
+ "Tags",
25446
+ ...LISTENER_LEFT_IN_PLACE_ON_REMOVAL
25447
+ ])]
25448
+ ]);
25423
25449
  lambdaClients = /* @__PURE__ */ new Map();
25424
25450
  getClient() {
25425
25451
  if (!this.elbv2Client) this.elbv2Client = new ElasticLoadBalancingV2Client({
@@ -25681,7 +25707,11 @@ var ELBv2Provider = class {
25681
25707
  }) : "For Name / Type / Scheme re-deploy with cdkd deploy --replace, or destroy + redeploy the stack.";
25682
25708
  throw new ResourceUpdateNotSupportedError("AWS::ElasticLoadBalancingV2::LoadBalancer", logicalId, "ELBv2 LoadBalancer Name / Type / Scheme are immutable on AWS — none of the ELBv2 Modify* / Set* APIs accept these fields; they are fixed at creation. cdkd handles LoadBalancerAttributes / Subnets / SubnetMappings / SecurityGroups / IpAddressType / Tags in-place. " + remedy);
25683
25709
  }
25684
- const submittedAttrs = this.diffAttributeBag("LoadBalancerAttributes", logicalId, properties["LoadBalancerAttributes"], previousProperties["LoadBalancerAttributes"], this.attributeRemovalResolver(LOAD_BALANCER_ATTRIBUTE_DEFAULTS), fromReadback, maskSecrets);
25710
+ const removedLogKeys = [];
25711
+ const submittedAttrs = this.diffAttributeBag("LoadBalancerAttributes", logicalId, properties["LoadBalancerAttributes"], previousProperties["LoadBalancerAttributes"], (key) => {
25712
+ if (LOG_DELIVERY_ATTRIBUTE.test(key)) removedLogKeys.push(key);
25713
+ return RETAIN_REMOVED_ATTRIBUTE();
25714
+ }, fromReadback, maskSecrets);
25685
25715
  if (submittedAttrs.length > 0) {
25686
25716
  await this.getClient().send(new ModifyLoadBalancerAttributesCommand({
25687
25717
  LoadBalancerArn: physicalId,
@@ -25689,6 +25719,14 @@ var ELBv2Provider = class {
25689
25719
  }));
25690
25720
  this.logger.debug(`Applied ${submittedAttrs.length} LoadBalancerAttributes change(s) for ${logicalId}`);
25691
25721
  }
25722
+ const desiredAttrs = new Map(this.normalizeAttributes(properties["LoadBalancerAttributes"]).map((a) => [a.Key, a.Value]));
25723
+ const exposedLogKeys = removedLogKeys.filter((key) => desiredAttrs.get(`${key.split(".")[0]}.s3.enabled`) !== "false");
25724
+ if (exposedLogKeys.length > 0) {
25725
+ const mask = maskerOrIdentity(maskSecrets);
25726
+ const keys = exposedLogKeys.map((key) => mask(key)).join(", ");
25727
+ const one = exposedLogKeys.length === 1;
25728
+ this.logger.warn(safeMsg`${logicalId}: LoadBalancerAttributes ${one ? "key" : "keys"} ${keys} ${one ? "is" : "are"} no longer declared and ${one ? "keeps its live value" : "keep their live values"}, as CloudFormation leaves ${one ? "it" : "them"}, so the load balancer may keep delivering logs to the bucket it names. To stop it, declare the matching '<kind>_logs.s3.enabled' key as 'false' and deploy.`);
25729
+ }
25692
25730
  const newSubnets = properties["Subnets"];
25693
25731
  const oldSubnets = previousProperties["Subnets"];
25694
25732
  const newMappings = properties["SubnetMappings"];
@@ -25718,7 +25756,7 @@ var ELBv2Provider = class {
25718
25756
  }));
25719
25757
  this.logger.debug(`Updated SecurityGroups for ${logicalId}`);
25720
25758
  }
25721
- const newIpType = properties["IpAddressType"];
25759
+ const newIpType = fromReadback ? properties["IpAddressType"] : clearOnUpdateRemoval(properties["IpAddressType"], previousProperties["IpAddressType"], "ipv4");
25722
25760
  const oldIpType = previousProperties["IpAddressType"];
25723
25761
  if (newIpType !== void 0 && newIpType !== oldIpType) {
25724
25762
  await this.getClient().send(new SetIpAddressTypeCommand({
@@ -25928,7 +25966,7 @@ var ELBv2Provider = class {
25928
25966
  try {
25929
25967
  const rawMatcher = properties["Matcher"];
25930
25968
  const matcher = rawMatcher && (rawMatcher.HttpCode !== void 0 || rawMatcher.GrpcCode !== void 0) ? rawMatcher : void 0;
25931
- const healthCheckPort = String(properties["Protocol"] ?? previousProperties["Protocol"] ?? "").toUpperCase() === "GENEVE" ? properties["HealthCheckPort"] : clearOnUpdateRemoval(properties["HealthCheckPort"], previousProperties["HealthCheckPort"], "traffic-port");
25969
+ const healthCheckPort = clearOnUpdateRemoval(properties["HealthCheckPort"], previousProperties["HealthCheckPort"], "traffic-port");
25932
25970
  await this.getClient().send(new ModifyTargetGroupCommand({
25933
25971
  TargetGroupArn: physicalId,
25934
25972
  HealthCheckProtocol: properties["HealthCheckProtocol"],
@@ -25941,14 +25979,7 @@ var ELBv2Provider = class {
25941
25979
  UnhealthyThresholdCount: properties["UnhealthyThresholdCount"] !== void 0 ? Number(properties["UnhealthyThresholdCount"]) : void 0,
25942
25980
  ...matcher && { Matcher: matcher }
25943
25981
  }));
25944
- const tgAttrDiff = this.diffAttributeBag("TargetGroupAttributes", logicalId, properties["TargetGroupAttributes"], previousProperties["TargetGroupAttributes"], (key, currentValue) => {
25945
- const fallback = Object.hasOwn(TARGET_GROUP_ATTRIBUTE_DEFAULTS, key) ? TARGET_GROUP_ATTRIBUTE_DEFAULTS[key] : void 0;
25946
- if (fallback === void 0) {
25947
- this.logger.warn(`TargetGroup attribute ${maskerOrIdentity(maskSecrets)(key)} was removed from the template but has no documented default cdkd can reset it to — the live value is retained. Set the attribute explicitly to change it.`);
25948
- return;
25949
- }
25950
- return currentValue === fallback ? void 0 : fallback;
25951
- }, fromReadback, maskSecrets);
25982
+ const tgAttrDiff = this.diffAttributeBag("TargetGroupAttributes", logicalId, properties["TargetGroupAttributes"], previousProperties["TargetGroupAttributes"], RETAIN_REMOVED_ATTRIBUTE, fromReadback, maskSecrets);
25952
25983
  if (tgAttrDiff.length > 0) {
25953
25984
  await this.getClient().send(new ModifyTargetGroupAttributesCommand({
25954
25985
  TargetGroupArn: physicalId,
@@ -26115,7 +26146,11 @@ var ELBv2Provider = class {
26115
26146
  ...alpnPolicy && alpnPolicy.length > 0 && { AlpnPolicy: alpnPolicy },
26116
26147
  ...mutualAuth !== void 0 && { MutualAuthentication: mutualAuth }
26117
26148
  }));
26118
- const submittedAttrs = this.diffAttributeBag("ListenerAttributes", logicalId, properties["ListenerAttributes"], previousProperties["ListenerAttributes"], this.attributeRemovalResolver(LISTENER_ATTRIBUTE_DEFAULTS), fromReadback, maskSecrets);
26149
+ const removedMisleadingKeys = [];
26150
+ const submittedAttrs = this.diffAttributeBag("ListenerAttributes", logicalId, properties["ListenerAttributes"], previousProperties["ListenerAttributes"], (key) => {
26151
+ if (MISLEADING_IF_KEPT_ATTRIBUTE.test(key)) removedMisleadingKeys.push(key);
26152
+ return RETAIN_REMOVED_ATTRIBUTE();
26153
+ }, fromReadback, maskSecrets);
26119
26154
  if (submittedAttrs.length > 0) {
26120
26155
  const watch = startInterruptWatch(`ELBv2 Listener ${logicalId} attributes`);
26121
26156
  try {
@@ -26134,6 +26169,12 @@ var ELBv2Provider = class {
26134
26169
  }
26135
26170
  await this.applyTagDiff(physicalId, resourceType, logicalId, previousProperties["Tags"], properties["Tags"], maskSecrets);
26136
26171
  this.logger.debug(`Successfully updated Listener ${logicalId}`);
26172
+ if (removedMisleadingKeys.length > 0) {
26173
+ const mask = maskerOrIdentity(maskSecrets);
26174
+ const keys = removedMisleadingKeys.map((key) => mask(key)).join(", ");
26175
+ const one = removedMisleadingKeys.length === 1;
26176
+ this.logger.warn(safeMsg`${logicalId}: ListenerAttributes ${one ? "key" : "keys"} ${keys} ${one ? "is" : "are"} no longer declared and ${one ? "keeps its live value" : "keep their live values"}, as CloudFormation leaves ${one ? "it" : "them"}, so the listener may keep sending a CORS response header, or keep writing a request header under its renamed name. To change ${one ? "it" : "them"}, declare the value you want and deploy, or set ${one ? "it" : "them"} with 'aws elbv2 modify-listener-attributes'.`);
26177
+ }
26137
26178
  if (leftInPlaceNames.length > 0 && !fromReadback) this.logger.warn(listenerLeftInPlaceWarning(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
26138
26179
  return {
26139
26180
  physicalId,
@@ -26214,12 +26255,6 @@ var ELBv2Provider = class {
26214
26255
  }
26215
26256
  return submitted;
26216
26257
  }
26217
- attributeRemovalResolver(defaults) {
26218
- return (key, currentValue) => {
26219
- const fallback = Object.hasOwn(defaults, key) ? defaults[key] : "";
26220
- return currentValue === fallback ? void 0 : fallback;
26221
- };
26222
- }
26223
26258
  async readUpdateTargets(logicalId, physicalId, resourceType, desiredRaw, recordedRaw, groupPort) {
26224
26259
  const desired = readTargets(desiredRaw, "desired");
26225
26260
  if (desired.kind === "malformed") throw markNonRetryable(new ProvisioningError(`desired Targets of TargetGroup ${logicalId} is not a list of ${TARGETS_WHAT}${targetsSecretCause(desired)} — the target group was not updated`, resourceType, logicalId, physicalId));
@@ -34027,7 +34062,7 @@ async function refuseCatalogMove(args) {
34027
34062
  try {
34028
34063
  callerAccount = await args.callerAccountId();
34029
34064
  } catch (error) {
34030
- throw wrapMaskedAwsError(mask, error, (text) => new ProvisioningError(`Could not resolve the caller's account id (sts:GetCallerIdentity) to tell whether CatalogId ${mask(literal)} is this account's default Data Catalog, so cdkd did not update Glue ${args.noun} ${args.logicalId}: ${text}`, args.resourceType, args.logicalId, void 0, error instanceof Error ? error : void 0));
34065
+ throw wrapGlueError(mask, args.debug, error, (text) => new ProvisioningError(`Could not resolve the caller's account id (sts:GetCallerIdentity) to tell whether CatalogId ${mask(literal)} is this account's default Data Catalog, so cdkd did not update Glue ${args.noun} ${args.logicalId}: ${text}`, args.resourceType, args.logicalId, void 0, error instanceof Error ? error : void 0));
34031
34066
  }
34032
34067
  if (literal === callerAccount) return;
34033
34068
  }
@@ -34059,6 +34094,13 @@ function newGlueClients(region) {
34059
34094
  }))
34060
34095
  };
34061
34096
  }
34097
+ function wrapGlueError(mask, debug, error, build) {
34098
+ const failure = describeAwsFailure(error);
34099
+ if (!failure.redacted) return wrapMaskedAwsError(mask, error, build);
34100
+ debug(mask(build(failure.detail).message));
34101
+ const wrapped = build(mask(failure.summary));
34102
+ return error instanceof Error ? markRedactedCause(wrapped) : wrapped;
34103
+ }
34062
34104
  var GlueProvider = class {
34063
34105
  client;
34064
34106
  createClient;
@@ -34066,7 +34108,7 @@ var GlueProvider = class {
34066
34108
  callerAccountId = makeCallerAccountResolver(this.providerRegion);
34067
34109
  logger = getLogger().child("GlueProvider");
34068
34110
  wrapMaskedError(mask, error, build) {
34069
- return wrapMaskedAwsError(mask, error, build);
34111
+ return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
34070
34112
  }
34071
34113
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Database", /* @__PURE__ */ new Set([
34072
34114
  "DatabaseInput",
@@ -34165,6 +34207,7 @@ var GlueProvider = class {
34165
34207
  stateful: true,
34166
34208
  callerAccountId: this.callerAccountId,
34167
34209
  warn: log.warn,
34210
+ debug: log.debug,
34168
34211
  mask: log.mask
34169
34212
  });
34170
34213
  const catalogId = updateCatalogId(properties["CatalogId"]);
@@ -34218,7 +34261,7 @@ var GlueProvider = class {
34218
34261
  return;
34219
34262
  }
34220
34263
  const cause = error instanceof Error ? error : void 0;
34221
- throw new ProvisioningError(log.mask(`Failed to delete Glue Database ${logicalId}: ${describeAwsFailure(error).detail}`), resourceType, logicalId, physicalId, cause);
34264
+ throw this.wrapMaskedError(log.mask, error, (text) => new ProvisioningError(`Failed to delete Glue Database ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
34222
34265
  }
34223
34266
  }
34224
34267
  async createTable(logicalId, resourceType, properties, context) {
@@ -34297,6 +34340,7 @@ var GlueProvider = class {
34297
34340
  stateful: true,
34298
34341
  callerAccountId: this.callerAccountId,
34299
34342
  warn: log.warn,
34343
+ debug: log.debug,
34300
34344
  mask: log.mask
34301
34345
  });
34302
34346
  const catalogId = updateCatalogId(properties["CatalogId"]);
@@ -34326,7 +34370,7 @@ var GlueProvider = class {
34326
34370
  hint += live.versionId !== void 0 ? ` cdkd sent the version it read (${live.versionId}) as a precondition and AWS rejected the write, rather than let it put back the AWS-managed Parameters and StorageDescriptor members read a moment earlier — which for an Apache Iceberg table would have pinned it to an older metadata_location (an effective snapshot rollback).` : " AWS returned no VersionId on the pre-update read, so cdkd could not attach a precondition; AWS rejected the write on its own.";
34327
34371
  hint += ` Re-run the deploy to pick up the current values.`;
34328
34372
  }
34329
- throw this.wrapMaskedError(log.mask, error, (detail) => new ProvisioningError(`Failed to update Glue Table ${logicalId}: ${detail}${hint}`, resourceType, logicalId, physicalId, cause));
34373
+ throw this.wrapMaskedError(log.mask, error, (detail) => new ProvisioningError(`Failed to update Glue Table ${logicalId}: ${hint ? withoutFinalPeriod(detail) : detail}${hint}`, resourceType, logicalId, physicalId, cause));
34330
34374
  }
34331
34375
  }
34332
34376
  async deleteTable(logicalId, physicalId, resourceType, properties, context) {
@@ -34361,7 +34405,7 @@ var GlueProvider = class {
34361
34405
  return;
34362
34406
  }
34363
34407
  const cause = error instanceof Error ? error : void 0;
34364
- throw new ProvisioningError(log.mask(`Failed to delete Glue Table ${logicalId}: ${describeAwsFailure(error).detail}`), resourceType, logicalId, physicalId, cause);
34408
+ throw this.wrapMaskedError(log.mask, error, (text) => new ProvisioningError(`Failed to delete Glue Table ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
34365
34409
  }
34366
34410
  }
34367
34411
  preserveAwsManagedParameters(built, desiredParameters, previousParameters, liveParameters) {
@@ -34741,7 +34785,7 @@ var GlueWorkflowProvider = class {
34741
34785
  providerRegion = ambientRegion();
34742
34786
  logger = getLogger().child("GlueWorkflowProvider");
34743
34787
  wrapMaskedError(mask, error, build) {
34744
- return wrapMaskedAwsError(mask, error, build);
34788
+ return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
34745
34789
  }
34746
34790
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Workflow", /* @__PURE__ */ new Set([
34747
34791
  "Name",
@@ -34820,7 +34864,7 @@ var GlueWorkflowProvider = class {
34820
34864
  return;
34821
34865
  }
34822
34866
  const cause = error instanceof Error ? error : void 0;
34823
- throw new ProvisioningError(`Failed to delete Glue Workflow ${logicalId}: ${describeAwsFailure(error).detail}`, resourceType, logicalId, physicalId, cause);
34867
+ throw this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue Workflow ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
34824
34868
  }
34825
34869
  }
34826
34870
  async getAttribute(physicalId, _resourceType, attributeName) {
@@ -34896,7 +34940,7 @@ var GlueSecurityConfigurationProvider = class {
34896
34940
  providerRegion = ambientRegion();
34897
34941
  logger = getLogger().child("GlueSecurityConfigurationProvider");
34898
34942
  wrapMaskedError(mask, error, build) {
34899
- return wrapMaskedAwsError(mask, error, build);
34943
+ return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
34900
34944
  }
34901
34945
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::SecurityConfiguration", /* @__PURE__ */ new Set(["Name", "EncryptionConfiguration"])]]);
34902
34946
  getClient() {
@@ -34948,7 +34992,7 @@ var GlueSecurityConfigurationProvider = class {
34948
34992
  return;
34949
34993
  }
34950
34994
  const cause = error instanceof Error ? error : void 0;
34951
- throw new ProvisioningError(`Failed to delete Glue SecurityConfiguration ${logicalId}: ${describeAwsFailure(error).detail}`, resourceType, logicalId, physicalId, cause);
34995
+ throw this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue SecurityConfiguration ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
34952
34996
  }
34953
34997
  }
34954
34998
  async getAttribute(physicalId, _resourceType, attributeName) {
@@ -35089,7 +35133,7 @@ var GlueJobProvider = class {
35089
35133
  providerRegion = ambientRegion();
35090
35134
  logger = getLogger().child("GlueJobProvider");
35091
35135
  wrapMaskedError(mask, error, build) {
35092
- return wrapMaskedAwsError(mask, error, build);
35136
+ return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
35093
35137
  }
35094
35138
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Job", /* @__PURE__ */ new Set([
35095
35139
  "Name",
@@ -35199,7 +35243,7 @@ var GlueJobProvider = class {
35199
35243
  return;
35200
35244
  }
35201
35245
  const cause = error instanceof Error ? error : void 0;
35202
- throw new ProvisioningError(`Failed to delete Glue Job ${logicalId}: ${describeAwsFailure(error).detail}`, resourceType, logicalId, physicalId, cause);
35246
+ throw this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue Job ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
35203
35247
  }
35204
35248
  }
35205
35249
  async getAttribute(physicalId, _resourceType, attributeName) {
@@ -35335,8 +35379,11 @@ function asRecord$1(value) {
35335
35379
  if (typeof value !== "object" || value === null || Array.isArray(value)) return;
35336
35380
  return value;
35337
35381
  }
35382
+ function withoutFinalPeriod(text) {
35383
+ return text.endsWith(".") ? text.slice(0, -1) : text;
35384
+ }
35338
35385
  function preUpdateReadFailureMessage(kind, iamAction, logicalId, detail) {
35339
- return `Failed to read the current Glue ${kind} ${logicalId} before update: ${detail}. cdkd reads the live ${kind.toLowerCase()} so AWS-managed Parameters (Apache Iceberg's table_type / metadata_location, a crawler's classification, Lake Formation markers) survive an update that Glue applies as a full replace. Grant ${iamAction} to the deploy identity — proceeding without the read would silently erase them.`;
35386
+ return `Failed to read the current Glue ${kind} ${logicalId} before update: ${withoutFinalPeriod(detail)}. cdkd reads the live ${kind.toLowerCase()} so AWS-managed Parameters (Apache Iceberg's table_type / metadata_location, a crawler's classification, Lake Formation markers) survive an update that Glue applies as a full replace. Grant ${iamAction} to the deploy identity — proceeding without the read would silently erase them.`;
35340
35387
  }
35341
35388
  function coerceNumber(value) {
35342
35389
  if (typeof value === "number") return value;
@@ -35383,7 +35430,7 @@ var GlueCrawlerProvider = class {
35383
35430
  providerRegion = ambientRegion();
35384
35431
  logger = getLogger().child("GlueCrawlerProvider");
35385
35432
  wrapMaskedError(mask, error, build) {
35386
- return wrapMaskedAwsError(mask, error, build);
35433
+ return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
35387
35434
  }
35388
35435
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Crawler", /* @__PURE__ */ new Set([
35389
35436
  "Name",
@@ -35490,14 +35537,23 @@ var GlueCrawlerProvider = class {
35490
35537
  log.debug(`Glue Crawler ${v(physicalId)} does not exist, skipping deletion`);
35491
35538
  return;
35492
35539
  }
35540
+ let failure = error;
35493
35541
  if (error instanceof CrawlerRunningException) {
35494
35542
  log.debug(`Glue Crawler ${v(physicalId)} is running; stopping before delete and retrying`);
35495
- await this.stopCrawlerAndWait(physicalId, log);
35496
- await this.getClient().send(new DeleteCrawlerCommand({ Name: physicalId }));
35497
- return;
35543
+ try {
35544
+ await this.stopCrawlerAndWait(physicalId, log);
35545
+ await this.getClient().send(new DeleteCrawlerCommand({ Name: physicalId }));
35546
+ return;
35547
+ } catch (retryError) {
35548
+ if (retryError instanceof EntityNotFoundException) {
35549
+ log.debug(`Glue Crawler ${v(physicalId)} does not exist, skipping deletion`);
35550
+ return;
35551
+ }
35552
+ failure = retryError;
35553
+ }
35498
35554
  }
35499
- const cause = error instanceof Error ? error : void 0;
35500
- throw new ProvisioningError(log.mask(`Failed to delete Glue Crawler ${logicalId}: ${describeAwsFailure(error).detail}`), resourceType, logicalId, physicalId, cause);
35555
+ const cause = failure instanceof Error ? failure : void 0;
35556
+ throw this.wrapMaskedError(log.mask, failure, (text) => new ProvisioningError(`Failed to delete Glue Crawler ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
35501
35557
  }
35502
35558
  }
35503
35559
  async stopCrawlerAndWait(physicalId, log = {
@@ -35645,7 +35701,7 @@ var GlueConnectionProvider = class {
35645
35701
  callerAccountId = makeCallerAccountResolver(this.providerRegion);
35646
35702
  logger = getLogger().child("GlueConnectionProvider");
35647
35703
  wrapMaskedError(mask, error, build) {
35648
- return wrapMaskedAwsError(mask, error, build);
35704
+ return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
35649
35705
  }
35650
35706
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Connection", /* @__PURE__ */ new Set(["ConnectionInput", "CatalogId"])]]);
35651
35707
  getClient() {
@@ -35707,6 +35763,7 @@ var GlueConnectionProvider = class {
35707
35763
  stateful: false,
35708
35764
  callerAccountId: this.callerAccountId,
35709
35765
  warn: log.warn,
35766
+ debug: log.debug,
35710
35767
  mask: log.mask
35711
35768
  });
35712
35769
  const catalogId = updateCatalogId(properties["CatalogId"]);
@@ -35746,7 +35803,7 @@ var GlueConnectionProvider = class {
35746
35803
  return;
35747
35804
  }
35748
35805
  const cause = error instanceof Error ? error : void 0;
35749
- throw new ProvisioningError(log.mask(`Failed to delete Glue Connection ${logicalId}: ${describeAwsFailure(error).detail}`), resourceType, logicalId, physicalId, cause);
35806
+ throw this.wrapMaskedError(log.mask, error, (text) => new ProvisioningError(`Failed to delete Glue Connection ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
35750
35807
  }
35751
35808
  }
35752
35809
  async getAttribute(physicalId, _resourceType, attributeName) {
@@ -35821,7 +35878,7 @@ var GlueTriggerProvider = class {
35821
35878
  providerRegion = ambientRegion();
35822
35879
  logger = getLogger().child("GlueTriggerProvider");
35823
35880
  wrapMaskedError(mask, error, build) {
35824
- return wrapMaskedAwsError(mask, error, build);
35881
+ return wrapGlueError(mask, (message) => this.logger.debug(message), error, build);
35825
35882
  }
35826
35883
  handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Trigger", /* @__PURE__ */ new Set([
35827
35884
  "Name",
@@ -35919,7 +35976,9 @@ var GlueTriggerProvider = class {
35919
35976
  await this.getClient().send(new StartTriggerCommand({ Name: physicalId }));
35920
35977
  } catch (restartError) {
35921
35978
  if (updateError === void 0) throw restartError;
35922
- log.warn(`Failed to re-activate Glue Trigger ${v(physicalId)} after a failed update: ${describeAwsFailure(restartError).detail}`);
35979
+ const restartFailure = describeAwsFailure(restartError);
35980
+ log.warn(`Failed to re-activate Glue Trigger ${v(physicalId)} after a failed update: ${restartFailure.summary}`);
35981
+ if (restartFailure.redacted) log.debug(`Failed to re-activate Glue Trigger ${v(physicalId)} after a failed update: ${restartFailure.detail}`);
35923
35982
  }
35924
35983
  if (updateError !== void 0) throw updateError;
35925
35984
  await applyGlueTagDiff(this.getClient(), () => this.resourceArn(physicalId), previousProperties["Tags"], properties["Tags"], resourceType, logicalId, log.warn);
@@ -35971,7 +36030,7 @@ var GlueTriggerProvider = class {
35971
36030
  return;
35972
36031
  }
35973
36032
  const cause = error instanceof Error ? error : void 0;
35974
- const failure = new ProvisioningError(`Failed to delete Glue Trigger ${logicalId}: ${describeAwsFailure(error).detail}`, resourceType, logicalId, physicalId, cause);
36033
+ const failure = this.wrapMaskedError(context?.maskSecrets ?? ((text) => text), error, (text) => new ProvisioningError(`Failed to delete Glue Trigger ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
35975
36034
  throw stripped ? markDeleteStarted(failure) : failure;
35976
36035
  }
35977
36036
  }
@@ -38035,7 +38094,10 @@ var SchedulerScheduleProvider = class {
38035
38094
  const bag = getCurrentResourceSecrets();
38036
38095
  if (bag === void 0 || typeof desiredGroup !== "string") return false;
38037
38096
  if (typeof recordedGroup !== "string" || !recordedGroup.includes("{{resolve:")) return false;
38038
- return withoutPhysicalNameCopies(bag, () => redactSecretsForState(desiredGroup, bag)) !== recordedGroup;
38097
+ return withoutPhysicalNameCopies(bag, () => redactForState(desiredGroup, {
38098
+ provenance: "value-scan",
38099
+ secrets: bag
38100
+ })) !== recordedGroup;
38039
38101
  }
38040
38102
  async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
38041
38103
  const groupName = this.groupNameOf(properties);
@@ -46716,4 +46778,4 @@ var ACMCertificateProvider = class {
46716
46778
 
46717
46779
  //#endregion
46718
46780
  export { ACMCertificateProvider, ASGProvider, AgentCoreBrowserProvider, AgentCoreCodeInterpreterProvider, AgentCoreEvaluatorProvider, AgentCoreRuntimeProvider, ApiGatewayProvider, ApiGatewayV2Provider, AppSyncProvider, BudgetsBudgetProvider, CloudFrontDistributionProvider, CloudFrontOACProvider, CloudFrontOAIProvider, CloudTrailProvider, CloudWatchAlarmProvider, CloudWatchAnomalyDetectorProvider, CodeBuildProvider, CodeCommitRepositoryProvider, CognitoUserPoolProvider, DLMLifecyclePolicyProvider, DocDBProvider, DocDBSubnetGroupProvider, DynamoDBGlobalTableProvider, DynamoDBTableProvider, EC2Provider, ECRProvider, ECSProvider, EFSProvider, ELBv2Provider, EMRClusterProvider, EMRInstanceFleetConfigProvider, EMRInstanceGroupConfigProvider, ElastiCacheProvider, EventBridgeBusProvider, EventBridgeRuleProvider, FSxFileSystemProvider, FirehoseProvider, GlueConnectionProvider, GlueCrawlerProvider, GlueJobProvider, GlueProvider, GlueSecurityConfigurationProvider, GlueTriggerProvider, GlueWorkflowProvider, IAMAccessKeyProvider, IAMInstanceProfileProvider, IAMManagedPolicyProvider, IAMPolicyProvider, IAMRoleProvider, IAMUserGroupProvider, KMSProvider, KinesisStreamConsumerProvider, KinesisStreamProvider, LambdaEventInvokeConfigProvider, LambdaEventSourceMappingProvider, LambdaFunctionProvider, LambdaLayerVersionProvider, LambdaMicrovmImageProvider, LambdaNetworkConnectorProvider, LambdaPermissionProvider, LambdaUrlProvider, LambdaWebFunctionEndpointProvider, LambdaWebFunctionRevisionProvider, LogsLogGroupProvider, NeptuneProvider, NestedStackProvider, PipesPipeProvider, RDSDBProxyEndpointProvider, RDSDBProxyProvider, RDSDBProxyTargetGroupProvider, RDSProvider, Route53Provider, S3BucketPolicyProvider, S3BucketProvider, S3DirectoryBucketProvider, S3TablesProvider, S3VectorsProvider, SNSSubscriptionProvider, SNSTopicPolicyProvider, SNSTopicProvider, SQSQueuePolicyProvider, SQSQueueProvider, SSMParameterProvider, SchedulerScheduleProvider, SecretsManagerSecretProvider, ServiceDiscoveryProvider, StepFunctionsProvider, WAFv2WebACLProvider, WaitConditionHandleProvider };
46719
- //# sourceMappingURL=provider-classes-BSUoljqw.js.map
46781
+ //# sourceMappingURL=provider-classes-CR4DtD8M.js.map