@go-to-k/cdkd 0.313.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 (29) hide show
  1. package/dist/{asg-provider-CqPtIngx.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-CwpnkMCZ.js → deploy-engine-ClIUqDQL.js} +372 -58
  11. package/dist/deploy-engine-ClIUqDQL.js.map +1 -0
  12. package/dist/{iam-role-provider-ARR3C50J.js → iam-role-provider-DJep3uns.js} +4 -4
  13. package/dist/{iam-role-provider-ARR3C50J.js.map → iam-role-provider-DJep3uns.js.map} +1 -1
  14. package/dist/index.js +4 -4
  15. package/dist/{neptune-provider-DfPOAG0q.js → neptune-provider-CGZ_G4Vz.js} +5 -5
  16. package/dist/{neptune-provider-DfPOAG0q.js.map → neptune-provider-CGZ_G4Vz.js.map} +1 -1
  17. package/dist/{program-CMP_YVVn.js → program-Du6jOw1-.js} +38 -15
  18. package/dist/program-Du6jOw1-.js.map +1 -0
  19. package/dist/{provider-classes-DefoNqY7.js → provider-classes-ZqxIefLl.js} +545 -218
  20. package/dist/provider-classes-ZqxIefLl.js.map +1 -0
  21. package/dist/{rds-provider-Dn-7U1CR.js → rds-provider-C2fHUNSE.js} +5 -5
  22. package/dist/{rds-provider-Dn-7U1CR.js.map → rds-provider-C2fHUNSE.js.map} +1 -1
  23. package/dist/{version-CsWxTnUg.js → version-B2PvJ12r.js} +2 -2
  24. package/dist/{version-CsWxTnUg.js.map → version-B2PvJ12r.js.map} +1 -1
  25. package/package.json +1 -1
  26. package/dist/asg-provider-CqPtIngx.js.map +0 -1
  27. package/dist/deploy-engine-CwpnkMCZ.js.map +0 -1
  28. package/dist/program-CMP_YVVn.js.map +0 -1
  29. package/dist/provider-classes-DefoNqY7.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-CwpnkMCZ.js";
6
- import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-ARR3C50J.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-CMP_YVVn.js";
8
- import { t as modifyDbInstanceWhenAvailable } from "./db-instance-modify-retry-D7wXWxVo.js";
9
- import { RDSProvider } from "./rds-provider-Dn-7U1CR.js";
10
- import { NeptuneProvider } from "./neptune-provider-DfPOAG0q.js";
11
- import { ASGProvider } from "./asg-provider-CqPtIngx.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) {
@@ -11863,120 +12280,6 @@ async function waitForGoneAfterDelete(opts) {
11863
12280
  }
11864
12281
  }
11865
12282
 
