@go-to-k/cdkd 0.312.0 → 0.314.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/{asg-provider-CVLTQtQr.js → asg-provider-_nun2Jda.js} +43 -7
  2. package/dist/asg-provider-_nun2Jda.js.map +1 -0
  3. package/dist/{aws-failure-text-NSBdKPYK.js → aws-failure-text-agWtoyga.js} +5 -2
  4. package/dist/{aws-failure-text-NSBdKPYK.js.map → aws-failure-text-agWtoyga.js.map} +1 -1
  5. package/dist/cli.js +2 -2
  6. package/dist/{created-resource-sink-BT2Dfnpt.js → created-resource-sink-QECX8C-Z.js} +3 -3
  7. package/dist/{created-resource-sink-BT2Dfnpt.js.map → created-resource-sink-QECX8C-Z.js.map} +1 -1
  8. package/dist/{db-instance-modify-retry-D7wXWxVo.js → db-instance-modify-retry-By0_BFNO.js} +3 -3
  9. package/dist/{db-instance-modify-retry-D7wXWxVo.js.map → db-instance-modify-retry-By0_BFNO.js.map} +1 -1
  10. package/dist/{deploy-engine-CVNzK__j.js → deploy-engine-ClIUqDQL.js} +488 -80
  11. package/dist/deploy-engine-ClIUqDQL.js.map +1 -0
  12. package/dist/{iam-role-provider-DM7bN9m1.js → iam-role-provider-DJep3uns.js} +4 -4
  13. package/dist/{iam-role-provider-DM7bN9m1.js.map → iam-role-provider-DJep3uns.js.map} +1 -1
  14. package/dist/index.js +4 -4
  15. package/dist/{neptune-provider-qdoLunCh.js → neptune-provider-CGZ_G4Vz.js} +5 -5
  16. package/dist/{neptune-provider-qdoLunCh.js.map → neptune-provider-CGZ_G4Vz.js.map} +1 -1
  17. package/dist/{program-Nk_95KKk.js → program-Du6jOw1-.js} +38 -15
  18. package/dist/program-Du6jOw1-.js.map +1 -0
  19. package/dist/{provider-classes-Dz0pYmlJ.js → provider-classes-ZqxIefLl.js} +628 -245
  20. package/dist/provider-classes-ZqxIefLl.js.map +1 -0
  21. package/dist/{rds-provider-CXSZq1c8.js → rds-provider-C2fHUNSE.js} +140 -7
  22. package/dist/rds-provider-C2fHUNSE.js.map +1 -0
  23. package/dist/{version-BqCEt5Wu.js → version-B2PvJ12r.js} +2 -2
  24. package/dist/{version-BqCEt5Wu.js.map → version-B2PvJ12r.js.map} +1 -1
  25. package/package.json +2 -2
  26. package/dist/asg-provider-CVLTQtQr.js.map +0 -1
  27. package/dist/deploy-engine-CVNzK__j.js.map +0 -1
  28. package/dist/program-Nk_95KKk.js.map +0 -1
  29. package/dist/provider-classes-Dz0pYmlJ.js.map +0 -1
  30. package/dist/rds-provider-CXSZq1c8.js.map +0 -1
@@ -1,16 +1,16 @@
1
1
  import { r as getAwsClients, s as withApiGatewayPacing } from "./aws-clients-Bu9EMILF.js";
2
- import { B as SECRET_REF_MAX_CODE_POINTS, C as generateResourceName, D as getCurrentStackInstanceId, J as displayStackName, K as displayIdent, M as recordedGeneratedNameKept, Q as safeMsg, T as generatedNameFor, Y as isPasteableIdent, Z as plainIdentOr, a as safeStringify, i as isAwsAuthoredFailure, k as isBeforeStateRead, n as describeAwsFailure, q as displaySafe, r as describeAwsStatusReason, s as getLogger, t as VERBOSE_POINTER, w as generateResourceNameWithFallback } from "./aws-failure-text-NSBdKPYK.js";
3
- import { $ as logGroupProtectionSite, $n as plainOrDescribed, A as withoutServerErrorRetries, Ar as markNonRetryable, At as createMaskedLogSinks, B as quotedRemedyLogicalId, C as RecentIdSet, Ct as compositeIdSeparatorRefusal, D as replayFollowedAmbiguousAttempt, Dr as THROTTLING_ERROR_NAMES, E as isInsideWindow, Et as packCompositeId, F as VALUE_NOT_SHOWN, Ft as withDerivedNameMasks, G as ProtectionFlipRegistry, Gt as markCreatedBeforeFailure, H as remedyLogicalId, Ht as isAuxiliaryFailure, I as isPlainImportJson, J as deleteWithProtectionCompensation, Jn as commandHole, Kt as markSupersedesEarlierCreate, L as isPlainImportValue, Mn as ProvisioningError, Mr as wrapMaskedAwsError, Mt as isSecretDerivedValue, N as markNotGone, Nt as maskDeep, O as replayedSendWindow, Or as isMarkedNonRetryable, Ot as segmentAfterAnchor, P as assertRegionMatch, Pn as ResourceUpdateNotSupportedError, Pt as maskerOrIdentity, Q as isTerminalDeleteFailure, R as isQuotableImportValue, Rt as clearCreatedBeforeFailure, S as AmbiguousCreateLatch, Sr as isExplicitDenyError, St as compositeIdFormatMessage, T as createAttemptKey, Tr as isTransientServerError, Tt as logicalIdShown, U as resolveExplicitPhysicalId, V as refusalTypeShown, Wt as markAuxiliaryFailure, Xn as isInertUnquoted, Yn as hasClauseBreak, Z as isTerminalDbWaitStatus, Zn as pasteableCommand, _n as CdkdError, a as retractCreatedResource, an as injectiveKey, at as userPoolProtectionSite, bt as startInterruptWatch, c as SECRET_DERIVED_READ_LIVE, ct as WITHHELD_AWS_COMMAND, d as readPrincipalLists, dn as ambientClientDefaults, dt as protectedReplacementAdvice, et as observeThenDisableProtection, fn as ambientCredentialConfig, fr as markNameCollision, ft as renderDisableCommand, h as clearOnUpdateRemoval, hn as AccountIdUnavailableError, i as reportCreatedResource, j as RESOURCE_NOT_FOUND, jr as markRedactedCause, jt as createMaskedRetryLogger, k as setBounded, kr as isThrottlingError, kt as stateOrphanRecordRemedy, l as holdsSecretDerivedEntry, lt as isAwsCliLiteral, mn as credentialFingerprint, mr as relayedNameCollision, mt as ElapsedBudgetRegistry, nr as shellQuote, nt as rdsFamilyProtectionSite, on as injectiveKeyPrefix, p as recordedPrincipalsRepair, pn as clientDefaultsFor, pr as markReplayMayCollide, pt as ElapsedBudget, q as deleteAfterProtectionFlipWithFinalSnapshot, rr as withheldTargetClause, st as UNNAMEABLE_ID_CLAUSE, tt as protectionFlipKey, u as onlySecretDerived, un as withPasteableAwsProfile, ut as pasteableAwsCommand, v as removedTemplateKeys, vr as explicitDenyPolicyKind, w as ambiguousAttemptLead, wr as isRetryableTransientError, wt as compositeIdSkipResult, x as AMBIGUOUS_LATCH_TTL_MS, xr as isAmbiguousOutcomeError, xt as canonicalizeRoute53QueryName, y as withRemovalDefaults, yt as isInterruptedWaitError, z as normalizeAwsTagsToCfn } from "./created-resource-sink-BT2Dfnpt.js";
2
+ import { $ as safeMsg, A as isBeforeStateRead, E as generatedNameFor, J as displaySafe, N as recordedGeneratedNameKept, O as getCurrentStackInstanceId, Q as plainIdentOr, T as generateResourceNameWithFallback, V as SECRET_REF_MAX_CODE_POINTS, X as isPasteableIdent, Y as displayStackName, a as safeStringify, i as isAwsAuthoredFailure, n as describeAwsFailure, q as displayIdent, r as describeAwsStatusReason, s as getLogger, t as VERBOSE_POINTER, w as generateResourceName } from "./aws-failure-text-agWtoyga.js";
3
+ import { $ as logGroupProtectionSite, $n as plainOrDescribed, A as withoutServerErrorRetries, Ar as markNonRetryable, At as createMaskedLogSinks, B as quotedRemedyLogicalId, C as RecentIdSet, Ct as compositeIdSeparatorRefusal, D as replayFollowedAmbiguousAttempt, Dr as THROTTLING_ERROR_NAMES, E as isInsideWindow, Et as packCompositeId, F as VALUE_NOT_SHOWN, Ft as withDerivedNameMasks, G as ProtectionFlipRegistry, Gt as markCreatedBeforeFailure, H as remedyLogicalId, Ht as isAuxiliaryFailure, I as isPlainImportJson, J as deleteWithProtectionCompensation, Jn as commandHole, Kt as markSupersedesEarlierCreate, L as isPlainImportValue, Mn as ProvisioningError, Mr as wrapMaskedAwsError, Mt as isSecretDerivedValue, N as markNotGone, Nt as maskDeep, O as replayedSendWindow, Or as isMarkedNonRetryable, Ot as segmentAfterAnchor, P as assertRegionMatch, Pn as ResourceUpdateNotSupportedError, Pt as maskerOrIdentity, Q as isTerminalDeleteFailure, R as isQuotableImportValue, Rt as clearCreatedBeforeFailure, S as AmbiguousCreateLatch, Sr as isExplicitDenyError, St as compositeIdFormatMessage, T as createAttemptKey, Tr as isTransientServerError, Tt as logicalIdShown, U as resolveExplicitPhysicalId, V as refusalTypeShown, Wt as markAuxiliaryFailure, Xn as isInertUnquoted, Yn as hasClauseBreak, Z as isTerminalDbWaitStatus, Zn as pasteableCommand, _n as CdkdError, a as retractCreatedResource, an as injectiveKey, at as userPoolProtectionSite, bt as startInterruptWatch, c as SECRET_DERIVED_READ_LIVE, ct as WITHHELD_AWS_COMMAND, d as readPrincipalLists, dn as ambientClientDefaults, dt as protectedReplacementAdvice, et as observeThenDisableProtection, fn as ambientCredentialConfig, fr as markNameCollision, ft as renderDisableCommand, h as clearOnUpdateRemoval, hn as AccountIdUnavailableError, i as reportCreatedResource, j as RESOURCE_NOT_FOUND, jr as markRedactedCause, jt as createMaskedRetryLogger, k as setBounded, kr as isThrottlingError, kt as stateOrphanRecordRemedy, l as holdsSecretDerivedEntry, lt as isAwsCliLiteral, mn as credentialFingerprint, mr as relayedNameCollision, mt as ElapsedBudgetRegistry, nr as shellQuote, nt as rdsFamilyProtectionSite, on as injectiveKeyPrefix, p as recordedPrincipalsRepair, pn as clientDefaultsFor, pr as markReplayMayCollide, pt as ElapsedBudget, q as deleteAfterProtectionFlipWithFinalSnapshot, rr as withheldTargetClause, st as UNNAMEABLE_ID_CLAUSE, tt as protectionFlipKey, u as onlySecretDerived, un as withPasteableAwsProfile, ut as pasteableAwsCommand, v as removedTemplateKeys, vr as explicitDenyPolicyKind, w as ambiguousAttemptLead, wr as isRetryableTransientError, wt as compositeIdSkipResult, x as AMBIGUOUS_LATCH_TTL_MS, xr as isAmbiguousOutcomeError, xt as canonicalizeRoute53QueryName, y as withRemovalDefaults, yt as isInterruptedWaitError, z as normalizeAwsTagsToCfn } from "./created-resource-sink-QECX8C-Z.js";
4
4
  import { c as ambientRegion } from "./aws-client-defaults-BX9Y_fKp.js";
5
- import { $ as getPriorAttempts, $s as isWarmThroughputDecrease, A as DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, Ad as renderAssemblyPathEscape, Ai as acquireIdempotencyToken, Ao as accountArgs, B as deleteTableWithIndexBusyRetry, Bc as markSameGenerationBag, Bi as refuseMalformedDesiredTags, Bn as isRedactedRecordedValue, Bs as findSilentDropProperties, C as planContributorInsightsOp, Co as passedParameterClassesOf, D as reverseMapTableContributorInsights, E as reverseMapIndexContributorInsights, Ei as earliestDefined, F as resolveDynamoDbDeleteBudgetClock, Fa as s3BucketDomainName, Fi as markDeleteStarted, Fr as getStackRecords, G as isTtlRateLimited, H as relayedIndexBusyDelete, Hc as recordReferenceProvenanceEntry, Hi as tagPlanWarning, Hn as redactedDeleteAddressSkip, Hs as withoutSilentDropProperties, I as resolveDynamoDbDeleteBudgetMs, Ia as s3BucketDualStackDomainName, Ii as DBPROXY_TAGS_WHAT, It as getNestedRevertRun, J as sendTtlWaitingOutRateLimit, K as planTimeToLive, Kc as hasMaskableValues, L as DELETE_INDEX_WAIT_PROCEED_NOTE, La as s3BucketRegionalDomainName, Li as DBPROXY_TAG_OPTIONS, Ln as getCurrentProducerRegions, Lr as replacedDeleteFailureVerdict, Ls as withheldAccountClause, M as beginDeleteWait, N as compensateRemovedDeletionProtection, Na as isSettledInstanceState, Nr as awaitInFlightSibling, O as stripIndexContributorInsights, Od as describeFileReadFailure, Oi as reserveStackCreateToken, P as deleteBudgetKey, Pa as s3BucketArn, Pc as passedNoEchoParametersOf, Pi as isRefusedByName, Q as isTruthyCfnBoolean, Qs as coerceWarmThroughput$1, R as INDEX_SETTLE_POLL_INTERVAL_MS, Ra as s3BucketWebsiteUrl, Ri as planTagDiff, S as indexDeclaresContributorInsights, Sa as reEnableInstanceApiTermination, Sc as sameLambdaFunctionAddress, T as readContributorInsightsSpec, Ta as isUsableAttemptedName, Ts as refuseMalformedResourcesForDestroy, U as waitForIndexesSettled, Ua as outputReferenceProvenanceOf, Uc as snapshotPassProvenance, Ui as definedAttributes, Ut as getCurrentNestedStackContext, V as maskedLogger, Vc as redactForState, Vi as tagMapAsList, Vn as redactedDeleteAddressFields, W as isTtlAlreadyDisabled, Wi as stringifyIfAssigned, Wt as withNestedStackContext, X as S3_AUTO_DELETE_OBJECTS_TAG, Xi as waitForLambdaFunctionActive, Y as ECR_AUTO_DELETE_IMAGES_TAG, Z as hasCdkAutoDeleteTag, Zs as WARM_THROUGHPUT_MEMBERS, _ as streamMemberRefusals, _l as recordAttributeIdCopy, ac as configIntegerRefusal, as as refuseMalformedNestedChildOutputs, b as CONTRIBUTOR_INSIGHTS_KEY, ba as observeThenDisableInstanceApiTermination, bc as canonicalLambdaFunctionName, bl as carriesSecretMask, bo as parseWebACLArn, c as DynamoDBGlobalTableProvider, ca as unchangedBehindSecretReference, cc as replayWarn, cl as dynamicReferenceTokens, d as declaredStreamPolicyMember, dc as requireConfigString, dd as decodeListingKey, dt as listNestedTemplateRows, ea as getCurrentResourceSecrets, ec as toCfnInteger, en as chunks, et as markRefusedBeforeApplying, f as declaredStreamTagsMember, ft as renderNestedTemplateTreeDefect, fu as rewriteTemplateAssetReferences, g as streamDeclaresTags, ga as markWaitAbandoned, gc as blockDeviceMappingsDifferOnlyInDeleteOnTermination, gl as physicalNameCopiesOf, h as streamDeclaresPolicy, ha as isWaitAbandonedError, hc as withRetry, hd as derivePartitionAndUrlSuffix, hl as recoverMaskedOutput, ic as configBooleanRefusal, iu as timePhase, j as DYNAMODB_DELETE_POLL_COST_MS, jd as resolveAssemblyPath, k as DYNAMODB_DELETE_DEADLINE_MARGIN_MS, kd as displayAssemblyPath, l as STREAM_POLICY_KEY, lc as requireConfigArray, lo as getAccountInfo, lt as findNestedTemplateTreeDefect, m as reverseMapStreamPolicy, ma as withIndeterminateGuard, md as canonicalizeRegion, nc as coerceCfnBoolean, nn as lookupEachName, oa as slowCcOperationTimeoutMs, oc as configStringRefusal, ol as withoutPhysicalNameCopies, p as planStreamMemberOps, pa as deleteSkipReason, pi as secretNamedAttributeNamesOf, q as readTtlSpec, rc as coerceCfnInteger, rn as withApiLimit, sa as onlySecretReferencesDiffer, sc as readConfigString, su as stringifyValue, t as DeployEngine, tc as toFiniteNumber, tn as isAccessDeniedError, u as STREAM_TAGS_KEY, uc as requireConfigObject, ut as isAbsoluteAssetPath, v as streamPolicyMatchesDeclared, va as ec2InstanceProtectionSite, vc as ecsServiceLaunchTypeSetOrChanged, vt as enclosingDeadlineExpired, w as planIndexContributorInsightsOps, x as contributorInsightsRefusals, xa as reDisableInstanceApiTermination, xc as lambdaFunctionNameForMask, y as streamTagsMatchDeclared, ya as isTerminationProtectionPropagationError, yc as emrClusterInstancesReplaced, yt as enclosingDeadlineRemainingMs, z as TABLE_INDEX_NOUN, zi as readTagList, zn as REDACTED_DELETE_ADDRESS_SKIP_REASON, zt as revertNestedChildFromJournal } from "./deploy-engine-CVNzK__j.js";
6
- import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-DM7bN9m1.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-Nk_95KKk.js";
8
- import { t as modifyDbInstanceWhenAvailable } from "./db-instance-modify-retry-D7wXWxVo.js";
9
- import { RDSProvider } from "./rds-provider-CXSZq1c8.js";
10
- import { NeptuneProvider } from "./neptune-provider-qdoLunCh.js";
11
- import { ASGProvider } from "./asg-provider-CVLTQtQr.js";
5
+ import { $ as ECR_AUTO_DELETE_IMAGES_TAG, A as DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, Ai as earliestDefined, B as deleteTableWithIndexBusyRetry, Ba as s3BucketDualStackDomainName, Bi as DBPROXY_TAGS_WHAT, Bt as getNestedRevertRun, C as planContributorInsightsOp, Ca as isTerminationProtectionPropagationError, Cc as emrClusterInstancesReplaced, Ct as enclosingDeadlineRemainingMs, D as reverseMapTableContributorInsights, Do as passedParameterClassesOf, E as reverseMapIndexContributorInsights, Ea as reEnableInstanceApiTermination, Ec as sameLambdaFunctionAddress, F as resolveDynamoDbDeleteBudgetClock, Fd as resolveAssemblyPath, G as readbackVectorIndexes, Gc as redactForState, Gi as tagMapAsList, Gn as redactedDeleteAddressFields, H as relayedIndexBusyDelete, Ha as s3BucketWebsiteUrl, Hi as planTagDiff, I as resolveDynamoDbDeleteBudgetMs, J as isTtlAlreadyDisabled, Ji as stringifyIfAssigned, Jt as withNestedStackContext, K as vectorIndexesForCreate, Kc as recordReferenceProvenanceEntry, Ki as tagPlanWarning, Kn as redactedDeleteAddressSkip, Ks as withoutSilentDropProperties, L as DELETE_INDEX_WAIT_PROCEED_NOTE, La as isSettledInstanceState, Lr as awaitInFlightSibling, M as beginDeleteWait, Md as describeFileReadFailure, Mi as reserveStackCreateToken, N as compensateRemovedDeletionProtection, Nd as displayAssemblyPath, O as stripIndexContributorInsights, P as deleteBudgetKey, Pd as renderAssemblyPathEscape, Pi as acquireIdempotencyToken, Po as accountArgs, Q as sendTtlWaitingOutRateLimit, R as INDEX_SETTLE_POLL_INTERVAL_MS, Ra as s3BucketArn, Rc as passedNoEchoParametersOf, Ri as isRefusedByName, S as indexDeclaresContributorInsights, Sa as ec2InstanceProtectionSite, Sc as ecsServiceLaunchTypeSetOrChanged, St as enclosingDeadlineExpired, T as readContributorInsightsSpec, Ta as reDisableInstanceApiTermination, Tc as lambdaFunctionNameForMask, U as waitForIndexesSettled, Ui as readTagList, Un as REDACTED_DELETE_ADDRESS_SKIP_REASON, Ut as revertNestedChildFromJournal, V as maskedLogger, Va as s3BucketRegionalDomainName, Vi as DBPROXY_TAG_OPTIONS, Vn as getCurrentProducerRegions, Vr as replacedDeleteFailureVerdict, Vs as withheldAccountClause, W as planVectorIndexUpdates, Wc as markSameGenerationBag, Wi as refuseMalformedDesiredTags, Wn as isRedactedRecordedValue, Ws as findSilentDropProperties, X as planTimeToLive, Xc as hasMaskableValues, Y as isTtlRateLimited, Z as readTtlSpec, _ as streamMemberRefusals, _a as deleteSkipReason, _i as secretNamedAttributeNamesOf, ac as toFiniteNumber, an as isAccessDeniedError, b as CONTRIBUTOR_INSIGHTS_KEY, ba as markWaitAbandoned, bc as blockDeviceMappingsDifferOnlyInDeleteOnTermination, bl as physicalNameCopiesOf, c as DynamoDBGlobalTableProvider, cc as configBooleanRefusal, cu as timePhase, d as declaredStreamPolicyMember, da as onlySecretReferencesDiffer, dc as readConfigString, du as stringifyValue, ea as waitForLambdaFunctionActive, et as S3_AUTO_DELETE_OBJECTS_TAG, f as declaredStreamTagsMember, fa as unchangedBehindSecretReference, fc as replayWarn, fl as dynamicReferenceTokens, g as streamDeclaresTags, gt as renderNestedTemplateTreeDefect, gu as rewriteTemplateAssetReferences, h as streamDeclaresPolicy, hc as requireConfigString, hd as decodeListingKey, ht as listNestedTemplateRows, ia as getCurrentResourceSecrets, ic as toCfnInteger, in as chunks, it as markRefusedBeforeApplying, j as DYNAMODB_DELETE_POLL_COST_MS, k as DYNAMODB_DELETE_DEADLINE_MARGIN_MS, ka as isUsableAttemptedName, ks as refuseMalformedResourcesForDestroy, l as STREAM_POLICY_KEY, lc as configIntegerRefusal, ls as refuseMalformedNestedChildOutputs, m as reverseMapStreamPolicy, mc as requireConfigObject, mt as isAbsoluteAssetPath, nc as coerceWarmThroughput$1, nt as isTruthyCfnBoolean, oc as coerceCfnBoolean, on as lookupEachName, p as planStreamMemberOps, pc as requireConfigArray, po as getAccountInfo, pt as findNestedTemplateTreeDefect, q as vectorIndexesSettled, qa as outputReferenceProvenanceOf, qc as snapshotPassProvenance, qi as definedAttributes, qt as getCurrentNestedStackContext, rc as isWarmThroughputDecrease, rt as getPriorAttempts, sc as coerceCfnInteger, sn as withApiLimit, t as DeployEngine, tc as WARM_THROUGHPUT_MEMBERS, tt as hasCdkAutoDeleteTag, u as STREAM_TAGS_KEY, ua as slowCcOperationTimeoutMs, uc as configStringRefusal, ul as withoutPhysicalNameCopies, v as streamPolicyMatchesDeclared, va as withIndeterminateGuard, vd as canonicalizeRegion, w as planIndexContributorInsightsOps, wa as observeThenDisableInstanceApiTermination, wc as canonicalLambdaFunctionName, wl as carriesSecretMask, wo as parseWebACLArn, x as contributorInsightsRefusals, xl as recordAttributeIdCopy, y as streamTagsMatchDeclared, ya as isWaitAbandonedError, yc as withRetry, yd as derivePartitionAndUrlSuffix, yl as recoverMaskedOutput, z as TABLE_INDEX_NOUN, za as s3BucketDomainName, zi as markDeleteStarted, zr as getStackRecords } from "./deploy-engine-ClIUqDQL.js";
6
+ import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-DJep3uns.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-Du6jOw1-.js";
8
+ import { t as modifyDbInstanceWhenAvailable } from "./db-instance-modify-retry-By0_BFNO.js";
9
+ import { RDSProvider } from "./rds-provider-C2fHUNSE.js";
10
+ import { NeptuneProvider } from "./neptune-provider-CGZ_G4Vz.js";
11
+ import { ASGProvider } from "./asg-provider-_nun2Jda.js";
12
12
  import { createHash, randomUUID } from "node:crypto";
