@go-to-k/cdkd 0.296.4 → 0.296.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/{asg-provider-BSdCtfW_.js → asg-provider-C1TlpooI.js} +4 -4
  2. package/dist/{asg-provider-BSdCtfW_.js.map → asg-provider-C1TlpooI.js.map} +1 -1
  3. package/dist/cli.js +2 -2
  4. package/dist/{deploy-engine-HCnNEpdp.js → deploy-engine-BPcBCyUE.js} +315 -140
  5. package/dist/deploy-engine-BPcBCyUE.js.map +1 -0
  6. package/dist/{iam-policy-targets-DSDSdxXz.js → iam-policy-targets-td1X_kKN.js} +2 -2
  7. package/dist/{iam-policy-targets-DSDSdxXz.js.map → iam-policy-targets-td1X_kKN.js.map} +1 -1
  8. package/dist/{iam-role-provider-Be0s-qBx.js → iam-role-provider-CVIClaZV.js} +4 -4
  9. package/dist/{iam-role-provider-Be0s-qBx.js.map → iam-role-provider-CVIClaZV.js.map} +1 -1
  10. package/dist/index.d.ts +9 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -4
  13. package/dist/{logger-Dvc7ddKe.js → logger-DAaB7GFO.js} +2 -2
  14. package/dist/{logger-Dvc7ddKe.js.map → logger-DAaB7GFO.js.map} +1 -1
  15. package/dist/{neptune-provider-ChV-yRZP.js → neptune-provider-CvY6ekmg.js} +4 -4
  16. package/dist/{neptune-provider-ChV-yRZP.js.map → neptune-provider-CvY6ekmg.js.map} +1 -1
  17. package/dist/{program-CwSdIG3b.js → program-CAlg2KEF.js} +28 -23
  18. package/dist/program-CAlg2KEF.js.map +1 -0
  19. package/dist/{provider-classes-DXBYMcmp.js → provider-classes-oRTqcSCp.js} +287 -17
  20. package/dist/provider-classes-oRTqcSCp.js.map +1 -0
  21. package/dist/{rds-provider-DzPUon_U.js → rds-provider-DeGFzOUc.js} +4 -4
  22. package/dist/{rds-provider-DzPUon_U.js.map → rds-provider-DeGFzOUc.js.map} +1 -1
  23. package/dist/{version-D557_3cB.js → version-BgqcIKdb.js} +2 -2
  24. package/dist/{version-D557_3cB.js.map → version-BgqcIKdb.js.map} +1 -1
  25. package/package.json +1 -1
  26. package/dist/deploy-engine-HCnNEpdp.js.map +0 -1
  27. package/dist/program-CwSdIG3b.js.map +0 -1
  28. package/dist/provider-classes-DXBYMcmp.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { r as getAwsClients, s as __exportAll } from "./aws-clients-CnmtbrxD.js";
2
- import { A as displaySafe, E as UNRENDERABLE, F as safeMsg, L as truncateCodePoints, M as isPasteableIdent, O as displayAwsMessage, P as plainIdentOr, S as withoutGeneratedFallbackName, T as STACK_REF_MAX_CODE_POINTS, _ as getCurrentSkipPrefix, b as withSkipPrefix, c as getLiveRenderer, f as applyDefaultNameForFallback, g as generateResourceNameWithFallback, h as generateResourceName, j as displayStackName, k as displayIdent, m as explicitNamePropertyFor, n as getLogger, r as isStdoutReservedForPayload, s as installLogLineMaskerSource, v as getCurrentStackName, w as SECRET_REF_MAX_CODE_POINTS, x as withStackName, y as looksLikeCdkdGeneratedName } from "./logger-Dvc7ddKe.js";
3
- import { $n as markRedactedCause, $t as LockError, A as isTerminalDeleteFailure, At as CUSTOM_RESOURCE_RESPONSE_PREFIX, Bn as isAmbiguousCcHandlerErrorCode, Bt as clientDefaultsFor, C as refusalTypeShown, Cn as physicalIdShownBesideCommand, Ct as buildForceUnlockCommand, D as ProtectionFlipRegistry, Dn as shellQuote, Dt as formatLockOperation, En as shellBoundedDisplay, Et as formatLockExpiry, Fn as isRecreateRetryableError, Ft as producerRecordKey, Gn as retryClassificationText, H as pasteableAwsCommand, Hn as isIamPropagationError, Ht as AccountIdUnavailableError, In as isReplayedNameCollisionFrom, J as isInterruptedWaitError, Jn as safeStringify$1, Kn as describeAwsFailure, Kt as CrossAccountSecretRefusalError, Lt as withPasteableAwsProfile, M as observeThenDisableProtection, Mn as hasReplayMayCollide, Mt as injectiveKey, N as protectionFlipKey, Nn as isNameCollisionErrorFrom, O as compensateProtectionFlip, On as withheldTargetClause, Ot as formatLockOwner, Pn as isNameCooldownError, Q as canonicalizeRoute53QueryName, Qn as markNonRetryable, R as DELETION_PROTECTION_DOC_POINTER, Rn as markReplayMayCollide, Rt as ambientClientDefaults, S as quotedRemedyLogicalId, Sn as pasteableCommand, St as UNREPRODUCIBLE_LOCK_CLAUSE, T as resolveExplicitPhysicalId, Tn as quotedOrDescribed, U as protectedReplacementAdvice, Un as isRetryableTransientError, Ut as AssetError, Vn as isAmbiguousOutcomeError, Vt as credentialFingerprint, Wn as isTransientServerError, Wt as CdkdError, X as ElapsedBudgetRegistry, Xn as isMarkedNonRetryable, Xt as IntrinsicResolutionRefusalError, Y as startInterruptWatch, Yt as DynamicReferenceRegionAmbiguousError, Z as monotonicNowMs, Zn as isThrottlingError, _n as SHELL_ACTIVE_WHY, _t as hasCreatedBeforeFailure, an as ResourceTimeoutError, at as segmentAfterAnchor, b as isQuotableImportValue, bt as markAuxiliaryFailure, ct as createMaskedRetryLogger, d as prepareRemovalForUpdate, dt as maskerOrIdentity, en as MacroExpansionError, er as wrapMaskedAwsError, et as compositeIdSeparatorRefusal, f as removalWarning, ft as withDerivedNameMasks, g as assertRegionMatch, gn as SHELL_ACTIVE, gt as createdBeforeFailure, h as RESOURCE_NOT_FOUND, i as holdsSecretDerivedEntry, in as ProvisioningError, it as resourceTypeShown, jn as isUpdateUnsupportedError, jt as DEFAULT_STATE_PREFIX, k as deleteWithProtectionCompensation, kt as sanitizeRecoveryValue, l as withUnchangedSecretPrincipalLists, ln as StateError, lt as isSecretDerivedValue, m as withoutInjectedRemovals, mt as carryCreatedBeforeFailure, nt as logicalIdShown, on as ResourceUpdateNotSupportedError, ot as stateOrphanRecordRemedy, pn as normalizeAwsError, pt as RETRY_AUXILIARY_OWNER, qt as DependencyError, st as createMaskedLogSinks, tn as MalformedProducerRecordRefusalError, un as SynthesisError, ut as maskDeep, vn as UNSHOWABLE_VALUE, vt as isAuxiliaryFailure, wn as plainOrDescribed, x as normalizeAwsTagsToCfn, xn as isInertUnquoted, xt as markCreatedBeforeFailure, yn as commandHole, yt as isAuxiliaryMarkOf, zn as formatRetryClassificationSignals, zt as ambientCredentialConfig } from "./iam-policy-targets-DSDSdxXz.js";
2
+ import { A as displayIdent, C as withoutGeneratedFallbackName, D as UNRENDERABLE, E as STACK_REF_MAX_CODE_POINTS, F as plainIdentOr, I as safeMsg, M as displayStackName, N as isPasteableIdent, R as truncateCodePoints, S as withStackName, T as SECRET_REF_MAX_CODE_POINTS, _ as generateResourceNameWithFallback, b as looksLikeCdkdGeneratedName, c as installLogLineMaskerSource, g as generateResourceName, h as explicitNamePropertyFor, j as displaySafe, k as displayAwsMessage, l as getLiveRenderer, n as getLogger, p as applyDefaultNameForFallback, r as isStdoutReservedForPayload, s as currentLogLineMasker, v as getCurrentSkipPrefix, x as withSkipPrefix, y as getCurrentStackName } from "./logger-DAaB7GFO.js";
3
+ import { $n as markRedactedCause, $t as LockError, A as isTerminalDeleteFailure, At as CUSTOM_RESOURCE_RESPONSE_PREFIX, Bn as isAmbiguousCcHandlerErrorCode, Bt as clientDefaultsFor, C as refusalTypeShown, Cn as physicalIdShownBesideCommand, Ct as buildForceUnlockCommand, D as ProtectionFlipRegistry, Dn as shellQuote, Dt as formatLockOperation, En as shellBoundedDisplay, Et as formatLockExpiry, Fn as isRecreateRetryableError, Ft as producerRecordKey, Gn as retryClassificationText, H as pasteableAwsCommand, Hn as isIamPropagationError, Ht as AccountIdUnavailableError, In as isReplayedNameCollisionFrom, J as isInterruptedWaitError, Jn as safeStringify$1, Kn as describeAwsFailure, Kt as CrossAccountSecretRefusalError, Lt as withPasteableAwsProfile, M as observeThenDisableProtection, Mn as hasReplayMayCollide, Mt as injectiveKey, N as protectionFlipKey, Nn as isNameCollisionErrorFrom, O as compensateProtectionFlip, On as withheldTargetClause, Ot as formatLockOwner, Pn as isNameCooldownError, Q as canonicalizeRoute53QueryName, Qn as markNonRetryable, R as DELETION_PROTECTION_DOC_POINTER, Rn as markReplayMayCollide, Rt as ambientClientDefaults, S as quotedRemedyLogicalId, Sn as pasteableCommand, St as UNREPRODUCIBLE_LOCK_CLAUSE, T as resolveExplicitPhysicalId, Tn as quotedOrDescribed, U as protectedReplacementAdvice, Un as isRetryableTransientError, Ut as AssetError, Vn as isAmbiguousOutcomeError, Vt as credentialFingerprint, Wn as isTransientServerError, Wt as CdkdError, X as ElapsedBudgetRegistry, Xn as isMarkedNonRetryable, Xt as IntrinsicResolutionRefusalError, Y as startInterruptWatch, Yt as DynamicReferenceRegionAmbiguousError, Z as monotonicNowMs, Zn as isThrottlingError, _n as SHELL_ACTIVE_WHY, _t as hasCreatedBeforeFailure, an as ResourceTimeoutError, at as segmentAfterAnchor, b as isQuotableImportValue, bt as markAuxiliaryFailure, ct as createMaskedRetryLogger, d as prepareRemovalForUpdate, dt as maskerOrIdentity, en as MacroExpansionError, er as wrapMaskedAwsError, et as compositeIdSeparatorRefusal, f as removalWarning, ft as withDerivedNameMasks, g as assertRegionMatch, gn as SHELL_ACTIVE, gt as createdBeforeFailure, h as RESOURCE_NOT_FOUND, i as holdsSecretDerivedEntry, in as ProvisioningError, it as resourceTypeShown, jn as isUpdateUnsupportedError, jt as DEFAULT_STATE_PREFIX, k as deleteWithProtectionCompensation, kt as sanitizeRecoveryValue, l as withUnchangedSecretPrincipalLists, ln as StateError, lt as isSecretDerivedValue, m as withoutInjectedRemovals, mt as carryCreatedBeforeFailure, nt as logicalIdShown, on as ResourceUpdateNotSupportedError, ot as stateOrphanRecordRemedy, pn as normalizeAwsError, pt as RETRY_AUXILIARY_OWNER, qt as DependencyError, st as createMaskedLogSinks, tn as MalformedProducerRecordRefusalError, un as SynthesisError, ut as maskDeep, vn as UNSHOWABLE_VALUE, vt as isAuxiliaryFailure, wn as plainOrDescribed, x as normalizeAwsTagsToCfn, xn as isInertUnquoted, xt as markCreatedBeforeFailure, yn as commandHole, yt as isAuxiliaryMarkOf, zn as formatRetryClassificationSignals, zt as ambientCredentialConfig } from "./iam-policy-targets-td1X_kKN.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-D557_3cB.js";
5
+ import { t as getCdkdVersion } from "./version-BgqcIKdb.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";
@@ -15777,6 +15777,15 @@ function hasStringPhysicalId(entry) {
15777
15777
  const physicalId = entry.physicalId;
15778
15778
  return typeof physicalId === "string" && physicalId !== "";
15779
15779
  }
