@go-to-k/cdkd 0.301.7 → 0.301.8

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 (24) hide show
  1. package/dist/{asg-provider-C14GB-Hy.js → asg-provider-BHNhL4VV.js} +3 -3
  2. package/dist/{asg-provider-C14GB-Hy.js.map → asg-provider-BHNhL4VV.js.map} +1 -1
  3. package/dist/cli.js +2 -2
  4. package/dist/{deploy-engine-zLKsm0IM.js → deploy-engine-6bGIDa7Z.js} +600 -519
  5. package/dist/deploy-engine-6bGIDa7Z.js.map +1 -0
  6. package/dist/{iam-policy-targets-LyArt3ew.js → iam-policy-targets-DJmfxbko.js} +5 -2
  7. package/dist/iam-policy-targets-DJmfxbko.js.map +1 -0
  8. package/dist/{iam-role-provider-BnStRZFM.js → iam-role-provider-CvfdjJBv.js} +3 -3
  9. package/dist/{iam-role-provider-BnStRZFM.js.map → iam-role-provider-CvfdjJBv.js.map} +1 -1
  10. package/dist/index.js +3 -3
  11. package/dist/{neptune-provider-BlpYIZQP.js → neptune-provider-CrH00sHx.js} +3 -3
  12. package/dist/{neptune-provider-BlpYIZQP.js.map → neptune-provider-CrH00sHx.js.map} +1 -1
  13. package/dist/{program-CiTz5-_D.js → program-Bji4lco2.js} +5 -5
  14. package/dist/{program-CiTz5-_D.js.map → program-Bji4lco2.js.map} +1 -1
  15. package/dist/{provider-classes-BWo7K01p.js → provider-classes-D41TJi4B.js} +81 -44
  16. package/dist/provider-classes-D41TJi4B.js.map +1 -0
  17. package/dist/{rds-provider-DagnUCn-.js → rds-provider-BTabgCz5.js} +3 -3
  18. package/dist/{rds-provider-DagnUCn-.js.map → rds-provider-BTabgCz5.js.map} +1 -1
  19. package/dist/{version-MUc6NbW0.js → version-B3HWuj22.js} +2 -2
  20. package/dist/{version-MUc6NbW0.js.map → version-B3HWuj22.js.map} +1 -1
  21. package/package.json +1 -1
  22. package/dist/deploy-engine-zLKsm0IM.js.map +0 -1
  23. package/dist/iam-policy-targets-LyArt3ew.js.map +0 -1
  24. package/dist/provider-classes-BWo7K01p.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { r as getAwsClients, s as __exportAll } from "./aws-clients-B_CEQGE1.js";
2
2
  import { A as UNRENDERABLE, B as safeMsg, C as looksLikeCdkdGeneratedName, D as SAFE_MSG_ALTERED_CHAR, E as withoutGeneratedFallbackName, F as displaySafe, H as terminalSafe, I as displayStackName, L as isPasteableIdent, N as displayAwsMessage, O as SECRET_REF_MAX_CODE_POINTS, P as displayIdent, S as getCurrentStackName, T as withStackName, U as truncateCodePoints, a as getLogger, b as generateResourceNameWithFallback, d as installLogLineMaskerSource, f as getLiveRenderer, g as applyDefaultNameForFallback, j as asIsMessage, 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 plainIdentOr } from "./aws-failure-text-BEQfs6za.js";
3
- import { $ as protectedReplacementAdvice, $n as markReplayMayCollide, $t as ambientCredentialConfig, A as isQuotableImportValue, An as SHELL_ACTIVE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as shellBoundedDisplay, Bt as formatLockOperation, Cn as StateError, Ct as RETRY_AUXILIARY_OWNER, Dn as normalizeAwsError, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as isInertUnquoted, Ft as UNREPRODUCIBLE_LOCK_CLAUSE, G as runDeleteAttempt, Gn as isUpdateUnsupportedError, Gt as DEFAULT_STATE_PREFIX, H as observeThenDisableProtection, Hn as withheldTargetClause, Ht as recoveryCommandFlags, In as pasteableCommand, It as buildForceUnlockCommand, J as DELETION_PROTECTION_DOC_POINTER, Jn as isNameCollisionErrorFrom, Kn as hasReplayMayCollide, Kt as injectiveKey, L as ProtectionFlipRegistry, Ln as physicalIdShownBesideCommand, M as quotedRemedyLogicalId, Mn as UNSHOWABLE_VALUE, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as commandHole, Ot as hasCreatedBeforeFailure, Pt as replayMadeAnotherResource, Q as pasteableAwsCommand, Qt as ambientClientDefaults, R as compensateProtectionFlip, Rn as plainOrDescribed, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, U as protectionFlipKey, Ut as sanitizeRecoveryValue, Vn as shellQuote, Vt as formatLockOwner, Wt as CUSTOM_RESOURCE_RESPONSE_PREFIX, Xn as isRecreateRetryableError, Yn as isNameCooldownError, Yt as producerRecordKey, Zn as isReplayedNameCollisionFrom, Zt as withPasteableAwsProfile, _t as createMaskedLogSinks, ar as isIamPropagationError, at as startInterruptWatch, bn as ResourceUpdateNotSupportedError, bt as maskDeep, cr as retryClassificationText, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dr as isThrottlingError, en as clientDefaultsFor, f as removalWarning, fr as markNonRetryable, ft as logicalIdShown, gt as stateOrphanRecordRemedy, hn as MalformedProducerRecordRefusalError, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CdkdError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as SHELL_ACTIVE_WHY, jt as markAuxiliaryFailure, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, ln as DynamicReferenceRegionAmbiguousError, m as withoutInjectedRemovals, mn as MacroExpansionError, mr as wrapMaskedAwsError, mt as resourceTypeShown, nn as AccountIdUnavailableError, nr as isAmbiguousCcHandlerErrorCode, on as CrossAccountSecretRefusalError, or as isRetryableTransientError, ot as ElapsedBudgetRegistry, pn as LockError, pr as markRedactedCause, rn as AssetError, rr as isAmbiguousOutcomeError, sn as DependencyError, sr as isTransientServerError, st as monotonicNowMs, tn as credentialFingerprint, tr as formatRetryClassificationSignals, un as IntrinsicResolutionRefusalError, ur as isMarkedNonRetryable, ut as compositeIdSeparatorRefusal, vn as ProvisioningError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wn as SynthesisError, wt as carryCreatedBeforeFailure, xt as maskerOrIdentity, yn as ResourceTimeoutError, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as quotedOrDescribed, zt as formatLockExpiry } from "./iam-policy-targets-LyArt3ew.js";
3
+ import { $ as protectedReplacementAdvice, $n as markReplayMayCollide, $t as ambientCredentialConfig, A as isQuotableImportValue, An as SHELL_ACTIVE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as shellBoundedDisplay, Bt as formatLockOperation, Cn as StateError, Ct as RETRY_AUXILIARY_OWNER, Dn as normalizeAwsError, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as isInertUnquoted, Ft as UNREPRODUCIBLE_LOCK_CLAUSE, G as runDeleteAttempt, Gn as isUpdateUnsupportedError, Gt as DEFAULT_STATE_PREFIX, H as observeThenDisableProtection, Hn as withheldTargetClause, Ht as recoveryCommandFlags, In as pasteableCommand, It as buildForceUnlockCommand, J as DELETION_PROTECTION_DOC_POINTER, Jn as isNameCollisionErrorFrom, Kn as hasReplayMayCollide, Kt as injectiveKey, L as ProtectionFlipRegistry, Ln as physicalIdShownBesideCommand, M as quotedRemedyLogicalId, Mn as UNSHOWABLE_VALUE, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as commandHole, Ot as hasCreatedBeforeFailure, Pt as replayMadeAnotherResource, Q as pasteableAwsCommand, Qt as ambientClientDefaults, R as compensateProtectionFlip, Rn as plainOrDescribed, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, U as protectionFlipKey, Ut as sanitizeRecoveryValue, Vn as shellQuote, Vt as formatLockOwner, Wt as CUSTOM_RESOURCE_RESPONSE_PREFIX, Xn as isRecreateRetryableError, Yn as isNameCooldownError, Yt as producerRecordKey, Zn as isReplayedNameCollisionFrom, Zt as withPasteableAwsProfile, _t as createMaskedLogSinks, at as startInterruptWatch, bn as ResourceUpdateNotSupportedError, bt as maskDeep, cr as isTransientServerError, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dr as isMarkedNonRetryable, en as clientDefaultsFor, f as removalWarning, fr as isThrottlingError, ft as logicalIdShown, gt as stateOrphanRecordRemedy, hn as MalformedProducerRecordRefusalError, hr as wrapMaskedAwsError, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CdkdError, ir as isAmbiguousOutcomeError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as SHELL_ACTIVE_WHY, jt as markAuxiliaryFailure, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, ln as DynamicReferenceRegionAmbiguousError, lr as retryClassificationText, m as withoutInjectedRemovals, mn as MacroExpansionError, mr as markRedactedCause, mt as resourceTypeShown, nn as AccountIdUnavailableError, nr as formatRetryClassificationSignals, on as CrossAccountSecretRefusalError, or as isIamPropagationError, ot as ElapsedBudgetRegistry, pn as LockError, pr as markNonRetryable, rn as AssetError, rr as isAmbiguousCcHandlerErrorCode, sn as DependencyError, sr as isRetryableTransientError, st as monotonicNowMs, tn as credentialFingerprint, un as IntrinsicResolutionRefusalError, ut as compositeIdSeparatorRefusal, vn as ProvisioningError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wn as SynthesisError, wt as carryCreatedBeforeFailure, xt as maskerOrIdentity, yn as ResourceTimeoutError, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as quotedOrDescribed, zt as formatLockExpiry } from "./iam-policy-targets-DJmfxbko.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-DBXBcg0J.js";
5
- import { t as getCdkdVersion } from "./version-MUc6NbW0.js";
5
+ import { t as getCdkdVersion } from "./version-B3HWuj22.js";
6
6
  import { createHash, randomUUID } from "node:crypto";
7
7
  import { AsyncLocalStorage } from "node:async_hooks";
8
8
  import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLifecycleConfigurationCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketLifecycleConfigurationCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
@@ -7429,6 +7429,13 @@ function recordProvenPublicExpression(bag, expression, value) {
7429
7429
  if (prior === false) return;
7430
7430
  proofs.set(expression, prior === void 0 || prior === value ? value : false);
7431
7431
  }
7432
+ function sharePublicProofs(view, pass) {
7433
+ provenPublicExpressions.set(view, proofsOf(pass));
7434
+ }
7435
+ function carryPublicProofs(from, to) {
7436
+ for (const [expression, value] of provenPublicExpressions.get(from) ?? []) if (value === false) contradictProvenPublicExpression(to, expression);
7437
+ else recordProvenPublicExpression(to, expression, value);
7438
+ }
7432
7439
  function contradictProvenPublicExpression(bag, expression) {
7433
7440
  proofsOf(bag).set(expression, false);
7434
7441
  }
@@ -9627,6 +9634,562 @@ function repairEmbeddedPhysicalNamesTowards(stored, target, pairs) {
9627
9634
  return stored;
9628
9635
  }
9629
9636
 