11866
- //#endregion
11867
- //#region src/provisioning/dynamodb-vector-indexes.ts
11868
- function vectorIndexesByName(value) {
11869
- const out = /* @__PURE__ */ new Map();
11870
- if (!Array.isArray(value)) return out;
11871
- for (const entry of value) {
11872
- if (typeof entry !== "object" || entry === null || Array.isArray(entry)) continue;
11873
- const name = entry["IndexName"];
11874
- if (typeof name === "string") out.set(name, entry);
11875
- }
11876
- return out;
11877
- }
11878
- function vectorIndexForSend(entry) {
11879
- const out = {};
11880
- for (const key of [
11881
- "IndexName",
11882
- "VectorAttribute",
11883
- "Projection",
11884
- "DistanceFunction"
11885
- ]) if (entry[key] !== void 0) out[key] = entry[key];
11886
- if (entry["Dimensions"] !== void 0) out["Dimensions"] = coerceCfnInteger(entry["Dimensions"]) ?? entry["Dimensions"];
11887
- if (entry["SearchSchema"] !== void 0) out["SearchSchema"] = entry["SearchSchema"];
11888
- return out;
11889
- }
11890
- function vectorIndexesForCreate(value) {
11891
- if (value === void 0 || value === null) return void 0;
11892
- if (!Array.isArray(value)) return value;
11893
- return value.map((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry) ? vectorIndexForSend(entry) : entry);
11894
- }
11895
- function sortedByJson(list) {
11896
- if (!Array.isArray(list)) return list;
11897
- return [...list].sort((a, b) => {
11898
- const x = JSON.stringify(a) ?? "";
11899
- const y = JSON.stringify(b) ?? "";
11900
- return x < y ? -1 : x > y ? 1 : 0;
11901
- });
11902
- }
11903
- function vectorIndexKey(entry) {
11904
- const e = entry;
11905
- const projection = e["Projection"];
11906
- const normalizedProjection = typeof projection === "object" && projection !== null && !Array.isArray(projection) ? {
11907
- ProjectionType: projection["ProjectionType"],
11908
- NonKeyAttributes: sortedByJson(nonEmpty(projection["NonKeyAttributes"]))
11909
- } : projection;
11910
- const attribute = e["VectorAttribute"];
11911
- return JSON.stringify([
11912
- e["IndexName"],
11913
- typeof attribute === "object" && attribute !== null ? attribute["AttributeName"] : attribute,
11914
- coerceCfnInteger(e["Dimensions"]) ?? e["Dimensions"],
11915
- e["DistanceFunction"],
11916
- normalizedProjection,
11917
- sortedByJson(Array.isArray(e["SearchSchema"]) && e["SearchSchema"].length > 0 ? e["SearchSchema"].map((s) => typeof s === "object" && s !== null ? {
11918
- AttributeName: s["AttributeName"],
11919
- SearchSchemaElementType: s["SearchSchemaElementType"]
11920
- } : s) : nonEmpty(e["SearchSchema"]))
11921
- ]);
11922
- }
11923
- function nonEmpty(value) {
11924
- return Array.isArray(value) && value.length === 0 ? void 0 : value;
11925
- }
11926
- function planVectorIndexUpdates(previous, desired, live) {
11927
- const prevByName = vectorIndexesByName(previous);
11928
- const desiredByName = vectorIndexesByName(desired);
11929
- const liveByName = live === void 0 ? void 0 : new Map(live.filter((d) => typeof d.IndexName === "string").map((d) => [d.IndexName, d]));
11930
- const plan = {
11931
- ops: [],
11932
- changed: [],
11933
- adopted: [],
11934
- alreadyGone: []
11935
- };
11936
- const liveHolds = (name, entry) => {
11937
- const l = liveByName?.get(name);
11938
- return l !== void 0 && l.IndexStatus !== "DELETING" && vectorIndexKey(l) === vectorIndexKey(entry);
11939
- };
11940
- for (const name of prevByName.keys()) {
11941
- if (desiredByName.has(name)) continue;
11942
- const l = liveByName?.get(name);
11943
- if (liveByName !== void 0 && (l === void 0 || l.IndexStatus === "DELETING")) {
11944
- plan.alreadyGone.push(name);
11945
- continue;
11946
- }
11947
- plan.ops.push({ Delete: { IndexName: name } });
11948
- }
11949
- for (const [name, entry] of desiredByName) {
11950
- const before = prevByName.get(name);
11951
- if (before === void 0) {
11952
- const l = liveByName?.get(name);
11953
- if (l === void 0 || l.IndexStatus === "DELETING") plan.ops.push({ Create: vectorIndexForSend(entry) });
11954
- else if (liveHolds(name, entry)) plan.adopted.push(name);
11955
- else plan.changed.push(name);
11956
- continue;
11957
- }
11958
- if (vectorIndexKey(before) === vectorIndexKey(entry)) continue;
11959
- if (!liveHolds(name, entry)) plan.changed.push(name);
11960
- }
11961
- return plan;
11962
- }
11963
- function readbackVectorIndexes(live) {
11964
- if (live === void 0 || live.length === 0) return void 0;
11965
- return live.map((d) => {
11966
- const out = {};
11967
- if (d.IndexName !== void 0) out["IndexName"] = d.IndexName;
11968
- if (d.VectorAttribute !== void 0) out["VectorAttribute"] = d.VectorAttribute;
11969
- if (d.Dimensions !== void 0) out["Dimensions"] = d.Dimensions;
11970
- if (d.DistanceFunction !== void 0) out["DistanceFunction"] = d.DistanceFunction;
11971
- if (d.Projection !== void 0) out["Projection"] = d.Projection;
11972
- if (d.SearchSchema !== void 0 && d.SearchSchema.length > 0) out["SearchSchema"] = d.SearchSchema;
11973
- return out;
11974
- });
11975
- }
11976
- function vectorIndexesSettled(live) {
11977
- return (live ?? []).every((d) => d.IndexStatus === void 0 || d.IndexStatus === "ACTIVE");
11978
- }
11979
-
11980
12283
  //#endregion
11981
12284
  //#region src/provisioning/providers/dynamodb-table-provider.ts
11982
12285
  function isTableName(id) {
@@ -24502,11 +24805,11 @@ var ApiGatewayV2Provider = class ApiGatewayV2Provider {
24502
24805
  const region = await this.getClient().config.region();
24503
24806
  const { partition } = derivePartitionAndUrlSuffix(region);
24504
24807
  const resourceArn = `arn:${partition}:apigateway:${canonicalizeRegion(region)}::${path}`;
24505
- 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({
24506
24809
  ResourceArn: resourceArn,
24507
24810
  TagKeys: change.remove
24508
24811
  }));
24509
- 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({
24510
24813
  ResourceArn: resourceArn,
24511
24814
  Tags: change.set
24512
24815
  }));
@@ -26426,7 +26729,7 @@ var StepFunctionsProvider = class {
26426
26729
  result["EncryptionConfiguration"] = ec;
26427
26730
  }
26428
26731
  try {
26429
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$11({ resourceArn: physicalId }));
26732
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$12({ resourceArn: physicalId }));
26430
26733
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.tags);
26431
26734
  } catch (err) {
26432
26735
  if (!(err instanceof StateMachineDoesNotExist)) throw err;
@@ -26469,14 +26772,14 @@ var StepFunctionsProvider = class {
26469
26772
  }));
