@go-to-k/cdkd 0.319.0 → 0.321.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-T9K-NVi8.js → asg-provider-DIQU27yo.js} +3 -3
  2. package/dist/{asg-provider-T9K-NVi8.js.map → asg-provider-DIQU27yo.js.map} +1 -1
  3. package/dist/cli.js +2 -2
  4. package/dist/{created-resource-sink-BpB3iPvn.js → created-resource-sink-CmrPwGge.js} +4 -2
  5. package/dist/created-resource-sink-CmrPwGge.js.map +1 -0
  6. package/dist/{db-instance-modify-retry-CspmK57I.js → db-instance-modify-retry-DCLA_p9I.js} +2 -2
  7. package/dist/{db-instance-modify-retry-CspmK57I.js.map → db-instance-modify-retry-DCLA_p9I.js.map} +1 -1
  8. package/dist/{deploy-engine-CVYhHEgq.js → deploy-engine-pGWgnV-6.js} +135 -81
  9. package/dist/deploy-engine-pGWgnV-6.js.map +1 -0
  10. package/dist/{iam-role-provider-qTIqSmlf.js → iam-role-provider-z7poP-9w.js} +3 -3
  11. package/dist/{iam-role-provider-qTIqSmlf.js.map → iam-role-provider-z7poP-9w.js.map} +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -3
  14. package/dist/{neptune-provider-BsA7jGiV.js → neptune-provider-DzedCIWf.js} +4 -4
  15. package/dist/{neptune-provider-BsA7jGiV.js.map → neptune-provider-DzedCIWf.js.map} +1 -1
  16. package/dist/{program-DyYTFxF-.js → program-lQLBOfU6.js} +45 -7
  17. package/dist/program-lQLBOfU6.js.map +1 -0
  18. package/dist/{provider-classes-DOr3JVGp.js → provider-classes-DTgKRk4t.js} +355 -50
  19. package/dist/provider-classes-DTgKRk4t.js.map +1 -0
  20. package/dist/{rds-provider-CIjO2Do5.js → rds-provider-BenOBQ9u.js} +50 -6
  21. package/dist/rds-provider-BenOBQ9u.js.map +1 -0
  22. package/dist/{version-C3yhae4b.js → version-DWSVZXE5.js} +2 -2
  23. package/dist/{version-C3yhae4b.js.map → version-DWSVZXE5.js.map} +1 -1
  24. package/package.json +1 -1
  25. package/dist/created-resource-sink-BpB3iPvn.js.map +0 -1
  26. package/dist/deploy-engine-CVYhHEgq.js.map +0 -1
  27. package/dist/program-DyYTFxF-.js.map +0 -1
  28. package/dist/provider-classes-DOr3JVGp.js.map +0 -1
  29. package/dist/rds-provider-CIjO2Do5.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import { r as getAwsClients, s as withApiGatewayPacing } from "./aws-clients-DWpHZk2l.js";
2
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-DiHodi76.js";
3
- import { $ as isTerminalDeleteFailure, A as setBounded, Ar as isThrottlingError, At as stateOrphanRecordRemedy, B as normalizeAwsTagsToCfn, C as AmbiguousCreateLatch, Cr as isExplicitDenyError, Ct as compositeIdFormatMessage, D as isInsideWindow, Dt as packCompositeId, E as createAttemptKey, Er as isTransientServerError, Et as logicalIdShown, F as assertRegionMatch, Fn as ResourceUpdateNotSupportedError, Ft as maskerOrIdentity, Gt as markAuxiliaryFailure, H as refusalTypeShown, I as VALUE_NOT_SHOWN, It as withDerivedNameMasks, J as deleteAfterProtectionFlipWithFinalSnapshot, K as ProtectionFlipRegistry, Kt as markCreatedBeforeFailure, L as isPlainImportJson, M as RESOURCE_NOT_FOUND, Mr as markRedactedCause, Mt as createMaskedRetryLogger, Nn as ProvisioningError, Nr as wrapMaskedAwsError, Nt as isSecretDerivedValue, O as replayFollowedAmbiguousAttempt, Or as THROTTLING_ERROR_NAMES, P as markNotGone, Pt as maskDeep, Q as isTerminalDbWaitStatus, Qn as pasteableCommand, R as isPlainImportValue, S as AMBIGUOUS_LATCH_TTL_MS, Sr as isAmbiguousOutcomeError, St as canonicalizeRoute53QueryName, T as ambiguousAttemptLead, Tr as isRetryableTransientError, Tt as compositeIdSkipResult, U as remedyLogicalId, Ut as isAuxiliaryFailure, V as quotedRemedyLogicalId, W as resolveExplicitPhysicalId, Xn as hasClauseBreak, Y as deleteWithProtectionCompensation, Yn as commandHole, Z as isProceedDbStatus, Zn as isInertUnquoted, b as withRemovalDefaults, bt as isInterruptedWaitError, ct as UNNAMEABLE_ID_CLAUSE, d as onlySecretDerived, dn as withPasteableAwsProfile, dt as pasteableAwsCommand, er as plainOrDescribed, et as logGroupProtectionSite, f as readPrincipalLists, fn as ambientClientDefaults, ft as protectedReplacementAdvice, g as clearOnUpdateRemoval, gn as AccountIdUnavailableError, hn as credentialFingerprint, hr as relayedNameCollision, ht as ElapsedBudgetRegistry, i as reportCreatedResource, ir as withheldTargetClause, j as withoutServerErrorRetries, jr as markNonRetryable, jt as createMaskedLogSinks, k as replayedSendWindow, kr as isMarkedNonRetryable, kt as segmentAfterAnchor, l as SECRET_DERIVED_READ_LIVE, lt as WITHHELD_AWS_COMMAND, m as recordedPrincipalsRepair, mn as clientDefaultsFor, mr as markReplayMayCollide, mt as ElapsedBudget, nt as protectionFlipKey, o as retractCreatedResource, on as injectiveKey, ot as userPoolProtectionSite, pn as ambientCredentialConfig, pr as markNameCollision, pt as renderDisableCommand, qt as markSupersedesEarlierCreate, rr as shellQuote, rt as rdsFamilyProtectionSite, sn as injectiveKeyPrefix, tt as observeThenDisableProtection, u as holdsSecretDerivedEntry, ut as isAwsCliLiteral, vn as CdkdError, w as RecentIdSet, wt as compositeIdSeparatorRefusal, xt as startInterruptWatch, y as removedTemplateKeys, yr as explicitDenyPolicyKind, z as isQuotableImportValue, zt as clearCreatedBeforeFailure } from "./created-resource-sink-BpB3iPvn.js";
3
+ import { $ as isTerminalDeleteFailure, A as setBounded, Ar as isThrottlingError, At as stateOrphanRecordRemedy, B as normalizeAwsTagsToCfn, C as AmbiguousCreateLatch, Cr as isExplicitDenyError, Ct as compositeIdFormatMessage, D as isInsideWindow, Dt as packCompositeId, E as createAttemptKey, Er as isTransientServerError, Et as logicalIdShown, F as assertRegionMatch, Fn as ResourceUpdateNotSupportedError, Ft as maskerOrIdentity, Gt as markAuxiliaryFailure, H as refusalTypeShown, I as VALUE_NOT_SHOWN, It as withDerivedNameMasks, J as deleteAfterProtectionFlipWithFinalSnapshot, K as ProtectionFlipRegistry, Kt as markCreatedBeforeFailure, L as isPlainImportJson, M as RESOURCE_NOT_FOUND, Mr as markRedactedCause, Mt as createMaskedRetryLogger, Nn as ProvisioningError, Nr as wrapMaskedAwsError, Nt as isSecretDerivedValue, O as replayFollowedAmbiguousAttempt, Or as THROTTLING_ERROR_NAMES, P as markNotGone, Pt as maskDeep, Q as isTerminalDbWaitStatus, Qn as pasteableCommand, R as isPlainImportValue, S as AMBIGUOUS_LATCH_TTL_MS, Sr as isAmbiguousOutcomeError, St as canonicalizeRoute53QueryName, T as ambiguousAttemptLead, Tr as isRetryableTransientError, Tt as compositeIdSkipResult, U as remedyLogicalId, Ut as isAuxiliaryFailure, V as quotedRemedyLogicalId, W as resolveExplicitPhysicalId, Xn as hasClauseBreak, Y as deleteWithProtectionCompensation, Yn as commandHole, Z as isProceedDbStatus, Zn as isInertUnquoted, b as withRemovalDefaults, bt as isInterruptedWaitError, ct as UNNAMEABLE_ID_CLAUSE, d as onlySecretDerived, dn as withPasteableAwsProfile, dt as pasteableAwsCommand, er as plainOrDescribed, et as logGroupProtectionSite, f as readPrincipalLists, fn as ambientClientDefaults, ft as protectedReplacementAdvice, g as clearOnUpdateRemoval, gn as AccountIdUnavailableError, hn as credentialFingerprint, hr as relayedNameCollision, ht as ElapsedBudgetRegistry, i as reportCreatedResource, ir as withheldTargetClause, j as withoutServerErrorRetries, jr as markNonRetryable, jt as createMaskedLogSinks, k as replayedSendWindow, kr as isMarkedNonRetryable, kt as segmentAfterAnchor, l as SECRET_DERIVED_READ_LIVE, lt as WITHHELD_AWS_COMMAND, m as recordedPrincipalsRepair, mn as clientDefaultsFor, mr as markReplayMayCollide, mt as ElapsedBudget, nt as protectionFlipKey, o as retractCreatedResource, on as injectiveKey, ot as userPoolProtectionSite, pn as ambientCredentialConfig, pr as markNameCollision, pt as renderDisableCommand, qt as markSupersedesEarlierCreate, rr as shellQuote, rt as rdsFamilyProtectionSite, sn as injectiveKeyPrefix, tt as observeThenDisableProtection, u as holdsSecretDerivedEntry, ut as isAwsCliLiteral, vn as CdkdError, w as RecentIdSet, wt as compositeIdSeparatorRefusal, xt as startInterruptWatch, y as removedTemplateKeys, yr as explicitDenyPolicyKind, z as isQuotableImportValue, zt as clearCreatedBeforeFailure } from "./created-resource-sink-CmrPwGge.js";
4
4
  import { c as ambientRegion } from "./aws-client-defaults-BLXFsfMa.js";