13
- 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
+ import { CreateBucketCommand, CreateBucketMetadataConfigurationCommand, DeleteBucketAnalyticsConfigurationCommand, DeleteBucketCommand, DeleteBucketCorsCommand, DeleteBucketEncryptionCommand, DeleteBucketIntelligentTieringConfigurationCommand, DeleteBucketInventoryConfigurationCommand, DeleteBucketLifecycleCommand, DeleteBucketMetadataConfigurationCommand, DeleteBucketMetricsConfigurationCommand, DeleteBucketOwnershipControlsCommand, DeleteBucketPolicyCommand, DeleteBucketReplicationCommand, DeleteBucketTaggingCommand, DeleteBucketWebsiteCommand, DeleteObjectsCommand, GetBucketAbacCommand, GetBucketAccelerateConfigurationCommand, GetBucketCorsCommand, GetBucketEncryptionCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketLoggingCommand, GetBucketMetadataConfigurationCommand, GetBucketNotificationConfigurationCommand, GetBucketOwnershipControlsCommand, GetBucketPolicyCommand, GetBucketReplicationCommand, GetBucketTaggingCommand, GetBucketVersioningCommand, GetBucketWebsiteCommand, GetObjectCommand, GetObjectLockConfigurationCommand, GetPublicAccessBlockCommand, HeadBucketCommand, ListBucketAnalyticsConfigurationsCommand, ListBucketIntelligentTieringConfigurationsCommand, ListBucketInventoryConfigurationsCommand, ListBucketMetricsConfigurationsCommand, ListBucketsCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, PutBucketAbacCommand, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, UpdateBucketMetadataAnnotationTableConfigurationCommand, UpdateBucketMetadataInventoryTableConfigurationCommand, UpdateBucketMetadataJournalTableConfigurationCommand } from "@aws-sdk/client-s3";
14
14
  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, UpdateGroupCommand, UpdateLoginProfileCommand, UpdateUserCommand } from "@aws-sdk/client-iam";
15
15
  import { CreateQueueCommand, DeleteQueueCommand, GetQueueAttributesCommand, GetQueueUrlCommand, ListQueueTagsCommand, QueueDoesNotExist, SQSClient, SetQueueAttributesCommand, TagQueueCommand, UntagQueueCommand } from "@aws-sdk/client-sqs";
16
16
  import { CreateTopicCommand, DeleteTopicCommand, GetSubscriptionAttributesCommand, GetTopicAttributesCommand, InvalidParameterException, ListSubscriptionsByTopicCommand, ListTagsForResourceCommand, ListTopicsCommand, NotFoundException, SNSClient, SetSubscriptionAttributesCommand, SetTopicAttributesCommand, SubscribeCommand, TagResourceCommand, UnsubscribeCommand, UntagResourceCommand } from "@aws-sdk/client-sns";