9637
+ //#endregion
9638
+ //#region src/deployment/secret-redaction/mask-errors.ts
9639
+ function maskSecretsInText(text, secrets) {
9640
+ const logOnly = logOnlyValuesOf.get(secrets);
9641
+ const noLogOnly = logOnly === void 0 || logOnly.size === 0;
9642
+ if (secrets.size === 0 && noLogOnly) return text;
9643
+ if (text !== "" && (secrets.has(text) || logOnly?.has(text) === true)) return "***";
9644
+ return maskMatchSpans(text, printingNeedles(noLogOnly ? secrets.keys() : [...secrets.keys(), ...logOnly]), "***");
9645
+ }
9646
+ function maskRecordedSecretsInText(text, secrets) {
9647
+ if (secrets.size === 0) return text;
9648
+ if (text !== "" && secrets.has(text)) return "***";
9649
+ return maskMatchSpans(text, substringNeedles(secrets.keys()), "***");
9650
+ }
9651
+ function substringNeedles(values) {
9652
+ return [...new Set(values)].filter((value) => value.length >= 4);
9653
+ }
9654
+ const ERROR_CAUSE_MASK_MAX_DEPTH = 20;
9655
+ function errorCauseChain(root) {
9656
+ const chain = [];
9657
+ const seen = /* @__PURE__ */ new Set();
9658
+ let current = root;
9659
+ while (current instanceof Error && !seen.has(current) && chain.length < 20) {
9660
+ seen.add(current);
9661
+ chain.push(current);
9662
+ current = current.cause;
9663
+ }
9664
+ return chain;
9665
+ }
9666
+ function readStack(error) {
9667
+ try {
9668
+ const stack = error.stack;
9669
+ return typeof stack === "string" ? stack : void 0;
9670
+ } catch {
9671
+ return;
9672
+ }
9673
+ }
9674
+ function maskDescriptorValue(descriptor, maskText) {
9675
+ if (!("value" in descriptor)) return descriptor;
9676
+ const value = maskErrorFieldValue(descriptor.value, maskText);
9677
+ return value === descriptor.value ? descriptor : {
9678
+ ...descriptor,
9679
+ value
9680
+ };
9681
+ }
9682
+ const CLASSIFIER_IDENTIFIER_FIELDS = /* @__PURE__ */ new Set([
9683
+ "name",
9684
+ "code",
9685
+ "Code",
9686
+ "__type",
9687
+ "ccErrorCode",
9688
+ "ccOperation"
9689
+ ]);
9690
+ function isAuxiliaryAnchor(key, descriptor) {
9691
+ return key === "logicalId" && descriptor.enumerable === false && descriptor.writable === false && typeof descriptor.value === "string" && descriptor.value.endsWith("/auxiliary");
9692
+ }
9693
+ const CREATED_BEFORE_FAILURE_MARK = Symbol.for("cdkd.createdBeforeFailure");
9694
+ function isCreatedBeforeFailureMark(key, descriptor) {
9695
+ return key === CREATED_BEFORE_FAILURE_MARK && descriptor.enumerable === false && descriptor.writable === false && typeof descriptor.value === "object" && descriptor.value !== null && Object.isFrozen(descriptor.value);
9696
+ }
9697
+ function isPlainContainer(value) {
9698
+ const proto = Object.getPrototypeOf(value);
9699
+ return Array.isArray(value) ? proto === Array.prototype : proto === Object.prototype || proto === null;
9700
+ }
9701
+ function readFieldNode(node) {
9702
+ try {
9703
+ if (!isPlainContainer(node)) return void 0;
9704
+ const entries = [];
9705
+ for (const key of Reflect.ownKeys(node)) {
9706
+ const descriptor = Object.getOwnPropertyDescriptor(node, key);
9707
+ if (descriptor) entries.push([key, descriptor]);
9708
+ }
9709
+ const isArray = Array.isArray(node);
9710
+ return {
9711
+ proto: Object.getPrototypeOf(node),
9712
+ isArray,
9713
+ length: isArray ? Object.getOwnPropertyDescriptor(node, "length") : void 0,
9714
+ extensible: Object.isExtensible(node),
9715
+ entries
9716
+ };
9717
+ } catch {
9718
+ return;
9719
+ }
9720
+ }
9721
+ function maskErrorFieldValue(value, maskText) {
9722
+ if (typeof value === "string") return maskText(value);
9723
+ if (typeof value !== "object" || value === null) return value;
9724
+ try {
9725
+ const nodes = /* @__PURE__ */ new Map();
9726
+ const seen = /* @__PURE__ */ new Set();
9727
+ let changed = false;
9728
+ let frontier = [value];
9729
+ for (let depth = 0; frontier.length > 0 && depth < 20; depth++) {
9730
+ const next = [];
9731
+ for (const node of frontier) {
9732
+ if (seen.has(node)) continue;
9733
+ seen.add(node);
9734
+ const read = readFieldNode(node);
9735
+ if (!read) continue;
9736
+ nodes.set(node, read);
9737
+ for (const [, descriptor] of read.entries) {
9738
+ if (!("value" in descriptor)) continue;
9739
+ const child = descriptor.value;
9740
+ if (typeof child === "string") {
9741
+ if (!changed && maskText(child) !== child) changed = true;
9742
+ } else if (typeof child === "object" && child !== null) next.push(child);
9743
+ }
9744
+ }
9745
+ frontier = next;
9746
+ }
9747
+ if (!changed) return value;
9748
+ const copies = /* @__PURE__ */ new Map();
9749
+ for (const [node, read] of nodes) copies.set(node, read.isArray ? new Array(read.length?.value ?? 0) : Object.create(read.proto));
9750
+ for (const [node, read] of nodes) {
9751
+ const copy = copies.get(node);
9752
+ for (const [key, original] of read.entries) {
9753
+ if (key === "length" && read.isArray) continue;
9754
+ const descriptor = { ...original };
9755
+ if ("value" in descriptor) {
9756
+ const child = descriptor.value;
9757
+ if (typeof child === "string") descriptor.value = maskText(child);
9758
+ else if (typeof child === "object" && child !== null && copies.has(child)) descriptor.value = copies.get(child);
9759
+ }
9760
+ Object.defineProperty(copy, key, descriptor);
9761
+ }
9762
+ if (read.length?.writable === false) Object.defineProperty(copy, "length", { writable: false });
9763
+ if (!read.extensible) Object.preventExtensions(copy);
9764
+ }
9765
+ return copies.get(value) ?? value;
9766
+ } catch {
9767
+ return value;
9768
+ }
9769
+ }
9770
+ function maskSecretsInError(error, secrets, extraMask) {
9771
+ if (!(error instanceof Error) || !hasMaskableValues(secrets) && !extraMask) return error;
9772
+ const maskText = (text) => maskSecretsInText(extraMask ? extraMask(text) : text, secrets);
9773
+ const chain = errorCauseChain(error);
9774
+ let changed = false;
9775
+ const links = chain.map((link) => {
9776
+ const message = maskText(link.message);
9777
+ const stack = readStack(link);
9778
+ const maskedStack = typeof stack === "string" ? maskText(stack) : void 0;
9779
+ const descriptors = {};
9780
+ for (const key of Reflect.ownKeys(link)) {
9781
+ if (key === "message" || key === "cause" || key === "stack") continue;
9782
+ const descriptor = Object.getOwnPropertyDescriptor(link, key);
9783
+ if (!descriptor) continue;
9784
+ descriptors[key] = typeof key === "string" && CLASSIFIER_IDENTIFIER_FIELDS.has(key) && typeof descriptor.value === "string" || isAuxiliaryAnchor(key, descriptor) || isCreatedBeforeFailureMark(key, descriptor) ? descriptor : maskDescriptorValue(descriptor, maskText);
9785
+ if (descriptors[key] !== descriptor) changed = true;
9786
+ }
9787
+ let cause = Object.getOwnPropertyDescriptor(link, "cause");
9788
+ if (cause && !("value" in cause && cause.value instanceof Error)) {
9789
+ const masked = maskDescriptorValue(cause, maskText);
9790
+ if (masked !== cause) changed = true;
9791
+ cause = masked;
9792
+ }
9793
+ if (message !== link.message || maskedStack !== stack) changed = true;
9794
+ return {
9795
+ message,
9796
+ stack: maskedStack,
9797
+ descriptors,
9798
+ cause
9799
+ };
9800
+ });
9801
+ if (!changed) return error;
9802
+ const clones = /* @__PURE__ */ new Map();
9803
+ for (const [i, original] of chain.entries()) {
9804
+ const { message, stack, descriptors } = links[i];
9805
+ const clone = Object.create(Object.getPrototypeOf(original), descriptors);
9806
+ Object.defineProperty(clone, "message", {
9807
+ value: message,
9808
+ writable: true,
9809
+ enumerable: false,
9810
+ configurable: true
9811
+ });
9812
+ if (stack !== void 0) Object.defineProperty(clone, "stack", {
9813
+ value: stack,
9814
+ writable: true,
9815
+ enumerable: false,
9816
+ configurable: true
9817
+ });
9818
+ clones.set(original, clone);
9819
+ }
9820
+ for (const [i, original] of chain.entries()) {
9821
+ const causeDescriptor = links[i].cause;
9822
+ if (!causeDescriptor) continue;
9823
+ const clone = clones.get(original);
9824
+ const causeValue = original.cause;
9825
+ const replacement = causeValue instanceof Error ? clones.get(causeValue) : void 0;
9826
+ Object.defineProperty(clone, "cause", replacement ? {
9827
+ value: replacement,
9828
+ writable: true,
9829
+ enumerable: causeDescriptor.enumerable === true,
9830
+ configurable: true
9831
+ } : causeDescriptor);
9832
+ }
9833
+ return clones.get(error);
9834
+ }
9835
+ function createSecretMasker(secrets) {
9836
+ return (text) => maskSecretsInText(text, secrets);
9837
+ }
9838
+
9839
+ //#endregion
9840
+ //#region src/deployment/secret-redaction/log-only.ts
9841
+ const logOnlyValuesOf = /* @__PURE__ */ new WeakMap();
9842
+ function recordLogOnlyValue(secrets, plaintext) {
9843
+ if (plaintext === "") return;
9844
+ sideSetOf(logOnlyValuesOf, secrets).add(plaintext);
9845
+ }
9846
+ function carryLogOnlyValues(from, to) {
9847
+ const values = logOnlyValuesOf.get(from);
9848
+ if (values === void 0 || values.size === 0) return;
9849
+ const into = sideSetOf(logOnlyValuesOf, to);
9850
+ for (const value of values) into.add(value);
9851
+ }
9852
+ function carryLogOnlyValuesCarriedBy(from, to, value) {
9853
+ const values = logOnlyValuesOf.get(from);
9854
+ if (values === void 0 || values.size === 0) return;
9855
+ const leaves = printedLeavesOf(value);
9856
+ if (leaves.size === 0) return;
9857
+ for (const needle of values) for (const leaf of leaves) if (leaf === needle || needle.length >= 4 && leaf.includes(needle)) {
9858
+ recordLogOnlyValue(to, needle);
9859
+ break;
9860
+ }
9861
+ carryListElementFragments(values, to, value);
9862
+ }
9863
+ function carryListElementFragments(needles, to, value) {
9864
+ if (!Array.isArray(value) || value.length === 0) return;
9865
+ if (!value.every((e) => typeof e === "string" || typeof e === "number" || typeof e === "boolean")) return;
9866
+ const numeric = value.every((element) => typeof element === "number");
9867
+ const joined = value.map((element) => String(element)).join(",");
9868
+ for (const needle of [...needles]) {
9869
+ const pieces = needle.split(",").map((piece) => piece.trim());
9870
+ if (numeric && pieces.every((piece) => piece === "" || Number.isNaN(Number(piece)))) continue;
9871
+ const fragments = fragmentsOfNeedleIn(joined, ",", pieces.map((piece) => numeric ? String(Number(piece)) : piece).join(","));
9872
+ if (fragments.size === 0) continue;
9873
+ recordLogOnlyValue(to, needle);
9874
+ for (const fragment of fragments) recordLogOnlyValue(to, fragment);
9875
+ }
9876
+ }
9877
+ function recordLogOnlySplitFragments(from, to, text, delimiter, printed) {
9878
+ if (delimiter === "") return;
9879
+ const splits = [text.split(delimiter)];
9880
+ if (printed !== void 0 && (printed.length !== splits[0].length || printed.some((piece, i) => piece !== splits[0][i]))) splits.push(printed);
9881
+ for (const bag of from) {
9882
+ if (bag === void 0) continue;
9883
+ for (const needle of [...logOnlyValuesOf.get(bag) ?? []]) for (const pieces of splits) for (const fragment of fragmentsOfNeedleIn(text, delimiter, needle, pieces)) if (fragment !== needle) recordLogOnlyValue(to, fragment);
9884
+ }
9885
+ }
9886
+ function fragmentsOfNeedleIn(text, delimiter, needle, pieces = text.split(delimiter)) {
9887
+ const fragments = /* @__PURE__ */ new Set();
9888
+ if (needle === "") return fragments;
9889
+ const starts = [];
9890
+ if (text === needle) starts.push(0);
9891
+ else if (needle.length >= 4) for (let at = text.indexOf(needle); at !== -1; at = text.indexOf(needle, at + 1)) starts.push(at);
9892
+ if (starts.length === 0) return fragments;
9893
+ const spans = [];
9894
+ let offset = 0;
9895
+ for (const piece of pieces) {
9896
+ spans.push([offset, offset + piece.length]);
9897
+ offset += piece.length + delimiter.length;
9898
+ }
9899
+ for (const start of starts) {
9900
+ const end = start + needle.length;
9901
+ for (const [pieceStart, pieceEnd] of spans) {
9902
+ const from = Math.max(pieceStart, start);
9903
+ const to = Math.min(pieceEnd, end);
9904
+ if (from < to) fragments.add(text.slice(from, to));
9905
+ }
9906
+ }
9907
+ return fragments;
9908
+ }
9909
+ function printedLeavesOf(value) {
9910
+ const leaves = wholeStringLeavesOf(value);
9911
+ const seen = /* @__PURE__ */ new Set();
9912
+ const walk = (node) => {
9913
+ if (typeof node === "number" || typeof node === "boolean") {
9914
+ leaves.add(String(node));
9915
+ return;
9916
+ }
9917
+ if (node === null || typeof node !== "object") return;
9918
+ if (seen.has(node)) return;
9919
+ seen.add(node);
9920
+ for (const child of Array.isArray(node) ? node : Object.values(node)) walk(child);
9921
+ };
9922
+ walk(value);
9923
+ return leaves;
9924
+ }
9925
+ function shareLogOnlyValues(view, target) {
9926
+ logOnlyValuesOf.set(view, sideSetOf(logOnlyValuesOf, target));
9927
+ }
9928
+ function recordLogOnlyParameterValue(secrets, value, splitDelimiters) {
9929
+ const record = (leaf) => {
9930
+ const spelled = typeof leaf === "string" ? leaf : typeof leaf === "number" || typeof leaf === "boolean" ? String(leaf) : void 0;
9931
+ if (spelled === void 0) return;
9932
+ recordLogOnlyValue(secrets, spelled);
9933
+ for (const delimiter of splitDelimiters ?? []) {
9934
+ if (delimiter === "" || !spelled.includes(delimiter)) continue;
9935
+ for (const piece of spelled.split(delimiter)) recordLogOnlyValue(secrets, piece);
9936
+ }
9937
+ };
9938
+ if (Array.isArray(value)) {
9939
+ for (const element of value) record(element);
9940
+ record(value.map((element) => String(element)).join(","));
9941
+ return;
9942
+ }
9943
+ record(value);
9944
+ }
9945
+ function literalSplitDelimitersOf(template, parameters) {
9946
+ const delimiters = /* @__PURE__ */ new Set();
9947
+ if (parameters.size === 0) return delimiters;
9948
+ const reads = (node, seen) => {
9949
+ if (typeof node === "string") {
9950
+ for (const name of parameters) if (node.includes(`\${${name}}`)) return true;
9951
+ return false;
9952
+ }
9953
+ if (node === null || typeof node !== "object" || seen.has(node)) return false;
9954
+ seen.add(node);
9955
+ if (!Array.isArray(node)) {
9956
+ const ref = node["Ref"];
9957
+ if (typeof ref === "string" && parameters.has(ref)) return true;
9958
+ }
9959
+ for (const child of Array.isArray(node) ? node : Object.values(node)) if (reads(child, seen)) return true;
9960
+ return false;
9961
+ };
9962
+ const seen = /* @__PURE__ */ new Set();
9963
+ const walk = (node) => {
9964
+ if (node === null || typeof node !== "object" || seen.has(node)) return;
9965
+ seen.add(node);
9966
+ if (Array.isArray(node)) {
9967
+ for (const child of node) walk(child);
9968
+ return;
9969
+ }
9970
+ for (const [key, child] of Object.entries(node)) {
9971
+ if (key === "Fn::Split" && Array.isArray(child) && typeof child[0] === "string" && reads(child[1], /* @__PURE__ */ new Set())) delimiters.add(child[0]);
9972
+ walk(child);
9973
+ }
9974
+ };
9975
+ walk(template);
9976
+ return delimiters;
9977
+ }
9978
+ function printingCorpusOf(secrets) {
9979
+ const logOnly = logOnlyValuesOf.get(secrets);
9980
+ if (logOnly === void 0 || logOnly.size === 0) return secrets;
9981
+ const corpus = new Map(secrets);
9982
+ for (const needle of logOnly) if (!corpus.has(needle)) corpus.set(needle, "***");
9983
+ return corpus;
9984
+ }
9985
+ function logOnlyValueCount(secrets) {
9986
+ return logOnlyValuesOf.get(secrets)?.size ?? 0;
9987
+ }
9988
+ function unionOfSecretBags(bags) {
9989
+ const union = /* @__PURE__ */ new Map();
9990
+ for (const bag of bags) {
9991
+ if (bag === void 0) continue;
9992
+ for (const [plaintext, expression] of bag) if (!union.has(plaintext)) union.set(plaintext, expression);
9993
+ carryLogOnlyValues(bag, union);
9994
+ }
9995
+ return union;
9996
+ }
9997
+ function createUnionSecretMasker(bags) {
9998
+ const present = bags.filter((bag) => bag !== void 0);
9999
+ let stamp;
10000
+ let needles = /* @__PURE__ */ new Set();
10001
+ let scanned = [];
10002
+ return (text) => {
10003
+ const now = present.map((bag) => `${bag.size}:${logOnlyValueCount(bag)}`).join(",");
10004
+ if (now !== stamp) {
10005
+ needles = /* @__PURE__ */ new Set();
10006
+ for (const bag of present) {
10007
+ for (const plaintext of bag.keys()) needles.add(plaintext);
10008
+ for (const plaintext of logOnlyValuesOf.get(bag) ?? []) needles.add(plaintext);
10009
+ }
10010
+ scanned = printingNeedles(needles);
10011
+ stamp = now;
10012
+ }
10013
+ if (text !== "" && needles.has(text)) return "***";
10014
+ return maskMatchSpans(text, scanned, "***");
10015
+ };
10016
+ }
10017
+ function hasLogOnlyValues(secrets) {
10018
+ if (secrets === void 0) return false;
10019
+ const logOnly = logOnlyValuesOf.get(secrets);
10020
+ return logOnly !== void 0 && logOnly.size > 0;
10021
+ }
10022
+ function hasMaskableValues(secrets) {
10023
+ if (secrets === void 0) return false;
10024
+ if (secrets.size > 0) return true;
10025
+ const logOnly = logOnlyValuesOf.get(secrets);
10026
+ return logOnly !== void 0 && logOnly.size > 0;
10027
+ }
10028
+
10029
+ //#endregion
10030
+ //#region src/deployment/secret-redaction/reference-provenance.ts
10031
+ const passProvenanceOf = /* @__PURE__ */ new WeakMap();
10032
+ const MAX_REFERENCE_VERSIONS = 8;
10033
+ function provenanceTableFor(secrets) {
10034
+ let table = passProvenanceOf.get(secrets);
10035
+ if (table === void 0) {
10036
+ table = /* @__PURE__ */ new Map();
10037
+ passProvenanceOf.set(secrets, table);
10038
+ }
10039
+ return table;
10040
+ }
10041
+ function shareReferenceProvenance(view, pass) {
10042
+ passProvenanceOf.set(view, provenanceTableFor(pass));
10043
+ }
10044
+ function entryFor(secrets, token) {
10045
+ const table = provenanceTableFor(secrets);
10046
+ let entry = table.get(token);
10047
+ if (entry === void 0) {
10048
+ entry = {
10049
+ regions: /* @__PURE__ */ new Set(),
10050
+ regionUnknown: false,
10051
+ versions: /* @__PURE__ */ new Set(),
10052
+ versionUnknown: false,
10053
+ readVersions: /* @__PURE__ */ new Set()
10054
+ };
10055
+ table.set(token, entry);
10056
+ }
10057
+ return entry;
10058
+ }
10059
+ function recordReferenceResolution(secrets, token, resolution) {
10060
+ const entry = entryFor(secrets, token);
10061
+ if (resolution.region === void 0) entry.regionUnknown = true;
10062
+ else entry.regions.add(resolution.region);
10063
+ if (resolution.version === void 0) {
10064
+ entry.versionUnknown = true;
10065
+ return;
10066
+ }
10067
+ entry.versions.add(resolution.version);
10068
+ if (resolution.route === "read") entry.readVersions.add(resolution.version);
10069
+ }
10070
+ function recordReferenceProvenanceEntry(secrets, token, provenance, route) {
10071
+ const entry = entryFor(secrets, token);
10072
+ if (provenance.region === void 0) entry.regionUnknown = true;
10073
+ else entry.regions.add(provenance.region);
10074
+ if (provenance.versions === void 0 || provenance.versions.length === 0) {
10075
+ entry.versionUnknown = true;
10076
+ return;
10077
+ }
10078
+ for (const version of provenance.versions) {
10079
+ entry.versions.add(version);
10080
+ if (route === "read") entry.readVersions.add(version);
10081
+ }
10082
+ if (route === "literal") for (const version of provenance.readVersions ?? []) entry.readVersions.add(version);
10083
+ }
10084
+ function mergeReferenceProvenance(from, to) {
10085
+ const source = passProvenanceOf.get(from);
10086
+ if (source === void 0 || from === to) return;
10087
+ for (const [token, entry] of source) {
10088
+ const target = entryFor(to, token);
10089
+ for (const region of entry.regions) target.regions.add(region);
10090
+ target.regionUnknown ||= entry.regionUnknown;
10091
+ for (const version of entry.versions) target.versions.add(version);
10092
+ target.versionUnknown ||= entry.versionUnknown;
10093
+ for (const version of entry.readVersions) target.readVersions.add(version);
10094
+ }
10095
+ }
10096
+ function hasPassProvenance(secrets) {
10097
+ if (secrets === void 0) return false;
10098
+ const table = passProvenanceOf.get(secrets);
10099
+ return table !== void 0 && table.size > 0;
10100
+ }
10101
+ function passProvenanceFor(secrets, token) {
10102
+ if (secrets === void 0) return void 0;
10103
+ const entry = passProvenanceOf.get(secrets)?.get(token);
10104
+ if (entry === void 0) return void 0;
10105
+ return finalize(entry);
10106
+ }
10107
+ function passReadVersionsFor(secrets, token) {
10108
+ if (secrets === void 0) return void 0;
10109
+ const read = passProvenanceOf.get(secrets)?.get(token)?.readVersions;
10110
+ return read === void 0 || read.size === 0 ? void 0 : read;
10111
+ }
10112
+ function finalize(entry) {
10113
+ const out = {};
10114
+ if (!entry.regionUnknown && entry.regions.size === 1) out.region = [...entry.regions][0];
10115
+ if (!entry.versionUnknown && entry.versions.size > 0 && entry.versions.size <= 8) {
10116
+ out.versions = [...entry.versions].sort();
10117
+ if (entry.readVersions.size > 0) out.readVersions = [...entry.readVersions].sort();
10118
+ }
10119
+ return out;
10120
+ }
10121
+ function snapshotPassProvenance(secrets) {
10122
+ if (secrets === void 0) return void 0;
10123
+ const table = passProvenanceOf.get(secrets);
10124
+ if (table === void 0 || table.size === 0) return void 0;
10125
+ const out = /* @__PURE__ */ new Map();
10126
+ for (const [token, entry] of table) out.set(token, finalize(entry));
10127
+ return out;
10128
+ }
10129
+
10130
+ //#endregion
10131
+ //#region src/deployment/secret-redaction/recording.ts
10132
+ const scopeMaps = /* @__PURE__ */ new WeakSet();
10133
+ var WriteThroughSecrets = class extends Map {
10134
+ pass;
10135
+ constructor(pass) {
10136
+ super();
10137
+ this.pass = pass;
10138
+ }
10139
+ set(plaintext, expression) {
10140
+ super.set(plaintext, expression);
10141
+ this.pass.set(plaintext, expression);
10142
+ return this;
10143
+ }
10144
+ };
10145
+ function openRecordingScope(pass, policy) {
10146
+ const secrets = new WriteThroughSecrets(pass);
10147
+ scopeMaps.add(secrets);
10148
+ shareLogOnlyValues(secrets, pass);
10149
+ for (const [kind, share] of Object.entries(SCOPE_SHARERS)) if (policy[kind] === "carry") share(secrets, pass);
10150
+ return {
10151
+ secrets,
10152
+ pass
10153
+ };
10154
+ }
10155
+ const SCOPE_SHARERS = {
10156
+ pairs: sharePairTable,
10157
+ "mask-only-marks": (scope, pass) => {
10158
+ for (const table of [
10159
+ freshNoEchoValuesOf,
10160
+ containmentValuesOf,
10161
+ noEchoParameterValuesOf
10162
+ ]) table.set(scope, sideSetOf(table, pass));
10163
+ },
10164
+ "reference-provenance": shareReferenceProvenance,
10165
+ "physical-name-copies": (scope, pass) => {
10166
+ physicalNameCopiesOf.set(scope, sideSetOf(physicalNameCopiesOf, pass));
10167
+ },
10168
+ "public-proofs": sharePublicProofs
10169
+ };
10170
+ function isRecordingScope(secrets) {
10171
+ return scopeMaps.has(secrets);
10172
+ }
10173
+ function foldRecording(from, to, policy) {
10174
+ if (from === to) return;
10175
+ for (const [plaintext, expression] of from) to.set(plaintext, expression);
10176
+ for (const [kind, carry] of Object.entries(FOLD_CARRIERS)) if (policy[kind] === "carry") carry(from, to);
10177
+ }
10178
+ const FOLD_CARRIERS = {
10179
+ "mask-only-marks": carryMaskOnlyMarks,
10180
+ "reference-provenance": mergeReferenceProvenance,
10181
+ pairs: mergePairTables,
10182
+ "log-only": carryLogOnlyValues,
10183
+ "physical-name-copies": (from, to) => {
10184
+ for (const physicalId of physicalNameCopiesOf.get(from) ?? []) recordPhysicalNameCopy(to, physicalId);
10185
+ },
10186
+ "public-proofs": carryPublicProofs
10187
+ };
10188
+ function recordSecretResolution(secrets, expression, plaintext, options) {
10189
+ secrets.set(plaintext, expression);
10190
+ if (options.pairEvidence) recordResolvedPair(secrets, expression, plaintext);
10191
+ }
10192
+
9630
10193
  //#endregion