5
- import { $ as sendTtlWaitingOutRateLimit, A as DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, B as deleteTableWithIndexBusyRetry, Ba as s3BucketArn, Bc as passedNoEchoParametersOf, Bi as isRefusedByName, C as planContributorInsightsOp, Cl as recordAttributeIdCopy, Ct as enclosingDeadlineExpired, D as reverseMapTableContributorInsights, Da as reDisableInstanceApiTermination, Dc as lambdaFunctionNameForMask, E as reverseMapIndexContributorInsights, Ea as observeThenDisableInstanceApiTermination, Ec as canonicalLambdaFunctionName, El as carriesSecretMask, Eo as parseWebACLArn, F as resolveDynamoDbDeleteBudgetClock, Fd as displayAssemblyPath, G as readbackVectorIndexes, Gi as readTagList, Gn as isRedactedRecordedValue, H as relayedIndexBusyDelete, Ha as s3BucketDualStackDomainName, Hi as DBPROXY_TAGS_WHAT, Hn as getCurrentProducerRegions, I as resolveDynamoDbDeleteBudgetMs, Id as renderAssemblyPathEscape, Ii as acquireIdempotencyToken, Io as accountArgs, J as vectorIndexesShapeDetail, Jc as recordReferenceProvenanceEntry, Ji as tagPlanWarning, Js as withoutSilentDropProperties, Jt as getCurrentNestedStackContext, K as vectorIndexesForCreate, Kc as markSameGenerationBag, Ki as refuseMalformedDesiredTags, Kn as redactedDeleteAddressFields, Ks as findSilentDropProperties, L as DELETE_INDEX_WAIT_PROCEED_NOTE, Ld as resolveAssemblyPath, M as beginDeleteWait, Mi as earliestDefined, N as compensateRemovedDeletionProtection, O as stripIndexContributorInsights, Oa as reEnableInstanceApiTermination, Oc as sameLambdaFunctionAddress, P as deleteBudgetKey, Pd as describeFileReadFailure, Pi as reserveStackCreateToken, Q as readTtlSpec, Qc as hasMaskableValues, R as INDEX_SETTLE_POLL_INTERVAL_MS, S as indexDeclaresContributorInsights, Sa as markWaitAbandoned, Sc as blockDeviceMappingsDifferOnlyInDeleteOnTermination, Sl as physicalNameCopiesOf, T as readContributorInsightsSpec, Ta as isTerminationProtectionPropagationError, Tc as emrClusterInstancesReplaced, U as waitForIndexesSettled, Ua as s3BucketRegionalDomainName, Ui as DBPROXY_TAG_OPTIONS, Ur as replacedDeleteFailureVerdict, Us as withheldAccountClause, V as maskedLogger, Va as s3BucketDomainName, Vi as markDeleteStarted, Vr as getStackRecords, Vt as getNestedRevertRun, W as planVectorIndexUpdates, Wa as s3BucketWebsiteUrl, Wi as planTagDiff, Wn as REDACTED_DELETE_ADDRESS_SKIP_REASON, Wt as revertNestedChildFromJournal, X as isTtlRateLimited, Xi as stringifyIfAssigned, Y as isTtlAlreadyDisabled, Ya as outputReferenceProvenanceOf, Yc as snapshotPassProvenance, Yi as definedAttributes, Yt as withNestedStackContext, Z as planTimeToLive, _ as streamMemberRefusals, _c as requireConfigString, _d as decodeListingKey, _t as renderNestedTemplateTreeDefect, ac as isWarmThroughputDecrease, an as chunks, at as markRefusedBeforeApplying, b as CONTRIBUTOR_INSIGHTS_KEY, ba as withIndeterminateGuard, bd as canonicalizeRegion, c as DynamoDBGlobalTableProvider, cc as coerceCfnBoolean, cn as withApiLimit, d as declaredStreamPolicyMember, dc as configIntegerRefusal, ds as refuseMalformedNestedChildOutputs, et as ECR_AUTO_DELETE_IMAGES_TAG, f as declaredStreamTagsMember, fa as slowCcOperationTimeoutMs, fc as configStringRefusal, fl as withoutPhysicalNameCopies, g as streamDeclaresTags, gc as requireConfigObject, gt as listNestedTemplateRows, h as streamDeclaresPolicy, hc as requireConfigArray, ho as getAccountInfo, ht as isAbsoluteAssetPath, ic as coerceWarmThroughput$1, it as getPriorAttempts, j as DYNAMODB_DELETE_POLL_COST_MS, ja as isUsableAttemptedName, js as refuseMalformedResourcesForDestroy, k as DYNAMODB_DELETE_DEADLINE_MARGIN_MS, ko as passedParameterClassesOf, l as STREAM_POLICY_KEY, lc as coerceCfnInteger, m as reverseMapStreamPolicy, ma as unchangedBehindSecretReference, mc as replayWarn, ml as dynamicReferenceTokens, mt as findNestedTemplateTreeDefect, na as waitForLambdaFunctionActive, nt as hasCdkAutoDeleteTag, oa as getCurrentResourceSecrets, oc as toCfnInteger, on as isAccessDeniedError, p as planStreamMemberOps, pa as onlySecretReferencesDiffer, pc as readConfigString, pu as stringifyValue, q as vectorIndexesSettled, qc as redactForState, qi as tagMapAsList, qn as redactedDeleteAddressSkip, rc as WARM_THROUGHPUT_MEMBERS, rt as isTruthyCfnBoolean, sc as toFiniteNumber, sn as lookupEachName, t as DeployEngine, tt as S3_AUTO_DELETE_OBJECTS_TAG, u as STREAM_TAGS_KEY, uc as configBooleanRefusal, uu as timePhase, v as streamPolicyMatchesDeclared, vu as rewriteTemplateAssetReferences, w as planIndexContributorInsightsOps, wa as ec2InstanceProtectionSite, wc as ecsServiceLaunchTypeSetOrChanged, wt as enclosingDeadlineRemainingMs, x as contributorInsightsRefusals, xa as isWaitAbandonedError, xc as withRetry, xd as derivePartitionAndUrlSuffix, xl as recoverMaskedOutput, y as streamTagsMatchDeclared, ya as deleteSkipReason, yi as secretNamedAttributeNamesOf, z as TABLE_INDEX_NOUN, za as isSettledInstanceState, zr as awaitInFlightSibling } from "./deploy-engine-CVYhHEgq.js";
6
- import { a as IamCreateClientCache, i as isEntityAlreadyExists, n as collectInlinePolicyNamesManagedBySiblings, r as iamEntityLeftByThisCreate, t as IAMRoleProvider } from "./iam-role-provider-qTIqSmlf.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-DyYTFxF-.js";
8
- import { n as modifyDbInstanceWhenAvailable } from "./db-instance-modify-retry-CspmK57I.js";
9
- import { RDSProvider } from "./rds-provider-CIjO2Do5.js";
10
- import { NeptuneProvider } from "./neptune-provider-BsA7jGiV.js";
11
- import { ASGProvider } from "./asg-provider-T9K-NVi8.js";
5
+ import { $ as sendTtlWaitingOutRateLimit, A as DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS, B as deleteTableWithIndexBusyRetry, Ba as s3BucketArn, Bc as passedNoEchoParametersOf, Bi as isRefusedByName, C as planContributorInsightsOp, Cl as recordAttributeIdCopy, Ct as enclosingDeadlineExpired, D as reverseMapTableContributorInsights, Da as reDisableInstanceApiTermination, Dc as lambdaFunctionNameForMask, E as reverseMapIndexContributorInsights, Ea as observeThenDisableInstanceApiTermination, Ec as canonicalLambdaFunctionName, El as carriesSecretMask, Eo as parseWebACLArn, F as resolveDynamoDbDeleteBudgetClock, Fd as displayAssemblyPath, G as readbackVectorIndexes, Gi as readTagList, Gn as isRedactedRecordedValue, H as relayedIndexBusyDelete, Ha as s3BucketDualStackDomainName, Hi as DBPROXY_TAGS_WHAT, Hn as getCurrentProducerRegions, I as resolveDynamoDbDeleteBudgetMs, Id as renderAssemblyPathEscape, Ii as acquireIdempotencyToken, Io as accountArgs, J as vectorIndexesShapeDetail, Jc as recordReferenceProvenanceEntry, Ji as tagPlanWarning, Js as withoutSilentDropProperties, Jt as getCurrentNestedStackContext, K as vectorIndexesForCreate, Kc as markSameGenerationBag, Ki as refuseMalformedDesiredTags, Kn as redactedDeleteAddressFields, Ks as findSilentDropProperties, L as DELETE_INDEX_WAIT_PROCEED_NOTE, Ld as resolveAssemblyPath, M as beginDeleteWait, Mi as earliestDefined, N as compensateRemovedDeletionProtection, O as stripIndexContributorInsights, Oa as reEnableInstanceApiTermination, Oc as sameLambdaFunctionAddress, P as deleteBudgetKey, Pd as describeFileReadFailure, Pi as reserveStackCreateToken, Q as readTtlSpec, Qc as hasMaskableValues, R as INDEX_SETTLE_POLL_INTERVAL_MS, Rr as refuseRestoreFromItself, S as indexDeclaresContributorInsights, Sa as markWaitAbandoned, Sc as blockDeviceMappingsDifferOnlyInDeleteOnTermination, Sl as physicalNameCopiesOf, T as readContributorInsightsSpec, Ta as isTerminationProtectionPropagationError, Tc as emrClusterInstancesReplaced, U as waitForIndexesSettled, Ua as s3BucketRegionalDomainName, Ui as DBPROXY_TAG_OPTIONS, Ur as replacedDeleteFailureVerdict, Us as withheldAccountClause, V as maskedLogger, Va as s3BucketDomainName, Vi as markDeleteStarted, Vr as getStackRecords, Vt as getNestedRevertRun, W as planVectorIndexUpdates, Wa as s3BucketWebsiteUrl, Wi as planTagDiff, Wn as REDACTED_DELETE_ADDRESS_SKIP_REASON, Wt as revertNestedChildFromJournal, X as isTtlRateLimited, Xi as stringifyIfAssigned, Y as isTtlAlreadyDisabled, Ya as outputReferenceProvenanceOf, Yc as snapshotPassProvenance, Yi as definedAttributes, Yt as withNestedStackContext, Z as planTimeToLive, _ as streamMemberRefusals, _c as requireConfigString, _d as decodeListingKey, _t as renderNestedTemplateTreeDefect, ac as isWarmThroughputDecrease, an as chunks, at as markRefusedBeforeApplying, b as CONTRIBUTOR_INSIGHTS_KEY, ba as withIndeterminateGuard, bd as canonicalizeRegion, c as DynamoDBGlobalTableProvider, cc as coerceCfnBoolean, cn as withApiLimit, d as declaredStreamPolicyMember, dc as configIntegerRefusal, ds as refuseMalformedNestedChildOutputs, et as ECR_AUTO_DELETE_IMAGES_TAG, f as declaredStreamTagsMember, fa as slowCcOperationTimeoutMs, fc as configStringRefusal, fl as withoutPhysicalNameCopies, g as streamDeclaresTags, gc as requireConfigObject, gt as listNestedTemplateRows, h as streamDeclaresPolicy, hc as requireConfigArray, ho as getAccountInfo, ht as isAbsoluteAssetPath, ic as coerceWarmThroughput$1, it as getPriorAttempts, j as DYNAMODB_DELETE_POLL_COST_MS, ja as isUsableAttemptedName, js as refuseMalformedResourcesForDestroy, k as DYNAMODB_DELETE_DEADLINE_MARGIN_MS, ko as passedParameterClassesOf, l as STREAM_POLICY_KEY, lc as coerceCfnInteger, m as reverseMapStreamPolicy, ma as unchangedBehindSecretReference, mc as replayWarn, ml as dynamicReferenceTokens, mt as findNestedTemplateTreeDefect, na as waitForLambdaFunctionActive, nt as hasCdkAutoDeleteTag, oa as getCurrentResourceSecrets, oc as toCfnInteger, on as isAccessDeniedError, p as planStreamMemberOps, pa as onlySecretReferencesDiffer, pc as readConfigString, pu as stringifyValue, q as vectorIndexesSettled, qc as redactForState, qi as tagMapAsList, qn as redactedDeleteAddressSkip, rc as WARM_THROUGHPUT_MEMBERS, rt as isTruthyCfnBoolean, sc as toFiniteNumber, sn as lookupEachName, t as DeployEngine, tt as S3_AUTO_DELETE_OBJECTS_TAG, u as STREAM_TAGS_KEY, uc as configBooleanRefusal, uu as timePhase, v as streamPolicyMatchesDeclared, vu as rewriteTemplateAssetReferences, w as planIndexContributorInsightsOps, wa as ec2InstanceProtectionSite, wc as ecsServiceLaunchTypeSetOrChanged, wt as enclosingDeadlineRemainingMs, x as contributorInsightsRefusals, xa as isWaitAbandonedError, xc as withRetry, xd as derivePartitionAndUrlSuffix, xl as recoverMaskedOutput, y as streamTagsMatchDeclared, ya as deleteSkipReason, yi as secretNamedAttributeNamesOf, z as TABLE_INDEX_NOUN, za as isSettledInstanceState, zr as awaitInFlightSibling } from "./deploy-engine-pGWgnV-6.js";
6
+ import { a as IamCreateClientCache, i as isEntityAlreadyExists, n as collectInlinePolicyNamesManagedBySiblings, r as iamEntityLeftByThisCreate, t as IAMRoleProvider } from "./iam-role-provider-z7poP-9w.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-lQLBOfU6.js";
8
+ import { n as modifyDbInstanceWhenAvailable } from "./db-instance-modify-retry-DCLA_p9I.js";
9
+ import { RDSProvider } from "./rds-provider-BenOBQ9u.js";
10
+ import { NeptuneProvider } from "./neptune-provider-DzedCIWf.js";
11
+ import { ASGProvider } from "./asg-provider-DIQU27yo.js";
12
12
  import { createHash, randomUUID } from "node:crypto";