@@ -39,30 +39,30 @@ import { CreateAliasCommand, CreateKeyCommand, DeleteAliasCommand, DescribeKeyCo
39
39
  import { CreateRepositoryCommand, DeleteLifecyclePolicyCommand, DeleteRepositoryCommand, DeleteRepositoryPolicyCommand, DescribeRepositoriesCommand, ECRClient, GetLifecyclePolicyCommand, LifecyclePolicyNotFoundException, ListTagsForResourceCommand as ListTagsForResourceCommand$9, PutImageScanningConfigurationCommand, PutImageTagMutabilityCommand, PutLifecyclePolicyCommand, RepositoryNotEmptyException, RepositoryNotFoundException, SetRepositoryPolicyCommand, TagResourceCommand as TagResourceCommand$12, UntagResourceCommand as UntagResourceCommand$12 } from "@aws-sdk/client-ecr";
40
40
  import { isDeepStrictEqual } from "node:util";
41
41
  import { AddTagsToResourceCommand as AddTagsToResourceCommand$2, CreateDBProxyCommand, CreateDBProxyEndpointCommand, DBProxyEndpointNotFoundFault, DBProxyNotFoundFault, DBProxyTargetGroupNotFoundFault, DBProxyTargetNotFoundFault, DeleteDBProxyCommand, DeleteDBProxyEndpointCommand, DeregisterDBProxyTargetsCommand, DescribeDBProxiesCommand, DescribeDBProxyEndpointsCommand, DescribeDBProxyTargetGroupsCommand, DescribeDBProxyTargetsCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$10, ModifyDBProxyCommand, ModifyDBProxyEndpointCommand, ModifyDBProxyTargetGroupCommand, RDSClient, RegisterDBProxyTargetsCommand, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$2 } from "@aws-sdk/client-rds";
42
+ import { ListTagsForResourceCommand as ListTagsForResourceCommand$11, S3ControlClient, TagResourceCommand as TagResourceCommand$13, UntagResourceCommand as UntagResourceCommand$13 } from "@aws-sdk/client-s3-control";
42
43
  import * as zlib from "node:zlib";
43
- import { ApiGatewayV2Client, CreateApiCommand, CreateAuthorizerCommand as CreateAuthorizerCommand$1, CreateIntegrationCommand, CreateRouteCommand as CreateRouteCommand$1, CreateStageCommand as CreateStageCommand$1, DeleteAccessLogSettingsCommand, DeleteApiCommand, DeleteAuthorizerCommand as DeleteAuthorizerCommand$1, DeleteCorsConfigurationCommand, DeleteIntegrationCommand as DeleteIntegrationCommand$1, DeleteRouteCommand as DeleteRouteCommand$1, DeleteRouteRequestParameterCommand, DeleteRouteSettingsCommand, DeleteStageCommand as DeleteStageCommand$1, GetApiCommand, GetApisCommand, GetAuthorizerCommand as GetAuthorizerCommand$1, GetAuthorizersCommand as GetAuthorizersCommand$1, GetIntegrationCommand, GetIntegrationsCommand, GetRouteCommand, GetStageCommand as GetStageCommand$1, NotFoundException as NotFoundException$3, TagResourceCommand as TagResourceCommand$13, UntagResourceCommand as UntagResourceCommand$13, UpdateApiCommand, UpdateAuthorizerCommand as UpdateAuthorizerCommand$1, UpdateIntegrationCommand, UpdateRouteCommand, UpdateStageCommand as UpdateStageCommand$1 } from "@aws-sdk/client-apigatewayv2";
44
- import { CreateStateMachineCommand, DeleteStateMachineCommand, DescribeStateMachineCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$11, SFNClient, StateMachineDoesNotExist, TagResourceCommand as TagResourceCommand$14, UntagResourceCommand as UntagResourceCommand$14, UpdateStateMachineCommand } from "@aws-sdk/client-sfn";
45
- import { CreateClusterCommand, CreateServiceCommand, DeleteClusterCommand, DeleteServiceCommand, DeregisterTaskDefinitionCommand, DescribeClustersCommand, DescribeServicesCommand, DescribeTaskDefinitionCommand, ECSClient, ListTaskDefinitionsCommand, PutClusterCapacityProvidersCommand, RegisterTaskDefinitionCommand, TagResourceCommand as TagResourceCommand$15, UntagResourceCommand as UntagResourceCommand$15, UpdateClusterCommand, UpdateServiceCommand, waitUntilServicesStable } from "@aws-sdk/client-ecs";
46
- import { AddTagsToResourceCommand as AddTagsToResourceCommand$3, CreateDBClusterCommand as CreateDBClusterCommand$1, CreateDBInstanceCommand as CreateDBInstanceCommand$1, CreateDBSubnetGroupCommand as CreateDBSubnetGroupCommand$1, DeleteDBClusterCommand as DeleteDBClusterCommand$1, DeleteDBInstanceCommand as DeleteDBInstanceCommand$1, DeleteDBSubnetGroupCommand as DeleteDBSubnetGroupCommand$1, DescribeDBClustersCommand as DescribeDBClustersCommand$1, DescribeDBInstancesCommand as DescribeDBInstancesCommand$1, DescribeDBSubnetGroupsCommand as DescribeDBSubnetGroupsCommand$1, DocDBClient, ListTagsForResourceCommand as ListTagsForResourceCommand$12, ModifyDBClusterCommand as ModifyDBClusterCommand$1, ModifyDBInstanceCommand as ModifyDBInstanceCommand$1, ModifyDBSubnetGroupCommand as ModifyDBSubnetGroupCommand$1, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$3 } from "@aws-sdk/client-docdb";
47
- import { CreateWebACLCommand, DeleteWebACLCommand, GetWebACLCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$13, TagResourceCommand as TagResourceCommand$16, UntagResourceCommand as UntagResourceCommand$16, UpdateWebACLCommand, WAFNonexistentItemException, WAFV2Client } from "@aws-sdk/client-wafv2";
48
- import { AddCustomAttributesCommand, CognitoIdentityProviderClient, CreateUserPoolCommand, DeleteUserPoolCommand, DescribeUserPoolCommand, GetUserPoolMfaConfigCommand, ListUserPoolsCommand, ResourceNotFoundException as ResourceNotFoundException$11, SetUserPoolMfaConfigCommand, UntagResourceCommand as UntagResourceCommand$17, UpdateUserPoolCommand } from "@aws-sdk/client-cognito-identity-provider";
49
- import { CreateHttpNamespaceCommand, CreatePrivateDnsNamespaceCommand, CreatePublicDnsNamespaceCommand, CreateServiceCommand as CreateServiceCommand$1, DeleteNamespaceCommand, DeleteServiceAttributesCommand, DeleteServiceCommand as DeleteServiceCommand$1, GetNamespaceCommand, GetOperationCommand, GetServiceAttributesCommand, GetServiceCommand, ListNamespacesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$14, NamespaceNotFound, ResourceInUse, ServiceDiscoveryClient, ServiceNotFound, TagResourceCommand as TagResourceCommand$17, UntagResourceCommand as UntagResourceCommand$18, UpdateHttpNamespaceCommand, UpdatePrivateDnsNamespaceCommand, UpdatePublicDnsNamespaceCommand, UpdateServiceAttributesCommand, UpdateServiceCommand as UpdateServiceCommand$1 } from "@aws-sdk/client-servicediscovery";
50
- import { AppSyncClient, CreateApiKeyCommand, CreateDataSourceCommand, CreateGraphqlApiCommand, CreateResolverCommand, DeleteApiKeyCommand, DeleteDataSourceCommand, DeleteGraphqlApiCommand, DeleteResolverCommand, GetDataSourceCommand, GetGraphqlApiCommand, GetGraphqlApiEnvironmentVariablesCommand, GetIntrospectionSchemaCommand, GetResolverCommand, ListApiKeysCommand, ListGraphqlApisCommand, NotFoundException as NotFoundException$4, PutGraphqlApiEnvironmentVariablesCommand, StartSchemaCreationCommand, TagResourceCommand as TagResourceCommand$18, UntagResourceCommand as UntagResourceCommand$19, UpdateApiKeyCommand, UpdateDataSourceCommand, UpdateGraphqlApiCommand, UpdateResolverCommand } from "@aws-sdk/client-appsync";
51
- import { ConcurrentModificationException, CrawlerRunningException, CreateConnectionCommand, CreateCrawlerCommand, CreateDatabaseCommand, CreateJobCommand, CreateSecurityConfigurationCommand, CreateTableCommand as CreateTableCommand$1, CreateTriggerCommand, CreateWorkflowCommand, DeleteConnectionCommand, DeleteCrawlerCommand, DeleteDatabaseCommand, DeleteJobCommand, DeleteSecurityConfigurationCommand, DeleteTableCommand as DeleteTableCommand$1, DeleteTriggerCommand, DeleteWorkflowCommand, EntityNotFoundException, GetConnectionCommand, GetCrawlerCommand, GetDatabaseCommand, GetJobCommand, GetSecurityConfigurationCommand, GetTableCommand, GetTagsCommand, GetTriggerCommand, GetWorkflowCommand, GlueClient, StartCrawlerScheduleCommand, StartTriggerCommand, StopCrawlerCommand, StopCrawlerScheduleCommand, StopTriggerCommand, TagResourceCommand as TagResourceCommand$19, UntagResourceCommand as UntagResourceCommand$20, UpdateConnectionCommand, UpdateCrawlerCommand, UpdateDatabaseCommand, UpdateJobCommand, UpdateTableCommand as UpdateTableCommand$1, UpdateTriggerCommand, UpdateWorkflowCommand } from "@aws-sdk/client-glue";
52
- import { BudgetsClient, CreateBudgetCommand, CreateNotificationCommand, CreateSubscriberCommand, DeleteBudgetCommand, DeleteNotificationCommand, DeleteSubscriberCommand, DescribeBudgetCommand, DescribeNotificationsForBudgetCommand, DescribeSubscribersForNotificationCommand, DuplicateRecordException, ListTagsForResourceCommand as ListTagsForResourceCommand$15, NotFoundException as NotFoundException$5, TagResourceCommand as TagResourceCommand$20, UntagResourceCommand as UntagResourceCommand$21, UpdateBudgetCommand } from "@aws-sdk/client-budgets";
53
- import { AddTagsToStreamCommand, CreateStreamCommand, DecreaseStreamRetentionPeriodCommand, DeleteStreamCommand, DeregisterStreamConsumerCommand, DescribeStreamCommand, DescribeStreamConsumerCommand, DescribeStreamSummaryCommand, DisableEnhancedMonitoringCommand, EnableEnhancedMonitoringCommand, IncreaseStreamRetentionPeriodCommand, KinesisClient, ListTagsForResourceCommand as ListTagsForResourceCommand$16, ListTagsForStreamCommand, RegisterStreamConsumerCommand, RemoveTagsFromStreamCommand, ResourceNotFoundException as ResourceNotFoundException$12, StartStreamEncryptionCommand, StopStreamEncryptionCommand, TagResourceCommand as TagResourceCommand$21, UntagResourceCommand as UntagResourceCommand$22, UpdateMaxRecordSizeCommand, UpdateShardCountCommand, UpdateStreamModeCommand, UpdateStreamRecordDistributionStrategyCommand } from "@aws-sdk/client-kinesis";
44
+ import { ApiGatewayV2Client, CreateApiCommand, CreateAuthorizerCommand as CreateAuthorizerCommand$1, CreateIntegrationCommand, CreateRouteCommand as CreateRouteCommand$1, CreateStageCommand as CreateStageCommand$1, DeleteAccessLogSettingsCommand, DeleteApiCommand, DeleteAuthorizerCommand as DeleteAuthorizerCommand$1, DeleteCorsConfigurationCommand, DeleteIntegrationCommand as DeleteIntegrationCommand$1, DeleteRouteCommand as DeleteRouteCommand$1, DeleteRouteRequestParameterCommand, DeleteRouteSettingsCommand, DeleteStageCommand as DeleteStageCommand$1, GetApiCommand, GetApisCommand, GetAuthorizerCommand as GetAuthorizerCommand$1, GetAuthorizersCommand as GetAuthorizersCommand$1, GetIntegrationCommand, GetIntegrationsCommand, GetRouteCommand, GetStageCommand as GetStageCommand$1, NotFoundException as NotFoundException$3, TagResourceCommand as TagResourceCommand$14, UntagResourceCommand as UntagResourceCommand$14, UpdateApiCommand, UpdateAuthorizerCommand as UpdateAuthorizerCommand$1, UpdateIntegrationCommand, UpdateRouteCommand, UpdateStageCommand as UpdateStageCommand$1 } from "@aws-sdk/client-apigatewayv2";
45
+ import { CreateStateMachineCommand, DeleteStateMachineCommand, DescribeStateMachineCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$12, SFNClient, StateMachineDoesNotExist, TagResourceCommand as TagResourceCommand$15, UntagResourceCommand as UntagResourceCommand$15, UpdateStateMachineCommand } from "@aws-sdk/client-sfn";
46
+ import { CreateClusterCommand, CreateServiceCommand, DeleteClusterCommand, DeleteServiceCommand, DeregisterTaskDefinitionCommand, DescribeClustersCommand, DescribeServicesCommand, DescribeTaskDefinitionCommand, ECSClient, ListTaskDefinitionsCommand, PutClusterCapacityProvidersCommand, RegisterTaskDefinitionCommand, TagResourceCommand as TagResourceCommand$16, UntagResourceCommand as UntagResourceCommand$16, UpdateClusterCommand, UpdateServiceCommand, waitUntilServicesStable } from "@aws-sdk/client-ecs";
47
+ import { AddTagsToResourceCommand as AddTagsToResourceCommand$3, CreateDBClusterCommand as CreateDBClusterCommand$1, CreateDBInstanceCommand as CreateDBInstanceCommand$1, CreateDBSubnetGroupCommand as CreateDBSubnetGroupCommand$1, DeleteDBClusterCommand as DeleteDBClusterCommand$1, DeleteDBInstanceCommand as DeleteDBInstanceCommand$1, DeleteDBSubnetGroupCommand as DeleteDBSubnetGroupCommand$1, DescribeDBClustersCommand as DescribeDBClustersCommand$1, DescribeDBInstancesCommand as DescribeDBInstancesCommand$1, DescribeDBSubnetGroupsCommand as DescribeDBSubnetGroupsCommand$1, DocDBClient, ListTagsForResourceCommand as ListTagsForResourceCommand$13, ModifyDBClusterCommand as ModifyDBClusterCommand$1, ModifyDBInstanceCommand as ModifyDBInstanceCommand$1, ModifyDBSubnetGroupCommand as ModifyDBSubnetGroupCommand$1, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$3 } from "@aws-sdk/client-docdb";
48
+ import { CreateWebACLCommand, DeleteWebACLCommand, GetWebACLCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$14, TagResourceCommand as TagResourceCommand$17, UntagResourceCommand as UntagResourceCommand$17, UpdateWebACLCommand, WAFNonexistentItemException, WAFV2Client } from "@aws-sdk/client-wafv2";
49
+ import { AddCustomAttributesCommand, CognitoIdentityProviderClient, CreateUserPoolCommand, DeleteUserPoolCommand, DescribeUserPoolCommand, GetUserPoolMfaConfigCommand, ListUserPoolsCommand, ResourceNotFoundException as ResourceNotFoundException$11, SetUserPoolMfaConfigCommand, UntagResourceCommand as UntagResourceCommand$18, UpdateUserPoolCommand } from "@aws-sdk/client-cognito-identity-provider";
50
+ import { CreateHttpNamespaceCommand, CreatePrivateDnsNamespaceCommand, CreatePublicDnsNamespaceCommand, CreateServiceCommand as CreateServiceCommand$1, DeleteNamespaceCommand, DeleteServiceAttributesCommand, DeleteServiceCommand as DeleteServiceCommand$1, GetNamespaceCommand, GetOperationCommand, GetServiceAttributesCommand, GetServiceCommand, ListNamespacesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$15, NamespaceNotFound, ResourceInUse, ServiceDiscoveryClient, ServiceNotFound, TagResourceCommand as TagResourceCommand$18, UntagResourceCommand as UntagResourceCommand$19, UpdateHttpNamespaceCommand, UpdatePrivateDnsNamespaceCommand, UpdatePublicDnsNamespaceCommand, UpdateServiceAttributesCommand, UpdateServiceCommand as UpdateServiceCommand$1 } from "@aws-sdk/client-servicediscovery";
51
+ import { AppSyncClient, CreateApiKeyCommand, CreateDataSourceCommand, CreateGraphqlApiCommand, CreateResolverCommand, DeleteApiKeyCommand, DeleteDataSourceCommand, DeleteGraphqlApiCommand, DeleteResolverCommand, GetDataSourceCommand, GetGraphqlApiCommand, GetGraphqlApiEnvironmentVariablesCommand, GetIntrospectionSchemaCommand, GetResolverCommand, ListApiKeysCommand, ListGraphqlApisCommand, NotFoundException as NotFoundException$4, PutGraphqlApiEnvironmentVariablesCommand, StartSchemaCreationCommand, TagResourceCommand as TagResourceCommand$19, UntagResourceCommand as UntagResourceCommand$20, UpdateApiKeyCommand, UpdateDataSourceCommand, UpdateGraphqlApiCommand, UpdateResolverCommand } from "@aws-sdk/client-appsync";
52
+ import { ConcurrentModificationException, CrawlerRunningException, CreateConnectionCommand, CreateCrawlerCommand, CreateDatabaseCommand, CreateJobCommand, CreateSecurityConfigurationCommand, CreateTableCommand as CreateTableCommand$1, CreateTriggerCommand, CreateWorkflowCommand, DeleteConnectionCommand, DeleteCrawlerCommand, DeleteDatabaseCommand, DeleteJobCommand, DeleteSecurityConfigurationCommand, DeleteTableCommand as DeleteTableCommand$1, DeleteTriggerCommand, DeleteWorkflowCommand, EntityNotFoundException, GetConnectionCommand, GetCrawlerCommand, GetDatabaseCommand, GetJobCommand, GetSecurityConfigurationCommand, GetTableCommand, GetTagsCommand, GetTriggerCommand, GetWorkflowCommand, GlueClient, StartCrawlerScheduleCommand, StartTriggerCommand, StopCrawlerCommand, StopCrawlerScheduleCommand, StopTriggerCommand, TagResourceCommand as TagResourceCommand$20, UntagResourceCommand as UntagResourceCommand$21, UpdateConnectionCommand, UpdateCrawlerCommand, UpdateDatabaseCommand, UpdateJobCommand, UpdateTableCommand as UpdateTableCommand$1, UpdateTriggerCommand, UpdateWorkflowCommand } from "@aws-sdk/client-glue";
53
+ import { BudgetsClient, CreateBudgetCommand, CreateNotificationCommand, CreateSubscriberCommand, DeleteBudgetCommand, DeleteNotificationCommand, DeleteSubscriberCommand, DescribeBudgetCommand, DescribeNotificationsForBudgetCommand, DescribeSubscribersForNotificationCommand, DuplicateRecordException, ListTagsForResourceCommand as ListTagsForResourceCommand$16, NotFoundException as NotFoundException$5, TagResourceCommand as TagResourceCommand$21, UntagResourceCommand as UntagResourceCommand$22, UpdateBudgetCommand } from "@aws-sdk/client-budgets";
54
+ import { AddTagsToStreamCommand, CreateStreamCommand, DecreaseStreamRetentionPeriodCommand, DeleteStreamCommand, DeregisterStreamConsumerCommand, DescribeStreamCommand, DescribeStreamConsumerCommand, DescribeStreamSummaryCommand, DisableEnhancedMonitoringCommand, EnableEnhancedMonitoringCommand, IncreaseStreamRetentionPeriodCommand, KinesisClient, ListTagsForResourceCommand as ListTagsForResourceCommand$17, ListTagsForStreamCommand, RegisterStreamConsumerCommand, RemoveTagsFromStreamCommand, ResourceNotFoundException as ResourceNotFoundException$12, StartStreamEncryptionCommand, StopStreamEncryptionCommand, TagResourceCommand as TagResourceCommand$22, UntagResourceCommand as UntagResourceCommand$23, UpdateMaxRecordSizeCommand, UpdateShardCountCommand, UpdateStreamModeCommand, UpdateStreamRecordDistributionStrategyCommand } from "@aws-sdk/client-kinesis";
54
55
  import { CreateScheduleCommand, DeleteScheduleCommand, GetScheduleCommand, ListSchedulesCommand, ResourceNotFoundException as ResourceNotFoundException$13, SchedulerClient, UpdateScheduleCommand } from "@aws-sdk/client-scheduler";
55
- import { CreatePipeCommand, DeletePipeCommand, DescribePipeCommand, NotFoundException as NotFoundException$6, PipesClient, TagResourceCommand as TagResourceCommand$22, UntagResourceCommand as UntagResourceCommand$23, UpdatePipeCommand } from "@aws-sdk/client-pipes";
56
- import { AccessPointAlreadyExists, AccessPointNotFound, CreateAccessPointCommand, CreateFileSystemCommand, CreateMountTargetCommand, DeleteAccessPointCommand, DeleteFileSystemCommand, DeleteFileSystemPolicyCommand, DeleteMountTargetCommand, DescribeAccessPointsCommand, DescribeBackupPolicyCommand, DescribeFileSystemPolicyCommand, DescribeFileSystemsCommand, DescribeLifecycleConfigurationCommand, DescribeMountTargetSecurityGroupsCommand, DescribeMountTargetsCommand, EFSClient, FileSystemAlreadyExists, FileSystemNotFound, ModifyMountTargetSecurityGroupsCommand, MountTargetNotFound, PutBackupPolicyCommand, PutFileSystemPolicyCommand, PutLifecycleConfigurationCommand, TagResourceCommand as TagResourceCommand$23, UntagResourceCommand as UntagResourceCommand$24, UpdateFileSystemCommand, UpdateFileSystemProtectionCommand } from "@aws-sdk/client-efs";
57
- import { AssociateFileSystemAliasesCommand, CreateFileSystemCommand as CreateFileSystemCommand$1, CreateFileSystemFromBackupCommand, DeleteFileSystemCommand as DeleteFileSystemCommand$1, DescribeFileSystemAliasesCommand, DescribeFileSystemsCommand as DescribeFileSystemsCommand$1, DisassociateFileSystemAliasesCommand, FSxClient, FileSystemNotFound as FileSystemNotFound$1, TagResourceCommand as TagResourceCommand$24, UntagResourceCommand as UntagResourceCommand$25, UpdateFileSystemCommand as UpdateFileSystemCommand$1 } from "@aws-sdk/client-fsx";
56
+ import { CreatePipeCommand, DeletePipeCommand, DescribePipeCommand, NotFoundException as NotFoundException$6, PipesClient, TagResourceCommand as TagResourceCommand$23, UntagResourceCommand as UntagResourceCommand$24, UpdatePipeCommand } from "@aws-sdk/client-pipes";
57
+ import { AccessPointAlreadyExists, AccessPointNotFound, CreateAccessPointCommand, CreateFileSystemCommand, CreateMountTargetCommand, DeleteAccessPointCommand, DeleteFileSystemCommand, DeleteFileSystemPolicyCommand, DeleteMountTargetCommand, DescribeAccessPointsCommand, DescribeBackupPolicyCommand, DescribeFileSystemPolicyCommand, DescribeFileSystemsCommand, DescribeLifecycleConfigurationCommand, DescribeMountTargetSecurityGroupsCommand, DescribeMountTargetsCommand, EFSClient, FileSystemAlreadyExists, FileSystemNotFound, ModifyMountTargetSecurityGroupsCommand, MountTargetNotFound, PutBackupPolicyCommand, PutFileSystemPolicyCommand, PutLifecycleConfigurationCommand, TagResourceCommand as TagResourceCommand$24, UntagResourceCommand as UntagResourceCommand$25, UpdateFileSystemCommand, UpdateFileSystemProtectionCommand } from "@aws-sdk/client-efs";
58
+ import { AssociateFileSystemAliasesCommand, CreateFileSystemCommand as CreateFileSystemCommand$1, CreateFileSystemFromBackupCommand, DeleteFileSystemCommand as DeleteFileSystemCommand$1, DescribeFileSystemAliasesCommand, DescribeFileSystemsCommand as DescribeFileSystemsCommand$1, DisassociateFileSystemAliasesCommand, FSxClient, FileSystemNotFound as FileSystemNotFound$1, TagResourceCommand as TagResourceCommand$25, UntagResourceCommand as UntagResourceCommand$26, UpdateFileSystemCommand as UpdateFileSystemCommand$1 } from "@aws-sdk/client-fsx";
58
59
  import { AddInstanceFleetCommand, AddInstanceGroupsCommand, AddTagsCommand as AddTagsCommand$1, DescribeClusterCommand, EMRClient, InvalidRequestException, ListClustersCommand, ListInstanceFleetsCommand, ListInstanceGroupsCommand, ModifyClusterCommand, ModifyInstanceFleetCommand, ModifyInstanceGroupsCommand, PutAutoScalingPolicyCommand, PutAutoTerminationPolicyCommand, PutManagedScalingPolicyCommand, RemoveAutoScalingPolicyCommand, RemoveAutoTerminationPolicyCommand, RemoveManagedScalingPolicyCommand, RemoveTagsCommand as RemoveTagsCommand$1, RunJobFlowCommand, SetTerminationProtectionCommand, SetUnhealthyNodeReplacementCommand, SetVisibleToAllUsersCommand, TerminateJobFlowsCommand } from "@aws-sdk/client-emr";
59
60
  import { CreateDeliveryStreamCommand, DeleteDeliveryStreamCommand, DescribeDeliveryStreamCommand, FirehoseClient, ListTagsForDeliveryStreamCommand, ResourceNotFoundException as ResourceNotFoundException$14, StartDeliveryStreamEncryptionCommand, StopDeliveryStreamEncryptionCommand, TagDeliveryStreamCommand, UntagDeliveryStreamCommand, UpdateDestinationCommand } from "@aws-sdk/client-firehose";
60
61
  import { AddTagsCommand as AddTagsCommand$2, CloudTrailClient, CreateTrailCommand, DeleteTrailCommand, GetEventConfigurationCommand, GetEventSelectorsCommand, GetInsightSelectorsCommand, GetTrailCommand, GetTrailStatusCommand, ListTagsCommand as ListTagsCommand$2, PutEventConfigurationCommand, PutEventSelectorsCommand, PutInsightSelectorsCommand, RemoveTagsCommand as RemoveTagsCommand$2, StartLoggingCommand, StopLoggingCommand, TrailNotFoundException, UpdateTrailCommand } from "@aws-sdk/client-cloudtrail";
61
62
  import { BatchGetProjectsCommand, CodeBuildClient, CreateProjectCommand, DeleteProjectCommand, ResourceNotFoundException as ResourceNotFoundException$15, UpdateProjectCommand, UpdateProjectVisibilityCommand } from "@aws-sdk/client-codebuild";
62
- import { CodeCommitClient, CreateCommitCommand, CreateRepositoryCommand as CreateRepositoryCommand$1, DeleteRepositoryCommand as DeleteRepositoryCommand$1, GetRepositoryCommand, GetRepositoryTriggersCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$17, PutRepositoryTriggersCommand, RepositoryDoesNotExistException, TagResourceCommand as TagResourceCommand$25, UntagResourceCommand as UntagResourceCommand$26, UpdateRepositoryDescriptionCommand, UpdateRepositoryEncryptionKeyCommand, UpdateRepositoryNameCommand } from "@aws-sdk/client-codecommit";
63
- import { CreateLifecyclePolicyCommand, DLMClient, DeleteLifecyclePolicyCommand as DeleteLifecyclePolicyCommand$1, GetLifecyclePoliciesCommand, GetLifecyclePolicyCommand as GetLifecyclePolicyCommand$1, ResourceNotFoundException as ResourceNotFoundException$16, TagResourceCommand as TagResourceCommand$26, UntagResourceCommand as UntagResourceCommand$27, UpdateLifecyclePolicyCommand } from "@aws-sdk/client-dlm";
64
- import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$18, S3VectorsClient, TagResourceCommand as TagResourceCommand$27, UntagResourceCommand as UntagResourceCommand$28 } from "@aws-sdk/client-s3vectors";
65
- import { ListTagsForResourceCommand as ListTagsForResourceCommand$19, S3ControlClient, TagResourceCommand as TagResourceCommand$28, UntagResourceCommand as UntagResourceCommand$29 } from "@aws-sdk/client-s3-control";
63
+ import { CodeCommitClient, CreateCommitCommand, CreateRepositoryCommand as CreateRepositoryCommand$1, DeleteRepositoryCommand as DeleteRepositoryCommand$1, GetRepositoryCommand, GetRepositoryTriggersCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$18, PutRepositoryTriggersCommand, RepositoryDoesNotExistException, TagResourceCommand as TagResourceCommand$26, UntagResourceCommand as UntagResourceCommand$27, UpdateRepositoryDescriptionCommand, UpdateRepositoryEncryptionKeyCommand, UpdateRepositoryNameCommand } from "@aws-sdk/client-codecommit";
64
+ import { CreateLifecyclePolicyCommand, DLMClient, DeleteLifecyclePolicyCommand as DeleteLifecyclePolicyCommand$1, GetLifecyclePoliciesCommand, GetLifecyclePolicyCommand as GetLifecyclePolicyCommand$1, ResourceNotFoundException as ResourceNotFoundException$16, TagResourceCommand as TagResourceCommand$27, UntagResourceCommand as UntagResourceCommand$28, UpdateLifecyclePolicyCommand } from "@aws-sdk/client-dlm";
65
+ import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$19, S3VectorsClient, TagResourceCommand as TagResourceCommand$28, UntagResourceCommand as UntagResourceCommand$29 } from "@aws-sdk/client-s3vectors";
66
66
  import { CreateNamespaceCommand, CreateTableBucketCommand, CreateTableCommand as CreateTableCommand$2, DeleteNamespaceCommand as DeleteNamespaceCommand$1, DeleteTableBucketCommand, DeleteTableBucketMetricsConfigurationCommand, DeleteTableBucketReplicationCommand, DeleteTableCommand as DeleteTableCommand$2, GetNamespaceCommand as GetNamespaceCommand$1, GetTableBucketCommand, GetTableBucketEncryptionCommand, GetTableBucketMaintenanceConfigurationCommand, GetTableBucketMetricsConfigurationCommand, GetTableBucketReplicationCommand, GetTableBucketStorageClassCommand, GetTableCommand as GetTableCommand$1, GetTableMaintenanceConfigurationCommand, ListNamespacesCommand as ListNamespacesCommand$1, ListTableBucketsCommand, ListTablesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$20, NotFoundException as NotFoundException$7, PutTableBucketEncryptionCommand, PutTableBucketMaintenanceConfigurationCommand, PutTableBucketMetricsConfigurationCommand, PutTableBucketReplicationCommand, PutTableBucketStorageClassCommand, PutTableMaintenanceConfigurationCommand, RenameTableCommand, S3TablesClient, TagResourceCommand as TagResourceCommand$29, UntagResourceCommand as UntagResourceCommand$30 } from "@aws-sdk/client-s3tables";
67
67
 
68
68
  //#region src/provisioning/providers/iam-policy-provider.ts
@@ -3121,6 +3121,126 @@ function foldEventBridgeConfiguration(config) {
3121
3121
  [EVENTBRIDGE_CONFIG_KEY]: { EventBridgeEnabled: enabled }
3122
3122
  };
3123
3123
  }
