@go-to-k/cdkd 0.284.22 → 0.284.24
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-DLU0EEhO.js → asg-provider-Bh0odlSk.js} +2 -2
- package/dist/{asg-provider-DLU0EEhO.js.map → asg-provider-Bh0odlSk.js.map} +1 -1
- package/dist/cli.js +86 -15
- package/dist/cli.js.map +1 -1
- package/dist/{deploy-engine-DOlhIeGv.js → deploy-engine-BJQbni1s.js} +632 -58
- package/dist/{deploy-engine-DOlhIeGv.js.map → deploy-engine-BJQbni1s.js.map} +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { $ as
|
|
2
|
+
import { $ as disableInstanceApiTermination, $n as NestedStackChildDirectDestroyError, $t as ensureAssetStorage, A as isStatefulRecreateTargetSync, An as uploadCfnTemplate, At as s3BucketWebsiteUrl, B as collectPublishedOutputNames, Bn as getAwsClients, Bt as rebuildClientForBucketRegion, C as createPreDeleteFinalSnapshot, Cn as resolveUseCdkBootstrapAssets, Ct as maskSecretsInText, D as makeCanonicalizePropertiesFn, Dn as CFN_TEMPLATE_URL_LIMIT, Dt as s3BucketDomainName, E as unsupportedFinalSnapshotError, En as CFN_TEMPLATE_BODY_LIMIT, Et as s3BucketArn, F as gray, Fn as AssemblyReader, Ft as withRetry, G as IAMRoleProvider, Gt as buildAssetRedirectMap, H as isExportAliasCollision, Hn as setAwsClients, Ht as AssetPublisher, I as green, In as processStackMessages, It as DagBuilder, J as ProviderRegistry, Jn as LocalInvokeBuildError$1, Jt as rewriteTemplateAssetReferences, K as collectInlinePolicyNamesManagedBySiblings, Kt as createAssetRedirectResolver, L as red, Lt as TemplateParser, M as formatResourceLine, Mn as PARTITION_TABLE, Mt as DiffCalculator, N as bold, Nn as canonicalizeRegion, Nt as INTRINSIC_KEYS, O as extractDeploymentEventError, On as MIGRATE_TMP_PREFIX, Ot as s3BucketDualStackDomainName, P as cyan, Pn as derivePartitionAndUrlSuffix, Pt as describeTypeWithThrottleRetry, Q as slowCcOperationTimeoutMs, Qn as MissingCdkCliError, Qt as BOOTSTRAP_MARKER_PREFIX, R as yellow, Rn as resolveBucketRegion, Rt as LockManager, S as ccRoutedFinalSnapshotError, Sn as resolveStateBucketWithDefaultAndSource, St as isSingleDynamicReferenceToken, T as refusesFinalSnapshot, Tn as warnDeprecatedNoPrefixCliFlag, Tt as scrubResourceRecord, U as secretBearingStateKeyWarning, Ut as stringifyValue, V as exportAliasCollisionScrubWarning, Vn as resetAwsClients, Vt as shouldRetainResource, W as stateKeySecretExposure, Wn as CdkdError, Wt as WorkGraph, X as findSilentDropProperties, Xn as LocalStartServiceError, Xt as stripControlChars, Y as findActionableSilentDrops, Yn as LocalMigrateError, Yt as escapeRegExp, Z as CloudControlProvider, Zt as AssetModeResolver, _ as IMPLICIT_DELETE_DEPENDENCIES, _n as resolveApp, _t as STATE_SOURCED_CROSS_GENERATION_RULES, a as DeploymentEventsStore, an as buildDenyExternalAccessPolicy, ar as StackTerminationProtectionError, at as WAFv2WebACLProvider, b as PRE_DELETE_SNAPSHOT_TYPES, bn as resolveSkipPrefix, bt as createSecretMasker, c as producerRegionsFromState, cn as getDockerCmd, ct as assertRegionMatch, d as updatePartialMessage, dn as AssetManifestLoader, dr as withErrorHandling, dt as configStringRefusal, en as getBootstrapMarkerKey, er as PartialFailureError, et as isTerminationProtectionPropagationError, f as updatePartialReason, fn as getDockerImageBySourceHash, fr as isMarkedNonRetryable, ft as readConfigString, g as maskingRetryLogger, gn as getLegacyStateBucketName, gt as requireConfigString, h as withResourceDeadline, hn as getDefaultStateBucketName, hr as markNonRetryable, ht as requireConfigObject, i as DeploymentEventsReader, in as validateContainerRepoName, ir as StackHasActiveImportsError, it as refStateLookupFromResource, j as renderStatefulReason, jn as expectedOwnerParam, jt as applyRoleArnIfSet, k as MULTI_REGION_RECREATE_BLOCKED_TYPES, kn as findLargeInlineResources, kt as s3BucketRegionalDomainName, l as replayFailedOperations, ln as runDockerForeground, lt as coerceCfnBoolean, m as deleteSkipReason, mn as synthesisStatusMessage, mr as isThrottlingError, mt as requireConfigArray, n as DEFAULT_RESOURCE_WARN_AFTER_MS, nn as readBootstrapMarkerBody, nr as ResourceTimeoutError, nt as cfnRefValueFromPhysicalId, o as planFailedOps, on as buildDockerImage, ot as normalizeAwsTagsToCfn, p as UNSPECIFIED_SKIP_REASON, pn as Synthesizer, pr as isRetryableTransientError, pt as replayWarn, q as clearOnUpdateRemoval, qn as DeployCancelledError, qt as loadPublishableAssetManifest, r as DeployEngine, rn as validateAssetBucketName, rr as ResourceUpdateNotSupportedError, rt as getAccountInfo, s as planRollback, sn as formatDockerLoginError, st as resolveExplicitPhysicalId, t as DEFAULT_RESOURCE_TIMEOUT_MS, tn as parseBootstrapMarker, tr as ProvisioningError, tt as IntrinsicFunctionResolver, u as replayRollback, un as runDockerStreaming, ur as normalizeAwsError, ut as configBooleanRefusal, v as computeImplicitDeleteEdges, vn as resolveAutoAssetStorage, vt as STATE_SOURCED_READBACK_RULES, w as isFinalSnapshotError, wn as stateBucketExistenceConfirmed, wt as redactSecretsForState, x as buildFinalSnapshotIdentifier, xn as resolveStateBucketWithDefault, xt as dynamicReferenceTokens, y as ATOMIC_FINAL_SNAPSHOT_TYPES, yn as resolveCaptureObservedState, yt as TEMPLATE_SOURCED_RULES, z as collectDeclaredOutputNames, zn as AwsClients, zt as S3StateBackend } from "./deploy-engine-BJQbni1s.js";
|
|
3
3
|
import { a as getLiveRenderer, c as PATTERN_B_RESOURCE_TYPES, d as generateResourceNameWithFallback, f as getCurrentStackName, h as withStackName, i as runStackBuffered, m as withSkipPrefix, n as getLogger, o as PATTERN_B_NAME_OPTIONS, s as PATTERN_B_NAME_PROPERTIES, u as generateResourceName } from "./logger-zRrlbaQt.js";
|
|
4
|
-
import { t as ASGProvider } from "./asg-provider-
|
|
4
|
+
import { t as ASGProvider } from "./asg-provider-Bh0odlSk.js";
|
|
5
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
6
6
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
7
7
|
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, 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";
|
|
@@ -17,7 +17,7 @@ import { APIGatewayClient, CreateAuthorizerCommand, CreateDeploymentCommand, Cre
|
|
|
17
17
|
import { CreateEventBusCommand, DeleteEventBusCommand, DeleteRuleCommand, DescribeEventBusCommand, DescribeRuleCommand, EventBridgeClient, ListRulesCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$1, ListTargetsByRuleCommand, PutRuleCommand, PutTargetsCommand, RemoveTargetsCommand, ResourceNotFoundException as ResourceNotFoundException$2, TagResourceCommand as TagResourceCommand$4, UntagResourceCommand as UntagResourceCommand$4, UpdateEventBusCommand } from "@aws-sdk/client-eventbridge";
|
|
18
18
|
import { CreateSecretCommand, DeleteSecretCommand, DescribeSecretCommand, GetSecretValueCommand, RemoveRegionsFromReplicationCommand, ReplicateSecretToRegionsCommand, ResourceNotFoundException as ResourceNotFoundException$3, SecretsManagerClient, TagResourceCommand as TagResourceCommand$5, UntagResourceCommand as UntagResourceCommand$5, UpdateSecretCommand } from "@aws-sdk/client-secrets-manager";
|
|
19
19
|
import { AddTagsToResourceCommand, DeleteParameterCommand, DescribeParametersCommand, GetParameterCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$2, ParameterNotFound, PutParameterCommand, RemoveTagsFromResourceCommand, SSMClient } from "@aws-sdk/client-ssm";
|
|
20
|
-
import { CloudFrontClient, CreateCloudFrontOriginAccessIdentityCommand, CreateDistributionCommand, CreateDistributionWithTagsCommand, CreateOriginAccessControlCommand, DeleteCloudFrontOriginAccessIdentityCommand, DeleteDistributionCommand, DeleteOriginAccessControlCommand, GetCloudFrontOriginAccessIdentityCommand, GetDistributionCommand, GetDistributionConfigCommand, GetOriginAccessControlCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$3, NoSuchCloudFrontOriginAccessIdentity, NoSuchDistribution, NoSuchOriginAccessControl, TagResourceCommand as TagResourceCommand$6, UntagResourceCommand as UntagResourceCommand$6, UpdateCloudFrontOriginAccessIdentityCommand, UpdateDistributionCommand, UpdateOriginAccessControlCommand } from "@aws-sdk/client-cloudfront";
|
|
20
|
+
import { CloudFrontClient, CreateCloudFrontOriginAccessIdentityCommand, CreateDistributionCommand, CreateDistributionWithTagsCommand, CreateOriginAccessControlCommand, DeleteCloudFrontOriginAccessIdentityCommand, DeleteDistributionCommand, DeleteOriginAccessControlCommand, DistributionAlreadyExists, GetCloudFrontOriginAccessIdentityCommand, GetDistributionCommand, GetDistributionConfigCommand, GetOriginAccessControlCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$3, NoSuchCloudFrontOriginAccessIdentity, NoSuchDistribution, NoSuchOriginAccessControl, TagResourceCommand as TagResourceCommand$6, UntagResourceCommand as UntagResourceCommand$6, UpdateCloudFrontOriginAccessIdentityCommand, UpdateDistributionCommand, UpdateOriginAccessControlCommand } from "@aws-sdk/client-cloudfront";
|
|
21
21
|
import { CloudWatchClient, DeleteAlarmsCommand, DeleteAnomalyDetectorCommand, DescribeAlarmsCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$4, PutAnomalyDetectorCommand, PutMetricAlarmCommand, ResourceNotFoundException as ResourceNotFoundException$4, TagResourceCommand as TagResourceCommand$7, UntagResourceCommand as UntagResourceCommand$7 } from "@aws-sdk/client-cloudwatch";
|
|
22
22
|
import { AssociateKmsKeyCommand, CloudWatchLogsClient, CreateLogGroupCommand, DeleteDataProtectionPolicyCommand, DeleteIndexPolicyCommand, DeleteLogGroupCommand, DeleteRetentionPolicyCommand, DescribeIndexPoliciesCommand, DescribeLogGroupsCommand, DisassociateKmsKeyCommand, GetDataProtectionPolicyCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$5, PutBearerTokenAuthenticationCommand, PutDataProtectionPolicyCommand, PutIndexPolicyCommand, PutLogGroupDeletionProtectionCommand, PutRetentionPolicyCommand, ResourceAlreadyExistsException, ResourceNotFoundException as ResourceNotFoundException$5, TagResourceCommand as TagResourceCommand$8, UntagResourceCommand as UntagResourceCommand$8 } from "@aws-sdk/client-cloudwatch-logs";
|
|
23
23
|
import { BedrockAgentCoreControlClient, CreateAgentRuntimeCommand, CreateEvaluatorCommand, DeleteAgentRuntimeCommand, DeleteEvaluatorCommand, GetAgentRuntimeCommand, GetBrowserCommand, GetCodeInterpreterCommand, GetEvaluatorCommand, ListTagsForResourceCommand as ListTagsForResourceCommand$6, ResourceNotFoundException as ResourceNotFoundException$6, TagResourceCommand as TagResourceCommand$9, UntagResourceCommand as UntagResourceCommand$9, UpdateAgentRuntimeCommand, UpdateEvaluatorCommand } from "@aws-sdk/client-bedrock-agentcore-control";
|
|
@@ -10863,6 +10863,23 @@ function mapDeliveryStatusLogging(attrs, stateCaseMap = /* @__PURE__ */ new Map(
|
|
|
10863
10863
|
//#endregion
|
|
10864
10864
|
//#region src/provisioning/providers/sns-subscription-provider.ts
|
|
10865
10865
|
/**
|
|
10866
|
+
* The "old subscription was not deleted" reason the THROWN-delete arm of
|
|
10867
|
+
* `update()` reports (issue
|
|
10868
|
+
* [#1967](https://github.com/go-to-k/cdkd/issues/1967)).
|
|
10869
|
+
*
|
|
10870
|
+
* A constant, and FIXED WORDING with no interpolation, for the reason the
|
|
10871
|
+
* abort block spells out at length: this string is rendered onto the warn line
|
|
10872
|
+
* beside a message that must stay clear of the substrings
|
|
10873
|
+
* `retryable-errors.ts` classifies on, and the underlying AWS error text — an
|
|
10874
|
+
* `Unsubscribe` throttle, a `does not exist` — is user-uncontrolled and
|
|
10875
|
+
* carries several of them. The AWS message goes out on its own warn line in
|
|
10876
|
+
* the `catch`, where nothing classifies it.
|
|
10877
|
+
*
|
|
10878
|
+
* Its skip-arm twin is the provider-supplied `ResourceDeleteResult.reason`,
|
|
10879
|
+
* which is subject to the same rule at its own producer.
|
|
10880
|
+
*/
|
|
10881
|
+
const SNS_SUBSCRIPTION_DELETE_THREW_REASON = "the Unsubscribe call did not complete, so the old subscription is unproven";
|
|
10882
|
+
/**
|
|
10866
10883
|
* AWS SNS Subscription Provider
|
|
10867
10884
|
*
|
|
10868
10885
|
* Implements resource provisioning for AWS::SNS::Subscription using the SNS SDK.
|
|
@@ -10941,14 +10958,17 @@ var SNSSubscriptionProvider = class {
|
|
|
10941
10958
|
async update(logicalId, physicalId, resourceType, properties, _previousProperties) {
|
|
10942
10959
|
this.logger.debug(`Updating SNS subscription ${logicalId}: ${physicalId}`);
|
|
10943
10960
|
let deleteResult = void 0;
|
|
10961
|
+
let deleteThrew = false;
|
|
10944
10962
|
try {
|
|
10945
10963
|
deleteResult = await this.delete(logicalId, physicalId, resourceType);
|
|
10946
10964
|
} catch (error) {
|
|
10965
|
+
deleteThrew = true;
|
|
10947
10966
|
this.logger.warn(`Failed to delete old subscription ${physicalId} during update: ${String(error)}`);
|
|
10948
10967
|
}
|
|
10949
|
-
|
|
10950
|
-
|
|
10951
|
-
|
|
10968
|
+
const notDeletedReason = deleteThrew ? SNS_SUBSCRIPTION_DELETE_THREW_REASON : deleteResult?.outcome === "skipped" ? deleteResult.reason : void 0;
|
|
10969
|
+
if (notDeletedReason !== void 0) {
|
|
10970
|
+
this.logger.warn(`Cannot replace SNS subscription ${logicalId}: the old subscription ${physicalId} was not deleted — ${notDeletedReason}`);
|
|
10971
|
+
throw markNonRetryable(new ProvisioningError(`Cannot replace SNS subscription ${logicalId}: cdkd could not delete the old subscription, and creating the replacement would leave both subscribed to the topic and deliver every message twice. See the warning naming ${logicalId} for the recorded physical id and the cause. Usually the Unsubscribe itself failed (a throttle, a denied sns:Unsubscribe) and the state record is FINE — clear that cause and re-run, or remove the old subscription in AWS by hand. Repair the state record only when the warning says the recorded physical id is malformed, which is the latent skip arm rather than this one.`, resourceType, logicalId, physicalId));
|
|
10952
10972
|
}
|
|
10953
10973
|
const createResult = await this.create(logicalId, resourceType, properties);
|
|
10954
10974
|
return {
|
|
@@ -30751,13 +30771,19 @@ var CloudFrontDistributionProvider = class {
|
|
|
30751
30771
|
/**
|
|
30752
30772
|
* Create a CloudFront Distribution
|
|
30753
30773
|
*/
|
|
30754
|
-
async create(logicalId, resourceType, properties) {
|
|
30774
|
+
async create(logicalId, resourceType, properties, context) {
|
|
30755
30775
|
this.logger.debug(`Creating CloudFront Distribution ${logicalId}`);
|
|
30776
|
+
const maskSecrets = context?.maskSecrets ?? ((text) => text);
|
|
30777
|
+
const callerReferenceToken = acquireIdempotencyToken({
|
|
30778
|
+
scope: "CreateDistribution",
|
|
30779
|
+
logicalId,
|
|
30780
|
+
maxLength: 128
|
|
30781
|
+
});
|
|
30756
30782
|
try {
|
|
30757
30783
|
const distributionConfig = properties["DistributionConfig"] ?? {};
|
|
30758
30784
|
const sdkConfig = this.convertToSdkFormat({
|
|
30759
30785
|
...distributionConfig,
|
|
30760
|
-
CallerReference:
|
|
30786
|
+
CallerReference: callerReferenceToken.value
|
|
30761
30787
|
});
|
|
30762
30788
|
const sdkTags = this.toSdkTags(properties["Tags"]);
|
|
30763
30789
|
const distribution = (sdkTags ? await this.cloudFrontClient.send(new CreateDistributionWithTagsCommand({ DistributionConfigWithTags: {
|
|
@@ -30768,6 +30794,7 @@ var CloudFrontDistributionProvider = class {
|
|
|
30768
30794
|
const domainName = distribution.DomainName;
|
|
30769
30795
|
this.logger.debug(`Created CloudFront Distribution: ${distributionId} (${domainName})`);
|
|
30770
30796
|
await this.settleDistribution(logicalId, distributionId);
|
|
30797
|
+
callerReferenceToken.release();
|
|
30771
30798
|
return {
|
|
30772
30799
|
physicalId: distributionId,
|
|
30773
30800
|
attributes: {
|
|
@@ -30777,11 +30804,51 @@ var CloudFrontDistributionProvider = class {
|
|
|
30777
30804
|
}
|
|
30778
30805
|
};
|
|
30779
30806
|
} catch (error) {
|
|
30807
|
+
if (error instanceof DistributionAlreadyExists || error?.name === "DistributionAlreadyExists") {
|
|
30808
|
+
const cause = error instanceof Error ? error : void 0;
|
|
30809
|
+
throw markNonRetryable(new ProvisioningError(maskSecrets(`Failed to create CloudFront Distribution ${logicalId}: CloudFront refused the create because this deploy's CallerReference had been used before, which means an EARLIER attempt of this same create succeeded and cdkd never received its response. That distribution is LIVE, is not in cdkd state, and 'cdkd destroy' will not remove it — it bills until you delete it by hand. CloudFront does not return CallerReference from ListDistributions, so find it with 'aws cloudfront list-distributions' and match on ${this.orphanSearchHint(properties, maskSecrets)}; then disable and delete it (or import it with 'cdkd import') before re-running. The AWS error is on this error's cause.`), resourceType, logicalId, void 0, cause));
|
|
30810
|
+
}
|
|
30780
30811
|
const cause = error instanceof Error ? error : void 0;
|
|
30781
30812
|
throw new ProvisioningError(`Failed to create CloudFront Distribution ${logicalId}: ${error instanceof Error ? error.message : String(error)}`, resourceType, logicalId, void 0, cause);
|
|
30782
30813
|
}
|
|
30783
30814
|
}
|
|
30784
30815
|
/**
|
|
30816
|
+
* The identifying fields of the distribution that WOULD have been created,
|
|
30817
|
+
* for the `DistributionAlreadyExists` orphan message (issue #2079).
|
|
30818
|
+
*
|
|
30819
|
+
* Only fields `ListDistributions` actually returns are worth naming — the
|
|
30820
|
+
* user has to match the orphan in that output by eye. `Origins[].DomainName`
|
|
30821
|
+
* and `Comment` are both on `DistributionSummary`; `CallerReference` is not,
|
|
30822
|
+
* which is the whole reason this message exists.
|
|
30823
|
+
*
|
|
30824
|
+
* Read from the RAW template properties rather than the converted SDK config
|
|
30825
|
+
* so the helper stays usable from the catch, which is outside the scope
|
|
30826
|
+
* where `sdkConfig` exists. Both the bare-array (CFn) and `{ Quantity,
|
|
30827
|
+
* Items }` (SDK) spellings of `Origins` are accepted because a template may
|
|
30828
|
+
* carry either.
|
|
30829
|
+
*
|
|
30830
|
+
* **Every value it returns is a RESOLVED template value, so each is masked
|
|
30831
|
+
* HERE, at the leaf** (issue #1932 item 3, the shape
|
|
30832
|
+
* `apigatewayv2-provider.ts`'s `toSdkResponseParameters` established). Two
|
|
30833
|
+
* reasons the caller's outer mask cannot stand alone, both from
|
|
30834
|
+
* `.claude/rules/providers.md`: `maskSecretsInText`'s SUBSTRING arm ignores a
|
|
30835
|
+
* needle shorter than `MIN_NEEDLE_LENGTH` (4), and `JSON.stringify` escapes
|
|
30836
|
+
* quotes — so a Secrets Manager JSON document no longer OCCURS literally in
|
|
30837
|
+
* the finished sentence. Masking the raw string first reaches the
|
|
30838
|
+
* WHOLE-VALUE arm at any length, and the mask is idempotent, so both layers
|
|
30839
|
+
* are free.
|
|
30840
|
+
*/
|
|
30841
|
+
orphanSearchHint(properties, maskSecrets) {
|
|
30842
|
+
const config = properties["DistributionConfig"] ?? {};
|
|
30843
|
+
const origins = config["Origins"];
|
|
30844
|
+
const domains = (Array.isArray(origins) ? origins : Array.isArray(origins?.Items) ? origins.Items ?? [] : []).map((origin) => origin?.DomainName).filter((domain) => typeof domain === "string" && domain !== "").map((domain) => maskSecrets(domain));
|
|
30845
|
+
const comment = typeof config["Comment"] === "string" ? maskSecrets(config["Comment"]) : "";
|
|
30846
|
+
const parts = [];
|
|
30847
|
+
if (domains.length > 0) parts.push(`origin domain ${domains.join(" / ")}`);
|
|
30848
|
+
if (comment !== "") parts.push(`comment ${JSON.stringify(comment)}`);
|
|
30849
|
+
return parts.length > 0 ? parts.join(" and ") : "its creation time (the orphan is the newest distribution in this account)";
|
|
30850
|
+
}
|
|
30851
|
+
/**
|
|
30785
30852
|
* Update a CloudFront Distribution
|
|
30786
30853
|
*
|
|
30787
30854
|
* `UpdateDistribution` is a read-modify-write API that expects the COMPLETE
|
|
@@ -30938,11 +31005,14 @@ var CloudFrontDistributionProvider = class {
|
|
|
30938
31005
|
* false positive every run (mirrors the Lambda `Code.S3*` precedent).
|
|
30939
31006
|
*
|
|
30940
31007
|
* - `DistributionConfig.CallerReference`: a create-time idempotency
|
|
30941
|
-
* token. cdkd generates it internally (
|
|
30942
|
-
*
|
|
30943
|
-
* it
|
|
30944
|
-
*
|
|
30945
|
-
*
|
|
31008
|
+
* token. cdkd generates it internally (`acquireIdempotencyToken`, issue
|
|
31009
|
+
* #2079 — a per-process digest, `cdkd-<sha256 prefix>`); AWS echoes it
|
|
31010
|
+
* back, but it is never templated by CDK, so comparing it would diff
|
|
31011
|
+
* cdkd's generated value on every run. It is not even stable across
|
|
31012
|
+
* cdkd RUNS by design (a process nonce is mixed in), so suppression is
|
|
31013
|
+
* required rather than merely convenient. `convertToCfnFormat` already
|
|
31014
|
+
* drops it from the AWS side; declaring it here also excludes it from
|
|
31015
|
+
* the observed-baseline side.
|
|
30946
31016
|
* - `DistributionConfig.Logging.Bucket`: CloudFront normalizes the S3
|
|
30947
31017
|
* logging bucket to its `<bucket>.s3.amazonaws.com` regional domain on
|
|
30948
31018
|
* read, which never matches the bare bucket domain a template may
|
|
@@ -70553,7 +70623,8 @@ async function rollbackCommand(stackArg, options) {
|
|
|
70553
70623
|
logger: logger.child("rollback"),
|
|
70554
70624
|
recordEvent: (e) => eventRecorder.record(e),
|
|
70555
70625
|
finalSnapshotClients,
|
|
70556
|
-
skipFinalSnapshot: options.skipFinalSnapshot === true
|
|
70626
|
+
skipFinalSnapshot: options.skipFinalSnapshot === true,
|
|
70627
|
+
importedProducerRegions: producerRegionsFromState(baseState)
|
|
70557
70628
|
};
|
|
70558
70629
|
let currentEtag = stateData.etag;
|
|
70559
70630
|
const saveState = async () => {
|
|
@@ -83843,7 +83914,7 @@ function createMigrateCommand() {
|
|
|
83843
83914
|
*/
|
|
83844
83915
|
function buildProgram() {
|
|
83845
83916
|
const program = new Command();
|
|
83846
|
-
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.284.
|
|
83917
|
+
program.name("cdkd").description("CDK Direct - Deploy AWS CDK apps directly via SDK/Cloud Control API").version("0.284.24");
|
|
83847
83918
|
program.hook("preAction", (_thisCommand, actionCommand) => {
|
|
83848
83919
|
const { profile } = actionCommand.optsWithGlobals();
|
|
83849
83920
|
if (profile !== void 0) process.env["AWS_PROFILE"] = profile;
|