13
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";
@@ -44,7 +44,7 @@ import * as zlib from "node:zlib";
44
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
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
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, DescribeGlobalClustersCommand as DescribeGlobalClustersCommand$1, DocDBClient, ListTagsForResourceCommand as ListTagsForResourceCommand$13, ModifyDBClusterCommand as ModifyDBClusterCommand$1, ModifyDBInstanceCommand as ModifyDBInstanceCommand$1, ModifyDBSubnetGroupCommand as ModifyDBSubnetGroupCommand$1, RemoveFromGlobalClusterCommand as RemoveFromGlobalClusterCommand$1, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$3 } from "@aws-sdk/client-docdb";
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, DescribeDBClusterSnapshotsCommand, DescribeDBClustersCommand as DescribeDBClustersCommand$1, DescribeDBInstancesCommand as DescribeDBInstancesCommand$1, DescribeDBSubnetGroupsCommand as DescribeDBSubnetGroupsCommand$1, DescribeGlobalClustersCommand as DescribeGlobalClustersCommand$1, DocDBClient, ListTagsForResourceCommand as ListTagsForResourceCommand$13, ModifyDBClusterCommand as ModifyDBClusterCommand$1, ModifyDBInstanceCommand as ModifyDBInstanceCommand$1, ModifyDBSubnetGroupCommand as ModifyDBSubnetGroupCommand$1, RemoveFromGlobalClusterCommand as RemoveFromGlobalClusterCommand$1, RemoveTagsFromResourceCommand as RemoveTagsFromResourceCommand$3, RestoreDBClusterFromSnapshotCommand, RestoreDBClusterToPointInTimeCommand } from "@aws-sdk/client-docdb";
48
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
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
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";
@@ -17402,6 +17402,7 @@ function routeTargetParams(properties) {
17402
17402
  EgressOnlyInternetGatewayId: properties["EgressOnlyInternetGatewayId"] ?? void 0,
17403
17403
  InstanceId: properties["InstanceId"] ?? void 0,
17404
17404
  NetworkInterfaceId: properties["NetworkInterfaceId"] ?? void 0,
17405
+ OdbNetworkArn: properties["OdbNetworkArn"] ?? void 0,
17405
17406
  TransitGatewayId: properties["TransitGatewayId"] ?? void 0,
17406
17407
  VpcEndpointId: properties["VpcEndpointId"] ?? void 0,
17407
17408
  VpcPeeringConnectionId: properties["VpcPeeringConnectionId"] ?? void 0
@@ -17723,6 +17724,7 @@ var EC2Provider = class {
17723
17724
  "EgressOnlyInternetGatewayId",
17724
17725
  "InstanceId",
17725
17726
  "NetworkInterfaceId",
17727
+ "OdbNetworkArn",
17726
17728
  "TransitGatewayId",
17727
17729
  "VpcEndpointId",
17728
17730
  "VpcPeeringConnectionId"
@@ -21428,6 +21430,7 @@ var EC2Provider = class {
21428
21430
  if (route.LocalGatewayId !== void 0) result["LocalGatewayId"] = route.LocalGatewayId;
21429
21431
  if (route.CarrierGatewayId !== void 0) result["CarrierGatewayId"] = route.CarrierGatewayId;
21430
21432
  if (route.CoreNetworkArn !== void 0) result["CoreNetworkArn"] = route.CoreNetworkArn;
21433
+ if (route.OdbNetworkArn !== void 0) result["OdbNetworkArn"] = route.OdbNetworkArn;
21431
21434
  return result;
21432
21435
  }
21433
21436
  async readSubnetRouteTableAssociationCurrentState(physicalId) {
@@ -27226,6 +27229,10 @@ function isEcsErrorNamed(error, names) {
27226
27229
  return typeof name === "string" && names.includes(name);
27227
27230
  }
27228
27231
  const settleRolloutDelays = { sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)) };
27232
+ const serviceInactiveWait = {
27233
+ sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
27234
+ now: () => Date.now()
27235
+ };
27229
27236
  function requestedRolloutOf(service) {
27230
27237
  if (!service) return void 0;
27231
27238
  const primary = service.deployments?.find((d) => d.status === "PRIMARY");
@@ -27283,6 +27290,23 @@ function rolloutSupersededBy(requested, settled) {
27283
27290
  function markNotGoneOnNotFoundClass$1(error, wrapped) {
27284
27291
  return error instanceof Error && error.name.includes("NotFound") ? markNotGone(wrapped) : wrapped;
27285
27292
  }
27293
+ function gatewayConnectorsGateKey(value) {
27294
+ if (!Array.isArray(value)) return JSON.stringify(value ?? null);
27295
+ return JSON.stringify(value.map((connector) => {
27296
+ if (typeof connector !== "object" || connector === null || Array.isArray(connector)) return connector;
27297
+ const filters = connector["Filters"];
27298
+ if (typeof filters !== "object" || filters === null || Array.isArray(filters)) return connector;
27299
+ const accessTypes = filters["AccessTypes"];
27300
+ if (!Array.isArray(accessTypes)) return connector;
27301
+ return {
27302
+ ...connector,
27303
+ Filters: {
27304
+ ...filters,
27305
+ AccessTypes: accessTypes.map((v) => JSON.stringify(v) ?? "undefined").sort()
27306
+ }
27307
+ };
27308
+ }));
27309
+ }
27286
27310
  var ECSProvider = class {
27287
27311
  ecsClient;
27288
27312
  taskDefinitionCreateClient;
@@ -27345,7 +27369,8 @@ var ECSProvider = class {
27345
27369
  "Role",
27346
27370
  "ServiceConnectConfiguration",
27347
27371
  "VolumeConfigurations",
27348
- "VpcLatticeConfigurations"
27372
+ "VpcLatticeConfigurations",
27373
+ "GatewayConnectors"
27349
27374
  ])]
27350
27375
  ]);