15780
+ function hasAddressablePhysicalId(entry) {
15781
+ const physicalId = entry.physicalId;
15782
+ return typeof physicalId === "string" && physicalId.trim() !== "";
15783
+ }
15784
+ function unaddressableUpdateRefusalMessage(rawStackName, rawRegion, logicalId, resourceType) {
15785
+ const stackName = absentIfEmpty(rawStackName);
15786
+ const region = absentIfEmpty(rawRegion);
15787
+ return `${stackClause(stackName, region)} holds a record for ${displayIdent(logicalId)} (${displayIdent(resourceType)}) with no non-empty string 'physicalId', so cdkd cannot address that resource in AWS and did not try to update it. 'cdkd deploy' fails on it rather than skipping it, since a skipped update would end the deploy without the template's change. Nothing was sent for this resource. Repair the record's 'physicalId' and re-run. ${inspectClause(stackName, region)}Inspect the record with: ` + inspectCommand(stackName, region);
15788
+ }
15780
15789
  function unpreviewableOrphanRecords(state) {
15781
15790
  if (!Array.isArray(state.orphans)) return [];
15782
15791
  const rows = state.orphans;
@@ -21291,6 +21300,11 @@ function deleteSkipReason(result) {
21291
21300
  const trimmed = result.reason.trim();
21292
21301
  return trimmed === "" ? UNSPECIFIED_SKIP_REASON : trimmed;
21293
21302
  }
21303
+ function deleteLeftInPlace(result) {
21304
+ if (result === void 0 || result.outcome !== "deleted") return void 0;
21305
+ const left = result.leftInPlace;
21306
+ return typeof left === "string" && left.length > 0 ? left : void 0;
21307
+ }
21294
21308
  const UNSPECIFIED_SKIP_REASON = "no reason reported by the provider";
21295
21309
  function deleteSkippedMessage(logicalId, physicalId, reason, duringClause, opts) {
21296
21310
  return `cdkd did not confirm ${plainOrDescribed(logicalId, "logical id")} (${opts?.commandFreeLine === true ? displayIdent(physicalId, { maxCodePoints: 613 }) : skipPhysicalIdShown(physicalId)}) was deleted ${duringClause}, so it may still exist: ${skipReasonShown(reason)}`;
@@ -22036,7 +22050,7 @@ var CloudControlProvider = class {
22036
22050
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
22037
22051
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
22038
22052
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
22039
- const { ASGProvider } = await import("./asg-provider-BSdCtfW_.js");
22053
+ const { ASGProvider } = await import("./asg-provider-C1TlpooI.js");
22040
22054
  const delegateRegion = ambientRegion();
22041
22055
  let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
22042
22056
  if (asgProvider === void 0) {
@@ -22142,7 +22156,7 @@ var CloudControlProvider = class {
22142
22156
  const family = SDK_DELETE_FAMILIES.get(resourceType);
22143
22157
  const cached = this.sdkDeleteDelegates.get(family);
22144
22158
  if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
22145
- const provider = family === "rds" ? new (await (import("./rds-provider-DzPUon_U.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-ChV-yRZP.js"))).NeptuneProvider({ region: ccRegion });
22159
+ const provider = family === "rds" ? new (await (import("./rds-provider-DeGFzOUc.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-CvY6ekmg.js"))).NeptuneProvider({ region: ccRegion });
22146
22160
  this.sdkDeleteDelegates.set(family, {
22147
22161
  region: ccRegion,
22148
22162
  provider
@@ -23322,6 +23336,9 @@ function describeCfnResponseBody(body, parsed) {
23322
23336
  const line = `Status=${capForLog(status)} PhysicalResourceId=${capForLog(physicalId)} ${dataPart}`;
23323
23337
  return line.length > DESCRIBE_MAX_LINE_CHARS ? `${line.slice(0, DESCRIBE_MAX_LINE_CHARS)}...(${line.length} chars total)` : line;
23324
23338
  }
23339
+ function respondedPhysicalId(response) {
23340
+ return hasAddressablePhysicalId({ physicalId: response.PhysicalResourceId }) ? response.PhysicalResourceId : void 0;
23341
+ }
23325
23342
  var CustomResourceProvider = class CustomResourceProvider {
23326
23343
  lambdaClient;
23327
23344
  snsClient;
@@ -23428,7 +23445,7 @@ var CustomResourceProvider = class CustomResourceProvider {
23428
23445
  ResourceProperties: this.stringifyProperties(properties)
23429
23446
  }), maskerOrIdentity(context?.maskSecrets));
23430
23447
  if (cfnResponse.Status === "FAILED") throw new Error(`Custom resource handler returned FAILED: ${cfnResponse.Reason || "Unknown reason"}`);
23431
- const physicalId = cfnResponse.PhysicalResourceId || logicalId;
23448
+ const physicalId = respondedPhysicalId(cfnResponse) ?? logicalId;
23432
23449
  const attributes = cfnResponse.Data || {};
23433
23450
  this.logger.debug(`Successfully created custom resource ${logicalId}: ${physicalId}`);
23434
23451
  return {
@@ -23461,7 +23478,7 @@ var CustomResourceProvider = class CustomResourceProvider {
23461
23478
  OldResourceProperties: this.stringifyProperties(previousProperties)
23462
23479
  }), maskerOrIdentity(context?.maskSecrets));
23463
23480
  if (cfnResponse.Status === "FAILED") throw new Error(`Custom resource handler returned FAILED: ${cfnResponse.Reason || "Unknown reason"}`);
23464
- const newPhysicalId = cfnResponse.PhysicalResourceId || physicalId;
23481
+ const newPhysicalId = respondedPhysicalId(cfnResponse) ?? physicalId;
23465
23482
  const wasReplaced = newPhysicalId !== physicalId;
23466
23483
  const attributes = cfnResponse.Data || {};
23467
23484
  this.logger.debug(`Successfully updated custom resource ${logicalId}: ${newPhysicalId}${wasReplaced ? " (replaced)" : ""}`);
@@ -27429,44 +27446,6 @@ var DeploymentEventsReader = class {
27429
27446
  }
27430
27447
  };
27431
27448
 
27432
- //#endregion
27433
- //#region src/deployment/update-outcome.ts
27434
- function updatePartialReason(result) {
27435
- if (!result || result.outcome !== "partial") return void 0;
27436
- if (typeof result.reason !== "string") return UNSPECIFIED_PARTIAL_REASON;
27437
- const trimmed = result.reason.trim();
27438
- return trimmed === "" ? UNSPECIFIED_PARTIAL_REASON : trimmed;
27439
- }
27440
- const UNSPECIFIED_PARTIAL_REASON = "provider reported a partial update without a reason";
27441
- function updatePartialMessage(reason) {
27442
- return `partial (${reason})`;
27443
- }
27444
-
27445
- //#endregion
27446
- //#region src/provisioning/redacted-delete-address.ts
27447
- function isRedactedRecordedValue(value) {
27448
- if (carriesSecretMask(value)) return true;
27449
- let text;
27450
- try {
27451
- text = typeof value === "string" ? value : JSON.stringify(value);
27452
- } catch {
27453
- return false;
27454
- }
27455
- return text !== void 0 && dynamicReferenceTokens(text).length > 0;
27456
- }
27457
- const REDACTED_DELETE_ADDRESS_SKIP_REASON = "redacted address property in state — no delete issued";
27458
- function redactedDeleteAddressFields(fields) {
27459
- return Object.keys(fields).filter((key) => isRedactedRecordedValue(fields[key]));
27460
- }
27461
- function redactedDeleteAddressSkip(logger, logicalId, what, redactedFields, context) {
27462
- if (redactedFields.length === 0) return void 0;
27463
- logger.warn(safeMsg`${what} ${logicalId} is recorded in state with ${redactedFields.join(", ")} ` + "redacted (the '***' mask of a NoEcho value it read, or a secret '{{resolve:...}}' reference), which names nothing in AWS; skipping deletion — no AWS call is issued, so the resource is LEFT IN PLACE unless a parent resource this run also deletes removes it (then only the record is stale). Re-deploying records the same redaction again. The state record is KEPT and the run reports the skip: on 'cdkd destroy' / 'cdkd state destroy' (which exits non-zero) and, since issue 1762, on the plain DELETE of a resource removed from the template during cdkd deploy. Remove the resource by hand, " + safeMsg`then drop the record with ${stateOrphanRecordRemedy(context, logicalId)}. ` + "NOTE a deploy-side REPLACEMENT or rollback delete instead FAILS the resource (https://github.com/go-to-k/cdkd/issues/1762) — the old resource is left untracked there, so remove it by hand.");
27464
- return {
27465
- outcome: "skipped",
27466
- reason: REDACTED_DELETE_ADDRESS_SKIP_REASON
27467
- };
27468
- }
27469
-
27470
27449
  //#endregion
27471
27450
  //#region src/provisioning/final-snapshot.ts
27472
27451
  const ATOMIC_FINAL_SNAPSHOT_TYPES = /* @__PURE__ */ new Set([
@@ -28112,6 +28091,172 @@ async function prepareCreateRollbackFinalSnapshot(op, provisionedBy, ctx, mask)
28112
28091
  }
28113
28092
  }
28114
28093
 
28094
+ //#endregion
28095
+ //#region src/deployment/secret-name-needles.ts
28096
+ function secretNameNeedlesOf(logicalId, record, secrets, options) {
28097
+ const physicalId = typeof record?.physicalId === "string" && record.physicalId !== "" ? record.physicalId : void 0;
28098
+ const bag = secrets !== void 0 && hasMaskableValues(secrets) ? secrets : void 0;
28099
+ const mask = (text) => bag === void 0 ? text : maskSecretsInText(text, bag);
28100
+ const unresolved = (value) => value.includes("{{resolve:") || value === "***";
28101
+ const named = {
28102
+ resourceType: record?.resourceType,
28103
+ properties: record?.properties,
28104
+ logicalId
28105
+ };
28106
+ const needles = /* @__PURE__ */ new Set();
28107
+ const add = (needle) => {
28108
+ if (typeof needle === "string" && needle !== "") needles.add(needle);
28109
+ };
28110
+ for (const [raw, derived] of secretDerivedNamePairs({
28111
+ ...named,
28112
+ physicalIds: []
28113
+ })) if (typeof raw === "string" && !unresolved(raw) && isSecretDerivedValue(raw, mask)) add(derived);
28114
+ for (const [raw, spelling] of secretDerivedNamePairs({
28115
+ ...named,
28116
+ physicalIds: [physicalId ?? "cdkd-no-physical-id-yet"]
28117
+ })) {
28118
+ if (!isSecretDerivedValue(raw, mask)) continue;
28119
+ if (unresolved(raw)) {
28120
+ if (physicalId === void 0) continue;
28121
+ add(spelling);
28122
+ } else {
28123
+ add(raw);
28124
+ if (raw.toLowerCase() !== raw && raw.length >= 4) add(raw.toLowerCase());
28125
+ }
28126
+ }
28127
+ const properties = record?.properties;
28128
+ const path = properties !== null && typeof properties === "object" && Object.hasOwn(properties, "Path") ? properties["Path"] : void 0;
28129
+ if (physicalId !== void 0 && isSecretDerivedValue(path, mask)) add(physicalId);
28130
+ const embedded = options === void 0 ? secrets : options.embedded;
28131
+ const embeddedBag = embedded !== void 0 && hasMaskableValues(embedded) ? embedded : void 0;
28132
+ if (embeddedBag !== void 0 && physicalId !== void 0) {
28133
+ for (const needle of printingCorpusOf(embeddedBag).keys()) if (needle !== "" && (needle === physicalId || needle.length >= 4 && physicalId.includes(needle))) add(needle);
28134
+ }
28135
+ return needles.size > 0 ? needles : void 0;
28136
+ }
28137
+ function secretNamesReadBy(logicalId, record, resources, judge = () => ({
28138
+ secrets: void 0,
28139
+ embedded: void 0
28140
+ })) {
28141
+ const read = /* @__PURE__ */ new Set();
28142
+ const leaves = [...wholeStringLeavesOf(record?.properties)].filter((leaf) => leaf !== "");
28143
+ if (leaves.length === 0) return read;
28144
+ for (const [otherId, other] of Object.entries(resources)) {
28145
+ if (otherId === logicalId) continue;
28146
+ const bags = judge(otherId);
28147
+ const needles = secretNameNeedlesOf(otherId, other, bags.secrets, { embedded: bags.embedded });
28148
+ if (needles === void 0) continue;
28149
+ for (const needle of needles) if (leaves.some((leaf) => leaf === needle || needle.length >= 4 && leaf.includes(needle))) read.add(needle);
28150
+ }
28151
+ return read;
28152
+ }
28153
+ function stateSecretNameNeedles(resources, secrets) {
28154
+ return (logicalId) => secretNameNeedlesOf(logicalId, Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0, secrets, { embedded: void 0 });
28155
+ }
28156
+ function secretNamePrintingBag(logicalId, resources) {
28157
+ const bag = /* @__PURE__ */ new Map();
28158
+ const record = Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0;
28159
+ for (const needle of secretNameNeedlesOf(logicalId, record, void 0) ?? []) recordLogOnlyValue(bag, needle);
28160
+ for (const needle of secretNamesReadBy(logicalId, record, resources)) recordLogOnlyValue(bag, needle);
28161
+ return bag;
28162
+ }
28163
+ function journaledOrphanPrintingBag(ops, stateResources) {
28164
+ const bag = /* @__PURE__ */ new Map();
28165
+ for (const op of ops) {
28166
+ const record = {
28167
+ resourceType: op.resourceType,
28168
+ physicalId: op.physicalId,
28169
+ properties: op.attemptedProperties
28170
+ };
28171
+ const replaced = Object.hasOwn(stateResources, op.logicalId) ? stateResources[op.logicalId] : void 0;
28172
+ for (const needle of [
28173
+ ...secretNameNeedlesOf(op.logicalId, record, void 0) ?? [],
28174
+ ...secretNameNeedlesOf(op.logicalId, replaced, void 0) ?? [],
28175
+ ...secretNamesReadBy(op.logicalId, record, stateResources)
28176
+ ]) recordLogOnlyValue(bag, needle);
28177
+ }
28178
+ return bag;
28179
+ }
28180
+ function completedReplayEntries(ops) {
28181
+ return ops.flatMap((op) => [{
28182
+ logicalId: op.logicalId,
28183
+ resourceType: op.resourceType,
28184
+ physicalId: op.physicalId,
28185
+ properties: op.properties,
28186
+ attemptedProperties: op.properties
28187
+ }, ...op.previousState === void 0 ? [] : [{
28188
+ logicalId: op.logicalId,
28189
+ resourceType: op.previousState.resourceType,
28190
+ physicalId: op.previousState.physicalId,
28191
+ properties: op.previousState.properties,
28192
+ attemptedProperties: op.previousState.properties
28193
+ }]]);
28194
+ }
28195
+ function orphanRecordsPrintingBag(records) {
28196
+ const bag = /* @__PURE__ */ new Map();
28197
+ for (const entry of records) {
28198
+ if (entry === null || typeof entry !== "object") continue;
28199
+ const { logicalId, state } = entry;
28200
+ if (typeof logicalId !== "string" || state === null || typeof state !== "object") continue;
28201
+ for (const needle of secretNameNeedlesOf(logicalId, state, void 0) ?? []) recordLogOnlyValue(bag, needle);
28202
+ }
28203
+ return bag;
28204
+ }
28205
+ const ORPHAN_COMMAND_LABEL = "To orphan it: ";
28206
+ function maskEventTextWithBoundBags(event) {
28207
+ if (event.reason === void 0 && event.error === void 0) return event;
28208
+ const mask = currentLogLineMasker();
28209
+ if (mask === void 0) return event;
28210
+ const masked = { ...event };
28211
+ if (masked.error?.message) {
28212
+ const message = masked.error.ownLines === true ? masked.error.message.split("\n").map((line) => line.startsWith(ORPHAN_COMMAND_LABEL) ? line : mask(line)).join("\n") : mask(masked.error.message);
28213
+ masked.error = {
28214
+ ...masked.error,
28215
+ message
28216
+ };
28217
+ }
28218
+ if (masked.reason) masked.reason = mask(masked.reason);
28219
+ return masked;
28220
+ }
28221
+
28222
+ //#endregion
28223
+ //#region src/deployment/update-outcome.ts
28224
+ function updatePartialReason(result) {
28225
+ if (!result || result.outcome !== "partial") return void 0;
28226
+ if (typeof result.reason !== "string") return UNSPECIFIED_PARTIAL_REASON;
28227
+ const trimmed = result.reason.trim();
28228
+ return trimmed === "" ? UNSPECIFIED_PARTIAL_REASON : trimmed;
28229
+ }
28230
+ const UNSPECIFIED_PARTIAL_REASON = "provider reported a partial update without a reason";
28231
+ function updatePartialMessage(reason) {
28232
+ return `partial (${reason})`;
28233
+ }
28234
+
28235
+ //#endregion
28236
+ //#region src/provisioning/redacted-delete-address.ts
28237
+ function isRedactedRecordedValue(value) {
28238
+ if (carriesSecretMask(value)) return true;
28239
+ let text;
28240
+ try {
28241
+ text = typeof value === "string" ? value : JSON.stringify(value);
28242
+ } catch {
28243
+ return false;
28244
+ }
28245
+ return text !== void 0 && dynamicReferenceTokens(text).length > 0;
28246
+ }
28247
+ const REDACTED_DELETE_ADDRESS_SKIP_REASON = "redacted address property in state — no delete issued";
28248
+ function redactedDeleteAddressFields(fields) {
28249
+ return Object.keys(fields).filter((key) => isRedactedRecordedValue(fields[key]));
28250
+ }
28251
+ function redactedDeleteAddressSkip(logger, logicalId, what, redactedFields, context) {
28252
+ if (redactedFields.length === 0) return void 0;
28253
+ logger.warn(safeMsg`${what} ${logicalId} is recorded in state with ${redactedFields.join(", ")} ` + "redacted (the '***' mask of a NoEcho value it read, or a secret '{{resolve:...}}' reference), which names nothing in AWS; skipping deletion — no AWS call is issued, so the resource is LEFT IN PLACE unless a parent resource this run also deletes removes it (then only the record is stale). Re-deploying records the same redaction again. The state record is KEPT and the run reports the skip: on 'cdkd destroy' / 'cdkd state destroy' (which exits non-zero) and, since issue 1762, on the plain DELETE of a resource removed from the template during cdkd deploy. Remove the resource by hand, " + safeMsg`then drop the record with ${stateOrphanRecordRemedy(context, logicalId)}. ` + "NOTE a deploy-side REPLACEMENT or rollback delete instead FAILS the resource (https://github.com/go-to-k/cdkd/issues/1762) — the old resource is left untracked there, so remove it by hand.");
28254
+ return {
28255
+ outcome: "skipped",
28256
+ reason: REDACTED_DELETE_ADDRESS_SKIP_REASON
28257
+ };
28258
+ }
28259
+
28115
28260
  //#endregion
28116
28261
  //#region src/deployment/rollback-executor/replay-inline-policy-restore.ts
28117
28262
  async function restoreHeldInlinePolicies(writers, stateResources, stackName, ctx, result, options = {}) {
@@ -28244,7 +28389,8 @@ var ReplayResolvers = class {
28244
28389
  };
28245
28390
  function regionAmbiguousReplaySecretError(logicalId, propertyPath, secretName, foreignProducerRegions, consumerRegion, execCtx) {
28246
28391
  const where = propertyPath === "" ? "" : ` property ${quotedPlainOr(propertyPath, "property path")}`;
28247
- return new CdkdError(`Rollback of ${shownLogicalId(logicalId)}${where} cannot re-resolve the secret reference ${quotedPlainOr(secretName, "secret name")}: the reference carries no region of its own, and this stack read across a region boundary (producer region(s) on record: ${foreignProducerRegions.map((r) => plainOrDescribed(r, "region")).join(", ")}), so it may have been resolved in one of those rather than in ${quotedOrDescribed(consumerRegion, "region")}. A secret of the same name in two regions is two independent values, so replaying this would write the WRONG secret to a live resource. Refusing instead. Resolve the reference in its own region and set the property directly (or spell it as a full ARN, which names its region and is resolved there), then re-run ${rerunRollbackPhrase(execCtx, "'cdkd rollback'")}.`, "ROLLBACK_SECRET_REGION_AMBIGUOUS");
28392
+ const error = new CdkdError(`Rollback of ${shownLogicalId(logicalId)}${where} cannot re-resolve the secret reference ${quotedPlainOr(secretName, "secret name")}: the reference carries no region of its own, and this stack read across a region boundary (producer region(s) on record: ${foreignProducerRegions.map((r) => plainOrDescribed(r, "region")).join(", ")}), so it may have been resolved in one of those rather than in ${quotedOrDescribed(consumerRegion, "region")}. A secret of the same name in two regions is two independent values, so replaying this would write the WRONG secret to a live resource. Refusing instead. Resolve the reference in its own region and set the property directly (or spell it as a full ARN, which names its region and is resolved there), then re-run ${rerunRollbackPhrase(execCtx, "'cdkd rollback'")}.`, "ROLLBACK_SECRET_REGION_AMBIGUOUS");
28393
+ return markNonRetryable(error);
28248
28394
  }
28249
28395
  function refuseUnprovenReplaySecret(leaf, propertyPath, logicalId, execCtx) {
28250
28396
  if (execCtx.producerRegionsIncomplete !== true) return;
@@ -29329,7 +29475,8 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
29329
29475
  skipped: 0,
29330
29476
  interrupted: false,
29331
29477
  remainingFailedOps: [],
29332
- orphaned: []
29478
+ orphaned: [],
29479
+ leftInPlace: 0
29333
29480
  };
29334
29481
  const { logger } = ctx;
29335
29482
  const resolver = new ReplayResolvers(ctx.region);
@@ -29436,7 +29583,12 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
29436
29583
  ...finalSnapshotIdentifier !== void 0 && { finalSnapshotIdentifier },
29437
29584
  ...ctx.skipFinalSnapshot === true && { skipFinalSnapshot: true },
29438
29585
  deletionPolicy: snapshotPolicy ? "Snapshot" : "Delete",
29439
- recordedAttributes: failedCreateRecord?.attributes
29586
+ recordedAttributes: failedCreateRecord?.attributes,
29587
+ ...op.physicalIdRecoveredFromError === true && {
29588
+ failedCreateOrphan: true,
29589
+ resolveAttemptedProperties: () => resolveReplayProps(op.attemptedProperties, resolver, secrets, ctx, op.logicalId),
29590
+ ...ctx.writtenThisRun !== void 0 && { writtenThisRun: ctx.writtenThisRun }
29591
+ }
29440
29592
  });
29441
29593
  throwIfDeleteSkipped(failedCreateDelete, op.logicalId, op.physicalId, "while deleting the partially-created resource", {
29442
29594
  ctx,
@@ -29445,6 +29597,12 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
29445
29597
  provisionedBy: deleteRoutedVia,
29446
29598
  mask
29447
29599
  });
29600
+ const leftInPlace = deleteLeftInPlace(failedCreateDelete);
29601
+ if (leftInPlace !== void 0) {
29602
+ logger.warn(safeMsg` Rollback: deleted partially-created ${shownLogicalId(op.logicalId)} (${refusalResourceType(op.resourceType)}) only in part — ${leftInPlace}; manual attention may be required`);
29603
+ result.warnings++;
29604
+ result.leftInPlace++;
29605
+ }
29448
29606
  if (!isReplacementOrphan(op)) delete stateResources[op.logicalId];
29449
29607
  await options.afterOp?.(op.logicalId);
29450
29608
  ctx.recordEvent?.({
@@ -29831,7 +29989,7 @@ async function revertNestedChildFromJournal(args) {
29831
29989
  providerRegistry: ctx.providerRegistry,
29832
29990
  region,
29833
29991
  logger,
29834
- ...ctx.options?.eventRecorder && { recordEvent: (event) => ctx.options.eventRecorder.record(event) },
29992
+ ...ctx.options?.eventRecorder && { recordEvent: (event) => ctx.options.eventRecorder.record(maskEventTextWithBoundBags(event)) },
29835
29993
  finalSnapshotClients: ctx.options?.finalSnapshotClients,
29836
29994
  skipFinalSnapshot: ctx.options?.skipFinalSnapshot === true || ctx.destroyOptions?.skipFinalSnapshot === true,
29837
29995
  importedProducerRegions: producerRegions.regions,
@@ -29853,11 +30011,11 @@ async function revertNestedChildFromJournal(args) {
29853
30011
  const skipPrefix = segment.skipPrefix ?? getCurrentSkipPrefix();
29854
30012
  const split = splitImportedOps(segment.operations, segment);
29855
30013
  const result = await withNestedStackContext(childCtx, () => withSkipPrefix(skipPrefix, () => withStackName(childStackName, () => withCreateTokenLedger(ledgerForStack(ctx.stateBackend, childStackName, region), () => withNestedRevertRun(runId, async (inner) => {
29856
- const replayed = await replayRollback(split.replay, stateResources, childStackName, execCtx, {
30014
+ const replayed = await withPrintingSecrets(journaledOrphanPrintingBag(completedReplayEntries(split.replay), stateResources), () => replayRollback(split.replay, stateResources, childStackName, execCtx, {
29857
30015
  afterOp: save,
29858
30016
  onOrphan: (record) => mintedOrphans.push(record),
29859
30017
  inlinePolicyWriters
29860
- });
30018
+ }));
29861
30019
  for (const [id, below] of inner.settled) settledBelow.set(id, below);
29862
30020
  return {
29863
30021
  ...replayed,
@@ -30083,24 +30241,32 @@ async function deleteJournaledOrphans(orphans, stateResources, stackName, ctx, o
30083
30241
  failures: 0,
30084
30242
  warnings: 0,
30085
30243
  interrupted: false,
30086
- handled: []
30244
+ handled: [],
30245
+ leftInPlace: 0
30087
30246
  };
30088
30247
  const inlinePolicyWriters = new RollbackInlinePolicyWriters();
30248
+ const record = ctx.recordEvent;
30249
+ const printing = journaledOrphanPrintingBag(orphans.segments.flatMap(({ ops, companions }) => [...companions ?? [], ...ops]), stateResources);
30250
+ const maskedCtx = record === void 0 ? ctx : {
30251
+ ...ctx,
30252
+ recordEvent: (event) => record(maskEventTextWithBoundBags(event))
30253
+ };
30089
30254
  for (const { segment, ops: orphanOps, companions } of orphans.segments) {
30090
30255
  if (options.isInterrupted?.()) {
30091
30256
  total.interrupted = true;
30092
30257
  break;
30093
30258
  }
30094
30259
  const ops = [...companions ?? [], ...orphanOps];
30095
- const replay = () => withStackName(stackName, () => replayFailedOperations(ops, stateResources, stackName, ctx, {
30260
+ const replay = () => withPrintingSecrets(printing, () => withStackName(stackName, () => replayFailedOperations(ops, stateResources, stackName, maskedCtx, {
30096
30261
  emitEnvelope: false,
30097
30262
  inlinePolicyWriters,
30098
30263
  forDestroy: true,
30099
30264
  ...options.isInterrupted && { isInterrupted: options.isInterrupted }
30100
- }));
30265
+ })));
30101
30266
  const result = segment.skipPrefix === void 0 ? await replay() : await withSkipPrefix(segment.skipPrefix, replay);
30102
30267
  total.failures += result.failures;
30103
30268
  total.warnings += result.warnings;
30269
+ total.leftInPlace += result.leftInPlace;
30104
30270
  const pending = new Set(result.remainingFailedOps);
30105
30271
  for (const op of ops) if (!pending.has(op)) total.handled.push({
30106
30272
  segment,
@@ -30141,19 +30307,26 @@ async function settleJournaledOrphansOnSuccess(args) {
30141
30307
  op
30142
30308
  })));
30143
30309
  let kept = all;
30310
+ let leftInPlace = 0;
30144
30311
  if (stateResources === void 0) logger.warn(safeMsg`The rollback journal of stack ${stack} records ${all.length} resource(s) a failed deploy ` + `created, but the stack's state cannot be read, so whether a record now owns them is unknown: none is deleted.`);
30145
30312
  else {
30146
30313
  logger.info(safeMsg`The rollback journal of stack ${stack} records ${all.length} resource(s) a failed deploy ` + `created that no state record holds; acting on them per their DeletionPolicy before the journal is removed:`);
30147
30314
  for (const line of journaledOrphanLines(orphans, logger)) logger.info(line);
30148
30315
  try {
30149
30316
  const { unreadable, tracked } = await applySuccessRule(orphans, stateResources, orphans.deployLogicalIds ?? /* @__PURE__ */ new Set(), args.foreignHolder, stack, logger, args.isInterrupted);
30150
- const outcome = await deleteJournaledOrphans({
30317
+ const acting = {
30151
30318
  segments: orphans.segments.map(({ segment, ops }) => ({
30152
30319
  segment,
30153
30320
  ops: ops.filter((op) => !unreadable.has(op) && !tracked.has(op))
30154
30321
  })).filter(({ ops }) => ops.length > 0),
30155
30322
  count: orphans.count - unreadable.size - tracked.size
30156
- }, { ...stateResources }, stackName, ctx, args.isInterrupted ? { isInterrupted: args.isInterrupted } : {});
30323
+ };
30324
+ const writtenThisRun = [...orphans.deployLogicalIds ?? []].filter((id) => Object.prototype.hasOwnProperty.call(stateResources, id)).map((id) => stateResources[id]).filter((r) => r !== void 0 && r !== null && typeof r === "object");
30325
+ const outcome = await deleteJournaledOrphans(acting, { ...stateResources }, stackName, {
30326
+ ...ctx,
30327
+ writtenThisRun
30328
+ }, args.isInterrupted ? { isInterrupted: args.isInterrupted } : {});
30329
+ leftInPlace = outcome.leftInPlace;
30157
30330
  kept = all.filter(({ segment, op }) => unreadable.has(op) || !tracked.has(op) && !isHandledOrphan(outcome.handled, segment, op));
30158
30331
  } catch (err) {
30159
30332
  logger.warn(safeMsg`Acting on the journaled resources of stack ${stack} failed: ${errorDetail(err)}`);
@@ -30174,7 +30347,7 @@ async function settleJournaledOrphansOnSuccess(args) {
30174
30347
  }
30175
30348
  };
30176
30349
  if (kept.length === 0) return {
30177
- unaddressed: skipped,
30350
+ unaddressed: skipped + leftInPlace,
30178
30351
  keepJournal: false,
30179
30352
  ...stripCleared && { stripCleared }
30180
30353
  };
@@ -30195,7 +30368,7 @@ async function settleJournaledOrphansOnSuccess(args) {
30195
30368
  }
30196
30369
  logger.warn(safeMsg`${kept.length} resource(s) a failed deploy of stack ${stack} created were not deleted ` + (reduced ? "(see above). The rollback journal, their only record, is kept with just them; the next " : "(see above). The rollback journal, their only record, is kept; the next ") + "successful deploy retries.");
30197
30370
  return {
30198
- unaddressed: kept.length + skipped,
30371
+ unaddressed: kept.length + skipped + leftInPlace,
30199
30372
  keepJournal: true
30200
30373
  };
30201
30374
  }
@@ -30349,7 +30522,8 @@ function redactOperationsForJournal(operations) {
30349
30522
  }
30350
30523
  async function adoptRollbackOrphans(currentState, effectiveTemplate) {
30351
30524
  const records = currentState.orphans ?? [];
30352
- const plan = await planOrphanAdoption({
30525
+ const named = orphanRecordsPrintingBag(records);
30526
+ const plan = await withPrintingSecrets(named, () => planOrphanAdoption({
30353
30527
  records,
30354
30528
  managedLogicalIds: new Set(Object.keys(currentState.resources)),
30355
30529
  template: effectiveTemplate,
@@ -30370,16 +30544,40 @@ async function adoptRollbackOrphans(currentState, effectiveTemplate) {
30370
30544
  logger: this.logger
30371
30545
  }),
30372
30546
  logger: { debug: (m) => this.logger.debug(m) }
30373
- });
30374
- for (const notice of plan.notices) this.logger.info(notice);
30375
- if (plan.refusals.length > 0) throw new Error(`Deploy refused — cdkd left ${plan.refusals.length} resource(s) in AWS that it cannot safely re-adopt:\n ${plan.refusals.join("\n ")}`);
30547
+ }));
30548
+ for (const notice of plan.notices) this.logger.info(maskSecretsInText(notice, named));
30549
+ if (plan.refusals.length > 0) throw new Error(`Deploy refused — cdkd left ${plan.refusals.length} resource(s) in AWS that it cannot safely re-adopt:\n ${plan.refusals.map((r) => maskSecretsInText(r, named)).join("\n ")}`);
30376
30550
  for (const [logicalId, record] of Object.entries(plan.adopted)) {
30377
30551
  currentState.resources[logicalId] = record;
30378
- this.logger.info(`Adopting ${displayIdent(logicalId)} (${displayIdent(record.resourceType)}) left in AWS by an earlier rollback as ${displaySafe(record.physicalId)}`);
30552
+ this.logger.info(`Adopting ${displayIdent(logicalId)} (${displayIdent(record.resourceType)}) left in AWS by an earlier rollback as ${displaySafe(maskSecretsInText(record.physicalId, named))}`);
30379
30553
  }
30380
30554
  if (records.length > 0) currentState.orphans = plan.remaining;
30381
30555
  return plan;
30382
30556
  }
30557
+ function replayPrintingBag(engine, entries, stateResources) {
30558
+ const read = /* @__PURE__ */ new Map();
30559
+ for (const entry of entries) {
30560
+ const names = secretNamesReadBy(entry.logicalId, { properties: entry.properties }, stateResources, (otherId) => ({
30561
+ secrets: engine.namingSecretsFor(otherId),
30562
+ embedded: engine.perResourceSecrets.get(otherId)
30563
+ }));
30564
+ for (const needle of names) recordLogOnlyValue(read, needle);
30565
+ }
30566
+ const own = /* @__PURE__ */ new Map();
30567
+ for (const entry of entries) {
30568
+ const needles = secretNameNeedlesOf(entry.logicalId, {
30569
+ resourceType: entry.resourceType,
30570
+ physicalId: entry.physicalId,
30571
+ properties: entry.properties
30572
+ }, engine.namingSecretsFor(entry.logicalId), { embedded: engine.perResourceSecrets.get(entry.logicalId) });
30573
+ for (const needle of needles ?? []) recordLogOnlyValue(own, needle);
30574
+ }
30575
+ return unionOfSecretBags([
30576
+ ...entries.map((entry) => engine.printingSecretsFor(entry.logicalId)),
30577
+ own,
30578
+ read
30579
+ ]);
30580
+ }
30383
30581
  async function performRollback(completedOperations, stateResources, stackName, previousState, failedOperations = [], priorOrphans = []) {
30384
30582
  const orphanIndexes = [];
30385
30583
  const orphanOps = [];
@@ -30397,11 +30595,14 @@ async function performRollback(completedOperations, stateResources, stackName, p
30397
30595
  const runId = this.options.eventRecorder?.runId;
30398
30596
  const { result, failed, run } = await withNestedRevertRun(runId, async (scope) => {
30399
30597
  return {
30400
- failed: orphanOps.length > 0 ? await replayFailedOperations(orphanOps, stateResources, stackName, ctx, {
30598
+ failed: orphanOps.length > 0 ? await withPrintingSecrets(replayPrintingBag(this, orphanOps.map((op) => ({
30599
+ ...op,
30600
+ properties: op.attemptedProperties
30601
+ })), stateResources), () => replayFailedOperations(orphanOps, stateResources, stackName, ctx, {
30401
30602
  emitEnvelope: completedOperations.length === 0,
30402
30603
  inlinePolicyWriters
30403
- }) : void 0,
30404
- result: await replayRollback(completedOperations, stateResources, stackName, ctx, { inlinePolicyWriters }),
30604
+ })) : void 0,
30605
+ result: await withPrintingSecrets(replayPrintingBag(this, completedReplayEntries(completedOperations), stateResources), () => replayRollback(completedOperations, stateResources, stackName, ctx, { inlinePolicyWriters })),
30405
30606
  run: scope
30406
30607
  };
30407
30608
  });
@@ -30547,7 +30748,7 @@ function rollbackExecutorContext(previousState, stackName) {
30547
30748
  providerRegistry: this.providerRegistry,
30548
30749
  region: this.stackRegion,
30549
30750
  logger: this.logger,
30550
- recordEvent: (event) => this.recordEvent(event),
30751
+ recordEvent: (event) => this.recordEvent(maskEventTextWithBoundBags(event)),
30551
30752
  finalSnapshotClients: this.options.finalSnapshotClients,
30552
30753
  skipFinalSnapshot: this.options.skipFinalSnapshot,
30553
30754
  ...this.options.parentStackInfo && { nestedChildStack: stackName },
@@ -30985,6 +31186,7 @@ function kickOffAutoRefreshObservedProperties(stateResources, crossStackReads) {
30985
31186
  const candidates = [];
30986
31187
  const masked = [];
30987
31188
  for (const [logicalId, resource] of Object.entries(stateResources)) {
31189
+ if (!hasAddressablePhysicalId(resource)) continue;
30988
31190
  if (resource.observedProperties !== void 0) {
30989
31191
  if (isMaskedBaselineRecaptureCandidate(resource)) masked.push({
30990
31192
  logicalId,
@@ -31080,76 +31282,6 @@ function kickOffMaskedBaselineRecapture(provider, logicalId, resource, producerR
31080
31282
  this.observedCaptureTasks.set(logicalId, task);
31081
31283
  }
31082
31284
 
31083
- //#endregion
31084
- //#region src/deployment/secret-name-needles.ts
31085
- function secretNameNeedlesOf(logicalId, record, secrets, options) {
31086
- const physicalId = typeof record?.physicalId === "string" && record.physicalId !== "" ? record.physicalId : void 0;
31087
- const bag = secrets !== void 0 && hasMaskableValues(secrets) ? secrets : void 0;
31088
- const mask = (text) => bag === void 0 ? text : maskSecretsInText(text, bag);
31089
- const unresolved = (value) => value.includes("{{resolve:") || value === "***";
31090
- const named = {
31091
- resourceType: record?.resourceType,
31092
- properties: record?.properties,
31093
- logicalId
31094
- };
31095
- const needles = /* @__PURE__ */ new Set();
31096
- const add = (needle) => {
31097
- if (typeof needle === "string" && needle !== "") needles.add(needle);
31098
- };
31099
- for (const [raw, derived] of secretDerivedNamePairs({
31100
- ...named,
31101
- physicalIds: []
31102
- })) if (typeof raw === "string" && !unresolved(raw) && isSecretDerivedValue(raw, mask)) add(derived);
31103
- for (const [raw, spelling] of secretDerivedNamePairs({
31104
- ...named,
31105
- physicalIds: [physicalId ?? "cdkd-no-physical-id-yet"]
31106
- })) {
31107
- if (!isSecretDerivedValue(raw, mask)) continue;
31108
- if (unresolved(raw)) {
31109
- if (physicalId === void 0) continue;
31110
- add(spelling);
31111
- } else {
31112
- add(raw);
31113
- if (raw.toLowerCase() !== raw && raw.length >= 4) add(raw.toLowerCase());
31114
- }
31115
- }
31116
- const properties = record?.properties;
31117
- const path = properties !== null && typeof properties === "object" && Object.hasOwn(properties, "Path") ? properties["Path"] : void 0;
31118
- if (physicalId !== void 0 && isSecretDerivedValue(path, mask)) add(physicalId);
31119
- const embedded = options === void 0 ? secrets : options.embedded;
31120
- const embeddedBag = embedded !== void 0 && hasMaskableValues(embedded) ? embedded : void 0;
31121
- if (embeddedBag !== void 0 && physicalId !== void 0) {
31122
- for (const needle of printingCorpusOf(embeddedBag).keys()) if (needle !== "" && (needle === physicalId || needle.length >= 4 && physicalId.includes(needle))) add(needle);
31123
- }
31124
- return needles.size > 0 ? needles : void 0;
31125
- }
31126
- function secretNamesReadBy(logicalId, record, resources, judge = () => ({
31127
- secrets: void 0,
31128
- embedded: void 0
31129
- })) {
31130
- const read = /* @__PURE__ */ new Set();
31131
- const leaves = [...wholeStringLeavesOf(record?.properties)].filter((leaf) => leaf !== "");
31132
- if (leaves.length === 0) return read;
31133
- for (const [otherId, other] of Object.entries(resources)) {
31134
- if (otherId === logicalId) continue;
31135
- const bags = judge(otherId);
31136
- const needles = secretNameNeedlesOf(otherId, other, bags.secrets, { embedded: bags.embedded });
31137
- if (needles === void 0) continue;
31138
- for (const needle of needles) if (leaves.some((leaf) => leaf === needle || needle.length >= 4 && leaf.includes(needle))) read.add(needle);
31139
- }
31140
- return read;
31141
- }
31142
- function stateSecretNameNeedles(resources, secrets) {
31143
- return (logicalId) => secretNameNeedlesOf(logicalId, Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0, secrets, { embedded: void 0 });
31144
- }
31145
- function secretNamePrintingBag(logicalId, resources) {
31146
- const bag = /* @__PURE__ */ new Map();
31147
- const record = Object.hasOwn(resources, logicalId) ? resources[logicalId] : void 0;
31148
- for (const needle of secretNameNeedlesOf(logicalId, record, void 0) ?? []) recordLogOnlyValue(bag, needle);
31149
- for (const needle of secretNamesReadBy(logicalId, record, resources)) recordLogOnlyValue(bag, needle);
31150
- return bag;
31151
- }
31152
-
31153
31285
  //#endregion
31154
31286
  //#region src/deployment/deploy-engine/masking.ts
31155
31287
  function diffLogMasker(diffSecrets, template, parameterValues) {
@@ -31541,6 +31673,7 @@ async function deleteReplacedAfterCreate(logicalId, oldResourceType, currentReso
31541
31673
  async function readRecordAttributes(input) {
31542
31674
  const { provider, logicalId, resource, stackName, region } = input;
31543
31675
  if (!provider.import) return { kind: "not-attempted" };
31676
+ if (!hasAddressablePhysicalId(resource)) return { kind: "not-attempted" };
31544
31677
  const found = await provider.import({
31545
31678
  logicalId,
31546
31679
  resourceType: resource.resourceType,
@@ -34837,6 +34970,7 @@ async function provisionUpdate(logicalId, change, stateResources, stackName, tem
34837
34970
  return;
34838
34971
  }
34839
34972
  this.refuseRedactedAttributeReads(logicalId, resourceType, context);
34973
+ if (!(currentResource.resourceType === "AWS::CloudFormation::Stack" && currentResource.provisionedBy !== "cc-api") && !hasAddressablePhysicalId(currentResource)) throw markRefusedBeforeApplying(markNonRetryable(new CdkdError(unaddressableUpdateRefusalMessage(stackName, this.stackRegion, logicalId, oldResourceType), STATE_RESOURCES_MALFORMED)));
34840
34974
  this.attemptedResolvedProps.set(logicalId, resolvedProps);
34841
34975
  const noEchoHeldPaths = /* @__PURE__ */ new Set();
34842
34976
  if (change.propertyChanges?.some((pc) => pc.requiresReplacement) === true) {
@@ -35483,6 +35617,46 @@ async function provisionDelete(logicalId, change, stateResources, stackName, tem
35483
35617
  await noteRetainedResource(resourceType, logicalId);
35484
35618
  return;
35485
35619
  }
35620
+ if (!(currentResource.resourceType === "AWS::CloudFormation::Stack" && currentResource.provisionedBy !== "cc-api") && !hasAddressablePhysicalId(currentResource)) {
35621
+ const reason = "state record has no physical id";
35622
+ if (progress) progress.current++;
35623
+ const skipPrefix = progress ? `[${progress.current}/${progress.total}] ` : " ";
35624
+ renderer.removeTask(logicalId);
35625
+ const skipLine = formatResourceLine("skipped", logicalId, resourceType, `skipped (${reason})`);
35626
+ this.logger.info(safeMsg`${skipPrefix}${skipLine}`);
35627
+ const showCommand = pasteableCommand("cdkd state show", [{
35628
+ value: stackName,
35629
+ hole: "stack",
35630
+ opts: { plainIdent: true }
35631
+ }, {
35632
+ flag: "--stack-region",
35633
+ value: this.stackRegion,
35634
+ hole: "region"
35635
+ }]).command;
35636
+ const dropCommand = pasteableCommand("cdkd state orphan", [
35637
+ {
35638
+ value: stackName,
35639
+ hole: "stack",
35640
+ opts: { plainIdent: true }
35641
+ },
35642
+ {
35643
+ flag: "--stack-region",
35644
+ value: this.stackRegion,
35645
+ hole: "region"
35646
+ },
35647
+ {
35648
+ flag: "--resource",
35649
+ value: logicalId,
35650
+ hole: "logicalId",
35651
+ opts: { plainIdent: true }
35652
+ }
35653
+ ]).command;
35654
+ this.logger.warn(safeMsg`Resource ${displaySafe(logicalId)} (${displaySafe(resourceType)}) has no non-empty string 'physicalId' in its state record, so cdkd cannot address it in AWS and did not try to delete it while removing it from the template. Its cdkd state record was KEPT, so the next 'cdkd deploy' re-attempts the delete. Repair the record's 'physicalId', or delete the resource by hand and drop the record.
35655
+ Inspect it with: ${showCommand}
35656
+ Drop the record with: ${dropCommand}`);
35657
+ if (counts) counts.deleteSkipped++;
35658
+ return { deleteSkipped: reason };
35659
+ }
35486
35660
  const governingPolicy = effectiveDeletionPolicy(resourceType, deletionPolicy, currentResource.properties);
35487
35661
  const finalSnapshotIdentifier = await this.prepareFinalSnapshotForDelete(logicalId, resourceType, currentResource, governingPolicy);
35488
35662
  const deleteRoute = this.providerRegistry.getProviderFor({
@@ -35741,7 +35915,7 @@ async function provisionResource(logicalId, change, stateResources, stackName, t
35741
35915
  logicalId,
35742
35916
  resourceType,
35743
35917
  ...stateResources[logicalId]?.provisionedBy ? { provisionedBy: stateResources[logicalId]?.provisionedBy } : labelRouting && { provisionedBy: labelRouting },
35744
- ...stateResources[logicalId]?.physicalId && { physicalId: stateResources[logicalId]?.physicalId },
35918
+ ...stateResources[logicalId] !== void 0 && hasAddressablePhysicalId(stateResources[logicalId]) && { physicalId: stateResources[logicalId].physicalId },
35745
35919
  reason: deleteSkipped,
35746
35920
  durationMs: Date.now() - resourceStartedAt
35747
35921
  });
@@ -36996,6 +37170,7 @@ async function doDeployWithPrefetch(stackName, template, createOnlyPrefetch) {
36996
37170
  refuseMalformedOutputs(currentState, stackName, this.stackRegion);
36997
37171
  refuseMalformedResourcesForDeploy(currentState, stackName, this.stackRegion);
36998
37172
  refuseMalformedResourceEntriesForDeploy(currentState, stackName, this.stackRegion);
37173
+ refuseMalformedResourceProperties(currentState, stackName, this.stackRegion);
36999
37174
  refuseMalformedOrphans(currentState, stackName, this.stackRegion);
37000
37175
  refuseMalformedOrphanRecords(currentState, stackName, this.stackRegion);
37001
37176
  const migrationPending = currentStateData?.migrationPending ?? false;
@@ -37772,5 +37947,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
37772
37947
  DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
37773
37948
 
37774
37949
  //#endregion
37775
- export { namesAnyDeclaredParameter as $, markSameGenerationBag as $a, unreadableOrphanRecords as $i, disableInstanceApiTermination as $n, readBootstrapMarkerBody as $o, hasReadableResources as $r, defineOwnKey as $s, DeploymentEventsReader as $t, resolveDynamoDbDeleteBudgetClock as A, describeTypeWithThrottleRetry as Aa, refuseMalformedOutputsForDestroy as Ai, readTagList as An, hasReasonlessBaselineRefusal as Ao, getAccountInfo as Ar, resolveAutoAssetStorage as As, isReplacementOrphan as At, getPriorAttempts as B, carryLogOnlyValues as Ba, refuseMalformedResourcePropertiesForExport as Bi, isCustomResourceType as Bn, stringifyValue as Bo, parseWebACLArn as Br, CFN_TEMPLATE_URL_LIMIT as Bs, buildFinalSnapshotIdentifier as Bt, perType as C, readConfigString as Ca, refuseMalformedNestedChildOutputs as Ci, ledgerForStack as Cn, S3StateBackend as Co, s3BucketDomainName as Cr, getDockerImageBySourceHash as Cs, awaitInFlightSibling as Ct, beginDeleteWait as D, requireConfigString as Da, refuseMalformedOrphansForDestroy as Di, DBPROXY_TAGS_WHAT as Dn, describeRegionValueKind as Do, coerceParameterTypedValue as Dr, getLegacyStateBucketName as Ds, recordAfterRollbackUpdate as Dt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as E, requireConfigObject as Ea, refuseMalformedOrphans as Ei, acquireIdempotencyToken as En, acceptedCreateOnlyDropsOf as Eo, s3BucketWebsiteUrl as Er, getDefaultStateBucketName as Es, withStackRecords as Et, waitForIndexesSettled as F, DagBuilder as Fa, refuseMalformedResourceEntriesForImport as Fi, stringifyIfAssigned as Fn, orphansAfterRollback as Fo, keepsSecretReferenceToken as Fr, resolveUseCdkBootstrapAssets as Fs, findNestedStackTypeChanges as Ft, cyan as G, printingCorpusOf as Ga, refuseMalformedState as Gi, ccProtectionRegistryTypes as Gn, rewriteTemplateAssetReferences as Go, STATE_REGION_DIVERGED as Gr, decodeListingKey as Gs, refusesFinalSnapshot as Gt, formatResourceLine as H, hasMaskableValues as Ha, refuseMalformedResourcesForDeploy as Hi, withPrintingSecrets as Hn, buildAssetRedirectMap as Ho, parameterInputsFor as Hr, findLargeInlineResources as Hs, createPreDeleteFinalSnapshot as Ht, ECR_AUTO_DELETE_IMAGES_TAG as I, TemplateParser as Ia, refuseMalformedResourceEntriesForImportSave as Ii, CC_BROKEN_REASON as In, orphansCarriedFrom as Io, AWS_NO_VALUE as Ir, stateBucketExistenceConfirmed as Is, getCurrentProducerRegions as It, red as J, shareLogOnlyValues as Ja, repairMalformedOutputsForReadOnly as Ji, deleteIndeterminateGuards as Jn, assertAssetBucketRegion as Jo, UNREADABLE_RESOURCES_MAP_ROW as Jr, canonicalizeRegion as Js, isRedactedRecordedValue as Jt, gray as K, recordLogOnlyParameterValue as Ka, repairMalformedOrphanRecordsForReadOnly as Ki, unchangedBehindSecretReference as Kn, AssetModeResolver as Ko, STATE_RESOURCES_MALFORMED as Kr, expectedOwnerParam as Ks, unsupportedFinalSnapshotError as Kt, S3_AUTO_DELETE_OBJECTS_TAG as L, liveMatchesUnresolvedTokenFrame as La, refuseMalformedResourceEntriesForOrphan as Li, ProviderRegistry as Ln, shouldRetainResource as Lo, cfnRefValueFromPhysicalId as Lr, warnDeprecatedNoPrefixCliFlag as Ls, inheritProducerRegions as Lt, DELETE_INDEX_WAIT_PROCEED_NOTE as M, canonicalLambdaFunctionName as Ma, refuseMalformedResourceEntries as Mi, tagMapAsList as Mn, importableOutputKeys as Mo, carriesDynamicReference as Mr, resolveSkipPrefix as Ms, planRollback as Mt, INDEX_SETTLE_POLL_INTERVAL_MS as N, lambdaFunctionNameForMask as Na, refuseMalformedResourceEntriesForDeploy as Ni, tagPlanWarning as Nn, importableOutputs as No, carriesFetchableDynamicReference as Nr, resolveStateBucketWithDefault as Ns, replacementNeverSwapped as Nt, compensateRemovedDeletionProtection as O, prefetchCreateOnlyPropertyPaths as Oa, refuseMalformedOrphansForOrphan as Oi, DBPROXY_TAG_OPTIONS as On, exportNamesCarriedFrom as Oo, isUnboundTemplateParameter as Or, loadCdkJson as Os, demoteSupersededOrphans as Ot, deleteTableWithIndexBusyRetry as P, sameLambdaFunctionAddress as Pa, refuseMalformedResourceEntriesForDestroy as Pi, definedAttributes as Pn, isReadableBag as Po, isNamelessDynamicReferenceError as Pr, resolveStateBucketWithDefaultAndSource as Ps, resolveReplacementOldType as Pt, computeParameterTaint as Q, maskSecretsInText as Qa, unpreviewableOrphanRecords as Qi, markWaitAbandoned as Qn, parseBootstrapMarker as Qo, hasReadableOutputs as Qr, processStackMessages as Qs, updatePartialReason as Qt, hasCdkAutoDeleteTag as R, inheritNestedStackParameterAssociations as Ra, refuseMalformedResourcePropertiesForDestroy as Ri, ccBrokenReason as Rn, AssetPublisher as Ro, isStalePlaceholderArnAttribute as Rr, ssmResolvedValueType as Rs, ATOMIC_FINAL_SNAPSHOT_TYPES as Rt, isProtectionValueActive as S, configStringRefusal as Sa, refuseDivergentRecordRegionForDestroy as Si, earliestDefined as Sn, isLockInfoExpired as So, s3BucketArn as Sr, AssetManifestLoader as Ss, replayRollback as St, DynamoDBGlobalTableProvider as T, requireConfigArray as Ta, refuseMalformedOrphanRecordsForDestroy as Ti, withCreateTokenLedger as Tn, splitImportedOps as To, s3BucketRegionalDomainName as Tr, synthesisStatusMessage as Ts, getStackRecords as Tt, createReadOnlyAttributeHealerFactory as U, literalSplitDelimitersOf as Ua, refuseMalformedResourcesForDestroy as Ui, CloudControlProvider as Un, createAssetRedirectResolver as Uo, passedParameterClassesOf as Ur, uploadCfnTemplate as Us, effectiveDeletionPolicy as Ut, markRefusedBeforeApplying as V, createUnionSecretMasker as Va, refuseMalformedResourcePropertiesForOrphan as Vi, getCurrentResourceSecrets as Vn, WorkGraph as Vo, withSharedDrainBudget as Vr, MIGRATE_TMP_PREFIX as Vs, ccRoutedFinalSnapshotError as Vt, bold as W, logOnlyValueCount as Wa, refuseMalformedResourcesForExport as Wi, slowCcOperationTimeoutMs as Wn, loadPublishableAssetManifest as Wo, JSON_LISTING_HOLE_VALUE as Wr, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Ws, isFinalSnapshotError as Wt, secretNamePrintingBag as X, errorCauseChain as Xa, repairMalformedResourcePropertiesForReadOnly as Xi, withIndeterminateGuard as Xn, getBootstrapMarkerKey as Xo, displayLogicalId as Xr, AssemblyReader as Xs, redactedDeleteAddressSkip as Xt, yellow as Y, createSecretMasker as Ya, repairMalformedResourceEntriesForReadOnly as Yi, deleteSkipReason as Yn, ensureAssetStorage as Yo, deployRefusesOrphanRowsReason as Yr, derivePartitionAndUrlSuffix as Ys, redactedDeleteAddressFields as Yt, stateSecretNameNeedles as Z, maskSecretsInError as Za, repairMalformedResourcesForReadOnly as Zi, isWaitAbandonedError as Zn, isCrossRegionRedirect as Zo, hasReadableOrphans as Zr, StageLoadError as Zs, updatePartialMessage as Zt, makeCanonicalizePropertiesFn as _, toFiniteNumber as _a, malformedResourcePropertiesWarning as _i, maskingRetryLogger as _n, STATE_SOURCED_READBACK_RULES as _o, AWS_CREDENTIAL_ENV_KEYS as _r, runDockerForeground as _s, revertedNestedRowIds as _t, findNestedTemplateTreeDefect as a, NO_CC_HANDLERS_REASON as aa, describeFileReadFailure as ac, malformedLocalOutputsWarning as ai, secretBearing as an, isUncertifiedBaselineMaskPosition as ao, DiffCalculator as ar, describeDockerCapturedOutput as as, loadJournaledOrphans as at, recordedProtectionNote as b, configBooleanRefusal as ba, malformedStateRefusalMessage as bi, formatDestructiveChange as bn, isSingleDynamicReferenceToken as bo, envCredentialsAreAssumedRole as br, escapeRegExp$3 as bs, withNestedStackContext as bt, renderNestedTemplateTreeDefect as c, shownType as ca, resolveAssemblyPath as cc, malformedOrphanRecordsRefusalMessage as ci, exportNameSecretExposure as cn, carriesSecretMask as co, classifyReplaySecretRegion as cr, dockerSpawnEnvWithSensitive as cs, planOrphanAdoption as ct, conditionInputsFrom as d, isStatefulRecreateTargetSync as da, malformedOrphansRefusalMessage as di, collectDeclaredOutputNames as dn, recordMaskOnlyValuesIn as do, applyRoleArnIfSet as dr, getDockerCmd as ds, displacedPhysicalIdShown as dt, unreadableResourceEntries as ea, hasOwnKey as ec, isReadableOrphanRecord as ei, DeploymentEventsStore as en, redactSecretsForState as eo, ec2InstanceProtectionSite as er, validateAssetBucketName as es, reachableDivergentParameters as et, parentSuppliedValues as f, renderStatefulReason as fa, malformedOrphansWarning as fi, collectPublishedOutputNames as fn, recordNoEchoAttributeValues as fo, assertFlagRoleArn as fr, isDockerClientEnvKey as fs, dropSettledNestedJournals as ft, mergeNoChangeOutputs as g, toCfnInteger as ga, malformedResourceEntriesWarning as gi, DEFAULT_RESOURCE_WARN_AFTER_MS as gn, STATE_SOURCED_CROSS_GENERATION_RULES as go, sendableAssumeRoleCommand as gr, redactedDockerCause as gs, revertNestedChildFromJournal as gt, keptWholeReasonText as h, isWarmThroughputDecrease as ha, malformedRenderedContainersWarning as hi, DEFAULT_RESOURCE_TIMEOUT_MS as hn, STATE_SOURCED_BASELINE_RULES as ho, isIamRoleArn as hr, redactDockerArgvValues as hs, recordDisplacedSkips as ht, childTemplateLoader as i, withoutSilentDropProperties as ia, absoluteAssemblyPathEscape as ic, malformedExportSourceWarning as ii, exportAliasCollisionScrubWarning as in, dynamicReferenceTokens as io, reEnableInstanceApiTermination as ir, resolveDockerContextDirectory as is, journaledOrphanLines as it, resolveDynamoDbDeleteBudgetMs as j, withRetry as ja, refuseMalformedResourceAttributesForOrphan as ji, refuseMalformedDesiredTags as jn, hasUnverifiableParameterRefusal as jo, isImpossibleEmptyStoredAttribute as jr, resolveCaptureObservedState as js, planFailedOps as jt, deleteBudgetKey as k, templateResourceTypes as ka, refuseMalformedOutputs as ki, planTagDiff as kn, hasReadableExportSet as ko, parameterTypeMayLoseSecretIdentity as kr, resolveApp as ks, isJournaledOrphan as kt, templateIdentity as l, MULTI_REGION_RECREATE_BLOCKED_TYPES as la, clearBucketRegionCache as lc, malformedOrphanRecordsWarning as li, isWholeDynamicReferenceValue as ln, provenPublicValue as lo, producerRegionsFromState as lr, finchSecretArgvRefusal as ls, NESTED_PENDING_PARENT_REASON as lt, isSecretBearingReferenceString as m, coerceWarmThroughput as ma, malformedOutputsWarning as mi, bindingSkippedOutputs as mn, wholeStringLeavesOf as mo, explicitRoleArnOrThrow as mr, partitionSensitiveEnv as ms, nestedChildStackName as mt, IMPLICIT_DELETE_DEPENDENCIES as n, findSilentDropProperties as na, nullPrototypeRecord as nc, malformedDriftResourcePropertiesWarning as ni, WITHHELD_NAME_DISPLAY as nn, recoverMaskedOutput as no, observeThenDisableInstanceApiTermination as nr, buildDenyExternalAccessPolicy as ns, deleteJournaledOrphans as nt, isAbsoluteAssetPath as o, hasNoCloudControlHandlers as oa, displayAssemblyPath as oc, malformedLocalResourceEntriesWarning as oi, secretBearingStateKeyWarning as on, pathCrossesDottedKey as oo, INTRINSIC_KEYS as or, describeDockerExecFailure as os, sameJournaledOrphans as ot, readRecordedConditionVerdicts as p, WARM_THROUGHPUT_MEMBERS as pa, malformedOutputsRefusalMessage as pi, isExportAliasCollision as pn, recordProvenPublicExpression as po, assertSendableRoleArn as pr, isMalformedEnvKey as ps, getNestedRevertRun as pt, green as q, recordLogOnlyValue as qa, repairMalformedOrphansForReadOnly as qi, UNSPECIFIED_SKIP_REASON as qn, BOOTSTRAP_MARKER_PREFIX as qo, UNREADABLE_ORPHANS_CONTAINER_ROW as qr, PARTITION_TABLE as qs, REDACTED_DELETE_ADDRESS_SKIP_REASON as qt, computeImplicitDeleteEdges as r, unwrittenCreateOnlyReplacement as ra, ownValue as rc, malformedExportNamesWarning as ri, displayTextOrWithheld as rn, DYNAMIC_REFERENCE_TOKEN_SCAN as ro, reDisableInstanceApiTermination as rr, buildDockerImage as rs, isHandledOrphan as rt, listNestedTemplateRows as s, findReplacedReadersOfRecreateTargets as sa, renderAssemblyPathEscape as sc, malformedLocalResourcesWarning as si, secretSafeKeyDisplay as sn, identityKeyFor as so, IntrinsicFunctionResolver as sr, describeDockerFailure as ss, makeSiblingClaimReader as st, DeployEngine as t, findActionableSilentDrops as ta, hasPlainPrototype$1 as tc, isReadableResourceEntry as ti, extractDeploymentEventError as tn, scrubResourceRecord as to, isTerminationProtectionPropagationError as tr, validateContainerRepoName as ts, resourcesNamingDeclaredParameter as tt, conditionFingerprint as u, isStatefulRecreateTargetForReplace as ua, resolveBucketRegion as uc, malformedOrphanRowsKeptWarning as ui, noEchoParameterValueSeed as un, recordMaskOnlyValue as uo, regionLessSecretName as ur, formatDockerLoginError as us, displacedOpClause as ut, withResourceDeadline as v, coerceCfnBoolean as va, malformedResourcesWarning as vi, constructPathOf as vn, TEMPLATE_SOURCED_RULES as vo, applyCallerIdentityCredentials as vr, runDockerStreaming as vs, withNestedRevertRun as vt, readProtection as w, replayWarn as wa, refuseMalformedOrphanRecords as wi, reserveStackCreateToken as wn, rebuildClientForBucketRegion as wo, s3BucketDualStackDomainName as wr, Synthesizer as ws, destroyStackRecordsView as wt, PROTECTION_PROPERTY_BY_TYPE as x, configIntegerRefusal as xa, previewableOrphanRecords as xi, RollbackInlinePolicyWriters as xn, LockManager as xo, isSettledInstanceState as xr, stripControlChars as xs, replayFailedOperations as xt, recordedProtectionEvidence as y, coerceCfnInteger as ya, malformedScrubResourceEntriesRefusalMessage as yi, findDestructiveChanges as yn, WHOLE_DYNAMIC_REFERENCE_PATTERN as yo, callerEnvCredentials as yr, warnFinchArgvExposure as ys, getCurrentNestedStackContext as yt, isTruthyCfnBoolean as z, recordNestedStackParameterExpressions as za, refuseMalformedResourcePropertiesForDrift as zi, wouldReturnToSdkProvider as zn, isSensitiveAttributeName as zo, refStateLookupFromResource as zr, CFN_TEMPLATE_BODY_LIMIT as zs, PRE_DELETE_SNAPSHOT_TYPES as zt };
37776
- //# sourceMappingURL=deploy-engine-HCnNEpdp.js.map
37950
+ export { resourcesNamingDeclaredParameter as $, createSecretMasker as $a, repairMalformedResourceEntriesForReadOnly as $i, deleteSkipReason as $n, ensureAssetStorage as $o, deployRefusesOrphanRowsReason as $r, derivePartitionAndUrlSuffix as $s, effectiveDeletionPolicy as $t, resolveDynamoDbDeleteBudgetClock as A, requireConfigObject as Aa, refuseMalformedOrphans as Ai, acquireIdempotencyToken as An, acceptedCreateOnlyDropsOf as Ao, s3BucketWebsiteUrl as Ar, getDefaultStateBucketName as As, planRollback as At, getPriorAttempts as B, TemplateParser as Ba, refuseMalformedResourceEntriesForImportSave as Bi, CC_BROKEN_REASON as Bn, orphansCarriedFrom as Bo, AWS_NO_VALUE as Br, stateBucketExistenceConfirmed as Bs, updatePartialMessage as Bt, perType as C, coerceCfnInteger as Ca, malformedScrubResourceEntriesRefusalMessage as Ci, findDestructiveChanges as Cn, WHOLE_DYNAMIC_REFERENCE_PATTERN as Co, callerEnvCredentials as Cr, warnFinchArgvExposure as Cs, getStackRecords as Ct, beginDeleteWait as D, readConfigString as Da, refuseMalformedNestedChildOutputs as Di, ledgerForStack as Dn, S3StateBackend as Do, s3BucketDomainName as Dr, getDockerImageBySourceHash as Ds, isJournaledOrphan as Dt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as E, configStringRefusal as Ea, refuseDivergentRecordRegionForDestroy as Ei, earliestDefined as En, isLockInfoExpired as Eo, s3BucketArn as Er, AssetManifestLoader as Es, demoteSupersededOrphans as Et, waitForIndexesSettled as F, withRetry as Fa, refuseMalformedResourceAttributesForOrphan as Fi, refuseMalformedDesiredTags as Fn, hasUnverifiableParameterRefusal as Fo, isImpossibleEmptyStoredAttribute as Fr, resolveCaptureObservedState as Fs, inheritProducerRegions as Ft, cyan as G, createUnionSecretMasker as Ga, refuseMalformedResourcePropertiesForOrphan as Gi, getCurrentResourceSecrets as Gn, WorkGraph as Go, withSharedDrainBudget as Gr, MIGRATE_TMP_PREFIX as Gs, orphanRecordsPrintingBag as Gt, formatResourceLine as H, inheritNestedStackParameterAssociations as Ha, refuseMalformedResourcePropertiesForDestroy as Hi, ccBrokenReason as Hn, AssetPublisher as Ho, isStalePlaceholderArnAttribute as Hr, ssmResolvedValueType as Hs, completedReplayEntries as Ht, ECR_AUTO_DELETE_IMAGES_TAG as I, canonicalLambdaFunctionName as Ia, refuseMalformedResourceEntries as Ii, tagMapAsList as In, importableOutputKeys as Io, carriesDynamicReference as Ir, resolveSkipPrefix as Is, REDACTED_DELETE_ADDRESS_SKIP_REASON as It, red as J, logOnlyValueCount as Ja, refuseMalformedResourcesForExport as Ji, slowCcOperationTimeoutMs as Jn, loadPublishableAssetManifest as Jo, JSON_LISTING_HOLE_VALUE as Jr, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as Js, ATOMIC_FINAL_SNAPSHOT_TYPES as Jt, gray as K, hasMaskableValues as Ka, refuseMalformedResourcesForDeploy as Ki, withPrintingSecrets as Kn, buildAssetRedirectMap as Ko, parameterInputsFor as Kr, findLargeInlineResources as Ks, secretNamePrintingBag as Kt, S3_AUTO_DELETE_OBJECTS_TAG as L, lambdaFunctionNameForMask as La, refuseMalformedResourceEntriesForDeploy as Li, tagPlanWarning as Ln, importableOutputs as Lo, carriesFetchableDynamicReference as Lr, resolveStateBucketWithDefault as Ls, isRedactedRecordedValue as Lt, DELETE_INDEX_WAIT_PROCEED_NOTE as M, prefetchCreateOnlyPropertyPaths as Ma, refuseMalformedOrphansForOrphan as Mi, DBPROXY_TAG_OPTIONS as Mn, exportNamesCarriedFrom as Mo, isUnboundTemplateParameter as Mr, loadCdkJson as Ms, resolveReplacementOldType as Mt, INDEX_SETTLE_POLL_INTERVAL_MS as N, templateResourceTypes as Na, refuseMalformedOutputs as Ni, planTagDiff as Nn, hasReadableExportSet as No, parameterTypeMayLoseSecretIdentity as Nr, resolveApp as Ns, findNestedStackTypeChanges as Nt, compensateRemovedDeletionProtection as O, replayWarn as Oa, refuseMalformedOrphanRecords as Oi, reserveStackCreateToken as On, rebuildClientForBucketRegion as Oo, s3BucketDualStackDomainName as Or, Synthesizer as Os, isReplacementOrphan as Ot, deleteTableWithIndexBusyRetry as P, describeTypeWithThrottleRetry as Pa, refuseMalformedOutputsForDestroy as Pi, readTagList as Pn, hasReasonlessBaselineRefusal as Po, getAccountInfo as Pr, resolveAutoAssetStorage as Ps, getCurrentProducerRegions as Pt, reachableDivergentParameters as Q, shareLogOnlyValues as Qa, repairMalformedOutputsForReadOnly as Qi, deleteIndeterminateGuards as Qn, assertAssetBucketRegion as Qo, UNREADABLE_RESOURCES_MAP_ROW as Qr, canonicalizeRegion as Qs, createPreDeleteFinalSnapshot as Qt, hasCdkAutoDeleteTag as R, sameLambdaFunctionAddress as Ra, refuseMalformedResourceEntriesForDestroy as Ri, definedAttributes as Rn, isReadableBag as Ro, isNamelessDynamicReferenceError as Rr, resolveStateBucketWithDefaultAndSource as Rs, redactedDeleteAddressFields as Rt, isProtectionValueActive as S, coerceCfnBoolean as Sa, malformedResourcesWarning as Si, constructPathOf as Sn, TEMPLATE_SOURCED_RULES as So, applyCallerIdentityCredentials as Sr, runDockerStreaming as Ss, destroyStackRecordsView as St, DynamoDBGlobalTableProvider as T, configIntegerRefusal as Ta, previewableOrphanRecords as Ti, RollbackInlinePolicyWriters as Tn, LockManager as To, isSettledInstanceState as Tr, stripControlChars as Ts, recordAfterRollbackUpdate as Tt, createReadOnlyAttributeHealerFactory as U, recordNestedStackParameterExpressions as Ua, refuseMalformedResourcePropertiesForDrift as Ui, wouldReturnToSdkProvider as Un, isSensitiveAttributeName as Uo, refStateLookupFromResource as Ur, CFN_TEMPLATE_BODY_LIMIT as Us, journaledOrphanPrintingBag as Ut, markRefusedBeforeApplying as V, liveMatchesUnresolvedTokenFrame as Va, refuseMalformedResourceEntriesForOrphan as Vi, ProviderRegistry as Vn, shouldRetainResource as Vo, cfnRefValueFromPhysicalId as Vr, warnDeprecatedNoPrefixCliFlag as Vs, updatePartialReason as Vt, bold as W, carryLogOnlyValues as Wa, refuseMalformedResourcePropertiesForExport as Wi, isCustomResourceType as Wn, stringifyValue as Wo, parseWebACLArn as Wr, CFN_TEMPLATE_URL_LIMIT as Ws, maskEventTextWithBoundBags as Wt, computeParameterTaint as X, recordLogOnlyParameterValue as Xa, repairMalformedOrphanRecordsForReadOnly as Xi, unchangedBehindSecretReference as Xn, AssetModeResolver as Xo, STATE_RESOURCES_MALFORMED as Xr, expectedOwnerParam as Xs, buildFinalSnapshotIdentifier as Xt, yellow as Y, printingCorpusOf as Ya, refuseMalformedState as Yi, ccProtectionRegistryTypes as Yn, rewriteTemplateAssetReferences as Yo, STATE_REGION_DIVERGED as Yr, decodeListingKey as Ys, PRE_DELETE_SNAPSHOT_TYPES as Yt, namesAnyDeclaredParameter as Z, recordLogOnlyValue as Za, repairMalformedOrphansForReadOnly as Zi, UNSPECIFIED_SKIP_REASON as Zn, BOOTSTRAP_MARKER_PREFIX as Zo, UNREADABLE_ORPHANS_CONTAINER_ROW as Zr, PARTITION_TABLE as Zs, ccRoutedFinalSnapshotError as Zt, makeCanonicalizePropertiesFn as _, WARM_THROUGHPUT_MEMBERS as _a, malformedOutputsRefusalMessage as _i, isExportAliasCollision as _n, recordProvenPublicExpression as _o, assertSendableRoleArn as _r, isMalformedEnvKey as _s, getCurrentNestedStackContext as _t, findNestedTemplateTreeDefect as a, findActionableSilentDrops as aa, hasPlainPrototype$1 as ac, isReadableResourceEntry as ai, extractDeploymentEventError as an, scrubResourceRecord as ao, isTerminationProtectionPropagationError as ar, validateContainerRepoName as as, makeSiblingClaimReader as at, recordedProtectionNote as b, toCfnInteger as ba, malformedResourceEntriesWarning as bi, DEFAULT_RESOURCE_WARN_AFTER_MS as bn, STATE_SOURCED_CROSS_GENERATION_RULES as bo, sendableAssumeRoleCommand as br, redactedDockerCause as bs, replayRollback as bt, renderNestedTemplateTreeDefect as c, withoutSilentDropProperties as ca, absoluteAssemblyPathEscape as cc, malformedExportSourceWarning as ci, exportAliasCollisionScrubWarning as cn, dynamicReferenceTokens as co, reEnableInstanceApiTermination as cr, resolveDockerContextDirectory as cs, displacedOpClause as ct, conditionInputsFrom as d, findReplacedReadersOfRecreateTargets as da, renderAssemblyPathEscape as dc, malformedLocalResourcesWarning as di, secretSafeKeyDisplay as dn, identityKeyFor as do, IntrinsicFunctionResolver as dr, describeDockerFailure as ds, getNestedRevertRun as dt, repairMalformedResourcePropertiesForReadOnly as ea, AssemblyReader as ec, displayLogicalId as ei, isFinalSnapshotError as en, errorCauseChain as eo, withIndeterminateGuard as er, getBootstrapMarkerKey as es, deleteJournaledOrphans as et, parentSuppliedValues as f, shownType as fa, resolveAssemblyPath as fc, malformedOrphanRecordsRefusalMessage as fi, exportNameSecretExposure as fn, carriesSecretMask as fo, classifyReplaySecretRegion as fr, dockerSpawnEnvWithSensitive as fs, nestedChildStackName as ft, mergeNoChangeOutputs as g, renderStatefulReason as ga, malformedOrphansWarning as gi, collectPublishedOutputNames as gn, recordNoEchoAttributeValues as go, assertFlagRoleArn as gr, isDockerClientEnvKey as gs, withNestedRevertRun as gt, keptWholeReasonText as h, isStatefulRecreateTargetSync as ha, malformedOrphansRefusalMessage as hi, collectDeclaredOutputNames as hn, recordMaskOnlyValuesIn as ho, applyRoleArnIfSet as hr, getDockerCmd as hs, revertedNestedRowIds as ht, childTemplateLoader as i, unreadableResourceEntries as ia, hasOwnKey as ic, isReadableOrphanRecord as ii, DeploymentEventsStore as in, redactSecretsForState as io, ec2InstanceProtectionSite as ir, validateAssetBucketName as is, sameJournaledOrphans as it, resolveDynamoDbDeleteBudgetMs as j, requireConfigString as ja, refuseMalformedOrphansForDestroy as ji, DBPROXY_TAGS_WHAT as jn, describeRegionValueKind as jo, coerceParameterTypedValue as jr, getLegacyStateBucketName as js, replacementNeverSwapped as jt, deleteBudgetKey as k, requireConfigArray as ka, refuseMalformedOrphanRecordsForDestroy as ki, withCreateTokenLedger as kn, splitImportedOps as ko, s3BucketRegionalDomainName as kr, synthesisStatusMessage as ks, planFailedOps as kt, templateIdentity as l, NO_CC_HANDLERS_REASON as la, describeFileReadFailure as lc, malformedLocalOutputsWarning as li, secretBearing as ln, isUncertifiedBaselineMaskPosition as lo, DiffCalculator as lr, describeDockerCapturedOutput as ls, displacedPhysicalIdShown as lt, isSecretBearingReferenceString as m, isStatefulRecreateTargetForReplace as ma, resolveBucketRegion as mc, malformedOrphanRowsKeptWarning as mi, noEchoParameterValueSeed as mn, recordMaskOnlyValue as mo, regionLessSecretName as mr, formatDockerLoginError as ms, revertNestedChildFromJournal as mt, IMPLICIT_DELETE_DEPENDENCIES as n, unpreviewableOrphanRecords as na, processStackMessages as nc, hasReadableOutputs as ni, unsupportedFinalSnapshotError as nn, maskSecretsInText as no, markWaitAbandoned as nr, parseBootstrapMarker as ns, journaledOrphanLines as nt, isAbsoluteAssetPath as o, findSilentDropProperties as oa, nullPrototypeRecord as oc, malformedDriftResourcePropertiesWarning as oi, WITHHELD_NAME_DISPLAY as on, recoverMaskedOutput as oo, observeThenDisableInstanceApiTermination as or, buildDenyExternalAccessPolicy as os, planOrphanAdoption as ot, readRecordedConditionVerdicts as p, MULTI_REGION_RECREATE_BLOCKED_TYPES as pa, clearBucketRegionCache as pc, malformedOrphanRecordsWarning as pi, isWholeDynamicReferenceValue as pn, provenPublicValue as po, producerRegionsFromState as pr, finchSecretArgvRefusal as ps, recordDisplacedSkips as pt, green as q, literalSplitDelimitersOf as qa, refuseMalformedResourcesForDestroy as qi, CloudControlProvider as qn, createAssetRedirectResolver as qo, passedParameterClassesOf as qr, uploadCfnTemplate as qs, stateSecretNameNeedles as qt, computeImplicitDeleteEdges as r, unreadableOrphanRecords as ra, defineOwnKey as rc, hasReadableResources as ri, DeploymentEventsReader as rn, markSameGenerationBag as ro, disableInstanceApiTermination as rr, readBootstrapMarkerBody as rs, loadJournaledOrphans as rt, listNestedTemplateRows as s, unwrittenCreateOnlyReplacement as sa, ownValue as sc, malformedExportNamesWarning as si, displayTextOrWithheld as sn, DYNAMIC_REFERENCE_TOKEN_SCAN as so, reDisableInstanceApiTermination as sr, buildDockerImage as ss, NESTED_PENDING_PARENT_REASON as st, DeployEngine as t, repairMalformedResourcesForReadOnly as ta, StageLoadError as tc, hasReadableOrphans as ti, refusesFinalSnapshot as tn, maskSecretsInError as to, isWaitAbandonedError as tr, isCrossRegionRedirect as ts, isHandledOrphan as tt, conditionFingerprint as u, hasNoCloudControlHandlers as ua, displayAssemblyPath as uc, malformedLocalResourceEntriesWarning as ui, secretBearingStateKeyWarning as un, pathCrossesDottedKey as uo, INTRINSIC_KEYS as ur, describeDockerExecFailure as us, dropSettledNestedJournals as ut, withResourceDeadline as v, coerceWarmThroughput as va, malformedOutputsWarning as vi, bindingSkippedOutputs as vn, wholeStringLeavesOf as vo, explicitRoleArnOrThrow as vr, partitionSensitiveEnv as vs, withNestedStackContext as vt, readProtection as w, configBooleanRefusal as wa, malformedStateRefusalMessage as wi, formatDestructiveChange as wn, isSingleDynamicReferenceToken as wo, envCredentialsAreAssumedRole as wr, escapeRegExp$3 as ws, withStackRecords as wt, PROTECTION_PROPERTY_BY_TYPE as x, toFiniteNumber as xa, malformedResourcePropertiesWarning as xi, maskingRetryLogger as xn, STATE_SOURCED_READBACK_RULES as xo, AWS_CREDENTIAL_ENV_KEYS as xr, runDockerForeground as xs, awaitInFlightSibling as xt, recordedProtectionEvidence as y, isWarmThroughputDecrease as ya, malformedRenderedContainersWarning as yi, DEFAULT_RESOURCE_TIMEOUT_MS as yn, STATE_SOURCED_BASELINE_RULES as yo, isIamRoleArn as yr, redactDockerArgvValues as ys, replayFailedOperations as yt, isTruthyCfnBoolean as z, DagBuilder as za, refuseMalformedResourceEntriesForImport as zi, stringifyIfAssigned as zn, orphansAfterRollback as zo, keepsSecretReferenceToken as zr, resolveUseCdkBootstrapAssets as zs, redactedDeleteAddressSkip as zt };
37951
+ //# sourceMappingURL=deploy-engine-BPcBCyUE.js.map