@go-to-k/cdkd 0.296.22 → 0.296.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-BYk2trWp.js → asg-provider-DCYx2kox.js} +2 -2
- package/dist/{asg-provider-BYk2trWp.js.map → asg-provider-DCYx2kox.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-BueFQdfN.js → deploy-engine-4vPufRQF.js} +360 -24
- package/dist/deploy-engine-4vPufRQF.js.map +1 -0
- package/dist/{iam-role-provider-CGY8o8Pv.js → iam-role-provider-BLGnRHsx.js} +2 -2
- package/dist/{iam-role-provider-CGY8o8Pv.js.map → iam-role-provider-BLGnRHsx.js.map} +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{neptune-provider-7hDILb3t.js → neptune-provider-DjuYQyyG.js} +2 -2
- package/dist/{neptune-provider-7hDILb3t.js.map → neptune-provider-DjuYQyyG.js.map} +1 -1
- package/dist/{program-B6NoMGdN.js → program--_T76pFz.js} +10 -4
- package/dist/program--_T76pFz.js.map +1 -0
- package/dist/{provider-classes-SKdRlxGS.js → provider-classes-BcUBpRO1.js} +7 -7
- package/dist/{provider-classes-SKdRlxGS.js.map → provider-classes-BcUBpRO1.js.map} +1 -1
- package/dist/{rds-provider-Cc9l4-JW.js → rds-provider-L9YFKmdl.js} +2 -2
- package/dist/{rds-provider-Cc9l4-JW.js.map → rds-provider-L9YFKmdl.js.map} +1 -1
- package/dist/{version-COXjPf3D.js → version-3oP5vNZF.js} +2 -2
- package/dist/{version-COXjPf3D.js.map → version-3oP5vNZF.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-BueFQdfN.js.map +0 -1
- package/dist/program-B6NoMGdN.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { r as getAwsClients, s as __exportAll } from "./aws-clients-CnmtbrxD.js"
|
|
|
2
2
|
import { A as UNRENDERABLE, C as looksLikeCdkdGeneratedName, E as withoutGeneratedFallbackName, F as displayStackName, I as isPasteableIdent, M as displayAwsMessage, N as displayIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displaySafe, R as plainIdentOr, S as getCurrentStackName, T as withStackName, V as truncateCodePoints, a as getLogger, b as generateResourceNameWithFallback, d as installLogLineMaskerSource, f as getLiveRenderer, g as applyDefaultNameForFallback, k as STACK_REF_MAX_CODE_POINTS, o as isStdoutReservedForPayload, r as safeStringify$1, t as describeAwsFailure, u as currentLogLineMasker, v as explicitNamePropertyFor, w as withSkipPrefix, x as getCurrentSkipPrefix, y as generateResourceName, z as safeMsg } from "./aws-failure-text-BaWeCWRz.js";
|
|
3
3
|
import { $ as protectedReplacementAdvice, $n as isIamPropagationError, $t as AccountIdUnavailableError, A as isQuotableImportValue, An as commandHole, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bt as sanitizeRecoveryValue, Ct as RETRY_AUXILIARY_OWNER, Dn as SHELL_ACTIVE, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as plainOrDescribed, G as runDeleteAttempt, Gn as isNameCooldownError, H as observeThenDisableProtection, Hn as isUpdateUnsupportedError, Ht as DEFAULT_STATE_PREFIX, In as quotedOrDescribed, J as DELETION_PROTECTION_DOC_POINTER, Jt as withPasteableAwsProfile, Kn as isRecreateRetryableError, Kt as producerRecordKey, L as ProtectionFlipRegistry, Ln as shellBoundedDisplay, Lt as formatLockExpiry, M as quotedRemedyLogicalId, Mn as isInertUnquoted, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as pasteableCommand, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, On as SHELL_ACTIVE_WHY, Ot as hasCreatedBeforeFailure, Pn as physicalIdShownBesideCommand, Pt as buildForceUnlockCommand, Q as pasteableAwsCommand, Qn as isAmbiguousOutcomeError, Qt as credentialFingerprint, R as compensateProtectionFlip, Rn as shellQuote, Rt as formatLockOperation, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, U as protectionFlipKey, Un as hasReplayMayCollide, Ut as injectiveKey, Vt as CUSTOM_RESOURCE_RESPONSE_PREFIX, Wn as isNameCollisionErrorFrom, Xn as formatRetryClassificationSignals, Xt as ambientCredentialConfig, Yn as markReplayMayCollide, Yt as ambientClientDefaults, Zn as isAmbiguousCcHandlerErrorCode, Zt as clientDefaultsFor, _n as ResourceUpdateNotSupportedError, _t as createMaskedLogSinks, ar as isThrottlingError, at as startInterruptWatch, bn as StateError, bt as maskDeep, cr as wrapMaskedAwsError, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as MacroExpansionError, en as AssetError, er as isRetryableTransientError, f as removalWarning, fn as MalformedProducerRecordRefusalError, ft as logicalIdShown, gn as ResourceTimeoutError, gt as stateOrphanRecordRemedy, hn as ProvisioningError, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as DependencyError, ir as isMarkedNonRetryable, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jt as markAuxiliaryFailure, kn as UNSHOWABLE_VALUE, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, m as withoutInjectedRemovals, mt as resourceTypeShown, nr as retryClassificationText, on as DynamicReferenceRegionAmbiguousError, or as markNonRetryable, ot as ElapsedBudgetRegistry, qn as isReplayedNameCollisionFrom, rn as CrossAccountSecretRefusalError, sn as IntrinsicResolutionRefusalError, sr as markRedactedCause, st as monotonicNowMs, tn as CdkdError, tr as isTransientServerError, un as LockError, ut as compositeIdSeparatorRefusal, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wn as normalizeAwsError, wt as carryCreatedBeforeFailure, xn as SynthesisError, xt as maskerOrIdentity, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as withheldTargetClause, zt as formatLockOwner } from "./iam-policy-targets-BoZuWtxK.js";
|
|
4
4
|
import { a as setAssumedRoleCredentials, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, s as ambientRegion, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-D0q0z4dG.js";
|
|
5
|
-
import { t as getCdkdVersion } from "./version-
|
|
5
|
+
import { t as getCdkdVersion } from "./version-3oP5vNZF.js";
|
|
6
6
|
import { createHash, randomUUID } from "node:crypto";
|
|
7
7
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
8
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -16721,7 +16721,7 @@ function isPlainObject$2(value) {
|
|
|
16721
16721
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
16722
16722
|
}
|
|
16723
16723
|
const DYNAMIC_REFERENCE_OPEN = "{{resolve:";
|
|
16724
|
-
const NESTED_STACK_TYPE$
|
|
16724
|
+
const NESTED_STACK_TYPE$4 = "AWS::CloudFormation::Stack";
|
|
16725
16725
|
const NESTED_OUTPUT_PREFIX = "Outputs.";
|
|
16726
16726
|
function carriesSecretValue(value, corpora) {
|
|
16727
16727
|
if (carriesSecretMask(value)) return true;
|
|
@@ -16796,7 +16796,7 @@ function intrinsicKey(value) {
|
|
|
16796
16796
|
const key = keys[0];
|
|
16797
16797
|
return key === "Ref" || key.startsWith("Fn::") ? key : void 0;
|
|
16798
16798
|
}
|
|
16799
|
-
const OPAQUE_ATTRIBUTE_TYPES = /* @__PURE__ */ new Set(["AWS::CloudFormation::CustomResource", NESTED_STACK_TYPE$
|
|
16799
|
+
const OPAQUE_ATTRIBUTE_TYPES = /* @__PURE__ */ new Set(["AWS::CloudFormation::CustomResource", NESTED_STACK_TYPE$4]);
|
|
16800
16800
|
function hasOpaqueAttributes(logicalId, walk) {
|
|
16801
16801
|
const definition = walk.resources[logicalId];
|
|
16802
16802
|
const type = isPlainObject$2(definition) ? definition["Type"] : void 0;
|
|
@@ -17153,7 +17153,7 @@ function passedKey(passed) {
|
|
|
17153
17153
|
function isNestedStackRow(logicalId, walk) {
|
|
17154
17154
|
if (!Object.hasOwn(walk.resources, logicalId)) return false;
|
|
17155
17155
|
const definition = walk.resources[logicalId];
|
|
17156
|
-
return isPlainObject$2(definition) && definition["Type"] === NESTED_STACK_TYPE$
|
|
17156
|
+
return isPlainObject$2(definition) && definition["Type"] === NESTED_STACK_TYPE$4;
|
|
17157
17157
|
}
|
|
17158
17158
|
function getAttAttribute(operand, target) {
|
|
17159
17159
|
if (Array.isArray(operand)) return operand.length === 2 && typeof operand[1] === "string" ? operand[1] : void 0;
|
|
@@ -22952,7 +22952,7 @@ var CloudControlProvider = class {
|
|
|
22952
22952
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
22953
22953
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
22954
22954
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
22955
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
22955
|
+
const { ASGProvider } = await import("./asg-provider-DCYx2kox.js");
|
|
22956
22956
|
const delegateRegion = ambientRegion();
|
|
22957
22957
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
22958
22958
|
if (asgProvider === void 0) {
|
|
@@ -23058,7 +23058,7 @@ var CloudControlProvider = class {
|
|
|
23058
23058
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
23059
23059
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
23060
23060
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
23061
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
23061
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-L9YFKmdl.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-DjuYQyyG.js"))).NeptuneProvider({ region: ccRegion });
|
|
23062
23062
|
this.sdkDeleteDelegates.set(family, {
|
|
23063
23063
|
region: ccRegion,
|
|
23064
23064
|
provider
|
|
@@ -24259,7 +24259,7 @@ const CR_NO_SERVICE_TOKEN_SKIP_REASON = "no ServiceToken in state — Delete han
|
|
|
24259
24259
|
const CR_MASKED_SERVICE_TOKEN_SKIP_REASON = "masked ServiceToken in state — Delete handler not invoked";
|
|
24260
24260
|
const CR_NOECHO_PROPERTIES_SKIP_REASON = "NoEcho mask in recorded properties — Delete handler not invoked";
|
|
24261
24261
|
const CR_MASKED_PROPERTIES_SKIP_REASON = "redaction mask in properties — Delete handler not invoked";
|
|
24262
|
-
const NOECHO_RERESOLUTION_BOUND = "cdkd re-resolves such a coordinate only where it holds the template ('cdkd destroy' with the app), and only while today's template reads a NoEcho parameter there with the property's text and inputs unchanged; an attribute a producer declared NoEcho has no template value to re-resolve.";
|
|
24262
|
+
const NOECHO_RERESOLUTION_BOUND = "cdkd re-resolves such a coordinate only where it holds the template ('cdkd destroy' with the app, or 'cdkd deploy --recreate-via-cc-api' naming this resource), and only while today's template reads a NoEcho parameter there with the property's text and inputs unchanged; an attribute a producer declared NoEcho has no template value to re-resolve.";
|
|
24263
24263
|
function noEchoPropertiesRemedy(context, logicalId) {
|
|
24264
24264
|
return context?.stackDestroy === true ? `cdkd is KEEPING the state record and the run exits non-zero, and every re-run skips it again. Tear down what the handler manages by hand, then drop the record with ${stateOrphanRecordRemedy(context, logicalId)}.` : "This delete is not part of a stack destroy (a 'cdkd deploy' template removal, replacement or rollback, or a 'cdkd rollback'). For a resource removed from the template the record is KEPT and every 'cdkd deploy' skips it again: tear down what the handler manages by hand. " + crDeploySkipTail(logicalId);
|
|
24265
24265
|
}
|
|
@@ -28242,7 +28242,10 @@ function handleOutputResolutionFailure(error, outputKey, outputs, secrets, inher
|
|
|
28242
28242
|
async function resolveOutputs(template, resources, stackName, digestSource, parameterValues, conditions) {
|
|
28243
28243
|
this.resolvedExportNames = [];
|
|
28244
28244
|
this.carriedExportAliasRefusal = void 0;
|
|
28245
|
-
if (!template.Outputs)
|
|
28245
|
+
if (!template.Outputs) {
|
|
28246
|
+
this.carriedExportAliasRefusal = seedOnlyAliasRefusal(noEchoParameterValueSeed(template.Parameters, parameterValues, this.options.inheritedSecrets, this.options.parameters));
|
|
28247
|
+
return {};
|
|
28248
|
+
}
|
|
28246
28249
|
const outputs = Object.create(null);
|
|
28247
28250
|
const context = this.buildResolverContext({
|
|
28248
28251
|
template,
|
|
@@ -28350,6 +28353,13 @@ function buildDisplayOutputs(template, resolvedOutputs) {
|
|
|
28350
28353
|
}
|
|
28351
28354
|
return display;
|
|
28352
28355
|
}
|
|
28356
|
+
function seedOnlyAliasRefusal(seed) {
|
|
28357
|
+
return (outputKey, exportName) => {
|
|
28358
|
+
const verdict = carriedExportAliasExposure(exportName, /* @__PURE__ */ new Map(), seed);
|
|
28359
|
+
if (verdict === void 0) return void 0;
|
|
28360
|
+
return secretBearingExportNameWarning(outputKey, exportName, verdict.exposure, EMPTY_SECRETS, verdict.noEchoOnly);
|
|
28361
|
+
};
|
|
28362
|
+
}
|
|
28353
28363
|
|
|
28354
28364
|
//#endregion
|
|
28355
28365
|
//#region src/types/deployment-events.ts
|
|
@@ -30198,6 +30208,171 @@ function sortRollbackCreates(createOps, stateResources, logger) {
|
|
|
30198
30208
|
return sorted;
|
|
30199
30209
|
}
|
|
30200
30210
|
|
|
30211
|
+
//#endregion
|
|
30212
|
+
//#region src/deployment/rollback-executor/replay-noecho.ts
|
|
30213
|
+
const NOECHO_REPLAY_READBACK_TIMEOUT_MS = 3e4;
|
|
30214
|
+
const NESTED_STACK_TYPE$3 = "AWS::CloudFormation::Stack";
|
|
30215
|
+
function coordinatePath(coordinate) {
|
|
30216
|
+
let path = "";
|
|
30217
|
+
for (const segment of coordinate) path += typeof segment === "number" ? `[${segment}]` : path === "" ? segment : `.${segment}`;
|
|
30218
|
+
return path;
|
|
30219
|
+
}
|
|
30220
|
+
function shownPaths(coordinates) {
|
|
30221
|
+
return coordinates.map((coordinate) => plainOrDescribed(coordinatePath(coordinate), "property path")).join(", ");
|
|
30222
|
+
}
|
|
30223
|
+
function unreadableNoEchoLeafRefusal(logicalId, coordinates, failure) {
|
|
30224
|
+
const why = failure === "read-failed" ? "reading the resource back from AWS failed, so cdkd could not learn the value AWS holds there (re-running the rollback retries the read)" : "cdkd cannot read the value AWS holds there (the property is write-only, AWS does not return it, or cdkd has no readback for this resource type)";
|
|
30225
|
+
return markNonRetryable(new CdkdError(`Cannot roll ${shownLogicalId(logicalId)} back: its recorded baseline holds a NoEcho value only as the redaction mask ('${"***"}') at ${shownPaths(coordinates)}, and ${why}. cdkd sent nothing rather than write the mask to the live resource. Restore the property with 'cdkd deploy', which sends the NoEcho parameter's value again (a NoEcho attribute of a custom resource is sent again only when that custom resource updates in the same deploy).`, "ROLLBACK_REDACTED_BASELINE"));
|
|
30226
|
+
}
|
|
30227
|
+
function refuseMarkedNoEchoRecreate(props, marked, logicalId) {
|
|
30228
|
+
if (props === void 0 || marked === void 0 || marked.length === 0) return;
|
|
30229
|
+
const masked = maskedLeafCoordinatesOf(props);
|
|
30230
|
+
if (masked.length === 0 || !masksOnlyAt(props, marked)) return;
|
|
30231
|
+
const shown = marked.filter((outer) => masked.some((inner) => isMarkedCoordinate(inner, [outer])));
|
|
30232
|
+
throw new CdkdError(`Cannot re-create ${shownLogicalId(logicalId)} while reversing its replacement: its recorded baseline holds a NoEcho value only as the redaction mask ('${"***"}') at ${shownPaths(shown)}, and there is no live resource to read that value back from, so cdkd sent nothing rather than create the resource with the mask. Restore the stack with 'cdkd deploy', which sends the NoEcho parameter's value again.`, "ROLLBACK_REDACTED_BASELINE");
|
|
30233
|
+
}
|
|
30234
|
+
function masksOnlyAt(props, marked) {
|
|
30235
|
+
return maskedLeafCoordinatesOf(props).every((c) => isMarkedCoordinate(c, marked));
|
|
30236
|
+
}
|
|
30237
|
+
function holdsPlaceholder(value) {
|
|
30238
|
+
if (typeof value === "string") return /^\*{3,}$/.test(value);
|
|
30239
|
+
if (Array.isArray(value)) return value.some(holdsPlaceholder);
|
|
30240
|
+
if (value !== null && typeof value === "object") return Object.values(value).some(holdsPlaceholder);
|
|
30241
|
+
return false;
|
|
30242
|
+
}
|
|
30243
|
+
function replaceAtCoordinate(bag, coordinate, value) {
|
|
30244
|
+
if (coordinate.length === 0) return value;
|
|
30245
|
+
const clone = (node) => Array.isArray(node) ? [...node] : node !== null && typeof node === "object" ? { ...node } : node;
|
|
30246
|
+
const root = clone(bag);
|
|
30247
|
+
let node = root;
|
|
30248
|
+
for (let i = 0; i < coordinate.length - 1; i++) {
|
|
30249
|
+
const segment = coordinate[i];
|
|
30250
|
+
const next = clone(node[segment]);
|
|
30251
|
+
node[segment] = next;
|
|
30252
|
+
node = next;
|
|
30253
|
+
}
|
|
30254
|
+
const last = coordinate[coordinate.length - 1];
|
|
30255
|
+
Object.defineProperty(node, last, {
|
|
30256
|
+
value,
|
|
30257
|
+
enumerable: true,
|
|
30258
|
+
writable: true,
|
|
30259
|
+
configurable: true
|
|
30260
|
+
});
|
|
30261
|
+
return root;
|
|
30262
|
+
}
|
|
30263
|
+
async function readLive(live, baseline, marked, logicalId, ctx) {
|
|
30264
|
+
let readCurrentState;
|
|
30265
|
+
try {
|
|
30266
|
+
const { provider } = ctx.providerRegistry.getProviderFor({
|
|
30267
|
+
resourceType: live.resourceType,
|
|
30268
|
+
provisionedBy: live.provisionedBy
|
|
30269
|
+
});
|
|
30270
|
+
readCurrentState = provider.readCurrentState?.bind(provider);
|
|
30271
|
+
} catch {
|
|
30272
|
+
return { failure: "not-readable" };
|
|
30273
|
+
}
|
|
30274
|
+
if (readCurrentState === void 0) return { failure: "not-readable" };
|
|
30275
|
+
const handed = maskReadbackAtCoordinates(maskAtCoordinates(live.properties ?? {}, [...marked, ...noEchoLeavesOf(live) ?? []]), baseline.properties, marked);
|
|
30276
|
+
let timer;
|
|
30277
|
+
try {
|
|
30278
|
+
const result = await Promise.race([Promise.resolve().then(() => readCurrentState(live.physicalId, logicalId, live.resourceType, handed)), new Promise((_, reject) => {
|
|
30279
|
+
timer = setTimeout(() => reject(/* @__PURE__ */ new Error("readback timed out")), NOECHO_REPLAY_READBACK_TIMEOUT_MS);
|
|
30280
|
+
})]);
|
|
30281
|
+
if (result === void 0 || result === null || typeof result !== "object") return { failure: "not-readable" };
|
|
30282
|
+
return { live: result };
|
|
30283
|
+
} catch {
|
|
30284
|
+
return { failure: "read-failed" };
|
|
30285
|
+
} finally {
|
|
30286
|
+
if (timer !== void 0) clearTimeout(timer);
|
|
30287
|
+
}
|
|
30288
|
+
}
|
|
30289
|
+
async function substituteMarkedNoEchoLeaves(input) {
|
|
30290
|
+
const { desired, baseline, live, logicalId, ctx, secrets, routedVia, stackName } = input;
|
|
30291
|
+
const identity = {
|
|
30292
|
+
desired,
|
|
30293
|
+
onPreviousSide: (bag) => bag,
|
|
30294
|
+
inert: [],
|
|
30295
|
+
substituted: []
|
|
30296
|
+
};
|
|
30297
|
+
if (desired === void 0) return identity;
|
|
30298
|
+
const pending = (noEchoLeavesOf(baseline) ?? []).filter((coordinate) => carriesSecretMask(valueAtCoordinate(desired, coordinate)));
|
|
30299
|
+
if (pending.length === 0) return identity;
|
|
30300
|
+
if (live.resourceType === NESTED_STACK_TYPE$3 && baseline.resourceType === NESTED_STACK_TYPE$3 && live.provisionedBy !== "cc-api" && !routedVia.includes("cc-api")) return {
|
|
30301
|
+
...identity,
|
|
30302
|
+
inert: pending
|
|
30303
|
+
};
|
|
30304
|
+
const read = await readLive(live, baseline, pending, logicalId, ctx);
|
|
30305
|
+
if ("failure" in read) throw unreadableNoEchoLeafRefusal(logicalId, pending, read.failure);
|
|
30306
|
+
const values = [];
|
|
30307
|
+
const unreadable = [];
|
|
30308
|
+
for (const coordinate of pending) {
|
|
30309
|
+
const path = readbackPathFor(read.live, baseline.properties, coordinate);
|
|
30310
|
+
const value = path !== void 0 && path.length === coordinate.length ? valueAtCoordinate(read.live, path) : void 0;
|
|
30311
|
+
if (value === void 0 || value === null || holdsPlaceholder(value)) {
|
|
30312
|
+
unreadable.push(coordinate);
|
|
30313
|
+
continue;
|
|
30314
|
+
}
|
|
30315
|
+
values.push({
|
|
30316
|
+
coordinate,
|
|
30317
|
+
value
|
|
30318
|
+
});
|
|
30319
|
+
}
|
|
30320
|
+
if (unreadable.length > 0) throw unreadableNoEchoLeafRefusal(logicalId, unreadable, "not-readable");
|
|
30321
|
+
let substituted = desired;
|
|
30322
|
+
for (const { coordinate, value } of values) {
|
|
30323
|
+
for (const leaf of loggableLeavesOf(value)) recordLogOnlyParameterValue(secrets, leaf);
|
|
30324
|
+
recordNoEchoParameterFreshValue(value, secrets, /* @__PURE__ */ new Set([ctx.region, stackName]));
|
|
30325
|
+
substituted = replaceAtCoordinate(substituted, coordinate, value);
|
|
30326
|
+
}
|
|
30327
|
+
return {
|
|
30328
|
+
inert: [],
|
|
30329
|
+
substituted: values,
|
|
30330
|
+
desired: substituted,
|
|
30331
|
+
onPreviousSide: (bag) => {
|
|
30332
|
+
if (bag === void 0) return bag;
|
|
30333
|
+
let out = bag;
|
|
30334
|
+
for (const { coordinate, value } of values) if (carriesSecretMask(valueAtCoordinate(out, coordinate))) out = replaceAtCoordinate(out, coordinate, value);
|
|
30335
|
+
return out;
|
|
30336
|
+
}
|
|
30337
|
+
};
|
|
30338
|
+
}
|
|
30339
|
+
function loggableLeavesOf(value) {
|
|
30340
|
+
if (value === null || typeof value !== "object") return [value];
|
|
30341
|
+
if (Array.isArray(value)) return value.every((item) => item === null || typeof item !== "object") ? [value] : value.flatMap(loggableLeavesOf);
|
|
30342
|
+
return Object.values(value).flatMap(loggableLeavesOf);
|
|
30343
|
+
}
|
|
30344
|
+
function declaredNoEchoAttributeNames(record) {
|
|
30345
|
+
const field = record.noEchoAttributeNames;
|
|
30346
|
+
return Array.isArray(field) ? field.filter((name) => typeof name === "string") : [];
|
|
30347
|
+
}
|
|
30348
|
+
function maskRestoredNoEchoRecord(record, baseline, substituted = []) {
|
|
30349
|
+
const marked = noEchoLeavesOf(baseline) ?? [];
|
|
30350
|
+
const names = declaredNoEchoAttributeNames(baseline);
|
|
30351
|
+
if (marked.length === 0 && names.length === 0 && substituted.length === 0) return record;
|
|
30352
|
+
const echoes = (name, value) => value !== record.physicalId && substituted.some((leaf) => leaf.coordinate[0] === name && canonicalJson$3(leaf.value) === canonicalJson$3(value));
|
|
30353
|
+
let attributes = record.attributes;
|
|
30354
|
+
if (attributes !== void 0 && attributes !== null && typeof attributes === "object") for (const [name, value] of Object.entries(attributes)) {
|
|
30355
|
+
if (!names.includes(name) && !echoes(name, value)) continue;
|
|
30356
|
+
attributes = replaceAtCoordinate(attributes, [name], maskWholeValue(value));
|
|
30357
|
+
}
|
|
30358
|
+
const byIndex = maskAtCoordinates(record.properties, marked);
|
|
30359
|
+
const reshaped = marked.filter((coordinate) => {
|
|
30360
|
+
const list = coordinate.findIndex((segment) => typeof segment === "number");
|
|
30361
|
+
if (list < 0) return false;
|
|
30362
|
+
const path = coordinate.slice(0, list);
|
|
30363
|
+
return canonicalJson$3(valueAtCoordinate(byIndex, path)) !== canonicalJson$3(valueAtCoordinate(baseline.properties, path));
|
|
30364
|
+
});
|
|
30365
|
+
const properties = reshaped.length === 0 ? byIndex : maskReadbackAtCoordinates(byIndex, baseline.properties, reshaped);
|
|
30366
|
+
const widened = reshaped.map((coordinate) => readbackPathFor(byIndex, baseline.properties, coordinate)).filter((path, i) => path !== void 0 && path.length < reshaped[i].length);
|
|
30367
|
+
const leaves = widened.length === 0 ? baseline.noEchoLeaves : canonicalCoordinates([...marked, ...widened]);
|
|
30368
|
+
return {
|
|
30369
|
+
...record,
|
|
30370
|
+
properties,
|
|
30371
|
+
...attributes !== record.attributes && { attributes },
|
|
30372
|
+
...leaves !== void 0 && { noEchoLeaves: leaves }
|
|
30373
|
+
};
|
|
30374
|
+
}
|
|
30375
|
+
|
|
30201
30376
|
//#endregion
|
|
30202
30377
|
//#region src/deployment/rollback-executor/replay-props.ts
|
|
30203
30378
|
async function resolveReplayProps(props, resolvers, secrets, execCtx, logicalId) {
|
|
@@ -30227,8 +30402,9 @@ async function resolveReplayProps(props, resolvers, secrets, execCtx, logicalId)
|
|
|
30227
30402
|
};
|
|
30228
30403
|
return await walk(props, "");
|
|
30229
30404
|
}
|
|
30230
|
-
function refuseMaskedReplayBaseline(props, logicalId) {
|
|
30405
|
+
function refuseMaskedReplayBaseline(props, logicalId, inert = []) {
|
|
30231
30406
|
if (props === void 0 || !carriesSecretMask(props)) return;
|
|
30407
|
+
if (inert.length > 0 && masksOnlyAt(props, inert)) return;
|
|
30232
30408
|
throw new CdkdError(`Cannot roll ${shownLogicalId(logicalId)} back: its recorded baseline holds the redaction mask ('${"***"}'), so cdkd would write that literal to the live resource. There are four ways a baseline comes to hold it. (1) A NoEcho custom-resource value was resolved there: restore the property with 'cdkd deploy' AFTER forcing that custom resource to update (change one of its properties, e.g. a nonce), so its handler runs again and supplies the real value — an ordinary re-deploy leaves the resource unchanged, so the handler does not run and the mask stays. (2) The Fn::Base64 encoding of a secret value (a {{resolve:...}} dynamic reference under Fn::Base64, such as EC2 UserData), which cdkd never records: restore the property with a 'cdkd deploy' that changes this resource, which sends it the encoded value again — a re-deploy that leaves this resource unchanged sends it nothing. Every rollback to such a baseline refuses, so to end this, stop encoding the secret into the property (have the resource read the secret at run time instead — not by writing the secret's plaintext into the template, which cdkd would then record in state in the clear). (3) The value was SPLICED from a masked record of ANOTHER resource — by 'cdkd orphan --force', or by 'cdkd import' resolving an Fn::GetAtt or a Ref over a value the Cloud Control fallback had masked. Repair the record that HOLDS the mask ('cdkd import <stack> --resource <logicalId>=<physicalId> --force', granting cloudformation:DescribeType first if the import warned that it could not read the schema), then re-run whichever command wrote this property. (4) A NoEcho template parameter's value, which cdkd stores only as the mask: restore the property with 'cdkd deploy', which sends the parameter's value again. See https://github.com/go-to-k/cdkd/issues/2449.`, "ROLLBACK_REDACTED_BASELINE");
|
|
30233
30409
|
}
|
|
30234
30410
|
|
|
@@ -30515,14 +30691,24 @@ async function replayRevert(s) {
|
|
|
30515
30691
|
skipUnaddressableReplay(s, logger, op, "restore");
|
|
30516
30692
|
return;
|
|
30517
30693
|
}
|
|
30518
|
-
logger.info(` Rollback: Restoring ${safe(op.logicalId)} (${safe(op.resourceType)}) to previous state`);
|
|
30519
30694
|
const { provider, provisionedBy: revertVia } = ctx.providerRegistry.getProviderFor({
|
|
30520
30695
|
resourceType: op.resourceType,
|
|
30521
30696
|
provisionedBy: op.provisionedBy
|
|
30522
30697
|
});
|
|
30523
|
-
const
|
|
30524
|
-
|
|
30525
|
-
|
|
30698
|
+
const noEcho = await substituteMarkedNoEchoLeaves({
|
|
30699
|
+
desired: await resolveReplayProps(previousState.properties, resolver, secrets, ctx, op.logicalId),
|
|
30700
|
+
baseline: previousState,
|
|
30701
|
+
live: current,
|
|
30702
|
+
logicalId: op.logicalId,
|
|
30703
|
+
ctx,
|
|
30704
|
+
secrets,
|
|
30705
|
+
routedVia: [op.provisionedBy, revertVia],
|
|
30706
|
+
stackName
|
|
30707
|
+
});
|
|
30708
|
+
const desiredProps = noEcho.desired;
|
|
30709
|
+
refuseMaskedReplayBaseline(desiredProps, op.logicalId, noEcho.inert);
|
|
30710
|
+
logger.info(` Rollback: Restoring ${safe(op.logicalId)} (${safe(op.resourceType)}) to previous state`);
|
|
30711
|
+
const currentProps = noEcho.onPreviousSide(await resolveReplayProps(current.properties, resolver, secrets, ctx, op.logicalId));
|
|
30526
30712
|
recordNestedStackParameterExpressions(secrets, op.resourceType, desiredProps, previousState.properties, STATE_DERIVED_RULES);
|
|
30527
30713
|
opMasker.addNamed({
|
|
30528
30714
|
resourceType: op.resourceType,
|
|
@@ -30558,7 +30744,7 @@ async function replayRevert(s) {
|
|
|
30558
30744
|
}
|
|
30559
30745
|
], op.logicalId, logger, isInterrupted, secrets, mask));
|
|
30560
30746
|
if (revertResult) recordNoEchoAttributeValues(revertResult, secrets, desiredProps);
|
|
30561
|
-
stateResources[op.logicalId] = redactRollbackRecord(recordAfterRollbackUpdate(previousState, revertResult), secrets, previousState.properties);
|
|
30747
|
+
stateResources[op.logicalId] = maskRestoredNoEchoRecord(redactRollbackRecord(recordAfterRollbackUpdate(previousState, revertResult), secrets, previousState.properties), previousState, noEcho.substituted);
|
|
30562
30748
|
if (updatePartialReason(revertResult) === void 0) inlinePolicyWriters.record(op.logicalId, "update", stateResources[op.logicalId], !deepEqual$1(previousState.properties?.["Policies"], current.properties?.["Policies"]), revertVia);
|
|
30563
30749
|
const rollbackPartial = updatePartialReason(revertResult);
|
|
30564
30750
|
if (rollbackPartial !== void 0) logger.warn(mask(` Rollback: ${safe(op.logicalId)} restored, ${updatePartialMessage(rollbackPartial)}`));
|
|
@@ -30599,6 +30785,7 @@ async function replayReverseReplacement(s) {
|
|
|
30599
30785
|
return;
|
|
30600
30786
|
}
|
|
30601
30787
|
const resolvedPrevProps = await resolveReplayProps(prev.properties, resolver, secrets, ctx, op.logicalId) ?? {};
|
|
30788
|
+
refuseMarkedNoEchoRecreate(resolvedPrevProps, noEchoLeavesOf(prev), op.logicalId);
|
|
30602
30789
|
refuseMaskedReplayBaseline(resolvedPrevProps, op.logicalId);
|
|
30603
30790
|
opMasker.addNamed({
|
|
30604
30791
|
resourceType: oldType,
|
|
@@ -31244,9 +31431,19 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
|
|
|
31244
31431
|
resourceType: op.resourceType,
|
|
31245
31432
|
provisionedBy: op.provisionedBy ?? current.provisionedBy
|
|
31246
31433
|
});
|
|
31247
|
-
const
|
|
31248
|
-
|
|
31249
|
-
|
|
31434
|
+
const noEcho = await substituteMarkedNoEchoLeaves({
|
|
31435
|
+
desired: await resolveReplayProps(prev.properties, resolver, secrets, ctx, op.logicalId),
|
|
31436
|
+
baseline: prev,
|
|
31437
|
+
live: current,
|
|
31438
|
+
logicalId: op.logicalId,
|
|
31439
|
+
ctx,
|
|
31440
|
+
secrets,
|
|
31441
|
+
routedVia: [op.provisionedBy ?? current.provisionedBy, revertVia],
|
|
31442
|
+
stackName
|
|
31443
|
+
});
|
|
31444
|
+
const desiredProps = noEcho.desired;
|
|
31445
|
+
refuseMaskedReplayBaseline(desiredProps, op.logicalId, noEcho.inert);
|
|
31446
|
+
const attemptedProps = noEcho.onPreviousSide(await resolveReplayProps(op.attemptedProperties ?? current.properties, resolver, secrets, ctx, op.logicalId));
|
|
31250
31447
|
recordNestedStackParameterExpressions(secrets, op.resourceType, desiredProps, prev.properties, STATE_DERIVED_RULES);
|
|
31251
31448
|
opMasker.addNamed({
|
|
31252
31449
|
resourceType: op.resourceType,
|
|
@@ -31282,7 +31479,7 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
|
|
|
31282
31479
|
}
|
|
31283
31480
|
], op.logicalId, logger, options.isInterrupted, secrets, mask));
|
|
31284
31481
|
if (revertFailedResult) recordNoEchoAttributeValues(revertFailedResult, secrets, desiredProps);
|
|
31285
|
-
stateResources[op.logicalId] = redactRollbackRecord(recordAfterRollbackUpdate(prev, revertFailedResult), secrets, prev.properties);
|
|
31482
|
+
stateResources[op.logicalId] = maskRestoredNoEchoRecord(redactRollbackRecord(recordAfterRollbackUpdate(prev, revertFailedResult), secrets, prev.properties), prev, noEcho.substituted);
|
|
31286
31483
|
if (updatePartialReason(revertFailedResult) === void 0) inlinePolicyWriters.record(op.logicalId, "update", stateResources[op.logicalId], !deepEqual$1(prev.properties?.["Policies"], (op.attemptedProperties ?? current.properties)?.["Policies"]), revertVia);
|
|
31287
31484
|
const revertFailedPartial = updatePartialReason(revertFailedResult);
|
|
31288
31485
|
if (revertFailedPartial !== void 0) logger.warn(mask(` Rollback: ${safe(op.logicalId)} reverted, ${updatePartialMessage(revertFailedPartial)}`));
|
|
@@ -31794,11 +31991,18 @@ const MAX_NESTED_WALK_DEPTH = 32;
|
|
|
31794
31991
|
function nestedChildStackName(parentStackName, logicalId) {
|
|
31795
31992
|
return `${parentStackName}~${logicalId}`;
|
|
31796
31993
|
}
|
|
31797
|
-
function nestedPendingSnapshot(state) {
|
|
31994
|
+
function nestedPendingSnapshot(state, refusesExportName) {
|
|
31995
|
+
const outputs = { ...isPlainRecord(state.outputs) ? state.outputs : {} };
|
|
31996
|
+
let exportNames = Array.isArray(state.exportNames) ? [...state.exportNames] : void 0;
|
|
31997
|
+
const refused = new Set(importableOutputKeys(state).filter((name) => refusesExportName(name)));
|
|
31998
|
+
if (refused.size > 0) {
|
|
31999
|
+
for (const name of refused) Reflect.deleteProperty(outputs, name);
|
|
32000
|
+
if (exportNames !== void 0) exportNames = exportNames.filter((name) => !refused.has(name));
|
|
32001
|
+
}
|
|
31798
32002
|
return {
|
|
31799
32003
|
previousOutputs: {
|
|
31800
|
-
outputs
|
|
31801
|
-
...
|
|
32004
|
+
outputs,
|
|
32005
|
+
...exportNames !== void 0 && { exportNames }
|
|
31802
32006
|
},
|
|
31803
32007
|
previousCrossStackReads: {
|
|
31804
32008
|
...Array.isArray(state.imports) && { imports: [...state.imports] },
|
|
@@ -32348,7 +32552,12 @@ async function performRollback(completedOperations, stateResources, stackName, p
|
|
|
32348
32552
|
}
|
|
32349
32553
|
async function settleJournalAfterSuccess(stackName, completedOperations, previousState, finalResources, initialDeploy) {
|
|
32350
32554
|
if (this.options.parentStackInfo) {
|
|
32351
|
-
await this.writeRollbackJournalSegment(stackName, completedOperations, [], NESTED_PENDING_PARENT_REASON, initialDeploy, nestedPendingSnapshot(previousState)
|
|
32555
|
+
await this.writeRollbackJournalSegment(stackName, completedOperations, [], NESTED_PENDING_PARENT_REASON, initialDeploy, nestedPendingSnapshot(previousState, (name) => {
|
|
32556
|
+
const verdict = this.carriedExportAliasRefusal;
|
|
32557
|
+
const dropped = verdict === void 0 || verdict(name, name) !== void 0;
|
|
32558
|
+
if (dropped) this.logger.warn(verdict === void 0 ? "An export alias the previous record published was not kept for a revert of this nested stack: no export-name verdict is available." : "An export alias the previous record published was not kept for a revert of this nested stack: its name contains a NoEcho value.");
|
|
32559
|
+
return dropped;
|
|
32560
|
+
}));
|
|
32352
32561
|
return 0;
|
|
32353
32562
|
}
|
|
32354
32563
|
let nestedLeft = 0;
|
|
@@ -37197,6 +37406,115 @@ function isNoEchoPromotionOnly(change) {
|
|
|
37197
37406
|
return change.changeType === "UPDATE" && (change.attributeChanges?.length ?? 0) === 0 && (change.propertyChanges?.length ?? 0) > 0 && change.propertyChanges.every((pc) => pc.noEchoPromoted === true);
|
|
37198
37407
|
}
|
|
37199
37408
|
|
|
37409
|
+
//#endregion
|
|
37410
|
+
//#region src/deployment/custom-resource-service-token.ts
|
|
37411
|
+
const SERVICE_TOKEN_CHANGE_REFUSED = "CUSTOM_RESOURCE_SERVICE_TOKEN_CHANGED";
|
|
37412
|
+
function uncomparableToken(value) {
|
|
37413
|
+
if (value === void 0 || value === null || value === "") return "absent";
|
|
37414
|
+
if (typeof value !== "string") return "not-a-string";
|
|
37415
|
+
if (value.includes("***")) return "masked";
|
|
37416
|
+
if (dynamicReferenceTokens(value).length > 0) return "reference";
|
|
37417
|
+
}
|
|
37418
|
+
const SERVICE_TOKEN = "ServiceToken";
|
|
37419
|
+
function serviceTokenChange(change) {
|
|
37420
|
+
return change.propertyChanges?.find((pc) => pc.path === SERVICE_TOKEN);
|
|
37421
|
+
}
|
|
37422
|
+
function isSynthetic(pc) {
|
|
37423
|
+
return pc.replacementPropagated === true || pc.inPlacePropagated === true || pc.noEchoPromoted === true;
|
|
37424
|
+
}
|
|
37425
|
+
function isUnmovedPromotion(pc) {
|
|
37426
|
+
return pc.noEchoPromoted === true || pc.inPlacePropagated === true;
|
|
37427
|
+
}
|
|
37428
|
+
function diffMovedServiceToken(change) {
|
|
37429
|
+
const pc = serviceTokenChange(change);
|
|
37430
|
+
return pc !== void 0 && !isUnmovedPromotion(pc);
|
|
37431
|
+
}
|
|
37432
|
+
function findServiceTokenRefusals(input) {
|
|
37433
|
+
const refused = [];
|
|
37434
|
+
const deferred = [];
|
|
37435
|
+
for (const [logicalId, change] of input.changes) {
|
|
37436
|
+
if (change.changeType !== "UPDATE" || !isCustomResourceType(change.resourceType)) continue;
|
|
37437
|
+
if (!Object.hasOwn(input.stateResources, logicalId)) continue;
|
|
37438
|
+
const record = input.stateResources[logicalId];
|
|
37439
|
+
if (record === void 0 || record.resourceType !== change.resourceType) continue;
|
|
37440
|
+
if (input.recreateTargetIds?.has(logicalId) === true) continue;
|
|
37441
|
+
const pc = serviceTokenChange(change);
|
|
37442
|
+
if (pc === void 0) continue;
|
|
37443
|
+
const recordedToken = record.properties?.[SERVICE_TOKEN];
|
|
37444
|
+
const recordedProblem = uncomparableToken(recordedToken);
|
|
37445
|
+
if (recordedProblem !== void 0) {
|
|
37446
|
+
if (isUnmovedPromotion(pc)) continue;
|
|
37447
|
+
refused.push({
|
|
37448
|
+
logicalId,
|
|
37449
|
+
resourceType: change.resourceType,
|
|
37450
|
+
kind: "unjudgeable",
|
|
37451
|
+
recorded: recordedProblem
|
|
37452
|
+
});
|
|
37453
|
+
continue;
|
|
37454
|
+
}
|
|
37455
|
+
const desired = pc.newValue;
|
|
37456
|
+
if (!isSynthetic(pc) && uncomparableToken(desired) === void 0) {
|
|
37457
|
+
if (desired !== recordedToken) refused.push({
|
|
37458
|
+
logicalId,
|
|
37459
|
+
resourceType: change.resourceType,
|
|
37460
|
+
kind: "changed",
|
|
37461
|
+
desired
|
|
37462
|
+
});
|
|
37463
|
+
continue;
|
|
37464
|
+
}
|
|
37465
|
+
if (pc.replacementPropagated === true || pc.inPlacePropagated === true && pc.noEchoPromoted !== true || desired !== null && typeof desired === "object" && !isSynthetic(pc)) deferred.push({
|
|
37466
|
+
logicalId,
|
|
37467
|
+
resourceType: change.resourceType
|
|
37468
|
+
});
|
|
37469
|
+
}
|
|
37470
|
+
return {
|
|
37471
|
+
refused,
|
|
37472
|
+
deferred
|
|
37473
|
+
};
|
|
37474
|
+
}
|
|
37475
|
+
function serviceTokenUpdateRefusal(input) {
|
|
37476
|
+
if (!isCustomResourceType(input.resourceType) || input.recordedType !== input.resourceType) return;
|
|
37477
|
+
const recordedProblem = uncomparableToken(input.recorded);
|
|
37478
|
+
if (recordedProblem !== void 0) return input.diffSawTokenChange ? {
|
|
37479
|
+
logicalId: input.logicalId,
|
|
37480
|
+
resourceType: input.resourceType,
|
|
37481
|
+
kind: "unjudgeable",
|
|
37482
|
+
recorded: recordedProblem
|
|
37483
|
+
} : void 0;
|
|
37484
|
+
if (uncomparableToken(input.desired) !== void 0) return void 0;
|
|
37485
|
+
if (input.desired === input.recorded) return void 0;
|
|
37486
|
+
return {
|
|
37487
|
+
logicalId: input.logicalId,
|
|
37488
|
+
resourceType: input.resourceType,
|
|
37489
|
+
kind: "changed",
|
|
37490
|
+
desired: input.desired
|
|
37491
|
+
};
|
|
37492
|
+
}
|
|
37493
|
+
const UNCOMPARABLE_TEXT = {
|
|
37494
|
+
absent: "missing",
|
|
37495
|
+
masked: `the redaction mask '${"***"}'`,
|
|
37496
|
+
reference: "a '{{resolve:...}}' dynamic reference",
|
|
37497
|
+
"not-a-string": "not a string"
|
|
37498
|
+
};
|
|
37499
|
+
function rowText(refusal, mask) {
|
|
37500
|
+
const id = displayIdent(refusal.logicalId);
|
|
37501
|
+
if (refusal.kind === "changed") return `${id}: ServiceToken changes to ${displayIdent(mask(refusal.desired))}, away from the handler its record names.`;
|
|
37502
|
+
return `${id}: its recorded ServiceToken is ${UNCOMPARABLE_TEXT[refusal.recorded]}, so cdkd cannot tell whether this deploy changes it.`;
|
|
37503
|
+
}
|
|
37504
|
+
const REMEDY = "To move a custom resource to a different handler, give it a new logical id (in CDK, a new construct id, or overrideLogicalId on its CfnResource): the deploy then creates the new resource through the new handler and deletes the old one through its old handler. To keep the existing resource, deploy its previous ServiceToken.";
|
|
37505
|
+
const UNJUDGEABLE_REMEDY = `Where the recorded ServiceToken is unreadable and the handler did not change, put the ARN of the handler that created this resource (the one it was last deployed with, not the one the template names now) back as ServiceToken in state.json (a ServiceToken fed by a NoEcho parameter is recorded only as '${"***"}': feed it from a plain value) and re-deploy.`;
|
|
37506
|
+
function renderServiceTokenRefusal(refusals, stackName, mask = (text) => text) {
|
|
37507
|
+
const rows = refusals.map((refusal) => ` - ${rowText(refusal, mask)}`);
|
|
37508
|
+
return `Refusing to deploy ${stackName}: ` + (refusals.length === 1 ? `a custom resource's ServiceToken changes` : `${refusals.length} custom resources' ServiceTokens change`) + `, which CloudFormation does not allow ("Modifying service token is not allowed") (issue #4749). Nothing was sent to either handler.
|
|
37509
|
+
${rows.join("\n")}\n ${REMEDY}` + (refusals.some((refusal) => refusal.kind === "unjudgeable") ? `\n ${UNJUDGEABLE_REMEDY}` : "");
|
|
37510
|
+
}
|
|
37511
|
+
function serviceTokenBlockingReason(refusal, mask) {
|
|
37512
|
+
return `${rowText(refusal, mask)} cdkd deploy refuses a changed custom-resource ServiceToken, as CloudFormation does (issue #4749); give the custom resource a new logical id to move it to another handler.`;
|
|
37513
|
+
}
|
|
37514
|
+
function deferredServiceTokenWarning(row) {
|
|
37515
|
+
return `${displayIdent(row.logicalId)}: its ServiceToken reads a resource this deploy replaces, creates or updates, or a value this preview cannot resolve. If it resolves to a different ARN than the one recorded, cdkd deploy refuses the update before invoking any handler and rolls back (issue #4749). A replaced backing function is already deleted by then and the rollback re-creates it; if that fails, the record names a function that no longer exists.`;
|
|
37516
|
+
}
|
|
37517
|
+
|
|
37200
37518
|
//#endregion
|
|
37201
37519
|
//#region src/deployment/deploy-engine/update.ts
|
|
37202
37520
|
function isWhollyMask(value) {
|
|
@@ -37648,6 +37966,15 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
|
|
|
37648
37966
|
updateSecrets,
|
|
37649
37967
|
lostWithParent
|
|
37650
37968
|
}));
|
|
37969
|
+
const serviceTokenRefusal = serviceTokenUpdateRefusal({
|
|
37970
|
+
logicalId,
|
|
37971
|
+
resourceType,
|
|
37972
|
+
recordedType: currentResource.resourceType,
|
|
37973
|
+
recorded: currentResource.properties?.["ServiceToken"],
|
|
37974
|
+
desired: resolvedProps["ServiceToken"],
|
|
37975
|
+
diffSawTokenChange: diffMovedServiceToken(change)
|
|
37976
|
+
});
|
|
37977
|
+
if (serviceTokenRefusal !== void 0) throw markRefusedBeforeApplying(markNonRetryable(new CdkdError(renderServiceTokenRefusal([serviceTokenRefusal], stackName, createSecretMasker(updateSecrets)), SERVICE_TOKEN_CHANGE_REFUSED)));
|
|
37651
37978
|
return markRestored(await this.updateInPlace({
|
|
37652
37979
|
conditions,
|
|
37653
37980
|
counts,
|
|
@@ -39794,6 +40121,15 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
|
|
|
39794
40121
|
stateResources: currentState.resources
|
|
39795
40122
|
});
|
|
39796
40123
|
if (nestedStackTypeChanges.length > 0) throw markNonRetryable(new CdkdError(renderNestedStackTypeChangeRefusal(nestedStackTypeChanges, stackName), "TYPE_CHANGE_NESTED_STACK"));
|
|
40124
|
+
const serviceTokenRefusals = findServiceTokenRefusals({
|
|
40125
|
+
changes,
|
|
40126
|
+
stateResources: currentState.resources,
|
|
40127
|
+
recreateTargetIds: recreateTargetIdsFor(this.options.recreateTargets, stackName)
|
|
40128
|
+
}).refused;
|
|
40129
|
+
if (serviceTokenRefusals.length > 0) {
|
|
40130
|
+
const mask = this.diffLogMasker(diffResolverContext.recordedSecretValues, effectiveTemplate, parameterValues);
|
|
40131
|
+
throw markNonRetryable(new CdkdError(renderServiceTokenRefusal(serviceTokenRefusals, stackName, mask), SERVICE_TOKEN_CHANGE_REFUSED));
|
|
40132
|
+
}
|
|
39797
40133
|
const recreatePromotion = promoteRecreateTargets(changes, this.options.recreateTargets, stackName);
|
|
39798
40134
|
for (const id of recreatePromotion.promoted) this.logger.debug(safeMsg`UPDATE (recreate target): ${id} has no template change; recreating it as requested`);
|
|
39799
40135
|
for (const { logicalId, flag, changeType } of recreatePromotion.unreached) this.logger.warn(changeType === void 0 ? safeMsg`${flag} ${logicalId}: not recreated, this deploy has no such resource.` : safeMsg`${flag} ${logicalId}: not recreated, this deploy will ${changeType.toLowerCase()} it instead.`);
|
|
@@ -40494,5 +40830,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
40494
40830
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
40495
40831
|
|
|
40496
40832
|
//#endregion
|
|
40497
|
-
export { computeParameterTaint as $, lambdaFunctionNameForMask as $a, refuseMalformedResourceEntriesForDestroy as $i, ccBrokenReason as $n, splitImportedOps as $o, keepsSecretReferenceToken as $r, synthesisStatusMessage as $s, maskEventTextWithBoundBags as $t, beginDeleteWait as A, isStatefulRecreateTargetForReplace as Aa, nullPrototypeRecord as Ac, malformedOrphansRefusalMessage as Ai, DEFAULT_RESOURCE_TIMEOUT_MS as An, isUncertifiedBaselineMaskPosition as Ao, assertFlagRoleArn as Ar, buildDenyExternalAccessPolicy as As, removeProtectionTypeList as At, S3_AUTO_DELETE_OBJECTS_TAG as B, configBooleanRefusal as Ba, previewableOrphanRecords as Bi, withCreateTokenLedger as Bn, recordNoEchoAttributeValues as Bo, s3BucketArn as Br, isDockerClientEnvKey as Bs, resolveReplacementOldType as Bt, recordedProtectionNote as C, unwrittenCreateOnlyReplacement as Ca, derivePartitionAndUrlSuffix as Cc, malformedExportSourceWarning as Ci, exportNameSecretExposure as Cn, maskSecretsInError as Co, INTRINSIC_KEYS as Cr, ensureAssetStorage as Cs, sameJournaledOrphans as Ct, readProtection as D, findReplacedReadersOfRecreateTargets as Da, defineOwnKey as Dc, malformedOrphanRecordsRefusalMessage as Di, collectPublishedOutputNames as Dn, scrubResourceRecord as Do, producerRegionsFromState as Dr, readBootstrapMarkerBody as Ds, destroyStackRecordsView as Dt, perType as E, hasNoCloudControlHandlers as Ea, processStackMessages as Ec, malformedLocalResourcesWarning as Ei, collectDeclaredOutputNames as En, redactSecretsForState as Eo, classifyReplaySecretRegion as Er, parseBootstrapMarker as Es, awaitInFlightSibling as Et, DELETE_INDEX_WAIT_PROCEED_NOTE as F, isWarmThroughputDecrease as Fa, renderAssemblyPathEscape as Fc, malformedResourceEntriesWarning as Fi, formatDestructiveChange as Fn, recoverMaskedOutput as Fo, AWS_CREDENTIAL_ENV_KEYS as Fr, describeDockerFailure as Fs, planFailedOps as Ft, formatResourceLine as G, requireConfigArray as Ga, refuseMalformedOrphans as Gi, readTagList as Gn, STATE_SOURCED_READBACK_RULES as Go, coerceParameterTypedValue as Gr, runDockerForeground as Gs, REDACTED_DELETE_ADDRESS_SKIP_REASON as Gt, isTruthyCfnBoolean as H, configStringRefusal as Ha, refuseMalformedNestedChildOutputs as Hi, DBPROXY_TAGS_WHAT as Hn, wholeStringLeavesOf as Ho, s3BucketDualStackDomainName as Hr, partitionSensitiveEnv as Hs, findNestedStackTypeChanges as Ht, INDEX_SETTLE_POLL_INTERVAL_MS as I, toCfnInteger as Ia, resolveAssemblyPath as Ic, malformedResourcePropertiesWarning as Ii, RollbackInlinePolicyWriters as In, carriesSecretMask as Io, applyCallerIdentityCredentials as Ir, dockerSpawnEnvWithSensitive as Is, planRollback as It, cyan as J, prefetchCreateOnlyPropertyPaths as Ja, refuseMalformedOutputs as Ji, tagPlanWarning as Jn, isSingleDynamicReferenceToken as Jo, getAccountInfo as Jr, escapeRegExp$3 as Js, redactedDeleteAddressSkip as Jt, createReadOnlyAttributeHealerFactory as K, requireConfigObject as Ka, refuseMalformedOrphansForDestroy as Ki, refuseMalformedDesiredTags as Kn, TEMPLATE_SOURCED_RULES as Ko, isUnboundTemplateParameter as Kr, runDockerStreaming as Ks, isRedactedRecordedValue as Kt, deleteTableWithIndexBusyRetry as L, toFiniteNumber as La, clearBucketRegionCache as Lc, malformedResourcesWarning as Li, earliestDefined as Ln, provenPublicValue as Lo, callerEnvCredentials as Lr, finchSecretArgvRefusal as Ls, recheckFailedPlan as Lt, deleteBudgetKey as M, renderStatefulReason as Ma, absoluteAssemblyPathEscape as Mc, malformedOutputsRefusalMessage as Mi, maskingRetryLogger as Mn, identityKeyFor as Mo, explicitRoleArnOrThrow as Mr, resolveDockerContextDirectory as Ms, demoteSupersededOrphans as Mt, resolveDynamoDbDeleteBudgetClock as N, WARM_THROUGHPUT_MEMBERS as Na, describeFileReadFailure as Nc, malformedOutputsWarning as Ni, constructPathOf as Nn, inheritNestedStackParameterAssociations as No, isIamRoleArn as Nr, describeDockerCapturedOutput as Ns, isJournaledOrphan as Nt, DynamoDBGlobalTableProvider as O, shownType as Oa, hasOwnKey as Oc, malformedOrphanRecordsWarning as Oi, isExportAliasCollision as On, DYNAMIC_REFERENCE_TOKEN_SCAN as Oo, regionLessSecretName as Or, validateAssetBucketName as Os, getStackRecords as Ot, resolveDynamoDbDeleteBudgetMs as P, coerceWarmThroughput as Pa, displayAssemblyPath as Pc, malformedRenderedContainersWarning as Pi, findDestructiveChanges as Pn, recordNestedStackParameterExpressions as Po, sendableAssumeRoleCommand as Pr, describeDockerExecFailure as Ps, isReplacementOrphan as Pt, yellow as Q, canonicalLambdaFunctionName as Qa, refuseMalformedResourceEntriesForDeploy as Qi, ProviderRegistry as Qn, rebuildClientForBucketRegion as Qo, isNamelessDynamicReferenceError as Qr, Synthesizer as Qs, journaledOrphanPrintingBag as Qt, waitForIndexesSettled as R, coerceCfnBoolean as Ra, resolveBucketRegion as Rc, malformedScrubResourceEntriesRefusalMessage as Ri, ledgerForStack as Rn, recordMaskOnlyValue as Ro, envCredentialsAreAssumedRole as Rr, formatDockerLoginError as Rs, recordUnderIdIsNotOwn as Rt, recordedProtectionEvidence as S, findSilentDropProperties as Sa, canonicalizeRegion as Sc, malformedExportNamesWarning as Si, exportNameNoEchoParameters as Sn, errorCauseChain as So, DiffCalculator as Sr, assertAssetBucketRegion as Ss, makeForeignHolderScan as St, isProtectionValueActive as T, NO_CC_HANDLERS_REASON as Ta, StageLoadError as Tc, malformedLocalResourceEntriesWarning as Ti, noEchoParameterValueSeed as Tn, markSameGenerationBag as To, poisonRenderedSpellingsCollidingIn as Tr, isCrossRegionRedirect as Ts, replayRollback as Tt, getPriorAttempts as U, readConfigString as Ua, refuseMalformedOrphanRecords as Ui, DBPROXY_TAG_OPTIONS as Un, STATE_SOURCED_BASELINE_RULES as Uo, s3BucketRegionalDomainName as Ur, redactDockerArgvValues as Us, getCurrentProducerRegions as Ut, hasCdkAutoDeleteTag as V, configIntegerRefusal as Va, refuseDivergentRecordRegionForDestroy as Vi, acquireIdempotencyToken as Vn, recordProvenPublicExpression as Vo, s3BucketDomainName as Vr, isMalformedEnvKey as Vs, orphanDeleteNeedsIdentity as Vt, markRefusedBeforeApplying as W, replayWarn as Wa, refuseMalformedOrphanRecordsForDestroy as Wi, planTagDiff as Wn, STATE_SOURCED_CROSS_GENERATION_RULES as Wo, s3BucketWebsiteUrl as Wr, redactedDockerCause as Ws, inheritProducerRegions as Wt, green as X, describeTypeWithThrottleRetry as Xa, refuseMalformedResourceAttributesForOrphan as Xi, stringifyIfAssigned as Xn, isLockInfoExpired as Xo, carriesDynamicReference as Xr, AssetManifestLoader as Xs, updatePartialReason as Xt, gray as Y, templateResourceTypes as Ya, refuseMalformedOutputsForDestroy as Yi, definedAttributes as Yn, LockManager as Yo, isImpossibleEmptyStoredAttribute as Yr, stripControlChars as Ys, updatePartialMessage as Yt, red as Z, withRetry as Za, refuseMalformedResourceEntries as Zi, CC_BROKEN_REASON as Zn, S3StateBackend as Zo, carriesFetchableDynamicReference as Zr, getDockerImageBySourceHash as Zs, completedReplayEntries as Zt, makeCanonicalizePropertiesFn as _, unpreviewableOrphanRecords as _a, uploadCfnTemplate as _c, hasReadableOutputs as _i, exportAliasCollisionScrubWarning as _n, printingCorpusOf as _o, ec2InstanceProtectionSite as _r, createAssetRedirectResolver as _s, deleteJournaledOrphans as _t, findNestedTemplateTreeDefect as a, refuseMalformedResourcePropertiesForExport as aa, resolveCaptureObservedState as ac, withSharedDrainBudget as ai, buildFinalSnapshotIdentifier as an, maskWholeValue as ao, getCurrentResourceSecrets as ar, hasUnverifiableParameterRefusal as as, NESTED_PENDING_PARENT_REASON as at, noEchoComparisonForTemplate as b, withheldAccountClause as ba, expectedOwnerParam as bc, isReadableResourceEntry as bi, secretSafeKeyDisplay as bn, shareLogOnlyValues as bo, reDisableInstanceApiTermination as br, AssetModeResolver as bs, journaledOrphanLines as bt, renderNestedTemplateTreeDefect as c, refuseMalformedResourcesForDestroy as ca, resolveStateBucketWithDefaultAndSource as cc, JSON_LISTING_HOLE_VALUE as ci, effectiveDeletionPolicy as cn, noEchoOutputsComparison as co, slowCcOperationTimeoutMs as cr, isReadableBag as cs, dropSettledNestedJournals as ct, conditionInputsFrom as d, repairMalformedOrphanRecordsForReadOnly as da, warnDeprecatedNoPrefixCliFlag as dc, UNREADABLE_ORPHANS_CONTAINER_ROW as di, unsupportedFinalSnapshotError as dn, liveMatchesUnresolvedTokenFrame as do, deleteIndeterminateGuards as dr, shouldRetainResource as ds, recordDisplacedSkips as dt, refuseMalformedResourceEntriesForImport as ea, getDefaultStateBucketName as ec, AWS_NO_VALUE as ei, orphanRecordsPrintingBag as en, sameLambdaFunctionAddress as eo, isCustomResource as er, acceptedCreateOnlyDropsOf as es, namesAnyDeclaredParameter as et, parentSuppliedValues as f, repairMalformedOrphansForReadOnly as fa, ssmResolvedValueType as fc, UNREADABLE_RESOURCES_MAP_ROW as fi, DeploymentEventsReader as fn, carryLogOnlyValues as fo, deleteSkipReason as fr, AssetPublisher as fs, revertNestedChildFromJournal as ft, mergeNoChangeOutputs as g, repairMalformedResourcesForReadOnly as ga, findLargeInlineResources as gc, hasReadableOrphans as gi, displayTextOrWithheld as gn, logOnlyValueCount as go, disableInstanceApiTermination as gr, buildAssetRedirectMap as gs, withNestedStackContext as gt, keptWholeReasonText as h, repairMalformedResourcePropertiesForReadOnly as ha, MIGRATE_TMP_PREFIX as hc, displayLogicalId as hi, WITHHELD_NAME_DISPLAY as hn, literalSplitDelimitersOf as ho, markWaitAbandoned as hr, WorkGraph as hs, getCurrentNestedStackContext as ht, childTemplateLoader as i, refuseMalformedResourcePropertiesForDrift as ia, resolveAutoAssetStorage as ic, parseWebACLArn as ii, PRE_DELETE_SNAPSHOT_TYPES as in, maskReadbackAtCoordinates as io, isCustomResourceType as ir, hasReasonlessBaselineRefusal as is, planOrphanAdoption as it, compensateRemovedDeletionProtection as j, isStatefulRecreateTargetSync as ja, ownValue as jc, malformedOrphansWarning as ji, DEFAULT_RESOURCE_WARN_AFTER_MS as jn, pathCrossesDottedKey as jo, assertSendableRoleArn as jr, buildDockerImage as js, recordAfterRollbackUpdate as jt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as k, MULTI_REGION_RECREATE_BLOCKED_TYPES as ka, hasPlainPrototype$1 as kc, malformedOrphanRowsKeptWarning as ki, bindingSkippedOutputs as kn, dynamicReferenceTokens as ko, applyRoleArnIfSet as kr, validateContainerRepoName as ks, withStackRecords as kt, templateIdentity as l, refuseMalformedResourcesForExport as la, resolveUseCdkBootstrapAssets as lc, STATE_REGION_DIVERGED as li, isFinalSnapshotError as ln, passedNoEchoParametersOf as lo, unchangedBehindSecretReference as lr, orphansAfterRollback as ls, getNestedRevertRun as lt, isSecretBearingReferenceString as m, repairMalformedResourceEntriesForReadOnly as ma, CFN_TEMPLATE_URL_LIMIT as mc, deployRefusesOrphanRowsReason as mi, extractDeploymentEventError as mn, hasMaskableValues as mo, isWaitAbandonedError as mr, stringifyValue as ms, withNestedRevertRun as mt, IMPLICIT_DELETE_DEPENDENCIES as n, refuseMalformedResourceEntriesForOrphan as na, loadCdkJson as nc, isStalePlaceholderArnAttribute as ni, stateSecretNameNeedles as nn, TemplateParser as no, TemplateNoEchoReresolver as nr, exportNamesCarriedFrom as ns, resourcesNamingDeclaredParameter as nt, isAbsoluteAssetPath as o, refuseMalformedResourcePropertiesForOrphan as oa, resolveSkipPrefix as oc, parameterInputsFor as oi, ccRoutedFinalSnapshotError as on, maskedLeafCoordinatesOf as oo, withPrintingSecrets as or, importableOutputKeys as os, displacedOpClause as ot, readRecordedConditionVerdicts as p, repairMalformedOutputsForReadOnly as pa, CFN_TEMPLATE_BODY_LIMIT as pc, accountArgs as pi, DeploymentEventsStore as pn, createUnionSecretMasker as po, withIndeterminateGuard as pr, isSensitiveAttributeName as ps, revertedNestedRowIds as pt, bold as q, requireConfigString as qa, refuseMalformedOrphansForOrphan as qi, tagMapAsList as qn, WHOLE_DYNAMIC_REFERENCE_PATTERN as qo, parameterTypeMayLoseSecretIdentity as qr, warnFinchArgvExposure as qs, redactedDeleteAddressFields as qt, computeImplicitDeleteEdges as r, refuseMalformedResourcePropertiesForDestroy as ra, resolveApp as rc, refStateLookupFromResource as ri, ATOMIC_FINAL_SNAPSHOT_TYPES as rn, isMarkedCoordinate as ro, readsNoEchoDeleteValues as rr, hasReadableExportSet as rs, makeSiblingClaimReader as rt, listNestedTemplateRows as s, refuseMalformedResourcesForDeploy as sa, resolveStateBucketWithDefault as sc, passedParameterClassesOf as si, createPreDeleteFinalSnapshot as sn, noEchoLeavesOf as so, CloudControlProvider as sr, importableOutputs as ss, displacedPhysicalIdShown as st, DeployEngine as t, refuseMalformedResourceEntriesForImportSave as ta, getLegacyStateBucketName as tc, cfnRefValueFromPhysicalId as ti, secretNamePrintingBag as tn, DagBuilder as to, wouldReturnToSdkProvider as tr, describeRegionValueKind as ts, reachableDivergentParameters as tt, conditionFingerprint as u, refuseMalformedState as ua, stateBucketExistenceConfirmed as uc, STATE_RESOURCES_MALFORMED as ui, refusesFinalSnapshot as un, readsNoEchoSource as uo, UNSPECIFIED_SKIP_REASON as ur, orphansCarriedFrom as us, nestedChildStackName as ut, withResourceDeadline as v, unreadableOrphanRecords as va, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as vc, hasReadableResources as vi, secretBearing as vn, recordLogOnlyParameterValue as vo, isTerminationProtectionPropagationError as vr, loadPublishableAssetManifest as vs, dropFailedHint as vt, PROTECTION_PROPERTY_BY_TYPE as w, withoutSilentDropProperties as wa, AssemblyReader as wc, malformedLocalOutputsWarning as wi, isWholeDynamicReferenceValue as wn, maskSecretsInText as wo, IntrinsicFunctionResolver as wr, getBootstrapMarkerKey as ws, replayFailedOperations as wt, noEchoParameterNamesOf as x, findActionableSilentDrops as xa, PARTITION_TABLE as xc, malformedDriftResourcePropertiesWarning as xi, carriedExportAliasExposure as xn, createSecretMasker as xo, reEnableInstanceApiTermination as xr, BOOTSTRAP_MARKER_PREFIX as xs, loadJournaledOrphans as xt, noEchoAttributeNamesOf as y, unreadableResourceEntries as ya, decodeListingKey as yc, isReadableOrphanRecord as yi, secretBearingStateKeyWarning as yn, recordLogOnlyValue as yo, observeThenDisableInstanceApiTermination as yr, rewriteTemplateAssetReferences as ys, isHandledOrphan as yt, ECR_AUTO_DELETE_IMAGES_TAG as z, coerceCfnInteger as za, malformedStateRefusalMessage as zi, reserveStackCreateToken as zn, recordMaskOnlyValuesIn as zo, isSettledInstanceState as zr, getDockerCmd as zs, replacementNeverSwapped as zt };
|
|
40498
|
-
//# sourceMappingURL=deploy-engine-
|
|
40833
|
+
export { green as $, describeTypeWithThrottleRetry as $a, refuseMalformedResourceAttributesForOrphan as $i, stringifyIfAssigned as $n, isLockInfoExpired as $o, carriesDynamicReference as $r, AssetManifestLoader as $s, updatePartialReason as $t, readProtection as A, findReplacedReadersOfRecreateTargets as Aa, defineOwnKey as Ac, malformedOrphanRecordsRefusalMessage as Ai, collectPublishedOutputNames as An, scrubResourceRecord as Ao, producerRegionsFromState as Ar, readBootstrapMarkerBody as As, destroyStackRecordsView as At, deleteTableWithIndexBusyRetry as B, toFiniteNumber as Ba, clearBucketRegionCache as Bc, malformedResourcesWarning as Bi, earliestDefined as Bn, provenPublicValue as Bo, callerEnvCredentials as Br, finchSecretArgvRefusal as Bs, recheckFailedPlan as Bt, noEchoComparisonForTemplate as C, withheldAccountClause as Ca, expectedOwnerParam as Cc, isReadableResourceEntry as Ci, secretSafeKeyDisplay as Cn, shareLogOnlyValues as Co, reDisableInstanceApiTermination as Cr, AssetModeResolver as Cs, journaledOrphanLines as Ct, PROTECTION_PROPERTY_BY_TYPE as D, withoutSilentDropProperties as Da, AssemblyReader as Dc, malformedLocalOutputsWarning as Di, isWholeDynamicReferenceValue as Dn, maskSecretsInText as Do, IntrinsicFunctionResolver as Dr, getBootstrapMarkerKey as Ds, replayFailedOperations as Dt, recordedProtectionNote as E, unwrittenCreateOnlyReplacement as Ea, derivePartitionAndUrlSuffix as Ec, malformedExportSourceWarning as Ei, exportNameSecretExposure as En, maskSecretsInError as Eo, INTRINSIC_KEYS as Er, ensureAssetStorage as Es, sameJournaledOrphans as Et, deleteBudgetKey as F, renderStatefulReason as Fa, absoluteAssemblyPathEscape as Fc, malformedOutputsRefusalMessage as Fi, maskingRetryLogger as Fn, identityKeyFor as Fo, explicitRoleArnOrThrow as Fr, resolveDockerContextDirectory as Fs, demoteSupersededOrphans as Ft, isTruthyCfnBoolean as G, configStringRefusal as Ga, refuseMalformedNestedChildOutputs as Gi, DBPROXY_TAGS_WHAT as Gn, wholeStringLeavesOf as Go, s3BucketDualStackDomainName as Gr, partitionSensitiveEnv as Gs, findNestedStackTypeChanges as Gt, ECR_AUTO_DELETE_IMAGES_TAG as H, coerceCfnInteger as Ha, malformedStateRefusalMessage as Hi, reserveStackCreateToken as Hn, recordMaskOnlyValuesIn as Ho, isSettledInstanceState as Hr, getDockerCmd as Hs, replacementNeverSwapped as Ht, resolveDynamoDbDeleteBudgetClock as I, WARM_THROUGHPUT_MEMBERS as Ia, describeFileReadFailure as Ic, malformedOutputsWarning as Ii, constructPathOf as In, inheritNestedStackParameterAssociations as Io, isIamRoleArn as Ir, describeDockerCapturedOutput as Is, isJournaledOrphan as It, formatResourceLine as J, requireConfigArray as Ja, refuseMalformedOrphans as Ji, readTagList as Jn, STATE_SOURCED_READBACK_RULES as Jo, coerceParameterTypedValue as Jr, runDockerForeground as Js, REDACTED_DELETE_ADDRESS_SKIP_REASON as Jt, getPriorAttempts as K, readConfigString as Ka, refuseMalformedOrphanRecords as Ki, DBPROXY_TAG_OPTIONS as Kn, STATE_SOURCED_BASELINE_RULES as Ko, s3BucketRegionalDomainName as Kr, redactDockerArgvValues as Ks, getCurrentProducerRegions as Kt, resolveDynamoDbDeleteBudgetMs as L, coerceWarmThroughput as La, displayAssemblyPath as Lc, malformedRenderedContainersWarning as Li, findDestructiveChanges as Ln, recordNestedStackParameterExpressions as Lo, sendableAssumeRoleCommand as Lr, describeDockerExecFailure as Ls, isReplacementOrphan as Lt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as M, MULTI_REGION_RECREATE_BLOCKED_TYPES as Ma, hasPlainPrototype$1 as Mc, malformedOrphanRowsKeptWarning as Mi, bindingSkippedOutputs as Mn, dynamicReferenceTokens as Mo, applyRoleArnIfSet as Mr, validateContainerRepoName as Ms, withStackRecords as Mt, beginDeleteWait as N, isStatefulRecreateTargetForReplace as Na, nullPrototypeRecord as Nc, malformedOrphansRefusalMessage as Ni, DEFAULT_RESOURCE_TIMEOUT_MS as Nn, isUncertifiedBaselineMaskPosition as No, assertFlagRoleArn as Nr, buildDenyExternalAccessPolicy as Ns, removeProtectionTypeList as Nt, isProtectionValueActive as O, NO_CC_HANDLERS_REASON as Oa, StageLoadError as Oc, malformedLocalResourceEntriesWarning as Oi, noEchoParameterValueSeed as On, markSameGenerationBag as Oo, poisonRenderedSpellingsCollidingIn as Or, isCrossRegionRedirect as Os, replayRollback as Ot, compensateRemovedDeletionProtection as P, isStatefulRecreateTargetSync as Pa, ownValue as Pc, malformedOrphansWarning as Pi, DEFAULT_RESOURCE_WARN_AFTER_MS as Pn, pathCrossesDottedKey as Po, assertSendableRoleArn as Pr, buildDockerImage as Ps, recordAfterRollbackUpdate as Pt, gray as Q, templateResourceTypes as Qa, refuseMalformedOutputsForDestroy as Qi, definedAttributes as Qn, LockManager as Qo, isImpossibleEmptyStoredAttribute as Qr, stripControlChars as Qs, updatePartialMessage as Qt, DELETE_INDEX_WAIT_PROCEED_NOTE as R, isWarmThroughputDecrease as Ra, renderAssemblyPathEscape as Rc, malformedResourceEntriesWarning as Ri, formatDestructiveChange as Rn, recoverMaskedOutput as Ro, AWS_CREDENTIAL_ENV_KEYS as Rr, describeDockerFailure as Rs, planFailedOps as Rt, noEchoAttributeNamesOf as S, unreadableResourceEntries as Sa, decodeListingKey as Sc, isReadableOrphanRecord as Si, secretBearingStateKeyWarning as Sn, recordLogOnlyValue as So, observeThenDisableInstanceApiTermination as Sr, rewriteTemplateAssetReferences as Ss, isHandledOrphan as St, recordedProtectionEvidence as T, findSilentDropProperties as Ta, canonicalizeRegion as Tc, malformedExportNamesWarning as Ti, exportNameNoEchoParameters as Tn, errorCauseChain as To, DiffCalculator as Tr, assertAssetBucketRegion as Ts, makeForeignHolderScan as Tt, S3_AUTO_DELETE_OBJECTS_TAG as U, configBooleanRefusal as Ua, previewableOrphanRecords as Ui, withCreateTokenLedger as Un, recordNoEchoAttributeValues as Uo, s3BucketArn as Ur, isDockerClientEnvKey as Us, resolveReplacementOldType as Ut, waitForIndexesSettled as V, coerceCfnBoolean as Va, resolveBucketRegion as Vc, malformedScrubResourceEntriesRefusalMessage as Vi, ledgerForStack as Vn, recordMaskOnlyValue as Vo, envCredentialsAreAssumedRole as Vr, formatDockerLoginError as Vs, recordUnderIdIsNotOwn as Vt, hasCdkAutoDeleteTag as W, configIntegerRefusal as Wa, refuseDivergentRecordRegionForDestroy as Wi, acquireIdempotencyToken as Wn, recordProvenPublicExpression as Wo, s3BucketDomainName as Wr, isMalformedEnvKey as Ws, orphanDeleteNeedsIdentity as Wt, bold as X, requireConfigString as Xa, refuseMalformedOrphansForOrphan as Xi, tagMapAsList as Xn, WHOLE_DYNAMIC_REFERENCE_PATTERN as Xo, parameterTypeMayLoseSecretIdentity as Xr, warnFinchArgvExposure as Xs, redactedDeleteAddressFields as Xt, createReadOnlyAttributeHealerFactory as Y, requireConfigObject as Ya, refuseMalformedOrphansForDestroy as Yi, refuseMalformedDesiredTags as Yn, TEMPLATE_SOURCED_RULES as Yo, isUnboundTemplateParameter as Yr, runDockerStreaming as Ys, isRedactedRecordedValue as Yt, cyan as Z, prefetchCreateOnlyPropertyPaths as Za, refuseMalformedOutputs as Zi, tagPlanWarning as Zn, isSingleDynamicReferenceToken as Zo, getAccountInfo as Zr, escapeRegExp$3 as Zs, redactedDeleteAddressSkip as Zt, makeCanonicalizePropertiesFn as _, repairMalformedResourceEntriesForReadOnly as _a, CFN_TEMPLATE_URL_LIMIT as _c, deployRefusesOrphanRowsReason as _i, extractDeploymentEventError as _n, hasMaskableValues as _o, isWaitAbandonedError as _r, stringifyValue as _s, withNestedRevertRun as _t, findNestedTemplateTreeDefect as a, refuseMalformedResourceEntriesForOrphan as aa, loadCdkJson as ac, isStalePlaceholderArnAttribute as ai, stateSecretNameNeedles as an, TemplateParser as ao, TemplateNoEchoReresolver as ar, exportNamesCarriedFrom as as, resourcesNamingDeclaredParameter as at, serviceTokenBlockingReason as b, unpreviewableOrphanRecords as ba, uploadCfnTemplate as bc, hasReadableOutputs as bi, exportAliasCollisionScrubWarning as bn, printingCorpusOf as bo, ec2InstanceProtectionSite as br, createAssetRedirectResolver as bs, deleteJournaledOrphans as bt, renderNestedTemplateTreeDefect as c, refuseMalformedResourcePropertiesForExport as ca, resolveCaptureObservedState as cc, withSharedDrainBudget as ci, buildFinalSnapshotIdentifier as cn, maskWholeValue as co, getCurrentResourceSecrets as cr, hasUnverifiableParameterRefusal as cs, NESTED_PENDING_PARENT_REASON as ct, conditionInputsFrom as d, refuseMalformedResourcesForDestroy as da, resolveStateBucketWithDefaultAndSource as dc, JSON_LISTING_HOLE_VALUE as di, effectiveDeletionPolicy as dn, noEchoOutputsComparison as do, slowCcOperationTimeoutMs as dr, isReadableBag as ds, dropSettledNestedJournals as dt, refuseMalformedResourceEntries as ea, getDockerImageBySourceHash as ec, carriesFetchableDynamicReference as ei, completedReplayEntries as en, withRetry as eo, CC_BROKEN_REASON as er, S3StateBackend as es, red as et, parentSuppliedValues as f, refuseMalformedResourcesForExport as fa, resolveUseCdkBootstrapAssets as fc, STATE_REGION_DIVERGED as fi, isFinalSnapshotError as fn, passedNoEchoParametersOf as fo, unchangedBehindSecretReference as fr, orphansAfterRollback as fs, getNestedRevertRun as ft, mergeNoChangeOutputs as g, repairMalformedOutputsForReadOnly as ga, CFN_TEMPLATE_BODY_LIMIT as gc, accountArgs as gi, DeploymentEventsStore as gn, createUnionSecretMasker as go, withIndeterminateGuard as gr, isSensitiveAttributeName as gs, revertedNestedRowIds as gt, keptWholeReasonText as h, repairMalformedOrphansForReadOnly as ha, ssmResolvedValueType as hc, UNREADABLE_RESOURCES_MAP_ROW as hi, DeploymentEventsReader as hn, carryLogOnlyValues as ho, deleteSkipReason as hr, AssetPublisher as hs, revertNestedChildFromJournal as ht, childTemplateLoader as i, refuseMalformedResourceEntriesForImportSave as ia, getLegacyStateBucketName as ic, cfnRefValueFromPhysicalId as ii, secretNamePrintingBag as in, DagBuilder as io, wouldReturnToSdkProvider as ir, describeRegionValueKind as is, reachableDivergentParameters as it, DynamoDBGlobalTableProvider as j, shownType as ja, hasOwnKey as jc, malformedOrphanRecordsWarning as ji, isExportAliasCollision as jn, DYNAMIC_REFERENCE_TOKEN_SCAN as jo, regionLessSecretName as jr, validateAssetBucketName as js, getStackRecords as jt, perType as k, hasNoCloudControlHandlers as ka, processStackMessages as kc, malformedLocalResourcesWarning as ki, collectDeclaredOutputNames as kn, redactSecretsForState as ko, classifyReplaySecretRegion as kr, parseBootstrapMarker as ks, awaitInFlightSibling as kt, templateIdentity as l, refuseMalformedResourcePropertiesForOrphan as la, resolveSkipPrefix as lc, parameterInputsFor as li, ccRoutedFinalSnapshotError as ln, maskedLeafCoordinatesOf as lo, withPrintingSecrets as lr, importableOutputKeys as ls, displacedOpClause as lt, isSecretBearingReferenceString as m, repairMalformedOrphanRecordsForReadOnly as ma, warnDeprecatedNoPrefixCliFlag as mc, UNREADABLE_ORPHANS_CONTAINER_ROW as mi, unsupportedFinalSnapshotError as mn, liveMatchesUnresolvedTokenFrame as mo, deleteIndeterminateGuards as mr, shouldRetainResource as ms, recordDisplacedSkips as mt, IMPLICIT_DELETE_DEPENDENCIES as n, refuseMalformedResourceEntriesForDestroy as na, synthesisStatusMessage as nc, keepsSecretReferenceToken as ni, maskEventTextWithBoundBags as nn, lambdaFunctionNameForMask as no, ccBrokenReason as nr, splitImportedOps as ns, computeParameterTaint as nt, isAbsoluteAssetPath as o, refuseMalformedResourcePropertiesForDestroy as oa, resolveApp as oc, refStateLookupFromResource as oi, ATOMIC_FINAL_SNAPSHOT_TYPES as on, isMarkedCoordinate as oo, readsNoEchoDeleteValues as or, hasReadableExportSet as os, makeSiblingClaimReader as ot, readRecordedConditionVerdicts as p, refuseMalformedState as pa, stateBucketExistenceConfirmed as pc, STATE_RESOURCES_MALFORMED as pi, refusesFinalSnapshot as pn, readsNoEchoSource as po, UNSPECIFIED_SKIP_REASON as pr, orphansCarriedFrom as ps, nestedChildStackName as pt, markRefusedBeforeApplying as q, replayWarn as qa, refuseMalformedOrphanRecordsForDestroy as qi, planTagDiff as qn, STATE_SOURCED_CROSS_GENERATION_RULES as qo, s3BucketWebsiteUrl as qr, redactedDockerCause as qs, inheritProducerRegions as qt, computeImplicitDeleteEdges as r, refuseMalformedResourceEntriesForImport as ra, getDefaultStateBucketName as rc, AWS_NO_VALUE as ri, orphanRecordsPrintingBag as rn, sameLambdaFunctionAddress as ro, isCustomResource as rr, acceptedCreateOnlyDropsOf as rs, namesAnyDeclaredParameter as rt, listNestedTemplateRows as s, refuseMalformedResourcePropertiesForDrift as sa, resolveAutoAssetStorage as sc, parseWebACLArn as si, PRE_DELETE_SNAPSHOT_TYPES as sn, maskReadbackAtCoordinates as so, isCustomResourceType as sr, hasReasonlessBaselineRefusal as ss, planOrphanAdoption as st, DeployEngine as t, refuseMalformedResourceEntriesForDeploy as ta, Synthesizer as tc, isNamelessDynamicReferenceError as ti, journaledOrphanPrintingBag as tn, canonicalLambdaFunctionName as to, ProviderRegistry as tr, rebuildClientForBucketRegion as ts, yellow as tt, conditionFingerprint as u, refuseMalformedResourcesForDeploy as ua, resolveStateBucketWithDefault as uc, passedParameterClassesOf as ui, createPreDeleteFinalSnapshot as un, noEchoLeavesOf as uo, CloudControlProvider as ur, importableOutputs as us, displacedPhysicalIdShown as ut, deferredServiceTokenWarning as v, repairMalformedResourcePropertiesForReadOnly as va, MIGRATE_TMP_PREFIX as vc, displayLogicalId as vi, WITHHELD_NAME_DISPLAY as vn, literalSplitDelimitersOf as vo, markWaitAbandoned as vr, WorkGraph as vs, getCurrentNestedStackContext as vt, noEchoParameterNamesOf as w, findActionableSilentDrops as wa, PARTITION_TABLE as wc, malformedDriftResourcePropertiesWarning as wi, carriedExportAliasExposure as wn, createSecretMasker as wo, reEnableInstanceApiTermination as wr, BOOTSTRAP_MARKER_PREFIX as ws, loadJournaledOrphans as wt, withResourceDeadline as x, unreadableOrphanRecords as xa, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as xc, hasReadableResources as xi, secretBearing as xn, recordLogOnlyParameterValue as xo, isTerminationProtectionPropagationError as xr, loadPublishableAssetManifest as xs, dropFailedHint as xt, findServiceTokenRefusals as y, repairMalformedResourcesForReadOnly as ya, findLargeInlineResources as yc, hasReadableOrphans as yi, displayTextOrWithheld as yn, logOnlyValueCount as yo, disableInstanceApiTermination as yr, buildAssetRedirectMap as ys, withNestedStackContext as yt, INDEX_SETTLE_POLL_INTERVAL_MS as z, toCfnInteger as za, resolveAssemblyPath as zc, malformedResourcePropertiesWarning as zi, RollbackInlinePolicyWriters as zn, carriesSecretMask as zo, applyCallerIdentityCredentials as zr, dockerSpawnEnvWithSensitive as zs, planRollback as zt };
|
|
40834
|
+
//# sourceMappingURL=deploy-engine-4vPufRQF.js.map
|