@go-to-k/cdkd 0.312.0 → 0.314.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-CVLTQtQr.js → asg-provider-_nun2Jda.js} +43 -7
- package/dist/asg-provider-_nun2Jda.js.map +1 -0
- package/dist/{aws-failure-text-NSBdKPYK.js → aws-failure-text-agWtoyga.js} +5 -2
- package/dist/{aws-failure-text-NSBdKPYK.js.map → aws-failure-text-agWtoyga.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{created-resource-sink-BT2Dfnpt.js → created-resource-sink-QECX8C-Z.js} +3 -3
- package/dist/{created-resource-sink-BT2Dfnpt.js.map → created-resource-sink-QECX8C-Z.js.map} +1 -1
- package/dist/{db-instance-modify-retry-D7wXWxVo.js → db-instance-modify-retry-By0_BFNO.js} +3 -3
- package/dist/{db-instance-modify-retry-D7wXWxVo.js.map → db-instance-modify-retry-By0_BFNO.js.map} +1 -1
- package/dist/{deploy-engine-CVNzK__j.js → deploy-engine-ClIUqDQL.js} +488 -80
- package/dist/deploy-engine-ClIUqDQL.js.map +1 -0
- package/dist/{iam-role-provider-DM7bN9m1.js → iam-role-provider-DJep3uns.js} +4 -4
- package/dist/{iam-role-provider-DM7bN9m1.js.map → iam-role-provider-DJep3uns.js.map} +1 -1
- package/dist/index.js +4 -4
- package/dist/{neptune-provider-qdoLunCh.js → neptune-provider-CGZ_G4Vz.js} +5 -5
- package/dist/{neptune-provider-qdoLunCh.js.map → neptune-provider-CGZ_G4Vz.js.map} +1 -1
- package/dist/{program-Nk_95KKk.js → program-Du6jOw1-.js} +38 -15
- package/dist/program-Du6jOw1-.js.map +1 -0
- package/dist/{provider-classes-Dz0pYmlJ.js → provider-classes-ZqxIefLl.js} +628 -245
- package/dist/provider-classes-ZqxIefLl.js.map +1 -0
- package/dist/{rds-provider-CXSZq1c8.js → rds-provider-C2fHUNSE.js} +140 -7
- package/dist/rds-provider-C2fHUNSE.js.map +1 -0
- package/dist/{version-BqCEt5Wu.js → version-B2PvJ12r.js} +2 -2
- package/dist/{version-BqCEt5Wu.js.map → version-B2PvJ12r.js.map} +1 -1
- package/package.json +2 -2
- package/dist/asg-provider-CVLTQtQr.js.map +0 -1
- package/dist/deploy-engine-CVNzK__j.js.map +0 -1
- package/dist/program-Nk_95KKk.js.map +0 -1
- package/dist/provider-classes-Dz0pYmlJ.js.map +0 -1
- package/dist/rds-provider-CXSZq1c8.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { r as getAwsClients, s as withApiGatewayPacing } from "./aws-clients-Bu9EMILF.js";
|
|
2
|
-
import {
|
|
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-
|
|
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
|
|
6
|
-
import { n as collectInlinePolicyNamesManagedBySiblings, r as IamCreateClientCache, t as IAMRoleProvider } from "./iam-role-provider-
|
|
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-
|
|
8
|
-
import { t as modifyDbInstanceWhenAvailable } from "./db-instance-modify-retry-
|
|
9
|
-
import { RDSProvider } from "./rds-provider-
|
|
10
|
-
import { NeptuneProvider } from "./neptune-provider-
|
|
11
|
-
import { ASGProvider } from "./asg-provider-
|
|
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$
|
|
44
|
-
import { CreateStateMachineCommand, DeleteStateMachineCommand, DescribeStateMachineCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
45
|
-
import { CreateClusterCommand, CreateServiceCommand, DeleteClusterCommand, DeleteServiceCommand, DeregisterTaskDefinitionCommand, DescribeClustersCommand, DescribeServicesCommand, DescribeTaskDefinitionCommand, ECSClient, ListTaskDefinitionsCommand, PutClusterCapacityProvidersCommand, RegisterTaskDefinitionCommand, TagResourceCommand as TagResourceCommand$
|
|
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$
|
|
47
|
-
import { CreateWebACLCommand, DeleteWebACLCommand, GetWebACLCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
48
|
-
import { AddCustomAttributesCommand, CognitoIdentityProviderClient, CreateUserPoolCommand, DeleteUserPoolCommand, DescribeUserPoolCommand, GetUserPoolMfaConfigCommand, ListUserPoolsCommand, ResourceNotFoundException as ResourceNotFoundException$11, SetUserPoolMfaConfigCommand, UntagResourceCommand as UntagResourceCommand$
|
|
49
|
-
import { CreateHttpNamespaceCommand, CreatePrivateDnsNamespaceCommand, CreatePublicDnsNamespaceCommand, CreateServiceCommand as CreateServiceCommand$1, DeleteNamespaceCommand, DeleteServiceAttributesCommand, DeleteServiceCommand as DeleteServiceCommand$1, GetNamespaceCommand, GetOperationCommand, GetServiceAttributesCommand, GetServiceCommand, ListNamespacesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
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$
|
|
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$
|
|
52
|
-
import { BudgetsClient, CreateBudgetCommand, CreateNotificationCommand, CreateSubscriberCommand, DeleteBudgetCommand, DeleteNotificationCommand, DeleteSubscriberCommand, DescribeBudgetCommand, DescribeNotificationsForBudgetCommand, DescribeSubscribersForNotificationCommand, DuplicateRecordException, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
53
|
-
import { AddTagsToStreamCommand, CreateStreamCommand, DecreaseStreamRetentionPeriodCommand, DeleteStreamCommand, DeregisterStreamConsumerCommand, DescribeStreamCommand, DescribeStreamConsumerCommand, DescribeStreamSummaryCommand, DisableEnhancedMonitoringCommand, EnableEnhancedMonitoringCommand, IncreaseStreamRetentionPeriodCommand, KinesisClient, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
63
|
-
import { CreateLifecyclePolicyCommand, DLMClient, DeleteLifecyclePolicyCommand as DeleteLifecyclePolicyCommand$1, GetLifecyclePoliciesCommand, GetLifecyclePolicyCommand as GetLifecyclePolicyCommand$1, ResourceNotFoundException as ResourceNotFoundException$16, TagResourceCommand as TagResourceCommand$
|
|
64
|
-
import { CreateVectorBucketCommand, DeleteIndexCommand, DeleteVectorBucketCommand, GetVectorBucketCommand, ListIndexesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$
|
|
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)
|
|
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
|
|
4743
|
-
|
|
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 = {
|
|
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
|
-
|
|
5300
|
+
const previousAbac = abacStatusOf(previousProperties);
|
|
5301
|
+
const desiredAbac = abacStatusOf(properties);
|
|
5302
|
+
if (previousAbac !== desiredAbac && desiredAbac === ABAC_DISABLED) await this.applyAbacStatus(physicalId, desiredAbac);
|
|
5303
|
+
await this.applyTagDiff(physicalId, resourceType, logicalId, previousProperties["Tags"], properties["Tags"], previousAbac === ABAC_ENABLED && desiredAbac === ABAC_ENABLED);
|
|
5304
|
+
if (previousAbac !== desiredAbac && desiredAbac !== ABAC_DISABLED) await this.applyAbacStatus(physicalId, desiredAbac);
|
|
4913
5305
|
await this.warnUnappliedBucketObjectLock(logicalId, physicalId, properties, previousProperties, context);
|
|
4914
5306
|
const attributes = await this.buildAttributes(physicalId);
|
|
5307
|
+
if (metadataBag(properties["MetadataConfiguration"])) Object.assign(attributes, await this.readMetadataAttributesAfterWrites(physicalId, context));
|
|
4915
5308
|
this.logger.debug(`Successfully updated S3 bucket ${displaySafe(logicalId)}`);
|
|
4916
5309
|
const effectiveProperties = S3BucketProvider.applyEffectiveOverrides(properties, effectiveOverrides);
|
|
4917
5310
|
return {
|
|
@@ -4996,7 +5389,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
4996
5389
|
}
|
|
4997
5390
|
throw err;
|
|
4998
5391
|
}
|
|
4999
|
-
const [versioning, encryption, ownership, pab, tags, lifecycle, cors, website, logging, notification, replication, objectLock, accelerate, metrics, analytics, intelligentTier, inventory] = await Promise.all([
|
|
5392
|
+
const [versioning, encryption, ownership, pab, tags, lifecycle, cors, website, logging, notification, replication, objectLock, accelerate, metrics, analytics, intelligentTier, inventory, abac, metadata] = await Promise.all([
|
|
5000
5393
|
this.readVersioning(physicalId),
|
|
5001
5394
|
this.readEncryption(physicalId),
|
|
5002
5395
|
this.readOwnershipControls(physicalId),
|
|
@@ -5013,7 +5406,9 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
5013
5406
|
this.readMetricsList(physicalId),
|
|
5014
5407
|
this.readAnalyticsList(physicalId),
|
|
5015
5408
|
this.readIntelligentTieringList(physicalId),
|
|
5016
|
-
this.readInventoryList(physicalId)
|
|
5409
|
+
this.readInventoryList(physicalId),
|
|
5410
|
+
this.readAbacStatus(physicalId),
|
|
5411
|
+
this.readMetadataForDrift(physicalId)
|
|
5017
5412
|
]);
|
|
5018
5413
|
return {
|
|
5019
5414
|
BucketName: physicalId,
|
|
@@ -5033,9 +5428,23 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
5033
5428
|
MetricsConfigurations: metrics,
|
|
5034
5429
|
AnalyticsConfigurations: analytics,
|
|
5035
5430
|
IntelligentTieringConfigurations: intelligentTier,
|
|
5036
|
-
InventoryConfigurations: inventory
|
|
5431
|
+
InventoryConfigurations: inventory,
|
|
5432
|
+
...abac === ABAC_ENABLED || _properties?.["AbacStatus"] !== void 0 ? { AbacStatus: abac ?? _properties?.["AbacStatus"] } : {},
|
|
5433
|
+
...metadata === "unread" ? _properties?.["MetadataConfiguration"] !== void 0 ? { MetadataConfiguration: _properties["MetadataConfiguration"] } : {} : metadata ? { MetadataConfiguration: metadataConfigurationFromSdk(metadata) } : {}
|
|
5037
5434
|
};
|
|
5038
5435
|
}
|
|
5436
|
+
getDriftAbsentMeansDefaultKeys(_resourceType, properties) {
|
|
5437
|
+
return [...abacStatusOf(properties) === ABAC_DISABLED ? ["AbacStatus"] : [], ...properties["MetadataConfiguration"] === void 0 ? ["MetadataConfiguration"] : []];
|
|
5438
|
+
}
|
|
5439
|
+
getDriftUnknownPaths() {
|
|
5440
|
+
return [
|
|
5441
|
+
"BucketNamePrefix",
|
|
5442
|
+
"BucketNamespace",
|
|
5443
|
+
"MetadataConfiguration.JournalTableConfiguration.EncryptionConfiguration",
|
|
5444
|
+
"MetadataConfiguration.InventoryTableConfiguration.EncryptionConfiguration",
|
|
5445
|
+
"MetadataConfiguration.AnnotationTableConfiguration.EncryptionConfiguration"
|
|
5446
|
+
];
|
|
5447
|
+
}
|
|
5039
5448
|
async readVersioning(bucket) {
|
|
5040
5449
|
return { Status: (await this.s3Client.send(new GetBucketVersioningCommand({ Bucket: bucket }))).Status ?? "Suspended" };
|
|
5041
5450
|
}
|
|
@@ -5383,6 +5792,14 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
5383
5792
|
throw err;
|
|
5384
5793
|
}
|
|
5385
5794
|
}
|
|
5795
|
+
async readAbacStatus(bucket) {
|
|
5796
|
+
try {
|
|
5797
|
+
return (await this.s3Client.send(new GetBucketAbacCommand({ Bucket: bucket }))).AbacStatus?.Status ?? ABAC_DISABLED;
|
|
5798
|
+
} catch (err) {
|
|
5799
|
+
this.logger.debug(safeMsg`Could not read AbacStatus of ${this.shown(bucket)} (${caughtErrorName(err)})`);
|
|
5800
|
+
return;
|
|
5801
|
+
}
|
|
5802
|
+
}
|
|
5386
5803
|
async readAccelerate(bucket) {
|
|
5387
5804
|
return { AccelerationStatus: (await this.s3Client.send(new GetBucketAccelerateConfigurationCommand({ Bucket: bucket }))).Status ?? "Suspended" };
|
|
5388
5805
|
}
|
|
@@ -5562,7 +5979,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
5562
5979
|
}
|
|
5563
5980
|
}
|
|
5564
5981
|
generatedCreateName(_resourceType, logicalId, properties) {
|
|
5565
|
-
if (properties["BucketName"]) return void 0;
|
|
5982
|
+
if (properties["BucketNamePrefix"] || properties["BucketName"]) return void 0;
|
|
5566
5983
|
return generatedNameFor("AWS::S3::Bucket", logicalId);
|
|
5567
5984
|
}
|
|
5568
5985
|
async import(input) {
|
|
@@ -9379,13 +9796,17 @@ function toCfnSelfManagedEventSource(selfManagedEventSource) {
|
|
|
9379
9796
|
return renameEndpointsKey(selfManagedEventSource, SDK_KAFKA_ENDPOINTS_KEY, CFN_KAFKA_ENDPOINTS_KEY);
|
|
9380
9797
|
}
|
|
9381
9798
|
const KAFKA_CONSUMPTION_MODE_KEY = "ConsumptionMode";
|
|
9382
|
-
|
|
9799
|
+
const KAFKA_DEFAULT_CONSUMPTION_MODE = "Stream";
|
|
9800
|
+
function consumptionModeOf(properties) {
|
|
9383
9801
|
const config = properties["SelfManagedKafkaEventSourceConfig"];
|
|
9384
|
-
if (typeof config !== "object" || config === null || Array.isArray(config)) return
|
|
9385
|
-
return config[KAFKA_CONSUMPTION_MODE_KEY];
|
|
9802
|
+
if (typeof config !== "object" || config === null || Array.isArray(config)) return KAFKA_DEFAULT_CONSUMPTION_MODE;
|
|
9803
|
+
return config[KAFKA_CONSUMPTION_MODE_KEY] ?? KAFKA_DEFAULT_CONSUMPTION_MODE;
|
|
9386
9804
|
}
|
|
9387
|
-
function
|
|
9388
|
-
|
|
9805
|
+
function replayableKafkaConfig(properties) {
|
|
9806
|
+
if (consumptionModeOf(properties) !== "Queue") return void 0;
|
|
9807
|
+
if (properties["StartingPosition"] === void 0 && properties["StartingPositionTimestamp"] === void 0 && properties["MaximumBatchingWindowInSeconds"] === void 0) return;
|
|
9808
|
+
const { [KAFKA_CONSUMPTION_MODE_KEY]: _dropped, ...rest } = properties["SelfManagedKafkaEventSourceConfig"];
|
|
9809
|
+
return rest;
|
|
9389
9810
|
}
|
|
9390
9811
|
function kafkaConfigForUpdate(desired, previous, options) {
|
|
9391
9812
|
const asObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v) ? v : void 0;
|
|
@@ -9573,11 +9994,6 @@ var LambdaEventSourceMappingProvider = class {
|
|
|
9573
9994
|
const desiredTags = refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId, void 0, "Tags", DBPROXY_TAGS_WHAT, DBPROXY_TAG_OPTIONS);
|
|
9574
9995
|
const functionName = properties["FunctionName"];
|
|
9575
9996
|
if (!functionName) throw new ProvisioningError(`FunctionName is required for event source mapping ${logicalId}`, resourceType, logicalId);
|
|
9576
|
-
if (declaredConsumptionMode(properties) !== void 0) {
|
|
9577
|
-
const message = consumptionModeRefusalMessage(logicalId, "create");
|
|
9578
|
-
if (context?.replayingState !== true) throw new ProvisioningError(message, resourceType, logicalId);
|
|
9579
|
-
log.warn(safeMsg`${message} Proceeding without it: this create replays a cdkd state record.`);
|
|
9580
|
-
}
|
|
9581
9997
|
try {
|
|
9582
9998
|
const params = { FunctionName: functionName };
|
|
9583
9999
|
if (properties["EventSourceArn"]) params.EventSourceArn = properties["EventSourceArn"];
|
|
@@ -9596,6 +10012,11 @@ var LambdaEventSourceMappingProvider = class {
|
|
|
9596
10012
|
if (properties["SourceAccessConfigurations"]) params.SourceAccessConfigurations = properties["SourceAccessConfigurations"];
|
|
9597
10013
|
if (properties["SelfManagedEventSource"]) params.SelfManagedEventSource = toSdkSelfManagedEventSource(properties["SelfManagedEventSource"]);
|
|
9598
10014
|
if (properties["SelfManagedKafkaEventSourceConfig"]) params.SelfManagedKafkaEventSourceConfig = properties["SelfManagedKafkaEventSourceConfig"];
|
|
10015
|
+
const replayableKafka = context?.replayingState === true ? replayableKafkaConfig(properties) : void 0;
|
|
10016
|
+
if (replayableKafka !== void 0) {
|
|
10017
|
+
log.warn(safeMsg`AWS::Lambda::EventSourceMapping ${logicalId}: the state record holds ConsumptionMode Queue beside a member Lambda refuses with it, so the mapping it records never ran in Queue mode. Proceeding without ConsumptionMode: this create replays a cdkd state record.`);
|
|
10018
|
+
params.SelfManagedKafkaEventSourceConfig = replayableKafka;
|
|
10019
|
+
}
|
|
9599
10020
|
if (properties["AmazonManagedKafkaEventSourceConfig"]) params.AmazonManagedKafkaEventSourceConfig = properties["AmazonManagedKafkaEventSourceConfig"];
|
|
9600
10021
|
if (properties["DocumentDBEventSourceConfig"]) params.DocumentDBEventSourceConfig = properties["DocumentDBEventSourceConfig"];
|
|
9601
10022
|
if (properties["ScalingConfig"]) params.ScalingConfig = properties["ScalingConfig"];
|
|
@@ -9632,7 +10053,11 @@ var LambdaEventSourceMappingProvider = class {
|
|
|
9632
10053
|
attributes: {
|
|
9633
10054
|
Id: uuid,
|
|
9634
10055
|
EventSourceMappingArn: response.EventSourceMappingArn
|
|
9635
|
-
}
|
|
10056
|
+
},
|
|
10057
|
+
...replayableKafka !== void 0 && { effectiveProperties: {
|
|
10058
|
+
...properties,
|
|
10059
|
+
SelfManagedKafkaEventSourceConfig: replayableKafka
|
|
10060
|
+
} }
|
|
9636
10061
|
};
|
|
9637
10062
|
} catch (error) {
|
|
9638
10063
|
const cause = error instanceof Error ? error : void 0;
|
|
@@ -9666,18 +10091,15 @@ var LambdaEventSourceMappingProvider = class {
|
|
|
9666
10091
|
const log = this.operationSinks(context?.maskSecrets, properties, previousProperties);
|
|
9667
10092
|
refuseMalformedDesiredTags(properties["Tags"], resourceType, logicalId, physicalId, "Tags", DBPROXY_TAGS_WHAT, DBPROXY_TAG_OPTIONS);
|
|
9668
10093
|
const restoring = context?.replayingState === true || context?.desiredFromAwsReadback === true;
|
|
9669
|
-
|
|
9670
|
-
if (JSON.stringify(properties[key]) === JSON.stringify(previousProperties[key])) continue;
|
|
9671
|
-
const reason = `${key} cannot be changed on an existing event source mapping (UpdateEventSourceMapping does not take it, and CloudFormation refuses the change too)`;
|
|
10094
|
+
const refuseChange = (reason) => {
|
|
9672
10095
|
if (!restoring) throw new ResourceUpdateNotSupportedError(resourceType, logicalId, `${reason}; deploy with --replace to delete and recreate the mapping`);
|
|
9673
10096
|
log.warn(safeMsg`AWS::Lambda::EventSourceMapping ${logicalId}: ${reason}. Proceeding without it: this update restores a recorded or read-back configuration.`);
|
|
10097
|
+
};
|
|
10098
|
+
for (const key of ["Queues", "Topics"]) {
|
|
10099
|
+
if (JSON.stringify(properties[key]) === JSON.stringify(previousProperties[key])) continue;
|
|
10100
|
+
refuseChange(`${key} cannot be changed on an existing event source mapping (UpdateEventSourceMapping does not take it, and CloudFormation refuses the change too)`);
|
|
9674
10101
|
}
|
|
9675
|
-
|
|
9676
|
-
if (desiredMode !== void 0 && JSON.stringify(desiredMode) !== JSON.stringify(declaredConsumptionMode(previousProperties))) {
|
|
9677
|
-
const message = consumptionModeRefusalMessage(logicalId, "update");
|
|
9678
|
-
if (!restoring) throw new ProvisioningError(message, resourceType, logicalId, physicalId);
|
|
9679
|
-
log.warn(safeMsg`${message} Proceeding without it: this update restores a recorded or read-back configuration.`);
|
|
9680
|
-
}
|
|
10102
|
+
if (JSON.stringify(consumptionModeOf(properties)) !== JSON.stringify(consumptionModeOf(previousProperties))) refuseChange(`SelfManagedKafkaEventSourceConfig.${KAFKA_CONSUMPTION_MODE_KEY} cannot be changed on an existing event source mapping (UpdateEventSourceMapping refuses it)`);
|
|
9681
10103
|
try {
|
|
9682
10104
|
return await this.applyUpdate(logicalId, physicalId, resourceType, properties, previousProperties, log, restoring);
|
|
9683
10105
|
} catch (error) {
|
|
@@ -9905,6 +10327,24 @@ var LambdaEventSourceMappingProvider = class {
|
|
|
9905
10327
|
result["Tags"] = tags;
|
|
9906
10328
|
return result;
|
|
9907
10329
|
}
|
|
10330
|
+
async canonicalizeDriftPair(_resourceType, baseline, aws, properties) {
|
|
10331
|
+
const key = "SelfManagedKafkaEventSourceConfig";
|
|
10332
|
+
const block = baseline[key];
|
|
10333
|
+
if (typeof block !== "object" || block === null || Array.isArray(block) || KAFKA_CONSUMPTION_MODE_KEY in block || consumptionModeOf(aws) !== KAFKA_DEFAULT_CONSUMPTION_MODE || consumptionModeOf(properties ?? {}) !== KAFKA_DEFAULT_CONSUMPTION_MODE || aws[key]?.[KAFKA_CONSUMPTION_MODE_KEY] === void 0) return {
|
|
10334
|
+
baseline,
|
|
10335
|
+
aws
|
|
10336
|
+
};
|
|
10337
|
+
return {
|
|
10338
|
+
baseline: {
|
|
10339
|
+
...baseline,
|
|
10340
|
+
[key]: {
|
|
10341
|
+
...block,
|
|
10342
|
+
[KAFKA_CONSUMPTION_MODE_KEY]: KAFKA_DEFAULT_CONSUMPTION_MODE
|
|
10343
|
+
}
|
|
10344
|
+
},
|
|
10345
|
+
aws
|
|
10346
|
+
};
|
|
10347
|
+
}
|
|
9908
10348
|
async import(input) {
|
|
9909
10349
|
if (!input.knownPhysicalId) return null;
|
|
9910
10350
|
let resp;
|
|
@@ -11840,120 +12280,6 @@ async function waitForGoneAfterDelete(opts) {
|
|
|
11840
12280
|
}
|
|
11841
12281
|
}
|
|
11842
12282
|
|
|
11843
|
-
//#endregion
|
|
11844
|
-
//#region src/provisioning/dynamodb-vector-indexes.ts
|
|
11845
|
-
function vectorIndexesByName(value) {
|
|
11846
|
-
const out = /* @__PURE__ */ new Map();
|
|
11847
|
-
if (!Array.isArray(value)) return out;
|
|
11848
|
-
for (const entry of value) {
|
|
11849
|
-
if (typeof entry !== "object" || entry === null || Array.isArray(entry)) continue;
|
|
11850
|
-
const name = entry["IndexName"];
|
|
11851
|
-
if (typeof name === "string") out.set(name, entry);
|
|
11852
|
-
}
|
|
11853
|
-
return out;
|
|
11854
|
-
}
|
|
11855
|
-
function vectorIndexForSend(entry) {
|
|
11856
|
-
const out = {};
|
|
11857
|
-
for (const key of [
|
|
11858
|
-
"IndexName",
|
|
11859
|
-
"VectorAttribute",
|
|
11860
|
-
"Projection",
|
|
11861
|
-
"DistanceFunction"
|
|
11862
|
-
]) if (entry[key] !== void 0) out[key] = entry[key];
|
|
11863
|
-
if (entry["Dimensions"] !== void 0) out["Dimensions"] = coerceCfnInteger(entry["Dimensions"]) ?? entry["Dimensions"];
|
|
11864
|
-
if (entry["SearchSchema"] !== void 0) out["SearchSchema"] = entry["SearchSchema"];
|
|
11865
|
-
return out;
|
|
11866
|
-
}
|
|
11867
|
-
function vectorIndexesForCreate(value) {
|
|
11868
|
-
if (value === void 0 || value === null) return void 0;
|
|
11869
|
-
if (!Array.isArray(value)) return value;
|
|
11870
|
-
return value.map((entry) => typeof entry === "object" && entry !== null && !Array.isArray(entry) ? vectorIndexForSend(entry) : entry);
|
|
11871
|
-
}
|
|
11872
|
-
function sortedByJson(list) {
|
|
11873
|
-
if (!Array.isArray(list)) return list;
|
|
11874
|
-
return [...list].sort((a, b) => {
|
|
11875
|
-
const x = JSON.stringify(a) ?? "";
|
|
11876
|
-
const y = JSON.stringify(b) ?? "";
|
|
11877
|
-
return x < y ? -1 : x > y ? 1 : 0;
|
|
11878
|
-
});
|
|
11879
|
-
}
|
|
11880
|
-
function vectorIndexKey(entry) {
|
|
11881
|
-
const e = entry;
|
|
11882
|
-
const projection = e["Projection"];
|
|
11883
|
-
const normalizedProjection = typeof projection === "object" && projection !== null && !Array.isArray(projection) ? {
|
|
11884
|
-
ProjectionType: projection["ProjectionType"],
|
|
11885
|
-
NonKeyAttributes: sortedByJson(nonEmpty(projection["NonKeyAttributes"]))
|
|
11886
|
-
} : projection;
|
|
11887
|
-
const attribute = e["VectorAttribute"];
|
|
11888
|
-
return JSON.stringify([
|
|
11889
|
-
e["IndexName"],
|
|
11890
|
-
typeof attribute === "object" && attribute !== null ? attribute["AttributeName"] : attribute,
|
|
11891
|
-
coerceCfnInteger(e["Dimensions"]) ?? e["Dimensions"],
|
|
11892
|
-
e["DistanceFunction"],
|
|
11893
|
-
normalizedProjection,
|
|
11894
|
-
sortedByJson(Array.isArray(e["SearchSchema"]) && e["SearchSchema"].length > 0 ? e["SearchSchema"].map((s) => typeof s === "object" && s !== null ? {
|
|
11895
|
-
AttributeName: s["AttributeName"],
|
|
11896
|
-
SearchSchemaElementType: s["SearchSchemaElementType"]
|
|
11897
|
-
} : s) : nonEmpty(e["SearchSchema"]))
|
|
11898
|
-
]);
|
|
11899
|
-
}
|
|
11900
|
-
function nonEmpty(value) {
|
|
11901
|
-
return Array.isArray(value) && value.length === 0 ? void 0 : value;
|
|
11902
|
-
}
|
|
11903
|
-
function planVectorIndexUpdates(previous, desired, live) {
|
|
11904
|
-
const prevByName = vectorIndexesByName(previous);
|
|
11905
|
-
const desiredByName = vectorIndexesByName(desired);
|
|
11906
|
-
const liveByName = live === void 0 ? void 0 : new Map(live.filter((d) => typeof d.IndexName === "string").map((d) => [d.IndexName, d]));
|
|
11907
|
-
const plan = {
|
|
11908
|
-
ops: [],
|
|
11909
|
-
changed: [],
|
|
11910
|
-
adopted: [],
|
|
11911
|
-
alreadyGone: []
|
|
11912
|
-
};
|
|
11913
|
-
const liveHolds = (name, entry) => {
|
|
11914
|
-
const l = liveByName?.get(name);
|
|
11915
|
-
return l !== void 0 && l.IndexStatus !== "DELETING" && vectorIndexKey(l) === vectorIndexKey(entry);
|
|
11916
|
-
};
|
|
11917
|
-
for (const name of prevByName.keys()) {
|
|
11918
|
-
if (desiredByName.has(name)) continue;
|
|
11919
|
-
const l = liveByName?.get(name);
|
|
11920
|
-
if (liveByName !== void 0 && (l === void 0 || l.IndexStatus === "DELETING")) {
|
|
11921
|
-
plan.alreadyGone.push(name);
|
|
11922
|
-
continue;
|
|
11923
|
-
}
|
|
11924
|
-
plan.ops.push({ Delete: { IndexName: name } });
|
|
11925
|
-
}
|
|
11926
|
-
for (const [name, entry] of desiredByName) {
|
|
11927
|
-
const before = prevByName.get(name);
|
|
11928
|
-
if (before === void 0) {
|
|
11929
|
-
const l = liveByName?.get(name);
|
|
11930
|
-
if (l === void 0 || l.IndexStatus === "DELETING") plan.ops.push({ Create: vectorIndexForSend(entry) });
|
|
11931
|
-
else if (liveHolds(name, entry)) plan.adopted.push(name);
|
|
11932
|
-
else plan.changed.push(name);
|
|
11933
|
-
continue;
|
|
11934
|
-
}
|
|
11935
|
-
if (vectorIndexKey(before) === vectorIndexKey(entry)) continue;
|
|
11936
|
-
if (!liveHolds(name, entry)) plan.changed.push(name);
|
|
11937
|
-
}
|
|
11938
|
-
return plan;
|
|
11939
|
-
}
|
|
11940
|
-
function readbackVectorIndexes(live) {
|
|
11941
|
-
if (live === void 0 || live.length === 0) return void 0;
|
|
11942
|
-
return live.map((d) => {
|
|
11943
|
-
const out = {};
|
|
11944
|
-
if (d.IndexName !== void 0) out["IndexName"] = d.IndexName;
|
|
11945
|
-
if (d.VectorAttribute !== void 0) out["VectorAttribute"] = d.VectorAttribute;
|
|
11946
|
-
if (d.Dimensions !== void 0) out["Dimensions"] = d.Dimensions;
|
|
11947
|
-
if (d.DistanceFunction !== void 0) out["DistanceFunction"] = d.DistanceFunction;
|
|
11948
|
-
if (d.Projection !== void 0) out["Projection"] = d.Projection;
|
|
11949
|
-
if (d.SearchSchema !== void 0 && d.SearchSchema.length > 0) out["SearchSchema"] = d.SearchSchema;
|
|
11950
|
-
return out;
|
|
11951
|
-
});
|
|
11952
|
-
}
|
|
11953
|
-
function vectorIndexesSettled(live) {
|
|
11954
|
-
return (live ?? []).every((d) => d.IndexStatus === void 0 || d.IndexStatus === "ACTIVE");
|
|
11955
|
-
}
|
|
11956
|
-
|
|
11957
12283
|
//#endregion
|
|
11958
12284
|
//#region src/provisioning/providers/dynamodb-table-provider.ts
|
|
11959
12285
|
function isTableName(id) {
|
|
@@ -24479,11 +24805,11 @@ var ApiGatewayV2Provider = class ApiGatewayV2Provider {
|
|
|
24479
24805
|
const region = await this.getClient().config.region();
|
|
24480
24806
|
const { partition } = derivePartitionAndUrlSuffix(region);
|
|
24481
24807
|
const resourceArn = `arn:${partition}:apigateway:${canonicalizeRegion(region)}::${path}`;
|
|
24482
|
-
if (change.remove.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
24808
|
+
if (change.remove.length > 0) await this.getClient().send(new UntagResourceCommand$14({
|
|
24483
24809
|
ResourceArn: resourceArn,
|
|
24484
24810
|
TagKeys: change.remove
|
|
24485
24811
|
}));
|
|
24486
|
-
if (Object.keys(change.set).length > 0) await this.getClient().send(new TagResourceCommand$
|
|
24812
|
+
if (Object.keys(change.set).length > 0) await this.getClient().send(new TagResourceCommand$14({
|
|
24487
24813
|
ResourceArn: resourceArn,
|
|
24488
24814
|
Tags: change.set
|
|
24489
24815
|
}));
|
|
@@ -26403,7 +26729,7 @@ var StepFunctionsProvider = class {
|
|
|
26403
26729
|
result["EncryptionConfiguration"] = ec;
|
|
26404
26730
|
}
|
|
26405
26731
|
try {
|
|
26406
|
-
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$
|
|
26732
|
+
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$12({ resourceArn: physicalId }));
|
|
26407
26733
|
result["Tags"] = normalizeAwsTagsToCfn(tagsResp.tags);
|
|
26408
26734
|
} catch (err) {
|
|
26409
26735
|
if (!(err instanceof StateMachineDoesNotExist)) throw err;
|
|
@@ -26446,14 +26772,14 @@ var StepFunctionsProvider = class {
|
|
|
26446
26772
|
}));
|
|
26447
26773
|
const tagsToRemove = plan.remove;
|
|
26448
26774
|
if (tagsToRemove.length > 0) {
|
|
26449
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
26775
|
+
await this.getClient().send(new UntagResourceCommand$15({
|
|
26450
26776
|
resourceArn: stateMachineArn,
|
|
26451
26777
|
tagKeys: tagsToRemove
|
|
26452
26778
|
}));
|
|
26453
26779
|
this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from SFN state machine ${stateMachineArn}`);
|
|
26454
26780
|
}
|
|
26455
26781
|
if (tagsToAdd.length > 0) {
|
|
26456
|
-
await this.getClient().send(new TagResourceCommand$
|
|
26782
|
+
await this.getClient().send(new TagResourceCommand$15({
|
|
26457
26783
|
resourceArn: stateMachineArn,
|
|
26458
26784
|
tags: tagsToAdd
|
|
26459
26785
|
}));
|
|
@@ -27445,14 +27771,14 @@ var ECSProvider = class {
|
|
|
27445
27771
|
}));
|
|
27446
27772
|
const tagsToRemove = plan.remove;
|
|
27447
27773
|
if (tagsToRemove.length > 0) {
|
|
27448
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
27774
|
+
await this.getClient().send(new UntagResourceCommand$16({
|
|
27449
27775
|
resourceArn,
|
|
27450
27776
|
tagKeys: tagsToRemove
|
|
27451
27777
|
}));
|
|
27452
27778
|
log.debug(`Removed ${tagsToRemove.length} tag(s) from ECS resource ${resourceArn}`);
|
|
27453
27779
|
}
|
|
27454
27780
|
if (tagsToAdd.length > 0) {
|
|
27455
|
-
await this.getClient().send(new TagResourceCommand$
|
|
27781
|
+
await this.getClient().send(new TagResourceCommand$16({
|
|
27456
27782
|
resourceArn,
|
|
27457
27783
|
tags: tagsToAdd
|
|
27458
27784
|
}));
|
|
@@ -30936,7 +31262,7 @@ async function applyDocDBTagDiff(client, logger, arn, resourceType, logicalId, o
|
|
|
30936
31262
|
}
|
|
30937
31263
|
async function attachDocDBTags(client, logger, result, arn) {
|
|
30938
31264
|
try {
|
|
30939
|
-
const tagsResp = await client.send(new ListTagsForResourceCommand$
|
|
31265
|
+
const tagsResp = await client.send(new ListTagsForResourceCommand$13({ ResourceName: arn }));
|
|
30940
31266
|
result["Tags"] = normalizeAwsTagsToCfn(tagsResp.TagList);
|
|
30941
31267
|
} catch (err) {
|
|
30942
31268
|
logger.debug(safeMsg`DocDB ListTagsForResource(${arn}) failed: ${describeAwsFailure(err).detail}`);
|
|
@@ -33315,14 +33641,14 @@ var WAFv2WebACLProvider = class {
|
|
|
33315
33641
|
}));
|
|
33316
33642
|
const tagsToRemove = plan.remove;
|
|
33317
33643
|
if (tagsToRemove.length > 0) {
|
|
33318
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
33644
|
+
await this.getClient().send(new UntagResourceCommand$17({
|
|
33319
33645
|
ResourceARN: arn,
|
|
33320
33646
|
TagKeys: tagsToRemove
|
|
33321
33647
|
}));
|
|
33322
33648
|
this.logger.debug(`Removed ${tagsToRemove.length} tag(s) from WAFv2 WebACL ${arn}`);
|
|
33323
33649
|
}
|
|
33324
33650
|
if (tagsToAdd.length > 0) {
|
|
33325
|
-
await this.getClient().send(new TagResourceCommand$
|
|
33651
|
+
await this.getClient().send(new TagResourceCommand$17({
|
|
33326
33652
|
ResourceARN: arn,
|
|
33327
33653
|
Tags: tagsToAdd
|
|
33328
33654
|
}));
|
|
@@ -33361,7 +33687,7 @@ var WAFv2WebACLProvider = class {
|
|
|
33361
33687
|
if (webACL.ApplicationConfig) result["ApplicationConfig"] = webACL.ApplicationConfig;
|
|
33362
33688
|
if (webACL.MonetizationConfig) result["MonetizationConfig"] = webACL.MonetizationConfig;
|
|
33363
33689
|
try {
|
|
33364
|
-
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$
|
|
33690
|
+
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$14({ ResourceARN: physicalId }));
|
|
33365
33691
|
result["Tags"] = normalizeAwsTagsToCfn(tagsResp.TagInfoForResource?.TagList);
|
|
33366
33692
|
} catch (err) {
|
|
33367
33693
|
this.logger.debug(`WAFv2 ListTagsForResource(${physicalId}) failed: ${describeAwsFailure(err).detail}`);
|
|
@@ -33423,6 +33749,7 @@ function userPoolDeletionProtectionUpdate(physicalId, pool, value, opts = {}) {
|
|
|
33423
33749
|
if (acr === void 0) delete input.AcrConfiguration;
|
|
33424
33750
|
else input.AcrConfiguration = acr;
|
|
33425
33751
|
if (echoesDeveloperEmail(pool) && opts.withoutDeveloperEmail !== true) input.EmailConfiguration = pool.EmailConfiguration;
|
|
33752
|
+
if (echoesCustomerManagedKey(pool)) input.KeyConfiguration = pool.KeyConfiguration;
|
|
33426
33753
|
input.DeletionProtection = value;
|
|
33427
33754
|
return input;
|
|
33428
33755
|
}
|
|
@@ -33448,6 +33775,19 @@ function reportKind(record) {
|
|
|
33448
33775
|
function echoesDeveloperEmail(pool) {
|
|
33449
33776
|
return pool.EmailConfiguration?.EmailSendingAccount === "DEVELOPER";
|
|
33450
33777
|
}
|
|
33778
|
+
function echoesCustomerManagedKey(pool) {
|
|
33779
|
+
return pool.KeyConfiguration?.KeyType === "CUSTOMER_MANAGED_KEY";
|
|
33780
|
+
}
|
|
33781
|
+
function bareFlipResets(pool) {
|
|
33782
|
+
const reset = [
|
|
33783
|
+
"self sign-up",
|
|
33784
|
+
"Lambda triggers",
|
|
33785
|
+
"advanced security"
|
|
33786
|
+
];
|
|
33787
|
+
if (echoesDeveloperEmail(pool)) reset.push("SES email configuration");
|
|
33788
|
+
if (echoesCustomerManagedKey(pool)) reset.push("customer-managed key");
|
|
33789
|
+
return `${reset.slice(0, -1).join(", ")} and ${reset[reset.length - 1]}`;
|
|
33790
|
+
}
|
|
33451
33791
|
const REFUSED_ECHO_ERRORS = /* @__PURE__ */ new Set([
|
|
33452
33792
|
"InvalidParameterException",
|
|
33453
33793
|
"InvalidSmsRoleAccessPolicyException",
|
|
@@ -33530,12 +33870,13 @@ const KEPT_ON_REMOVAL_MEMBERS = {
|
|
|
33530
33870
|
AccountRecoverySetting: void 0,
|
|
33531
33871
|
SmsConfiguration: void 0,
|
|
33532
33872
|
UserPoolTier: "ESSENTIALS",
|
|
33533
|
-
DeletionProtection: "INACTIVE"
|
|
33873
|
+
DeletionProtection: "INACTIVE",
|
|
33874
|
+
IssuerConfiguration: { Type: "ORIGINAL" }
|
|
33534
33875
|
};
|
|
33535
33876
|
function declaresMember(value, unset) {
|
|
33536
33877
|
if (value === void 0 || value === null || value === "") return false;
|
|
33537
33878
|
if (isEmptyObjectPlaceholder(value)) return false;
|
|
33538
|
-
return unset === void 0 || value
|
|
33879
|
+
return unset === void 0 || !isDeepStrictEqual(value, unset);
|
|
33539
33880
|
}
|
|
33540
33881
|
function sendsKeptMember(member, value) {
|
|
33541
33882
|
if (!value) return false;
|
|
@@ -33740,6 +34081,8 @@ var CognitoUserPoolProvider = class {
|
|
|
33740
34081
|
"SmsAuthenticationMessage",
|
|
33741
34082
|
"SmsVerificationMessage",
|
|
33742
34083
|
"UserPoolTier",
|
|
34084
|
+
"KeyConfiguration",
|
|
34085
|
+
"IssuerConfiguration",
|
|
33743
34086
|
"EnabledMfas",
|
|
33744
34087
|
"EmailAuthenticationMessage",
|
|
33745
34088
|
"EmailAuthenticationSubject",
|
|
@@ -33821,6 +34164,8 @@ var CognitoUserPoolProvider = class {
|
|
|
33821
34164
|
if (properties["SmsAuthenticationMessage"]) createParams.SmsAuthenticationMessage = properties["SmsAuthenticationMessage"];
|
|
33822
34165
|
if (properties["SmsVerificationMessage"]) createParams.SmsVerificationMessage = properties["SmsVerificationMessage"];
|
|
33823
34166
|
if (properties["UserPoolTier"]) createParams.UserPoolTier = properties["UserPoolTier"];
|
|
34167
|
+
if (properties["KeyConfiguration"]) createParams.KeyConfiguration = properties["KeyConfiguration"];
|
|
34168
|
+
if (properties["IssuerConfiguration"]) createParams.IssuerConfiguration = properties["IssuerConfiguration"];
|
|
33824
34169
|
const orphanWindow = createUserPoolLatch.take(logicalId);
|
|
33825
34170
|
if (orphanWindow !== void 0) await this.reportPossibleOrphanPools(logicalId, poolName, orphanWindow, createMaskedLogSinks(this.logger, context?.maskSecrets));
|
|
33826
34171
|
let created;
|
|
@@ -34081,6 +34426,8 @@ var CognitoUserPoolProvider = class {
|
|
|
34081
34426
|
if (properties["SmsAuthenticationMessage"] !== void 0) updateParams.SmsAuthenticationMessage = properties["SmsAuthenticationMessage"];
|
|
34082
34427
|
if (properties["SmsVerificationMessage"] !== void 0) updateParams.SmsVerificationMessage = properties["SmsVerificationMessage"];
|
|
34083
34428
|
if (properties["UserPoolTier"]) updateParams.UserPoolTier = properties["UserPoolTier"];
|
|
34429
|
+
if (properties["KeyConfiguration"]) updateParams.KeyConfiguration = properties["KeyConfiguration"];
|
|
34430
|
+
if (properties["IssuerConfiguration"]) updateParams.IssuerConfiguration = properties["IssuerConfiguration"];
|
|
34084
34431
|
const mfaOptions = {
|
|
34085
34432
|
...liveMfa?.value !== void 0 ? { liveMfaConfiguration: liveMfa.value } : {},
|
|
34086
34433
|
...liveMfa?.failed === true ? { liveReadFailed: true } : {},
|
|
@@ -34140,7 +34487,7 @@ var CognitoUserPoolProvider = class {
|
|
|
34140
34487
|
this.logger.warn(safeMsg`Cognito User Pool ${logicalId} (${physicalId}): the template no longer declares ` + safeMsg`${removed.length} UserPoolTags key(s), but DescribeUserPool returned no ARN to ` + safeMsg`untag them with, so they stay on the pool. Remove them with ` + safeMsg`aws cognito-idp untag-resource.`);
|
|
34141
34488
|
return;
|
|
34142
34489
|
}
|
|
34143
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
34490
|
+
await this.getClient().send(new UntagResourceCommand$18({
|
|
34144
34491
|
ResourceArn: poolArn,
|
|
34145
34492
|
TagKeys: removed
|
|
34146
34493
|
}));
|
|
@@ -34188,7 +34535,7 @@ var CognitoUserPoolProvider = class {
|
|
|
34188
34535
|
before: "aws cognito-idp update-user-pool --user-pool-id",
|
|
34189
34536
|
identifier: physicalId,
|
|
34190
34537
|
after: "--deletion-protection INACTIVE",
|
|
34191
|
-
caveat: "Note UpdateUserPool resets some members a call omits (self sign-up, Lambda triggers, advanced security and
|
|
34538
|
+
caveat: "Note UpdateUserPool resets some members a call omits (self sign-up, Lambda triggers, advanced security, AutoVerifiedAttributes and a customer-managed KeyConfiguration among them), so send your complete pool configuration alongside that flag rather than the flag alone."
|
|
34192
34539
|
}
|
|
34193
34540
|
}) : `AWS::Cognito::UserPool is a stateful type, so re-run with ${replaceFlags} to recreate it (this deletes all users in the pool).`;
|
|
34194
34541
|
}
|
|
@@ -34213,16 +34560,16 @@ var CognitoUserPoolProvider = class {
|
|
|
34213
34560
|
try {
|
|
34214
34561
|
pool = (await this.getClient().send(new DescribeUserPoolCommand({ UserPoolId: physicalId }))).UserPool;
|
|
34215
34562
|
} catch (readError) {
|
|
34216
|
-
if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
|
|
34563
|
+
if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
|
|
34217
34564
|
throw readError;
|
|
34218
34565
|
}
|
|
34219
34566
|
if (!pool) {
|
|
34220
|
-
if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
|
|
34567
|
+
if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
|
|
34221
34568
|
throw new Error(`DescribeUserPool returned no pool for ${physicalId}`);
|
|
34222
34569
|
}
|
|
34223
34570
|
if (bareFlip && pool.DeletionProtection !== "ACTIVE") bareFlip.ambiguous = false;
|
|
34224
34571
|
const resetConfirmed = bareFlip !== void 0 && !bareFlip.ambiguous;
|
|
34225
|
-
if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip));
|
|
34572
|
+
if (bareFlip) this.reportSettingsResetByBareFlip(physicalId, bareFlip.pool, reportKind(bareFlip), maskerOrIdentity(context?.maskSecrets));
|
|
34226
34573
|
if (flipRecord && this.emailOmittedFlips.has(flipRecord) && !echoesDeveloperEmail(pool) && !(bareFlip && echoesDeveloperEmail(bareFlip.pool))) this.logger.error(safeMsg`Cognito User Pool ${physicalId} is LIVE with its SES email configuration reset: ` + safeMsg`--remove-protection turned DeletionProtection off with an UpdateUserPool that left ` + safeMsg`out its DEVELOPER EmailConfiguration (sending it was refused), and the delete then ` + safeMsg`failed. The pool's email configuration was ${EMAIL_RESET_CLAUSE}`);
|
|
34227
34574
|
const bareLicensed = resetConfirmed && bareFlip.echoedSince !== true;
|
|
34228
34575
|
const readOn = pool.DeletionProtection === "ACTIVE";
|
|
@@ -34255,7 +34602,7 @@ var CognitoUserPoolProvider = class {
|
|
|
34255
34602
|
}
|
|
34256
34603
|
});
|
|
34257
34604
|
}
|
|
34258
|
-
reportSettingsResetByBareFlip(physicalId, before, kind) {
|
|
34605
|
+
reportSettingsResetByBareFlip(physicalId, before, kind, mask) {
|
|
34259
34606
|
const held = [];
|
|
34260
34607
|
const adminOnly = before.AdminCreateUserConfig?.AllowAdminCreateUserOnly;
|
|
34261
34608
|
if (adminOnly !== void 0) held.push(`AllowAdminCreateUserOnly=${String(adminOnly)}`);
|
|
@@ -34269,10 +34616,11 @@ var CognitoUserPoolProvider = class {
|
|
|
34269
34616
|
const mode = before.UserPoolAddOns?.AdvancedSecurityMode;
|
|
34270
34617
|
if (mode) held.push(`AdvancedSecurityMode=${mode}`);
|
|
34271
34618
|
if (echoesDeveloperEmail(before)) held.push("EmailConfiguration.EmailSendingAccount=DEVELOPER (SES)");
|
|
34272
|
-
|
|
34273
|
-
const
|
|
34619
|
+
if (echoesCustomerManagedKey(before)) held.push(`KeyConfiguration.KmsKeyArn=${String(before.KeyConfiguration?.KmsKeyArn)}`);
|
|
34620
|
+
const heldText = held.length > 0 ? held.map((entry) => mask(entry)).join(", ") : "none of these settings";
|
|
34621
|
+
const what = bareFlipResets(before);
|
|
34274
34622
|
const state = kind === "unclear" ? safeMsg`is LIVE and its ${what} MAY have been reset: ` + safeMsg`--remove-protection sent UpdateUserPool with DeletionProtection alone (the pool's own ` + safeMsg`configuration was refused) and got no clear answer, and the delete then failed. Check it ` + safeMsg`with aws cognito-idp describe-user-pool.` : kind === "earlier" ? safeMsg`is LIVE; its ${what} were reset by an ` + safeMsg`earlier UpdateUserPool that --remove-protection sent with DeletionProtection alone (the ` + safeMsg`pool's own configuration was refused); they may have been restored since. Check it with ` + safeMsg`aws cognito-idp describe-user-pool.` : safeMsg`is LIVE with its ${what} reset: ` + safeMsg`--remove-protection had to turn DeletionProtection off with UpdateUserPool alone (the ` + safeMsg`pool's own configuration was refused), and the delete then failed.`;
|
|
34275
|
-
this.logger.error(safeMsg`Cognito User Pool ${physicalId} ` + state + safeMsg` Before that write the pool held: ${heldText}. Put them back with ` + safeMsg`aws cognito-idp update-user-pool, sending the pool's complete configuration -- a ` + safeMsg`cdkd deploy will NOT restore them, because its recorded properties still match the template.`);
|
|
34623
|
+
this.logger.error(mask(safeMsg`Cognito User Pool ${physicalId} ` + state + safeMsg` Before that write the pool held: ${heldText}. Put them back with ` + safeMsg`aws cognito-idp update-user-pool, sending the pool's complete configuration -- a ` + safeMsg`cdkd deploy will NOT restore them, because its recorded properties still match the template.`));
|
|
34276
34624
|
}
|
|
34277
34625
|
async deleteOnce(logicalId, physicalId, resourceType, context, flip) {
|
|
34278
34626
|
this.logger.debug(`Deleting Cognito User Pool ${logicalId}: ${physicalId}`);
|
|
@@ -34374,7 +34722,7 @@ var CognitoUserPoolProvider = class {
|
|
|
34374
34722
|
if (observedOn && isAmbiguousWriteFailure(echoError)) flip.flippedOffByThisRun = true;
|
|
34375
34723
|
if (isTransientCognitoFailure(echoError)) throw echoError;
|
|
34376
34724
|
if (!isRefusedEcho(echoError)) {
|
|
34377
|
-
this.warnGuardLeftOn(physicalId, mask, echoError);
|
|
34725
|
+
this.warnGuardLeftOn(physicalId, pool, mask, echoError);
|
|
34378
34726
|
throw echoError;
|
|
34379
34727
|
}
|
|
34380
34728
|
try {
|
|
@@ -34392,10 +34740,10 @@ var CognitoUserPoolProvider = class {
|
|
|
34392
34740
|
});
|
|
34393
34741
|
}
|
|
34394
34742
|
if (isTransientCognitoFailure(bareError)) {
|
|
34395
|
-
if (isAmbiguousWriteFailure(bareError)) this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool with DeletionProtection alone ` + safeMsg`(the pool's own configuration was refused) answered ${mask(describeAwsFailure(bareError).summary)}; ` + safeMsg`if that write landed, the pool's
|
|
34743
|
+
if (isAmbiguousWriteFailure(bareError)) this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool with DeletionProtection alone ` + safeMsg`(the pool's own configuration was refused) answered ${mask(describeAwsFailure(bareError).summary)}; ` + safeMsg`if that write landed, the pool's ${bareFlipResets(pool)} were reset. Retrying the delete.`);
|
|
34396
34744
|
throw bareError;
|
|
34397
34745
|
}
|
|
34398
|
-
this.warnGuardLeftOn(physicalId, mask, bareError, echoError);
|
|
34746
|
+
this.warnGuardLeftOn(physicalId, pool, mask, bareError, echoError);
|
|
34399
34747
|
throw bareError;
|
|
34400
34748
|
}
|
|
34401
34749
|
const kept = this.preFlipPools.get(flip);
|
|
@@ -34408,16 +34756,16 @@ var CognitoUserPoolProvider = class {
|
|
|
34408
34756
|
kept.echoedSince = false;
|
|
34409
34757
|
}
|
|
34410
34758
|
this.logger.debug(mask(safeMsg`UpdateUserPool refused the echoed configuration of ${mask(physicalId)}: ${mask(describeAwsFailure(echoError).detail)}`));
|
|
34411
|
-
this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool refused the pool's own configuration ` + safeMsg`echoed back (${mask(describeAwsFailure(echoError).summary)}), so DeletionProtection was ` + safeMsg`turned off alone. That write resets the settings it omits --
|
|
34759
|
+
this.logger.warn(safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool refused the pool's own configuration ` + safeMsg`echoed back (${mask(describeAwsFailure(echoError).summary)}), so DeletionProtection was ` + safeMsg`turned off alone. That write resets the settings it omits -- ${bareFlipResets(pool)} ` + safeMsg`among them -- which stays that way if the delete fails.`);
|
|
34412
34760
|
}
|
|
34413
34761
|
}
|
|
34414
|
-
warnGuardLeftOn(physicalId, mask, error, echoError) {
|
|
34762
|
+
warnGuardLeftOn(physicalId, pool, mask, error, echoError) {
|
|
34415
34763
|
const name = typeof error === "object" && error !== null ? safeStringify(error.name) : "";
|
|
34416
34764
|
const accessHint = /AccessDenied|NotAuthorized|Unauthorized/.test(name) ? " The caller needs cognito-idp:UpdateUserPool." : "";
|
|
34417
34765
|
const echoClause = echoError === void 0 ? "" : safeMsg`; the pool's own settings sent back were refused first (${mask(describeAwsFailure(echoError).summary)})`;
|
|
34418
34766
|
this.logger.debug(mask(safeMsg`UpdateUserPool did not turn DeletionProtection off on ${mask(physicalId)}: ${mask(describeAwsFailure(error).detail)}`));
|
|
34419
34767
|
const refused = error instanceof Error && isAwsAuthoredFailure(error);
|
|
34420
|
-
this.logger.warn(refused ? safeMsg`Cognito User Pool ${physicalId}: DeletionProtection was left on, because UpdateUserPool ` + safeMsg`refused to turn it off (${mask(describeAwsFailure(error).summary)})` + echoClause + safeMsg`. The delete will be refused while it is on.${accessHint}` : safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool failed without an answer from AWS ` + safeMsg`(${mask(describeAwsFailure(error).summary)})` + echoClause + (echoError === void 0 ? typeof error === "object" && error !== null && sentWithoutEmail.has(error) ? safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset, except the SES EmailConfiguration, which that write omitted: if it ` + safeMsg`landed, the pool's email configuration was ${EMAIL_RESET_BEFORE_DELETE_CLAUSE}` : safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset.` : safeMsg`, so whether DeletionProtection was turned off ALONE is unknown; if it was, the ` + safeMsg`pool's
|
|
34768
|
+
this.logger.warn(refused ? safeMsg`Cognito User Pool ${physicalId}: DeletionProtection was left on, because UpdateUserPool ` + safeMsg`refused to turn it off (${mask(describeAwsFailure(error).summary)})` + echoClause + safeMsg`. The delete will be refused while it is on.${accessHint}` : safeMsg`Cognito User Pool ${physicalId}: UpdateUserPool failed without an answer from AWS ` + safeMsg`(${mask(describeAwsFailure(error).summary)})` + echoClause + (echoError === void 0 ? typeof error === "object" && error !== null && sentWithoutEmail.has(error) ? safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset, except the SES EmailConfiguration, which that write omitted: if it ` + safeMsg`landed, the pool's email configuration was ${EMAIL_RESET_BEFORE_DELETE_CLAUSE}` : safeMsg`, so whether DeletionProtection was turned off is unknown. Its other settings were ` + safeMsg`not reset.` : safeMsg`, so whether DeletionProtection was turned off ALONE is unknown; if it was, the ` + safeMsg`pool's ${bareFlipResets(pool)} were reset.`) + safeMsg` If the delete then fails, cdkd turns the guard back on. Check the pool with ` + safeMsg`aws cognito-idp describe-user-pool.`);
|
|
34421
34769
|
}
|
|
34422
34770
|
async readCurrentState(physicalId, _logicalId, resourceType) {
|
|
34423
34771
|
if (resourceType !== "AWS::Cognito::UserPool") return void 0;
|
|
@@ -34459,6 +34807,8 @@ var CognitoUserPoolProvider = class {
|
|
|
34459
34807
|
}
|
|
34460
34808
|
result["UserPoolTags"] = userTags;
|
|
34461
34809
|
result["UserPoolTier"] = pool.UserPoolTier ?? "ESSENTIALS";
|
|
34810
|
+
if (pool.KeyConfiguration) result["KeyConfiguration"] = pool.KeyConfiguration;
|
|
34811
|
+
if (pool.IssuerConfiguration) result["IssuerConfiguration"] = pool.IssuerConfiguration;
|
|
34462
34812
|
try {
|
|
34463
34813
|
const mfa = await this.getClient().send(new GetUserPoolMfaConfigCommand({ UserPoolId: physicalId }));
|
|
34464
34814
|
const enabledMfas = [];
|
|
@@ -35730,11 +36080,11 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
|
|
|
35730
36080
|
if (hasTagChange) {
|
|
35731
36081
|
const arn = knownArn ?? (await client.send(new GetServiceCommand({ Id: physicalId }))).Service?.Arn;
|
|
35732
36082
|
if (!arn) throw new ProvisioningError(safeMsg`Could not resolve the ARN of service discovery service ${logicalId}; its Tags were not updated`, resourceType, logicalId, physicalId);
|
|
35733
|
-
if (tagPlan.remove.length > 0) await client.send(new UntagResourceCommand$
|
|
36083
|
+
if (tagPlan.remove.length > 0) await client.send(new UntagResourceCommand$19({
|
|
35734
36084
|
ResourceARN: arn,
|
|
35735
36085
|
TagKeys: tagPlan.remove
|
|
35736
36086
|
}));
|
|
35737
|
-
if (tagPlan.set.size > 0) await client.send(new TagResourceCommand$
|
|
36087
|
+
if (tagPlan.set.size > 0) await client.send(new TagResourceCommand$18({
|
|
35738
36088
|
ResourceARN: arn,
|
|
35739
36089
|
Tags: [...tagPlan.set].map(([Key, Value]) => ({
|
|
35740
36090
|
Key,
|
|
@@ -35850,11 +36200,11 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
|
|
|
35850
36200
|
const hasAdds = tagsToAdd.length > 0;
|
|
35851
36201
|
if (removedKeys.length === 0 && !hasAdds) return;
|
|
35852
36202
|
const arn = await this.resolveNamespaceArn(physicalId);
|
|
35853
|
-
if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
36203
|
+
if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$19({
|
|
35854
36204
|
ResourceARN: arn,
|
|
35855
36205
|
TagKeys: removedKeys
|
|
35856
36206
|
}));
|
|
35857
|
-
if (hasAdds) await this.getClient().send(new TagResourceCommand$
|
|
36207
|
+
if (hasAdds) await this.getClient().send(new TagResourceCommand$18({
|
|
35858
36208
|
ResourceARN: arn,
|
|
35859
36209
|
Tags: tagsToAdd
|
|
35860
36210
|
}));
|
|
@@ -36027,7 +36377,7 @@ var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
|
|
|
36027
36377
|
}
|
|
36028
36378
|
async attachTags(result, arn) {
|
|
36029
36379
|
try {
|
|
36030
|
-
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$
|
|
36380
|
+
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$15({ ResourceARN: arn }));
|
|
36031
36381
|
result["Tags"] = normalizeAwsTagsToCfn(tagsResp.Tags);
|
|
36032
36382
|
} catch (err) {
|
|
36033
36383
|
this.logger.debug(`ServiceDiscovery ListTagsForResource(${arn}) failed: ${describeAwsFailure(err).detail}`);
|
|
@@ -36619,7 +36969,7 @@ var AppSyncProvider = class {
|
|
|
36619
36969
|
const tagKeysToRemove = plan.remove;
|
|
36620
36970
|
const tagsToAdd = Object.fromEntries(plan.set);
|
|
36621
36971
|
if (tagKeysToRemove.length > 0) try {
|
|
36622
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
36972
|
+
await this.getClient().send(new UntagResourceCommand$20({
|
|
36623
36973
|
resourceArn: arn,
|
|
36624
36974
|
tagKeys: tagKeysToRemove
|
|
36625
36975
|
}));
|
|
@@ -36627,7 +36977,7 @@ var AppSyncProvider = class {
|
|
|
36627
36977
|
throw this.wrapUpdateError(error, resourceType, logicalId, apiId, "GraphqlApi (untag)", mask);
|
|
36628
36978
|
}
|
|
36629
36979
|
if (Object.keys(tagsToAdd).length > 0) try {
|
|
36630
|
-
await this.getClient().send(new TagResourceCommand$
|
|
36980
|
+
await this.getClient().send(new TagResourceCommand$19({
|
|
36631
36981
|
resourceArn: arn,
|
|
36632
36982
|
tags: tagsToAdd
|
|
36633
36983
|
}));
|
|
@@ -39322,11 +39672,11 @@ async function applyGlueTagDiff(client, resourceArn, recorded, desired, resource
|
|
|
39322
39672
|
if (toSet.size === 0 && plan.remove.length === 0) return;
|
|
39323
39673
|
unsettled.beforeWrite();
|
|
39324
39674
|
const arn = await resourceArn();
|
|
39325
|
-
if (toSet.size > 0) await client.send(new TagResourceCommand$
|
|
39675
|
+
if (toSet.size > 0) await client.send(new TagResourceCommand$20({
|
|
39326
39676
|
ResourceArn: arn,
|
|
39327
39677
|
TagsToAdd: Object.fromEntries(toSet)
|
|
39328
39678
|
}));
|
|
39329
|
-
if (plan.remove.length > 0) await client.send(new UntagResourceCommand$
|
|
39679
|
+
if (plan.remove.length > 0) await client.send(new UntagResourceCommand$21({
|
|
39330
39680
|
ResourceArn: arn,
|
|
39331
39681
|
TagsToRemove: plan.remove
|
|
39332
39682
|
}));
|
|
@@ -41108,7 +41458,7 @@ var BudgetsBudgetProvider = class {
|
|
|
41108
41458
|
const newTags = this.toSdkResourceTags(next.ResourceTags);
|
|
41109
41459
|
if (prevTags.kind === "list") await this.reconcileResourceTags(accountId, physicalId, this.toSdkResourceTags(removableRecorded("ResourceTags", prevTags.items)), newTags);
|
|
41110
41460
|
else {
|
|
41111
|
-
if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$
|
|
41461
|
+
if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$21({
|
|
41112
41462
|
ResourceARN: await this.budgetArn(accountId, physicalId),
|
|
41113
41463
|
ResourceTags: newTags
|
|
41114
41464
|
}));
|
|
@@ -41252,11 +41602,11 @@ var BudgetsBudgetProvider = class {
|
|
|
41252
41602
|
const removedKeys = oldTags.map((t) => t.Key).filter((k) => {
|
|
41253
41603
|
return typeof k === "string" && !newKeys.has(k);
|
|
41254
41604
|
});
|
|
41255
|
-
if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
41605
|
+
if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$22({
|
|
41256
41606
|
ResourceARN: arn,
|
|
41257
41607
|
ResourceTagKeys: removedKeys
|
|
41258
41608
|
}));
|
|
41259
|
-
if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$
|
|
41609
|
+
if (newTags.length > 0) await this.getClient().send(new TagResourceCommand$21({
|
|
41260
41610
|
ResourceARN: arn,
|
|
41261
41611
|
ResourceTags: newTags
|
|
41262
41612
|
}));
|
|
@@ -41336,7 +41686,7 @@ var BudgetsBudgetProvider = class {
|
|
|
41336
41686
|
}));
|
|
41337
41687
|
let tags;
|
|
41338
41688
|
try {
|
|
41339
|
-
tags = await client.send(new ListTagsForResourceCommand$
|
|
41689
|
+
tags = await client.send(new ListTagsForResourceCommand$16({ ResourceARN: await this.budgetArn(accountId, physicalId) }));
|
|
41340
41690
|
} catch (error) {
|
|
41341
41691
|
if (error instanceof NotFoundException$5 && await describe() === RESOURCE_NOT_FOUND) return RESOURCE_NOT_FOUND;
|
|
41342
41692
|
throw error;
|
|
@@ -42314,7 +42664,7 @@ var KinesisStreamConsumerProvider = class {
|
|
|
42314
42664
|
if (desc.ConsumerName !== void 0) result["ConsumerName"] = desc.ConsumerName;
|
|
42315
42665
|
if (desc.StreamARN !== void 0) result["StreamARN"] = desc.StreamARN;
|
|
42316
42666
|
try {
|
|
42317
|
-
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$
|
|
42667
|
+
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$17({ ResourceARN: physicalId }));
|
|
42318
42668
|
result["Tags"] = normalizeAwsTagsToCfn(tagsResp.Tags);
|
|
42319
42669
|
} catch (err) {
|
|
42320
42670
|
if (err instanceof ResourceNotFoundException$12) return RESOURCE_NOT_FOUND;
|
|
@@ -42331,14 +42681,14 @@ var KinesisStreamConsumerProvider = class {
|
|
|
42331
42681
|
const tagsToAdd = Object.fromEntries(plan.set);
|
|
42332
42682
|
const tagsToRemove = plan.remove;
|
|
42333
42683
|
if (tagsToRemove.length > 0) {
|
|
42334
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
42684
|
+
await this.getClient().send(new UntagResourceCommand$23({
|
|
42335
42685
|
ResourceARN: consumerArn,
|
|
42336
42686
|
TagKeys: tagsToRemove
|
|
42337
42687
|
}));
|
|
42338
42688
|
this.logger.debug(mask(`Removed ${tagsToRemove.length} tag(s) from Kinesis stream consumer ${consumerArn}`));
|
|
42339
42689
|
}
|
|
42340
42690
|
if (Object.keys(tagsToAdd).length > 0) {
|
|
42341
|
-
await this.getClient().send(new TagResourceCommand$
|
|
42691
|
+
await this.getClient().send(new TagResourceCommand$22({
|
|
42342
42692
|
ResourceARN: consumerArn,
|
|
42343
42693
|
Tags: tagsToAdd
|
|
42344
42694
|
}));
|
|
@@ -43145,11 +43495,11 @@ var PipesPipeProvider = class {
|
|
|
43145
43495
|
settled ??= await this.describe(physicalId);
|
|
43146
43496
|
const arn = settled.Arn;
|
|
43147
43497
|
if (!arn) throw new Error("DescribePipe returned no Arn, which tagging needs");
|
|
43148
|
-
if (plan.remove.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
43498
|
+
if (plan.remove.length > 0) await this.getClient().send(new UntagResourceCommand$24({
|
|
43149
43499
|
resourceArn: arn,
|
|
43150
43500
|
tagKeys: plan.remove
|
|
43151
43501
|
}));
|
|
43152
|
-
if (plan.set.size > 0) await this.getClient().send(new TagResourceCommand$
|
|
43502
|
+
if (plan.set.size > 0) await this.getClient().send(new TagResourceCommand$23({
|
|
43153
43503
|
resourceArn: arn,
|
|
43154
43504
|
tags: Object.fromEntries(plan.set)
|
|
43155
43505
|
}));
|
|
@@ -43576,11 +43926,11 @@ var EFSProvider = class {
|
|
|
43576
43926
|
const plan = planTagDiff(recorded, desired);
|
|
43577
43927
|
const warning = tagPlanWarning(plan, resourceType, logicalId);
|
|
43578
43928
|
if (warning !== void 0) log.warn(warning);
|
|
43579
|
-
if (plan.remove.length > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new UntagResourceCommand$
|
|
43929
|
+
if (plan.remove.length > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new UntagResourceCommand$25({
|
|
43580
43930
|
ResourceId: resourceId,
|
|
43581
43931
|
TagKeys: plan.remove
|
|
43582
43932
|
})), `UntagResource ${resourceId}`, log);
|
|
43583
|
-
if (plan.set.size > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new TagResourceCommand$
|
|
43933
|
+
if (plan.set.size > 0) await this.retryOnTransientControlPlane(() => this.getClient().send(new TagResourceCommand$24({
|
|
43584
43934
|
ResourceId: resourceId,
|
|
43585
43935
|
Tags: [...plan.set].map(([Key, Value]) => ({
|
|
43586
43936
|
Key,
|
|
@@ -44461,7 +44811,7 @@ const cfnKeepsOnRemoval = (name, shape, removed) => {
|
|
|
44461
44811
|
if (narrow) return narrow(shape, removed);
|
|
44462
44812
|
return !cfnRefusesRemoval(name, shape) && !shape.storageTypes.includes("INTELLIGENT_TIERING") && (CFN_KEEPS_ON_REMOVAL.has(name) || typeof shape.fileSystemType === "string" && CFN_KEEPS_TOP_LEVEL_ON_REMOVAL.get(shape.fileSystemType)?.has(name) === true);
|
|
44463
44813
|
};
|
|
44464
|
-
const leftInPlaceWarning$
|
|
44814
|
+
const leftInPlaceWarning$3 = (logicalId, names, caller, shape) => {
|
|
44465
44815
|
const one = names.length === 1;
|
|
44466
44816
|
const subject = one ? "property" : "properties";
|
|
44467
44817
|
const verb = one ? "is" : "are";
|
|
@@ -44825,7 +45175,7 @@ var FSxFileSystemProvider = class {
|
|
|
44825
45175
|
const leftInPlaceNames = [...TOP_LEVEL_LEFT_IN_PLACE_PROPS.filter((key) => properties[key] === void 0 && previousProperties[key] !== void 0), ...leftInPlace.map((key) => `${variantConfigKey}.${key}`)];
|
|
44826
45176
|
const warnLeftInPlace = () => {
|
|
44827
45177
|
if (leftInPlaceNames.length === 0 || context?.desiredFromAwsReadback) return;
|
|
44828
|
-
this.logger.warn(leftInPlaceWarning$
|
|
45178
|
+
this.logger.warn(leftInPlaceWarning$3(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy", {
|
|
44829
45179
|
fileSystemType: properties["FileSystemType"] ?? previousProperties["FileSystemType"],
|
|
44830
45180
|
storageTypes: [previousProperties["StorageType"], properties["StorageType"]],
|
|
44831
45181
|
deploymentTypes: [previousProperties, properties].map((side) => variantConfigKey ? side[variantConfigKey]?.["DeploymentType"] : void 0),
|
|
@@ -45168,11 +45518,11 @@ var FSxFileSystemProvider = class {
|
|
|
45168
45518
|
Value
|
|
45169
45519
|
}));
|
|
45170
45520
|
const toRemove = plan.remove;
|
|
45171
|
-
if (toSet.length > 0) await this.getClient().send(new TagResourceCommand$
|
|
45521
|
+
if (toSet.length > 0) await this.getClient().send(new TagResourceCommand$25({
|
|
45172
45522
|
ResourceARN: arn,
|
|
45173
45523
|
Tags: toSet
|
|
45174
45524
|
}));
|
|
45175
|
-
if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
45525
|
+
if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$26({
|
|
45176
45526
|
ResourceARN: arn,
|
|
45177
45527
|
TagKeys: toRemove
|
|
45178
45528
|
}));
|
|
@@ -45981,7 +46331,7 @@ const toNumber$1 = (v) => {
|
|
|
45981
46331
|
};
|
|
45982
46332
|
const jsonEqual$1 = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
45983
46333
|
const LEFT_IN_PLACE_ON_REMOVAL$1 = ["ResizeSpecifications", "InstanceTypeConfigs"];
|
|
45984
|
-
const leftInPlaceWarning$
|
|
46334
|
+
const leftInPlaceWarning$2 = (logicalId, names, caller) => {
|
|
45985
46335
|
const one = names.length === 1;
|
|
45986
46336
|
const subject = one ? "property" : "properties";
|
|
45987
46337
|
const verb = one ? "is" : "are";
|
|
@@ -46170,7 +46520,7 @@ var EMRInstanceFleetConfigProvider = class {
|
|
|
46170
46520
|
const leftInPlaceNames = LEFT_IN_PLACE_ON_REMOVAL$1.filter((key) => removed !== void 0 ? removed.has(key) : properties[key] === void 0 && previousProperties[key] !== void 0);
|
|
46171
46521
|
const warnLeftInPlace = () => {
|
|
46172
46522
|
if (leftInPlaceNames.length === 0 || context?.desiredFromAwsReadback) return;
|
|
46173
|
-
this.logger.warn(leftInPlaceWarning$
|
|
46523
|
+
this.logger.warn(leftInPlaceWarning$2(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
|
|
46174
46524
|
};
|
|
46175
46525
|
const leftInPlace = new Set(LEFT_IN_PLACE_ON_REMOVAL$1);
|
|
46176
46526
|
if (![...MUTABLE].some((k) => changed(k) && !(leftInPlace.has(k) && properties[k] === void 0))) {
|
|
@@ -46331,7 +46681,7 @@ const MUTABLE_TOP_LEVEL_PROPS = /* @__PURE__ */ new Set([
|
|
|
46331
46681
|
"AutoTerminationPolicy"
|
|
46332
46682
|
]);
|
|
46333
46683
|
const LEFT_IN_PLACE_ON_REMOVAL = ["StepConcurrencyLevel"];
|
|
46334
|
-
const leftInPlaceWarning = (logicalId, names, caller) => {
|
|
46684
|
+
const leftInPlaceWarning$1 = (logicalId, names, caller) => {
|
|
46335
46685
|
const one = names.length === 1;
|
|
46336
46686
|
const subject = one ? "property" : "properties";
|
|
46337
46687
|
const verb = one ? "is" : "are";
|
|
@@ -46892,7 +47242,7 @@ var EMRClusterProvider = class {
|
|
|
46892
47242
|
const leftInPlaceNames = LEFT_IN_PLACE_ON_REMOVAL.filter((key) => removed !== void 0 ? removed.has(key) : properties[key] === void 0 && previousProperties[key] !== void 0);
|
|
46893
47243
|
const warnLeftInPlace = () => {
|
|
46894
47244
|
if (leftInPlaceNames.length === 0 || context?.desiredFromAwsReadback) return;
|
|
46895
|
-
this.logger.warn(leftInPlaceWarning(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
|
|
47245
|
+
this.logger.warn(leftInPlaceWarning$1(logicalId, leftInPlaceNames, context?.replayingState ? "rollback" : "deploy"));
|
|
46896
47246
|
};
|
|
46897
47247
|
const visibleChanged = changed("VisibleToAllUsers");
|
|
46898
47248
|
const stepConcurrencyChanged = changed("StepConcurrencyLevel") && properties["StepConcurrencyLevel"] !== void 0;
|
|
@@ -48551,6 +48901,19 @@ function withoutTrailIdentifiers(text, physicalId) {
|
|
|
48551
48901
|
}
|
|
48552
48902
|
return out;
|
|
48553
48903
|
}
|
|
48904
|
+
function removalsLeftInPlace(properties, previousProperties, context, globalEventsResetSkipped) {
|
|
48905
|
+
if (context?.desiredFromAwsReadback) return [];
|
|
48906
|
+
const removed = context?.removedProperties;
|
|
48907
|
+
const wasRemoved = (key) => previousProperties[key] != null && properties[key] == null && (removed === void 0 || removed.has(key));
|
|
48908
|
+
const org = previousProperties["IsOrganizationTrail"];
|
|
48909
|
+
const globalEvents = previousProperties["IncludeGlobalServiceEvents"];
|
|
48910
|
+
return [...wasRemoved("IsOrganizationTrail") && org !== false && org !== "false" ? ["IsOrganizationTrail"] : [], ...globalEventsResetSkipped && wasRemoved("IncludeGlobalServiceEvents") && globalEvents !== false && globalEvents !== "false" ? ["IncludeGlobalServiceEvents"] : []];
|
|
48911
|
+
}
|
|
48912
|
+
function leftInPlaceWarning(logicalId, names, caller) {
|
|
48913
|
+
const one = names.length === 1;
|
|
48914
|
+
const subject = one ? "property" : "properties";
|
|
48915
|
+
return caller === "rollback" ? safeMsg`${logicalId} (AWS::CloudTrail::Trail): ${subject} ${names.join(", ")} ${one ? "is" : "are"} absent from the state being restored; UpdateTrail keeps a field it is not sent, so the rollback leaves the value the failed deploy applied in place.` : safeMsg`${logicalId} (AWS::CloudTrail::Trail): ${subject} ${names.join(", ")} ${one ? "was" : "were"} removed from the template; cdkd leaves the current AWS value in place (whether CloudFormation resets it is unmeasured). Declare the intended value explicitly to change it.`;
|
|
48916
|
+
}
|
|
48554
48917
|
var CloudTrailProvider = class {
|
|
48555
48918
|
client;
|
|
48556
48919
|
createClient;
|
|
@@ -48566,6 +48929,23 @@ var CloudTrailProvider = class {
|
|
|
48566
48929
|
return error instanceof Error ? markRedactedCause(wrapped) : wrapped;
|
|
48567
48930
|
}
|
|
48568
48931
|
removalDefaults = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Map([["IsMultiRegionTrail", false], ["EnableLogFileValidation", false]])]]);
|
|
48932
|
+
removalHandledInUpdate = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Set([
|
|
48933
|
+
"S3BucketName",
|
|
48934
|
+
"IsLogging",
|
|
48935
|
+
"TrailName",
|
|
48936
|
+
"S3KeyPrefix",
|
|
48937
|
+
"SnsTopicName",
|
|
48938
|
+
"KMSKeyId",
|
|
48939
|
+
"CloudWatchLogsLogGroupArn",
|
|
48940
|
+
"CloudWatchLogsRoleArn",
|
|
48941
|
+
"EventSelectors",
|
|
48942
|
+
"AdvancedEventSelectors",
|
|
48943
|
+
"InsightSelectors",
|
|
48944
|
+
"AggregationConfigurations",
|
|
48945
|
+
"Tags",
|
|
48946
|
+
"IncludeGlobalServiceEvents",
|
|
48947
|
+
"IsOrganizationTrail"
|
|
48948
|
+
])]]);
|
|
48569
48949
|
handledProperties = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Set([
|
|
48570
48950
|
"S3BucketName",
|
|
48571
48951
|
"TrailName",
|
|
@@ -48695,7 +49075,8 @@ var CloudTrailProvider = class {
|
|
|
48695
49075
|
const s3BucketName = properties["S3BucketName"];
|
|
48696
49076
|
const s3KeyPrefix = clearOnUpdateRemoval(emptyToUndefined(properties["S3KeyPrefix"]), emptyToUndefined(previousProperties["S3KeyPrefix"]), "");
|
|
48697
49077
|
const isMultiRegionTrail = properties["IsMultiRegionTrail"];
|
|
48698
|
-
const
|
|
49078
|
+
const globalEventsResetSkipped = isMultiRegionTrail !== false;
|
|
49079
|
+
const includeGlobalServiceEvents = globalEventsResetSkipped ? properties["IncludeGlobalServiceEvents"] : clearOnUpdateRemoval(properties["IncludeGlobalServiceEvents"], previousProperties["IncludeGlobalServiceEvents"], false);
|
|
48699
49080
|
const enableLogFileValidation = properties["EnableLogFileValidation"];
|
|
48700
49081
|
const isLogging = properties["IsLogging"];
|
|
48701
49082
|
const cwPair = resolveCloudWatchLogsPair(properties);
|
|
@@ -48720,6 +49101,8 @@ var CloudTrailProvider = class {
|
|
|
48720
49101
|
SnsTopicName: snsTopicName,
|
|
48721
49102
|
IsOrganizationTrail: isOrganizationTrail
|
|
48722
49103
|
}));
|
|
49104
|
+
const keptNames = removalsLeftInPlace(properties, previousProperties, context, globalEventsResetSkipped);
|
|
49105
|
+
if (keptNames.length > 0) this.logger.warn(leftInPlaceWarning(logicalId, keptNames, context?.replayingState ? "rollback" : "deploy"));
|
|
48723
49106
|
const basicRead = readListBlock(properties["EventSelectors"], "AWS::CloudTrail::Trail EventSelectors");
|
|
48724
49107
|
const advancedRead = readListBlock(properties["AdvancedEventSelectors"], "AWS::CloudTrail::Trail AdvancedEventSelectors");
|
|
48725
49108
|
for (const read of [basicRead, advancedRead]) if (read.kind === "unusable") this.logger.warn(safeMsg`${read.detail} The trail's existing event selectors are left untouched for this update rather than reset to the AWS default.`);
|
|
@@ -49730,11 +50113,11 @@ var CodeCommitRepositoryProvider = class {
|
|
|
49730
50113
|
const repoArn = metadata?.Arn;
|
|
49731
50114
|
if (repoArn) {
|
|
49732
50115
|
const removedKeys = Object.keys(oldTagMap).filter((k) => !Object.hasOwn(newTagMap, k));
|
|
49733
|
-
if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
50116
|
+
if (removedKeys.length > 0) await this.getClient().send(new UntagResourceCommand$27({
|
|
49734
50117
|
resourceArn: repoArn,
|
|
49735
50118
|
tagKeys: removedKeys
|
|
49736
50119
|
}));
|
|
49737
|
-
if (Object.keys(newTagMap).length > 0) await this.getClient().send(new TagResourceCommand$
|
|
50120
|
+
if (Object.keys(newTagMap).length > 0) await this.getClient().send(new TagResourceCommand$26({
|
|
49738
50121
|
resourceArn: repoArn,
|
|
49739
50122
|
tags: newTagMap
|
|
49740
50123
|
}));
|
|
@@ -49931,7 +50314,7 @@ var CodeCommitRepositoryProvider = class {
|
|
|
49931
50314
|
if (!metadata) return void 0;
|
|
49932
50315
|
let tags = [];
|
|
49933
50316
|
if (metadata.Arn) try {
|
|
49934
|
-
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$
|
|
50317
|
+
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$18({ resourceArn: metadata.Arn }));
|
|
49935
50318
|
tags = normalizeAwsTagsToCfn(tagsResp.tags);
|
|
49936
50319
|
} catch (err) {
|
|
49937
50320
|
if (err instanceof RepositoryDoesNotExistException) return RESOURCE_NOT_FOUND;
|
|
@@ -50206,7 +50589,7 @@ var DLMLifecyclePolicyProvider = class {
|
|
|
50206
50589
|
if (tagsChanged && arn) {
|
|
50207
50590
|
const removedKeys = plan.remove;
|
|
50208
50591
|
if (removedKeys.length > 0) {
|
|
50209
|
-
await this.getClient().send(new UntagResourceCommand$
|
|
50592
|
+
await this.getClient().send(new UntagResourceCommand$28({
|
|
50210
50593
|
ResourceArn: arn,
|
|
50211
50594
|
TagKeys: removedKeys
|
|
50212
50595
|
}));
|
|
@@ -50214,7 +50597,7 @@ var DLMLifecyclePolicyProvider = class {
|
|
|
50214
50597
|
}
|
|
50215
50598
|
const tagsToAdd = Object.fromEntries(plan.set);
|
|
50216
50599
|
if (Object.keys(tagsToAdd).length > 0) {
|
|
50217
|
-
await this.getClient().send(new TagResourceCommand$
|
|
50600
|
+
await this.getClient().send(new TagResourceCommand$27({
|
|
50218
50601
|
ResourceArn: arn,
|
|
50219
50602
|
Tags: tagsToAdd
|
|
50220
50603
|
}));
|
|
@@ -50378,11 +50761,11 @@ var S3VectorsProvider = class {
|
|
|
50378
50761
|
}
|
|
50379
50762
|
if (!resourceArn) throw new ProvisioningError(`Could not resolve ARN for S3 VectorBucket ${logicalId} (${mask(physicalId)}); cannot apply tag update.`, resourceType, logicalId, physicalId);
|
|
50380
50763
|
try {
|
|
50381
|
-
if (Object.keys(toSet).length > 0) await this.getClient().send(new TagResourceCommand$
|
|
50764
|
+
if (Object.keys(toSet).length > 0) await this.getClient().send(new TagResourceCommand$28({
|
|
50382
50765
|
resourceArn,
|
|
50383
50766
|
tags: toSet
|
|
50384
50767
|
}));
|
|
50385
|
-
if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$
|
|
50768
|
+
if (toRemove.length > 0) await this.getClient().send(new UntagResourceCommand$29({
|
|
50386
50769
|
resourceArn,
|
|
50387
50770
|
tagKeys: toRemove
|
|
50388
50771
|
}));
|
|
@@ -50484,7 +50867,7 @@ var S3VectorsProvider = class {
|
|
|
50484
50867
|
if (Object.keys(enc).length > 0) result["EncryptionConfiguration"] = enc;
|
|
50485
50868
|
}
|
|
50486
50869
|
if (bucket?.vectorBucketArn) try {
|
|
50487
|
-
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$
|
|
50870
|
+
const tagsResp = await this.getClient().send(new ListTagsForResourceCommand$19({ resourceArn: bucket.vectorBucketArn }));
|
|
50488
50871
|
result["Tags"] = normalizeAwsTagsToCfn(tagsResp.tags);
|
|
50489
50872
|
} catch (err) {
|
|
50490
50873
|
this.logger.debug(`S3Vectors ListTagsForResource(${bucket.vectorBucketArn}) failed: ${describeAwsFailure(err).detail}`);
|
|
@@ -51162,7 +51545,7 @@ var S3DirectoryBucketProvider = class {
|
|
|
51162
51545
|
const resourceArn = await this.buildBucketArn(physicalId, accountId);
|
|
51163
51546
|
if (removedKeys.length > 0) {
|
|
51164
51547
|
context?.markUnsettled?.("Tags");
|
|
51165
|
-
await this.getS3ControlClient().send(new UntagResourceCommand$
|
|
51548
|
+
await this.getS3ControlClient().send(new UntagResourceCommand$13({
|
|
51166
51549
|
AccountId: accountId,
|
|
51167
51550
|
ResourceArn: resourceArn,
|
|
51168
51551
|
TagKeys: removedKeys
|
|
@@ -51170,7 +51553,7 @@ var S3DirectoryBucketProvider = class {
|
|
|
51170
51553
|
}
|
|
51171
51554
|
if (tagsToApply.length > 0) {
|
|
51172
51555
|
context?.markUnsettled?.("Tags");
|
|
51173
|
-
await this.getS3ControlClient().send(new TagResourceCommand$
|
|
51556
|
+
await this.getS3ControlClient().send(new TagResourceCommand$13({
|
|
51174
51557
|
AccountId: accountId,
|
|
51175
51558
|
ResourceArn: resourceArn,
|
|
51176
51559
|
Tags: tagsToApply
|
|
@@ -51325,7 +51708,7 @@ var S3DirectoryBucketProvider = class {
|
|
|
51325
51708
|
async readTags(bucketName) {
|
|
51326
51709
|
const accountId = await this.getAccountId();
|
|
51327
51710
|
const resourceArn = await this.buildBucketArn(bucketName, accountId);
|
|
51328
|
-
const resp = await this.getS3ControlClient().send(new ListTagsForResourceCommand$
|
|
51711
|
+
const resp = await this.getS3ControlClient().send(new ListTagsForResourceCommand$11({
|
|
51329
51712
|
AccountId: accountId,
|
|
51330
51713
|
ResourceArn: resourceArn
|
|
51331
51714
|
}));
|
|
@@ -53678,4 +54061,4 @@ var ACMCertificateProvider = class {
|
|
|
53678
54061
|
|
|
53679
54062
|
//#endregion
|
|
53680
54063
|
export { ACMCertificateProvider, ASGProvider, AgentCoreBrowserProvider, AgentCoreCodeInterpreterProvider, AgentCoreEvaluatorProvider, AgentCoreRuntimeProvider, ApiGatewayProvider, ApiGatewayV2Provider, AppSyncProvider, BudgetsBudgetProvider, CloudFrontDistributionProvider, CloudFrontOACProvider, CloudFrontOAIProvider, CloudTrailProvider, CloudWatchAlarmProvider, CloudWatchAnomalyDetectorProvider, CodeBuildProvider, CodeCommitRepositoryProvider, CognitoUserPoolProvider, DLMLifecyclePolicyProvider, DocDBProvider, DocDBSubnetGroupProvider, DynamoDBGlobalTableProvider, DynamoDBTableProvider, EC2Provider, ECRProvider, ECSProvider, EFSProvider, ELBv2Provider, EMRClusterProvider, EMRInstanceFleetConfigProvider, EMRInstanceGroupConfigProvider, ElastiCacheProvider, EventBridgeBusProvider, EventBridgeRuleProvider, FSxFileSystemProvider, FirehoseProvider, GlueConnectionProvider, GlueCrawlerProvider, GlueJobProvider, GlueProvider, GlueSecurityConfigurationProvider, GlueTriggerProvider, GlueWorkflowProvider, IAMAccessKeyProvider, IAMInstanceProfileProvider, IAMManagedPolicyProvider, IAMPolicyProvider, IAMRoleProvider, IAMUserGroupProvider, KMSProvider, KinesisStreamConsumerProvider, KinesisStreamProvider, LambdaEventInvokeConfigProvider, LambdaEventSourceMappingProvider, LambdaFunctionProvider, LambdaLayerVersionProvider, LambdaMicrovmImageProvider, LambdaNetworkConnectorProvider, LambdaPermissionProvider, LambdaUrlProvider, LambdaWebFunctionEndpointProvider, LambdaWebFunctionRevisionProvider, LogsLogGroupProvider, NeptuneProvider, NestedStackProvider, PipesPipeProvider, RDSDBProxyEndpointProvider, RDSDBProxyProvider, RDSDBProxyTargetGroupProvider, RDSProvider, Route53Provider, S3BucketPolicyProvider, S3BucketProvider, S3DirectoryBucketProvider, S3TablesProvider, S3VectorsProvider, SNSSubscriptionProvider, SNSTopicPolicyProvider, SNSTopicProvider, SQSQueuePolicyProvider, SQSQueueProvider, SSMParameterProvider, SchedulerScheduleProvider, SecretsManagerSecretProvider, ServiceDiscoveryProvider, StepFunctionsProvider, WAFv2WebACLProvider, WaitConditionHandleProvider };
|
|
53681
|
-
//# sourceMappingURL=provider-classes-
|
|
54064
|
+
//# sourceMappingURL=provider-classes-ZqxIefLl.js.map
|