9631
10194
  //#region src/deployment/secret-redaction/context.ts
9632
10195
  const RULES_BY_PROVENANCE = {
@@ -9638,6 +10201,7 @@ const RULES_BY_PROVENANCE = {
9638
10201
  "state-derived": STATE_DERIVED_RULES
9639
10202
  };
9640
10203
  function redactForState(bag, context) {
10204
+ refuseScopeAsPass(context.secrets);
9641
10205
  if (context.provenance === "value-scan") return redactSecretsForState(bag, context.secrets);
9642
10206
  const { secrets, source, provenance } = context;
9643
10207
  if (!((context.provenance === "template-derived" || context.provenance === "template-sourced") && context.generation === "same-generation") || !isPlainBag(bag)) return redactAtProvenance(bag, secrets, source, provenance, false);
@@ -9646,8 +10210,12 @@ function redactForState(bag, context) {
9646
10210
  return redacted === copy ? shallowCopy(copy) : redacted;
9647
10211
  }
9648
10212
  function redactAtProvenance(bag, secrets, source, provenance, sameGeneration) {
10213
+ refuseScopeAsPass(secrets);
9649
10214
  return redactSecretsForState(bag, secrets, source, RULES_BY_PROVENANCE[provenance], sameGeneration);
9650
10215
  }
10216
+ function refuseScopeAsPass(secrets) {
10217
+ if (isRecordingScope(secrets)) throw new Error("Internal error: a bag was redacted for persistence with a recording scope; pass the scope's pass map instead.");
10218
+ }
9651
10219
  function isPlainBag(bag) {
9652
10220
  if (Array.isArray(bag)) return true;
9653
10221
  if (bag === null || typeof bag !== "object") return false;
@@ -9880,100 +10448,6 @@ function positionByIntrinsicFrame(bag, source, secrets, secretExpressions, bagIs
9880
10448
  }, bagIsSameGeneration);
9881
10449
  }
9882
10450
 
9883
- //#endregion
9884
- //#region src/deployment/secret-redaction/reference-provenance.ts
9885
- const passProvenanceOf = /* @__PURE__ */ new WeakMap();
9886
- const MAX_REFERENCE_VERSIONS = 8;
9887
- function entryFor(secrets, token) {
9888
- let table = passProvenanceOf.get(secrets);
9889
- if (table === void 0) {
9890
- table = /* @__PURE__ */ new Map();
9891
- passProvenanceOf.set(secrets, table);
9892
- }
9893
- let entry = table.get(token);
9894
- if (entry === void 0) {
9895
- entry = {
9896
- regions: /* @__PURE__ */ new Set(),
9897
- regionUnknown: false,
9898
- versions: /* @__PURE__ */ new Set(),
9899
- versionUnknown: false,
9900
- readVersions: /* @__PURE__ */ new Set()
9901
- };
9902
- table.set(token, entry);
9903
- }
9904
- return entry;
9905
- }
9906
- function recordReferenceResolution(secrets, token, resolution) {
9907
- const entry = entryFor(secrets, token);
9908
- if (resolution.region === void 0) entry.regionUnknown = true;
9909
- else entry.regions.add(resolution.region);
9910
- if (resolution.version === void 0) {
9911
- entry.versionUnknown = true;
9912
- return;
9913
- }
9914
- entry.versions.add(resolution.version);
9915
- if (resolution.route === "read") entry.readVersions.add(resolution.version);
9916
- }
9917
- function recordReferenceProvenanceEntry(secrets, token, provenance, route) {
9918
- const entry = entryFor(secrets, token);
9919
- if (provenance.region === void 0) entry.regionUnknown = true;
9920
- else entry.regions.add(provenance.region);
9921
- if (provenance.versions === void 0 || provenance.versions.length === 0) {
9922
- entry.versionUnknown = true;
9923
- return;
9924
- }
9925
- for (const version of provenance.versions) {
9926
- entry.versions.add(version);
9927
- if (route === "read") entry.readVersions.add(version);
9928
- }
9929
- if (route === "literal") for (const version of provenance.readVersions ?? []) entry.readVersions.add(version);
9930
- }
9931
- function mergeReferenceProvenance(from, to) {
9932
- const source = passProvenanceOf.get(from);
9933
- if (source === void 0 || from === to) return;
9934
- for (const [token, entry] of source) {
9935
- const target = entryFor(to, token);
9936
- for (const region of entry.regions) target.regions.add(region);
9937
- target.regionUnknown ||= entry.regionUnknown;
9938
- for (const version of entry.versions) target.versions.add(version);
9939
- target.versionUnknown ||= entry.versionUnknown;
9940
- for (const version of entry.readVersions) target.readVersions.add(version);
9941
- }
9942
- }
9943
- function hasPassProvenance(secrets) {
9944
- if (secrets === void 0) return false;
9945
- const table = passProvenanceOf.get(secrets);
9946
- return table !== void 0 && table.size > 0;
9947
- }
9948
- function passProvenanceFor(secrets, token) {
9949
- if (secrets === void 0) return void 0;
9950
- const entry = passProvenanceOf.get(secrets)?.get(token);
9951
- if (entry === void 0) return void 0;
9952
- return finalize(entry);
9953
- }
9954
- function passReadVersionsFor(secrets, token) {
9955
- if (secrets === void 0) return void 0;
9956
- const read = passProvenanceOf.get(secrets)?.get(token)?.readVersions;
9957
- return read === void 0 || read.size === 0 ? void 0 : read;
9958
- }
9959
- function finalize(entry) {
9960
- const out = {};
9961
- if (!entry.regionUnknown && entry.regions.size === 1) out.region = [...entry.regions][0];
9962
- if (!entry.versionUnknown && entry.versions.size > 0 && entry.versions.size <= 8) {
9963
- out.versions = [...entry.versions].sort();
9964
- if (entry.readVersions.size > 0) out.readVersions = [...entry.readVersions].sort();
9965
- }
9966
- return out;
9967
- }
9968
- function snapshotPassProvenance(secrets) {
9969
- if (secrets === void 0) return void 0;
9970
- const table = passProvenanceOf.get(secrets);
9971
- if (table === void 0 || table.size === 0) return void 0;
9972
- const out = /* @__PURE__ */ new Map();
9973
- for (const [token, entry] of table) out.set(token, finalize(entry));
9974
- return out;
9975
- }
9976
-
9977
10451
  //#endregion
9978
10452
  //#region src/deployment/secret-redaction/pairs.ts
9979
10453
  const resolvedPairsOf = /* @__PURE__ */ new WeakMap();
@@ -9995,11 +10469,17 @@ function recordResolvedPair(secrets, expression, plaintext) {
9995
10469
  function mergeResolvedPairs(from, to) {
9996
10470
  carryMaskOnlyMarks(from, to);
9997
10471
  mergeReferenceProvenance(from, to);
10472
+ mergePairTables(from, to);
10473
+ }
10474
+ function mergePairTables(from, to) {
9998
10475
  const pairs = resolvedPairsOf.get(from);
9999
10476
  if (pairs === void 0) return;
10000
10477
  for (const [expression, plaintext] of pairs) if (typeof plaintext === "string") recordResolvedPair(to, expression, plaintext);
10001
10478
  else pairsFor(to).set(expression, CONFLICTING_PLAINTEXT);
10002
10479
  }
10480
+ function sharePairTable(view, pass) {
10481
+ resolvedPairsOf.set(view, pairsFor(pass));
10482
+ }
10003
10483
  function resolvedPlaintextOf(secrets, expression) {
10004
10484
  const recorded = resolvedPairsOf.get(secrets)?.get(expression);
10005
10485
  return typeof recorded === "string" ? recorded : void 0;
@@ -10084,398 +10564,6 @@ function isSameGenerationBag(bag) {
10084
10564
  return sameGenerationBags.has(bag);
10085
10565
  }
10086
10566
 
10087
- //#endregion
10088
- //#region src/deployment/secret-redaction/mask-errors.ts
10089
- function maskSecretsInText(text, secrets) {
10090
- const logOnly = logOnlyValuesOf.get(secrets);
10091
- const noLogOnly = logOnly === void 0 || logOnly.size === 0;
10092
- if (secrets.size === 0 && noLogOnly) return text;
10093
- if (text !== "" && (secrets.has(text) || logOnly?.has(text) === true)) return "***";
10094
- return maskMatchSpans(text, printingNeedles(noLogOnly ? secrets.keys() : [...secrets.keys(), ...logOnly]), "***");
10095
- }
10096
- function maskRecordedSecretsInText(text, secrets) {
10097
- if (secrets.size === 0) return text;
10098
- if (text !== "" && secrets.has(text)) return "***";
10099
- return maskMatchSpans(text, substringNeedles(secrets.keys()), "***");
10100
- }
10101
- function substringNeedles(values) {
10102
- return [...new Set(values)].filter((value) => value.length >= 4);
10103
- }
10104
- const ERROR_CAUSE_MASK_MAX_DEPTH = 20;
10105
- function errorCauseChain(root) {
10106
- const chain = [];
10107
- const seen = /* @__PURE__ */ new Set();
10108
- let current = root;
10109
- while (current instanceof Error && !seen.has(current) && chain.length < 20) {
10110
- seen.add(current);
10111
- chain.push(current);
10112
- current = current.cause;
10113
- }
10114
- return chain;
10115
- }
10116
- function readStack(error) {
10117
- try {
10118
- const stack = error.stack;
10119
- return typeof stack === "string" ? stack : void 0;
10120
- } catch {
10121
- return;
10122
- }
10123
- }
10124
- function maskDescriptorValue(descriptor, maskText) {
10125
- if (!("value" in descriptor)) return descriptor;
10126
- const value = maskErrorFieldValue(descriptor.value, maskText);
10127
- return value === descriptor.value ? descriptor : {
10128
- ...descriptor,
10129
- value
10130
- };
10131
- }
10132
- const CLASSIFIER_IDENTIFIER_FIELDS = /* @__PURE__ */ new Set([
10133
- "name",
10134
- "code",
10135
- "Code",
10136
- "__type",
10137
- "ccErrorCode",
10138
- "ccOperation"
10139
- ]);
10140
- function isAuxiliaryAnchor(key, descriptor) {
10141
- return key === "logicalId" && descriptor.enumerable === false && descriptor.writable === false && typeof descriptor.value === "string" && descriptor.value.endsWith("/auxiliary");
10142
- }
10143
- const CREATED_BEFORE_FAILURE_MARK = Symbol.for("cdkd.createdBeforeFailure");
10144
- function isCreatedBeforeFailureMark(key, descriptor) {
10145
- return key === CREATED_BEFORE_FAILURE_MARK && descriptor.enumerable === false && descriptor.writable === false && typeof descriptor.value === "object" && descriptor.value !== null && Object.isFrozen(descriptor.value);
10146
- }
10147
- function isPlainContainer(value) {
10148
- const proto = Object.getPrototypeOf(value);
10149
- return Array.isArray(value) ? proto === Array.prototype : proto === Object.prototype || proto === null;
10150
- }
10151
- function readFieldNode(node) {
10152
- try {
10153
- if (!isPlainContainer(node)) return void 0;
10154
- const entries = [];
10155
- for (const key of Reflect.ownKeys(node)) {
10156
- const descriptor = Object.getOwnPropertyDescriptor(node, key);
10157
- if (descriptor) entries.push([key, descriptor]);
10158
- }
10159
- const isArray = Array.isArray(node);
10160
- return {
10161
- proto: Object.getPrototypeOf(node),
10162
- isArray,
10163
- length: isArray ? Object.getOwnPropertyDescriptor(node, "length") : void 0,
10164
- extensible: Object.isExtensible(node),
10165
- entries
10166
- };
10167
- } catch {
10168
- return;
10169
- }
10170
- }
10171
- function maskErrorFieldValue(value, maskText) {
10172
- if (typeof value === "string") return maskText(value);
10173
- if (typeof value !== "object" || value === null) return value;
10174
- try {
10175
- const nodes = /* @__PURE__ */ new Map();
10176
- const seen = /* @__PURE__ */ new Set();
10177
- let changed = false;
10178
- let frontier = [value];
10179
- for (let depth = 0; frontier.length > 0 && depth < 20; depth++) {
10180
- const next = [];
10181
- for (const node of frontier) {
10182
- if (seen.has(node)) continue;
10183
- seen.add(node);
10184
- const read = readFieldNode(node);
10185
- if (!read) continue;
10186
- nodes.set(node, read);
10187
- for (const [, descriptor] of read.entries) {
10188
- if (!("value" in descriptor)) continue;
10189
- const child = descriptor.value;
10190
- if (typeof child === "string") {
10191
- if (!changed && maskText(child) !== child) changed = true;
10192
- } else if (typeof child === "object" && child !== null) next.push(child);
10193
- }
10194
- }
10195
- frontier = next;
10196
- }
10197
- if (!changed) return value;
10198
- const copies = /* @__PURE__ */ new Map();
10199
- for (const [node, read] of nodes) copies.set(node, read.isArray ? new Array(read.length?.value ?? 0) : Object.create(read.proto));
10200
- for (const [node, read] of nodes) {
10201
- const copy = copies.get(node);
10202
- for (const [key, original] of read.entries) {
10203
- if (key === "length" && read.isArray) continue;
10204
- const descriptor = { ...original };
10205
- if ("value" in descriptor) {
10206
- const child = descriptor.value;
10207
- if (typeof child === "string") descriptor.value = maskText(child);
10208
- else if (typeof child === "object" && child !== null && copies.has(child)) descriptor.value = copies.get(child);
10209
- }
10210
- Object.defineProperty(copy, key, descriptor);
10211
- }
10212
- if (read.length?.writable === false) Object.defineProperty(copy, "length", { writable: false });
10213
- if (!read.extensible) Object.preventExtensions(copy);
10214
- }
10215
- return copies.get(value) ?? value;
10216
- } catch {
10217
- return value;
10218
- }
10219
- }
10220
- function maskSecretsInError(error, secrets, extraMask) {
10221
- if (!(error instanceof Error) || !hasMaskableValues(secrets) && !extraMask) return error;
10222
- const maskText = (text) => maskSecretsInText(extraMask ? extraMask(text) : text, secrets);
10223
- const chain = errorCauseChain(error);
10224
- let changed = false;
10225
- const links = chain.map((link) => {
10226
- const message = maskText(link.message);
10227
- const stack = readStack(link);
10228
- const maskedStack = typeof stack === "string" ? maskText(stack) : void 0;
10229
- const descriptors = {};
10230
- for (const key of Reflect.ownKeys(link)) {
10231
- if (key === "message" || key === "cause" || key === "stack") continue;
10232
- const descriptor = Object.getOwnPropertyDescriptor(link, key);
10233
- if (!descriptor) continue;
10234
- descriptors[key] = typeof key === "string" && CLASSIFIER_IDENTIFIER_FIELDS.has(key) && typeof descriptor.value === "string" || isAuxiliaryAnchor(key, descriptor) || isCreatedBeforeFailureMark(key, descriptor) ? descriptor : maskDescriptorValue(descriptor, maskText);
10235
- if (descriptors[key] !== descriptor) changed = true;
10236
- }
10237
- let cause = Object.getOwnPropertyDescriptor(link, "cause");
10238
- if (cause && !("value" in cause && cause.value instanceof Error)) {
10239
- const masked = maskDescriptorValue(cause, maskText);
10240
- if (masked !== cause) changed = true;
10241
- cause = masked;
10242
- }
10243
- if (message !== link.message || maskedStack !== stack) changed = true;
10244
- return {
10245
- message,
10246
- stack: maskedStack,
10247
- descriptors,
10248
- cause
10249
- };
10250
- });
10251
- if (!changed) return error;
10252
- const clones = /* @__PURE__ */ new Map();
10253
- for (const [i, original] of chain.entries()) {
10254
- const { message, stack, descriptors } = links[i];
10255
- const clone = Object.create(Object.getPrototypeOf(original), descriptors);
10256
- Object.defineProperty(clone, "message", {
10257
- value: message,
10258
- writable: true,
10259
- enumerable: false,
10260
- configurable: true
10261
- });
10262
- if (stack !== void 0) Object.defineProperty(clone, "stack", {
10263
- value: stack,
10264
- writable: true,
10265
- enumerable: false,
10266
- configurable: true
10267
- });
10268
- clones.set(original, clone);
10269
- }
10270
- for (const [i, original] of chain.entries()) {
10271
- const causeDescriptor = links[i].cause;
10272
- if (!causeDescriptor) continue;
10273
- const clone = clones.get(original);
10274
- const causeValue = original.cause;
10275
- const replacement = causeValue instanceof Error ? clones.get(causeValue) : void 0;
10276
- Object.defineProperty(clone, "cause", replacement ? {
10277
- value: replacement,
10278
- writable: true,
10279
- enumerable: causeDescriptor.enumerable === true,
10280
- configurable: true
10281
- } : causeDescriptor);
10282
- }
10283
- return clones.get(error);
10284
- }
10285
- function createSecretMasker(secrets) {
10286
- return (text) => maskSecretsInText(text, secrets);
10287
- }
10288
-
10289
- //#endregion
10290
- //#region src/deployment/secret-redaction/log-only.ts
10291
- const logOnlyValuesOf = /* @__PURE__ */ new WeakMap();
10292
- function recordLogOnlyValue(secrets, plaintext) {
10293
- if (plaintext === "") return;
10294
- sideSetOf(logOnlyValuesOf, secrets).add(plaintext);
10295
- }
10296
- function carryLogOnlyValues(from, to) {
10297
- const values = logOnlyValuesOf.get(from);
10298
- if (values === void 0 || values.size === 0) return;
10299
- const into = sideSetOf(logOnlyValuesOf, to);
10300
- for (const value of values) into.add(value);
10301
- }
10302
- function carryLogOnlyValuesCarriedBy(from, to, value) {
10303
- const values = logOnlyValuesOf.get(from);
10304
- if (values === void 0 || values.size === 0) return;
10305
- const leaves = printedLeavesOf(value);
10306
- if (leaves.size === 0) return;
10307
- for (const needle of values) for (const leaf of leaves) if (leaf === needle || needle.length >= 4 && leaf.includes(needle)) {
10308
- recordLogOnlyValue(to, needle);
10309
- break;
10310
- }
10311
- carryListElementFragments(values, to, value);
10312
- }
10313
- function carryListElementFragments(needles, to, value) {
10314
- if (!Array.isArray(value) || value.length === 0) return;
10315
- if (!value.every((e) => typeof e === "string" || typeof e === "number" || typeof e === "boolean")) return;
10316
- const numeric = value.every((element) => typeof element === "number");
10317
- const joined = value.map((element) => String(element)).join(",");
10318
- for (const needle of [...needles]) {
10319
- const pieces = needle.split(",").map((piece) => piece.trim());
10320
- if (numeric && pieces.every((piece) => piece === "" || Number.isNaN(Number(piece)))) continue;
10321
- const fragments = fragmentsOfNeedleIn(joined, ",", pieces.map((piece) => numeric ? String(Number(piece)) : piece).join(","));
10322
- if (fragments.size === 0) continue;
10323
- recordLogOnlyValue(to, needle);
10324
- for (const fragment of fragments) recordLogOnlyValue(to, fragment);
10325
- }
10326
- }
10327
- function recordLogOnlySplitFragments(from, to, text, delimiter, printed) {
10328
- if (delimiter === "") return;
10329
- const splits = [text.split(delimiter)];
10330
- if (printed !== void 0 && (printed.length !== splits[0].length || printed.some((piece, i) => piece !== splits[0][i]))) splits.push(printed);
10331
- for (const bag of from) {
10332
- if (bag === void 0) continue;
10333
- for (const needle of [...logOnlyValuesOf.get(bag) ?? []]) for (const pieces of splits) for (const fragment of fragmentsOfNeedleIn(text, delimiter, needle, pieces)) if (fragment !== needle) recordLogOnlyValue(to, fragment);
10334
- }
10335
- }
10336
- function fragmentsOfNeedleIn(text, delimiter, needle, pieces = text.split(delimiter)) {
10337
- const fragments = /* @__PURE__ */ new Set();
10338
- if (needle === "") return fragments;
10339
- const starts = [];
10340
- if (text === needle) starts.push(0);
10341
- else if (needle.length >= 4) for (let at = text.indexOf(needle); at !== -1; at = text.indexOf(needle, at + 1)) starts.push(at);
10342
- if (starts.length === 0) return fragments;
10343
- const spans = [];
10344
- let offset = 0;
10345
- for (const piece of pieces) {
10346
- spans.push([offset, offset + piece.length]);
10347
- offset += piece.length + delimiter.length;
10348
- }
10349
- for (const start of starts) {
10350
- const end = start + needle.length;
10351
- for (const [pieceStart, pieceEnd] of spans) {
10352
- const from = Math.max(pieceStart, start);
10353
- const to = Math.min(pieceEnd, end);
10354
- if (from < to) fragments.add(text.slice(from, to));
10355
- }
10356
- }
10357
- return fragments;
10358
- }
10359
- function printedLeavesOf(value) {
10360
- const leaves = wholeStringLeavesOf(value);
10361
- const seen = /* @__PURE__ */ new Set();
10362
- const walk = (node) => {
10363
- if (typeof node === "number" || typeof node === "boolean") {
10364
- leaves.add(String(node));
10365
- return;
10366
- }
10367
- if (node === null || typeof node !== "object") return;
10368
- if (seen.has(node)) return;
10369
- seen.add(node);
10370
- for (const child of Array.isArray(node) ? node : Object.values(node)) walk(child);
10371
- };
10372
- walk(value);
10373
- return leaves;
10374
- }
10375
- function shareLogOnlyValues(view, target) {
10376
- logOnlyValuesOf.set(view, sideSetOf(logOnlyValuesOf, target));
10377
- }
10378
- function recordLogOnlyParameterValue(secrets, value, splitDelimiters) {
10379
- const record = (leaf) => {
10380
- const spelled = typeof leaf === "string" ? leaf : typeof leaf === "number" || typeof leaf === "boolean" ? String(leaf) : void 0;
10381
- if (spelled === void 0) return;
10382
- recordLogOnlyValue(secrets, spelled);
10383
- for (const delimiter of splitDelimiters ?? []) {
10384
- if (delimiter === "" || !spelled.includes(delimiter)) continue;
10385
- for (const piece of spelled.split(delimiter)) recordLogOnlyValue(secrets, piece);
10386
- }
10387
- };
10388
- if (Array.isArray(value)) {
10389
- for (const element of value) record(element);
10390
- record(value.map((element) => String(element)).join(","));
10391
- return;
10392
- }
10393
- record(value);
10394
- }
10395
- function literalSplitDelimitersOf(template, parameters) {
10396
- const delimiters = /* @__PURE__ */ new Set();
10397
- if (parameters.size === 0) return delimiters;
10398
- const reads = (node, seen) => {
10399
- if (typeof node === "string") {
10400
- for (const name of parameters) if (node.includes(`\${${name}}`)) return true;
10401
- return false;
10402
- }
10403
- if (node === null || typeof node !== "object" || seen.has(node)) return false;
10404
- seen.add(node);
10405
- if (!Array.isArray(node)) {
10406
- const ref = node["Ref"];
10407
- if (typeof ref === "string" && parameters.has(ref)) return true;
10408
- }
10409
- for (const child of Array.isArray(node) ? node : Object.values(node)) if (reads(child, seen)) return true;
10410
- return false;
10411
- };
10412
- const seen = /* @__PURE__ */ new Set();
10413
- const walk = (node) => {
10414
- if (node === null || typeof node !== "object" || seen.has(node)) return;
10415
- seen.add(node);
10416
- if (Array.isArray(node)) {
10417
- for (const child of node) walk(child);
10418
- return;
10419
- }
10420
- for (const [key, child] of Object.entries(node)) {
10421
- if (key === "Fn::Split" && Array.isArray(child) && typeof child[0] === "string" && reads(child[1], /* @__PURE__ */ new Set())) delimiters.add(child[0]);
10422
- walk(child);
10423
- }
10424
- };
10425
- walk(template);
10426
- return delimiters;
10427
- }
10428
- function printingCorpusOf(secrets) {
10429
- const logOnly = logOnlyValuesOf.get(secrets);
10430
- if (logOnly === void 0 || logOnly.size === 0) return secrets;
10431
- const corpus = new Map(secrets);
10432
- for (const needle of logOnly) if (!corpus.has(needle)) corpus.set(needle, "***");
10433
- return corpus;
10434
- }
10435
- function logOnlyValueCount(secrets) {
10436
- return logOnlyValuesOf.get(secrets)?.size ?? 0;
10437
- }
10438
- function unionOfSecretBags(bags) {
10439
- const union = /* @__PURE__ */ new Map();
10440
- for (const bag of bags) {
10441
- if (bag === void 0) continue;
10442
- for (const [plaintext, expression] of bag) if (!union.has(plaintext)) union.set(plaintext, expression);
10443
- carryLogOnlyValues(bag, union);
10444
- }
10445
- return union;
10446
- }
10447
- function createUnionSecretMasker(bags) {
10448
- const present = bags.filter((bag) => bag !== void 0);
10449
- let stamp;
10450
- let needles = /* @__PURE__ */ new Set();
10451
- let scanned = [];
10452
- return (text) => {
10453
- const now = present.map((bag) => `${bag.size}:${logOnlyValueCount(bag)}`).join(",");
10454
- if (now !== stamp) {
10455
- needles = /* @__PURE__ */ new Set();
10456
- for (const bag of present) {
10457
- for (const plaintext of bag.keys()) needles.add(plaintext);
10458
- for (const plaintext of logOnlyValuesOf.get(bag) ?? []) needles.add(plaintext);
10459
- }
10460
- scanned = printingNeedles(needles);
10461
- stamp = now;
10462
- }
10463
- if (text !== "" && needles.has(text)) return "***";
10464
- return maskMatchSpans(text, scanned, "***");
10465
- };
10466
- }
10467
- function hasLogOnlyValues(secrets) {
10468
- if (secrets === void 0) return false;
10469
- const logOnly = logOnlyValuesOf.get(secrets);
10470
- return logOnly !== void 0 && logOnly.size > 0;
10471
- }
10472
- function hasMaskableValues(secrets) {
10473
- if (secrets === void 0) return false;
10474
- if (secrets.size > 0) return true;
10475
- const logOnly = logOnlyValuesOf.get(secrets);
10476
- return logOnly !== void 0 && logOnly.size > 0;
10477
- }
10478
-
10479
10567
  //#endregion
10480
10568
  //#region src/deployment/secret-redaction/unresolved-token-frame.ts
10481
10569
  function liveMatchesUnresolvedTokenFrame(send, live, unresolvedTokens, secrets) {
@@ -22182,10 +22270,7 @@ async function resolveDynamicReferencesWithLogTwin(resolver, value, logTwin, con
22182
22270
  if (cached) {
22183
22271
  if (cached.secret && cached.value && !persistedText) refuseSecretAssembledReference(resolver, fullMatch, tokenLogText, context);
22184
22272
  const recorded = context?.recordedSecretValues;
22185
- if (cached.secret && cached.value && recorded) {
22186
- recorded.set(cached.value, fullMatch);
22187
- if (!pinnedGeneration) recordResolvedPair(recorded, fullMatch, cached.value);
22188
- }
22273
+ if (cached.secret && cached.value && recorded) recordSecretResolution(recorded, fullMatch, cached.value, { pairEvidence: !pinnedGeneration });
22189
22274
  if (cached.secret && cached.value) recordProvenanceOfResolution(resolver, context, fullMatch, cached.version);
22190
22275
  if (service === "ssm" && !cached.secret && recorded && !resolver.producerRegionGuest) recordProvenPublicExpression(recorded, fullMatch, cached.value);
22191
22276
  result = result.replace(fullMatch, () => cached.value);
@@ -22254,10 +22339,7 @@ async function resolveDynamicReferencesWithLogTwin(resolver, value, logTwin, con
22254
22339
  });
22255
22340
  if (isSecret && resolved) {
22256
22341
  const recorded = context?.recordedSecretValues;
22257
- if (recorded) {
22258
- recorded.set(resolved, fullMatch);
22259
- if (!pinnedGeneration) recordResolvedPair(recorded, fullMatch, resolved);
22260
- }
22342
+ if (recorded) recordSecretResolution(recorded, fullMatch, resolved, { pairEvidence: !pinnedGeneration });
22261
22343
  recordProvenanceOfResolution(resolver, context, fullMatch, resolvedVersion);
22262
22344
  if (service === "secretsmanager" || service === "ssm-secure") pinSecretVerdict(resolver, fullMatch, true, verdictScope);
22263
22345
  }
@@ -27075,7 +27157,7 @@ var CloudControlProvider = class {
27075
27157
  const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
27076
27158
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
27077
27159
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
27078
- const { ASGProvider } = await import("./asg-provider-C14GB-Hy.js");
27160
+ const { ASGProvider } = await import("./asg-provider-BHNhL4VV.js");
27079
27161
  const delegateRegion = ambientRegion();
27080
27162
  let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
27081
27163
  if (asgProvider === void 0) {
@@ -27181,7 +27263,7 @@ var CloudControlProvider = class {
27181
27263
  const family = SDK_DELETE_FAMILIES.get(resourceType);
27182
27264
  const cached = this.sdkDeleteDelegates.get(family);
27183
27265
  if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
27184
- const provider = family === "rds" ? new (await (import("./rds-provider-DagnUCn-.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-BlpYIZQP.js"))).NeptuneProvider({ region: ccRegion });
27266
+ const provider = family === "rds" ? new (await (import("./rds-provider-BTabgCz5.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-CrH00sHx.js"))).NeptuneProvider({ region: ccRegion });
27185
27267
  this.sdkDeleteDelegates.set(family, {
27186
27268
  region: ccRegion,
27187
27269
  provider
@@ -33799,12 +33881,16 @@ function rememberRecoverableMaskedOutputs(deps, stackName, resolved, redacted) {
33799
33881
  }
33800
33882
  function absorbOutputsPassSecrets(deps) {
33801
33883
  const outputsRun = deps.outputsRun();
33802
- for (const passSecrets of outputsRun.outputsPassSecretMaps) {
33803
- for (const [value, expr] of passSecrets) outputsRun.outputSecrets.set(value, expr);
33804
- mergeResolvedPairs(passSecrets, outputsRun.outputSecrets);
33805
- for (const physicalId of physicalNameCopiesOf.get(passSecrets) ?? []) recordPhysicalNameCopy(outputsRun.outputSecrets, physicalId);
33806
- }
33807
- }
33884
+ for (const passSecrets of outputsRun.outputsPassSecretMaps) foldRecording(passSecrets, outputsRun.outputSecrets, OUTPUTS_PASS_FOLD);
33885
+ }
33886
+ const OUTPUTS_PASS_FOLD = {
33887
+ pairs: "carry",
33888
+ "log-only": "withhold",
33889
+ "mask-only-marks": "carry",
33890
+ "reference-provenance": "carry",
33891
+ "physical-name-copies": "carry",
33892
+ "public-proofs": "withhold"
33893
+ };
33808
33894
  function redactOutputs(deps, outputs) {
33809
33895
  const redacted = redactOutputsBag(deps, outputs);
33810
33896
  if (deps.outputsRun().outputsResolvedThisRun.has(outputs)) deps.outputsRun().outputsResolvedThisRun.add(redacted);
@@ -34864,17 +34950,13 @@ var OutputsRunState = class {
34864
34950
  outputsResolvedThisRun = /* @__PURE__ */ new WeakSet();
34865
34951
  resolvedOutputsBag = void 0;
34866
34952
  };
34867
- var ForwardingSecrets = class extends Map {
34868
- target;
34869
- constructor(target) {
34870
- super();
34871
- this.target = target;
34872
- }
34873
- set(plaintext, expression) {
34874
- super.set(plaintext, expression);
34875
- this.target?.set(plaintext, expression);
34876
- return this;
34877
- }
34953
+ const EXPORT_NAME_SCOPE = {
34954
+ pairs: "withhold",
34955
+ "log-only": "carry",
34956
+ "mask-only-marks": "withhold",
34957
+ "reference-provenance": "withhold",
34958
+ "physical-name-copies": "withhold",
34959
+ "public-proofs": "withhold"
34878
34960
  };
34879
34961
  function handleOutputResolutionFailure(deps, error, outputKey, outputs, secrets, inheritedSecrets) {
34880
34962
  const union = unionOfSecretBags([inheritedSecrets, secrets]);
@@ -34950,8 +35032,7 @@ async function resolveOutputs(run, deps, template, resources, stackName, digestS
34950
35032
  if (!output.Export?.Name) continue;
34951
35033
  const value = outputs[outputKey];
34952
35034
  if (value === void 0) continue;
34953
- const nameSecrets = new ForwardingSecrets(context.recordedSecretValues);
34954
- if (context.recordedSecretValues) shareLogOnlyValues(nameSecrets, context.recordedSecretValues);
35035
+ const nameSecrets = context.recordedSecretValues ? openRecordingScope(context.recordedSecretValues, EXPORT_NAME_SCOPE).secrets : /* @__PURE__ */ new Map();
34955
35036
  const nameReads = [];
34956
35037
  let exportName;
34957
35038
  try {
@@ -49048,5 +49129,5 @@ function sameGenerationClaimsOf(record) {
49048
49129
  }
49049
49130
 
49050
49131
  //#endregion
49051
- export { resolvePendingCloudControlRequests as $, repairMalformedOutputsForReadOnly as $a, escapeRegExp$3 as $c, accountArgs as $i, buildFinalSnapshotIdentifier as $n, readbackPathFor as $o, DiffCalculator as $r, applyCrossPrefixScan as $s, namesAnyDeclaredParameter as $t, findServiceTokenRefusals as A, refuseMalformedOrphanRecordsForDestroy as Aa, parseBootstrapMarker as Ac, coerceParameterTypedValue as Ai, AssemblyReader as Al, gray as An, replayWarn as Ao, isCustomResourceType as Ar, inheritNestedStackParameterAssociations as As, removeProtectionTypeList as At, parentSuppliedValues as B, refuseMalformedResourceEntriesForImport as Ba, dockerSpawnEnvWithSensitive as Bc, cfnRefValueFromPhysicalId as Bi, displayAssemblyPath as Bl, journaledOrphanPrintingBag as Bn, sameLambdaFunctionAddress as Bo, UNSPECIFIED_SKIP_REASON as Br, recordMaskOnlyValuesIn as Bs, resolveReplacementOldType as Bt, getPriorAttempts as C, malformedResourcesWarning as Ca, rewriteTemplateAssetReferences as Cc, applyCallerIdentityCredentials as Ci, uploadCfnTemplate as Cl, awaitInFlightSibling as Cn, toFiniteNumber as Co, ProviderRegistry as Cr, withPhysicalNameCopies as Cs, formatResourceLine as Ct, crossStackOutputProvenanceSource as D, refuseDivergentRecordRegionForDestroy as Da, ensureAssetStorage as Dc, classifyReplaySecretRegion as Di, PARTITION_TABLE as Dl, replacedDeleteFailureVerdict as Dn, configIntegerRefusal as Do, waitForLambdaFunctionActive as Dr, isUncertifiedBaselineMaskPosition as Ds, withApiLimit as Dt, computeImplicitDeleteEdges as E, previewableOrphanRecords as Ea, assertAssetBucketRegion as Ec, classifyRecordedSecretRegion as Ei, expectedOwnerParam as El, withStackRecords as En, configBooleanRefusal as Eo, wouldReturnToSdkProvider as Er, dynamicReferenceTokens as Es, lookupEachName as Et, listNestedTemplateRows as F, refuseMalformedOutputsForDestroy as Fa, buildDockerImage as Fc, carriesDynamicReference as Fi, hasPlainPrototype$1 as Fl, noEchoComparisonForTemplate as Fn, templateResourceTypes as Fo, customResourceResponseExpirationWarning as Fr, recordPhysicalNameCopy as Fs, planFailedOps as Ft, keptWholeReasonText as G, refuseMalformedResourcePropertiesForExport as Ga, isMalformedEnvKey as Gc, parameterInputsFor as Gi, clearBucketRegionCache as Gl, secretNamePrintingBags as Gn, maskAtCoordinates as Go, isWaitAbandonedError as Gr, WHOLE_DYNAMIC_REFERENCE_PATTERN as Gs, inheritProducerRegions as Gt, withResourceDeadline as H, refuseMalformedResourceEntriesForOrphan as Ha, formatDockerLoginError as Hc, refStateLookupFromResource as Hi, resolveAssemblyPath as Hl, namingSecretsWithRecordedNoEcho as Hn, TemplateParser as Ho, deleteLeftInPlace as Hr, recordNoEchoParameterFreshValue as Hs, orphanNeedsIdentity as Ht, renderNestedTemplateTreeDefect as I, refuseMalformedResourceAttributesForOrphan as Ia, resolveDockerContextDirectory as Ic, carriesFetchableDynamicReference as Ii, nullPrototypeRecord as Il, noEchoExactEchoLeavesOf as In, describeTypeWithThrottleRetry as Io, CloudControlProvider as Ir, splitGetAttStringForm as Is, planRollback as It, makeSiblingClaimReader as J, refuseMalformedResourcesForDestroy as Ja, redactedCause as Jc, JSON_LISTING_HOLE_VALUE as Ji, stateSecretNameNeedles as Jn, maskedLeafCoordinatesOf as Jo, ec2InstanceProtectionSite as Jr, isLockInfoExpired as Js, redactedDeleteAddressFields as Jt, mergeNoChangeOutputs as K, refuseMalformedResourcePropertiesForOrphan as Ka, partitionSensitiveEnv as Kc, passedParameterClassesOf as Ki, resolveBucketRegion as Kl, secretNamedAttributeNamesOf as Kn, maskReadbackAtCoordinates as Ko, markWaitAbandoned as Kr, isSingleDynamicReferenceToken as Ks, REDACTED_DELETE_ADDRESS_SKIP_REASON as Kt, templateIdentity as L, refuseMalformedResourceEntries as La, describeDockerCapturedOutput as Lc, isNamelessDynamicReferenceError as Li, ownValue as Ll, noEchoParameterNamesOf as Ln, withRetry as Lo, slowCcOperationTimeoutMs as Lr, carriesSecretMask as Ls, recheckFailedPlan as Lt, childTemplateLoader as M, refuseMalformedOrphansForDestroy as Ma, validateAssetBucketName as Mc, parameterTypeMayLoseSecretIdentity as Mi, processStackMessages as Ml, red as Mn, requireConfigObject as Mo, withPrintingSecrets as Mr, recoverMaskedOutput as Ms, demoteSupersededOrphans as Mt, findNestedTemplateTreeDefect as N, refuseMalformedOrphansForOrphan as Na, validateContainerRepoName as Nc, getAccountInfo as Ni, defineOwnKey as Nl, yellow as Nn, requireConfigString as No, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Nr, physicalNameCopiesOf as Ns, isJournaledOrphan as Nt, inheritedProvenanceForChildDiff as O, refuseMalformedNestedChildOutputs as Oa, getBootstrapMarkerKey as Oc, producerRegionsFromState as Oi, canonicalizeRegion as Ol, bold as On, configStringRefusal as Oo, TemplateNoEchoReresolver as Or, pathCrossesDottedKey as Os, replayFailedOperations as Ot, isAbsoluteAssetPath as P, refuseMalformedOutputs as Pa, buildDenyExternalAccessPolicy as Pc, isImpossibleEmptyStoredAttribute as Pi, hasOwnKey as Pl, noEchoAttributeNamesOf as Pn, prefetchCreateOnlyPropertyPaths as Po, applyCustomResourceResponseExpiration as Pr, recordAttributeIdCopy as Ps, isReplacementOrphan as Pt, pendingRequestCount as Q, repairMalformedOrphansForReadOnly as Qa, warnFinchArgvExposure as Qc, UNREADABLE_RESOURCES_MAP_ROW as Qi, PRE_DELETE_SNAPSHOT_TYPES as Qn, passedNoEchoParametersOf as Qo, reEnableInstanceApiTermination as Qr, CrossPrefixScanCache as Qs, computeParameterTaint as Qt, conditionFingerprint as R, refuseMalformedResourceEntriesForDeploy as Ra, describeDockerExecFailure as Rc, keepsSecretReferenceToken as Ri, absoluteAssemblyPathEscape as Rl, createReadOnlyAttributeHealerFactory as Rn, canonicalLambdaFunctionName as Ro, unchangedBehindSecretReference as Rr, provenPublicValue as Rs, recordUnderIdIsNotOwn as Rt, isTruthyCfnBoolean as S, malformedResourcePropertiesWarning as Sa, loadPublishableAssetManifest as Sc, AWS_CREDENTIAL_ENV_KEYS as Si, findLargeInlineResources as Sl, formatDestructiveChange as Sn, toCfnInteger as So, CC_BROKEN_REASON as Sr, scrubResourceRecord as Ss, sameJournaledOrphans as St, IMPLICIT_DELETE_DEPENDENCIES as T, malformedStateRefusalMessage as Ta, BOOTSTRAP_MARKER_PREFIX as Tc, envCredentialsAreAssumedRole as Ti, decodeListingKey as Tl, getStackRecords as Tn, coerceCfnInteger as To, isCustomResource as Tr, DYNAMIC_REFERENCE_TOKEN_SCAN as Ts, isAccessDeniedError as Tt, diffSecurity as U, refuseMalformedResourcePropertiesForDestroy as Ua, getDockerCmd as Uc, parseWebACLArn as Ui, injectAwsRegion as Ul, orphanRecordsPrintingBag as Un, canonicalCoordinates as Uo, deleteSkipReason as Ur, recordProvenPublicExpression as Us, findNestedStackTypeChanges as Ut, readRecordedConditionVerdicts as V, refuseMalformedResourceEntriesForImportSave as Va, finchSecretArgvRefusal as Vc, isStalePlaceholderArnAttribute as Vi, renderAssemblyPathEscape as Vl, maskEventTextWithBoundBags as Vn, DagBuilder as Vo, deleteIndeterminateGuards as Vr, recordNoEchoAttributeValues as Vs, seedsDeleteFirstGuard as Vt, isSecretBearingReferenceString as W, refuseMalformedResourcePropertiesForDrift as Wa, isDockerClientEnvKey as Wc, withSharedDrainBudget as Wi, injectedAwsRegionValue as Wl, secretNamePrintingBag as Wn, isMarkedCoordinate as Wo, withIndeterminateGuard as Wr, wholeStringLeavesOf as Ws, getCurrentProducerRegions as Wt, DeploymentEventsReader as X, refuseMalformedState as Xa, runDockerForeground as Xc, STATE_RESOURCES_MALFORMED as Xi, extractDeploymentEventError as Xn, noEchoLeavesOf as Xo, observeThenDisableInstanceApiTermination as Xr, rebuildClientForBucketRegion as Xs, updatePartialMessage as Xt, planOrphanAdoption as Y, refuseMalformedResourcesForExport as Ya, redactedDockerCause as Yc, STATE_REGION_DIVERGED as Yi, storedSecretNameNeedles as Yn, noEchoCoordinatesOf as Yo, isTerminationProtectionPropagationError as Yr, S3StateBackend as Ys, redactedDeleteAddressSkip as Yt, DeploymentEventsStore as Z, repairMalformedOrphanRecordsForReadOnly as Za, runDockerStreaming as Zc, UNREADABLE_ORPHANS_CONTAINER_ROW as Zi, ATOMIC_FINAL_SNAPSHOT_TYPES as Zn, noEchoOutputsComparison as Zo, reDisableInstanceApiTermination as Zr, CrossPrefixReadError as Zs, updatePartialReason as Zt, deleteTableWithIndexBusyRetry as _, malformedOrphansWarning as _a, isSensitiveAttributeName as _c, assertFlagRoleArn as _i, warnDeprecatedNoPrefixCliFlag as _l, DEFAULT_RESOURCE_TIMEOUT_MS as _n, isStatefulRecreateTargetSync as _o, refuseMalformedDesiredTags as _r, maskSecretsInText as _s, dropFailedHint as _t, isProtectionValueActive as a, isReadableOrphanRecord as aa, describeRegionValueKind as ac, s3BucketDomainName as ai, synthesisStatusMessage as al, secretBearing as an, unreadableResourceEntries as ao, unsupportedFinalSnapshotError as ar, createUnionSecretMasker as as, dropSettledNestedJournals as at, S3_AUTO_DELETE_OBJECTS_TAG as b, malformedRenderedContainersWarning as ba, buildAssetRedirectMap as bc, isIamRoleArn as bi, CFN_TEMPLATE_URL_LIMIT as bl, constructPathOf as bn, coerceWarmThroughput as bo, definedAttributes as br, snapshotPassProvenance as bs, loadJournaledOrphans as bt, DynamoDBGlobalTableProvider as c, malformedExportNamesWarning as ca, hasReasonlessBaselineRefusal as cc, s3BucketWebsiteUrl as ci, loadCdkJson as cl, carriedExportAliasExposure as cn, findSilentDropProperties as co, reserveStackCreateToken as cr, logOnlyValueCount as cs, recordDisplacedSkips as ct, compensateRemovedDeletionProtection as d, malformedLocalResourceEntriesWarning as da, importableOutputs as dc, refuseUnreadableCdkCrossAccountRefs as di, resolveCaptureObservedState as dl, isWholeDynamicReferenceValue as dn, NO_CC_HANDLERS_REASON as do, isRefusedByName as dr, recordLogOnlyValue as ds, withNestedRevertRun as dt, deployRefusesOrphanRowsReason as ea, crossPrefixDeniedWarning as ec, INTRINSIC_KEYS as ei, stripControlChars as el, reachableDivergentParameters as en, repairMalformedResourceEntriesForReadOnly as eo, ccRoutedFinalSnapshotError as er, readsNoEchoSource as es, keptForReadoption as et, deleteBudgetKey as f, malformedLocalResourcesWarning as fa, isReadableBag as fc, keepHeldTokenProvenance as fi, resolveSkipPrefix as fl, noEchoParameterValueSeed as fn, hasNoCloudControlHandlers as fo, markDeleteStarted as fr, shareLogOnlyValues as fs, collectNestedChildUnaddressed as ft, INDEX_SETTLE_POLL_INTERVAL_MS as g, malformedOrphansRefusalMessage as ga, AssetPublisher as gc, applyRoleArnIfSet as gi, stateBucketExistenceConfirmed as gl, bindingSkippedOutputs as gn, isStatefulRecreateTargetForReplace as go, readTagList as gr, maskSecretsInError as gs, dropFailedCommands as gt, DELETE_INDEX_WAIT_PROCEED_NOTE as h, malformedOrphanRowsKeptWarning as ha, shouldRetainResource as hc, recordedReferenceRegions as hi, resolveUseCdkBootstrapAssets as hl, isExportAliasCollision as hn, MULTI_REGION_RECREATE_BLOCKED_TYPES as ho, planTagDiff as hr, errorCauseChain as hs, deleteJournaledOrphans as ht, PROTECTION_PROPERTY_BY_TYPE as i, hasReadableResources as ia, acceptedCreateOnlyDropsOf as ic, s3BucketArn as ii, Synthesizer as il, exportAliasCollisionScrubWarning as in, unreadableOrphanRecords as io, refusesFinalSnapshot as ir, carryLogOnlyValues as is, displacedPhysicalIdShown as it, serviceTokenBlockingReason as j, refuseMalformedOrphans as ja, readBootstrapMarkerBody as jc, isUnboundTemplateParameter as ji, StageLoadError as jl, green as jn, requireConfigArray as jo, getCurrentResourceSecrets as jr, recordNestedStackParameterExpressions as js, recordAfterRollbackUpdate as jt, deferredServiceTokenWarning as k, refuseMalformedOrphanRecords as ka, isCrossRegionRedirect as kc, regionLessSecretName as ki, derivePartitionAndUrlSuffix as kl, cyan as kn, readConfigString as ko, readsNoEchoDeleteValues as kr, identityKeyFor as ks, replayRollback as kt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as l, malformedExportSourceWarning as la, hasUnverifiableParameterRefusal as lc, resolveDynamicReferences as li, resolveApp as ll, exportNameNoEchoParameters as ln, unwrittenCreateOnlyReplacement as lo, withCreateTokenLedger as lr, printingCorpusOf as ls, revertNestedChildFromJournal as lt, resolveDynamoDbDeleteBudgetMs as m, malformedOrphanRecordsWarning as ma, orphansCarriedFrom as mc, recordedOutputReferenceRegions as mi, resolveStateBucketWithDefaultAndSource as ml, collectPublishedOutputNames as mn, shownType as mo, DBPROXY_TAG_OPTIONS as mr, createSecretMasker as ms, withNestedStackContext as mt, recordedProtectionEvidence as n, hasReadableOrphans as na, isNotImplemented as nc, poisonRenderedSpellingsCollidingIn as ni, AssetManifestLoader as nl, WITHHELD_NAME_DISPLAY as nn, repairMalformedResourcesForReadOnly as no, effectiveDeletionPolicy as nr, valueAtCoordinate as ns, NESTED_PENDING_PARENT_REASON as nt, perType as o, isReadableResourceEntry as oa, exportNamesCarriedFrom as oc, s3BucketDualStackDomainName as oi, getDefaultStateBucketName as ol, secretBearingStateKeyWarning as on, withheldAccountClause as oo, earliestDefined as or, hasMaskableValues as os, getNestedRevertRun as ot, resolveDynamoDbDeleteBudgetClock as p, malformedOrphanRecordsRefusalMessage as pa, orphansAfterRollback as pc, outputReferenceProvenanceOf as pi, resolveStateBucketWithDefault as pl, collectDeclaredOutputNames as pn, findReplacedReadersOfRecreateTargets as po, DBPROXY_TAGS_WHAT as pr, unionOfSecretBags as ps, getCurrentNestedStackContext as pt, makeCanonicalizePropertiesFn as q, refuseMalformedResourcesForDeploy as qa, redactDockerArgvValues as qc, declaresNoEcho as qi, secretNamedRecordNeedles as qn, maskWholeValue as qo, disableInstanceApiTermination as qr, LockManager as qs, isRedactedRecordedValue as qt, recordedProtectionNote as r, hasReadableOutputs as ra, splitImportedOps as rc, isSettledInstanceState as ri, getDockerImageBySourceHash as rl, displayTextOrWithheld as rn, unpreviewableOrphanRecords as ro, isFinalSnapshotError as rr, liveMatchesUnresolvedTokenFrame as rs, displacedOpClause as rt, readProtection as s, malformedDriftResourcePropertiesWarning as sa, hasReadableExportSet as sc, s3BucketRegionalDomainName as si, getLegacyStateBucketName as sl, secretSafeKeyDisplay as sn, findActionableSilentDrops as so, ledgerForStack as sr, literalSplitDelimitersOf as ss, nestedChildStackName as st, DeployEngine as t, displayLogicalId as ta, isAccessDenied$1 as tc, IntrinsicFunctionResolver as ti, stripForDisplay as tl, resourcesNamingDeclaredParameter as tn, repairMalformedResourcePropertiesForReadOnly as to, createPreDeleteFinalSnapshot as tr, recordedNoEchoValuesOf as ts, recordRetainedForReadoption as tt, beginDeleteWait as u, malformedLocalOutputsWarning as ua, importableOutputKeys as uc, producerLookupOver as ui, resolveAutoAssetStorage as ul, exportNameSecretExposure as un, withoutSilentDropProperties as uo, acquireIdempotencyToken as ur, recordLogOnlyParameterValue as us, revertedNestedRowIds as ut, waitForIndexesSettled as v, malformedOutputsRefusalMessage as va, stringifyValue as vc, assertSendableRoleArn as vi, ssmResolvedValueType as vl, DEFAULT_RESOURCE_WARN_AFTER_MS as vn, renderStatefulReason as vo, tagMapAsList as vr, markSameGenerationBag as vs, isHandledOrphan as vt, markRefusedBeforeApplying as w, malformedScrubResourceEntriesRefusalMessage as wa, AssetModeResolver as wc, callerEnvCredentials as wi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as wl, destroyStackRecordsView as wn, coerceCfnBoolean as wo, ccBrokenReason as wr, withoutPhysicalNameCopies as ws, chunks as wt, hasCdkAutoDeleteTag as x, malformedResourceEntriesWarning as xa, createAssetRedirectResolver as xc, sendableAssumeRoleCommand as xi, MIGRATE_TMP_PREFIX as xl, findDestructiveChanges as xn, isWarmThroughputDecrease as xo, stringifyIfAssigned as xr, redactForState as xs, makeForeignHolderScan as xt, ECR_AUTO_DELETE_IMAGES_TAG as y, malformedOutputsWarning as ya, WorkGraph as yc, explicitRoleArnOrThrow as yi, CFN_TEMPLATE_BODY_LIMIT as yl, maskingRetryLogger as yn, WARM_THROUGHPUT_MEMBERS as yo, tagPlanWarning as yr, recordReferenceProvenanceEntry as ys, journaledOrphanLines as yt, conditionInputsFrom as z, refuseMalformedResourceEntriesForDestroy as za, describeDockerFailure as zc, AWS_NO_VALUE as zi, describeFileReadFailure as zl, completedReplayEntries as zn, lambdaFunctionNameForMask as zo, RollbackInlinePolicyWriters as zr, recordMaskOnlyValue as zs, replacementNeverSwapped as zt };
49052
- //# sourceMappingURL=deploy-engine-zLKsm0IM.js.map
49132
+ export { resolvePendingCloudControlRequests as $, repairMalformedOutputsForReadOnly as $a, escapeRegExp$3 as $c, accountArgs as $i, buildFinalSnapshotIdentifier as $n, readbackPathFor as $o, DiffCalculator as $r, applyCrossPrefixScan as $s, namesAnyDeclaredParameter as $t, findServiceTokenRefusals as A, refuseMalformedOrphanRecordsForDestroy as Aa, parseBootstrapMarker as Ac, coerceParameterTypedValue as Ai, AssemblyReader as Al, gray as An, replayWarn as Ao, isCustomResourceType as Ar, inheritNestedStackParameterAssociations as As, removeProtectionTypeList as At, parentSuppliedValues as B, refuseMalformedResourceEntriesForImport as Ba, dockerSpawnEnvWithSensitive as Bc, cfnRefValueFromPhysicalId as Bi, displayAssemblyPath as Bl, journaledOrphanPrintingBag as Bn, sameLambdaFunctionAddress as Bo, UNSPECIFIED_SKIP_REASON as Br, recordMaskOnlyValuesIn as Bs, resolveReplacementOldType as Bt, getPriorAttempts as C, malformedResourcesWarning as Ca, rewriteTemplateAssetReferences as Cc, applyCallerIdentityCredentials as Ci, uploadCfnTemplate as Cl, awaitInFlightSibling as Cn, toFiniteNumber as Co, ProviderRegistry as Cr, withPhysicalNameCopies as Cs, formatResourceLine as Ct, crossStackOutputProvenanceSource as D, refuseDivergentRecordRegionForDestroy as Da, ensureAssetStorage as Dc, classifyReplaySecretRegion as Di, PARTITION_TABLE as Dl, replacedDeleteFailureVerdict as Dn, configIntegerRefusal as Do, waitForLambdaFunctionActive as Dr, isUncertifiedBaselineMaskPosition as Ds, withApiLimit as Dt, computeImplicitDeleteEdges as E, previewableOrphanRecords as Ea, assertAssetBucketRegion as Ec, classifyRecordedSecretRegion as Ei, expectedOwnerParam as El, withStackRecords as En, configBooleanRefusal as Eo, wouldReturnToSdkProvider as Er, dynamicReferenceTokens as Es, lookupEachName as Et, listNestedTemplateRows as F, refuseMalformedOutputsForDestroy as Fa, buildDockerImage as Fc, carriesDynamicReference as Fi, hasPlainPrototype$1 as Fl, noEchoComparisonForTemplate as Fn, templateResourceTypes as Fo, customResourceResponseExpirationWarning as Fr, recordPhysicalNameCopy as Fs, planFailedOps as Ft, keptWholeReasonText as G, refuseMalformedResourcePropertiesForExport as Ga, isMalformedEnvKey as Gc, parameterInputsFor as Gi, clearBucketRegionCache as Gl, secretNamePrintingBags as Gn, maskAtCoordinates as Go, isWaitAbandonedError as Gr, WHOLE_DYNAMIC_REFERENCE_PATTERN as Gs, inheritProducerRegions as Gt, withResourceDeadline as H, refuseMalformedResourceEntriesForOrphan as Ha, formatDockerLoginError as Hc, refStateLookupFromResource as Hi, resolveAssemblyPath as Hl, namingSecretsWithRecordedNoEcho as Hn, TemplateParser as Ho, deleteLeftInPlace as Hr, recordNoEchoParameterFreshValue as Hs, orphanNeedsIdentity as Ht, renderNestedTemplateTreeDefect as I, refuseMalformedResourceAttributesForOrphan as Ia, resolveDockerContextDirectory as Ic, carriesFetchableDynamicReference as Ii, nullPrototypeRecord as Il, noEchoExactEchoLeavesOf as In, describeTypeWithThrottleRetry as Io, CloudControlProvider as Ir, splitGetAttStringForm as Is, planRollback as It, makeSiblingClaimReader as J, refuseMalformedResourcesForDestroy as Ja, redactedCause as Jc, JSON_LISTING_HOLE_VALUE as Ji, stateSecretNameNeedles as Jn, maskedLeafCoordinatesOf as Jo, ec2InstanceProtectionSite as Jr, isLockInfoExpired as Js, redactedDeleteAddressFields as Jt, mergeNoChangeOutputs as K, refuseMalformedResourcePropertiesForOrphan as Ka, partitionSensitiveEnv as Kc, passedParameterClassesOf as Ki, resolveBucketRegion as Kl, secretNamedAttributeNamesOf as Kn, maskReadbackAtCoordinates as Ko, markWaitAbandoned as Kr, isSingleDynamicReferenceToken as Ks, REDACTED_DELETE_ADDRESS_SKIP_REASON as Kt, templateIdentity as L, refuseMalformedResourceEntries as La, describeDockerCapturedOutput as Lc, isNamelessDynamicReferenceError as Li, ownValue as Ll, noEchoParameterNamesOf as Ln, withRetry as Lo, slowCcOperationTimeoutMs as Lr, carriesSecretMask as Ls, recheckFailedPlan as Lt, childTemplateLoader as M, refuseMalformedOrphansForDestroy as Ma, validateAssetBucketName as Mc, parameterTypeMayLoseSecretIdentity as Mi, processStackMessages as Ml, red as Mn, requireConfigObject as Mo, withPrintingSecrets as Mr, recoverMaskedOutput as Ms, demoteSupersededOrphans as Mt, findNestedTemplateTreeDefect as N, refuseMalformedOrphansForOrphan as Na, validateContainerRepoName as Nc, getAccountInfo as Ni, defineOwnKey as Nl, yellow as Nn, requireConfigString as No, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Nr, physicalNameCopiesOf as Ns, isJournaledOrphan as Nt, inheritedProvenanceForChildDiff as O, refuseMalformedNestedChildOutputs as Oa, getBootstrapMarkerKey as Oc, producerRegionsFromState as Oi, canonicalizeRegion as Ol, bold as On, configStringRefusal as Oo, TemplateNoEchoReresolver as Or, pathCrossesDottedKey as Os, replayFailedOperations as Ot, isAbsoluteAssetPath as P, refuseMalformedOutputs as Pa, buildDenyExternalAccessPolicy as Pc, isImpossibleEmptyStoredAttribute as Pi, hasOwnKey as Pl, noEchoAttributeNamesOf as Pn, prefetchCreateOnlyPropertyPaths as Po, applyCustomResourceResponseExpiration as Pr, recordAttributeIdCopy as Ps, isReplacementOrphan as Pt, pendingRequestCount as Q, repairMalformedOrphansForReadOnly as Qa, warnFinchArgvExposure as Qc, UNREADABLE_RESOURCES_MAP_ROW as Qi, PRE_DELETE_SNAPSHOT_TYPES as Qn, passedNoEchoParametersOf as Qo, reEnableInstanceApiTermination as Qr, CrossPrefixScanCache as Qs, computeParameterTaint as Qt, conditionFingerprint as R, refuseMalformedResourceEntriesForDeploy as Ra, describeDockerExecFailure as Rc, keepsSecretReferenceToken as Ri, absoluteAssemblyPathEscape as Rl, createReadOnlyAttributeHealerFactory as Rn, canonicalLambdaFunctionName as Ro, unchangedBehindSecretReference as Rr, provenPublicValue as Rs, recordUnderIdIsNotOwn as Rt, isTruthyCfnBoolean as S, malformedResourcePropertiesWarning as Sa, loadPublishableAssetManifest as Sc, AWS_CREDENTIAL_ENV_KEYS as Si, findLargeInlineResources as Sl, formatDestructiveChange as Sn, toCfnInteger as So, CC_BROKEN_REASON as Sr, scrubResourceRecord as Ss, sameJournaledOrphans as St, IMPLICIT_DELETE_DEPENDENCIES as T, malformedStateRefusalMessage as Ta, BOOTSTRAP_MARKER_PREFIX as Tc, envCredentialsAreAssumedRole as Ti, decodeListingKey as Tl, getStackRecords as Tn, coerceCfnInteger as To, isCustomResource as Tr, DYNAMIC_REFERENCE_TOKEN_SCAN as Ts, isAccessDeniedError as Tt, diffSecurity as U, refuseMalformedResourcePropertiesForDestroy as Ua, getDockerCmd as Uc, parseWebACLArn as Ui, injectAwsRegion as Ul, orphanRecordsPrintingBag as Un, canonicalCoordinates as Uo, deleteSkipReason as Ur, recordProvenPublicExpression as Us, findNestedStackTypeChanges as Ut, readRecordedConditionVerdicts as V, refuseMalformedResourceEntriesForImportSave as Va, finchSecretArgvRefusal as Vc, isStalePlaceholderArnAttribute as Vi, renderAssemblyPathEscape as Vl, maskEventTextWithBoundBags as Vn, DagBuilder as Vo, deleteIndeterminateGuards as Vr, recordNoEchoAttributeValues as Vs, seedsDeleteFirstGuard as Vt, isSecretBearingReferenceString as W, refuseMalformedResourcePropertiesForDrift as Wa, isDockerClientEnvKey as Wc, withSharedDrainBudget as Wi, injectedAwsRegionValue as Wl, secretNamePrintingBag as Wn, isMarkedCoordinate as Wo, withIndeterminateGuard as Wr, wholeStringLeavesOf as Ws, getCurrentProducerRegions as Wt, DeploymentEventsReader as X, refuseMalformedState as Xa, runDockerForeground as Xc, STATE_RESOURCES_MALFORMED as Xi, extractDeploymentEventError as Xn, noEchoLeavesOf as Xo, observeThenDisableInstanceApiTermination as Xr, rebuildClientForBucketRegion as Xs, updatePartialMessage as Xt, planOrphanAdoption as Y, refuseMalformedResourcesForExport as Ya, redactedDockerCause as Yc, STATE_REGION_DIVERGED as Yi, storedSecretNameNeedles as Yn, noEchoCoordinatesOf as Yo, isTerminationProtectionPropagationError as Yr, S3StateBackend as Ys, redactedDeleteAddressSkip as Yt, DeploymentEventsStore as Z, repairMalformedOrphanRecordsForReadOnly as Za, runDockerStreaming as Zc, UNREADABLE_ORPHANS_CONTAINER_ROW as Zi, ATOMIC_FINAL_SNAPSHOT_TYPES as Zn, noEchoOutputsComparison as Zo, reDisableInstanceApiTermination as Zr, CrossPrefixReadError as Zs, updatePartialReason as Zt, deleteTableWithIndexBusyRetry as _, malformedOrphansWarning as _a, isSensitiveAttributeName as _c, assertFlagRoleArn as _i, warnDeprecatedNoPrefixCliFlag as _l, DEFAULT_RESOURCE_TIMEOUT_MS as _n, isStatefulRecreateTargetSync as _o, refuseMalformedDesiredTags as _r, unionOfSecretBags as _s, dropFailedHint as _t, isProtectionValueActive as a, isReadableOrphanRecord as aa, describeRegionValueKind as ac, s3BucketDomainName as ai, synthesisStatusMessage as al, secretBearing as an, unreadableResourceEntries as ao, unsupportedFinalSnapshotError as ar, redactForState as as, dropSettledNestedJournals as at, S3_AUTO_DELETE_OBJECTS_TAG as b, malformedRenderedContainersWarning as ba, buildAssetRedirectMap as bc, isIamRoleArn as bi, CFN_TEMPLATE_URL_LIMIT as bl, constructPathOf as bn, coerceWarmThroughput as bo, definedAttributes as br, maskSecretsInError as bs, loadJournaledOrphans as bt, DynamoDBGlobalTableProvider as c, malformedExportNamesWarning as ca, hasReasonlessBaselineRefusal as cc, s3BucketWebsiteUrl as ci, loadCdkJson as cl, carriedExportAliasExposure as cn, findSilentDropProperties as co, reserveStackCreateToken as cr, carryLogOnlyValues as cs, recordDisplacedSkips as ct, compensateRemovedDeletionProtection as d, malformedLocalResourceEntriesWarning as da, importableOutputs as dc, refuseUnreadableCdkCrossAccountRefs as di, resolveCaptureObservedState as dl, isWholeDynamicReferenceValue as dn, NO_CC_HANDLERS_REASON as do, isRefusedByName as dr, literalSplitDelimitersOf as ds, withNestedRevertRun as dt, deployRefusesOrphanRowsReason as ea, crossPrefixDeniedWarning as ec, INTRINSIC_KEYS as ei, stripControlChars as el, reachableDivergentParameters as en, repairMalformedResourceEntriesForReadOnly as eo, ccRoutedFinalSnapshotError as er, readsNoEchoSource as es, keptForReadoption as et, deleteBudgetKey as f, malformedLocalResourcesWarning as fa, isReadableBag as fc, keepHeldTokenProvenance as fi, resolveSkipPrefix as fl, noEchoParameterValueSeed as fn, hasNoCloudControlHandlers as fo, markDeleteStarted as fr, logOnlyValueCount as fs, collectNestedChildUnaddressed as ft, INDEX_SETTLE_POLL_INTERVAL_MS as g, malformedOrphansRefusalMessage as ga, AssetPublisher as gc, applyRoleArnIfSet as gi, stateBucketExistenceConfirmed as gl, bindingSkippedOutputs as gn, isStatefulRecreateTargetForReplace as go, readTagList as gr, shareLogOnlyValues as gs, dropFailedCommands as gt, DELETE_INDEX_WAIT_PROCEED_NOTE as h, malformedOrphanRowsKeptWarning as ha, shouldRetainResource as hc, recordedReferenceRegions as hi, resolveUseCdkBootstrapAssets as hl, isExportAliasCollision as hn, MULTI_REGION_RECREATE_BLOCKED_TYPES as ho, planTagDiff as hr, recordLogOnlyValue as hs, deleteJournaledOrphans as ht, PROTECTION_PROPERTY_BY_TYPE as i, hasReadableResources as ia, acceptedCreateOnlyDropsOf as ic, s3BucketArn as ii, Synthesizer as il, exportAliasCollisionScrubWarning as in, unreadableOrphanRecords as io, refusesFinalSnapshot as ir, markSameGenerationBag as is, displacedPhysicalIdShown as it, serviceTokenBlockingReason as j, refuseMalformedOrphans as ja, readBootstrapMarkerBody as jc, isUnboundTemplateParameter as ji, StageLoadError as jl, green as jn, requireConfigArray as jo, getCurrentResourceSecrets as jr, recordNestedStackParameterExpressions as js, recordAfterRollbackUpdate as jt, deferredServiceTokenWarning as k, refuseMalformedOrphanRecords as ka, isCrossRegionRedirect as kc, regionLessSecretName as ki, derivePartitionAndUrlSuffix as kl, cyan as kn, readConfigString as ko, readsNoEchoDeleteValues as kr, identityKeyFor as ks, replayRollback as kt, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as l, malformedExportSourceWarning as la, hasUnverifiableParameterRefusal as lc, resolveDynamicReferences as li, resolveApp as ll, exportNameNoEchoParameters as ln, unwrittenCreateOnlyReplacement as lo, withCreateTokenLedger as lr, createUnionSecretMasker as ls, revertNestedChildFromJournal as lt, resolveDynamoDbDeleteBudgetMs as m, malformedOrphanRecordsWarning as ma, orphansCarriedFrom as mc, recordedOutputReferenceRegions as mi, resolveStateBucketWithDefaultAndSource as ml, collectPublishedOutputNames as mn, shownType as mo, DBPROXY_TAG_OPTIONS as mr, recordLogOnlyParameterValue as ms, withNestedStackContext as mt, recordedProtectionEvidence as n, hasReadableOrphans as na, isNotImplemented as nc, poisonRenderedSpellingsCollidingIn as ni, AssetManifestLoader as nl, WITHHELD_NAME_DISPLAY as nn, repairMalformedResourcesForReadOnly as no, effectiveDeletionPolicy as nr, valueAtCoordinate as ns, NESTED_PENDING_PARENT_REASON as nt, perType as o, isReadableResourceEntry as oa, exportNamesCarriedFrom as oc, s3BucketDualStackDomainName as oi, getDefaultStateBucketName as ol, secretBearingStateKeyWarning as on, withheldAccountClause as oo, earliestDefined as or, recordReferenceProvenanceEntry as os, getNestedRevertRun as ot, resolveDynamoDbDeleteBudgetClock as p, malformedOrphanRecordsRefusalMessage as pa, orphansAfterRollback as pc, outputReferenceProvenanceOf as pi, resolveStateBucketWithDefault as pl, collectDeclaredOutputNames as pn, findReplacedReadersOfRecreateTargets as po, DBPROXY_TAGS_WHAT as pr, printingCorpusOf as ps, getCurrentNestedStackContext as pt, makeCanonicalizePropertiesFn as q, refuseMalformedResourcesForDeploy as qa, redactDockerArgvValues as qc, declaresNoEcho as qi, secretNamedRecordNeedles as qn, maskWholeValue as qo, disableInstanceApiTermination as qr, LockManager as qs, isRedactedRecordedValue as qt, recordedProtectionNote as r, hasReadableOutputs as ra, splitImportedOps as rc, isSettledInstanceState as ri, getDockerImageBySourceHash as rl, displayTextOrWithheld as rn, unpreviewableOrphanRecords as ro, isFinalSnapshotError as rr, liveMatchesUnresolvedTokenFrame as rs, displacedOpClause as rt, readProtection as s, malformedDriftResourcePropertiesWarning as sa, hasReadableExportSet as sc, s3BucketRegionalDomainName as si, getLegacyStateBucketName as sl, secretSafeKeyDisplay as sn, findActionableSilentDrops as so, ledgerForStack as sr, snapshotPassProvenance as ss, nestedChildStackName as st, DeployEngine as t, displayLogicalId as ta, isAccessDenied$1 as tc, IntrinsicFunctionResolver as ti, stripForDisplay as tl, resourcesNamingDeclaredParameter as tn, repairMalformedResourcePropertiesForReadOnly as to, createPreDeleteFinalSnapshot as tr, recordedNoEchoValuesOf as ts, recordRetainedForReadoption as tt, beginDeleteWait as u, malformedLocalOutputsWarning as ua, importableOutputKeys as uc, producerLookupOver as ui, resolveAutoAssetStorage as ul, exportNameSecretExposure as un, withoutSilentDropProperties as uo, acquireIdempotencyToken as ur, hasMaskableValues as us, revertedNestedRowIds as ut, waitForIndexesSettled as v, malformedOutputsRefusalMessage as va, stringifyValue as vc, assertSendableRoleArn as vi, ssmResolvedValueType as vl, DEFAULT_RESOURCE_WARN_AFTER_MS as vn, renderStatefulReason as vo, tagMapAsList as vr, createSecretMasker as vs, isHandledOrphan as vt, markRefusedBeforeApplying as w, malformedScrubResourceEntriesRefusalMessage as wa, AssetModeResolver as wc, callerEnvCredentials as wi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as wl, destroyStackRecordsView as wn, coerceCfnBoolean as wo, ccBrokenReason as wr, withoutPhysicalNameCopies as ws, chunks as wt, hasCdkAutoDeleteTag as x, malformedResourceEntriesWarning as xa, createAssetRedirectResolver as xc, sendableAssumeRoleCommand as xi, MIGRATE_TMP_PREFIX as xl, findDestructiveChanges as xn, isWarmThroughputDecrease as xo, stringifyIfAssigned as xr, maskSecretsInText as xs, makeForeignHolderScan as xt, ECR_AUTO_DELETE_IMAGES_TAG as y, malformedOutputsWarning as ya, WorkGraph as yc, explicitRoleArnOrThrow as yi, CFN_TEMPLATE_BODY_LIMIT as yl, maskingRetryLogger as yn, WARM_THROUGHPUT_MEMBERS as yo, tagPlanWarning as yr, errorCauseChain as ys, journaledOrphanLines as yt, conditionInputsFrom as z, refuseMalformedResourceEntriesForDestroy as za, describeDockerFailure as zc, AWS_NO_VALUE as zi, describeFileReadFailure as zl, completedReplayEntries as zn, lambdaFunctionNameForMask as zo, RollbackInlinePolicyWriters as zr, recordMaskOnlyValue as zs, replacementNeverSwapped as zt };
49133
+ //# sourceMappingURL=deploy-engine-6bGIDa7Z.js.map