3124
+ const ABAC_DISABLED = "Disabled";
3125
+ const ABAC_ENABLED = "Enabled";
3126
+ const METADATA_TABLE_DISABLED = "DISABLED";
3127
+ const METADATA_TABLE_ENABLED = "ENABLED";
3128
+ const METADATA_TABLE_POLL_MS = 2e3;
3129
+ const METADATA_TABLE_BUDGET_MS = 3e5;
3130
+ function abacStatusOf(properties) {
3131
+ return properties["AbacStatus"] ?? ABAC_DISABLED;
3132
+ }
3133
+ function metadataBag(value) {
3134
+ return isPlainObject$3(value) ? value : void 0;
3135
+ }
3136
+ function metadataConfigurationRefusal(value) {
3137
+ if (value === void 0) return void 0;
3138
+ const root = "MetadataConfiguration";
3139
+ if (!isPlainObject$3(value)) return `${root} must be an object`;
3140
+ const journal = value["JournalTableConfiguration"];
3141
+ if (!isPlainObject$3(journal)) return `${root}.JournalTableConfiguration must be an object`;
3142
+ const expiration = journal["RecordExpiration"];
3143
+ if (!isPlainObject$3(expiration)) return `${root}.JournalTableConfiguration.RecordExpiration must be an object`;
3144
+ if (typeof expiration["Expiration"] !== "string") return `${root}.JournalTableConfiguration.RecordExpiration.Expiration must be a string`;
3145
+ const days = expiration["Days"];
3146
+ if (days !== void 0 && (days === "" || days === null || !Number.isInteger(Number(days)))) return `${root}.JournalTableConfiguration.RecordExpiration.Days must be an integer`;
3147
+ const tables = [
3148
+ ["JournalTableConfiguration", journal],
3149
+ ["InventoryTableConfiguration", value["InventoryTableConfiguration"]],
3150
+ ["AnnotationTableConfiguration", value["AnnotationTableConfiguration"]]
3151
+ ];
3152
+ for (const [member, table] of tables) {
3153
+ if (table === void 0) continue;
3154
+ if (!isPlainObject$3(table)) return `${root}.${member} must be an object`;
3155
+ if (member !== "JournalTableConfiguration" && typeof table["ConfigurationState"] !== "string") return `${root}.${member}.ConfigurationState must be a string`;
3156
+ const encryption = table["EncryptionConfiguration"];
3157
+ if (encryption === void 0) continue;
3158
+ if (!isPlainObject$3(encryption) || typeof encryption["SseAlgorithm"] !== "string") return `${root}.${member}.EncryptionConfiguration must be an object with an SseAlgorithm`;
3159
+ }
3160
+ }
3161
+ function metadataEncryptionToSdk(table) {
3162
+ const encryption = metadataBag(table["EncryptionConfiguration"]);
3163
+ if (encryption === void 0) return void 0;
3164
+ return {
3165
+ SseAlgorithm: encryption["SseAlgorithm"],
3166
+ ...encryption["KmsKeyArn"] !== void 0 ? { KmsKeyArn: encryption["KmsKeyArn"] } : {}
3167
+ };
3168
+ }
3169
+ function metadataConfigurationToSdk(config) {
3170
+ const journal = metadataBag(config["JournalTableConfiguration"]) ?? {};
3171
+ const expiration = metadataBag(journal["RecordExpiration"]) ?? {};
3172
+ const days = expiration["Days"];
3173
+ const journalEncryption = metadataEncryptionToSdk(journal);
3174
+ const inventory = metadataBag(config["InventoryTableConfiguration"]);
3175
+ const inventoryEncryption = inventory && metadataEncryptionToSdk(inventory);
3176
+ const annotation = metadataBag(config["AnnotationTableConfiguration"]);
3177
+ const annotationEncryption = annotation && metadataEncryptionToSdk(annotation);
3178
+ return {
3179
+ JournalTableConfiguration: {
3180
+ RecordExpiration: {
3181
+ Expiration: expiration["Expiration"],
3182
+ ...days !== void 0 ? { Days: typeof days === "string" ? Number(days) : days } : {}
3183
+ },
3184
+ ...journalEncryption ? { EncryptionConfiguration: journalEncryption } : {}
3185
+ },
3186
+ ...inventory ? { InventoryTableConfiguration: {
3187
+ ConfigurationState: inventory["ConfigurationState"],
3188
+ ...inventoryEncryption ? { EncryptionConfiguration: inventoryEncryption } : {}
3189
+ } } : {},
3190
+ ...annotation ? { AnnotationTableConfiguration: {
3191
+ ConfigurationState: annotation["ConfigurationState"],
3192
+ ...annotationEncryption ? { EncryptionConfiguration: annotationEncryption } : {},
3193
+ ...annotation["Role"] !== void 0 ? { Role: annotation["Role"] } : {}
3194
+ } } : {}
3195
+ };
3196
+ }
3197
+ function metadataConfigurationFromSdk(result) {
3198
+ const journal = result.JournalTableConfigurationResult;
3199
+ const inventory = result.InventoryTableConfigurationResult;
3200
+ const annotation = result.AnnotationTableConfigurationResult;
3201
+ return {
3202
+ ...journal ? { JournalTableConfiguration: { RecordExpiration: {
3203
+ Expiration: journal.RecordExpiration?.Expiration,
3204
+ ...journal.RecordExpiration?.Days !== void 0 ? { Days: journal.RecordExpiration.Days } : {}
3205
+ } } } : {},
3206
+ ...inventory ? { InventoryTableConfiguration: { ConfigurationState: inventory.ConfigurationState } } : {},
3207
+ ...annotation ? { AnnotationTableConfiguration: {
3208
+ ConfigurationState: annotation.ConfigurationState,
3209
+ ...annotation.Role !== void 0 ? { Role: annotation.Role } : {}
3210
+ } } : {}
3211
+ };
3212
+ }
3213
+ function metadataAttributesFromSdk(result) {
3214
+ const attributes = {};
3215
+ const destination = result.DestinationResult;
3216
+ if (destination) {
3217
+ const path = "MetadataConfiguration.Destination";
3218
+ attributes[path] = {
3219
+ TableBucketArn: destination.TableBucketArn,
3220
+ TableBucketType: destination.TableBucketType,
3221
+ TableNamespace: destination.TableNamespace
3222
+ };
3223
+ attributes[`${path}.TableBucketArn`] = destination.TableBucketArn;
3224
+ attributes[`${path}.TableBucketType`] = destination.TableBucketType;
3225
+ attributes[`${path}.TableNamespace`] = destination.TableNamespace;
3226
+ }
3227
+ for (const [member, table] of [
3228
+ ["JournalTableConfiguration", result.JournalTableConfigurationResult],
3229
+ ["InventoryTableConfiguration", result.InventoryTableConfigurationResult],
3230
+ ["AnnotationTableConfiguration", result.AnnotationTableConfigurationResult]
3231
+ ]) {
3232
+ if (table?.TableName !== void 0) attributes[`MetadataConfiguration.${member}.TableName`] = table.TableName;
3233
+ if (table?.TableArn !== void 0) attributes[`MetadataConfiguration.${member}.TableArn`] = table.TableArn;
3234
+ }
3235
+ return attributes;
3236
+ }
3237
+ function bucketNameRefusal(properties) {
3238
+ const prefix = properties["BucketNamePrefix"];
3239
+ if (prefix === void 0) return void 0;
3240
+ if (typeof prefix !== "string" || prefix === "") return "sets a BucketNamePrefix that is not a non-empty string";
3241
+ if (properties["BucketName"] !== void 0) return "specifies both BucketName and BucketNamePrefix; only one of them is accepted";
3242
+ if (properties["BucketNamespace"] !== "account-regional") return "sets BucketNamePrefix, which is only supported with BucketNamespace: account-regional";
3243
+ }
3124
3244
  const LIFECYCLE_RULE_PATH = "AWS::S3::Bucket LifecycleConfiguration.Rules[]";
3125
3245
  const LIFECYCLE_FILTER_PATH = `${LIFECYCLE_RULE_PATH}.Filter`;
3126
3246
  const LIFECYCLE_TAG_FILTERS_PATH = `${LIFECYCLE_RULE_PATH}.TagFilters`;
@@ -3490,9 +3610,13 @@ var S3BucketProvider = class S3BucketProvider {
3490
3610
  "InventoryConfigurations",
3491
3611
  "ReplicationConfiguration",
3492
3612
  "ObjectLockConfiguration",
3493
- "ObjectLockEnabled"
3613
+ "ObjectLockEnabled",
3614
+ "AbacStatus",
3615
+ "BucketNamePrefix",
3616
+ "BucketNamespace",
3617
+ "MetadataConfiguration"
3494
3618
  ])]]);
3495
- unhandledByDesign = /* @__PURE__ */ new Map([["AWS::S3::Bucket", /* @__PURE__ */ new Map([["AccessControl", "Legacy canned ACL; AWS disables ACLs by default since 2023-04 — use BucketOwnershipControls + BucketPolicy / PublicAccessBlockConfiguration instead"]])]]);
3619
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::S3::Bucket", /* @__PURE__ */ new Map([["AccessControl", "Legacy canned ACL; AWS disables ACLs by default since 2023-04 — use BucketOwnershipControls + BucketPolicy / PublicAccessBlockConfiguration instead"], ["MetadataTableConfiguration", "V1 S3 Metadata, which the schema says to replace with MetadataConfiguration; S3 answered V1APIsNotAllowed where it was probed, so an SDK path could not be verified. Stays on Cloud Control"]])]]);
3496
3620
  constructor() {
3497
3621
  const awsClients = getAwsClients();
3498
3622
  this.s3Client = awsClients.s3;
@@ -3594,6 +3718,7 @@ var S3BucketProvider = class S3BucketProvider {
3594
3718
  };
3595
3719
  }
3596
3720
  async getAttribute(physicalId, _resourceType, attributeName) {
3721
+ if (attributeName.startsWith("MetadataConfiguration.")) return (await this.readMetadataAttributes(physicalId))[attributeName];
3597
3722
  return (await this.buildAttributes(physicalId))[attributeName];
3598
3723
  }
3599
3724
  async applyVersioning(bucketName, versioningConfig, onUnusable) {
@@ -3619,7 +3744,7 @@ var S3BucketProvider = class S3BucketProvider {
3619
3744
  }));
3620
3745
  this.logger.debug(`Applied ${tags.length} tags to bucket ${this.shown(bucketName)}`);
3621
3746
  }