27351
27376
  unhandledByDesign = /* @__PURE__ */ new Map([["AWS::ECS::TaskDefinition", /* @__PURE__ */ new Map([["InferenceAccelerators", "AWS Elastic Inference end-of-life 2024-04; use AWS Inferentia / Trainium accelerator instance families instead"]])]]);
@@ -27701,7 +27726,8 @@ var ECSProvider = class {
27701
27726
  serviceConnectConfiguration: this.convertServiceConnectConfiguration(properties["ServiceConnectConfiguration"]),
27702
27727
  volumeConfigurations: this.convertServiceVolumeConfigurations(properties["VolumeConfigurations"]),
27703
27728
  vpcLatticeConfigurations: this.convertVpcLatticeConfigurations(properties["VpcLatticeConfigurations"]),
27704
- monitoring: this.convertMonitoringConfiguration(properties["Monitoring"])
27729
+ monitoring: this.convertMonitoringConfiguration(properties["Monitoring"]),
27730
+ gatewayConnectors: this.convertGatewayConnectors(properties["GatewayConnectors"])
27705
27731
  }))).service;
27706
27732
  if (!service || !service.serviceArn) throw new Error("CreateService did not return service ARN");
27707
27733
  log.debug(`Successfully created ECS service ${logicalId}: ${service.serviceArn}`);
@@ -27908,6 +27934,7 @@ var ECSProvider = class {
27908
27934
  const volumeConfigurationsInput = JSON.stringify(previousProperties["VolumeConfigurations"] ?? null) !== JSON.stringify(properties["VolumeConfigurations"] ?? null) ? clearOnUpdateRemoval(this.convertServiceVolumeConfigurations(properties["VolumeConfigurations"]), previousProperties["VolumeConfigurations"], []) : void 0;
27909
27935
  const vpcLatticeConfigurationsInput = JSON.stringify(previousProperties["VpcLatticeConfigurations"] ?? null) !== JSON.stringify(properties["VpcLatticeConfigurations"] ?? null) ? clearOnUpdateRemoval(this.convertVpcLatticeConfigurations(properties["VpcLatticeConfigurations"]), previousProperties["VpcLatticeConfigurations"], []) : void 0;
27910
27936
  const monitoringInput = JSON.stringify(previousProperties["Monitoring"] ?? null) !== JSON.stringify(properties["Monitoring"] ?? null) ? clearOnUpdateRemoval(this.convertMonitoringConfiguration(properties["Monitoring"]), previousProperties["Monitoring"], { metricConfigurations: [] }) : void 0;
27937
+ const gatewayConnectorsInput = gatewayConnectorsGateKey(previousProperties["GatewayConnectors"]) !== gatewayConnectorsGateKey(properties["GatewayConnectors"]) ? this.convertGatewayConnectors(properties["GatewayConnectors"]) : void 0;
27911
27938
  const forceNewDeploymentInput = this.resolveForceNewDeployment(properties, previousProperties, log);
27912
27939
  const deploymentConfigurationInput = this.resolveDeploymentConfiguration(properties, previousProperties);
27913
27940
  try {
@@ -27934,6 +27961,7 @@ var ECSProvider = class {
27934
27961
  volumeConfigurations: volumeConfigurationsInput,
27935
27962
  vpcLatticeConfigurations: vpcLatticeConfigurationsInput,
27936
27963
  monitoring: monitoringInput,
27964
+ gatewayConnectors: gatewayConnectorsInput,
27937
27965
  forceNewDeployment: forceNewDeploymentInput
27938
27966
  }))).service;
27939
27967
  if (service?.serviceArn) await this.applyTagDiff(service.serviceArn, resourceType, logicalId, previousProperties["Tags"], properties["Tags"], log);
@@ -27969,6 +27997,7 @@ var ECSProvider = class {
27969
27997
  }
27970
27998
  } else cluster = recordedCluster;
27971
27999
  let stripped = false;
