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