3622
- async applyTagDiff(bucketName, resourceType, logicalId, oldTagsRaw, newTagsRaw) {
3747
+ async applyTagDiff(bucketName, resourceType, logicalId, oldTagsRaw, newTagsRaw, abacEnabled = false) {
3623
3748
  const plan = planTagDiff(oldTagsRaw, newTagsRaw);
3624
3749
  const desiredRead = readTagList(newTagsRaw, "desired");
3625
3750
  const desired = desiredRead.kind === "tags" ? desiredRead.tags : [];
@@ -3640,6 +3765,10 @@ var S3BucketProvider = class S3BucketProvider {
3640
3765
  if (plan.set.size === 0 && plan.remove.length === 0) return;
3641
3766
  tagSet = desired;
3642
3767
  }
3768
+ if (abacEnabled) {
3769
+ await this.replaceAbacBucketTags(bucketName, tagSet);
3770
+ return;
3771
+ }
3643
3772
  if (tagSet.length === 0) {
3644
3773
  try {
3645
3774
  await this.s3Client.send(new DeleteBucketTaggingCommand({ Bucket: bucketName }));
@@ -3656,6 +3785,219 @@ var S3BucketProvider = class S3BucketProvider {
3656
3785
  }));
3657
3786
  this.logger.debug(`Replaced tag set on bucket ${this.shown(bucketName)} (${tagSet.length} tags)`);
3658
3787
  }
3788
+ async replaceAbacBucketTags(bucketName, tagSet) {
3789
+ const keep = new Set(tagSet.map((t) => t.Key));
3790
+ const stale = (await this.readTags(bucketName)).map((t) => t.Key).filter((key) => !keep.has(key));
3791
+ const client = new S3ControlClient({
3792
+ ...clientDefaultsFor(this.credentialConfig),
3793
+ region: await this.getRegion()
3794
+ });
3795
+ try {
3796
+ const AccountId = (await getAccountInfo()).accountId;
3797
+ const ResourceArn = s3BucketArn(bucketName, await this.getRegion());
3798
+ if (stale.length > 0) await client.send(new UntagResourceCommand$13({
3799
+ AccountId,
3800
+ ResourceArn,
3801
+ TagKeys: stale
3802
+ }));
3803
+ if (tagSet.length > 0) await client.send(new TagResourceCommand$13({
3804
+ AccountId,
3805
+ ResourceArn,
3806
+ Tags: tagSet
3807
+ }));
3808
+ } finally {
3809
+ client.destroy();
3810
+ }
3811
+ this.logger.debug(safeMsg`Replaced tag set on ABAC bucket ${this.shown(bucketName)}`);
3812
+ }
3813
+ async applyAbacStatus(bucketName, status) {
3814
+ await this.s3Client.send(new PutBucketAbacCommand({
3815
+ Bucket: bucketName,
3816
+ AbacStatus: { Status: status }
3817
+ }));
3818
+ this.logger.debug(safeMsg`Applied AbacStatus to bucket ${this.shown(bucketName)}`);
3819
+ }
3820
+ async accountRegionalBucketName(prefix) {
3821
+ return `${prefix}-${(await getAccountInfo()).accountId}-${canonicalizeRegion(await this.getRegion())}-an`;
3822
+ }
3823
+ async createMetadataConfiguration(bucketName, desired, stateBorne) {
3824
+ const MetadataConfiguration = metadataConfigurationToSdk(desired);
3825
+ try {
3826
+ await this.s3Client.send(new CreateBucketMetadataConfigurationCommand({
3827
+ Bucket: bucketName,
3828
+ MetadataConfiguration
3829
+ }));
3830
+ } catch (err) {
3831
+ if (err.name !== "MetadataConfigurationAlreadyExists") throw err;
3832
+ const live = await this.readMetadataConfigurationResult(bucketName).catch(() => void 0);
3833
+ if (live === void 0) throw err;
3834
+ return this.convergeMetadataConfiguration(bucketName, desired, live, stateBorne);
3835
+ }
3836
+ await this.waitForMetadataTables(bucketName, MetadataConfiguration, stateBorne);
3837
+ return true;
3838
+ }
3839
+ async convergeMetadataConfiguration(bucketName, desired, live, stateBorne) {
3840
+ const sent = metadataConfigurationToSdk(desired);
3841
+ if (sent.JournalTableConfiguration?.EncryptionConfiguration || sent.InventoryTableConfiguration?.EncryptionConfiguration || sent.AnnotationTableConfiguration?.EncryptionConfiguration) this.logger.warn(safeMsg`Bucket ${this.shown(bucketName)} already holds an S3 Metadata configuration, and S3 never returns a table's encryption, so the declared EncryptionConfiguration is unverified and may not be the one in effect`);
3842
+ const enabledATable = await this.applyMetadataConfigurationDiff(bucketName, desired, metadataConfigurationFromSdk(live), true, true);
3843
+ await this.waitForMetadataTables(bucketName, sent, stateBorne);
3844
+ return enabledATable;
3845
+ }
3846
+ async applyMetadataConfigurationDiff(bucketName, desiredRaw, previousRaw, stateBorne, refuseOnly) {
3847
+ const desired = metadataBag(desiredRaw);
3848
+ const previous = metadataBag(previousRaw);
3849
+ if (desired === void 0) {
3850
+ if (previous === void 0) return false;
3851
+ try {
3852
+ await this.s3Client.send(new DeleteBucketMetadataConfigurationCommand({ Bucket: bucketName }));
3853
+ } catch (err) {
3854
+ if (err.name !== "MetadataConfigurationNotFound") throw err;
3855
+ }
3856
+ return false;
3857
+ }
3858
+ if (previous === void 0) {
3859
+ if (refuseOnly) return false;
3860
+ return this.createMetadataConfiguration(bucketName, desired, stateBorne);
3861
+ }
3862
+ const next = metadataConfigurationToSdk(desired);
3863
+ const prev = metadataConfigurationToSdk(previous);
3864
+ const differs = (a, b) => JSON.stringify(a) !== JSON.stringify(b);
3865
+ const refuseEncryptionChange = (member, a, b) => {
3866
+ if (!stateBorne && differs(a, b)) throw new Error(`Bucket ${this.shown(bucketName)}: changing MetadataConfiguration.${member}.EncryptionConfiguration is not supported once the table exists. Revert it, or re-create the table: remove MetadataConfiguration, deploy, delete the table with aws s3tables delete-table, then add it back with the new encryption`);
3867
+ };
3868
+ const nextJournal = next.JournalTableConfiguration;
3869
+ const prevJournal = prev.JournalTableConfiguration;
3870
+ refuseEncryptionChange("JournalTableConfiguration", prevJournal?.EncryptionConfiguration, nextJournal?.EncryptionConfiguration);
3871
+ const nextInventory = next.InventoryTableConfiguration;
3872
+ const prevInventory = prev.InventoryTableConfiguration;
3873
+ const nextInventoryState = nextInventory?.ConfigurationState ?? METADATA_TABLE_DISABLED;
3874
+ const prevInventoryState = prevInventory?.ConfigurationState ?? METADATA_TABLE_DISABLED;
3875
+ if (nextInventoryState === METADATA_TABLE_ENABLED && prevInventoryState === METADATA_TABLE_ENABLED) refuseEncryptionChange("InventoryTableConfiguration", prevInventory?.EncryptionConfiguration, nextInventory?.EncryptionConfiguration);
3876
+ const nextAnnotation = next.AnnotationTableConfiguration;
3877
+ const prevAnnotation = prev.AnnotationTableConfiguration;
3878
+ const nextAnnotationState = nextAnnotation?.ConfigurationState ?? METADATA_TABLE_DISABLED;
3879
+ const prevAnnotationState = prevAnnotation?.ConfigurationState ?? METADATA_TABLE_DISABLED;
3880
+ const annotationStaysOn = nextAnnotationState === METADATA_TABLE_ENABLED && prevAnnotationState === METADATA_TABLE_ENABLED;
3881
+ if (annotationStaysOn) refuseEncryptionChange("AnnotationTableConfiguration", prevAnnotation?.EncryptionConfiguration, nextAnnotation?.EncryptionConfiguration);
3882
+ let enabledATable = false;
3883
+ if (differs(prevJournal?.RecordExpiration, nextJournal?.RecordExpiration)) await this.s3Client.send(new UpdateBucketMetadataJournalTableConfigurationCommand({
3884
+ Bucket: bucketName,
3885
+ JournalTableConfiguration: { RecordExpiration: nextJournal?.RecordExpiration }
3886
+ }));
3887
+ if (nextInventoryState !== prevInventoryState) {
3888
+ const on = nextInventoryState === METADATA_TABLE_ENABLED;
3889
+ await this.s3Client.send(new UpdateBucketMetadataInventoryTableConfigurationCommand({
3890
+ Bucket: bucketName,
3891
+ InventoryTableConfiguration: {
3892
+ ConfigurationState: nextInventoryState,
3893
+ ...on && nextInventory?.EncryptionConfiguration ? { EncryptionConfiguration: nextInventory.EncryptionConfiguration } : {}
3894
+ }
3895
+ }));
3896
+ enabledATable ||= on;
3897
+ }
3898
+ if (nextAnnotationState !== prevAnnotationState || annotationStaysOn && nextAnnotation?.Role !== prevAnnotation?.Role) {
3899
+ const on = nextAnnotationState === METADATA_TABLE_ENABLED;
3900
+ await this.s3Client.send(new UpdateBucketMetadataAnnotationTableConfigurationCommand({
3901
+ Bucket: bucketName,
3902
+ AnnotationTableConfiguration: {
3903
+ ConfigurationState: nextAnnotationState,
3904
+ ...on && nextAnnotation?.EncryptionConfiguration ? { EncryptionConfiguration: nextAnnotation.EncryptionConfiguration } : {},
3905
+ ...on && nextAnnotation?.Role !== void 0 ? { Role: nextAnnotation.Role } : {}
3906
+ }
3907
+ }));
3908
+ enabledATable ||= on;
3909
+ }
3910
+ if (enabledATable && !refuseOnly) await this.waitForMetadataTables(bucketName, next, stateBorne);
3911
+ return enabledATable;
3912
+ }
3913
+ async waitForMetadataTables(bucketName, sent, stateBorne) {
3914
+ const deadline = Date.now() + METADATA_TABLE_BUDGET_MS;
3915
+ const warned = /* @__PURE__ */ new Set();
3916
+ for (;;) {
3917
+ let result;
3918
+ try {
3919
+ result = await this.readMetadataConfigurationResult(bucketName);
3920
+ } catch (err) {
3921
+ if (!stateBorne) throw err;
3922
+ this.logger.warn(safeMsg`Could not read the S3 Metadata tables of ${this.shown(bucketName)} (${caughtErrorName(err)}); not waiting for them`);
3923
+ return;
3924
+ }
3925
+ const tables = [
3926
+ [
3927
+ "journal",
3928
+ true,
3929
+ result?.JournalTableConfigurationResult
3930
+ ],
3931
+ [
3932
+ "inventory",
3933
+ sent.InventoryTableConfiguration?.ConfigurationState === METADATA_TABLE_ENABLED,
3934
+ result?.InventoryTableConfigurationResult
3935
+ ],
3936
+ [
3937
+ "annotation",
3938
+ sent.AnnotationTableConfiguration?.ConfigurationState === METADATA_TABLE_ENABLED,
3939
+ result?.AnnotationTableConfigurationResult
3940
+ ]
3941
+ ];
3942
+ let pending;
3943
+ for (const [name, wanted, table] of tables) {
3944
+ if (!wanted) continue;
3945
+ if (table?.TableStatus === "FAILED") {
3946
+ if (!warned.has(name)) {
3947
+ warned.add(name);
3948
+ this.warnMetadataTableFailed(bucketName, name, table);
3949
+ }
3950
+ continue;
3951
+ }
3952
+ if (table?.TableArn === void 0) pending = `the ${name} table`;
3953
+ }
3954
+ if (pending === void 0) return;
3955
+ if (Date.now() >= deadline) {
3956
+ this.logger.warn(safeMsg`Gave up waiting for ${pending} of bucket ${this.shown(bucketName)}'s S3 Metadata configuration; it may still finish, and an Fn::GetAtt on its ARN fails until then. Read it with aws s3api get-bucket-metadata-configuration`);
3957
+ return;
3958
+ }
3959
+ await new Promise((r) => setTimeout(r, METADATA_TABLE_POLL_MS));
3960
+ }
3961
+ }
3962
+ warnMetadataTableFailed(bucketName, name, table) {
3963
+ const reason = describeAwsStatusReason({
3964
+ code: table.Error?.ErrorCode,
3965
+ message: table.Error?.ErrorMessage
3966
+ }, "S3 gave no reason.");
3967
+ const noArn = table.TableArn === void 0 ? " It has no ARN, so an Fn::GetAtt on its TableArn fails." : "";
3968
+ this.logger.debug(safeMsg`S3 Metadata ${name} table: ${this.maskRaw(reason.detail)}`);
3969
+ this.logger.warn(safeMsg`The S3 Metadata ${name} table of bucket ${this.shown(bucketName)} FAILED: ${reason.summary} The deploy continues, but this table records nothing.${noArn} When a table left by an earlier bucket of this name is the cause, delete it with aws s3tables delete-table --table-bucket-arn <the account's aws-s3 table bucket> --namespace b_${this.shown(bucketName)} --name ${name}, then deploy without MetadataConfiguration and add it back`);
3970
+ }
3971
+ async readMetadataConfigurationResult(bucket) {
3972
+ try {
3973
+ return (await this.s3Client.send(new GetBucketMetadataConfigurationCommand({ Bucket: bucket }))).GetBucketMetadataConfigurationResult?.MetadataConfigurationResult;
3974
+ } catch (err) {
3975
+ if (err.name === "MetadataConfigurationNotFound") return void 0;
3976
+ throw err;
3977
+ }
3978
+ }
3979
+ async readMetadataForDrift(bucket) {
3980
+ try {
3981
+ return await this.readMetadataConfigurationResult(bucket);
3982
+ } catch (err) {
3983
+ this.logger.debug(safeMsg`Could not read S3 Metadata of ${this.shown(bucket)} (${caughtErrorName(err)})`);
3984
+ return "unread";
3985
+ }
3986
+ }
3987
+ async readMetadataAttributesAfterWrites(bucket, context) {
3988
+ try {
3989
+ return await this.readMetadataAttributes(bucket);
3990
+ } catch (err) {
3991
+ const readback = context !== void 0 && "desiredFromAwsReadback" in context ? context.desiredFromAwsReadback : void 0;
3992
+ if (context?.replayingState !== true && readback !== true) throw err;
3993
+ this.logger.warn(safeMsg`Could not read the S3 Metadata attributes of ${this.shown(bucket)} (${caughtErrorName(err)}); an Fn::GetAtt on them fails until the next deploy records them`);
3994
+ return {};
3995
+ }
3996
+ }
3997
+ async readMetadataAttributes(bucket) {
3998
+ const result = await this.readMetadataConfigurationResult(bucket);
3999
+ return result ? metadataAttributesFromSdk(result) : {};
4000
+ }
3659
4001
  async applyCorsConfiguration(bucketName, corsConfig) {
3660
4002
  const corsRules = corsConfig.CorsRules.map((rule) => ({
3661
4003
  ID: rule["Id"],
@@ -4620,6 +4962,17 @@ var S3BucketProvider = class S3BucketProvider {
4620
4962
  retainPrevious("VersioningConfiguration");
4621
4963
  } else await this.applyVersioning(bucketName, { Status: "Suspended" });
4622
4964
  }
4965
+ const desiredMetadata = properties["MetadataConfiguration"];
4966
+ const previousMetadata = previousProperties["MetadataConfiguration"];
4967
+ const metadataStateBorne = context?.replayingState === true || context?.desiredFromAwsReadback === true;
4968
+ const metadataRefusal = metadataConfigurationRefusal(desiredMetadata);
4969
+ if (metadataRefusal !== void 0 && JSON.stringify(desiredMetadata) !== JSON.stringify(previousMetadata)) {
4970
+ if (!metadataStateBorne) throw new Error(metadataRefusal);
4971
+ this.logger.warn(safeMsg`Bucket ${this.shown(bucketName)}: ${metadataRefusal}; its S3 Metadata configuration was left as it is`);
4972
+ retainPrevious("MetadataConfiguration");
4973
+ } else if (metadataRefusal === void 0) {
4974
+ if (await this.applyMetadataConfigurationDiff(bucketName, desiredMetadata, previousMetadata, metadataStateBorne, refuseUnusable) && context?.desiredFromAwsReadback === true) this.logger.warn(safeMsg`Bucket ${this.shown(bucketName)}: S3 never returns a table's EncryptionConfiguration, so a table this revert turned on took S3's default encryption, whatever the template declares`);
4975
+ }
4623
4976
  return overrides;
4624
4977
  }
4625
4978
  async applyAllSubConfigsForCreate(bucketName, properties, context) {
@@ -4736,16 +5089,34 @@ var S3BucketProvider = class S3BucketProvider {
4736
5089
  this.logger.debug(`${message} Proceeding.`);
4737
5090
  }
4738
5091
  async create(logicalId, resourceType, properties, context) {
4739
- if (this.opMask === void 0) return this.maskedView(createMaskedLogSinks(this.logger, context?.maskSecrets)).create(logicalId, resourceType, properties, context);
5092
+ if (this.opMask === void 0) {
5093
+ const sinks = createMaskedLogSinks(this.logger, context?.maskSecrets);
5094
+ const prefix = properties["BucketNamePrefix"];
5095
+ const derivedName = typeof prefix === "string" && prefix !== "" && bucketNameRefusal(properties) === void 0 ? await this.accountRegionalBucketName(prefix) : void 0;
5096
+ const view = withDerivedNameMasks(this.logger, sinks, [[prefix, derivedName]]);
5097
+ return this.maskedView(view).create(logicalId, resourceType, properties, context);
5098
+ }
4740
5099
  this.logger.debug(`Creating S3 bucket ${displaySafe(logicalId)}`);
4741
5100
  const desiredTags = refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId);
4742
- const explicitBucketName = Boolean(properties["BucketName"]);
4743
- const bucketName = properties["BucketName"] || this.generatedCreateName(resourceType, logicalId, properties);
5101
+ const nameRefusal = bucketNameRefusal(properties);
5102
+ if (nameRefusal !== void 0) {
5103
+ if (context?.replayingState !== true) throw markNonRetryable(new ProvisioningError(`S3 bucket ${displaySafe(logicalId)} ${nameRefusal}; fix the template`, resourceType, logicalId));
5104
+ this.logger.warn(safeMsg`S3 bucket ${displaySafe(logicalId)} ${nameRefusal}; restoring it anyway`);
5105
+ }
5106
+ const metadataRefusal = metadataConfigurationRefusal(properties["MetadataConfiguration"]);
5107
+ if (metadataRefusal !== void 0 && context?.replayingState !== true) throw markNonRetryable(new ProvisioningError(`S3 bucket ${displaySafe(logicalId)}: ${metadataRefusal}; fix the template`, resourceType, logicalId));
5108
+ const declaredPrefix = properties["BucketNamePrefix"];
5109
+ const namePrefix = typeof declaredPrefix === "string" ? declaredPrefix : void 0;
5110
+ const explicitBucketName = Boolean(properties["BucketName"] || namePrefix);
5111
+ const bucketName = (namePrefix ? await this.accountRegionalBucketName(namePrefix) : void 0) || properties["BucketName"] || this.generatedCreateName(resourceType, logicalId, properties);
4744
5112
  let bucketLeftBehind = false;
4745
5113
  let ambiguousWindow;
4746
5114
  let windowSpent = false;
4747
5115
  try {
4748
- const createParams = { Bucket: bucketName };
5116
+ const createParams = {
5117
+ Bucket: bucketName,
5118
+ ...properties["BucketNamespace"] !== void 0 ? { BucketNamespace: properties["BucketNamespace"] } : {}
5119
+ };
4749
5120
  const region = await this.getRegion();
4750
5121
  const canonicalRegion = canonicalizeRegion(region);
4751
5122
  if (canonicalRegion !== "us-east-1") createParams.CreateBucketConfiguration = { LocationConstraint: canonicalRegion };
@@ -4837,12 +5208,28 @@ var S3BucketProvider = class S3BucketProvider {
4837
5208
  } else throw createError;
4838
5209
  }
4839
5210
  let effectiveOverrides;
5211
+ const bucketPredates = !createdNewBucket || adoptedOwnLeftover;
5212
+ const desiredAbac = abacStatusOf(properties);
5213
+ const liveAbacOn = bucketPredates && await this.readAbacStatus(bucketName) === ABAC_ENABLED;
4840
5214
  try {
5215
+ const turnAbacOff = liveAbacOn && properties["AbacStatus"] === ABAC_DISABLED;
5216
+ if (turnAbacOff) await this.applyAbacStatus(bucketName, ABAC_DISABLED);
5217
+ else if (liveAbacOn && properties["AbacStatus"] === void 0) this.logger.warn(safeMsg`Bucket ${this.shown(bucketName)} already existed with ABAC on, which the template does not declare; it stays on, and a later Tags change fails with BadRequest until the template declares AbacStatus`);
5218
+ const tagsThroughControl = liveAbacOn && !turnAbacOff;
4841
5219
  effectiveOverrides = await this.applyConfiguration(bucketName, properties, {
4842
5220
  ...context ? { context } : {},
4843
- ...tagsAppliedOnCreate ? { skipTags: true } : { desiredTags }
5221
+ ...tagsAppliedOnCreate || tagsThroughControl ? { skipTags: true } : { desiredTags }
4844
5222
  });
4845
5223
  for (const [key, value] of await this.applyAllSubConfigsForCreate(bucketName, properties, context)) effectiveOverrides.set(key, value);
5224
+ if (tagsThroughControl && desiredTags.length > 0) await this.replaceAbacBucketTags(bucketName, desiredTags);
5225
+ if (desiredAbac !== ABAC_DISABLED) await this.applyAbacStatus(bucketName, desiredAbac);
5226
+ const metadata = metadataBag(properties["MetadataConfiguration"]);
5227
+ const replaying = context?.replayingState === true;
5228
+ if (metadataRefusal !== void 0) this.logger.warn(safeMsg`Bucket ${this.shown(bucketName)}: ${metadataRefusal}; no S3 Metadata configuration was restored`);
5229
+ else if (metadata !== void 0 && bucketPredates) {
5230
+ const live = await this.readMetadataForDrift(bucketName);
5231
+ await (live === "unread" || live === void 0 ? this.createMetadataConfiguration(bucketName, metadata, true) : this.convergeMetadataConfiguration(bucketName, metadata, live, replaying));
5232
+ } else if (metadata !== void 0) await this.createMetadataConfiguration(bucketName, metadata, replaying);
4846
5233
  } catch (innerError) {
4847
5234
  if (createdNewBucket) try {
4848
5235
  await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
@@ -4860,6 +5247,7 @@ var S3BucketProvider = class S3BucketProvider {
4860
5247
  throw markAuxiliaryFailure(innerError, logicalId);
4861
5248
  }
4862
5249
  const attributes = await this.buildAttributes(bucketName);
5250
+ if (metadataBag(properties["MetadataConfiguration"])) Object.assign(attributes, await this.readMetadataAttributesAfterWrites(bucketName, context));
4863
5251
  this.logger.debug(`Successfully created S3 bucket ${displaySafe(logicalId)}: ${this.shown(bucketName)}`);
4864
5252
  const effectiveProperties = S3BucketProvider.applyEffectiveOverrides(properties, effectiveOverrides);
4865
5253
  return {
@@ -4879,7 +5267,7 @@ var S3BucketProvider = class S3BucketProvider {
4879
5267
  }
4880
5268
  async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
4881
5269
  if (this.opMask === void 0) {
4882
- const sinks = withDerivedNameMasks(this.logger, createMaskedLogSinks(this.logger, context?.maskSecrets), [[previousProperties["BucketName"], physicalId]]);
5270
+ const sinks = withDerivedNameMasks(this.logger, createMaskedLogSinks(this.logger, context?.maskSecrets), [[previousProperties["BucketName"], physicalId], [previousProperties["BucketNamePrefix"], physicalId]]);
4883
5271
  return this.maskedView(sinks).update(logicalId, physicalId, resourceType, properties, previousProperties, context);
4884
5272
  }
4885
5273
  this.logger.debug(`Updating S3 bucket ${displaySafe(logicalId)}: ${this.shown(physicalId)}`);
@@ -4909,9 +5297,14 @@ var S3BucketProvider = class S3BucketProvider {
4909
5297
  skipDiffManaged: true
4910
5298
  });
4911
5299
  for (const [key, value] of await this.applySubConfigDiffs(physicalId, properties, previousProperties, context)) effectiveOverrides.set(key, value);
4912
- await this.applyTagDiff(physicalId, resourceType, logicalId, previousProperties["Tags"], properties["Tags"]);
5300
+ const previousAbac = abacStatusOf(previousProperties);
5301
+ const desiredAbac = abacStatusOf(properties);
5302
+ if (previousAbac !== desiredAbac && desiredAbac === ABAC_DISABLED) await this.applyAbacStatus(physicalId, desiredAbac);
5303
+ await this.applyTagDiff(physicalId, resourceType, logicalId, previousProperties["Tags"], properties["Tags"], previousAbac === ABAC_ENABLED && desiredAbac === ABAC_ENABLED);
5304
+ if (previousAbac !== desiredAbac && desiredAbac !== ABAC_DISABLED) await this.applyAbacStatus(physicalId, desiredAbac);
4913
5305
  await this.warnUnappliedBucketObjectLock(logicalId, physicalId, properties, previousProperties, context);
4914
5306
  const attributes = await this.buildAttributes(physicalId);
5307
+ if (metadataBag(properties["MetadataConfiguration"])) Object.assign(attributes, await this.readMetadataAttributesAfterWrites(physicalId, context));
4915
5308
  this.logger.debug(`Successfully updated S3 bucket ${displaySafe(logicalId)}`);
4916
5309
  const effectiveProperties = S3BucketProvider.applyEffectiveOverrides(properties, effectiveOverrides);
4917
5310
  return {
@@ -4996,7 +5389,7 @@ var S3BucketProvider = class S3BucketProvider {
4996
5389
  }
4997
5390
  throw err;
4998
5391
  }
4999
- const [versioning, encryption, ownership, pab, tags, lifecycle, cors, website, logging, notification, replication, objectLock, accelerate, metrics, analytics, intelligentTier, inventory] = await Promise.all([
5392
+ const [versioning, encryption, ownership, pab, tags, lifecycle, cors, website, logging, notification, replication, objectLock, accelerate, metrics, analytics, intelligentTier, inventory, abac, metadata] = await Promise.all([
5000
5393
  this.readVersioning(physicalId),
5001
5394
  this.readEncryption(physicalId),
5002
5395
  this.readOwnershipControls(physicalId),
@@ -5013,7 +5406,9 @@ var S3BucketProvider = class S3BucketProvider {
5013
5406
  this.readMetricsList(physicalId),
5014
5407
  this.readAnalyticsList(physicalId),
5015
5408
  this.readIntelligentTieringList(physicalId),
5016
- this.readInventoryList(physicalId)
5409
+ this.readInventoryList(physicalId),
5410
+ this.readAbacStatus(physicalId),
5411
+ this.readMetadataForDrift(physicalId)
5017
5412
  ]);
5018
5413
  return {
5019
5414
  BucketName: physicalId,
@@ -5033,9 +5428,23 @@ var S3BucketProvider = class S3BucketProvider {
5033
5428
  MetricsConfigurations: metrics,
5034
5429
  AnalyticsConfigurations: analytics,
5035
5430
  IntelligentTieringConfigurations: intelligentTier,
5036
- InventoryConfigurations: inventory
5431
+ InventoryConfigurations: inventory,
5432
+ ...abac === ABAC_ENABLED || _properties?.["AbacStatus"] !== void 0 ? { AbacStatus: abac ?? _properties?.["AbacStatus"] } : {},
5433
+ ...metadata === "unread" ? _properties?.["MetadataConfiguration"] !== void 0 ? { MetadataConfiguration: _properties["MetadataConfiguration"] } : {} : metadata ? { MetadataConfiguration: metadataConfigurationFromSdk(metadata) } : {}
5037
5434
  };
5038
5435
  }
5436
+ getDriftAbsentMeansDefaultKeys(_resourceType, properties) {
5437
+ return [...abacStatusOf(properties) === ABAC_DISABLED ? ["AbacStatus"] : [], ...properties["MetadataConfiguration"] === void 0 ? ["MetadataConfiguration"] : []];
5438
+ }
5439
+ getDriftUnknownPaths() {
5440
+ return [
5441
+ "BucketNamePrefix",
5442
+ "BucketNamespace",
5443
+ "MetadataConfiguration.JournalTableConfiguration.EncryptionConfiguration",
5444
+ "MetadataConfiguration.InventoryTableConfiguration.EncryptionConfiguration",
5445
+ "MetadataConfiguration.AnnotationTableConfiguration.EncryptionConfiguration"
5446
+ ];
5447
+ }
5039
5448
  async readVersioning(bucket) {
5040
5449
  return { Status: (await this.s3Client.send(new GetBucketVersioningCommand({ Bucket: bucket }))).Status ?? "Suspended" };
5041
5450
  }
@@ -5383,6 +5792,14 @@ var S3BucketProvider = class S3BucketProvider {
5383
5792
  throw err;
5384
5793
  }
5385
5794
  }
5795
+ async readAbacStatus(bucket) {
5796
+ try {
5797
+ return (await this.s3Client.send(new GetBucketAbacCommand({ Bucket: bucket }))).AbacStatus?.Status ?? ABAC_DISABLED;
5798
+ } catch (err) {
5799
+ this.logger.debug(safeMsg`Could not read AbacStatus of ${this.shown(bucket)} (${caughtErrorName(err)})`);
5800
+ return;
5801
+ }
5802
+ }
5386
5803
  async readAccelerate(bucket) {
5387
5804
  return { AccelerationStatus: (await this.s3Client.send(new GetBucketAccelerateConfigurationCommand({ Bucket: bucket }))).Status ?? "Suspended" };
5388
5805
  }
@@ -5562,7 +5979,7 @@ var S3BucketProvider = class S3BucketProvider {
5562
5979
  }
5563
5980
  }
5564
5981
  generatedCreateName(_resourceType, logicalId, properties) {
5565
- if (properties["BucketName"]) return void 0;
5982
+ if (properties["BucketNamePrefix"] || properties["BucketName"]) return void 0;
5566
5983
  return generatedNameFor("AWS::S3::Bucket", logicalId);
5567
5984
  }
5568
5985
  async import(input) {
@@ -9379,13 +9796,17 @@ function toCfnSelfManagedEventSource(selfManagedEventSource) {
9379
9796
  return renameEndpointsKey(selfManagedEventSource, SDK_KAFKA_ENDPOINTS_KEY, CFN_KAFKA_ENDPOINTS_KEY);
9380
9797
  }
9381
9798
  const KAFKA_CONSUMPTION_MODE_KEY = "ConsumptionMode";
9382
- function declaredConsumptionMode(properties) {
9799
+ const KAFKA_DEFAULT_CONSUMPTION_MODE = "Stream";
9800
+ function consumptionModeOf(properties) {
9383
9801
  const config = properties["SelfManagedKafkaEventSourceConfig"];
9384
- if (typeof config !== "object" || config === null || Array.isArray(config)) return void 0;
9385
- return config[KAFKA_CONSUMPTION_MODE_KEY];
9802
+ if (typeof config !== "object" || config === null || Array.isArray(config)) return KAFKA_DEFAULT_CONSUMPTION_MODE;
9803
+ return config[KAFKA_CONSUMPTION_MODE_KEY] ?? KAFKA_DEFAULT_CONSUMPTION_MODE;
9386
9804
  }
9387
- function consumptionModeRefusalMessage(logicalId, mode) {
9388
- return `AWS::Lambda::EventSourceMapping ${logicalId}: SelfManagedKafkaEventSourceConfig.${KAFKA_CONSUMPTION_MODE_KEY} cannot be sent by cdkd yet — the AWS SDK for JavaScript does not model the member, so it would be dropped from the ${mode === "create" ? "CreateEventSourceMapping" : "UpdateEventSourceMapping"} request without an error. Remove ${KAFKA_CONSUMPTION_MODE_KEY} from SelfManagedKafkaEventSourceConfig to deploy the mapping without it.`;
9805
+ function replayableKafkaConfig(properties) {
9806
+ if (consumptionModeOf(properties) !== "Queue") return void 0;
9807
+ if (properties["StartingPosition"] === void 0 && properties["StartingPositionTimestamp"] === void 0 && properties["MaximumBatchingWindowInSeconds"] === void 0) return;
9808
+ const { [KAFKA_CONSUMPTION_MODE_KEY]: _dropped, ...rest } = properties["SelfManagedKafkaEventSourceConfig"];
9809
+ return rest;
9389
9810
  }
9390
9811
  function kafkaConfigForUpdate(desired, previous, options) {
9391
9812
  const asObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v) ? v : void 0;
@@ -9573,11 +9994,6 @@ var LambdaEventSourceMappingProvider = class {
9573
9994
  const desiredTags = refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId, void 0, "Tags", DBPROXY_TAGS_WHAT, DBPROXY_TAG_OPTIONS);
9574
9995
  const functionName = properties["FunctionName"];
9575
9996
  if (!functionName) throw new ProvisioningError(`FunctionName is required for event source mapping ${logicalId}`, resourceType, logicalId);
9576
- if (declaredConsumptionMode(properties) !== void 0) {
9577
- const message = consumptionModeRefusalMessage(logicalId, "create");
9578
- if (context?.replayingState !== true) throw new ProvisioningError(message, resourceType, logicalId);
9579
- log.warn(safeMsg`${message} Proceeding without it: this create replays a cdkd state record.`);
9580
- }
9581
9997
  try {
9582
9998
  const params = { FunctionName: functionName };
9583
9999
  if (properties["EventSourceArn"]) params.EventSourceArn = properties["EventSourceArn"];
@@ -9596,6 +10012,11 @@ var LambdaEventSourceMappingProvider = class {
9596
10012
  if (properties["SourceAccessConfigurations"]) params.SourceAccessConfigurations = properties["SourceAccessConfigurations"];
9597
10013
  if (properties["SelfManagedEventSource"]) params.SelfManagedEventSource = toSdkSelfManagedEventSource(properties["SelfManagedEventSource"]);
9598
10014
  if (properties["SelfManagedKafkaEventSourceConfig"]) params.SelfManagedKafkaEventSourceConfig = properties["SelfManagedKafkaEventSourceConfig"];
10015
+ const replayableKafka = context?.replayingState === true ? replayableKafkaConfig(properties) : void 0;
10016
+ if (replayableKafka !== void 0) {
10017
+ log.warn(safeMsg`AWS::Lambda::EventSourceMapping ${logicalId}: the state record holds ConsumptionMode Queue beside a member Lambda refuses with it, so the mapping it records never ran in Queue mode. Proceeding without ConsumptionMode: this create replays a cdkd state record.`);
10018
+ params.SelfManagedKafkaEventSourceConfig = replayableKafka;
10019
+ }
9599
10020
  if (properties["AmazonManagedKafkaEventSourceConfig"]) params.AmazonManagedKafkaEventSourceConfig = properties["AmazonManagedKafkaEventSourceConfig"];
9600
10021
  if (properties["DocumentDBEventSourceConfig"]) params.DocumentDBEventSourceConfig = properties["DocumentDBEventSourceConfig"];
9601
10022
  if (properties["ScalingConfig"]) params.ScalingConfig = properties["ScalingConfig"];
@@ -9632,7 +10053,11 @@ var LambdaEventSourceMappingProvider = class {
9632
10053
  attributes: {
9633
10054
  Id: uuid,
9634
10055
  EventSourceMappingArn: response.EventSourceMappingArn
9635
- }
10056
+ },
10057
+ ...replayableKafka !== void 0 && { effectiveProperties: {
10058
+ ...properties,
10059
+ SelfManagedKafkaEventSourceConfig: replayableKafka
10060
+ } }
9636
10061
  };
9637
10062
  } catch (error) {
9638
10063
  const cause = error instanceof Error ? error : void 0;
@@ -9666,18 +10091,15 @@ var LambdaEventSourceMappingProvider = class {
9666
10091
  const log = this.operationSinks(context?.maskSecrets, properties, previousProperties);
9667
10092
  refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId, physicalId, "Tags", DBPROXY_TAGS_WHAT, DBPROXY_TAG_OPTIONS);
9668
10093
  const restoring = context?.replayingState === true || context?.desiredFromAwsReadback === true;
9669
- for (const key of ["Queues", "Topics"]) {
9670
- if (JSON.stringify(properties[key]) === JSON.stringify(previousProperties[key])) continue;
9671
- const reason = `${key} cannot be changed on an existing event source mapping (UpdateEventSourceMapping does not take it, and CloudFormation refuses the change too)`;
10094
+ const refuseChange = (reason) => {
9672
10095
  if (!restoring) throw new ResourceUpdateNotSupportedError(resourceType, logicalId, `${reason}; deploy with --replace to delete and recreate the mapping`);
9673
10096
  log.warn(safeMsg`AWS::Lambda::EventSourceMapping ${logicalId}: ${reason}. Proceeding without it: this update restores a recorded or read-back configuration.`);
10097
+ };
10098
+ for (const key of ["Queues", "Topics"]) {
10099
+ if (JSON.stringify(properties[key]) === JSON.stringify(previousProperties[key])) continue;
10100
+ refuseChange(`${key} cannot be changed on an existing event source mapping (UpdateEventSourceMapping does not take it, and CloudFormation refuses the change too)`);
9674
10101
  }
9675
- const desiredMode = declaredConsumptionMode(properties);
9676
- if (desiredMode !== void 0 && JSON.stringify(desiredMode) !== JSON.stringify(declaredConsumptionMode(previousProperties))) {
9677
- const message = consumptionModeRefusalMessage(logicalId, "update");
9678
- if (!restoring) throw new ProvisioningError(message, resourceType, logicalId, physicalId);
9679
- log.warn(safeMsg`${message} Proceeding without it: this update restores a recorded or read-back configuration.`);
9680
- }
10102
+ if (JSON.stringify(consumptionModeOf(properties)) !== JSON.stringify(consumptionModeOf(previousProperties))) refuseChange(`SelfManagedKafkaEventSourceConfig.${KAFKA_CONSUMPTION_MODE_KEY} cannot be changed on an existing event source mapping (UpdateEventSourceMapping refuses it)`);
9681
10103
  try {
9682
10104
  return await this.applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties, log, restoring);
9683
10105
  } catch (error) {
@@ -9905,6 +10327,24 @@ var LambdaEventSourceMappingProvider = class {
9905
10327
  result["Tags"] = tags;
9906
10328
  return result;
9907
10329
  }
10330
+ async canonicalizeDriftPair(_resourceType, baseline, aws, properties) {
10331
+ const key = "SelfManagedKafkaEventSourceConfig";
10332
+ const block = baseline[key];
10333
+ if (typeof block !== "object" || block === null || Array.isArray(block) || KAFKA_CONSUMPTION_MODE_KEY in block || consumptionModeOf(aws) !== KAFKA_DEFAULT_CONSUMPTION_MODE || consumptionModeOf(properties ?? {}) !== KAFKA_DEFAULT_CONSUMPTION_MODE || aws[key]?.[KAFKA_CONSUMPTION_MODE_KEY] === void 0) return {
10334
+ baseline,
10335
+ aws
10336
+ };
10337
+ return {
10338
+ baseline: {
10339
+ ...baseline,
10340
+ [key]: {
10341
+ ...block,
10342
+ [KAFKA_CONSUMPTION_MODE_KEY]: KAFKA_DEFAULT_CONSUMPTION_MODE
10343
+ }
10344
+ },
10345
+ aws
10346
+ };
10347
+ }
9908
10348
  async import(input) {
9909
10349
  if (!input.knownPhysicalId) return null;
9910
10350
  let resp;
@@ -11840,120 +12280,6 @@ async function waitForGoneAfterDelete(opts) {
11840
12280
  }
11841
12281
  }
11842
12282
 
11843
- //#endregion
11844
- //#region src/provisioning/dynamodb-vector-indexes.ts
11845
- function vectorIndexesByName(value) {
11846
- const out = /* @__PURE__ */ new Map();
11847
- if (!Array.isArray(value)) return out;
11848
- for (const entry of value) {
11849
- if (typeof entry !== "object" || entry === null || Array.isArray(entry)) continue;
11850
- const name = entry["IndexName"];
11851
- if (typeof name === "string") out.set(name, entry);
11852
- }
11853
- return out;
11854
- }
11855
- function vectorIndexForSend(entry) {
11856
- const out = {};
11857
- for (const key of [
11858
- "IndexName",
11859
- "VectorAttribute",
11860
- "Projection",
11861
- "DistanceFunction"
11862
- ]) if (entry[key] !== void 0) out[key] = entry[key];
11863
- if (entry["Dimensions"] !== void 0) out["Dimensions"] = coerceCfnInteger(entry["Dimensions"]) ?? entry["Dimensions"];
11864
- if (entry["SearchSchema"] !== void 0) out["SearchSchema"] = entry["SearchSchema"];
11865
- return out;
11866
- }
11867
- function vectorIndexesForCreate(value) {
11868
- if (value === void 0 || value === null) return void 0;
11869
- if (!Array.isArray(value)) return value;
11870
- return value.map((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry) ? vectorIndexForSend(entry) : entry);
11871
- }
11872
- function sortedByJson(list) {
11873
- if (!Array.isArray(list)) return list;
11874
- return [...list].sort((a, b) => {
11875
- const x = JSON.stringify(a) ?? "";
11876
- const y = JSON.stringify(b) ?? "";
11877
- return x < y ? -1 : x > y ? 1 : 0;
11878
- });
11879
- }
11880
- function vectorIndexKey(entry) {
11881
- const e = entry;
11882
- const projection = e["Projection"];
11883
- const normalizedProjection = typeof projection === "object" && projection !== null && !Array.isArray(projection) ? {
11884
- ProjectionType: projection["ProjectionType"],
11885
- NonKeyAttributes: sortedByJson(nonEmpty(projection["NonKeyAttributes"]))
11886
- } : projection;
11887
- const attribute = e["VectorAttribute"];
11888
- return JSON.stringify([
11889
- e["IndexName"],
11890
- typeof attribute === "object" && attribute !== null ? attribute["AttributeName"] : attribute,
11891
- coerceCfnInteger(e["Dimensions"]) ?? e["Dimensions"],
11892
- e["DistanceFunction"],
11893
- normalizedProjection,
11894
- sortedByJson(Array.isArray(e["SearchSchema"]) && e["SearchSchema"].length > 0 ? e["SearchSchema"].map((s) => typeof s === "object" && s !== null ? {
11895
- AttributeName: s["AttributeName"],
11896
- SearchSchemaElementType: s["SearchSchemaElementType"]
11897
- } : s) : nonEmpty(e["SearchSchema"]))
11898
- ]);
11899
- }
11900
- function nonEmpty(value) {
11901
- return Array.isArray(value) && value.length === 0 ? void 0 : value;
11902
- }
11903
- function planVectorIndexUpdates(previous, desired, live) {
11904
- const prevByName = vectorIndexesByName(previous);
11905
- const desiredByName = vectorIndexesByName(desired);
11906
- const liveByName = live === void 0 ? void 0 : new Map(live.filter((d) => typeof d.IndexName === "string").map((d) => [d.IndexName, d]));
11907
- const plan = {
11908
- ops: [],
11909
- changed: [],
11910
- adopted: [],
11911
- alreadyGone: []
11912
- };
11913
- const liveHolds = (name, entry) => {
11914
- const l = liveByName?.get(name);
11915
- return l !== void 0 && l.IndexStatus !== "DELETING" && vectorIndexKey(l) === vectorIndexKey(entry);
11916
- };
11917
- for (const name of prevByName.keys()) {
11918
- if (desiredByName.has(name)) continue;
11919
- const l = liveByName?.get(name);
11920
- if (liveByName !== void 0 && (l === void 0 || l.IndexStatus === "DELETING")) {
11921
- plan.alreadyGone.push(name);
11922
- continue;
11923
- }
11924
- plan.ops.push({ Delete: { IndexName: name } });
11925
- }
11926
- for (const [name, entry] of desiredByName) {
11927
- const before = prevByName.get(name);
11928
- if (before === void 0) {
11929
- const l = liveByName?.get(name);
11930
- if (l === void 0 || l.IndexStatus === "DELETING") plan.ops.push({ Create: vectorIndexForSend(entry) });
11931
- else if (liveHolds(name, entry)) plan.adopted.push(name);
11932
- else plan.changed.push(name);
11933
- continue;
11934
- }
11935
- if (vectorIndexKey(before) === vectorIndexKey(entry)) continue;
11936
- if (!liveHolds(name, entry)) plan.changed.push(name);
11937
- }
11938
- return plan;
11939
- }
11940
- function readbackVectorIndexes(live) {
11941
- if (live === void 0 || live.length === 0) return void 0;
11942
- return live.map((d) => {
11943
- const out = {};
11944
- if (d.IndexName !== void 0) out["IndexName"] = d.IndexName;
11945
- if (d.VectorAttribute !== void 0) out["VectorAttribute"] = d.VectorAttribute;
11946
- if (d.Dimensions !== void 0) out["Dimensions"] = d.Dimensions;
11947
- if (d.DistanceFunction !== void 0) out["DistanceFunction"] = d.DistanceFunction;
11948
- if (d.Projection !== void 0) out["Projection"] = d.Projection;
11949
- if (d.SearchSchema !== void 0 && d.SearchSchema.length > 0) out["SearchSchema"] = d.SearchSchema;
11950
- return out;
11951
- });
11952
- }
11953
- function vectorIndexesSettled(live) {
11954
- return (live ?? []).every((d) => d.IndexStatus === void 0 || d.IndexStatus === "ACTIVE");
11955
- }
11956
-
11957
12283
  //#endregion
11958
12284
  //#region src/provisioning/providers/dynamodb-table-provider.ts
11959
12285
  function isTableName(id) {
@@ -24479,11 +24805,11 @@ var ApiGatewayV2Provider = class ApiGatewayV2Provider {
24479
24805
  const region = await this.getClient().config.region();
24480
24806
  const { partition } = derivePartitionAndUrlSuffix(region);
24481
24807
  const resourceArn = `arn:${partition}:apigateway:${canonicalizeRegion(region)}::${path}`;
24482
- if (change.remove.length > 0) await this.getClient().send(new UntagResourceCommand$13({
24808
+ if (change.remove.length > 0) await this.getClient().send(new UntagResourceCommand$14({
24483
24809
  ResourceArn: resourceArn,
24484
24810
  TagKeys: change.remove
24485
24811
  }));
24486
- if (Object.keys(change.set).length > 0) await this.getClient().send(new TagResourceCommand$13({
24812
+ if (Object.keys(change.set).length > 0) await this.getClient().send(new TagResourceCommand$14({
24487
24813
  ResourceArn: resourceArn,
24488
24814
  Tags: change.set
24489
24815
  }));
@@ -26403,7 +26729,7 @@ var StepFunctionsProvider = class {
26403
26729
  result["EncryptionConfiguration"] = ec;
26404
26730
  }
26405
26731
  try {
26406
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$11({ resourceArn: physicalId }));
26732
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$12({ resourceArn: physicalId }));
26407
26733
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.tags);
26408
26734
  } catch (err) {
26409
26735
  if (!(err instanceof StateMachineDoesNotExist)) throw err;
@@ -26446,14 +26772,14 @@ var StepFunctionsProvider = class {
26446
26772
  }));
26447
26773
  const tagsToRemove = plan.remove;
26448
26774
  if (tagsToRemove.length > 0) {
26449
- await this.getClient().send(new UntagResourceCommand$14({
26775
+ await this.getClient().send(new UntagResourceCommand$15({
26450
26776
  resourceArn: stateMachineArn,
26451
26777
  tagKeys: tagsToRemove
26452
26778
  }));
26453
26779
  this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from SFN state machine ${stateMachineArn}`);
26454
26780
  }
26455
26781
  if (tagsToAdd.length > 0) {
26456
- await this.getClient().send(new TagResourceCommand$14({
26782
+ await this.getClient().send(new TagResourceCommand$15({
26457
26783
  resourceArn: stateMachineArn,
26458
26784
  tags: tagsToAdd
26459
26785
  }));
@@ -27445,14 +27771,14 @@ var ECSProvider = class {
27445
27771
  }));
27446
27772
  const tagsToRemove = plan.remove;
27447
27773
  if (tagsToRemove.length > 0) {
27448
- await this.getClient().send(new UntagResourceCommand$15({
27774
+ await this.getClient().send(new UntagResourceCommand$16({
27449
27775
  resourceArn,
27450
27776
  tagKeys: tagsToRemove
27451
27777
  }));
27452
27778
  log.debug(`Removed ${tagsToRemove.length} tag(s) from ECS resource ${resourceArn}`);
27453
27779
  }
27454
27780
  if (tagsToAdd.length > 0) {
27455
- await this.getClient().send(new TagResourceCommand$15({
27781
+ await this.getClient().send(new TagResourceCommand$16({
27456
27782
  resourceArn,
27457
27783
  tags: tagsToAdd
27458
27784
  }));
@@ -30936,7 +31262,7 @@ async function applyDocDBTagDiff(client, logger, arn, resourceType, logicalId, o
30936
31262
  }
30937
31263
  async function attachDocDBTags(client, logger, result, arn) {
30938
31264
  try {
30939
- const tagsResp = await client.send(new ListTagsForResourceCommand$12({ ResourceName: arn }));
31265
+ const tagsResp = await client.send(new ListTagsForResourceCommand$13({ ResourceName: arn }));
30940
31266
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.TagList);
30941
31267
  } catch (err) {
30942
31268
  logger.debug(safeMsg`DocDB ListTagsForResource(${arn}) failed: ${describeAwsFailure(err).detail}`);
@@ -33315,14 +33641,14 @@ var WAFv2WebACLProvider = class {
33315
33641
  }));
33316
33642
  const tagsToRemove = plan.remove;
33317
33643
  if (tagsToRemove.length > 0) {
33318
- await this.getClient().send(new UntagResourceCommand$16({
33644
+ await this.getClient().send(new UntagResourceCommand$17({
33319
33645
  ResourceARN: arn,
33320
33646
  TagKeys: tagsToRemove
33321
33647
  }));
33322
33648
  this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from WAFv2 WebACL ${arn}`);
33323
33649
  }
33324
33650
  if (tagsToAdd.length > 0) {
33325
- await this.getClient().send(new TagResourceCommand$16({
33651
+ await this.getClient().send(new TagResourceCommand$17({
33326
33652
  ResourceARN: arn,
33327
33653
  Tags: tagsToAdd
33328
33654
  }));
@@ -33361,7 +33687,7 @@ var WAFv2WebACLProvider = class {
33361
33687
  if (webACL.ApplicationConfig) result["ApplicationConfig"] = webACL.ApplicationConfig;
33362
33688
  if (webACL.MonetizationConfig) result["MonetizationConfig"] = webACL.MonetizationConfig;
33363
33689
  try {
33364
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$13({ ResourceARN: physicalId }));
33690
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceARN: physicalId }));
33365
33691
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.TagInfoForResource?.TagList);
33366
33692
  } catch (err) {
33367
33693
  this.logger.debug(`WAFv2 ListTagsForResource(${physicalId}) failed: ${describeAwsFailure(err).detail}`);
@@ -33423,6 +33749,7 @@ function userPoolDeletionProtectionUpdate(physicalId, pool, value, opts = {}) {
33423
33749
  if (acr === void 0) delete input.AcrConfiguration;
33424
33750
  else input.AcrConfiguration = acr;
33425
33751
  if (echoesDeveloperEmail(pool) && opts.withoutDeveloperEmail !== true) input.EmailConfiguration = pool.EmailConfiguration;
33752
+ if (echoesCustomerManagedKey(pool)) input.KeyConfiguration = pool.KeyConfiguration;
33426
33753
  input.DeletionProtection = value;
33427
33754
  return input;
33428
33755
  }
@@ -33448,6 +33775,19 @@ function reportKind(record) {
33448
33775
  function echoesDeveloperEmail(pool) {
33449
33776
  return pool.EmailConfiguration?.EmailSendingAccount === "DEVELOPER";
33450
33777
  }
33778
+ function echoesCustomerManagedKey(pool) {
33779
+ return pool.KeyConfiguration?.KeyType === "CUSTOMER_MANAGED_KEY";
33780
+ }
33781
+ function bareFlipResets(pool) {
33782
+ const reset = [
33783
+ "self sign-up",
33784
+ "Lambda triggers",
33785
+ "advanced security"
33786
+ ];
33787
+ if (echoesDeveloperEmail(pool)) reset.push("SES email configuration");
33788
+ if (echoesCustomerManagedKey(pool)) reset.push("customer-managed key");
33789
+ return `${reset.slice(0, -1).join(", ")} and ${reset[reset.length - 1]}`;
33790
+ }
33451
33791
  const REFUSED_ECHO_ERRORS = /* @__PURE__ */ new Set([
33452
33792
  "InvalidParameterException",
33453
33793
  "InvalidSmsRoleAccessPolicyException",
@@ -33530,12 +33870,13 @@ const KEPT_ON_REMOVAL_MEMBERS = {
33530
33870
  AccountRecoverySetting: void 0,
33531
33871
  SmsConfiguration: void 0,
33532
33872
  UserPoolTier: "ESSENTIALS",
33533
- DeletionProtection: "INACTIVE"
33873
+ DeletionProtection: "INACTIVE",
33874
+ IssuerConfiguration: { Type: "ORIGINAL" }
33534
33875
  };
33535
33876
  function declaresMember(value, unset) {
33536
33877
  if (value === void 0 || value === null || value === "") return false;
33537
33878
  if (isEmptyObjectPlaceholder(value)) return false;
33538
- return unset === void 0 || value !== unset;
33879
+ return unset === void 0 || !isDeepStrictEqual(value, unset);
33539
33880
  }
33540
33881
  function sendsKeptMember(member, value) {
33541
33882
  if (!value) return false;
@@ -33740,6 +34081,8 @@ var CognitoUserPoolProvider = class {
33740
34081
  "SmsAuthenticationMessage",
33741
34082
  "SmsVerificationMessage",
33742
34083
  "UserPoolTier",
34084
+ "KeyConfiguration",
34085
+ "IssuerConfiguration",
33743
34086
  "EnabledMfas",
33744
34087
  "EmailAuthenticationMessage",
33745
34088
  "EmailAuthenticationSubject",
@@ -33821,6 +34164,8 @@ var CognitoUserPoolProvider = class {
33821
34164
  if (properties["SmsAuthenticationMessage"]) createParams.SmsAuthenticationMessage = properties["SmsAuthenticationMessage"];
33822
34165
  if (properties["SmsVerificationMessage"]) createParams.SmsVerificationMessage = properties["SmsVerificationMessage"];
33823
34166
  if (properties["UserPoolTier"]) createParams.UserPoolTier = properties["UserPoolTier"];
34167
+ if (properties["KeyConfiguration"]) createParams.KeyConfiguration = properties["KeyConfiguration"];
34168
+ if (properties["IssuerConfiguration"]) createParams.IssuerConfiguration = properties["IssuerConfiguration"];
33824
34169
  const orphanWindow = createUserPoolLatch.take(logicalId);
33825
34170
  if (orphanWindow !== void 0) await this.reportPossibleOrphanPools(logicalId, poolName, orphanWindow, createMaskedLogSinks(this.logger, context?.maskSecrets));
33826
34171
  let created;
@@ -34081,6 +34426,8 @@ var CognitoUserPoolProvider = class {
34081
34426
  if (properties["SmsAuthenticationMessage"] !== void 0) updateParams.SmsAuthenticationMessage = properties["SmsAuthenticationMessage"];
34082
34427
  if (properties["SmsVerificationMessage"] !== void 0) updateParams.SmsVerificationMessage = properties["SmsVerificationMessage"];
34083
34428
  if (properties["UserPoolTier"]) updateParams.UserPoolTier = properties["UserPoolTier"];
34429
+ if (properties["KeyConfiguration"]) updateParams.KeyConfiguration = properties["KeyConfiguration"];
34430
+ if (properties["IssuerConfiguration"]) updateParams.IssuerConfiguration = properties["IssuerConfiguration"];
34084
34431
  const mfaOptions = {
34085
34432
  ...liveMfa?.value !== void 0 ? { liveMfaConfiguration: liveMfa.value } : {},
34086
34433
  ...liveMfa?.failed === true ? { liveReadFailed: true } : {},
@@ -34140,7 +34487,7 @@ var CognitoUserPoolProvider = class {
34140
34487
  this.logger.warn(safeMsg`Cognito User Pool ${logicalId} (${physicalId}): the template no longer declares ` + safeMsg`${removed.length} UserPoolTags key(s), but DescribeUserPool returned no ARN to ` + safeMsg`untag them with, so they stay on the pool. Remove them with ` + safeMsg`aws cognito-idp untag-resource.`);
34141
34488
  return;
34142
34489
  }
34143
- await this.getClient().send(new UntagResourceCommand$17({
34490
+ await this.getClient().send(new UntagResourceCommand$18({
34144
34491
  ResourceArn: poolArn,
34145
34492
  TagKeys: removed
34146
34493
  }));
@@ -34188,7 +34535,7 @@ var CognitoUserPoolProvider = class {
34188
34535
  before: "aws cognito-idp update-user-pool --user-pool-id",
34189
34536
  identifier: physicalId,
34190
34537
  after: "--deletion-protection INACTIVE",
34191
- caveat: "Note UpdateUserPool resets some members a call omits (self sign-up, Lambda triggers, advanced security and AutoVerifiedAttributes among them), so send your complete pool configuration alongside that flag rather than the flag alone."
34538
+ caveat: "Note UpdateUserPool resets some members a call omits (self sign-up, Lambda triggers, advanced security, AutoVerifiedAttributes and a customer-managed KeyConfiguration among them), so send your complete pool configuration alongside that flag rather than the flag alone."
34192
34539
  }
34193
34540
  }) : `AWS::Cognito::UserPool is a stateful type, so re-run with ${replaceFlags} to recreate it (this deletes all users in the pool).`;
34194
34541
  }
@@ -34213,16 +34560,16 @@ var CognitoUserPoolProvider = class {
34213
34560
  try {
34214
34561
  pool = (await this.getClient().send(new DescribeUserPoolCommand({ UserPoolId: physicalId }))).UserPool;
34215
34562
  } catch (readError) {
34216
- if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
34563
+ if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
34217
34564
  throw readError;
34218
34565
  }
34219
34566
  if (!pool) {
34220
- if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
34567
+ if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
34221
34568
  throw new Error(`DescribeUserPool returned no pool for ${physicalId}`);
34222
34569
  }
34223
34570
  if (bareFlip && pool.DeletionProtection !== "ACTIVE") bareFlip.ambiguous = false;
34224
34571
  const resetConfirmed = bareFlip !== void 0 && !bareFlip.ambiguous;
34225
- if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
34572
+ if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
34226
34573
  if (flipRecord && this.emailOmittedFlips.has(flipRecord) && !echoesDeveloperEmail(pool) && !(bareFlip && echoesDeveloperEmail(bareFlip.pool))) this.logger.error(safeMsg`Cognito User Pool ${physicalId} is LIVE with its SES email configuration reset: ` + safeMsg`--remove-protection turned DeletionProtection off with an UpdateUserPool that left ` + safeMsg`out its DEVELOPER EmailConfiguration (sending it was refused), and the delete then ` + safeMsg`failed. The pool's email configuration was ${EMAIL_RESET_CLAUSE}`);
34227
34574
  const bareLicensed = resetConfirmed && bareFlip.echoedSince !== true;
34228
34575
  const readOn = pool.DeletionProtection === "ACTIVE";
@@ -34255,7 +34602,7 @@ var CognitoUserPoolProvider = class {
34255
34602
  }
34256
34603
  });
34257
34604
  }
34258
- reportSettingsResetByBareFlip(physicalId, before, kind) {
34605
+ reportSettingsResetByBareFlip(physicalId, before, kind, mask) {
34259
34606
  const held = [];
34260
34607
  const adminOnly = before.AdminCreateUserConfig?.AllowAdminCreateUserOnly;
34261
34608
  if (adminOnly !== void 0) held.push(`AllowAdminCreateUserOnly=${String(adminOnly)}`);
@@ -34269,10 +34616,11 @@ var CognitoUserPoolProvider = class {
34269
34616
  const mode = before.UserPoolAddOns?.AdvancedSecurityMode;
34270
34617
  if (mode) held.push(`AdvancedSecurityMode=${mode}`);
34271
34618
  if (echoesDeveloperEmail(before)) held.push("EmailConfiguration.EmailSendingAccount=DEVELOPER (SES)");
34272
- const heldText = held.length > 0 ? held.join(", ") : "none of these settings";
34273
- const what = echoesDeveloperEmail(before) ? "self sign-up, Lambda triggers, advanced security and SES email configuration" : "self sign-up, Lambda triggers and advanced security";
34619
+ if (echoesCustomerManagedKey(before)) held.push(`KeyConfiguration.KmsKeyArn=${String(before.KeyConfiguration?.KmsKeyArn)}`);
34620
+ const heldText = held.length > 0 ? held.map((entry) => mask(entry)).join(", ") : "none of these settings";
34621
+ const what = bareFlipResets(before);
34274
34622
  const state = kind === "unclear" ? safeMsg`is LIVE and its ${what} MAY have been reset: ` + safeMsg`--remove-protection sent UpdateUserPool with DeletionProtection alone (the pool's own ` + safeMsg`configuration was refused) and got no clear answer, and the delete then failed. Check it ` + safeMsg`with aws cognito-idp describe-user-pool.` : kind === "earlier" ? safeMsg`is LIVE; its ${what} were reset by an ` + safeMsg`earlier UpdateUserPool that --remove-protection sent with DeletionProtection alone (the ` + safeMsg`pool's own configuration was refused); they may have been restored since. Check it with ` + safeMsg`aws cognito-idp describe-user-pool.` : safeMsg`is LIVE with its ${what} reset: ` + safeMsg`--remove-protection had to turn DeletionProtection off with UpdateUserPool alone (the ` + safeMsg`pool's own configuration was refused), and the delete then failed.`;
34275
- this.logger.error(safeMsg`Cognito User Pool ${physicalId} ` + state + safeMsg` Before that write the pool held: ${heldText}. Put them back with ` + safeMsg`aws cognito-idp update-user-pool, sending the pool's complete configuration -- a ` + safeMsg`cdkd deploy will NOT restore them, because its recorded properties still match the template.`);
34623
+ this.logger.error(mask(safeMsg`Cognito User Pool ${physicalId} ` + state + safeMsg` Before that write the pool held: ${heldText}. Put them back with ` + safeMsg`aws cognito-idp update-user-pool, sending the pool's complete configuration -- a ` + safeMsg`cdkd deploy will NOT restore them, because its recorded properties still match the template.`));
34276
34624
  }
34277
34625
  async deleteOnce(logicalId, physicalId, resourceType, context, flip) {
34278
34626
  this.logger.debug(`Deleting Cognito User Pool ${logicalId}: ${physicalId}`);
@@ -34374,7 +34722,7 @@ var CognitoUserPoolProvider = class {
34374
34722
  if (observedOn && isAmbiguousWriteFailure(echoError)) flip.flippedOffByThisRun = true;
34375
34723
  if (isTransientCognitoFailure(echoError)) throw echoError;
34376
34724
  if (!isRefusedEcho(echoError)) {
34377
- this.warnGuardLeftOn(physicalId, mask, echoError);
34725
+ this.warnGuardLeftOn(physicalId, pool, mask, echoError);
34378
34726
  throw echoError;
34379
34727
  }
34380
34728
  try {
@@ -34392,10 +34740,10 @@ var CognitoUserPoolProvider = class {
34392
34740
  });
34393
34741
  }
34394
34742
  if (isTransientCognitoFailure(bareError)) {
34395
- if (isAmbiguousWriteFailure(bareError)) this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool with DeletionProtection alone ` + safeMsg`(the pool's own configuration was refused) answered ${mask(describeAwsFailure(bareError).summary)}; ` + safeMsg`if that write landed, the pool's self sign-up, Lambda triggers and advanced ` + safeMsg`security were reset. Retrying the delete.`);
34743
+ if (isAmbiguousWriteFailure(bareError)) this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool with DeletionProtection alone ` + safeMsg`(the pool's own configuration was refused) answered ${mask(describeAwsFailure(bareError).summary)}; ` + safeMsg`if that write landed, the pool's ${bareFlipResets(pool)} were reset. Retrying the delete.`);
34396
34744
  throw bareError;
34397
34745
  }
34398
- this.warnGuardLeftOn(physicalId, mask, bareError, echoError);
34746
+ this.warnGuardLeftOn(physicalId, pool, mask, bareError, echoError);
34399
34747
  throw bareError;
34400
34748
  }
34401
34749
  const kept = this.preFlipPools.get(flip);
@@ -34408,16 +34756,16 @@ var CognitoUserPoolProvider = class {
34408
34756
  kept.echoedSince = false;
34409
34757
  }
34410
34758
  this.logger.debug(mask(safeMsg`UpdateUserPool refused the echoed configuration of ${mask(physicalId)}: ${mask(describeAwsFailure(echoError).detail)}`));
34411
- this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool refused the pool's own configuration ` + safeMsg`echoed back (${mask(describeAwsFailure(echoError).summary)}), so DeletionProtection was ` + safeMsg`turned off alone. That write resets the settings it omits -- self sign-up, Lambda ` + safeMsg`triggers and advanced security among them -- which stays that way if the delete fails.`);
34759
+ this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool refused the pool's own configuration ` + safeMsg`echoed back (${mask(describeAwsFailure(echoError).summary)}), so DeletionProtection was ` + safeMsg`turned off alone. That write resets the settings it omits -- ${bareFlipResets(pool)} ` + safeMsg`among them -- which stays that way if the delete fails.`);
34412
34760
  }
34413
34761
  }
34414
- warnGuardLeftOn(physicalId, mask, error, echoError) {
34762
+ warnGuardLeftOn(physicalId, pool, mask, error, echoError) {
34415
34763
  const name = typeof error === "object" && error !== null ? safeStringify(error.name) : "";
34416
34764
  const accessHint = /AccessDenied|NotAuthorized|Unauthorized/.test(name) ? " The caller needs cognito-idp:UpdateUserPool." : "";
34417
34765
  const echoClause = echoError === void 0 ? "" : safeMsg`; the pool's own settings sent back were refused first (${mask(describeAwsFailure(echoError).summary)})`;
34418
34766
  this.logger.debug(mask(safeMsg`UpdateUserPool did not turn DeletionProtection off on ${mask(physicalId)}: ${mask(describeAwsFailure(error).detail)}`));
34419
34767
  const refused = error instanceof Error && isAwsAuthoredFailure(error);
34420
- this.logger.warn(refused ? safeMsg`Cognito User Pool ${physicalId}: DeletionProtection was left on, because UpdateUserPool ` + safeMsg`refused to turn it off (${mask(describeAwsFailure(error).summary)})` + echoClause + safeMsg`. The delete will be refused while it is on.${accessHint}` : safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool failed without an answer from AWS ` + safeMsg`(${mask(describeAwsFailure(error).summary)})` + echoClause + (echoError === void 0 ? typeof error === "object" && error !== null && sentWithoutEmail.has(error) ? safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset, except the SES EmailConfiguration, which that write omitted: if it ` + safeMsg`landed, the pool's email configuration was ${EMAIL_RESET_BEFORE_DELETE_CLAUSE}` : safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset.` : safeMsg`, so whether DeletionProtection was turned off ALONE is unknown; if it was, the ` + safeMsg`pool's self sign-up, Lambda triggers and advanced security were reset.`) + safeMsg` If the delete then fails, cdkd turns the guard back on. Check the pool with ` + safeMsg`aws cognito-idp describe-user-pool.`);
34768
+ this.logger.warn(refused ? safeMsg`Cognito User Pool ${physicalId}: DeletionProtection was left on, because UpdateUserPool ` + safeMsg`refused to turn it off (${mask(describeAwsFailure(error).summary)})` + echoClause + safeMsg`. The delete will be refused while it is on.${accessHint}` : safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool failed without an answer from AWS ` + safeMsg`(${mask(describeAwsFailure(error).summary)})` + echoClause + (echoError === void 0 ? typeof error === "object" && error !== null && sentWithoutEmail.has(error) ? safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset, except the SES EmailConfiguration, which that write omitted: if it ` + safeMsg`landed, the pool's email configuration was ${EMAIL_RESET_BEFORE_DELETE_CLAUSE}` : safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset.` : safeMsg`, so whether DeletionProtection was turned off ALONE is unknown; if it was, the ` + safeMsg`pool's ${bareFlipResets(pool)} were reset.`) + safeMsg` If the delete then fails, cdkd turns the guard back on. Check the pool with ` + safeMsg`aws cognito-idp describe-user-pool.`);
34421
34769
  }
34422
34770
  async readCurrentState(physicalId, _logicalId, resourceType) {
34423
34771
  if (resourceType !== "AWS::Cognito::UserPool") return void 0;
@@ -34459,6 +34807,8 @@ var CognitoUserPoolProvider = class {
34459
34807
  }
34460
34808
  result["UserPoolTags"] = userTags;
34461
34809
  result["UserPoolTier"] = pool.UserPoolTier ?? "ESSENTIALS";
34810
+ if (pool.KeyConfiguration) result["KeyConfiguration"] = pool.KeyConfiguration;
34811
+ if (pool.IssuerConfiguration) result["IssuerConfiguration"] = pool.IssuerConfiguration;
34462
34812
  try {
34463
34813
  const mfa = await this.getClient().send(new GetUserPoolMfaConfigCommand({ UserPoolId: physicalId }));
34464
34814
  const enabledMfas = [];
@@ -35730,11 +36080,11 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
35730
36080
  if (hasTagChange) {
35731
36081
  const arn = knownArn ?? (await client.send(new GetServiceCommand({ Id: physicalId }))).Service?.Arn;
35732
36082
  if (!arn) throw new ProvisioningError(safeMsg`Could not resolve the ARN of service discovery service ${logicalId}; its Tags were not updated`, resourceType, logicalId, physicalId);
35733
- if (tagPlan.remove.length > 0) await client.send(new UntagResourceCommand$18({
36083
+ if (tagPlan.remove.length > 0) await client.send(new UntagResourceCommand$19({
35734
36084
  ResourceARN: arn,
35735
36085
  TagKeys: tagPlan.remove
35736
36086
  }));
35737
- if (tagPlan.set.size > 0) await client.send(new TagResourceCommand$17({
36087
+ if (tagPlan.set.size > 0) await client.send(new TagResourceCommand$18({
35738
36088
  ResourceARN: arn,
35739
36089
  Tags: [...tagPlan.set].map(([Key, Value]) => ({
35740
36090
  Key,
@@ -35850,11 +36200,11 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
35850
36200
  const hasAdds = tagsToAdd.length > 0;
35851
36201
  if (removedKeys.length === 0 && !hasAdds) return;
35852
36202
  const arn = await this.resolveNamespaceArn(physicalId);
35853
- if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$18({
36203
+ if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$19({
35854
36204
  ResourceARN: arn,
35855
36205
  TagKeys: removedKeys
35856
36206
  }));
35857
- if (hasAdds) await this.getClient().send(new TagResourceCommand$17({
36207
+ if (hasAdds) await this.getClient().send(new TagResourceCommand$18({
35858
36208
  ResourceARN: arn,
35859
36209
  Tags: tagsToAdd
35860
36210
  }));
@@ -36027,7 +36377,7 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
36027
36377
  }
36028
36378
  async attachTags(result, arn) {
36029
36379
  try {
36030
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceARN: arn }));
36380
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$15({ ResourceARN: arn }));
36031
36381
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.Tags);
36032
36382
  } catch (err) {
36033
36383
  this.logger.debug(`ServiceDiscovery ListTagsForResource(${arn}) failed: ${describeAwsFailure(err).detail}`);
@@ -36619,7 +36969,7 @@ var AppSyncProvider = class {
36619
36969
  const tagKeysToRemove = plan.remove;
36620
36970
  const tagsToAdd = Object.fromEntries(plan.set);
36621
36971
  if (tagKeysToRemove.length > 0) try {
36622
- await this.getClient().send(new UntagResourceCommand$19({
36972
+ await this.getClient().send(new UntagResourceCommand$20({
36623
36973
  resourceArn: arn,
36624
36974
  tagKeys: tagKeysToRemove
36625
36975
  }));
@@ -36627,7 +36977,7 @@ var AppSyncProvider = class {
36627
36977
  throw this.wrapUpdateError(error, resourceType, logicalId, apiId, "GraphqlApi (untag)", mask);
36628
36978
  }
36629
36979
  if (Object.keys(tagsToAdd).length > 0) try {
36630
- await this.getClient().send(new TagResourceCommand$18({
36980
+ await this.getClient().send(new TagResourceCommand$19({
36631
36981
  resourceArn: arn,
36632
36982
  tags: tagsToAdd
36633
36983
  }));
@@ -39322,11 +39672,11 @@ async function applyGlueTagDiff(client, resourceArn, recorded, desired, resource
39322
39672
  if (toSet.size === 0 && plan.remove.length === 0) return;
39323
39673
  unsettled.beforeWrite();
39324
39674
  const arn = await resourceArn();
39325
- if (toSet.size > 0) await client.send(new TagResourceCommand$19({
39675
+ if (toSet.size > 0) await client.send(new TagResourceCommand$20({
39326
39676
  ResourceArn: arn,
39327
39677
  TagsToAdd: Object.fromEntries(toSet)
39328
39678
  }));
39329
- if (plan.remove.length > 0) await client.send(new UntagResourceCommand$20({
39679
+ if (plan.remove.length > 0) await client.send(new UntagResourceCommand$21({
39330
39680
  ResourceArn: arn,
39331
39681
  TagsToRemove: plan.remove
39332
39682
  }));
@@ -41108,7 +41458,7 @@ var BudgetsBudgetProvider = class {
41108
41458
  const newTags = this.toSdkResourceTags(next.ResourceTags);
41109
41459
  if (prevTags.kind === "list") await this.reconcileResourceTags(accountId, physicalId, this.toSdkResourceTags(removableRecorded("ResourceTags", prevTags.items)), newTags);
41110
41460
  else {
41111
- if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$20({
41461
+ if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$21({
41112
41462
  ResourceARN: await this.budgetArn(accountId, physicalId),
41113
41463
  ResourceTags: newTags
41114
41464
  }));
@@ -41252,11 +41602,11 @@ var BudgetsBudgetProvider = class {
41252
41602
  const removedKeys = oldTags.map((t) => t.Key).filter((k) => {
41253
41603
  return typeof k === "string" && !newKeys.has(k);
41254
41604
  });
41255
- if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$21({
41605
+ if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$22({
41256
41606
  ResourceARN: arn,
41257
41607
  ResourceTagKeys: removedKeys
41258
41608
  }));
41259
- if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$20({
41609
+ if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$21({
41260
41610
  ResourceARN: arn,
41261
41611
  ResourceTags: newTags
41262
41612
  }));
@@ -41336,7 +41686,7 @@ var BudgetsBudgetProvider = class {
41336
41686
  }));
41337
41687
  let tags;
41338
41688
  try {
41339
- tags = await client.send(new ListTagsForResourceCommand$15({ ResourceARN: await this.budgetArn(accountId, physicalId) }));
41689
+ tags = await client.send(new ListTagsForResourceCommand$16({ ResourceARN: await this.budgetArn(accountId, physicalId) }));
41340
41690
  } catch (error) {
41341
41691
  if (error instanceof NotFoundException$5 && await describe() === RESOURCE_NOT_FOUND) return RESOURCE_NOT_FOUND;
41342
41692
  throw error;
@@ -42314,7 +42664,7 @@ var KinesisStreamConsumerProvider = class {
42314
42664
  if (desc.ConsumerName !== void 0) result["ConsumerName"] = desc.ConsumerName;
42315
42665
  if (desc.StreamARN !== void 0) result["StreamARN"] = desc.StreamARN;
42316
42666
  try {
42317
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$16({ ResourceARN: physicalId }));
42667
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$17({ ResourceARN: physicalId }));
42318
42668
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.Tags);
42319
42669
  } catch (err) {
42320
42670
  if (err instanceof ResourceNotFoundException$12) return RESOURCE_NOT_FOUND;
@@ -42331,14 +42681,14 @@ var KinesisStreamConsumerProvider = class {
42331
42681
  const tagsToAdd = Object.fromEntries(plan.set);
42332
42682
  const tagsToRemove = plan.remove;
42333
42683
  if (tagsToRemove.length > 0) {
42334
- await this.getClient().send(new UntagResourceCommand$22({
42684
+ await this.getClient().send(new UntagResourceCommand$23({
42335
42685
  ResourceARN: consumerArn,
42336
42686
  TagKeys: tagsToRemove
42337
42687
  }));
42338
42688
  this.logger.debug(mask(`Removed ${tagsToRemove.length} tag(s) from Kinesis stream consumer ${consumerArn}`));
42339
42689
  }
42340
42690
  if (Object.keys(tagsToAdd).length > 0) {
42341
- await this.getClient().send(new TagResourceCommand$21({
42691
+ await this.getClient().send(new TagResourceCommand$22({
42342
42692
  ResourceARN: consumerArn,
42343
42693
  Tags: tagsToAdd
42344
42694
  }));
@@ -43145,11 +43495,11 @@ var PipesPipeProvider = class {
43145
43495
  settled ??= await this.describe(physicalId);
43146
43496
  const arn = settled.Arn;
43147
43497
  if (!arn) throw new Error("DescribePipe returned no Arn, which tagging needs");
43148
- if (plan.remove.length > 0) await this.getClient().send(new UntagResourceCommand$23({
43498
+ if (plan.remove.length > 0) await this.getClient().send(new UntagResourceCommand$24({
43149
43499
  resourceArn: arn,
43150
43500
  tagKeys: plan.remove
43151
43501
  }));
43152
- if (plan.set.size > 0) await this.getClient().send(new TagResourceCommand$22({
43502
+ if (plan.set.size > 0) await this.getClient().send(new TagResourceCommand$23({
43153
43503
  resourceArn: arn,
43154
43504
  tags: Object.fromEntries(plan.set)
43155
43505
  }));
@@ -43576,11 +43926,11 @@ var EFSProvider = class {
43576
43926
  const plan = planTagDiff(recorded, desired);
43577
43927
  const warning = tagPlanWarning(plan, resourceType, logicalId);
43578
43928
  if (warning !== void 0) log.warn(warning);
43579
- if (plan.remove.length > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new UntagResourceCommand$24({
43929
+ if (plan.remove.length > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new UntagResourceCommand$25({
43580
43930
  ResourceId: resourceId,
43581
43931
  TagKeys: plan.remove
43582
43932
  })), `UntagResource ${resourceId}`, log);
43583
- if (plan.set.size > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new TagResourceCommand$23({
43933
+ if (plan.set.size > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new TagResourceCommand$24({
43584
43934
  ResourceId: resourceId,
43585
43935
  Tags: [...plan.set].map(([Key, Value]) => ({
43586
43936
  Key,
@@ -44461,7 +44811,7 @@ const cfnKeepsOnRemoval = (name, shape, removed) => {
44461
44811
  if (narrow) return narrow(shape, removed);
44462
44812
  return !cfnRefusesRemoval(name, shape) && !shape.storageTypes.includes("INTELLIGENT_TIERING") && (CFN_KEEPS_ON_REMOVAL.has(name) || typeof shape.fileSystemType === "string" && CFN_KEEPS_TOP_LEVEL_ON_REMOVAL.get(shape.fileSystemType)?.has(name) === true);
44463
44813
  };
44464
- const leftInPlaceWarning$2 = (logicalId, names, caller, shape) => {
44814
+ const leftInPlaceWarning$3 = (logicalId, names, caller, shape) => {
44465
44815
  const one = names.length === 1;
44466
44816
  const subject = one ? "property" : "properties";
44467
44817
  const verb = one ? "is" : "are";
@@ -44825,7 +45175,7 @@ var FSxFileSystemProvider = class {
44825
45175
  const leftInPlaceNames = [...TOP_LEVEL_LEFT_IN_PLACE_PROPS.filter((key) => properties[key] === void 0 && previousProperties[key] !== void 0), ...leftInPlace.map((key) => `${variantConfigKey}.${key}`)];
44826
45176
  const warnLeftInPlace = () => {
44827
45177
  if (leftInPlaceNames.length === 0 || context?.desiredFromAwsReadback) return;
44828
- this.logger.warn(leftInPlaceWarning$2(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy", {
45178
+ this.logger.warn(leftInPlaceWarning$3(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy", {
44829
45179
  fileSystemType: properties["FileSystemType"] ?? previousProperties["FileSystemType"],
44830
45180
  storageTypes: [previousProperties["StorageType"], properties["StorageType"]],
44831
45181
  deploymentTypes: [previousProperties, properties].map((side) => variantConfigKey ? side[variantConfigKey]?.["DeploymentType"] : void 0),
@@ -45168,11 +45518,11 @@ var FSxFileSystemProvider = class {
45168
45518
  Value
45169
45519
  }));
45170
45520
  const toRemove = plan.remove;
45171
- if (toSet.length > 0) await this.getClient().send(new TagResourceCommand$24({
45521
+ if (toSet.length > 0) await this.getClient().send(new TagResourceCommand$25({
45172
45522
  ResourceARN: arn,
45173
45523
  Tags: toSet
45174
45524
  }));
45175
- if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$25({
45525
+ if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$26({
45176
45526
  ResourceARN: arn,
45177
45527
  TagKeys: toRemove
45178
45528
  }));
@@ -45981,7 +46331,7 @@ const toNumber$1 = (v) => {
45981
46331
  };
45982
46332
  const jsonEqual$1 = (a, b) => JSON.stringify(a) === JSON.stringify(b);
45983
46333
  const LEFT_IN_PLACE_ON_REMOVAL$1 = ["ResizeSpecifications", "InstanceTypeConfigs"];
45984
- const leftInPlaceWarning$1 = (logicalId, names, caller) => {
46334
+ const leftInPlaceWarning$2 = (logicalId, names, caller) => {
45985
46335
  const one = names.length === 1;
45986
46336
  const subject = one ? "property" : "properties";
45987
46337
  const verb = one ? "is" : "are";
@@ -46170,7 +46520,7 @@ var EMRInstanceFleetConfigProvider = class {
46170
46520
  const leftInPlaceNames = LEFT_IN_PLACE_ON_REMOVAL$1.filter((key) => removed !== void 0 ? removed.has(key) : properties[key] === void 0 && previousProperties[key] !== void 0);
46171
46521
  const warnLeftInPlace = () => {
46172
46522
  if (leftInPlaceNames.length === 0 || context?.desiredFromAwsReadback) return;
46173
- this.logger.warn(leftInPlaceWarning$1(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
46523
+ this.logger.warn(leftInPlaceWarning$2(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
46174
46524
  };
46175
46525
  const leftInPlace = new Set(LEFT_IN_PLACE_ON_REMOVAL$1);
46176
46526
  if (![...MUTABLE].some((k) => changed(k) && !(leftInPlace.has(k) && properties[k] === void 0))) {
@@ -46331,7 +46681,7 @@ const MUTABLE_TOP_LEVEL_PROPS = /* @__PURE__ */ new Set([
46331
46681
  "AutoTerminationPolicy"
46332
46682
  ]);
46333
46683
  const LEFT_IN_PLACE_ON_REMOVAL = ["StepConcurrencyLevel"];
46334
- const leftInPlaceWarning = (logicalId, names, caller) => {
46684
+ const leftInPlaceWarning$1 = (logicalId, names, caller) => {
46335
46685
  const one = names.length === 1;
46336
46686
  const subject = one ? "property" : "properties";
46337
46687
  const verb = one ? "is" : "are";
@@ -46892,7 +47242,7 @@ var EMRClusterProvider = class {
46892
47242
  const leftInPlaceNames = LEFT_IN_PLACE_ON_REMOVAL.filter((key) => removed !== void 0 ? removed.has(key) : properties[key] === void 0 && previousProperties[key] !== void 0);
46893
47243
  const warnLeftInPlace = () => {
46894
47244
  if (leftInPlaceNames.length === 0 || context?.desiredFromAwsReadback) return;
46895
- this.logger.warn(leftInPlaceWarning(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
47245
+ this.logger.warn(leftInPlaceWarning$1(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
46896
47246
  };
46897
47247
  const visibleChanged = changed("VisibleToAllUsers");
46898
47248
  const stepConcurrencyChanged = changed("StepConcurrencyLevel") && properties["StepConcurrencyLevel"] !== void 0;
@@ -48551,6 +48901,19 @@ function withoutTrailIdentifiers(text, physicalId) {
48551
48901
  }
48552
48902
  return out;
48553
48903
  }
48904
+ function removalsLeftInPlace(properties, previousProperties, context, globalEventsResetSkipped) {
48905
+ if (context?.desiredFromAwsReadback) return [];
48906
+ const removed = context?.removedProperties;
48907
+ const wasRemoved = (key) => previousProperties[key] != null && properties[key] == null && (removed === void 0 || removed.has(key));
48908
+ const org = previousProperties["IsOrganizationTrail"];
48909
+ const globalEvents = previousProperties["IncludeGlobalServiceEvents"];
48910
+ return [...wasRemoved("IsOrganizationTrail") && org !== false && org !== "false" ? ["IsOrganizationTrail"] : [], ...globalEventsResetSkipped && wasRemoved("IncludeGlobalServiceEvents") && globalEvents !== false && globalEvents !== "false" ? ["IncludeGlobalServiceEvents"] : []];
48911
+ }
48912
+ function leftInPlaceWarning(logicalId, names, caller) {
48913
+ const one = names.length === 1;
48914
+ const subject = one ? "property" : "properties";
48915
+ return caller === "rollback" ? safeMsg`${logicalId} (AWS::CloudTrail::Trail): ${subject} ${names.join(", ")} ${one ? "is" : "are"} absent from the state being restored; UpdateTrail keeps a field it is not sent, so the rollback leaves the value the failed deploy applied in place.` : safeMsg`${logicalId} (AWS::CloudTrail::Trail): ${subject} ${names.join(", ")} ${one ? "was" : "were"} removed from the template; cdkd leaves the current AWS value in place (whether CloudFormation resets it is unmeasured). Declare the intended value explicitly to change it.`;
48916
+ }
48554
48917
  var CloudTrailProvider = class {
48555
48918
  client;
48556
48919
  createClient;
@@ -48566,6 +48929,23 @@ var CloudTrailProvider = class {
48566
48929
  return error instanceof Error ? markRedactedCause(wrapped) : wrapped;
48567
48930
  }
48568
48931
  removalDefaults = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Map([["IsMultiRegionTrail", false], ["EnableLogFileValidation", false]])]]);
48932
+ removalHandledInUpdate = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Set([
48933
+ "S3BucketName",
48934
+ "IsLogging",
48935
+ "TrailName",
48936
+ "S3KeyPrefix",
48937
+ "SnsTopicName",
48938
+ "KMSKeyId",
48939
+ "CloudWatchLogsLogGroupArn",
48940
+ "CloudWatchLogsRoleArn",
48941
+ "EventSelectors",
48942
+ "AdvancedEventSelectors",
48943
+ "InsightSelectors",
48944
+ "AggregationConfigurations",
48945
+ "Tags",
48946
+ "IncludeGlobalServiceEvents",
48947
+ "IsOrganizationTrail"
48948
+ ])]]);
48569
48949
  handledProperties = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Set([
48570
48950
  "S3BucketName",
48571
48951
  "TrailName",
@@ -48695,7 +49075,8 @@ var CloudTrailProvider = class {
48695
49075
  const s3BucketName = properties["S3BucketName"];
48696
49076
  const s3KeyPrefix = clearOnUpdateRemoval(emptyToUndefined(properties["S3KeyPrefix"]), emptyToUndefined(previousProperties["S3KeyPrefix"]), "");
48697
49077
  const isMultiRegionTrail = properties["IsMultiRegionTrail"];
48698
- const includeGlobalServiceEvents = isMultiRegionTrail === false ? clearOnUpdateRemoval(properties["IncludeGlobalServiceEvents"], previousProperties["IncludeGlobalServiceEvents"], false) : properties["IncludeGlobalServiceEvents"];
49078
+ const globalEventsResetSkipped = isMultiRegionTrail !== false;
49079
+ const includeGlobalServiceEvents = globalEventsResetSkipped ? properties["IncludeGlobalServiceEvents"] : clearOnUpdateRemoval(properties["IncludeGlobalServiceEvents"], previousProperties["IncludeGlobalServiceEvents"], false);
48699
49080
  const enableLogFileValidation = properties["EnableLogFileValidation"];
48700
49081
  const isLogging = properties["IsLogging"];
48701
49082
  const cwPair = resolveCloudWatchLogsPair(properties);
@@ -48720,6 +49101,8 @@ var CloudTrailProvider = class {
48720
49101
  SnsTopicName: snsTopicName,
48721
49102
  IsOrganizationTrail: isOrganizationTrail
48722
49103
  }));
49104
+ const keptNames = removalsLeftInPlace(properties, previousProperties, context, globalEventsResetSkipped);
49105
+ if (keptNames.length > 0) this.logger.warn(leftInPlaceWarning(logicalId, keptNames, context?.replayingState ? "rollback" : "deploy"));
48723
49106
  const basicRead = readListBlock(properties["EventSelectors"], "AWS::CloudTrail::Trail EventSelectors");
48724
49107
  const advancedRead = readListBlock(properties["AdvancedEventSelectors"], "AWS::CloudTrail::Trail AdvancedEventSelectors");
48725
49108
  for (const read of [basicRead, advancedRead]) if (read.kind === "unusable") this.logger.warn(safeMsg`${read.detail} The trail's existing event selectors are left untouched for this update rather than reset to the AWS default.`);
@@ -49730,11 +50113,11 @@ var CodeCommitRepositoryProvider = class {
49730
50113
  const repoArn = metadata?.Arn;
49731
50114
  if (repoArn) {
49732
50115
  const removedKeys = Object.keys(oldTagMap).filter((k) => !Object.hasOwn(newTagMap, k));
49733
- if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$26({
50116
+ if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$27({
49734
50117
  resourceArn: repoArn,
49735
50118
  tagKeys: removedKeys
49736
50119
  }));
49737
- if (Object.keys(newTagMap).length > 0) await this.getClient().send(new TagResourceCommand$25({
50120
+ if (Object.keys(newTagMap).length > 0) await this.getClient().send(new TagResourceCommand$26({
49738
50121
  resourceArn: repoArn,
49739
50122
  tags: newTagMap
49740
50123
  }));
@@ -49931,7 +50314,7 @@ var CodeCommitRepositoryProvider = class {
49931
50314
  if (!metadata) return void 0;
49932
50315
  let tags = [];
49933
50316
  if (metadata.Arn) try {
49934
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$17({ resourceArn: metadata.Arn }));
50317
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$18({ resourceArn: metadata.Arn }));
49935
50318
  tags = normalizeAwsTagsToCfn(tagsResp.tags);
49936
50319
  } catch (err) {
49937
50320
  if (err instanceof RepositoryDoesNotExistException) return RESOURCE_NOT_FOUND;
@@ -50206,7 +50589,7 @@ var DLMLifecyclePolicyProvider = class {
50206
50589
  if (tagsChanged && arn) {
50207
50590
  const removedKeys = plan.remove;
50208
50591
  if (removedKeys.length > 0) {
50209
- await this.getClient().send(new UntagResourceCommand$27({
50592
+ await this.getClient().send(new UntagResourceCommand$28({
50210
50593
  ResourceArn: arn,
50211
50594
  TagKeys: removedKeys
50212
50595
  }));
@@ -50214,7 +50597,7 @@ var DLMLifecyclePolicyProvider = class {
50214
50597
  }
50215
50598
  const tagsToAdd = Object.fromEntries(plan.set);
50216
50599
  if (Object.keys(tagsToAdd).length > 0) {
50217
- await this.getClient().send(new TagResourceCommand$26({
50600
+ await this.getClient().send(new TagResourceCommand$27({
50218
50601
  ResourceArn: arn,
50219
50602
  Tags: tagsToAdd
50220
50603
  }));
@@ -50378,11 +50761,11 @@ var S3VectorsProvider = class {
50378
50761
  }
50379
50762
  if (!resourceArn) throw new ProvisioningError(`Could not resolve ARN for S3 VectorBucket ${logicalId} (${mask(physicalId)}); cannot apply tag update.`, resourceType, logicalId, physicalId);
50380
50763
  try {
50381
- if (Object.keys(toSet).length > 0) await this.getClient().send(new TagResourceCommand$27({
50764
+ if (Object.keys(toSet).length > 0) await this.getClient().send(new TagResourceCommand$28({
50382
50765
  resourceArn,
50383
50766
  tags: toSet
50384
50767
  }));
50385
- if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$28({
50768
+ if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$29({
50386
50769
  resourceArn,
50387
50770
  tagKeys: toRemove
50388
50771
  }));
@@ -50484,7 +50867,7 @@ var S3VectorsProvider = class {
50484
50867
  if (Object.keys(enc).length > 0) result["EncryptionConfiguration"] = enc;
50485
50868
  }
50486
50869
  if (bucket?.vectorBucketArn) try {
50487
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$18({ resourceArn: bucket.vectorBucketArn }));
50870
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$19({ resourceArn: bucket.vectorBucketArn }));
50488
50871
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.tags);
50489
50872
  } catch (err) {
50490
50873
  this.logger.debug(`S3Vectors ListTagsForResource(${bucket.vectorBucketArn}) failed: ${describeAwsFailure(err).detail}`);
@@ -51162,7 +51545,7 @@ var S3DirectoryBucketProvider = class {
51162
51545
  const resourceArn = await this.buildBucketArn(physicalId, accountId);
51163
51546
  if (removedKeys.length > 0) {
51164
51547
  context?.markUnsettled?.("Tags");
51165
- await this.getS3ControlClient().send(new UntagResourceCommand$29({
51548
+ await this.getS3ControlClient().send(new UntagResourceCommand$13({
51166
51549
  AccountId: accountId,
51167
51550
  ResourceArn: resourceArn,
51168
51551
  TagKeys: removedKeys
@@ -51170,7 +51553,7 @@ var S3DirectoryBucketProvider = class {
51170
51553
  }
51171
51554
  if (tagsToApply.length > 0) {
51172
51555
  context?.markUnsettled?.("Tags");
51173
- await this.getS3ControlClient().send(new TagResourceCommand$28({
51556
+ await this.getS3ControlClient().send(new TagResourceCommand$13({
51174
51557
  AccountId: accountId,
51175
51558
  ResourceArn: resourceArn,
51176
51559
  Tags: tagsToApply
@@ -51325,7 +51708,7 @@ var S3DirectoryBucketProvider = class {
51325
51708
  async readTags(bucketName) {
51326
51709
  const accountId = await this.getAccountId();
51327
51710
  const resourceArn = await this.buildBucketArn(bucketName, accountId);
51328
- const resp = await this.getS3ControlClient().send(new ListTagsForResourceCommand$19({
51711
+ const resp = await this.getS3ControlClient().send(new ListTagsForResourceCommand$11({
51329
51712
  AccountId: accountId,
51330
51713
  ResourceArn: resourceArn
51331
51714
  }));
@@ -53678,4 +54061,4 @@ var ACMCertificateProvider = class {
53678
54061
 
53679
54062
  //#endregion
53680
54063
  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 };
53681
- //# sourceMappingURL=provider-classes-Dz0pYmlJ.js.map
54064
+ //# sourceMappingURL=provider-classes-ZqxIefLl.js.map