28000
+ let alreadyDeleted = false;
27972
28001
  try {
27973
28002
  try {
27974
28003
  await client.send(new UpdateServiceCommand({
@@ -27984,27 +28013,57 @@ var ECSProvider = class {
27984
28013
  const clientRegion = await client.config.region();
27985
28014
  assertRegionMatch(clientRegion, context?.expectedRegion, resourceType, logicalId, physicalId);
27986
28015
  this.logger.debug(`ECS service ${physicalId} not found during scale down, skipping deletion`);
27987
- return;
27988
- }
27989
- throw error;
28016
+ if (!this.isServiceNotActiveException(error)) return;
28017
+ alreadyDeleted = true;
28018
+ } else throw error;
28019
+ }
28020
+ if (!alreadyDeleted) {
28021
+ await client.send(new DeleteServiceCommand({
28022
+ cluster,
28023
+ service: physicalId,
28024
+ force: true
28025
+ }));
28026
+ this.logger.debug(`Successfully deleted ECS service ${logicalId}`);
27990
28027
  }
27991
- await client.send(new DeleteServiceCommand({
27992
- cluster,
27993
- service: physicalId,
27994
- force: true
27995
- }));
27996
- this.logger.debug(`Successfully deleted ECS service ${logicalId}`);
27997
28028
  } catch (error) {
27998
28029
  if (this.isServiceNotFoundException(error)) {
27999
28030
  const clientRegion = await client.config.region();
28000
28031
  assertRegionMatch(clientRegion, context?.expectedRegion, resourceType, logicalId, physicalId);
28001
28032
  this.logger.debug(`ECS service ${physicalId} not found, skipping deletion`);
28002
- return;
28033
+ if (!this.isServiceNotActiveException(error)) return;
28034
+ } else {
28035
+ const cause = error instanceof Error ? error : void 0;
28036
+ const wrapped = this.wrapCaughtError(maskerOrIdentity(context?.maskSecrets), error, (text) => new ProvisioningError(`Failed to delete ECS service ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
28037
+ const failure = this.isClusterNotFoundException(error) ? wrapped : markNotGoneOnNotFoundClass$1(error, wrapped);
28038
+ throw stripped ? markDeleteStarted(failure) : failure;
28003
28039
  }
28004
- const cause = error instanceof Error ? error : void 0;
28005
- const wrapped = this.wrapCaughtError(maskerOrIdentity(context?.maskSecrets), error, (text) => new ProvisioningError(`Failed to delete ECS service ${logicalId}: ${text}`, resourceType, logicalId, physicalId, cause));
28006
- const failure = this.isClusterNotFoundException(error) ? wrapped : markNotGoneOnNotFoundClass$1(error, wrapped);
28007
- throw stripped ? markDeleteStarted(failure) : failure;
28040
+ }
28041
+ await this.waitForServiceInactive(logicalId, physicalId, cluster, resourceType);
28042
+ }
28043
+ async waitForServiceInactive(logicalId, physicalId, cluster, resourceType) {
28044
+ const client = this.getClient();
28045
+ const maxWaitSeconds = Math.max(600, (resolvedResourceTimeoutMs("AWS::ECS::Service") ?? 0) / 1e3);
28046
+ const deadline = serviceInactiveWait.now() + maxWaitSeconds * 1e3;
28047
+ let delay = 2e3;
28048
+ let lastStatus = "unknown";
28049
+ for (;;) {
28050
+ try {
28051
+ const out = await client.send(new DescribeServicesCommand({
28052
+ cluster,
28053
+ services: [physicalId]
28054
+ }));
28055
+ if ((out?.failures ?? []).some((failure) => failure.reason === "MISSING")) return;
28056
+ const status = out?.services?.[0]?.status;
28057
+ if (status === "INACTIVE") return;
28058
+ lastStatus = status ?? "unknown";
28059
+ } catch (error) {
28060
+ if (this.isClusterNotFoundException(error)) return;
28061
+ const readFailure = new ProvisioningError(`Failed to confirm ECS service ${logicalId} deletion: ${error instanceof Error ? error.name : "unknown error"}`, resourceType, logicalId, physicalId, error instanceof Error ? error : void 0);
28062
+ throw markDeleteStarted(readFailure);
28063
+ }
28064
+ if (serviceInactiveWait.now() >= deadline) throw markNonRetryable(markDeleteStarted(new ProvisioningError(`ECS service ${logicalIdShown(logicalId)} was deleted but did not reach INACTIVE within ${maxWaitSeconds}s (last status: ${lastStatus}). Re-run once the service is INACTIVE, or raise the limit with --resource-timeout AWS::ECS::Service=${commandHole("duration")}.`, resourceType, logicalId, physicalId)));
28065
+ await serviceInactiveWait.sleep(delay);
28066
+ delay = Math.min(delay * 2, 1e4);
28008
28067
  }
28009
28068
  }
28010
28069
  async getServiceAttribute(physicalId, attributeName) {
@@ -28477,6 +28536,10 @@ var ECSProvider = class {
28477
28536
  if (!items) return void 0;
28478
28537
  return pascalToCamelCaseKeys(items);
28479
28538
  }
28539
+ convertGatewayConnectors(items) {
28540
+ if (!items) return void 0;
28541
+ return pascalToCamelCaseKeys(items);
28542
+ }
28480
28543
  convertMonitoringConfiguration(config) {
28481
28544
  if (!config) return void 0;
28482
28545
  return pascalToCamelCaseKeys(config);
@@ -28546,6 +28609,9 @@ var ECSProvider = class {
28546
28609
  if (error instanceof Error) return error.name === "ServiceNotFoundException" || error.name === "ServiceNotActiveException" || error.message.includes("service not found") || error.message.includes("Service not found");
28547
28610
  return false;
28548
28611
  }
28612
+ isServiceNotActiveException(error) {
28613
+ return error instanceof Error && error.name === "ServiceNotActiveException";
28614
+ }
28549
28615
  getDriftUnknownPaths(resourceType) {
28550
28616
  if (resourceType === "AWS::ECS::Service") return [
28551
28617
  "ServiceConnectConfiguration",
@@ -28553,7 +28619,8 @@ var ECSProvider = class {
28553
28619
  "VpcLatticeConfigurations",
28554
28620
  "Monitoring",
28555
28621
  "ForceNewDeployment",
28556
- "Role"
28622
+ "Role",
28623
+ "GatewayConnectors"
28557
28624
  ];
28558
28625
  return [];
28559
28626
  }
@@ -31694,6 +31761,82 @@ function instanceAttributes(instance) {
31694
31761
  function isDbIdentifier(id) {
31695
31762
  return id.length <= 63 && /^[A-Za-z](?:-?[A-Za-z0-9])*$/.test(id);
31696
31763
  }
31764
+ const ZONED_TIMESTAMP = /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:z|[+-]\d{2}:?\d{2})$/i;
31765
+ function readDocDBClusterRestore(properties, resourceType, logicalId) {
31766
+ const refuse = (reason) => {
31767
+ throw markNonRetryable(new ProvisioningError(safeMsg`DocDB DBCluster ${logicalId}: ${reason}, as CloudFormation requires; nothing was changed.`, resourceType, logicalId));
31768
+ };
31769
+ const identifier = (key) => {
31770
+ const value = properties[key];
31771
+ if (value == null) return void 0;
31772
+ return typeof value === "string" ? value || void 0 : refuse(`${key} must be a string`);
31773
+ };
31774
+ const snapshotIdentifier = identifier("SnapshotIdentifier");
31775
+ const sourceDBClusterIdentifier = identifier("SourceDBClusterIdentifier");
31776
+ if (snapshotIdentifier !== void 0 && sourceDBClusterIdentifier !== void 0) return refuse("SnapshotIdentifier and SourceDBClusterIdentifier cannot both be set");
31777
+ if (sourceDBClusterIdentifier === void 0) return snapshotIdentifier === void 0 ? void 0 : {
31778
+ kind: "snapshot",
31779
+ snapshotIdentifier
31780
+ };
31781
+ const declaredTime = properties["RestoreToTime"];
31782
+ let restoreToTime;
31783
+ if (declaredTime != null && declaredTime !== "") {
31784
+ restoreToTime = typeof declaredTime === "string" && ZONED_TIMESTAMP.test(declaredTime) ? new Date(declaredTime) : void 0;
31785
+ if (restoreToTime === void 0 || Number.isNaN(restoreToTime.getTime())) return refuse("RestoreToTime must be a timestamp with a time zone, such as 2026-01-01T00:00:00Z");
31786
+ }
31787
+ const declaredLatest = properties["UseLatestRestorableTime"];
31788
+ const latest = declaredLatest == null ? false : coerceCfnBoolean(declaredLatest);
31789
+ if (latest === void 0) return refuse("UseLatestRestorableTime must be a boolean");
31790
+ if (restoreToTime !== void 0 && latest) return refuse("RestoreToTime and UseLatestRestorableTime: true cannot both be set");
31791
+ if (restoreToTime === void 0 && !latest) return refuse("a SourceDBClusterIdentifier restore needs RestoreToTime or UseLatestRestorableTime: true");
31792
+ const restoreType = properties["RestoreType"];
31793
+ if (restoreType != null && typeof restoreType !== "string") return refuse("RestoreType must be a string");
31794
+ return {
31795
+ kind: "point-in-time",
31796
+ sourceDBClusterIdentifier,
31797
+ restoreToTime
31798
+ };
31799
+ }
31800
+ function unusedRestoreKeys(properties, restore) {
31801
+ return (restore?.kind === "point-in-time" ? ["GlobalClusterIdentifier", "AvailabilityZones"] : [
31802
+ "RestoreType",
31803
+ "RestoreToTime",
31804
+ "UseLatestRestorableTime",
31805
+ ...restore === void 0 ? [] : ["GlobalClusterIdentifier"]
31806
+ ]).filter((key) => properties[key] != null && properties[key] !== "" && properties[key] !== false);
31807
+ }
31808
+ const CLUSTER_AVAILABLE_MAX_WAIT_MS = 18e5;
31809
+ function restoreWaitMs() {
31810
+ const remaining = enclosingDeadlineRemainingMs() - DEADLINE_MARGIN_MS;
31811
+ return Number.isFinite(remaining) ? Math.max(CLUSTER_AVAILABLE_MAX_WAIT_MS, remaining) : CLUSTER_AVAILABLE_MAX_WAIT_MS;
31812
+ }
31813
+ const RESTORE_VALUE_REFUSALS = /* @__PURE__ */ new Set(["InvalidParameterValue", "InvalidParameterCombination"]);
31814
+ function docdbRestoreFollowUp(properties, restore, password, managedPassword) {
31815
+ const nonEmpty = (members) => Object.values(members).some((value) => value !== void 0) ? members : void 0;
31816
+ const retention = numberOrUndefined(properties["BackupRetentionPeriod"]);
31817
+ const windows = {
31818
+ PreferredBackupWindow: properties["PreferredBackupWindow"],
31819
+ PreferredMaintenanceWindow: properties["PreferredMaintenanceWindow"]
31820
+ };
31821
+ const snapshot = restore.kind === "snapshot";
31822
+ return {
31823
+ parity: nonEmpty({
31824
+ DBClusterParameterGroupName: properties["DBClusterParameterGroupName"],
31825
+ ...snapshot && {
31826
+ BackupRetentionPeriod: retention,
31827
+ ...windows
31828
+ }
31829
+ }),
31830
+ declared: [
31831
+ ...snapshot ? [] : [nonEmpty({ BackupRetentionPeriod: retention }), nonEmpty(windows)],
31832
+ nonEmpty({ MasterUserPassword: password }),
31833
+ nonEmpty({
31834
+ ManageMasterUserPassword: managedPassword === true ? true : void 0,
31835
+ MasterUserSecretKmsKeyId: managedPassword === true ? properties["MasterUserSecretKmsKeyId"] : void 0
31836
+ })
31837
+ ].filter((group) => group !== void 0)
31838
+ };
31839
+ }
31697
31840
  var DocDBProvider = class {
31698
31841
  docdbClient;
31699
31842
  createClient;
@@ -31713,6 +31856,11 @@ var DocDBProvider = class {
31713
31856
  "MasterUserPassword",
31714
31857
  "RotateMasterUserPassword",
31715
31858
  "GlobalClusterIdentifier",
31859
+ "SnapshotIdentifier",
31860
+ "SourceDBClusterIdentifier",
31861
+ "RestoreToTime",
31862
+ "RestoreType",
31863
+ "UseLatestRestorableTime",
31716
31864
  ...DOCDB_CLUSTER_KEPT_ON_REMOVAL,
31717
31865
  ...DOCDB_CLUSTER_UNMEASURED_ON_REMOVAL
31718
31866
  ])], ["AWS::DocDB::DBInstance", /* @__PURE__ */ new Set([
@@ -31750,7 +31898,12 @@ var DocDBProvider = class {
31750
31898
  "NetworkType",
31751
31899
  "RotateMasterUserPassword",
31752
31900
  "ServerlessV2ScalingConfiguration",
31753
- "StorageType"
31901
+ "StorageType",
31902
+ "RestoreToTime",
31903
+ "RestoreType",
31904
+ "SnapshotIdentifier",
31905
+ "SourceDBClusterIdentifier",
31906
+ "UseLatestRestorableTime"
31754
31907
  ])], ["AWS::DocDB::DBInstance", /* @__PURE__ */ new Set([
31755
31908
  "DBInstanceIdentifier",
31756
31909
  "DBInstanceClass",
@@ -31821,43 +31974,75 @@ var DocDBProvider = class {
31821
31974
  this.logger.warn(safeMsg`${logicalId} (${resourceType}): the recorded GlobalClusterIdentifier is unusable, so it is not sent.`);
31822
31975
  }
31823
31976
  const globalClusterId = docdbGlobalClusterId(properties["GlobalClusterIdentifier"]);
31977
+ const restore = readDocDBClusterRestore(properties, resourceType, logicalId);
31978
+ const unused = unusedRestoreKeys(properties, restore);
31979
+ if (unused.length > 0) {
31980
+ const call = restore === void 0 ? "create" : restore.kind === "snapshot" ? "snapshot restore" : "point-in-time restore";
31981
+ this.logger.warn(safeMsg`${logicalId} (${resourceType}): this ${call} does not use ${unused.join(", ")}, as in CloudFormation.`);
31982
+ }
31824
31983
  const dbClusterIdentifier = properties["DBClusterIdentifier"] || generatedNameFor("AWS::DocDB::DBCluster", logicalId);
31984
+ if (!String(properties["SourceDBClusterIdentifier"]).startsWith("arn:")) refuseRestoreFromItself(resourceType, properties, dbClusterIdentifier, logicalId, { region: this.providerRegion });
31985
+ const port = properties["Port"] != null ? Number(properties["Port"]) : void 0;
31986
+ const kmsKeyId = properties["KmsKeyId"];
31987
+ const sharedInput = {
31988
+ DBClusterIdentifier: dbClusterIdentifier,
31989
+ VpcSecurityGroupIds: properties["VpcSecurityGroupIds"],
31990
+ DBSubnetGroupName: properties["DBSubnetGroupName"],
31991
+ KmsKeyId: kmsKeyId,
31992
+ DeletionProtection: properties["DeletionProtection"],
31993
+ CopyTagsToSnapshot: properties["CopyTagsToSnapshot"],
31994
+ NetworkType: properties["NetworkType"],
31995
+ StorageType: properties["StorageType"],
31996
+ ...logTypes !== void 0 && logTypes.length > 0 && { EnableCloudwatchLogsExports: logTypes },
31997
+ ...scaling != null && { ServerlessV2ScalingConfiguration: scaling },
31998
+ ...tags.length > 0 && { Tags: tags }
31999
+ };
32000
+ const restorePort = port ?? DOCDB_DEFAULT_PORT;
32001
+ if (restore !== void 0) await this.refuseUnencryptedRestoreSource(properties, restore, resourceType, logicalId, mask);
31825
32002
  let clusterCreated = false;
31826
32003
  let createdResourceId;
31827
32004
  try {
31828
- const response = await this.getCreateClient().send(new CreateDBClusterCommand$1({
31829
- DBClusterIdentifier: dbClusterIdentifier,
32005
+ const response = await (restore === void 0 ? this.getCreateClient().send(new CreateDBClusterCommand$1({
32006
+ ...sharedInput,
31830
32007
  Engine: "docdb",
31831
32008
  EngineVersion: properties["EngineVersion"],
31832
32009
  MasterUsername: properties["MasterUsername"],
31833
32010
  MasterUserPassword: password,
31834
- Port: properties["Port"] != null ? Number(properties["Port"]) : void 0,
31835
- VpcSecurityGroupIds: properties["VpcSecurityGroupIds"],
31836
- DBSubnetGroupName: properties["DBSubnetGroupName"],
32011
+ Port: port,
31837
32012
  StorageEncrypted: properties["StorageEncrypted"],
31838
- KmsKeyId: properties["KmsKeyId"],
31839
- BackupRetentionPeriod: properties["BackupRetentionPeriod"] != null ? Number(properties["BackupRetentionPeriod"]) : void 0,
32013
+ BackupRetentionPeriod: numberOrUndefined(properties["BackupRetentionPeriod"]),
31840
32014
  PreferredBackupWindow: properties["PreferredBackupWindow"],
31841
32015
  PreferredMaintenanceWindow: properties["PreferredMaintenanceWindow"],
31842
32016
  DBClusterParameterGroupName: properties["DBClusterParameterGroupName"],
31843
- DeletionProtection: properties["DeletionProtection"],
31844
32017
  AvailabilityZones: properties["AvailabilityZones"],
31845
- CopyTagsToSnapshot: properties["CopyTagsToSnapshot"],
31846
32018
  ManageMasterUserPassword: managedPassword,
31847
32019
  MasterUserSecretKmsKeyId: properties["MasterUserSecretKmsKeyId"],
31848
- NetworkType: properties["NetworkType"],
31849
- StorageType: properties["StorageType"],
31850
- ...globalClusterId !== void 0 && { GlobalClusterIdentifier: globalClusterId },
31851
- ...logTypes !== void 0 && logTypes.length > 0 && { EnableCloudwatchLogsExports: logTypes },
31852
- ...scaling != null && { ServerlessV2ScalingConfiguration: scaling },
31853
- ...tags.length > 0 && { Tags: tags }
31854
- }));
32020
+ ...globalClusterId !== void 0 && { GlobalClusterIdentifier: globalClusterId }
32021
+ })) : restore.kind === "snapshot" ? this.getCreateClient().send(new RestoreDBClusterFromSnapshotCommand({
32022
+ ...sharedInput,
32023
+ SnapshotIdentifier: restore.snapshotIdentifier,
32024
+ Engine: "docdb",
32025
+ EngineVersion: properties["EngineVersion"],
32026
+ Port: restorePort,
32027
+ AvailabilityZones: properties["AvailabilityZones"]
32028
+ })) : this.getCreateClient().send(new RestoreDBClusterToPointInTimeCommand({
32029
+ ...sharedInput,
32030
+ SourceDBClusterIdentifier: restore.sourceDBClusterIdentifier,
32031
+ RestoreType: properties["RestoreType"],
32032
+ ...restore.restoreToTime !== void 0 ? { RestoreToTime: restore.restoreToTime } : { UseLatestRestorableTime: true },
32033
+ Port: restorePort
32034
+ })));
31855
32035
  clusterCreated = true;
31856
32036
  createdResourceId = response.DBCluster?.DbClusterResourceId;
31857
32037
  reportCreatedResource(logicalId, resourceType, dbClusterIdentifier, createdResourceId);
31858
- if (!response.DBCluster) throw new Error("CreateDBCluster did not return DBCluster");
32038
+ const cluster = response.DBCluster;
32039
+ if (!cluster) throw new Error("The create call did not return DBCluster");
31859
32040
  this.logger.debug(`Successfully created DocDB DBCluster ${logicalId}: ${dbClusterIdentifier}`);
31860
- if (process.env["CDKD_NO_WAIT"] !== "true") await this.waitForClusterAvailable(logicalId, dbClusterIdentifier);
32041
+ const followUp = restore === void 0 ? void 0 : docdbRestoreFollowUp(properties, restore, password, managedPassword);
32042
+ const followingUp = followUp !== void 0 && (followUp.parity !== void 0 || followUp.declared.length > 0);
32043
+ if (followingUp || process.env["CDKD_NO_WAIT"] !== "true") await this.waitForClusterAvailable(logicalId, dbClusterIdentifier, restore === void 0 ? void 0 : restoreWaitMs());
32044
+ if (followUp !== void 0 && followingUp) await this.sendRestoreFollowUp(logicalId, resourceType, dbClusterIdentifier, followUp, mask);
32045
+ if (restore !== void 0) this.warnRestoredDifferences(logicalId, resourceType, properties, restore, cluster);
31861
32046
  return {
31862
32047
  physicalId: dbClusterIdentifier,
31863
32048
  attributes: clusterAttributes(await this.describeDBCluster(dbClusterIdentifier))
@@ -31868,6 +32053,74 @@ var DocDBProvider = class {
31868
32053
  throw thrown;
31869
32054
  }
31870
32055
  }
32056
+ async refuseUnencryptedRestoreSource(properties, restore, resourceType, logicalId, mask) {
32057
+ if (coerceCfnBoolean(properties["StorageEncrypted"]) !== true) return;
32058
+ if (properties["KmsKeyId"] != null && properties["KmsKeyId"] !== "") return;
32059
+ let encrypted;
32060
+ try {
32061
+ if (restore.kind === "snapshot") {
32062
+ const snapshot = (await this.getClient().send(new DescribeDBClusterSnapshotsCommand({
32063
+ DBClusterSnapshotIdentifier: restore.snapshotIdentifier,
32064
+ IncludeShared: true,
32065
+ IncludePublic: true
32066
+ }))).DBClusterSnapshots?.[0];
32067
+ if (snapshot === void 0) return;
32068
+ encrypted = snapshot.StorageEncrypted;
32069
+ } else {
32070
+ const source = await this.describeDBCluster(restore.sourceDBClusterIdentifier);
32071
+ if (source === void 0) return;
32072
+ encrypted = source.StorageEncrypted;
32073
+ }
32074
+ } catch (error) {
32075
+ const fault = restore.kind === "snapshot" ? "DBClusterSnapshotNotFoundFault" : "DBClusterNotFoundFault";
32076
+ if (isDocDBNotFoundError(error, fault)) return;
32077
+ throw this.wrapCaughtError(mask, error, (text) => new ProvisioningError(`Failed to create DocDB DBCluster ${logicalId}: reading whether the restore source is encrypted failed, so nothing was changed: ${text}`, resourceType, logicalId, void 0, error instanceof Error ? error : void 0));
32078
+ }
32079
+ if (encrypted === true) return;
32080
+ throw markNonRetryable(new ProvisioningError(safeMsg`DocDB DBCluster ${logicalId}: StorageEncrypted is true, but the restore source does not read as encrypted and no KmsKeyId is set. Set KmsKeyId (alias/aws/rds is the default key), as CloudFormation requires; nothing was changed.`, resourceType, logicalId));
32081
+ }
32082
+ async sendRestoreFollowUp(logicalId, resourceType, physicalId, followUp, mask) {
32083
+ const send = (members) => modifyDbInstanceWhenAvailable({
32084
+ send: () => this.getClient().send(new ModifyDBClusterCommand$1({
32085
+ DBClusterIdentifier: physicalId,
32086
+ ...members,
32087
+ ApplyImmediately: true
32088
+ })),
32089
+ readStatus: async () => (await this.describeDBCluster(physicalId))?.Status,
32090
+ sleep: (ms) => this.sleep(ms),
32091
+ logger: this.logger,
32092
+ label: "DocDB DBCluster",
32093
+ subject: "cluster",
32094
+ logicalId,
32095
+ remainingMs: enclosingDeadlineRemainingMs()
32096
+ });
32097
+ if (followUp.parity !== void 0) await send(followUp.parity);
32098
+ const refused = async (members) => {
32099
+ try {
32100
+ await send(members);
32101
+ return false;
32102
+ } catch (error) {
32103
+ if (error instanceof Error && RESTORE_VALUE_REFUSALS.has(error.name)) {
32104
+ this.logger.debug(safeMsg`${error.name} after restoring ${logicalId}: ${maskerOrIdentity(mask)(error.message)}`);
32105
+ return true;
32106
+ }
32107
+ throw error;
32108
+ }
32109
+ };
32110
+ const { declared } = followUp;
32111
+ if (declared.length > 0 && await refused(Object.assign({}, ...declared))) {
32112
+ const keys = [];
32113
+ for (const group of declared) if (declared.length === 1 || await refused(group)) keys.push(...Object.keys(group).filter((key) => group[key] !== void 0));
32114
+ if (keys.length > 0) this.logger.warn(safeMsg`${logicalId} (${resourceType}): AWS refused ${keys.join(", ")} after the restore, so the cluster keeps its restored values. The record holds the declared ones, so drift does not report the difference. An update sends a declared BackupRetentionPeriod or window again; the password settings only once the template changes them.`);
32115
+ }
32116
+ if (process.env["CDKD_NO_WAIT"] !== "true") await this.waitForClusterAvailable(logicalId, physicalId, restoreWaitMs());
32117
+ }
32118
+ warnRestoredDifferences(logicalId, resourceType, properties, restore, cluster) {
32119
+ const differs = (key, live) => properties[key] != null && live !== void 0 && String(properties[key]) !== live;
32120
+ const keys = [...differs("MasterUsername", cluster.MasterUsername) ? ["MasterUsername"] : [], ...restore.kind === "point-in-time" && differs("EngineVersion", cluster.EngineVersion) ? ["EngineVersion"] : []];
32121
+ if (keys.length === 0) return;
32122
+ this.logger.warn(safeMsg`${logicalId} (${resourceType}): the restored cluster keeps its source's ${keys.join(", ")}, not the template's, as in CloudFormation: a restore does not set ${keys.length === 1 ? "it" : "them"}. cdkd drift does not report the difference: its baseline is the readback taken at deploy.`);
32123
+ }
31871
32124
  async updateDBCluster(logicalId, physicalId, resourceType, properties, previousProperties, context) {
31872
32125
  this.logger.debug(`Updating DocDB DBCluster ${logicalId}: ${physicalId}`);
31873
32126
  refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId, physicalId);
@@ -32525,7 +32778,7 @@ var DocDBProvider = class {
32525
32778
  remainingMs: enclosingDeadlineRemainingMs()
32526
32779
  });
32527
32780
  }
32528
- async waitForClusterAvailable(logicalId, dbClusterIdentifier, maxWaitMs = 18e5) {
32781
+ async waitForClusterAvailable(logicalId, dbClusterIdentifier, maxWaitMs = CLUSTER_AVAILABLE_MAX_WAIT_MS) {
32529
32782
  const startTime = Date.now();
32530
32783
  let delay = 5e3;
32531
32784
  while (Date.now() - startTime < maxWaitMs) {
@@ -32595,7 +32848,12 @@ var DocDBProvider = class {
32595
32848
  "AvailabilityZones",
32596
32849
  "GlobalClusterIdentifier",
32597
32850
  "MasterUserSecretKmsKeyId",
32598
- "RotateMasterUserPassword"
32851
+ "RestoreToTime",
32852
+ "RestoreType",
32853
+ "RotateMasterUserPassword",
32854
+ "SnapshotIdentifier",
32855
+ "SourceDBClusterIdentifier",
32856
+ "UseLatestRestorableTime"
32599
32857
  ];
32600
32858
  if (resourceType === "AWS::DocDB::DBInstance") return ["CertificateRotationRestart"];
32601
32859
  return [];
@@ -48568,8 +48826,10 @@ var FirehoseProvider = class {
48568
48826
  "SplunkDestinationConfiguration",
48569
48827
  "AmazonOpenSearchServerlessDestinationConfiguration",
48570
48828
  "DeliveryStreamEncryptionConfigurationInput",
48571
- "IcebergDestinationConfiguration"
48829
+ "IcebergDestinationConfiguration",
48830
+ "MSKSourceConfiguration"
48572
48831
  ])]]);
48832
+ unhandledByDesign = /* @__PURE__ */ new Map([["AWS::KinesisFirehose::DeliveryStream", /* @__PURE__ */ new Map([["DatabaseSourceConfiguration", "Database as a source was a public preview AWS removed on 2025-09-24 (Firehose document history); CreateDeliveryStream refused DeliveryStreamType DatabaseAsSource in every region probed, so an SDK path could not be verified. Stays on Cloud Control"], ["SnowflakeDestinationConfiguration", "Proving the wire shape live needs a real Snowflake account, and the block carries key material (PrivateKey, KeyPassphrase). Stays on Cloud Control"]])]]);
48573
48833
  getClient() {
48574
48834
  if (!this.client) {
48575
48835
  this.client = new FirehoseClient({
@@ -48592,12 +48852,14 @@ var FirehoseProvider = class {
48592
48852
  const deliveryStreamName = properties["DeliveryStreamName"];
48593
48853
  const deliveryStreamType = properties["DeliveryStreamType"] || "DirectPut";
48594
48854
  if (!isReadableTagList(properties["Tags"])) throw markNonRetryable(new ProvisioningError(`Tags of Firehose delivery stream ${logicalId} is not a list of tags with a Key — the delivery stream was not created`, resourceType, logicalId));
48855
+ const mskSource = properties["MSKSourceConfiguration"] === void 0 ? void 0 : mapMskSourceConfiguration(properties["MSKSourceConfiguration"], maskerOrIdentity(context?.maskSecrets), resourceType, logicalId);
48595
48856
  let createdStreamName;
48596
48857
  try {
48597
48858
  const input = {
48598
48859
  DeliveryStreamName: deliveryStreamName || generatedNameFor("AWS::KinesisFirehose::DeliveryStream", logicalId),
48599
48860
  DeliveryStreamType: deliveryStreamType
48600
48861
  };
48862
+ if (mskSource !== void 0) input.MSKSourceConfiguration = mskSource;
48601
48863
  if (properties["S3DestinationConfiguration"]) {
48602
48864
  const s3Config = properties["S3DestinationConfiguration"];
48603
48865
  input.S3DestinationConfiguration = this.mapS3DestinationConfiguration(s3Config);
@@ -49390,7 +49652,7 @@ var FirehoseProvider = class {
49390
49652
  return /* @__PURE__ */ new Set([ENCRYPTION_KEY]);
49391
49653
  }
49392
49654
  }
49393
- async readCurrentState(physicalId, _logicalId, _resourceType) {
49655
+ async readCurrentState(physicalId, _logicalId, _resourceType, properties) {
49394
49656
  let desc;
49395
49657
  try {
49396
49658
  desc = (await this.getClient().send(new DescribeDeliveryStreamCommand({ DeliveryStreamName: physicalId }))).DeliveryStreamDescription;
@@ -49411,6 +49673,8 @@ var FirehoseProvider = class {
49411
49673
  }
49412
49674
  const directPut = desc.Source?.DirectPutSourceDescription;
49413
49675
  if (directPut?.ThroughputHintInMBs !== void 0) result["DirectPutSourceConfiguration"] = { ThroughputHintInMBs: directPut.ThroughputHintInMBs };
49676
+ const msk = desc.Source?.MSKSourceDescription;
49677
+ if (msk) result["MSKSourceConfiguration"] = mapMskSourceDescriptionToCfn(msk, properties?.["MSKSourceConfiguration"]);
49414
49678
  const dest = desc.Destinations?.[0];
49415
49679
  if (dest?.ExtendedS3DestinationDescription) result["ExtendedS3DestinationConfiguration"] = mapExtendedS3DescriptionToCfn(dest.ExtendedS3DestinationDescription);
49416
49680
  else if (dest?.IcebergDestinationDescription) result["IcebergDestinationConfiguration"] = mapIcebergDescriptionToCfn(dest.IcebergDestinationDescription);
@@ -49576,6 +49840,47 @@ function mapRedshiftDescriptionToCfn(desc) {
49576
49840
  if (desc["S3BackupDescription"]) out["S3BackupConfiguration"] = mapS3DescriptionToCfn(desc["S3BackupDescription"]);
49577
49841
  return out;
49578
49842
  }
49843
+ const EPOCH_MILLIS = /^[+-]?\d+$/;
49844
+ function epochMillisTimestamp(value) {
49845
+ if (typeof value === "number" && Number.isSafeInteger(value)) value = String(value);
49846
+ if (typeof value !== "string" || !EPOCH_MILLIS.test(value)) return void 0;
49847
+ const date = new Date(Number(value));
49848
+ return Number.isNaN(date.getTime()) ? void 0 : date;
49849
+ }
49850
+ function mapMskSourceConfiguration(config, mask, resourceType, logicalId) {
49851
+ const auth = config["AuthenticationConfiguration"];
49852
+ const result = {
49853
+ MSKClusterARN: config["MSKClusterARN"],
49854
+ TopicName: config["TopicName"],
49855
+ AuthenticationConfiguration: auth && {
49856
+ RoleARN: auth["RoleARN"],
49857
+ Connectivity: auth["Connectivity"]
49858
+ }
49859
+ };
49860
+ const raw = config["ReadFromTimestamp"];
49861
+ if (raw !== void 0) {
49862
+ const parsed = epochMillisTimestamp(raw);
49863
+ if (parsed === void 0) throw markNonRetryable(new ProvisioningError(`MSKSourceConfiguration.ReadFromTimestamp of Firehose delivery stream ${logicalId} is not a string of epoch milliseconds: ${JSON.stringify(maskDeep(raw, mask))} — CloudFormation reads it as one and refuses any other spelling, an ISO 8601 date included; write e.g. '1767225600000' for 2026-01-01T00:00:00Z. The delivery stream was not created`, resourceType, logicalId));
49864
+ result.ReadFromTimestamp = parsed;
49865
+ }
49866
+ return result;
49867
+ }
49868
+ function mapMskSourceDescriptionToCfn(desc, recorded) {
49869
+ const out = {};
49870
+ if (desc.MSKClusterARN !== void 0) out["MSKClusterARN"] = desc.MSKClusterARN;
49871
+ if (desc.TopicName !== void 0) out["TopicName"] = desc.TopicName;
49872
+ const auth = desc.AuthenticationConfiguration;
49873
+ if (auth) out["AuthenticationConfiguration"] = {
49874
+ ...auth.RoleARN !== void 0 && { RoleARN: auth.RoleARN },
49875
+ ...auth.Connectivity !== void 0 && { Connectivity: auth.Connectivity }
49876
+ };
49877
+ const live = desc.ReadFromTimestamp;
49878
+ if (live instanceof Date && !Number.isNaN(live.getTime())) {
49879
+ const spelled = isPlainRecord(recorded) ? recorded["ReadFromTimestamp"] : void 0;
49880
+ out["ReadFromTimestamp"] = epochMillisTimestamp(spelled)?.getTime() === live.getTime() ? spelled : String(live.getTime());
49881
+ }
49882
+ return out;
49883
+ }
49579
49884
  function mapIcebergDescriptionToCfn(desc) {
49580
49885
  const out = {};
49581
49886
  for (const k of [
@@ -55045,4 +55350,4 @@ var ACMCertificateProvider = class {
55045
55350
  };
55046
55351
 
55047
55352
  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 };
55048
- //# sourceMappingURL=provider-classes-DOr3JVGp.js.map
55353
+ //# sourceMappingURL=provider-classes-DTgKRk4t.js.map