@go-to-k/cdkd 0.291.4 → 0.291.6
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-_vdcb9QG.js → asg-provider-B1pinTYm.js} +4 -4
- package/dist/asg-provider-B1pinTYm.js.map +1 -0
- package/dist/{aws-client-defaults-BoIxyCir.js → aws-client-defaults-jISU4PHo.js} +70 -2
- package/dist/aws-client-defaults-jISU4PHo.js.map +1 -0
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-CpMT9Bmm.js → deploy-engine-BrGb93QQ.js} +138 -33
- package/dist/deploy-engine-BrGb93QQ.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{program-C5r-kmIQ.js → program-CGPchKa2.js} +154 -157
- package/dist/{program-C5r-kmIQ.js.map → program-CGPchKa2.js.map} +1 -1
- package/dist/{version-ChuDKy_E.js → version-DQAkja2a.js} +2 -2
- package/dist/{version-ChuDKy_E.js.map → version-DQAkja2a.js.map} +1 -1
- package/package.json +1 -1
- package/dist/asg-provider-_vdcb9QG.js.map +0 -1
- package/dist/aws-client-defaults-BoIxyCir.js.map +0 -1
- package/dist/deploy-engine-CpMT9Bmm.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $ as yellow, $a as
|
|
1
|
+
import { $ as yellow, $a as retryClassificationText, $i as expectedOwnerParam, $n as repairMalformedResourcePropertiesForReadOnly, $r as rewriteTemplateAssetReferences, $t as requireConfigObject, A as createPreDeleteFinalSnapshot, Aa as LocalInvokeBuildError$1, Ai as getDefaultStateBucketName, An as malformedOutputsRefusalMessage, Ar as buildForceUnlockCommand, At as carriesDynamicReference, B as isStatefulRecreateTargetSync, Ba as StackTerminationProtectionError, Bi as warnDeprecatedNoPrefixCliFlag, Bn as refuseMalformedOrphansForDestroy, Br as hasUnverifiableParameterRefusal, Bt as isSettledInstanceState, C as namesAnyDeclaredParameter, Ca as CdkdError, Ci as runDockerStreaming, Cn as isReadableResourceEntry, Cr as recoverMaskedOutput, Ct as slowCcOperationTimeoutMs, D as PRE_DELETE_SNAPSHOT_TYPES, Da as DeployCancelledError, Di as getDockerImageBySourceHash, Dn as malformedOrphanRecordsWarning, Dr as S3StateBackend, Dt as disableInstanceApiTermination, E as ATOMIC_FINAL_SNAPSHOT_TYPES, Ei as AssetManifestLoader, En as malformedLocalOutputsWarning, Er as LockManager, Et as deleteSkipReason, F as extractDeploymentEventError, Fa as PartialFailureError, Fi as resolveSkipPrefix, Fn as malformedResourcesWarning, Fr as CUSTOM_RESOURCE_RESPONSE_PREFIX, Ft as isImpossibleEmptyStoredAttribute, G as toCfnInteger, Ga as normalizeAwsError, Gi as findLargeInlineResources, Gn as refuseMalformedResourceEntries, Gr as orphansCarriedFrom, Gt as coerceCfnBoolean, H as WARM_THROUGHPUT_MEMBERS, Ha as SynthesisError, Hi as CFN_TEMPLATE_BODY_LIMIT, Hn as refuseMalformedOutputs, Hr as importableOutputs, Ht as normalizeAwsTagsToCfn, I as makeSiblingClaimReader, Ia as ProvisioningError, Ii as resolveStateBucketWithDefault, In as malformedStateRefusalMessage, Ir as DEFAULT_STATE_PREFIX, It as isNamelessDynamicReferenceError, J as bold, Ja as isRetryableTransientError, Ji as injectiveKey, Jn as refuseMalformedResourcesForDestroy, Jr as stringifyValue, Jt as configIntegerRefusal, K as toFiniteNumber, Ka as withErrorHandling, Ki as uploadCfnTemplate, Kn as refuseMalformedResourceEntriesForOrphan, Kr as shouldRetainResource, Kt as coerceCfnInteger, L as planOrphanAdoption, La as ResourceTimeoutError, Li as resolveStateBucketWithDefaultAndSource, Ln as refuseDivergentRecordRegionForDestroy, Lr as exportNamesCarriedFrom, Lt as isUnboundTemplateParameter, M as refusesFinalSnapshot, Mi as resolveApp, Mn as malformedRenderedContainersWarning, Mr as forceQuitRecoveryClause, Mt as cfnRefValueFromPhysicalId, N as unsupportedFinalSnapshotError, Na as MalformedProducerRecordRefusalError, Ni as resolveAutoAssetStorage, Nn as malformedResourceEntriesWarning, Nr as formatLockExpiry, Nt as coerceParameterTypedValue, O as buildFinalSnapshotIdentifier, Oa as DynamicReferenceRegionAmbiguousError, Oi as Synthesizer, On as malformedOrphansRefusalMessage, Or as rebuildClientForBucketRegion, Ot as isTerminationProtectionPropagationError, P as makeCanonicalizePropertiesFn, Pa as NestedStackChildDirectDestroyError, Pi as resolveCaptureObservedState, Pn as malformedResourcePropertiesWarning, Pr as shellQuote, Pt as getAccountInfo, Q as red, Qa as markRedactedCause, Qi as decodeListingKey, Qn as repairMalformedResourceEntriesForReadOnly, Qr as loadPublishableAssetManifest, Qt as requireConfigArray, R as MULTI_REGION_RECREATE_BLOCKED_TYPES, Ra as ResourceUpdateNotSupportedError, Ri as resolveUseCdkBootstrapAssets, Rn as refuseMalformedNestedChildOutputs, Rr as hasReadableExportSet, Rt as parameterTypeMayLoseSecretIdentity, S as computeParameterTaint, Si as runDockerForeground, Sn as hasReadableResources, Sr as recordMaskOnlyValue, St as isWaitAbandonedError, T as resourcesNamingDeclaredParameter, Ta as CrossAccountSecretRefusalError, Ti as stripControlChars, Tn as malformedExportSourceWarning, Tr as scrubResourceRecord, Tt as deleteIndeterminateGuards, U as coerceWarmThroughput$1, Ui as CFN_TEMPLATE_URL_LIMIT, Un as refuseMalformedOutputsForDestroy, Ur as isReadableBag, Ut as resolveExplicitPhysicalId, V as renderStatefulReason, Vi as ssmResolvedValueType, Vn as refuseMalformedOrphansForOrphan, Vr as importableOutputKeys, Vt as WAFv2WebACLProvider, W as isWarmThroughputDecrease, Wi as MIGRATE_TMP_PREFIX, Wn as refuseMalformedResourceAttributesForOrphan, Wr as orphansAfterRollback, Wt as assertRegionMatch, X as gray, Xa as isTransientServerError, Xi as producerCoordinateKey, Xn as repairMalformedOrphansForReadOnly, Xr as buildAssetRedirectMap, Xt as readConfigString, Y as cyan, Ya as isThrottlingError, Yi as injectiveKeyPrefix, Yn as refuseMalformedState, Yr as WorkGraph, Yt as configStringRefusal, Z as green, Za as markNonRetryable, Zi as producerRecordKey, Zn as repairMalformedOutputsForReadOnly, Zr as createAssetRedirectResolver, Zt as replayWarn, _ as bagHoldsSecretExpression, _a as AwsClients, _i as dockerSpawnEnvWithSensitive, _n as UNREADABLE_ORPHANS_CONTAINER_ROW, _r as identityKeyFor, _t as endCommandInterruptScope, a as DeploymentEventsStore, aa as globMatches, ai as isCrossRegionRedirect, an as s3BucketDomainName, ar as describeTypeWithThrottleRetry, at as secretBearingStateKeyWarning, b as mergeNoChangeOutputs, ba as runWithStackAwsClients, bi as partitionSensitiveEnv, bn as hasReadableOrphans, br as maskSecretsInError, bt as startInterruptWatch, c as replayFailedOperations, ca as hasOwnKey, ci as validateAssetBucketName, cn as s3BucketWebsiteUrl, cr as TemplateParser, ct as IAMRoleProvider, d as updatePartialMessage, da as ownValue, di as buildDockerImage, dn as applyCallerIdentityCredentials, dr as STATE_SOURCED_READBACK_RULES, dt as ProviderRegistry, ea as PARTITION_TABLE, ei as AssetModeResolver, en as requireConfigString, eo as describeAwsFailure, er as repairMalformedResourcesForReadOnly, et as collectDeclaredOutputNames, f as updatePartialReason, fa as absoluteAssemblyPathEscape, fi as resolveDockerContextDirectory, fn as callerEnvCredentials, fr as TEMPLATE_SOURCED_RULES, ft as wouldReturnToSdkProvider, g as computeImplicitDeleteEdges, ga as resolveBucketRegion, gi as describeDockerFailure, gn as STATE_RESOURCES_MALFORMED, gr as errorCauseChain, gt as beginCommandInterruptScope, h as IMPLICIT_DELETE_DEPENDENCIES, hi as describeDockerExecFailure, hn as INTRINSIC_KEYS, hr as dynamicReferenceTokens, ht as maskerOrIdentity, i as DeploymentEventsReader, ia as failedStageNote, ii as getBootstrapMarkerKey, in as s3BucketArn, ir as findSilentDropProperties, it as secretBearing, j as isFinalSnapshotError, ja as LocalStartServiceError, ji as getLegacyStateBucketName, jn as malformedOutputsWarning, jr as buildLockContentionMessage, jt as carriesFetchableDynamicReference, k as ccRoutedFinalSnapshotError, ka as IntrinsicResolutionRefusalError, ki as synthesisStatusMessage, kn as malformedOrphansWarning, kr as UNREPRODUCIBLE_LOCK_CLAUSE, kt as IntrinsicFunctionResolver, l as replayRollback, la as hasPlainPrototype, li as validateContainerRepoName, ln as applyRoleArnIfSet, lr as STATE_SOURCED_BASELINE_RULES, lt as collectInlinePolicyNamesManagedBySiblings, m as maskingRetryLogger, ma as resolveAssemblyPath, mi as describeDockerCapturedOutput, mn as DiffCalculator, mr as createSecretMasker, mt as maskDeep, n as DEFAULT_RESOURCE_WARN_AFTER_MS, na as derivePartitionAndUrlSuffix, ni as assertAssetBucketRegion, nn as producerRegionsFromState, nr as safeStackName, nt as exportAliasCollisionScrubWarning, o as planFailedOps, oa as processStackMessages, oi as parseBootstrapMarker, on as s3BucketDualStackDomainName, or as withRetry, ot as secretSafeKeyDisplay, p as withResourceDeadline, pa as renderAssemblyPathEscape, pi as warnManifestExecutable, pn as envCredentialsAreAssumedRole, pr as carriesSecretMask, pt as createMaskedRetryLogger, q as formatResourceLine, qa as isMarkedNonRetryable, qi as CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION, qn as refuseMalformedResourcePropertiesForOrphan, qr as AssetPublisher, qt as configBooleanRefusal, r as DeployEngine, ra as AssemblyReader, ri as ensureAssetStorage, rn as withSharedDrainBudget, rr as findActionableSilentDrops, rt as isExportAliasCollision, s as planRollback, sa as defineOwnKey, si as readBootstrapMarkerBody, sn as s3BucketRegionalDomainName, sr as DagBuilder, st as getCurrentResourceSecrets, t as DEFAULT_RESOURCE_TIMEOUT_MS, ta as canonicalizeRegion, ti as BOOTSTRAP_MARKER_PREFIX, tn as classifyReplaySecretRegion, to as safeStringify, tr as safeRegion, tt as collectPublishedOutputNames, u as resolveReplacementOldType, ua as nullPrototypeRecord, ui as buildDenyExternalAccessPolicy, un as AWS_CREDENTIAL_ENV_KEYS, ur as STATE_SOURCED_CROSS_GENERATION_RULES, ut as clearOnUpdateRemoval, v as isSecretBearingReferenceString, va as getAwsClients, vi as formatDockerLoginError, vn as UNREADABLE_RESOURCES_MAP_ROW, vr as isSingleDynamicReferenceToken, vt as interruptWatchListenerCount, w as reachableDivergentParameters, wi as escapeRegExp, wn as malformedExportNamesWarning, wr as redactSecretsForState, wt as UNSPECIFIED_SKIP_REASON, x as bindingSkippedOutputs, xa as setAwsClients, xi as redactDockerArgvValues, xn as hasReadableOutputs, xr as maskSecretsInText, xt as CloudControlProvider, y as keptWholeReasonText, ya as resetAwsClients, yi as getDockerCmd, yn as displayLogicalId, yr as markSameGenerationBag, yt as isInterruptedWaitError, z as isStatefulRecreateTargetForReplace, za as StackHasActiveImportsError, zi as stateBucketExistenceConfirmed, zn as refuseMalformedOrphans, zr as hasReasonlessBaselineRefusal, zt as refStateLookupFromResource } from "./deploy-engine-BrGb93QQ.js";
|
|
2
2
|
import { C as displayAwsMessage, D as truncateCodePoints, E as isPasteableIdent, S as UNRENDERABLE, T as displaySafe, _ as withSkipPrefix, b as SECRET_REF_MAX_CODE_POINTS, c as PATTERN_B_NAME_OPTIONS, f as explicitNamePropertyFor, h as getCurrentStackName, i as reserveStdoutForPayload, l as PATTERN_B_NAME_PROPERTIES, m as generateResourceNameWithFallback, n as getLogger, o as runStackBuffered, p as generateResourceName, s as getLiveRenderer, u as PATTERN_B_RESOURCE_TYPES, v as withStackName, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS } from "./logger-GASr9bAF.js";
|
|
3
|
-
import { n as awsClientDefaults } from "./aws-client-defaults-
|
|
4
|
-
import { t as getCdkdVersion } from "./version-
|
|
5
|
-
import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-
|
|
3
|
+
import { n as awsClientDefaults, s as ambientRegion } from "./aws-client-defaults-jISU4PHo.js";
|
|
4
|
+
import { t as getCdkdVersion } from "./version-DQAkja2a.js";
|
|
5
|
+
import { a as renderDisableCommand, i as protectedReplacementAdvice, r as UNNAMEABLE_ID_CLAUSE, t as ASGProvider } from "./asg-provider-B1pinTYm.js";
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
7
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
8
8
|
import { CopyObjectCommand, 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, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchBucket, NotFound, PutBucketAccelerateConfigurationCommand, PutBucketAnalyticsConfigurationCommand, PutBucketCorsCommand, PutBucketEncryptionCommand, PutBucketIntelligentTieringConfigurationCommand, PutBucketInventoryConfigurationCommand, PutBucketLifecycleConfigurationCommand, PutBucketLoggingCommand, PutBucketMetricsConfigurationCommand, PutBucketNotificationConfigurationCommand, PutBucketOwnershipControlsCommand, PutBucketPolicyCommand, PutBucketReplicationCommand, PutBucketTaggingCommand, PutBucketVersioningCommand, PutBucketWebsiteCommand, PutObjectCommand, PutObjectLockConfigurationCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -7284,11 +7284,10 @@ function isTruthyCfnBoolean(value) {
|
|
|
7284
7284
|
* rather than a fallback.
|
|
7285
7285
|
*
|
|
7286
7286
|
* ONE clause for both arms so the two cannot come to render the same value
|
|
7287
|
-
* differently. The
|
|
7288
|
-
*
|
|
7289
|
-
*
|
|
7290
|
-
*
|
|
7291
|
-
* COMMAND half across providers, not prose).
|
|
7287
|
+
* differently. The PROSE copy of the name each arm carries BESIDE it goes
|
|
7288
|
+
* through `displaySafe` at the arm, masked first (issue
|
|
7289
|
+
* [#3269](https://github.com/go-to-k/cdkd/issues/3269)): unlike the command, a
|
|
7290
|
+
* sanitized prose name names no target, so it is rendered rather than withheld.
|
|
7292
7291
|
*
|
|
7293
7292
|
* `maskSecrets` is REQUIRED rather than optional, and both call sites build it
|
|
7294
7293
|
* from `context?.maskSecrets` (security review of #3136, which found these two
|
|
@@ -8383,8 +8382,8 @@ function canonicalizeItemList(properties, key, fold) {
|
|
|
8383
8382
|
function describeValue$1(value, maskSecrets = (text) => text) {
|
|
8384
8383
|
if (value === null) return "null";
|
|
8385
8384
|
if (Array.isArray(value)) return "an array";
|
|
8386
|
-
if (typeof value === "string") return `a string ${JSON.stringify(maskDeep(value, maskSecrets))}`;
|
|
8387
|
-
if (isPlainObject$2(value)) return `an object with keys [${Object.keys(value).map((key) => maskSecrets(key)).join(", ")}]`;
|
|
8385
|
+
if (typeof value === "string") return `a string ${displaySafe(JSON.stringify(maskDeep(value, maskSecrets)))}`;
|
|
8386
|
+
if (isPlainObject$2(value)) return `an object with keys [${Object.keys(value).map((key) => displaySafe(maskSecrets(key))).join(", ")}]`;
|
|
8388
8387
|
return `a ${typeof value} (${maskSecrets(String(value))})`;
|
|
8389
8388
|
}
|
|
8390
8389
|
/**
|
|
@@ -8709,7 +8708,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8709
8708
|
Bucket: bucketName,
|
|
8710
8709
|
VersioningConfiguration: { Status: status }
|
|
8711
8710
|
}));
|
|
8712
|
-
this.logger.debug(`Applied versioning (${status}) to bucket ${bucketName}`);
|
|
8711
|
+
this.logger.debug(`Applied versioning (${status}) to bucket ${displaySafe(bucketName)}`);
|
|
8713
8712
|
return true;
|
|
8714
8713
|
}
|
|
8715
8714
|
/**
|
|
@@ -8720,7 +8719,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8720
8719
|
Bucket: bucketName,
|
|
8721
8720
|
Tagging: { TagSet: tags }
|
|
8722
8721
|
}));
|
|
8723
|
-
this.logger.debug(`Applied ${tags.length} tags to bucket ${bucketName}`);
|
|
8722
|
+
this.logger.debug(`Applied ${tags.length} tags to bucket ${displaySafe(bucketName)}`);
|
|
8724
8723
|
}
|
|
8725
8724
|
/**
|
|
8726
8725
|
* Apply a diff between old and new CFn-shape Tags arrays via S3's
|
|
@@ -8746,7 +8745,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8746
8745
|
if (newNorm.length === 0) {
|
|
8747
8746
|
try {
|
|
8748
8747
|
await this.s3Client.send(new DeleteBucketTaggingCommand({ Bucket: bucketName }));
|
|
8749
|
-
this.logger.debug(`Cleared tags from bucket ${bucketName}`);
|
|
8748
|
+
this.logger.debug(`Cleared tags from bucket ${displaySafe(bucketName)}`);
|
|
8750
8749
|
} catch (err) {
|
|
8751
8750
|
if (err.name === "NoSuchTagSet") return;
|
|
8752
8751
|
throw err;
|
|
@@ -8757,7 +8756,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8757
8756
|
Bucket: bucketName,
|
|
8758
8757
|
Tagging: { TagSet: newNorm }
|
|
8759
8758
|
}));
|
|
8760
|
-
this.logger.debug(`Replaced tag set on bucket ${bucketName} (${newNorm.length} tags)`);
|
|
8759
|
+
this.logger.debug(`Replaced tag set on bucket ${displaySafe(bucketName)} (${newNorm.length} tags)`);
|
|
8761
8760
|
}
|
|
8762
8761
|
/**
|
|
8763
8762
|
* Apply CORS configuration
|
|
@@ -8782,7 +8781,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8782
8781
|
Bucket: bucketName,
|
|
8783
8782
|
CORSConfiguration: { CORSRules: corsRules }
|
|
8784
8783
|
}));
|
|
8785
|
-
this.logger.debug(`Applied CORS configuration to bucket ${bucketName}`);
|
|
8784
|
+
this.logger.debug(`Applied CORS configuration to bucket ${displaySafe(bucketName)}`);
|
|
8786
8785
|
}
|
|
8787
8786
|
/**
|
|
8788
8787
|
* The per-item / per-rule STRING guard, with the applier's own SKIP as the
|
|
@@ -8906,7 +8905,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8906
8905
|
if (coerceCfnBoolean(rule["ExpiredObjectDeleteMarker"]) === true) {
|
|
8907
8906
|
const exp = sdkRule.Expiration;
|
|
8908
8907
|
if (!(exp?.["Days"] !== void 0 || exp?.["Date"] !== void 0)) sdkRule.Expiration = { ExpiredObjectDeleteMarker: true };
|
|
8909
|
-
else this.logger.warn(`Lifecycle rule '${rule["Id"] ?? "<unnamed>"}' on ${bucketName} sets ExpiredObjectDeleteMarker alongside an expiration Days/Date; S3 forbids combining them, so the delete-marker cleanup was not applied.`);
|
|
8908
|
+
else this.logger.warn(`Lifecycle rule '${displaySafe(rule["Id"] ?? "<unnamed>")}' on ${displaySafe(bucketName)} sets ExpiredObjectDeleteMarker alongside an expiration Days/Date; S3 forbids combining them, so the delete-marker cleanup was not applied.`);
|
|
8910
8909
|
}
|
|
8911
8910
|
const nve = isPlainObject$2(rule["NoncurrentVersionExpiration"]) ? rule["NoncurrentVersionExpiration"] : void 0;
|
|
8912
8911
|
const legacyNveDays = rule["NoncurrentVersionExpirationInDays"];
|
|
@@ -8922,7 +8921,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8922
8921
|
});
|
|
8923
8922
|
const nvts = rule["NoncurrentVersionTransitions"];
|
|
8924
8923
|
const singularNvt = rule["NoncurrentVersionTransition"];
|
|
8925
|
-
const allNvts = mergeLegacySingular(nvts, singularNvt, (sc) => this.logger.warn(`Lifecycle rule '${rule["Id"] ?? "<unnamed>"}' on ${bucketName} declares both NoncurrentVersionTransitions and the legacy NoncurrentVersionTransition for storage class ${sc}; S3 rejects duplicates, so the legacy singular was ignored.`));
|
|
8924
|
+
const allNvts = mergeLegacySingular(nvts, singularNvt, (sc) => this.logger.warn(`Lifecycle rule '${displaySafe(rule["Id"] ?? "<unnamed>")}' on ${displaySafe(bucketName)} declares both NoncurrentVersionTransitions and the legacy NoncurrentVersionTransition for storage class ${displaySafe(sc)}; S3 rejects duplicates, so the legacy singular was ignored.`));
|
|
8926
8925
|
if (allNvts.length > 0) sdkRule.NoncurrentVersionTransitions = allNvts.map(toSdkNvt);
|
|
8927
8926
|
const toSdkTransition = (t) => ({
|
|
8928
8927
|
Days: t["TransitionInDays"] ?? t["Days"],
|
|
@@ -8931,7 +8930,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8931
8930
|
});
|
|
8932
8931
|
const transitions = rule["Transitions"];
|
|
8933
8932
|
const singularTransition = rule["Transition"];
|
|
8934
|
-
const allTransitions = mergeLegacySingular(transitions, singularTransition, (sc) => this.logger.warn(`Lifecycle rule '${rule["Id"] ?? "<unnamed>"}' on ${bucketName} declares both Transitions and the legacy Transition for storage class ${sc}; S3 rejects duplicates, so the legacy singular was ignored.`));
|
|
8933
|
+
const allTransitions = mergeLegacySingular(transitions, singularTransition, (sc) => this.logger.warn(`Lifecycle rule '${displaySafe(rule["Id"] ?? "<unnamed>")}' on ${displaySafe(bucketName)} declares both Transitions and the legacy Transition for storage class ${displaySafe(sc)}; S3 rejects duplicates, so the legacy singular was ignored.`));
|
|
8935
8934
|
if (allTransitions.length > 0) sdkRule.Transitions = allTransitions.map(toSdkTransition);
|
|
8936
8935
|
const abort = isPlainObject$2(rule["AbortIncompleteMultipartUpload"]) ? rule["AbortIncompleteMultipartUpload"] : void 0;
|
|
8937
8936
|
if (abort) sdkRule.AbortIncompleteMultipartUpload = { DaysAfterInitiation: abort["DaysAfterInitiation"] };
|
|
@@ -8955,7 +8954,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8955
8954
|
LifecycleConfiguration: { Rules: rules },
|
|
8956
8955
|
TransitionDefaultMinimumObjectSize: lifecycleConfig["TransitionDefaultMinimumObjectSize"]
|
|
8957
8956
|
}));
|
|
8958
|
-
this.logger.debug(`Applied lifecycle configuration to bucket ${bucketName}`);
|
|
8957
|
+
this.logger.debug(`Applied lifecycle configuration to bucket ${displaySafe(bucketName)}`);
|
|
8959
8958
|
return true;
|
|
8960
8959
|
}
|
|
8961
8960
|
/**
|
|
@@ -8975,7 +8974,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
8975
8974
|
RestrictPublicBuckets: config["RestrictPublicBuckets"]
|
|
8976
8975
|
}
|
|
8977
8976
|
}));
|
|
8978
|
-
this.logger.debug(`Applied public access block configuration to bucket ${bucketName}`);
|
|
8977
|
+
this.logger.debug(`Applied public access block configuration to bucket ${displaySafe(bucketName)}`);
|
|
8979
8978
|
}
|
|
8980
8979
|
/**
|
|
8981
8980
|
* Apply bucket encryption configuration
|
|
@@ -9005,7 +9004,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9005
9004
|
Bucket: bucketName,
|
|
9006
9005
|
ServerSideEncryptionConfiguration: { Rules: rules }
|
|
9007
9006
|
}));
|
|
9008
|
-
this.logger.debug(`Applied encryption configuration to bucket ${bucketName}`);
|
|
9007
|
+
this.logger.debug(`Applied encryption configuration to bucket ${displaySafe(bucketName)}`);
|
|
9009
9008
|
}
|
|
9010
9009
|
/**
|
|
9011
9010
|
* Apply logging configuration
|
|
@@ -9033,7 +9032,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9033
9032
|
Bucket: bucketName,
|
|
9034
9033
|
BucketLoggingStatus: {}
|
|
9035
9034
|
}));
|
|
9036
|
-
this.logger.debug(`Cleared logging configuration on bucket ${bucketName}`);
|
|
9035
|
+
this.logger.debug(`Cleared logging configuration on bucket ${displaySafe(bucketName)}`);
|
|
9037
9036
|
return true;
|
|
9038
9037
|
}
|
|
9039
9038
|
const loggingEnabled = {
|
|
@@ -9052,7 +9051,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9052
9051
|
Bucket: bucketName,
|
|
9053
9052
|
BucketLoggingStatus: { LoggingEnabled: loggingEnabled }
|
|
9054
9053
|
}));
|
|
9055
|
-
this.logger.debug(`Applied logging configuration to bucket ${bucketName}`);
|
|
9054
|
+
this.logger.debug(`Applied logging configuration to bucket ${displaySafe(bucketName)}`);
|
|
9056
9055
|
return true;
|
|
9057
9056
|
}
|
|
9058
9057
|
/**
|
|
@@ -9098,7 +9097,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9098
9097
|
Bucket: bucketName,
|
|
9099
9098
|
WebsiteConfiguration: sdkConfig
|
|
9100
9099
|
}));
|
|
9101
|
-
this.logger.debug(`Applied website configuration to bucket ${bucketName}`);
|
|
9100
|
+
this.logger.debug(`Applied website configuration to bucket ${displaySafe(bucketName)}`);
|
|
9102
9101
|
}
|
|
9103
9102
|
/**
|
|
9104
9103
|
* Apply accelerate configuration
|
|
@@ -9111,7 +9110,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9111
9110
|
Bucket: bucketName,
|
|
9112
9111
|
AccelerateConfiguration: { Status: config["AccelerationStatus"] }
|
|
9113
9112
|
}));
|
|
9114
|
-
this.logger.debug(`Applied accelerate configuration to bucket ${bucketName}`);
|
|
9113
|
+
this.logger.debug(`Applied accelerate configuration to bucket ${displaySafe(bucketName)}`);
|
|
9115
9114
|
}
|
|
9116
9115
|
/**
|
|
9117
9116
|
* Apply notification configuration (full-replace via PutBucketNotificationConfiguration)
|
|
@@ -9160,7 +9159,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9160
9159
|
Bucket: bucketName,
|
|
9161
9160
|
NotificationConfiguration: cfg
|
|
9162
9161
|
}));
|
|
9163
|
-
this.logger.debug(`Applied notification configuration to bucket ${bucketName}`);
|
|
9162
|
+
this.logger.debug(`Applied notification configuration to bucket ${displaySafe(bucketName)}`);
|
|
9164
9163
|
return true;
|
|
9165
9164
|
}
|
|
9166
9165
|
/**
|
|
@@ -9219,7 +9218,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9219
9218
|
MetricsConfiguration: metricsConfig
|
|
9220
9219
|
}));
|
|
9221
9220
|
}
|
|
9222
|
-
this.logger.debug(`Applied ${configs.length - skipped.length} metrics configuration(s) to bucket ${bucketName}`);
|
|
9221
|
+
this.logger.debug(`Applied ${configs.length - skipped.length} metrics configuration(s) to bucket ${displaySafe(bucketName)}`);
|
|
9223
9222
|
return {
|
|
9224
9223
|
skipped,
|
|
9225
9224
|
substituted: /* @__PURE__ */ new Map()
|
|
@@ -9355,7 +9354,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9355
9354
|
});
|
|
9356
9355
|
if (sentItem !== config) substituted.set(index, sentItem);
|
|
9357
9356
|
}
|
|
9358
|
-
this.logger.debug(`Applied ${configs.length - skipped.length} analytics configuration(s) to bucket ${bucketName}`);
|
|
9357
|
+
this.logger.debug(`Applied ${configs.length - skipped.length} analytics configuration(s) to bucket ${displaySafe(bucketName)}`);
|
|
9359
9358
|
return {
|
|
9360
9359
|
skipped,
|
|
9361
9360
|
substituted
|
|
@@ -9420,7 +9419,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9420
9419
|
const sentItem = effectiveIntelligentTieringItem(config);
|
|
9421
9420
|
if (sentItem !== config) substituted.set(index, sentItem);
|
|
9422
9421
|
}
|
|
9423
|
-
this.logger.debug(`Applied ${configs.length - skipped.length} intelligent tiering configuration(s) to bucket ${bucketName}`);
|
|
9422
|
+
this.logger.debug(`Applied ${configs.length - skipped.length} intelligent tiering configuration(s) to bucket ${displaySafe(bucketName)}`);
|
|
9424
9423
|
return {
|
|
9425
9424
|
skipped,
|
|
9426
9425
|
substituted
|
|
@@ -9503,7 +9502,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9503
9502
|
});
|
|
9504
9503
|
if (sentItem !== config) substituted.set(index, sentItem);
|
|
9505
9504
|
}
|
|
9506
|
-
this.logger.debug(`Applied ${configs.length - skipped.length} inventory configuration(s) to bucket ${bucketName}`);
|
|
9505
|
+
this.logger.debug(`Applied ${configs.length - skipped.length} inventory configuration(s) to bucket ${displaySafe(bucketName)}`);
|
|
9507
9506
|
return {
|
|
9508
9507
|
skipped,
|
|
9509
9508
|
substituted
|
|
@@ -9622,7 +9621,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9622
9621
|
})
|
|
9623
9622
|
}
|
|
9624
9623
|
}));
|
|
9625
|
-
this.logger.debug(`Applied replication configuration to bucket ${bucketName}`);
|
|
9624
|
+
this.logger.debug(`Applied replication configuration to bucket ${displaySafe(bucketName)}`);
|
|
9626
9625
|
return true;
|
|
9627
9626
|
}
|
|
9628
9627
|
/**
|
|
@@ -9668,7 +9667,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9668
9667
|
Bucket: bucketName,
|
|
9669
9668
|
ObjectLockConfiguration: objectLockConfig
|
|
9670
9669
|
}));
|
|
9671
|
-
this.logger.debug(`Applied object lock configuration to bucket ${bucketName}`);
|
|
9670
|
+
this.logger.debug(`Applied object lock configuration to bucket ${displaySafe(bucketName)}`);
|
|
9672
9671
|
return true;
|
|
9673
9672
|
}
|
|
9674
9673
|
/**
|
|
@@ -9711,7 +9710,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
9711
9710
|
Bucket: bucketName,
|
|
9712
9711
|
OwnershipControls: { Rules: ownershipControls.Rules.map((r) => ({ ObjectOwnership: r.ObjectOwnership })) }
|
|
9713
9712
|
}));
|
|
9714
|
-
this.logger.debug(`Applied ownership controls to bucket ${bucketName}`);
|
|
9713
|
+
this.logger.debug(`Applied ownership controls to bucket ${displaySafe(bucketName)}`);
|
|
9715
9714
|
}
|
|
9716
9715
|
/**
|
|
9717
9716
|
* Normalize an "empty container" sub-config value to `undefined` so the diff
|
|
@@ -10111,7 +10110,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10111
10110
|
if (skippedIds.size === 0 && sentItems.size === 0) return;
|
|
10112
10111
|
const desired = properties[key];
|
|
10113
10112
|
if (!Array.isArray(desired)) {
|
|
10114
|
-
this.logger.debug(`Bucket ${bucketName}: ${skippedIds.size + sentItems.size} skipped or substituted ${key} item(s) could not be recorded — the desired value is not an array`);
|
|
10113
|
+
this.logger.debug(`Bucket ${displaySafe(bucketName)}: ${skippedIds.size + sentItems.size} skipped or substituted ${key} item(s) could not be recorded — the desired value is not an array`);
|
|
10115
10114
|
return;
|
|
10116
10115
|
}
|
|
10117
10116
|
const previous = previousProperties[key];
|
|
@@ -10128,7 +10127,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10128
10127
|
const versioningChanged = JSON.stringify(previousVersioning ?? null) !== JSON.stringify(nextVersioning ?? null);
|
|
10129
10128
|
const versioningRefusal = configStringRefusal(nextVersioning, "Status", "Suspended", "AWS::S3::Bucket VersioningConfiguration");
|
|
10130
10129
|
if (versioningRefusal !== void 0 && versioningChanged) {
|
|
10131
|
-
this.logger.warn(`Bucket ${bucketName}: ${versioningRefusal}. Leaving the bucket's LIVE versioning state unchanged — neither enabling nor suspending it; the same value is REFUSED on a template-path create`);
|
|
10130
|
+
this.logger.warn(`Bucket ${displaySafe(bucketName)}: ${versioningRefusal}. Leaving the bucket's LIVE versioning state unchanged — neither enabling nor suspending it; the same value is REFUSED on a template-path create`);
|
|
10132
10131
|
retainPrevious("VersioningConfiguration");
|
|
10133
10132
|
}
|
|
10134
10133
|
const desiredVersioningStatus = versioningRefusal === void 0 ? readConfigString(nextVersioning, "Status", "Suspended", "AWS::S3::Bucket VersioningConfiguration") : void 0;
|
|
@@ -10142,7 +10141,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10142
10141
|
return;
|
|
10143
10142
|
}
|
|
10144
10143
|
await this.s3Client.send(new DeleteBucketOwnershipControlsCommand({ Bucket: bucketName }));
|
|
10145
|
-
this.logger.debug(`Deleted ownership controls on bucket ${bucketName}`);
|
|
10144
|
+
this.logger.debug(`Deleted ownership controls on bucket ${displaySafe(bucketName)}`);
|
|
10146
10145
|
});
|
|
10147
10146
|
const encryptionEmptyDesired = S3BucketProvider.declaresEmptyCollection(properties["BucketEncryption"], "ServerSideEncryptionConfiguration");
|
|
10148
10147
|
await this.diffSubConfig(bucketName, S3BucketProvider.emptyListConfigToUndefined(previousProperties["BucketEncryption"], "ServerSideEncryptionConfiguration"), S3BucketProvider.emptyListConfigToUndefined(properties["BucketEncryption"], "ServerSideEncryptionConfiguration"), async (cfg) => this.applyBucketEncryption(bucketName, cfg), async () => {
|
|
@@ -10151,13 +10150,13 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10151
10150
|
return;
|
|
10152
10151
|
}
|
|
10153
10152
|
await this.s3Client.send(new DeleteBucketEncryptionCommand({ Bucket: bucketName }));
|
|
10154
|
-
this.logger.debug(`Deleted bucket encryption on bucket ${bucketName}`);
|
|
10153
|
+
this.logger.debug(`Deleted bucket encryption on bucket ${displaySafe(bucketName)}`);
|
|
10155
10154
|
});
|
|
10156
10155
|
await this.diffSubConfig(bucketName, previousProperties["LifecycleConfiguration"], properties["LifecycleConfiguration"], async (cfg) => {
|
|
10157
10156
|
if (!cfg.Rules || !Array.isArray(cfg.Rules) || cfg.Rules.length === 0) {
|
|
10158
10157
|
if (context?.desiredFromAwsReadback === true) {
|
|
10159
10158
|
await this.s3Client.send(new DeleteBucketLifecycleCommand({ Bucket: bucketName }));
|
|
10160
|
-
this.logger.debug(`Deleted lifecycle configuration on bucket ${bucketName} (reverting to an unset baseline)`);
|
|
10159
|
+
this.logger.debug(`Deleted lifecycle configuration on bucket ${displaySafe(bucketName)} (reverting to an unset baseline)`);
|
|
10161
10160
|
return;
|
|
10162
10161
|
}
|
|
10163
10162
|
this.emptyCollectionSkip("LifecycleConfiguration", "LifecycleConfiguration.Rules", previousProperties, retainPrevious);
|
|
@@ -10167,13 +10166,13 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10167
10166
|
else recordEffectiveFold("LifecycleConfiguration", effectiveLifecycleConfiguration(cfg));
|
|
10168
10167
|
}, async () => {
|
|
10169
10168
|
await this.s3Client.send(new DeleteBucketLifecycleCommand({ Bucket: bucketName }));
|
|
10170
|
-
this.logger.debug(`Deleted lifecycle configuration on bucket ${bucketName}`);
|
|
10169
|
+
this.logger.debug(`Deleted lifecycle configuration on bucket ${displaySafe(bucketName)}`);
|
|
10171
10170
|
});
|
|
10172
10171
|
await this.diffSubConfig(bucketName, previousProperties["CorsConfiguration"], properties["CorsConfiguration"], async (cfg) => {
|
|
10173
10172
|
if (!cfg.CorsRules || !Array.isArray(cfg.CorsRules) || cfg.CorsRules.length === 0) {
|
|
10174
10173
|
if (context?.desiredFromAwsReadback === true) {
|
|
10175
10174
|
await this.s3Client.send(new DeleteBucketCorsCommand({ Bucket: bucketName }));
|
|
10176
|
-
this.logger.debug(`Deleted CORS configuration on bucket ${bucketName} (reverting to an unset baseline)`);
|
|
10175
|
+
this.logger.debug(`Deleted CORS configuration on bucket ${displaySafe(bucketName)} (reverting to an unset baseline)`);
|
|
10177
10176
|
return;
|
|
10178
10177
|
}
|
|
10179
10178
|
this.emptyCollectionSkip("CorsConfiguration", "CorsConfiguration.CorsRules", previousProperties, retainPrevious);
|
|
@@ -10182,11 +10181,11 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10182
10181
|
await this.applyCorsConfiguration(bucketName, cfg);
|
|
10183
10182
|
}, async () => {
|
|
10184
10183
|
await this.s3Client.send(new DeleteBucketCorsCommand({ Bucket: bucketName }));
|
|
10185
|
-
this.logger.debug(`Deleted CORS configuration on bucket ${bucketName}`);
|
|
10184
|
+
this.logger.debug(`Deleted CORS configuration on bucket ${displaySafe(bucketName)}`);
|
|
10186
10185
|
});
|
|
10187
10186
|
await this.diffSubConfig(bucketName, previousProperties["WebsiteConfiguration"], properties["WebsiteConfiguration"], async (cfg) => this.applyWebsiteConfiguration(bucketName, cfg), async () => {
|
|
10188
10187
|
await this.s3Client.send(new DeleteBucketWebsiteCommand({ Bucket: bucketName }));
|
|
10189
|
-
this.logger.debug(`Deleted website configuration on bucket ${bucketName}`);
|
|
10188
|
+
this.logger.debug(`Deleted website configuration on bucket ${displaySafe(bucketName)}`);
|
|
10190
10189
|
});
|
|
10191
10190
|
await this.diffSubConfig(bucketName, previousProperties["LoggingConfiguration"], properties["LoggingConfiguration"], async (cfg) => {
|
|
10192
10191
|
if (!await this.applyLoggingConfiguration(bucketName, cfg, (m) => this.logger.warn(m))) retainPrevious("LoggingConfiguration");
|
|
@@ -10203,7 +10202,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10203
10202
|
if (!await this.applyReplicationConfiguration(bucketName, cfg, (m) => this.logger.warn(m))) retainPrevious("ReplicationConfiguration");
|
|
10204
10203
|
}, async () => {
|
|
10205
10204
|
await this.s3Client.send(new DeleteBucketReplicationCommand({ Bucket: bucketName }));
|
|
10206
|
-
this.logger.debug(`Deleted replication configuration on bucket ${bucketName}`);
|
|
10205
|
+
this.logger.debug(`Deleted replication configuration on bucket ${displaySafe(bucketName)}`);
|
|
10207
10206
|
});
|
|
10208
10207
|
await this.diffSubConfig(bucketName, previousProperties["ObjectLockConfiguration"], properties["ObjectLockConfiguration"], async (cfg) => {
|
|
10209
10208
|
if (!await this.applyObjectLockConfiguration(bucketName, cfg, (m) => this.logger.warn(m))) retainPrevious("ObjectLockConfiguration");
|
|
@@ -10212,7 +10211,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10212
10211
|
Bucket: bucketName,
|
|
10213
10212
|
ObjectLockConfiguration: { ObjectLockEnabled: "Enabled" }
|
|
10214
10213
|
}));
|
|
10215
|
-
this.logger.debug(`Cleared object lock rule on bucket ${bucketName}`);
|
|
10214
|
+
this.logger.debug(`Cleared object lock rule on bucket ${displaySafe(bucketName)}`);
|
|
10216
10215
|
});
|
|
10217
10216
|
await this.diffSubConfig(bucketName, previousProperties["AccelerateConfiguration"], properties["AccelerateConfiguration"], async (cfg) => this.applyAccelerateConfiguration(bucketName, cfg), async () => this.applyAccelerateConfiguration(bucketName, { AccelerationStatus: "Suspended" }));
|
|
10218
10217
|
const metricsOutcomes = itemOutcomes();
|
|
@@ -10224,7 +10223,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10224
10223
|
Bucket: bucketName,
|
|
10225
10224
|
Id: id
|
|
10226
10225
|
}));
|
|
10227
|
-
this.logger.debug(`Deleted metrics configuration ${id} on bucket ${bucketName}`);
|
|
10226
|
+
this.logger.debug(`Deleted metrics configuration ${displaySafe(id)} on bucket ${displaySafe(bucketName)}`);
|
|
10228
10227
|
});
|
|
10229
10228
|
retainPreviousItems("MetricsConfigurations", metricsOutcomes);
|
|
10230
10229
|
const analyticsOutcomes = itemOutcomes();
|
|
@@ -10236,7 +10235,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10236
10235
|
Bucket: bucketName,
|
|
10237
10236
|
Id: id
|
|
10238
10237
|
}));
|
|
10239
|
-
this.logger.debug(`Deleted analytics configuration ${id} on bucket ${bucketName}`);
|
|
10238
|
+
this.logger.debug(`Deleted analytics configuration ${displaySafe(id)} on bucket ${displaySafe(bucketName)}`);
|
|
10240
10239
|
});
|
|
10241
10240
|
retainPreviousItems("AnalyticsConfigurations", analyticsOutcomes);
|
|
10242
10241
|
const intelligentTieringOutcomes = itemOutcomes();
|
|
@@ -10248,7 +10247,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10248
10247
|
Bucket: bucketName,
|
|
10249
10248
|
Id: id
|
|
10250
10249
|
}));
|
|
10251
|
-
this.logger.debug(`Deleted intelligent tiering configuration ${id} on bucket ${bucketName}`);
|
|
10250
|
+
this.logger.debug(`Deleted intelligent tiering configuration ${displaySafe(id)} on bucket ${displaySafe(bucketName)}`);
|
|
10252
10251
|
});
|
|
10253
10252
|
retainPreviousItems("IntelligentTieringConfigurations", intelligentTieringOutcomes);
|
|
10254
10253
|
const inventoryOutcomes = itemOutcomes();
|
|
@@ -10260,7 +10259,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10260
10259
|
Bucket: bucketName,
|
|
10261
10260
|
Id: id
|
|
10262
10261
|
}));
|
|
10263
|
-
this.logger.debug(`Deleted inventory configuration ${id} on bucket ${bucketName}`);
|
|
10262
|
+
this.logger.debug(`Deleted inventory configuration ${displaySafe(id)} on bucket ${displaySafe(bucketName)}`);
|
|
10264
10263
|
});
|
|
10265
10264
|
retainPreviousItems("InventoryConfigurations", inventoryOutcomes);
|
|
10266
10265
|
if (versioningChanged && desiredVersioningStatus === "Suspended") {
|
|
@@ -10269,7 +10268,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10269
10268
|
return p["ObjectLockConfiguration"]?.["ObjectLockEnabled"] === "Enabled";
|
|
10270
10269
|
};
|
|
10271
10270
|
if (hasObjectLock(properties) || hasObjectLock(previousProperties)) {
|
|
10272
|
-
this.logger.warn(`Bucket ${bucketName}: versioning would be suspended (VersioningConfiguration removed or set to Suspended), but the bucket has Object Lock enabled and S3 does not allow suspending versioning on it. Leaving versioning enabled.`);
|
|
10271
|
+
this.logger.warn(`Bucket ${displaySafe(bucketName)}: versioning would be suspended (VersioningConfiguration removed or set to Suspended), but the bucket has Object Lock enabled and S3 does not allow suspending versioning on it. Leaving versioning enabled.`);
|
|
10273
10272
|
retainPrevious("VersioningConfiguration");
|
|
10274
10273
|
} else await this.applyVersioning(bucketName, { Status: "Suspended" });
|
|
10275
10274
|
}
|
|
@@ -10427,7 +10426,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10427
10426
|
* statement without the compiler losing that control flow ends there.
|
|
10428
10427
|
*/
|
|
10429
10428
|
refuseForeignRegionAdopt(logicalId, resourceType, bucketName, wantRegion, actualRegion, cause) {
|
|
10430
|
-
throw markNonRetryable(new ProvisioningError(`Refusing to adopt existing S3 bucket ${bucketName} for ${logicalId} (${resourceType}): it is owned by this account but lives in ${actualRegion}, while this stack deploys to ${wantRegion}. S3 bucket names are globally unique, so owning the name (which is what 'BucketAlreadyOwnedByYou' and a successful location lookup each report) never means the bucket is in this region. Adopting it would apply this stack's bucket configuration to a bucket in ${actualRegion}, and would record a physical id that denotes no bucket in ${wantRegion}. Either give this stack a bucket name unique to ${wantRegion}, or deploy the stack to ${actualRegion}.`, resourceType, logicalId, bucketName, cause));
|
|
10429
|
+
throw markNonRetryable(new ProvisioningError(`Refusing to adopt existing S3 bucket ${displaySafe(bucketName)} for ${displaySafe(logicalId)} (${resourceType}): it is owned by this account but lives in ${actualRegion}, while this stack deploys to ${wantRegion}. S3 bucket names are globally unique, so owning the name (which is what 'BucketAlreadyOwnedByYou' and a successful location lookup each report) never means the bucket is in this region. Adopting it would apply this stack's bucket configuration to a bucket in ${actualRegion}, and would record a physical id that denotes no bucket in ${wantRegion}. Either give this stack a bucket name unique to ${wantRegion}, or deploy the stack to ${actualRegion}.`, resourceType, logicalId, bucketName, cause));
|
|
10431
10430
|
}
|
|
10432
10431
|
/**
|
|
10433
10432
|
* The region an already-owned bucket actually lives in, canonicalized.
|
|
@@ -10577,14 +10576,14 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10577
10576
|
const probe = await this.probeBucketRegion(physicalId);
|
|
10578
10577
|
if (probe.kind === "absent") return;
|
|
10579
10578
|
if (probe.kind === "indeterminate") {
|
|
10580
|
-
this.logger.debug(`GetBucketLocation failed for S3 bucket ${physicalId} (${logicalId}) before ${operation}: ${probe.reason}`);
|
|
10579
|
+
this.logger.debug(`GetBucketLocation failed for S3 bucket ${displaySafe(physicalId)} (${displaySafe(logicalId)}) before ${operation}: ${probe.reason}`);
|
|
10581
10580
|
this.announceUnverifiedBucketIdentity(operation, logicalId, physicalId, probeFailedCause(probe.errorName));
|
|
10582
10581
|
return;
|
|
10583
10582
|
}
|
|
10584
10583
|
if (probe.region === wantRegion) return;
|
|
10585
10584
|
const consequence = operation === "update" ? `Applying this stack's bucket configuration would reconfigure a bucket in ${probe.region} that this stack does not own the definition of.` : `Deleting it would destroy a bucket in ${probe.region} that this stack's region does not contain, and that deletion cannot be undone.`;
|
|
10586
|
-
const remedy = operation === "update" ? `Confirm which bucket you mean, then either rerun this stack against ${probe.region}, or — if the recorded id is stale — drop cdkd's record with 'cdkd state orphan <stack>', which removes the record without touching any AWS resource, and deploy again.` : `Confirm which bucket you mean. If ${physicalId} is genuinely yours to delete, delete it deliberately in ${probe.region}; if this record is simply stale, drop it with 'cdkd state orphan <stack>', which removes cdkd's record without touching any AWS resource, and the destroy will then have nothing to do for this resource.`;
|
|
10587
|
-
throw markNonRetryable(new ProvisioningError(`Refusing to ${operation} S3 bucket ${physicalId} for ${logicalId} (${resourceType}): the bucket lives in ${probe.region}, while this stack's state is for ${wantRegion}. S3 bucket names are globally unique, so a state record can name a bucket in another region — records written before the create-path region guard can carry one. ${consequence} ${remedy}`, resourceType, logicalId, physicalId));
|
|
10585
|
+
const remedy = operation === "update" ? `Confirm which bucket you mean, then either rerun this stack against ${probe.region}, or — if the recorded id is stale — drop cdkd's record with 'cdkd state orphan <stack>', which removes the record without touching any AWS resource, and deploy again.` : `Confirm which bucket you mean. If ${displaySafe(physicalId)} is genuinely yours to delete, delete it deliberately in ${probe.region}; if this record is simply stale, drop it with 'cdkd state orphan <stack>', which removes cdkd's record without touching any AWS resource, and the destroy will then have nothing to do for this resource.`;
|
|
10586
|
+
throw markNonRetryable(new ProvisioningError(`Refusing to ${operation} S3 bucket ${displaySafe(physicalId)} for ${displaySafe(logicalId)} (${resourceType}): the bucket lives in ${probe.region}, while this stack's state is for ${wantRegion}. S3 bucket names are globally unique, so a state record can name a bucket in another region — records written before the create-path region guard can carry one. ${consequence} ${remedy}`, resourceType, logicalId, physicalId));
|
|
10588
10587
|
}
|
|
10589
10588
|
/**
|
|
10590
10589
|
* Say out loud that the identity guard did not run.
|
|
@@ -10619,7 +10618,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10619
10618
|
* actual defect.
|
|
10620
10619
|
*/
|
|
10621
10620
|
announceUnverifiedBucketIdentity(operation, logicalId, physicalId, cause) {
|
|
10622
|
-
const message = `Could not confirm which bucket ${physicalId} for ${logicalId} is before ${operation}: ${cause.why}, so the cross-region guard did NOT run and cdkd is proceeding on the recorded physical id alone.`;
|
|
10621
|
+
const message = `Could not confirm which bucket ${displaySafe(physicalId)} for ${displaySafe(logicalId)} is before ${operation}: ${cause.why}, so the cross-region guard did NOT run and cdkd is proceeding on the recorded physical id alone.`;
|
|
10623
10622
|
if (operation === "delete") {
|
|
10624
10623
|
this.logger.warn(`${message} If this state record names a bucket in another region, this destroy will delete THAT bucket. ${cause.remedy}`);
|
|
10625
10624
|
return;
|
|
@@ -10630,7 +10629,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10630
10629
|
* Create an S3 bucket
|
|
10631
10630
|
*/
|
|
10632
10631
|
async create(logicalId, resourceType, properties, context) {
|
|
10633
|
-
this.logger.debug(`Creating S3 bucket ${logicalId}`);
|
|
10632
|
+
this.logger.debug(`Creating S3 bucket ${displaySafe(logicalId)}`);
|
|
10634
10633
|
const bucketName = properties["BucketName"] || generateResourceName(logicalId, {
|
|
10635
10634
|
maxLength: 63,
|
|
10636
10635
|
lowercase: true,
|
|
@@ -10648,13 +10647,13 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10648
10647
|
await this.s3Client.send(new CreateBucketCommand(createParams));
|
|
10649
10648
|
createdNewBucket = preflight.kind === "absent";
|
|
10650
10649
|
if (preflight.kind === "region" && preflight.region !== "us-east-1") this.refuseForeignRegionAdopt(logicalId, resourceType, bucketName, "us-east-1", preflight.region);
|
|
10651
|
-
if (preflight.kind === "region") this.logger.warn(`S3 bucket ${bucketName} for ${logicalId} (${resourceType}) already existed in ${preflight.region} and was ADOPTED, not created. In us-east-1 S3 answers a re-create of a bucket you already own with 200 OK and RESETS that bucket's access control lists, so any ACL previously set on ${bucketName} is now the default. cdkd will not delete this bucket if the rest of this create fails.`);
|
|
10652
|
-
this.logger.debug(`Created S3 bucket: ${bucketName}`);
|
|
10650
|
+
if (preflight.kind === "region") this.logger.warn(`S3 bucket ${displaySafe(bucketName)} for ${displaySafe(logicalId)} (${resourceType}) already existed in ${preflight.region} and was ADOPTED, not created. In us-east-1 S3 answers a re-create of a bucket you already own with 200 OK and RESETS that bucket's access control lists, so any ACL previously set on ${displaySafe(bucketName)} is now the default. cdkd will not delete this bucket if the rest of this create fails.`);
|
|
10651
|
+
this.logger.debug(`Created S3 bucket: ${displaySafe(bucketName)}`);
|
|
10653
10652
|
} catch (createError) {
|
|
10654
10653
|
if (createError instanceof ProvisioningError) throw createError;
|
|
10655
10654
|
if (createError instanceof Error && (createError.name === "BucketAlreadyOwnedByYou" || createError.message.includes("you already own it"))) {
|
|
10656
10655
|
await this.assertExistingBucketRegion(logicalId, resourceType, bucketName, region, createError);
|
|
10657
|
-
this.logger.debug(`S3 bucket ${bucketName} already exists and is owned by you`);
|
|
10656
|
+
this.logger.debug(`S3 bucket ${displaySafe(bucketName)} already exists and is owned by you`);
|
|
10658
10657
|
} else throw createError;
|
|
10659
10658
|
}
|
|
10660
10659
|
let effectiveOverrides;
|
|
@@ -10664,21 +10663,21 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10664
10663
|
} catch (innerError) {
|
|
10665
10664
|
if (createdNewBucket) try {
|
|
10666
10665
|
await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
|
|
10667
|
-
this.logger.debug(`Cleaned up partially-created S3 bucket ${logicalId} (${bucketName}) after wiring failure`);
|
|
10666
|
+
this.logger.debug(`Cleaned up partially-created S3 bucket ${displaySafe(logicalId)} (${displaySafe(bucketName)}) after wiring failure`);
|
|
10668
10667
|
} catch (cleanupError) {
|
|
10669
|
-
this.logger.debug(`DeleteBucket cleanup failed for S3 bucket ${logicalId} (${bucketName}): ${describeAwsFailure(cleanupError).detail}`);
|
|
10668
|
+
this.logger.debug(`DeleteBucket cleanup failed for S3 bucket ${displaySafe(logicalId)} (${displaySafe(bucketName)}): ${describeAwsFailure(cleanupError).detail}`);
|
|
10670
10669
|
const maskSecrets = maskerOrIdentity(context?.maskSecrets);
|
|
10671
|
-
this.logger.warn(maskSecrets(`Failed to clean up partially-created S3 bucket ${logicalId} (${bucketName}) (${cleanupError instanceof Error ? cleanupError.name : typeof cleanupError}). Re-run with --verbose for AWS's own message. ` + manualBucketDeletionClause(bucketName, maskSecrets)));
|
|
10670
|
+
this.logger.warn(maskSecrets(`Failed to clean up partially-created S3 bucket ${displaySafe(logicalId)} (${displaySafe(maskSecrets(bucketName))}) (${cleanupError instanceof Error ? cleanupError.name : typeof cleanupError}). Re-run with --verbose for AWS's own message. ` + manualBucketDeletionClause(bucketName, maskSecrets)));
|
|
10672
10671
|
}
|
|
10673
10672
|
else if (preflight.kind === "indeterminate") {
|
|
10674
|
-
this.logger.debug(`GetBucketLocation failed for S3 bucket ${bucketName} (${logicalId}) during create: ${preflight.reason}`);
|
|
10673
|
+
this.logger.debug(`GetBucketLocation failed for S3 bucket ${displaySafe(bucketName)} (${displaySafe(logicalId)}) during create: ${preflight.reason}`);
|
|
10675
10674
|
const maskSecrets = maskerOrIdentity(context?.maskSecrets);
|
|
10676
|
-
this.logger.warn(maskSecrets(`Not cleaning up S3 bucket ${logicalId} (${bucketName}) after a wiring failure: this deploy could not confirm whether it created the bucket (region probe failed: ${preflight.errorName}), and in us-east-1 a successful CreateBucket does not prove it. Re-run with --verbose for AWS's own message. If cdkd created it, the bucket is an orphan. ` + manualBucketDeletionClause(bucketName, maskSecrets)));
|
|
10675
|
+
this.logger.warn(maskSecrets(`Not cleaning up S3 bucket ${displaySafe(logicalId)} (${displaySafe(maskSecrets(bucketName))}) after a wiring failure: this deploy could not confirm whether it created the bucket (region probe failed: ${preflight.errorName}), and in us-east-1 a successful CreateBucket does not prove it. Re-run with --verbose for AWS's own message. If cdkd created it, the bucket is an orphan. ` + manualBucketDeletionClause(bucketName, maskSecrets)));
|
|
10677
10676
|
}
|
|
10678
10677
|
throw innerError;
|
|
10679
10678
|
}
|
|
10680
10679
|
const attributes = await this.buildAttributes(bucketName);
|
|
10681
|
-
this.logger.debug(`Successfully created S3 bucket ${logicalId}: ${bucketName}`);
|
|
10680
|
+
this.logger.debug(`Successfully created S3 bucket ${displaySafe(logicalId)}: ${displaySafe(bucketName)}`);
|
|
10682
10681
|
const effectiveProperties = S3BucketProvider.applyEffectiveOverrides(properties, effectiveOverrides);
|
|
10683
10682
|
return {
|
|
10684
10683
|
physicalId: bucketName,
|
|
@@ -10693,10 +10692,10 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10693
10692
|
* Update an S3 bucket
|
|
10694
10693
|
*/
|
|
10695
10694
|
async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
|
|
10696
|
-
this.logger.debug(`Updating S3 bucket ${logicalId}: ${physicalId}`);
|
|
10695
|
+
this.logger.debug(`Updating S3 bucket ${displaySafe(logicalId)}: ${displaySafe(physicalId)}`);
|
|
10697
10696
|
const newBucketName = properties["BucketName"];
|
|
10698
10697
|
if (newBucketName && newBucketName !== physicalId) {
|
|
10699
|
-
this.logger.debug(`Bucket name changed (${physicalId} -> ${newBucketName}), replacement required`);
|
|
10698
|
+
this.logger.debug(`Bucket name changed (${displaySafe(physicalId)} -> ${displaySafe(newBucketName)}), replacement required`);
|
|
10700
10699
|
return {
|
|
10701
10700
|
physicalId,
|
|
10702
10701
|
wasReplaced: true
|
|
@@ -10711,7 +10710,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10711
10710
|
for (const [key, value] of await this.applySubConfigDiffs(physicalId, properties, previousProperties, context)) effectiveOverrides.set(key, value);
|
|
10712
10711
|
await this.applyTagDiff(physicalId, previousProperties["Tags"], properties["Tags"]);
|
|
10713
10712
|
const attributes = await this.buildAttributes(physicalId);
|
|
10714
|
-
this.logger.debug(`Successfully updated S3 bucket ${logicalId}`);
|
|
10713
|
+
this.logger.debug(`Successfully updated S3 bucket ${displaySafe(logicalId)}`);
|
|
10715
10714
|
const effectiveProperties = S3BucketProvider.applyEffectiveOverrides(properties, effectiveOverrides);
|
|
10716
10715
|
return {
|
|
10717
10716
|
physicalId,
|
|
@@ -10729,7 +10728,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10729
10728
|
* Note: The bucket must be empty before deletion.
|
|
10730
10729
|
*/
|
|
10731
10730
|
async delete(logicalId, physicalId, resourceType, properties, context) {
|
|
10732
|
-
this.logger.debug(`Deleting S3 bucket ${logicalId}: ${physicalId}`);
|
|
10731
|
+
this.logger.debug(`Deleting S3 bucket ${displaySafe(logicalId)}: ${displaySafe(physicalId)}`);
|
|
10733
10732
|
const allowAutoEmpty = context?.forceDataDelete === true || hasCdkAutoDeleteTag(properties, "aws-cdk:auto-delete-objects");
|
|
10734
10733
|
if (context?.expectedRegion) await this.assertStateBucketRegion("delete", logicalId, resourceType, physicalId, context.expectedRegion);
|
|
10735
10734
|
else this.announceUnverifiedBucketIdentity("delete", logicalId, physicalId, noRecordedRegionCause());
|
|
@@ -10739,7 +10738,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10739
10738
|
if (error instanceof NoSuchBucket) {
|
|
10740
10739
|
const clientRegion = await this.s3Client.config.region();
|
|
10741
10740
|
assertRegionMatch(clientRegion, context?.expectedRegion, resourceType, logicalId, physicalId);
|
|
10742
|
-
this.logger.debug(`Bucket ${physicalId} does not exist, skipping deletion`);
|
|
10741
|
+
this.logger.debug(`Bucket ${displaySafe(physicalId)} does not exist, skipping deletion`);
|
|
10743
10742
|
return;
|
|
10744
10743
|
}
|
|
10745
10744
|
throw this.wrapOperationError("delete", logicalId, resourceType, physicalId, error);
|
|
@@ -10785,8 +10784,8 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
10785
10784
|
*/
|
|
10786
10785
|
wrapOperationError(operation, logicalId, resourceType, physicalId, error) {
|
|
10787
10786
|
const failure = describeAwsFailure(error);
|
|
10788
|
-
if (failure.redacted) this.logger.debug(`Failed to ${operation} S3 bucket ${logicalId} (${physicalId}): ${failure.detail}`);
|
|
10789
|
-
const wrapped = new ProvisioningError(`Failed to ${operation} S3 bucket ${logicalId}: ${failure.summary}`, resourceType, logicalId, physicalId, error instanceof Error ? error : void 0);
|
|
10787
|
+
if (failure.redacted) this.logger.debug(`Failed to ${operation} S3 bucket ${displaySafe(logicalId)} (${displaySafe(physicalId)}): ${failure.detail}`);
|
|
10788
|
+
const wrapped = new ProvisioningError(`Failed to ${operation} S3 bucket ${displaySafe(logicalId)}: ${failure.summary}`, resourceType, logicalId, physicalId, error instanceof Error ? error : void 0);
|
|
10790
10789
|
return failure.redacted ? markRedactedCause(wrapped) : wrapped;
|
|
10791
10790
|
}
|
|
10792
10791
|
/**
|
|
@@ -11477,20 +11476,20 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
11477
11476
|
const maxAttempts = 3;
|
|
11478
11477
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) try {
|
|
11479
11478
|
await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
|
|
11480
|
-
this.logger.debug(`Successfully deleted S3 bucket ${logicalId}`);
|
|
11479
|
+
this.logger.debug(`Successfully deleted S3 bucket ${displaySafe(logicalId)}`);
|
|
11481
11480
|
return;
|
|
11482
11481
|
} catch (error) {
|
|
11483
11482
|
const msg = describeAwsFailure(error).detail;
|
|
11484
11483
|
if (msg.includes("not empty") || msg.includes("BucketNotEmpty")) {
|
|
11485
|
-
if (!allowAutoEmpty) throw new Error(`bucket ${bucketName} is not empty. Matching CloudFormation, cdkd does not delete a non-empty bucket unless it opted into automatic emptying (CDK's autoDeleteObjects: true, i.e. the '${S3_AUTO_DELETE_OBJECTS_TAG}' tag). Either empty the bucket first (delete all objects — and for versioned buckets all object versions and delete markers), or redeploy with autoDeleteObjects: true and destroy again.`);
|
|
11486
|
-
this.logger.info(`Bucket ${bucketName} not empty (attempt ${attempt}/${maxAttempts}), emptying (auto-delete opt-in present)...`);
|
|
11484
|
+
if (!allowAutoEmpty) throw new Error(`bucket ${displaySafe(bucketName)} is not empty. Matching CloudFormation, cdkd does not delete a non-empty bucket unless it opted into automatic emptying (CDK's autoDeleteObjects: true, i.e. the '${S3_AUTO_DELETE_OBJECTS_TAG}' tag). Either empty the bucket first (delete all objects — and for versioned buckets all object versions and delete markers), or redeploy with autoDeleteObjects: true and destroy again.`);
|
|
11485
|
+
this.logger.info(`Bucket ${displaySafe(bucketName)} not empty (attempt ${attempt}/${maxAttempts}), emptying (auto-delete opt-in present)...`);
|
|
11487
11486
|
await this.emptyBucket(bucketName);
|
|
11488
11487
|
continue;
|
|
11489
11488
|
}
|
|
11490
11489
|
throw error;
|
|
11491
11490
|
}
|
|
11492
11491
|
await this.s3Client.send(new DeleteBucketCommand({ Bucket: bucketName }));
|
|
11493
|
-
this.logger.debug(`Successfully deleted S3 bucket ${logicalId}`);
|
|
11492
|
+
this.logger.debug(`Successfully deleted S3 bucket ${displaySafe(logicalId)}`);
|
|
11494
11493
|
}
|
|
11495
11494
|
/**
|
|
11496
11495
|
* Empty a bucket by deleting all object versions and delete markers.
|
|
@@ -11529,7 +11528,7 @@ var S3BucketProvider = class S3BucketProvider {
|
|
|
11529
11528
|
Quiet: true
|
|
11530
11529
|
}
|
|
11531
11530
|
}));
|
|
11532
|
-
this.logger.debug(`Emptied ${objects.length} objects from ${bucketName}`);
|
|
11531
|
+
this.logger.debug(`Emptied ${objects.length} objects from ${displaySafe(bucketName)}`);
|
|
11533
11532
|
}
|
|
11534
11533
|
if (!listResp.IsTruncated) break;
|
|
11535
11534
|
keyMarker = decodeListingKey(listResp.NextKeyMarker);
|
|
@@ -12226,7 +12225,7 @@ var SQSQueueProvider = class {
|
|
|
12226
12225
|
return `arn:${partition}:sqs:${region}:${accountId}:${queueName}`;
|
|
12227
12226
|
} catch {
|
|
12228
12227
|
this.logger.warn("Failed to construct SQS ARN from STS, using placeholder");
|
|
12229
|
-
const { partition } = derivePartitionAndUrlSuffix(
|
|
12228
|
+
const { partition } = derivePartitionAndUrlSuffix(ambientRegion() ?? "");
|
|
12230
12229
|
return `arn:${partition}:sqs:unknown:unknown:${queueName}`;
|
|
12231
12230
|
}
|
|
12232
12231
|
}
|
|
@@ -26025,14 +26024,16 @@ var LogsLogGroupProvider = class {
|
|
|
26025
26024
|
} catch (innerError) {
|
|
26026
26025
|
if (createdNewLogGroup) try {
|
|
26027
26026
|
await this.logsClient.send(new DeleteLogGroupCommand({ logGroupName }));
|
|
26028
|
-
this.logger.debug(`Cleaned up partially-created log group ${logicalId} (${logGroupName}) after wiring failure`);
|
|
26027
|
+
this.logger.debug(`Cleaned up partially-created log group ${displaySafe(logicalId)} (${displaySafe(logGroupName)}) after wiring failure`);
|
|
26029
26028
|
} catch (cleanupError) {
|
|
26029
|
+
const mask = maskerOrIdentity(context?.maskSecrets);
|
|
26030
26030
|
const deleteCommand = renderDisableCommand({
|
|
26031
26031
|
before: "aws logs delete-log-group --log-group-name",
|
|
26032
|
-
identifier: logGroupName
|
|
26032
|
+
identifier: logGroupName,
|
|
26033
|
+
maskSecrets: mask
|
|
26033
26034
|
});
|
|
26034
26035
|
const manualStep = deleteCommand ? `Manual deletion may be required before the next deploy: ${deleteCommand}` : "Manual deletion may be required before the next deploy, via the console: the log group name cannot be reproduced safely on a command line.";
|
|
26035
|
-
this.logger.warn(`Failed to clean up partially-created log group ${logicalId} (${logGroupName}): ${describeAwsFailure(cleanupError).detail}. ${manualStep}`);
|
|
26036
|
+
this.logger.warn(mask(`Failed to clean up partially-created log group ${displaySafe(logicalId)} (${displaySafe(mask(logGroupName))}): ${describeAwsFailure(cleanupError).detail}. ${manualStep}`));
|
|
26036
26037
|
}
|
|
26037
26038
|
throw innerError;
|
|
26038
26039
|
}
|
|
@@ -26244,11 +26245,11 @@ var LogsLogGroupProvider = class {
|
|
|
26244
26245
|
async buildArn(logGroupName) {
|
|
26245
26246
|
try {
|
|
26246
26247
|
const accountId = (await this.stsClient.send(new GetCallerIdentityCommand({}))).Account;
|
|
26247
|
-
const region = await this.logsClient.config.region() ||
|
|
26248
|
+
const region = await this.logsClient.config.region() || ambientRegion() || "us-east-1";
|
|
26248
26249
|
const { partition } = derivePartitionAndUrlSuffix(region);
|
|
26249
26250
|
return `arn:${partition}:logs:${region}:${accountId}:log-group:${logGroupName}:*`;
|
|
26250
26251
|
} catch {
|
|
26251
|
-
const { partition } = derivePartitionAndUrlSuffix(
|
|
26252
|
+
const { partition } = derivePartitionAndUrlSuffix(ambientRegion() ?? "");
|
|
26252
26253
|
return `arn:${partition}:logs:unknown:unknown:log-group:${logGroupName}:*`;
|
|
26253
26254
|
}
|
|
26254
26255
|
}
|
|
@@ -26512,11 +26513,11 @@ var CloudWatchAlarmProvider = class {
|
|
|
26512
26513
|
this.logger.debug(`Failed to describe alarm ${alarmName}, constructing ARN from config: ${describeAwsFailure(error).detail}`);
|
|
26513
26514
|
}
|
|
26514
26515
|
try {
|
|
26515
|
-
const region = await this.cloudWatchClient.config.region() ||
|
|
26516
|
+
const region = await this.cloudWatchClient.config.region() || ambientRegion() || "us-east-1";
|
|
26516
26517
|
const { partition } = derivePartitionAndUrlSuffix(region);
|
|
26517
26518
|
return `arn:${partition}:cloudwatch:${region}:*:alarm:${alarmName}`;
|
|
26518
26519
|
} catch {
|
|
26519
|
-
const { partition } = derivePartitionAndUrlSuffix(
|
|
26520
|
+
const { partition } = derivePartitionAndUrlSuffix(ambientRegion() ?? "");
|
|
26520
26521
|
return `arn:${partition}:cloudwatch:*:*:alarm:${alarmName}`;
|
|
26521
26522
|
}
|
|
26522
26523
|
}
|
|
@@ -27716,7 +27717,7 @@ var SSMParameterProvider = class {
|
|
|
27716
27717
|
try {
|
|
27717
27718
|
return await this.buildParameterArnUnguarded(name, mask);
|
|
27718
27719
|
} catch (error) {
|
|
27719
|
-
this.logger.warn(mask(`Could not build the Arn attribute for SSM parameter ${name}: ${describeAwsFailure(error).detail}. The parameter itself is unaffected; the Arn is NOT recorded, so an Fn::GetAtt on it will fail until a later deploy records it.`));
|
|
27720
|
+
this.logger.warn(mask(`Could not build the Arn attribute for SSM parameter ${displaySafe(mask(name))}: ${describeAwsFailure(error).detail}. The parameter itself is unaffected; the Arn is NOT recorded, so an Fn::GetAtt on it will fail until a later deploy records it.`));
|
|
27720
27721
|
return;
|
|
27721
27722
|
}
|
|
27722
27723
|
}
|
|
@@ -27740,7 +27741,7 @@ var SSMParameterProvider = class {
|
|
|
27740
27741
|
const region = await this.ssmClient.config.region();
|
|
27741
27742
|
const accountInfo = await getAccountInfo(region);
|
|
27742
27743
|
if (accountInfo.fabricated) {
|
|
27743
|
-
this.logger.warn(mask(`Cannot determine the AWS account (STS is unreachable, and the resolved account id is a placeholder), so the Arn attribute for SSM parameter ${name} would be fabricated and is NOT recorded. An Fn::GetAtt on it will fail until a later deploy resolves the account.`));
|
|
27744
|
+
this.logger.warn(mask(`Cannot determine the AWS account (STS is unreachable, and the resolved account id is a placeholder), so the Arn attribute for SSM parameter ${displaySafe(mask(name))} would be fabricated and is NOT recorded. An Fn::GetAtt on it will fail until a later deploy resolves the account.`));
|
|
27744
27745
|
return;
|
|
27745
27746
|
}
|
|
27746
27747
|
const { partition } = derivePartitionAndUrlSuffix(accountInfo.region);
|
|
@@ -27754,14 +27755,14 @@ var SSMParameterProvider = class {
|
|
|
27754
27755
|
const mask = maskerOrIdentity(context?.maskSecrets);
|
|
27755
27756
|
const warn = (message) => this.logger.warn(mask(message));
|
|
27756
27757
|
const debug = (message) => this.logger.debug(mask(message));
|
|
27757
|
-
debug(`Creating SSM parameter ${logicalId}`);
|
|
27758
|
+
debug(`Creating SSM parameter ${displaySafe(logicalId)}`);
|
|
27758
27759
|
const name = properties["Name"] || `/${generateResourceName(logicalId, {
|
|
27759
27760
|
maxLength: 1023,
|
|
27760
27761
|
allowedPattern: /[^a-zA-Z0-9-/_]/g
|
|
27761
27762
|
})}`;
|
|
27762
27763
|
const type = properties["Type"] || "String";
|
|
27763
27764
|
const value = properties["Value"];
|
|
27764
|
-
if (!value) throw new ProvisioningError(`Value is required for SSM parameter ${logicalId}`, resourceType, logicalId);
|
|
27765
|
+
if (!value) throw new ProvisioningError(`Value is required for SSM parameter ${displaySafe(logicalId)}`, resourceType, logicalId);
|
|
27765
27766
|
try {
|
|
27766
27767
|
const putParams = {
|
|
27767
27768
|
Name: name,
|
|
@@ -27785,7 +27786,7 @@ var SSMParameterProvider = class {
|
|
|
27785
27786
|
} catch (innerError) {
|
|
27786
27787
|
try {
|
|
27787
27788
|
await this.ssmClient.send(new DeleteParameterCommand({ Name: name }));
|
|
27788
|
-
debug(`Cleaned up partially-created SSM parameter ${logicalId} (${name}) after wiring failure`);
|
|
27789
|
+
debug(`Cleaned up partially-created SSM parameter ${displaySafe(logicalId)} (${displaySafe(mask(name))}) after wiring failure`);
|
|
27789
27790
|
} catch (cleanupError) {
|
|
27790
27791
|
const deleteCommand = renderDisableCommand({
|
|
27791
27792
|
before: "aws ssm delete-parameter --name",
|
|
@@ -27793,11 +27794,11 @@ var SSMParameterProvider = class {
|
|
|
27793
27794
|
maskSecrets: mask
|
|
27794
27795
|
});
|
|
27795
27796
|
const manualStep = deleteCommand ? `Manual deletion may be required before the next deploy: ${deleteCommand}` : "Manual deletion may be required before the next deploy, via the console: the parameter name cannot be reproduced safely on a command line, and a command naming the sanitized form would delete a DIFFERENT parameter.";
|
|
27796
|
-
warn(`Failed to clean up partially-created SSM parameter ${logicalId} (${name}): ${describeAwsFailure(cleanupError).detail}. ${manualStep}`);
|
|
27797
|
+
warn(`Failed to clean up partially-created SSM parameter ${displaySafe(logicalId)} (${displaySafe(mask(name))}): ${describeAwsFailure(cleanupError).detail}. ${manualStep}`);
|
|
27797
27798
|
}
|
|
27798
27799
|
throw innerError;
|
|
27799
27800
|
}
|
|
27800
|
-
debug(`Successfully created SSM parameter ${logicalId}: ${name}`);
|
|
27801
|
+
debug(`Successfully created SSM parameter ${displaySafe(logicalId)}: ${displaySafe(mask(name))}`);
|
|
27801
27802
|
const arn = await this.buildParameterArn(name, mask);
|
|
27802
27803
|
return {
|
|
27803
27804
|
physicalId: name,
|
|
@@ -27809,7 +27810,7 @@ var SSMParameterProvider = class {
|
|
|
27809
27810
|
};
|
|
27810
27811
|
} catch (error) {
|
|
27811
27812
|
const cause = error instanceof Error ? error : void 0;
|
|
27812
|
-
throw new ProvisioningError(`Failed to create SSM parameter ${logicalId}: ${mask(error instanceof Error ? error.message : String(error))}`, resourceType, logicalId, void 0, cause);
|
|
27813
|
+
throw new ProvisioningError(`Failed to create SSM parameter ${displaySafe(logicalId)}: ${mask(error instanceof Error ? error.message : String(error))}`, resourceType, logicalId, void 0, cause);
|
|
27813
27814
|
}
|
|
27814
27815
|
}
|
|
27815
27816
|
/**
|
|
@@ -27818,10 +27819,10 @@ var SSMParameterProvider = class {
|
|
|
27818
27819
|
async update(logicalId, physicalId, resourceType, properties, previousProperties, context) {
|
|
27819
27820
|
const mask = maskerOrIdentity(context?.maskSecrets);
|
|
27820
27821
|
const debug = (message) => this.logger.debug(mask(message));
|
|
27821
|
-
debug(`Updating SSM parameter ${logicalId}: ${physicalId}`);
|
|
27822
|
+
debug(`Updating SSM parameter ${displaySafe(logicalId)}: ${displaySafe(mask(physicalId))}`);
|
|
27822
27823
|
const type = properties["Type"] || "String";
|
|
27823
27824
|
const value = properties["Value"];
|
|
27824
|
-
if (!value) throw new ProvisioningError(`Value is required for SSM parameter ${logicalId}`, resourceType, logicalId, physicalId);
|
|
27825
|
+
if (!value) throw new ProvisioningError(`Value is required for SSM parameter ${displaySafe(logicalId)}`, resourceType, logicalId, physicalId);
|
|
27825
27826
|
try {
|
|
27826
27827
|
const putParams = {
|
|
27827
27828
|
Name: physicalId,
|
|
@@ -27850,9 +27851,9 @@ var SSMParameterProvider = class {
|
|
|
27850
27851
|
ResourceId: physicalId,
|
|
27851
27852
|
Tags: newTags
|
|
27852
27853
|
}));
|
|
27853
|
-
debug(`Updated tags for SSM parameter ${physicalId}`);
|
|
27854
|
+
debug(`Updated tags for SSM parameter ${displaySafe(mask(physicalId))}`);
|
|
27854
27855
|
}
|
|
27855
|
-
debug(`Successfully updated SSM parameter ${logicalId}`);
|
|
27856
|
+
debug(`Successfully updated SSM parameter ${displaySafe(logicalId)}`);
|
|
27856
27857
|
const arn = await this.buildParameterArn(physicalId, mask);
|
|
27857
27858
|
return {
|
|
27858
27859
|
physicalId,
|
|
@@ -27865,26 +27866,26 @@ var SSMParameterProvider = class {
|
|
|
27865
27866
|
};
|
|
27866
27867
|
} catch (error) {
|
|
27867
27868
|
const cause = error instanceof Error ? error : void 0;
|
|
27868
|
-
throw new ProvisioningError(`Failed to update SSM parameter ${logicalId}: ${mask(error instanceof Error ? error.message : String(error))}`, resourceType, logicalId, physicalId, cause);
|
|
27869
|
+
throw new ProvisioningError(`Failed to update SSM parameter ${displaySafe(logicalId)}: ${mask(error instanceof Error ? error.message : String(error))}`, resourceType, logicalId, physicalId, cause);
|
|
27869
27870
|
}
|
|
27870
27871
|
}
|
|
27871
27872
|
/**
|
|
27872
27873
|
* Delete an SSM parameter
|
|
27873
27874
|
*/
|
|
27874
27875
|
async delete(logicalId, physicalId, resourceType, _properties, context) {
|
|
27875
|
-
this.logger.debug(`Deleting SSM parameter ${logicalId}: ${physicalId}`);
|
|
27876
|
+
this.logger.debug(`Deleting SSM parameter ${displaySafe(logicalId)}: ${displaySafe(physicalId)}`);
|
|
27876
27877
|
try {
|
|
27877
27878
|
await this.ssmClient.send(new DeleteParameterCommand({ Name: physicalId }));
|
|
27878
|
-
this.logger.debug(`Successfully deleted SSM parameter ${logicalId}`);
|
|
27879
|
+
this.logger.debug(`Successfully deleted SSM parameter ${displaySafe(logicalId)}`);
|
|
27879
27880
|
} catch (error) {
|
|
27880
27881
|
if (error instanceof ParameterNotFound) {
|
|
27881
27882
|
const clientRegion = await this.ssmClient.config.region();
|
|
27882
27883
|
assertRegionMatch(clientRegion, context?.expectedRegion, resourceType, logicalId, physicalId);
|
|
27883
|
-
this.logger.debug(`Parameter ${physicalId} does not exist, skipping deletion`);
|
|
27884
|
+
this.logger.debug(`Parameter ${displaySafe(physicalId)} does not exist, skipping deletion`);
|
|
27884
27885
|
return;
|
|
27885
27886
|
}
|
|
27886
27887
|
const cause = error instanceof Error ? error : void 0;
|
|
27887
|
-
throw new ProvisioningError(`Failed to delete SSM parameter ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
|
|
27888
|
+
throw new ProvisioningError(`Failed to delete SSM parameter ${displaySafe(logicalId)}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, physicalId, cause);
|
|
27888
27889
|
}
|
|
27889
27890
|
}
|
|
27890
27891
|
/**
|
|
@@ -28027,7 +28028,7 @@ var SSMParameterProvider = class {
|
|
|
28027
28028
|
after: "--query Parameter.Name --output text"
|
|
28028
28029
|
});
|
|
28029
28030
|
const howToRead = readCommand ? ` Read the name AWS holds with: ${readCommand}` : " Read the name AWS holds via the console: the value cdkd was given cannot be reproduced safely on a command line, so any command shown here would read a different parameter.";
|
|
28030
|
-
throw new ProvisioningError(`Cannot adopt SSM parameter ${input.logicalId} from ${shape} ('${explicit}'): cdkd records a parameter's NAME as its physical id, because SSM's write APIs accept only the name (PutParameter and DeleteParameter both reject an ARN, and a name cannot contain ':'), so the next cdkd deploy and cdkd destroy would fail with a ValidationException. ${remedy}.${whyNotDerived}${howToRead}`, input.resourceType, input.logicalId);
|
|
28031
|
+
throw new ProvisioningError(`Cannot adopt SSM parameter ${displaySafe(input.logicalId)} from ${shape} ('${displaySafe(explicit)}'): cdkd records a parameter's NAME as its physical id, because SSM's write APIs accept only the name (PutParameter and DeleteParameter both reject an ARN, and a name cannot contain ':'), so the next cdkd deploy and cdkd destroy would fail with a ValidationException. ${remedy}.${whyNotDerived}${howToRead}`, input.resourceType, input.logicalId);
|
|
28031
28032
|
}
|
|
28032
28033
|
/**
|
|
28033
28034
|
* Adopt an existing SSM parameter into cdkd state.
|
|
@@ -28871,7 +28872,7 @@ const generations = /* @__PURE__ */ new Map();
|
|
|
28871
28872
|
* long-lived process cannot grow the map without bound.
|
|
28872
28873
|
*/
|
|
28873
28874
|
const MAX_TRACKED_GENERATIONS = 1e5;
|
|
28874
|
-
const tokenKey = (scope, logicalId, maxLength, charset) => injectiveKey(scope,
|
|
28875
|
+
const tokenKey = (scope, logicalId, maxLength, charset) => injectiveKey(scope, ambientRegion() ?? "", getCurrentStackName() ?? "", logicalId, maxLength, charset);
|
|
28875
28876
|
const derive = (key, generation, maxLength, charset) => {
|
|
28876
28877
|
const digest = createHash("sha256").update(`${PROCESS_NONCE}\u0000${key}\u0000${generation}`).digest("hex");
|
|
28877
28878
|
return `cdkd${charset === "alphanumeric" ? "" : "-"}${digest}`.slice(0, maxLength);
|
|
@@ -34167,7 +34168,7 @@ function appendMapPatchOps(ops, basePath, next, prev) {
|
|
|
34167
34168
|
*/
|
|
34168
34169
|
var ApiGatewayV2Provider = class {
|
|
34169
34170
|
client;
|
|
34170
|
-
providerRegion =
|
|
34171
|
+
providerRegion = ambientRegion();
|
|
34171
34172
|
logger = getLogger().child("ApiGatewayV2Provider");
|
|
34172
34173
|
handledProperties = /* @__PURE__ */ new Map([
|
|
34173
34174
|
["AWS::ApiGatewayV2::Api", /* @__PURE__ */ new Set([
|
|
@@ -38058,7 +38059,7 @@ var AgentCoreEvaluatorProvider = class {
|
|
|
38058
38059
|
var StepFunctionsProvider = class {
|
|
38059
38060
|
sfnClient;
|
|
38060
38061
|
s3Client;
|
|
38061
|
-
providerRegion =
|
|
38062
|
+
providerRegion = ambientRegion();
|
|
38062
38063
|
logger = getLogger().child("StepFunctionsProvider");
|
|
38063
38064
|
handledProperties = /* @__PURE__ */ new Map([["AWS::StepFunctions::StateMachine", /* @__PURE__ */ new Set([
|
|
38064
38065
|
"StateMachineName",
|
|
@@ -38650,7 +38651,7 @@ function clusterNameFromServiceArn(arn) {
|
|
|
38650
38651
|
const settleRolloutDelays = { sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)) };
|
|
38651
38652
|
var ECSProvider = class {
|
|
38652
38653
|
ecsClient;
|
|
38653
|
-
providerRegion =
|
|
38654
|
+
providerRegion = ambientRegion();
|
|
38654
38655
|
logger = getLogger().child("ECSProvider");
|
|
38655
38656
|
handledProperties = /* @__PURE__ */ new Map([
|
|
38656
38657
|
["AWS::ECS::Cluster", /* @__PURE__ */ new Set([
|
|
@@ -40454,7 +40455,7 @@ const LISTENER_ATTRIBUTE_DEFAULTS = { "routing.http.response.server.enabled": "t
|
|
|
40454
40455
|
*/
|
|
40455
40456
|
var ELBv2Provider = class {
|
|
40456
40457
|
elbv2Client;
|
|
40457
|
-
providerRegion =
|
|
40458
|
+
providerRegion = ambientRegion();
|
|
40458
40459
|
logger = getLogger().child("ELBv2Provider");
|
|
40459
40460
|
handledProperties = /* @__PURE__ */ new Map([
|
|
40460
40461
|
["AWS::ElasticLoadBalancingV2::LoadBalancer", /* @__PURE__ */ new Set([
|
|
@@ -41732,7 +41733,7 @@ var ELBv2Provider = class {
|
|
|
41732
41733
|
*/
|
|
41733
41734
|
var RDSProvider = class {
|
|
41734
41735
|
rdsClient;
|
|
41735
|
-
providerRegion =
|
|
41736
|
+
providerRegion = ambientRegion();
|
|
41736
41737
|
logger = getLogger().child("RDSProvider");
|
|
41737
41738
|
handledProperties = /* @__PURE__ */ new Map([
|
|
41738
41739
|
["AWS::RDS::DBSubnetGroup", /* @__PURE__ */ new Set([
|
|
@@ -42540,7 +42541,7 @@ const POLL_TIMEOUT_MS$1 = 18e5;
|
|
|
42540
42541
|
*/
|
|
42541
42542
|
var RDSDBProxyProvider = class {
|
|
42542
42543
|
rdsClient;
|
|
42543
|
-
providerRegion =
|
|
42544
|
+
providerRegion = ambientRegion();
|
|
42544
42545
|
logger = getLogger().child("RDSDBProxyProvider");
|
|
42545
42546
|
attributeCache = /* @__PURE__ */ new Map();
|
|
42546
42547
|
handledProperties = /* @__PURE__ */ new Map([["AWS::RDS::DBProxy", /* @__PURE__ */ new Set([
|
|
@@ -42882,7 +42883,7 @@ const POLL_TIMEOUT_MS = 18e5;
|
|
|
42882
42883
|
*/
|
|
42883
42884
|
var RDSDBProxyEndpointProvider = class {
|
|
42884
42885
|
rdsClient;
|
|
42885
|
-
providerRegion =
|
|
42886
|
+
providerRegion = ambientRegion();
|
|
42886
42887
|
logger = getLogger().child("RDSDBProxyEndpointProvider");
|
|
42887
42888
|
attributeCache = /* @__PURE__ */ new Map();
|
|
42888
42889
|
handledProperties = /* @__PURE__ */ new Map([["AWS::RDS::DBProxyEndpoint", /* @__PURE__ */ new Set([
|
|
@@ -43196,7 +43197,7 @@ var RDSDBProxyEndpointProvider = class {
|
|
|
43196
43197
|
*/
|
|
43197
43198
|
var RDSDBProxyTargetGroupProvider = class {
|
|
43198
43199
|
rdsClient;
|
|
43199
|
-
providerRegion =
|
|
43200
|
+
providerRegion = ambientRegion();
|
|
43200
43201
|
logger = getLogger().child("RDSDBProxyTargetGroupProvider");
|
|
43201
43202
|
handledProperties = /* @__PURE__ */ new Map([["AWS::RDS::DBProxyTargetGroup", /* @__PURE__ */ new Set([
|
|
43202
43203
|
"DBProxyName",
|
|
@@ -43484,7 +43485,7 @@ var RDSDBProxyTargetGroupProvider = class {
|
|
|
43484
43485
|
*/
|
|
43485
43486
|
var DocDBProvider = class {
|
|
43486
43487
|
docdbClient;
|
|
43487
|
-
providerRegion =
|
|
43488
|
+
providerRegion = ambientRegion();
|
|
43488
43489
|
logger = getLogger().child("DocDBProvider");
|
|
43489
43490
|
handledProperties = /* @__PURE__ */ new Map([
|
|
43490
43491
|
["AWS::DocDB::DBSubnetGroup", /* @__PURE__ */ new Set([
|
|
@@ -44125,7 +44126,7 @@ var DocDBProvider = class {
|
|
|
44125
44126
|
*/
|
|
44126
44127
|
var NeptuneProvider = class {
|
|
44127
44128
|
neptuneClient;
|
|
44128
|
-
providerRegion =
|
|
44129
|
+
providerRegion = ambientRegion();
|
|
44129
44130
|
logger = getLogger().child("NeptuneProvider");
|
|
44130
44131
|
handledProperties = /* @__PURE__ */ new Map([
|
|
44131
44132
|
["AWS::Neptune::DBSubnetGroup", /* @__PURE__ */ new Set([
|
|
@@ -44908,7 +44909,7 @@ function canonicalizeQueryName(name) {
|
|
|
44908
44909
|
*/
|
|
44909
44910
|
var Route53Provider = class {
|
|
44910
44911
|
route53Client;
|
|
44911
|
-
providerRegion =
|
|
44912
|
+
providerRegion = ambientRegion();
|
|
44912
44913
|
logger = getLogger().child("Route53Provider");
|
|
44913
44914
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Route53::HostedZone", /* @__PURE__ */ new Set([
|
|
44914
44915
|
"Name",
|
|
@@ -46975,7 +46976,7 @@ function narrowMfaConfiguration(properties) {
|
|
|
46975
46976
|
*/
|
|
46976
46977
|
var CognitoUserPoolProvider = class {
|
|
46977
46978
|
cognitoClient;
|
|
46978
|
-
providerRegion =
|
|
46979
|
+
providerRegion = ambientRegion();
|
|
46979
46980
|
logger = getLogger().child("CognitoUserPoolProvider");
|
|
46980
46981
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Cognito::UserPool", /* @__PURE__ */ new Set([
|
|
46981
46982
|
"UserPoolName",
|
|
@@ -47910,7 +47911,7 @@ var CognitoUserPoolProvider = class {
|
|
|
47910
47911
|
*/
|
|
47911
47912
|
var ElastiCacheProvider = class {
|
|
47912
47913
|
client;
|
|
47913
|
-
providerRegion =
|
|
47914
|
+
providerRegion = ambientRegion();
|
|
47914
47915
|
logger = getLogger().child("ElastiCacheProvider");
|
|
47915
47916
|
handledProperties = /* @__PURE__ */ new Map([["AWS::ElastiCache::SubnetGroup", /* @__PURE__ */ new Set([
|
|
47916
47917
|
"CacheSubnetGroupName",
|
|
@@ -48448,7 +48449,7 @@ const PRIVATE_DNS_NAMESPACE_DEFAULT_SOA_TTL = 15;
|
|
|
48448
48449
|
var ServiceDiscoveryProvider = class ServiceDiscoveryProvider {
|
|
48449
48450
|
client;
|
|
48450
48451
|
stsClient;
|
|
48451
|
-
providerRegion =
|
|
48452
|
+
providerRegion = ambientRegion();
|
|
48452
48453
|
logger = getLogger().child("ServiceDiscoveryProvider");
|
|
48453
48454
|
handledProperties = /* @__PURE__ */ new Map([
|
|
48454
48455
|
["AWS::ServiceDiscovery::PrivateDnsNamespace", /* @__PURE__ */ new Set([
|
|
@@ -49461,7 +49462,7 @@ const MUTABLE_GRAPHQL_API_CONFIG_PROPERTIES = [
|
|
|
49461
49462
|
var AppSyncProvider = class {
|
|
49462
49463
|
client;
|
|
49463
49464
|
s3Client;
|
|
49464
|
-
providerRegion =
|
|
49465
|
+
providerRegion = ambientRegion();
|
|
49465
49466
|
logger = getLogger().child("AppSyncProvider");
|
|
49466
49467
|
/**
|
|
49467
49468
|
* Cache of `apiId -> GraphqlApi ARN` for the lifetime of this provider
|
|
@@ -51391,7 +51392,7 @@ function resolveTableIdentity(input) {
|
|
|
51391
51392
|
*/
|
|
51392
51393
|
var GlueProvider = class {
|
|
51393
51394
|
client;
|
|
51394
|
-
providerRegion =
|
|
51395
|
+
providerRegion = ambientRegion();
|
|
51395
51396
|
logger = getLogger().child("GlueProvider");
|
|
51396
51397
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Database", /* @__PURE__ */ new Set([
|
|
51397
51398
|
"DatabaseInput",
|
|
@@ -52249,7 +52250,7 @@ var GlueWorkflowProvider = class {
|
|
|
52249
52250
|
client;
|
|
52250
52251
|
stsClient;
|
|
52251
52252
|
cachedAccountId;
|
|
52252
|
-
providerRegion =
|
|
52253
|
+
providerRegion = ambientRegion();
|
|
52253
52254
|
logger = getLogger().child("GlueWorkflowProvider");
|
|
52254
52255
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Workflow", /* @__PURE__ */ new Set([
|
|
52255
52256
|
"Name",
|
|
@@ -52414,7 +52415,7 @@ var GlueWorkflowProvider = class {
|
|
|
52414
52415
|
*/
|
|
52415
52416
|
var GlueSecurityConfigurationProvider = class {
|
|
52416
52417
|
client;
|
|
52417
|
-
providerRegion =
|
|
52418
|
+
providerRegion = ambientRegion();
|
|
52418
52419
|
logger = getLogger().child("GlueSecurityConfigurationProvider");
|
|
52419
52420
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::SecurityConfiguration", /* @__PURE__ */ new Set(["Name", "EncryptionConfiguration"])]]);
|
|
52420
52421
|
getClient() {
|
|
@@ -52712,7 +52713,7 @@ function cleanCfnObject(obj) {
|
|
|
52712
52713
|
* to STS when not provided.
|
|
52713
52714
|
*/
|
|
52714
52715
|
async function buildGlueResourceArn(client, stsClient, resource, name, accountId) {
|
|
52715
|
-
return `arn:aws:glue:${await client.config.region() ||
|
|
52716
|
+
return `arn:aws:glue:${await client.config.region() || ambientRegion() || "us-east-1"}:${accountId ?? await resolveAccountId(stsClient)}:${resource}/${name}`;
|
|
52716
52717
|
}
|
|
52717
52718
|
async function resolveAccountId(stsClient) {
|
|
52718
52719
|
const identity = await stsClient.send(new GetCallerIdentityCommand({}));
|
|
@@ -52753,7 +52754,7 @@ var GlueJobProvider = class {
|
|
|
52753
52754
|
client;
|
|
52754
52755
|
stsClient;
|
|
52755
52756
|
cachedAccountId;
|
|
52756
|
-
providerRegion =
|
|
52757
|
+
providerRegion = ambientRegion();
|
|
52757
52758
|
logger = getLogger().child("GlueJobProvider");
|
|
52758
52759
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Job", /* @__PURE__ */ new Set([
|
|
52759
52760
|
"Name",
|
|
@@ -53142,7 +53143,7 @@ var GlueCrawlerProvider = class {
|
|
|
53142
53143
|
client;
|
|
53143
53144
|
stsClient;
|
|
53144
53145
|
cachedAccountId;
|
|
53145
|
-
providerRegion =
|
|
53146
|
+
providerRegion = ambientRegion();
|
|
53146
53147
|
logger = getLogger().child("GlueCrawlerProvider");
|
|
53147
53148
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Crawler", /* @__PURE__ */ new Set([
|
|
53148
53149
|
"Name",
|
|
@@ -53473,7 +53474,7 @@ function toCfnCrawlerTargets(targets) {
|
|
|
53473
53474
|
*/
|
|
53474
53475
|
var GlueConnectionProvider = class {
|
|
53475
53476
|
client;
|
|
53476
|
-
providerRegion =
|
|
53477
|
+
providerRegion = ambientRegion();
|
|
53477
53478
|
logger = getLogger().child("GlueConnectionProvider");
|
|
53478
53479
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Connection", /* @__PURE__ */ new Set(["ConnectionInput", "CatalogId"])]]);
|
|
53479
53480
|
getClient() {
|
|
@@ -53628,7 +53629,7 @@ var GlueTriggerProvider = class {
|
|
|
53628
53629
|
client;
|
|
53629
53630
|
stsClient;
|
|
53630
53631
|
cachedAccountId;
|
|
53631
|
-
providerRegion =
|
|
53632
|
+
providerRegion = ambientRegion();
|
|
53632
53633
|
logger = getLogger().child("GlueTriggerProvider");
|
|
53633
53634
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Glue::Trigger", /* @__PURE__ */ new Set([
|
|
53634
53635
|
"Name",
|
|
@@ -53851,7 +53852,7 @@ var GlueTriggerProvider = class {
|
|
|
53851
53852
|
*/
|
|
53852
53853
|
var KMSProvider = class {
|
|
53853
53854
|
client;
|
|
53854
|
-
providerRegion =
|
|
53855
|
+
providerRegion = ambientRegion();
|
|
53855
53856
|
logger = getLogger().child("KMSProvider");
|
|
53856
53857
|
handledProperties = /* @__PURE__ */ new Map([["AWS::KMS::Key", /* @__PURE__ */ new Set([
|
|
53857
53858
|
"Description",
|
|
@@ -54308,7 +54309,7 @@ var KMSProvider = class {
|
|
|
54308
54309
|
*/
|
|
54309
54310
|
var BudgetsBudgetProvider = class {
|
|
54310
54311
|
client;
|
|
54311
|
-
providerRegion =
|
|
54312
|
+
providerRegion = ambientRegion();
|
|
54312
54313
|
logger = getLogger().child("BudgetsBudgetProvider");
|
|
54313
54314
|
accountIdPromise;
|
|
54314
54315
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Budgets::Budget", /* @__PURE__ */ new Set([
|
|
@@ -54354,7 +54355,8 @@ var BudgetsBudgetProvider = class {
|
|
|
54354
54355
|
* `${AWS::Partition}` uses (issue #1815).
|
|
54355
54356
|
*
|
|
54356
54357
|
* Asking the CLIENT rather than `providerRegion` is what makes the ARN and
|
|
54357
|
-
* its consumer agree. `providerRegion` is `
|
|
54358
|
+
* its consumer agree. `providerRegion` is `ambientRegion()` (the stack scope's region, else
|
|
54359
|
+
* `process.env['AWS_REGION']`), and
|
|
54358
54360
|
* when that is unset `getClient()` builds `new BudgetsClient({})`, leaving
|
|
54359
54361
|
* the SDK to resolve the region from its OWN chain (`AWS_DEFAULT_REGION`,
|
|
54360
54362
|
* the `~/.aws/config` profile). So a profile-configured `cn-north-1` /
|
|
@@ -54922,7 +54924,7 @@ function comparableRecordSize(value, mask) {
|
|
|
54922
54924
|
*/
|
|
54923
54925
|
var KinesisStreamProvider = class {
|
|
54924
54926
|
client;
|
|
54925
|
-
providerRegion =
|
|
54927
|
+
providerRegion = ambientRegion();
|
|
54926
54928
|
logger = getLogger().child("KinesisProvider");
|
|
54927
54929
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Kinesis::Stream", /* @__PURE__ */ new Set([
|
|
54928
54930
|
"Name",
|
|
@@ -55408,7 +55410,7 @@ var KinesisStreamProvider = class {
|
|
|
55408
55410
|
*/
|
|
55409
55411
|
var KinesisStreamConsumerProvider = class {
|
|
55410
55412
|
client;
|
|
55411
|
-
providerRegion =
|
|
55413
|
+
providerRegion = ambientRegion();
|
|
55412
55414
|
logger = getLogger().child("KinesisStreamConsumerProvider");
|
|
55413
55415
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Kinesis::StreamConsumer", /* @__PURE__ */ new Set([
|
|
55414
55416
|
"ConsumerName",
|
|
@@ -55689,7 +55691,7 @@ function tagListToMap(tags) {
|
|
|
55689
55691
|
*/
|
|
55690
55692
|
var SchedulerScheduleProvider = class {
|
|
55691
55693
|
client;
|
|
55692
|
-
providerRegion =
|
|
55694
|
+
providerRegion = ambientRegion();
|
|
55693
55695
|
logger = getLogger().child("SchedulerScheduleProvider");
|
|
55694
55696
|
handledProperties = /* @__PURE__ */ new Map([["AWS::Scheduler::Schedule", /* @__PURE__ */ new Set([
|
|
55695
55697
|
"Name",
|
|
@@ -55975,7 +55977,7 @@ var SchedulerScheduleProvider = class {
|
|
|
55975
55977
|
*/
|
|
55976
55978
|
var EFSProvider = class {
|
|
55977
55979
|
client;
|
|
55978
|
-
providerRegion =
|
|
55980
|
+
providerRegion = ambientRegion();
|
|
55979
55981
|
logger = getLogger().child("EFSProvider");
|
|
55980
55982
|
handledProperties = /* @__PURE__ */ new Map([
|
|
55981
55983
|
["AWS::EFS::FileSystem", /* @__PURE__ */ new Set([
|
|
@@ -56900,7 +56902,7 @@ var FSxFileSystemProvider = class {
|
|
|
56900
56902
|
*/
|
|
56901
56903
|
disableCcApiFallback = true;
|
|
56902
56904
|
client;
|
|
56903
|
-
providerRegion =
|
|
56905
|
+
providerRegion = ambientRegion();
|
|
56904
56906
|
logger = getLogger().child("FSxFileSystemProvider");
|
|
56905
56907
|
pollIntervalMs;
|
|
56906
56908
|
maxWaitMs;
|
|
@@ -58007,7 +58009,7 @@ var EMRClusterProvider = class {
|
|
|
58007
58009
|
*/
|
|
58008
58010
|
disableCcApiFallback = true;
|
|
58009
58011
|
client;
|
|
58010
|
-
providerRegion =
|
|
58012
|
+
providerRegion = ambientRegion();
|
|
58011
58013
|
logger = getLogger().child("EMRClusterProvider");
|
|
58012
58014
|
pollIntervalMs;
|
|
58013
58015
|
maxWaitMs;
|
|
@@ -58798,7 +58800,7 @@ var EMRInstanceGroupConfigProvider = class {
|
|
|
58798
58800
|
*/
|
|
58799
58801
|
disableCcApiFallback = true;
|
|
58800
58802
|
client;
|
|
58801
|
-
providerRegion =
|
|
58803
|
+
providerRegion = ambientRegion();
|
|
58802
58804
|
logger = getLogger().child("EMRInstanceGroupConfigProvider");
|
|
58803
58805
|
pollIntervalMs;
|
|
58804
58806
|
maxWaitMs;
|
|
@@ -59121,7 +59123,7 @@ var EMRInstanceFleetConfigProvider = class {
|
|
|
59121
59123
|
*/
|
|
59122
59124
|
disableCcApiFallback = true;
|
|
59123
59125
|
client;
|
|
59124
|
-
providerRegion =
|
|
59126
|
+
providerRegion = ambientRegion();
|
|
59125
59127
|
logger = getLogger().child("EMRInstanceFleetConfigProvider");
|
|
59126
59128
|
pollIntervalMs;
|
|
59127
59129
|
maxWaitMs;
|
|
@@ -59427,7 +59429,7 @@ const SUPPORTED_UPDATE_DESTINATIONS = /* @__PURE__ */ new Set([
|
|
|
59427
59429
|
*/
|
|
59428
59430
|
var FirehoseProvider = class {
|
|
59429
59431
|
client;
|
|
59430
|
-
providerRegion =
|
|
59432
|
+
providerRegion = ambientRegion();
|
|
59431
59433
|
logger = getLogger().child("FirehoseProvider");
|
|
59432
59434
|
handledProperties = /* @__PURE__ */ new Map([["AWS::KinesisFirehose::DeliveryStream", /* @__PURE__ */ new Set([
|
|
59433
59435
|
"DeliveryStreamName",
|
|
@@ -60775,7 +60777,7 @@ function describeValue(value) {
|
|
|
60775
60777
|
*/
|
|
60776
60778
|
var CloudTrailProvider = class {
|
|
60777
60779
|
client;
|
|
60778
|
-
providerRegion =
|
|
60780
|
+
providerRegion = ambientRegion();
|
|
60779
60781
|
logger = getLogger().child("CloudTrailProvider");
|
|
60780
60782
|
handledProperties = /* @__PURE__ */ new Map([["AWS::CloudTrail::Trail", /* @__PURE__ */ new Set([
|
|
60781
60783
|
"S3BucketName",
|
|
@@ -61117,7 +61119,7 @@ var CloudTrailProvider = class {
|
|
|
61117
61119
|
*/
|
|
61118
61120
|
var CodeBuildProvider = class {
|
|
61119
61121
|
client;
|
|
61120
|
-
providerRegion =
|
|
61122
|
+
providerRegion = ambientRegion();
|
|
61121
61123
|
logger = getLogger().child("CodeBuildProvider");
|
|
61122
61124
|
handledProperties = /* @__PURE__ */ new Map([["AWS::CodeBuild::Project", /* @__PURE__ */ new Set([
|
|
61123
61125
|
"Name",
|
|
@@ -61700,7 +61702,7 @@ function triggersEqual(a, b) {
|
|
|
61700
61702
|
var CodeCommitRepositoryProvider = class {
|
|
61701
61703
|
client;
|
|
61702
61704
|
s3Client;
|
|
61703
|
-
providerRegion =
|
|
61705
|
+
providerRegion = ambientRegion();
|
|
61704
61706
|
logger = getLogger().child("CodeCommitRepositoryProvider");
|
|
61705
61707
|
handledProperties = /* @__PURE__ */ new Map([["AWS::CodeCommit::Repository", /* @__PURE__ */ new Set([
|
|
61706
61708
|
"RepositoryName",
|
|
@@ -62137,7 +62139,7 @@ var CodeCommitRepositoryProvider = class {
|
|
|
62137
62139
|
*/
|
|
62138
62140
|
var DLMLifecyclePolicyProvider = class {
|
|
62139
62141
|
client;
|
|
62140
|
-
providerRegion =
|
|
62142
|
+
providerRegion = ambientRegion();
|
|
62141
62143
|
logger = getLogger().child("DLMLifecyclePolicyProvider");
|
|
62142
62144
|
handledProperties = /* @__PURE__ */ new Map([["AWS::DLM::LifecyclePolicy", /* @__PURE__ */ new Set([
|
|
62143
62145
|
"Description",
|
|
@@ -62442,7 +62444,7 @@ var DLMLifecyclePolicyProvider = class {
|
|
|
62442
62444
|
*/
|
|
62443
62445
|
var S3VectorsProvider = class {
|
|
62444
62446
|
client;
|
|
62445
|
-
providerRegion =
|
|
62447
|
+
providerRegion = ambientRegion();
|
|
62446
62448
|
logger = getLogger().child("S3VectorsProvider");
|
|
62447
62449
|
handledProperties = /* @__PURE__ */ new Map([["AWS::S3Vectors::VectorBucket", /* @__PURE__ */ new Set([
|
|
62448
62450
|
"VectorBucketName",
|
|
@@ -62756,7 +62758,7 @@ var S3DirectoryBucketProvider = class {
|
|
|
62756
62758
|
])]]);
|
|
62757
62759
|
ec2Client;
|
|
62758
62760
|
s3ControlClient;
|
|
62759
|
-
providerRegion =
|
|
62761
|
+
providerRegion = ambientRegion();
|
|
62760
62762
|
constructor() {
|
|
62761
62763
|
const awsClients = getAwsClients();
|
|
62762
62764
|
this.s3Client = awsClients.s3;
|
|
@@ -62834,7 +62836,7 @@ var S3DirectoryBucketProvider = class {
|
|
|
62834
62836
|
* KNOWN BOUND (pre-existing, not introduced by #1815): the region — and now
|
|
62835
62837
|
* the partition derived from it — comes from `s3Client`, while the tag
|
|
62836
62838
|
* calls that consume this ARN go through `s3ControlClient`, built from
|
|
62837
|
-
* `providerRegion` (`
|
|
62839
|
+
* `providerRegion` (`ambientRegion()`). Those two can disagree,
|
|
62838
62840
|
* so the ARN can name a different region than the client receiving it. The
|
|
62839
62841
|
* region SEGMENT already had this exposure before the partition rode along
|
|
62840
62842
|
* with it; unifying the two clients' region resolution is a separate change.
|
|
@@ -63179,7 +63181,7 @@ function tableIdentityFromGetTable(tableARN, namespace, name) {
|
|
|
63179
63181
|
*/
|
|
63180
63182
|
var S3TablesProvider = class {
|
|
63181
63183
|
client;
|
|
63182
|
-
providerRegion =
|
|
63184
|
+
providerRegion = ambientRegion();
|
|
63183
63185
|
logger = getLogger().child("S3TablesProvider");
|
|
63184
63186
|
handledProperties = /* @__PURE__ */ new Map([
|
|
63185
63187
|
["AWS::S3Tables::TableBucket", /* @__PURE__ */ new Set(["TableBucketName", "Tags"])],
|
|
@@ -63981,7 +63983,7 @@ var S3TablesProvider = class {
|
|
|
63981
63983
|
*/
|
|
63982
63984
|
var ECRProvider = class {
|
|
63983
63985
|
client;
|
|
63984
|
-
providerRegion =
|
|
63986
|
+
providerRegion = ambientRegion();
|
|
63985
63987
|
logger = getLogger().child("ECRProvider");
|
|
63986
63988
|
handledProperties = /* @__PURE__ */ new Map([["AWS::ECR::Repository", /* @__PURE__ */ new Set([
|
|
63987
63989
|
"RepositoryName",
|
|
@@ -66580,10 +66582,6 @@ async function deployCommand(stacks, options) {
|
|
|
66580
66582
|
const dagBuilder = new DagBuilder({ relaxCdkVpcDefensiveDeps: !!options.aggressiveVpcParallel });
|
|
66581
66583
|
const diffCalculator = new DiffCalculator();
|
|
66582
66584
|
const baseRegion = namedCliRegion(options.region) ?? "us-east-1";
|
|
66583
|
-
const switchRegion = (region) => {
|
|
66584
|
-
process.env["AWS_REGION"] = region;
|
|
66585
|
-
process.env["AWS_DEFAULT_REGION"] = region;
|
|
66586
|
-
};
|
|
66587
66585
|
const workGraph = new WorkGraph();
|
|
66588
66586
|
const stackMap = new Map(targetStacks.map((s) => [s.stackName, s]));
|
|
66589
66587
|
const stackRedirects = /* @__PURE__ */ new Map();
|
|
@@ -66639,12 +66637,13 @@ async function deployCommand(stacks, options) {
|
|
|
66639
66637
|
if (deployInterrupted) throw new DeployCancelledError(`Deploy interrupted before stack '${stackInfo.stackName}' started — not starting it.`);
|
|
66640
66638
|
const stackRegion = stackInfo.region || baseRegion;
|
|
66641
66639
|
logger.info(`\n${cyan("Deploying stack:")} ${bold(cyan(stackInfo.stackName))}${stackRegion !== baseRegion ? gray(` (region: ${stackRegion})`) : ""}`);
|
|
66642
|
-
switchRegion(stackRegion);
|
|
66643
66640
|
const stackAwsClients = new AwsClients({
|
|
66644
66641
|
region: stackRegion,
|
|
66645
66642
|
...options.profile && { profile: options.profile }
|
|
66646
66643
|
});
|
|
66647
|
-
|
|
66644
|
+
return runWithStackAwsClients(stackAwsClients, () => deployStackInScope(stackInfo, stackRegion, stackAwsClients));
|
|
66645
|
+
};
|
|
66646
|
+
const deployStackInScope = async (stackInfo, stackRegion, stackAwsClients) => {
|
|
66648
66647
|
const stateS3Client = new AwsClients({
|
|
66649
66648
|
region: baseRegion,
|
|
66650
66649
|
...options.profile && { profile: options.profile }
|
|
@@ -66812,8 +66811,6 @@ async function deployCommand(stacks, options) {
|
|
|
66812
66811
|
if (eventRecorder) await eventRecorder.finalize(runResult);
|
|
66813
66812
|
stackAwsClients.destroy();
|
|
66814
66813
|
stateS3Client.destroy();
|
|
66815
|
-
switchRegion(baseRegion);
|
|
66816
|
-
setAwsClients(awsClients);
|
|
66817
66814
|
}
|
|
66818
66815
|
};
|
|
66819
66816
|
if (options.pinCcApi?.length && options.recreateViaSdkProvider?.length) {
|
|
@@ -98143,4 +98140,4 @@ function buildProgram() {
|
|
|
98143
98140
|
|
|
98144
98141
|
//#endregion
|
|
98145
98142
|
export { buildProgram };
|
|
98146
|
-
//# sourceMappingURL=program-
|
|
98143
|
+
//# sourceMappingURL=program-CGPchKa2.js.map
|