26470
26773
  const tagsToRemove = plan.remove;
26471
26774
  if (tagsToRemove.length > 0) {
26472
- await this.getClient().send(new UntagResourceCommand$14({
26775
+ await this.getClient().send(new UntagResourceCommand$15({
26473
26776
  resourceArn: stateMachineArn,
26474
26777
  tagKeys: tagsToRemove
26475
26778
  }));
26476
26779
  this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from SFN state machine ${stateMachineArn}`);
26477
26780
  }
26478
26781
  if (tagsToAdd.length > 0) {
26479
- await this.getClient().send(new TagResourceCommand$14({
26782
+ await this.getClient().send(new TagResourceCommand$15({
26480
26783
  resourceArn: stateMachineArn,
26481
26784
  tags: tagsToAdd
26482
26785
  }));
@@ -27468,14 +27771,14 @@ var ECSProvider = class {
27468
27771
  }));
27469
27772
  const tagsToRemove = plan.remove;
27470
27773
  if (tagsToRemove.length > 0) {
27471
- await this.getClient().send(new UntagResourceCommand$15({
27774
+ await this.getClient().send(new UntagResourceCommand$16({
27472
27775
  resourceArn,
27473
27776
  tagKeys: tagsToRemove
27474
27777
  }));
27475
27778
  log.debug(`Removed ${tagsToRemove.length} tag(s) from ECS resource ${resourceArn}`);
27476
27779
  }
27477
27780
  if (tagsToAdd.length > 0) {
27478
- await this.getClient().send(new TagResourceCommand$15({
27781
+ await this.getClient().send(new TagResourceCommand$16({
27479
27782
  resourceArn,
27480
27783
  tags: tagsToAdd
27481
27784
  }));
@@ -30959,7 +31262,7 @@ async function applyDocDBTagDiff(client, logger, arn, resourceType, logicalId, o
30959
31262
  }
30960
31263
  async function attachDocDBTags(client, logger, result, arn) {
30961
31264
  try {
30962
- const tagsResp = await client.send(new ListTagsForResourceCommand$12({ ResourceName: arn }));
31265
+ const tagsResp = await client.send(new ListTagsForResourceCommand$13({ ResourceName: arn }));
30963
31266
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.TagList);
30964
31267
  } catch (err) {
30965
31268
  logger.debug(safeMsg`DocDB ListTagsForResource(${arn}) failed: ${describeAwsFailure(err).detail}`);
@@ -33338,14 +33641,14 @@ var WAFv2WebACLProvider = class {
33338
33641
  }));
33339
33642
  const tagsToRemove = plan.remove;
33340
33643
  if (tagsToRemove.length > 0) {
33341
- await this.getClient().send(new UntagResourceCommand$16({
33644
+ await this.getClient().send(new UntagResourceCommand$17({
33342
33645
  ResourceARN: arn,
33343
33646
  TagKeys: tagsToRemove
33344
33647
  }));
33345
33648
  this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from WAFv2 WebACL ${arn}`);
33346
33649
  }
33347
33650
  if (tagsToAdd.length > 0) {
33348
- await this.getClient().send(new TagResourceCommand$16({
33651
+ await this.getClient().send(new TagResourceCommand$17({
33349
33652
  ResourceARN: arn,
33350
33653
  Tags: tagsToAdd
33351
33654
  }));
@@ -33384,7 +33687,7 @@ var WAFv2WebACLProvider = class {
33384
33687
  if (webACL.ApplicationConfig) result["ApplicationConfig"] = webACL.ApplicationConfig;
33385
33688
  if (webACL.MonetizationConfig) result["MonetizationConfig"] = webACL.MonetizationConfig;
33386
33689
  try {
33387
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$13({ ResourceARN: physicalId }));
33690
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceARN: physicalId }));
33388
33691
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.TagInfoForResource?.TagList);
33389
33692
  } catch (err) {
33390
33693
  this.logger.debug(`WAFv2 ListTagsForResource(${physicalId}) failed: ${describeAwsFailure(err).detail}`);
@@ -33446,6 +33749,7 @@ function userPoolDeletionProtectionUpdate(physicalId, pool, value, opts = {}) {
33446
33749
  if (acr === void 0) delete input.AcrConfiguration;
33447
33750
  else input.AcrConfiguration = acr;
33448
33751
  if (echoesDeveloperEmail(pool) && opts.withoutDeveloperEmail !== true) input.EmailConfiguration = pool.EmailConfiguration;
33752
+ if (echoesCustomerManagedKey(pool)) input.KeyConfiguration = pool.KeyConfiguration;
33449
33753
  input.DeletionProtection = value;
33450
33754
  return input;
33451
33755
  }
@@ -33471,6 +33775,19 @@ function reportKind(record) {
33471
33775
  function echoesDeveloperEmail(pool) {
33472
33776
  return pool.EmailConfiguration?.EmailSendingAccount === "DEVELOPER";
33473
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
+ }
33474
33791
  const REFUSED_ECHO_ERRORS = /* @__PURE__ */ new Set([
33475
33792
  "InvalidParameterException",
33476
33793
  "InvalidSmsRoleAccessPolicyException",
@@ -33553,12 +33870,13 @@ const KEPT_ON_REMOVAL_MEMBERS = {
33553
33870
  AccountRecoverySetting: void 0,
33554
33871
  SmsConfiguration: void 0,
33555
33872
  UserPoolTier: "ESSENTIALS",
33556
- DeletionProtection: "INACTIVE"
33873
+ DeletionProtection: "INACTIVE",
33874
+ IssuerConfiguration: { Type: "ORIGINAL" }
33557
33875
  };
33558
33876
  function declaresMember(value, unset) {
33559
33877
  if (value === void 0 || value === null || value === "") return false;
33560
33878
  if (isEmptyObjectPlaceholder(value)) return false;
33561
- return unset === void 0 || value !== unset;
33879
+ return unset === void 0 || !isDeepStrictEqual(value, unset);
33562
33880
  }
33563
33881
  function sendsKeptMember(member, value) {
33564
33882
  if (!value) return false;
@@ -33763,6 +34081,8 @@ var CognitoUserPoolProvider = class {
33763
34081
  "SmsAuthenticationMessage",
33764
34082
  "SmsVerificationMessage",
33765
34083
  "UserPoolTier",
34084
+ "KeyConfiguration",
34085
+ "IssuerConfiguration",
33766
34086
  "EnabledMfas",
33767
34087
  "EmailAuthenticationMessage",
33768
34088
  "EmailAuthenticationSubject",
@@ -33844,6 +34164,8 @@ var CognitoUserPoolProvider = class {
33844
34164
  if (properties["SmsAuthenticationMessage"]) createParams.SmsAuthenticationMessage = properties["SmsAuthenticationMessage"];
33845
34165
  if (properties["SmsVerificationMessage"]) createParams.SmsVerificationMessage = properties["SmsVerificationMessage"];
33846
34166
  if (properties["UserPoolTier"]) createParams.UserPoolTier = properties["UserPoolTier"];
34167
+ if (properties["KeyConfiguration"]) createParams.KeyConfiguration = properties["KeyConfiguration"];
34168
+ if (properties["IssuerConfiguration"]) createParams.IssuerConfiguration = properties["IssuerConfiguration"];
33847
34169
  const orphanWindow = createUserPoolLatch.take(logicalId);
33848
34170
  if (orphanWindow !== void 0) await this.reportPossibleOrphanPools(logicalId, poolName, orphanWindow, createMaskedLogSinks(this.logger, context?.maskSecrets));
33849
34171
  let created;
@@ -34104,6 +34426,8 @@ var CognitoUserPoolProvider = class {
34104
34426
  if (properties["SmsAuthenticationMessage"] !== void 0) updateParams.SmsAuthenticationMessage = properties["SmsAuthenticationMessage"];
34105
34427
  if (properties["SmsVerificationMessage"] !== void 0) updateParams.SmsVerificationMessage = properties["SmsVerificationMessage"];
34106
34428
  if (properties["UserPoolTier"]) updateParams.UserPoolTier = properties["UserPoolTier"];
34429
+ if (properties["KeyConfiguration"]) updateParams.KeyConfiguration = properties["KeyConfiguration"];
34430
+ if (properties["IssuerConfiguration"]) updateParams.IssuerConfiguration = properties["IssuerConfiguration"];
34107
34431
  const mfaOptions = {
34108
34432
  ...liveMfa?.value !== void 0 ? { liveMfaConfiguration: liveMfa.value } : {},
34109
34433
  ...liveMfa?.failed === true ? { liveReadFailed: true } : {},
@@ -34163,7 +34487,7 @@ var CognitoUserPoolProvider = class {
34163
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.`);
34164
34488
  return;
34165
34489
  }
34166
- await this.getClient().send(new UntagResourceCommand$17({
34490
+ await this.getClient().send(new UntagResourceCommand$18({
34167
34491
  ResourceArn: poolArn,
34168
34492
  TagKeys: removed
34169
34493
  }));
@@ -34211,7 +34535,7 @@ var CognitoUserPoolProvider = class {
34211
34535
  before: "aws cognito-idp update-user-pool --user-pool-id",
34212
34536
  identifier: physicalId,
34213
34537
  after: "--deletion-protection INACTIVE",
34214
- 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."
34215
34539
  }
34216
34540
  }) : `AWS::Cognito::UserPool is a stateful type, so re-run with ${replaceFlags} to recreate it (this deletes all users in the pool).`;
34217
34541
  }
@@ -34236,16 +34560,16 @@ var CognitoUserPoolProvider = class {
34236
34560
  try {
34237
34561
  pool = (await this.getClient().send(new DescribeUserPoolCommand({ UserPoolId: physicalId }))).UserPool;
34238
34562
  } catch (readError) {
34239
- if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
34563
+ if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
34240
34564
  throw readError;
34241
34565
  }
34242
34566
  if (!pool) {
34243
- if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
34567
+ if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
34244
34568
  throw new Error(`DescribeUserPool returned no pool for ${physicalId}`);
34245
34569
  }
34246
34570
  if (bareFlip && pool.DeletionProtection !== "ACTIVE") bareFlip.ambiguous = false;
34247
34571
  const resetConfirmed = bareFlip !== void 0 && !bareFlip.ambiguous;
34248
- if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
34572
+ if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
34249
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}`);
34250
34574
  const bareLicensed = resetConfirmed && bareFlip.echoedSince !== true;
34251
34575
  const readOn = pool.DeletionProtection === "ACTIVE";
@@ -34278,7 +34602,7 @@ var CognitoUserPoolProvider = class {
34278
34602
  }
34279
34603
  });
34280
34604
  }
34281
- reportSettingsResetByBareFlip(physicalId, before, kind) {
34605
+ reportSettingsResetByBareFlip(physicalId, before, kind, mask) {
34282
34606
  const held = [];
34283
34607
  const adminOnly = before.AdminCreateUserConfig?.AllowAdminCreateUserOnly;
34284
34608
  if (adminOnly !== void 0) held.push(`AllowAdminCreateUserOnly=${String(adminOnly)}`);
@@ -34292,10 +34616,11 @@ var CognitoUserPoolProvider = class {
34292
34616
  const mode = before.UserPoolAddOns?.AdvancedSecurityMode;
34293
34617
  if (mode) held.push(`AdvancedSecurityMode=${mode}`);
34294
34618
  if (echoesDeveloperEmail(before)) held.push("EmailConfiguration.EmailSendingAccount=DEVELOPER (SES)");
34295
- const heldText = held.length > 0 ? held.join(", ") : "none of these settings";
34296
- 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);
34297
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.`;
34298
- 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.`));
34299
34624
  }
34300
34625
  async deleteOnce(logicalId, physicalId, resourceType, context, flip) {
34301
34626
  this.logger.debug(`Deleting Cognito User Pool ${logicalId}: ${physicalId}`);
@@ -34397,7 +34722,7 @@ var CognitoUserPoolProvider = class {
34397
34722
  if (observedOn && isAmbiguousWriteFailure(echoError)) flip.flippedOffByThisRun = true;
34398
34723
  if (isTransientCognitoFailure(echoError)) throw echoError;
34399
34724
  if (!isRefusedEcho(echoError)) {
34400
- this.warnGuardLeftOn(physicalId, mask, echoError);
34725
+ this.warnGuardLeftOn(physicalId, pool, mask, echoError);
34401
34726
  throw echoError;
34402
34727
  }
34403
34728
  try {
@@ -34415,10 +34740,10 @@ var CognitoUserPoolProvider = class {
34415
34740
  });
34416
34741
  }
34417
34742
  if (isTransientCognitoFailure(bareError)) {
34418
- 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.`);
34419
34744
  throw bareError;
34420
34745
  }
34421
- this.warnGuardLeftOn(physicalId, mask, bareError, echoError);
34746
+ this.warnGuardLeftOn(physicalId, pool, mask, bareError, echoError);
34422
34747
  throw bareError;
34423
34748
  }
34424
34749
  const kept = this.preFlipPools.get(flip);
@@ -34431,16 +34756,16 @@ var CognitoUserPoolProvider = class {
34431
34756
  kept.echoedSince = false;
34432
34757
  }
34433
34758
  this.logger.debug(mask(safeMsg`UpdateUserPool refused the echoed configuration of ${mask(physicalId)}: ${mask(describeAwsFailure(echoError).detail)}`));
34434
- 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.`);
34435
34760
  }
34436
34761
  }
34437
- warnGuardLeftOn(physicalId, mask, error, echoError) {
34762
+ warnGuardLeftOn(physicalId, pool, mask, error, echoError) {
34438
34763
  const name = typeof error === "object" && error !== null ? safeStringify(error.name) : "";
34439
34764
  const accessHint = /AccessDenied|NotAuthorized|Unauthorized/.test(name) ? " The caller needs cognito-idp:UpdateUserPool." : "";
34440
34765
  const echoClause = echoError === void 0 ? "" : safeMsg`; the pool's own settings sent back were refused first (${mask(describeAwsFailure(echoError).summary)})`;
34441
34766
  this.logger.debug(mask(safeMsg`UpdateUserPool did not turn DeletionProtection off on ${mask(physicalId)}: ${mask(describeAwsFailure(error).detail)}`));
34442
34767
  const refused = error instanceof Error && isAwsAuthoredFailure(error);
34443
- 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.`);
34444
34769
  }
34445
34770
  async readCurrentState(physicalId, _logicalId, resourceType) {
34446
34771
  if (resourceType !== "AWS::Cognito::UserPool") return void 0;
@@ -34482,6 +34807,8 @@ var CognitoUserPoolProvider = class {
34482
34807
  }
34483
34808
  result["UserPoolTags"] = userTags;
34484
34809
  result["UserPoolTier"] = pool.UserPoolTier ?? "ESSENTIALS";
34810
+ if (pool.KeyConfiguration) result["KeyConfiguration"] = pool.KeyConfiguration;
34811
+ if (pool.IssuerConfiguration) result["IssuerConfiguration"] = pool.IssuerConfiguration;
34485
34812
  try {
34486
34813
  const mfa = await this.getClient().send(new GetUserPoolMfaConfigCommand({ UserPoolId: physicalId }));
34487
34814
  const enabledMfas = [];
@@ -35753,11 +36080,11 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
35753
36080
  if (hasTagChange) {
35754
36081
  const arn = knownArn ?? (await client.send(new GetServiceCommand({ Id: physicalId }))).Service?.Arn;
35755
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);
35756
- if (tagPlan.remove.length > 0) await client.send(new UntagResourceCommand$18({
36083
+ if (tagPlan.remove.length > 0) await client.send(new UntagResourceCommand$19({
35757
36084
  ResourceARN: arn,
35758
36085
  TagKeys: tagPlan.remove
35759
36086
  }));
35760
- if (tagPlan.set.size > 0) await client.send(new TagResourceCommand$17({
36087
+ if (tagPlan.set.size > 0) await client.send(new TagResourceCommand$18({
35761
36088
  ResourceARN: arn,
35762
36089
  Tags: [...tagPlan.set].map(([Key, Value]) => ({
35763
36090
  Key,
@@ -35873,11 +36200,11 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
35873
36200
  const hasAdds = tagsToAdd.length > 0;
35874
36201
  if (removedKeys.length === 0 && !hasAdds) return;
35875
36202
  const arn = await this.resolveNamespaceArn(physicalId);
35876
- if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$18({
36203
+ if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$19({
35877
36204
  ResourceARN: arn,
35878
36205
  TagKeys: removedKeys
35879
36206
  }));
35880
- if (hasAdds) await this.getClient().send(new TagResourceCommand$17({
36207
+ if (hasAdds) await this.getClient().send(new TagResourceCommand$18({
35881
36208
  ResourceARN: arn,
35882
36209
  Tags: tagsToAdd
35883
36210
  }));
@@ -36050,7 +36377,7 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
36050
36377
  }
36051
36378
  async attachTags(result, arn) {
36052
36379
  try {
36053
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceARN: arn }));
36380
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$15({ ResourceARN: arn }));
36054
36381
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.Tags);
36055
36382
  } catch (err) {
36056
36383
  this.logger.debug(`ServiceDiscovery ListTagsForResource(${arn}) failed: ${describeAwsFailure(err).detail}`);
@@ -36642,7 +36969,7 @@ var AppSyncProvider = class {
36642
36969
  const tagKeysToRemove = plan.remove;
36643
36970
  const tagsToAdd = Object.fromEntries(plan.set);
36644
36971
  if (tagKeysToRemove.length > 0) try {
36645
- await this.getClient().send(new UntagResourceCommand$19({
36972
+ await this.getClient().send(new UntagResourceCommand$20({
36646
36973
  resourceArn: arn,
36647
36974
  tagKeys: tagKeysToRemove
36648
36975
  }));
@@ -36650,7 +36977,7 @@ var AppSyncProvider = class {
36650
36977
  throw this.wrapUpdateError(error, resourceType, logicalId, apiId, "GraphqlApi (untag)", mask);
36651
36978
  }
36652
36979
  if (Object.keys(tagsToAdd).length > 0) try {
36653
- await this.getClient().send(new TagResourceCommand$18({
36980
+ await this.getClient().send(new TagResourceCommand$19({
36654
36981
  resourceArn: arn,
36655
36982
  tags: tagsToAdd
36656
36983
  }));
@@ -39345,11 +39672,11 @@ async function applyGlueTagDiff(client, resourceArn, recorded, desired, resource
39345
39672
  if (toSet.size === 0 && plan.remove.length === 0) return;
39346
39673
  unsettled.beforeWrite();
39347
39674
  const arn = await resourceArn();
39348
- if (toSet.size > 0) await client.send(new TagResourceCommand$19({
39675
+ if (toSet.size > 0) await client.send(new TagResourceCommand$20({
39349
39676
  ResourceArn: arn,
39350
39677
  TagsToAdd: Object.fromEntries(toSet)
39351
39678
  }));
39352
- if (plan.remove.length > 0) await client.send(new UntagResourceCommand$20({
39679
+ if (plan.remove.length > 0) await client.send(new UntagResourceCommand$21({
39353
39680
  ResourceArn: arn,
39354
39681
  TagsToRemove: plan.remove
39355
39682
  }));
@@ -41131,7 +41458,7 @@ var BudgetsBudgetProvider = class {
41131
41458
  const newTags = this.toSdkResourceTags(next.ResourceTags);
41132
41459
  if (prevTags.kind === "list") await this.reconcileResourceTags(accountId, physicalId, this.toSdkResourceTags(removableRecorded("ResourceTags", prevTags.items)), newTags);
41133
41460
  else {
41134
- if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$20({
41461
+ if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$21({
41135
41462
  ResourceARN: await this.budgetArn(accountId, physicalId),
41136
41463
  ResourceTags: newTags
41137
41464
  }));
@@ -41275,11 +41602,11 @@ var BudgetsBudgetProvider = class {
41275
41602
  const removedKeys = oldTags.map((t) => t.Key).filter((k) => {
41276
41603
  return typeof k === "string" && !newKeys.has(k);
41277
41604
  });
41278
- if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$21({
41605
+ if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$22({
41279
41606
  ResourceARN: arn,
41280
41607
  ResourceTagKeys: removedKeys
41281
41608
  }));
41282
- if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$20({
41609
+ if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$21({
41283
41610
  ResourceARN: arn,
41284
41611
  ResourceTags: newTags
41285
41612
  }));
@@ -41359,7 +41686,7 @@ var BudgetsBudgetProvider = class {
41359
41686
  }));
41360
41687
  let tags;
41361
41688
  try {
41362
- 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) }));
41363
41690
  } catch (error) {
41364
41691
  if (error instanceof NotFoundException$5 && await describe() === RESOURCE_NOT_FOUND) return RESOURCE_NOT_FOUND;
41365
41692
  throw error;
@@ -42337,7 +42664,7 @@ var KinesisStreamConsumerProvider = class {
42337
42664
  if (desc.ConsumerName !== void 0) result["ConsumerName"] = desc.ConsumerName;
42338
42665
  if (desc.StreamARN !== void 0) result["StreamARN"] = desc.StreamARN;
42339
42666
  try {
42340
- const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$16({ ResourceARN: physicalId }));
42667
+ const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$17({ ResourceARN: physicalId }));
42341
42668
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.Tags);
42342
42669
  } catch (err) {
42343
42670
  if (err instanceof ResourceNotFoundException$12) return RESOURCE_NOT_FOUND;
@@ -42354,14 +42681,14 @@ var KinesisStreamConsumerProvider = class {
42354
42681
  const tagsToAdd = Object.fromEntries(plan.set);
42355
42682
  const tagsToRemove = plan.remove;
42356
42683
  if (tagsToRemove.length > 0) {
42357
- await this.getClient().send(new UntagResourceCommand$22({
42684
+ await this.getClient().send(new UntagResourceCommand$23({
42358
42685
  ResourceARN: consumerArn,
42359
42686
  TagKeys: tagsToRemove
42360
42687
  }));
42361
42688
  this.logger.debug(mask(`Removed ${tagsToRemove.length} tag(s) from Kinesis stream consumer ${consumerArn}`));
42362
42689
  }
42363
42690
  if (Object.keys(tagsToAdd).length > 0) {
42364
- await this.getClient().send(new TagResourceCommand$21({
42691
+ await this.getClient().send(new TagResourceCommand$22({
42365
42692
  ResourceARN: consumerArn,
42366
42693
  Tags: tagsToAdd
42367
42694
  }));
@@ -43168,11 +43495,11 @@ var PipesPipeProvider = class {
43168
43495
  settled ??= await this.describe(physicalId);
43169
43496
  const arn = settled.Arn;
43170
43497
  if (!arn) throw new Error("DescribePipe returned no Arn, which tagging needs");
43171
- 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({
43172
43499
  resourceArn: arn,
43173
43500
  tagKeys: plan.remove
43174
43501
  }));
43175
- 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({
43176
43503
  resourceArn: arn,
43177
43504
  tags: Object.fromEntries(plan.set)
43178
43505
  }));
@@ -43599,11 +43926,11 @@ var EFSProvider = class {
43599
43926
  const plan = planTagDiff(recorded, desired);
43600
43927
  const warning = tagPlanWarning(plan, resourceType, logicalId);
43601
43928
  if (warning !== void 0) log.warn(warning);
43602
- 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({
43603
43930
  ResourceId: resourceId,
43604
43931
  TagKeys: plan.remove
43605
43932
  })), `UntagResource ${resourceId}`, log);
43606
- 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({
43607
43934
  ResourceId: resourceId,
43608
43935
  Tags: [...plan.set].map(([Key, Value]) => ({
43609
43936
  Key,
@@ -45191,11 +45518,11 @@ var FSxFileSystemProvider = class {
45191
45518
  Value
45192
45519
  }));
45193
45520
  const toRemove = plan.remove;
45194
- if (toSet.length > 0) await this.getClient().send(new TagResourceCommand$24({
45521
+ if (toSet.length > 0) await this.getClient().send(new TagResourceCommand$25({
45195
45522
  ResourceARN: arn,
45196
45523
  Tags: toSet
45197
45524
  }));
45198
- if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$25({
45525
+ if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$26({
45199
45526
  ResourceARN: arn,
45200
45527
  TagKeys: toRemove
45201
45528
  }));
@@ -49786,11 +50113,11 @@ var CodeCommitRepositoryProvider = class {
49786
50113
  const repoArn = metadata?.Arn;
49787
50114
  if (repoArn) {
49788
50115
  const removedKeys = Object.keys(oldTagMap).filter((k) => !Object.hasOwn(newTagMap, k));
49789
- if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$26({
50116
+ if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$27({
49790
50117
  resourceArn: repoArn,
49791
50118
  tagKeys: removedKeys
49792
50119
  }));
49793
- 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({
49794
50121
  resourceArn: repoArn,
49795
50122
  tags: newTagMap
49796
50123
  }));
@@ -49987,7 +50314,7 @@ var CodeCommitRepositoryProvider = class {
49987
50314
  if (!metadata) return void 0;
49988
50315
  let tags = [];
49989
50316
  if (metadata.Arn) try {
49990
- 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 }));
49991
50318
  tags = normalizeAwsTagsToCfn(tagsResp.tags);
49992
50319
  } catch (err) {
49993
50320
  if (err instanceof RepositoryDoesNotExistException) return RESOURCE_NOT_FOUND;
@@ -50262,7 +50589,7 @@ var DLMLifecyclePolicyProvider = class {
50262
50589
  if (tagsChanged && arn) {
50263
50590
  const removedKeys = plan.remove;
50264
50591
  if (removedKeys.length > 0) {
50265
- await this.getClient().send(new UntagResourceCommand$27({
50592
+ await this.getClient().send(new UntagResourceCommand$28({
50266
50593
  ResourceArn: arn,
50267
50594
  TagKeys: removedKeys
50268
50595
  }));
@@ -50270,7 +50597,7 @@ var DLMLifecyclePolicyProvider = class {
50270
50597
  }
50271
50598
  const tagsToAdd = Object.fromEntries(plan.set);
50272
50599
  if (Object.keys(tagsToAdd).length > 0) {
50273
- await this.getClient().send(new TagResourceCommand$26({
50600
+ await this.getClient().send(new TagResourceCommand$27({
50274
50601
  ResourceArn: arn,
50275
50602
  Tags: tagsToAdd
50276
50603
  }));
@@ -50434,11 +50761,11 @@ var S3VectorsProvider = class {
50434
50761
  }
50435
50762
  if (!resourceArn) throw new ProvisioningError(`Could not resolve ARN for S3 VectorBucket ${logicalId} (${mask(physicalId)}); cannot apply tag update.`, resourceType, logicalId, physicalId);
50436
50763
  try {
50437
- 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({
50438
50765
  resourceArn,
50439
50766
  tags: toSet
50440
50767
  }));
50441
- if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$28({
50768
+ if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$29({
50442
50769
  resourceArn,
50443
50770
  tagKeys: toRemove
50444
50771
  }));
@@ -50540,7 +50867,7 @@ var S3VectorsProvider = class {
50540
50867
  if (Object.keys(enc).length > 0) result["EncryptionConfiguration"] = enc;
50541
50868
  }
50542
50869
  if (bucket?.vectorBucketArn) try {
50543
- 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 }));
50544
50871
  result["Tags"] = normalizeAwsTagsToCfn(tagsResp.tags);
50545
50872
  } catch (err) {
50546
50873
  this.logger.debug(`S3Vectors ListTagsForResource(${bucket.vectorBucketArn}) failed: ${describeAwsFailure(err).detail}`);
@@ -51218,7 +51545,7 @@ var S3DirectoryBucketProvider = class {
51218
51545
  const resourceArn = await this.buildBucketArn(physicalId, accountId);
51219
51546
  if (removedKeys.length > 0) {
51220
51547
  context?.markUnsettled?.("Tags");
51221
- await this.getS3ControlClient().send(new UntagResourceCommand$29({
51548
+ await this.getS3ControlClient().send(new UntagResourceCommand$13({
51222
51549
  AccountId: accountId,
51223
51550
  ResourceArn: resourceArn,
51224
51551
  TagKeys: removedKeys
@@ -51226,7 +51553,7 @@ var S3DirectoryBucketProvider = class {
51226
51553
  }
51227
51554
  if (tagsToApply.length > 0) {
51228
51555
  context?.markUnsettled?.("Tags");
51229
- await this.getS3ControlClient().send(new TagResourceCommand$28({
51556
+ await this.getS3ControlClient().send(new TagResourceCommand$13({
51230
51557
  AccountId: accountId,
51231
51558
  ResourceArn: resourceArn,
51232
51559
  Tags: tagsToApply
@@ -51381,7 +51708,7 @@ var S3DirectoryBucketProvider = class {
51381
51708
  async readTags(bucketName) {
51382
51709
  const accountId = await this.getAccountId();
51383
51710
  const resourceArn = await this.buildBucketArn(bucketName, accountId);
51384
- const resp = await this.getS3ControlClient().send(new ListTagsForResourceCommand$19({
51711
+ const resp = await this.getS3ControlClient().send(new ListTagsForResourceCommand$11({
51385
51712
  AccountId: accountId,
51386
51713
  ResourceArn: resourceArn
51387
51714
  }));
@@ -53734,4 +54061,4 @@ var ACMCertificateProvider = class {
53734
54061
 
53735
54062
  //#endregion
53736
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 };
53737
- //# sourceMappingURL=provider-classes-DefoNqY7.js.map
54064
+ //# sourceMappingURL=provider-classes-ZqxIefLl.js.map