@go-to-k/cdkd 0.299.0 → 0.299.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{asg-provider-CGN1a3d3.js → asg-provider-C6USPLiS.js} +2 -2
- package/dist/{asg-provider-CGN1a3d3.js.map → asg-provider-C6USPLiS.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-4K_B3N08.js → deploy-engine-DlLwYRJk.js} +431 -209
- package/dist/deploy-engine-DlLwYRJk.js.map +1 -0
- package/dist/iam-policy-targets-Pn2m0R67.js.map +1 -1
- package/dist/{iam-role-provider-BKnf387o.js → iam-role-provider-D5B5lEmu.js} +2 -2
- package/dist/{iam-role-provider-BKnf387o.js.map → iam-role-provider-D5B5lEmu.js.map} +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/{neptune-provider-CR19ID_J.js → neptune-provider-Ba5va85p.js} +2 -2
- package/dist/{neptune-provider-CR19ID_J.js.map → neptune-provider-Ba5va85p.js.map} +1 -1
- package/dist/{program-BgsCaZFy.js → program-TA6lNkLr.js} +88 -25
- package/dist/program-TA6lNkLr.js.map +1 -0
- package/dist/{provider-classes-DxHQcC1K.js → provider-classes-WJRB6zvO.js} +31 -16
- package/dist/provider-classes-WJRB6zvO.js.map +1 -0
- package/dist/{rds-provider-BO3U39K0.js → rds-provider-DcUEh3d2.js} +2 -2
- package/dist/{rds-provider-BO3U39K0.js.map → rds-provider-DcUEh3d2.js.map} +1 -1
- package/dist/{version-DUCWZskc.js → version-Dz0rTkus.js} +2 -2
- package/dist/{version-DUCWZskc.js.map → version-Dz0rTkus.js.map} +1 -1
- package/package.json +1 -1
- package/dist/deploy-engine-4K_B3N08.js.map +0 -1
- package/dist/program-BgsCaZFy.js.map +0 -1
- package/dist/provider-classes-DxHQcC1K.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { r as getAwsClients, s as __exportAll } from "./aws-clients-Bj7qH5Ph.js"
|
|
|
2
2
|
import { A as UNRENDERABLE, C as looksLikeCdkdGeneratedName, E as withoutGeneratedFallbackName, F as displayStackName, H as truncateCodePoints, I as isPasteableIdent, M as displayAwsMessage, N as displayIdent, O as SECRET_REF_MAX_CODE_POINTS, P as displaySafe, R as plainIdentOr, S as getCurrentStackName, T as withStackName, V as terminalSafe, a as getLogger, b as generateResourceNameWithFallback, d as installLogLineMaskerSource, f as getLiveRenderer, g as applyDefaultNameForFallback, k as STACK_REF_MAX_CODE_POINTS, o as isStdoutReservedForPayload, r as safeStringify$1, t as describeAwsFailure, u as currentLogLineMasker, v as explicitNamePropertyFor, w as withSkipPrefix, x as getCurrentSkipPrefix, y as generateResourceName, z as safeMsg } from "./aws-failure-text-DtvlUugx.js";
|
|
3
3
|
import { $ as protectedReplacementAdvice, $n as isAmbiguousOutcomeError, $t as credentialFingerprint, A as isQuotableImportValue, An as UNSHOWABLE_VALUE, At as isAuxiliaryMarkOf, B as isTerminalDeleteFailure, Bn as withheldTargetClause, Bt as recoveryCommandFlags, Ct as RETRY_AUXILIARY_OWNER, Dt as createdResourceIdentityBeforeFailure, E as assertRegionMatch, Et as createdBeforeFailure, F as resolveExplicitPhysicalId, Fn as physicalIdShownBesideCommand, G as runDeleteAttempt, Gn as isNameCollisionErrorFrom, H as observeThenDisableProtection, Ht as CUSTOM_RESOURCE_RESPONSE_PREFIX, In as plainOrDescribed, J as DELETION_PROTECTION_DOC_POINTER, Jn as isReplayedNameCollisionFrom, Kn as isNameCooldownError, L as ProtectionFlipRegistry, Ln as quotedOrDescribed, Lt as formatLockExpiry, M as quotedRemedyLogicalId, Mt as markCreatedBeforeFailure, N as refusalTypeShown, Nn as isInertUnquoted, Nt as UNREPRODUCIBLE_LOCK_CLAUSE, On as SHELL_ACTIVE, Ot as hasCreatedBeforeFailure, Pn as pasteableCommand, Pt as buildForceUnlockCommand, Q as pasteableAwsCommand, Qn as isAmbiguousCcHandlerErrorCode, Qt as clientDefaultsFor, R as compensateProtectionFlip, Rn as shellBoundedDisplay, Rt as formatLockOperation, Sn as SynthesisError, St as withDerivedNameMasks, T as RESOURCE_NOT_FOUND, Tn as normalizeAwsError, U as protectionFlipKey, Un as isUpdateUnsupportedError, Ut as DEFAULT_STATE_PREFIX, Vt as sanitizeRecoveryValue, Wn as hasReplayMayCollide, Wt as injectiveKey, Xn as markReplayMayCollide, Xt as ambientClientDefaults, Yt as withPasteableAwsProfile, Zn as formatRetryClassificationSignals, Zt as ambientCredentialConfig, _n as ResourceTimeoutError, _t as createMaskedLogSinks, an as DependencyError, ar as isMarkedNonRetryable, at as startInterruptWatch, bt as maskDeep, cn as IntrinsicResolutionRefusalError, cr as markRedactedCause, ct as canonicalizeRoute53QueryName, d as prepareRemovalForUpdate, dn as LockError, en as AccountIdUnavailableError, er as isIamPropagationError, f as removalWarning, fn as MacroExpansionError, ft as logicalIdShown, gn as ProvisioningError, gt as stateOrphanRecordRemedy, ht as segmentAfterAnchor, i as holdsSecretDerivedEntry, in as CrossAccountSecretRefusalError, it as isInterruptedWaitError, j as normalizeAwsTagsToCfn, jn as commandHole, jt as markAuxiliaryFailure, kn as SHELL_ACTIVE_WHY, kt as isAuxiliaryFailure, l as withUnchangedSecretPrincipalLists, lr as wrapMaskedAwsError, m as withoutInjectedRemovals, mt as resourceTypeShown, nn as CdkdError, nr as isTransientServerError, or as isThrottlingError, ot as ElapsedBudgetRegistry, pn as MalformedProducerRecordRefusalError, qn as isRecreateRetryableError, qt as producerRecordKey, rr as retryClassificationText, sn as DynamicReferenceRegionAmbiguousError, sr as markNonRetryable, st as monotonicNowMs, tn as AssetError, tr as isRetryableTransientError, ut as compositeIdSeparatorRefusal, vn as ResourceUpdateNotSupportedError, vt as createMaskedRetryLogger, w as withoutServerErrorRetries, wt as carryCreatedBeforeFailure, xn as StateError, xt as maskerOrIdentity, yt as isSecretDerivedValue, z as deleteWithProtectionCompensation, zn as shellQuote, zt as formatLockOwner } from "./iam-policy-targets-Pn2m0R67.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-
|
|
5
|
+
import { t as getCdkdVersion } from "./version-Dz0rTkus.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";
|
|
@@ -19463,6 +19463,14 @@ function classifyReplaySecretRegion(expression, consumerRegion, importedProducer
|
|
|
19463
19463
|
foreignProducerRegions
|
|
19464
19464
|
};
|
|
19465
19465
|
}
|
|
19466
|
+
function classifyRecordedSecretRegion(expression, consumerRegion, importedProducerRegions, recordedRegions) {
|
|
19467
|
+
const recorded = recordedRegions?.get(expression);
|
|
19468
|
+
if (recorded === void 0 || regionLessSecretName(expression) === void 0) return classifyReplaySecretRegion(expression, consumerRegion, importedProducerRegions);
|
|
19469
|
+
return canonicalizeRegion(recorded) === canonicalizeRegion(consumerRegion) ? { kind: "local" } : {
|
|
19470
|
+
kind: "recorded-region",
|
|
19471
|
+
region: recorded
|
|
19472
|
+
};
|
|
19473
|
+
}
|
|
19466
19474
|
|
|
19467
19475
|
//#endregion
|
|
19468
19476
|
//#region src/utils/s3-endpoints.ts
|
|
@@ -19651,6 +19659,335 @@ async function constructAttributeForCoreTypes(resource, attributeName, context,
|
|
|
19651
19659
|
return NOT_CONSTRUCTED;
|
|
19652
19660
|
}
|
|
19653
19661
|
|
|
19662
|
+
//#endregion
|
|
19663
|
+
//#region src/deployment/reference-provenance-record.ts
|
|
19664
|
+
const SSM_VERSION = /^[0-9]{1,10}$/;
|
|
19665
|
+
const SECRETS_MANAGER_VERSION = /^[A-Za-z0-9_+=.@/-]{32,64}$/;
|
|
19666
|
+
function referenceTokensIn(value, into = /* @__PURE__ */ new Set()) {
|
|
19667
|
+
const walk = (v) => {
|
|
19668
|
+
if (typeof v === "string") {
|
|
19669
|
+
if (!v.includes("{{resolve:")) return;
|
|
19670
|
+
for (const token of dynamicReferenceTokens(v)) into.add(token);
|
|
19671
|
+
return;
|
|
19672
|
+
}
|
|
19673
|
+
if (Array.isArray(v)) {
|
|
19674
|
+
for (const item of v) walk(item);
|
|
19675
|
+
return;
|
|
19676
|
+
}
|
|
19677
|
+
if (v !== null && typeof v === "object") for (const item of Object.values(v)) walk(item);
|
|
19678
|
+
};
|
|
19679
|
+
walk(value);
|
|
19680
|
+
return into;
|
|
19681
|
+
}
|
|
19682
|
+
function recordReferenceTokens(record) {
|
|
19683
|
+
const tokens = referenceTokensIn(record.properties);
|
|
19684
|
+
referenceTokensIn(record.attributes, tokens);
|
|
19685
|
+
referenceTokensIn(record.observedProperties, tokens);
|
|
19686
|
+
return tokens;
|
|
19687
|
+
}
|
|
19688
|
+
function versionShapeOf(token) {
|
|
19689
|
+
if (token.startsWith("{{resolve:secretsmanager:")) return SECRETS_MANAGER_VERSION;
|
|
19690
|
+
if (token.startsWith("{{resolve:ssm:") || token.startsWith("{{resolve:ssm-secure:")) return SSM_VERSION;
|
|
19691
|
+
}
|
|
19692
|
+
function isValidReferenceVersion(token, version) {
|
|
19693
|
+
const shape = versionShapeOf(token);
|
|
19694
|
+
return shape !== void 0 && typeof version === "string" && shape.test(version);
|
|
19695
|
+
}
|
|
19696
|
+
function validReferenceRegion(region) {
|
|
19697
|
+
if (typeof region !== "string") return void 0;
|
|
19698
|
+
return canonicalizeRegion(region) === region && isClientSafeRegion(region) ? region : void 0;
|
|
19699
|
+
}
|
|
19700
|
+
function isPlainObject$2(value) {
|
|
19701
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
19702
|
+
}
|
|
19703
|
+
function validateReferenceProvenance(token, raw) {
|
|
19704
|
+
if (!isSingleDynamicReferenceToken(token) || !isPlainObject$2(raw)) return void 0;
|
|
19705
|
+
const versionsRaw = Object.hasOwn(raw, "versions") ? raw["versions"] : void 0;
|
|
19706
|
+
const readRaw = Object.hasOwn(raw, "readVersions") ? raw["readVersions"] : void 0;
|
|
19707
|
+
if (readRaw !== void 0) {
|
|
19708
|
+
if (!Array.isArray(readRaw)) return void 0;
|
|
19709
|
+
const all = Array.isArray(versionsRaw) ? versionsRaw : [];
|
|
19710
|
+
if (!readRaw.every((v) => all.includes(v))) return void 0;
|
|
19711
|
+
}
|
|
19712
|
+
const out = {};
|
|
19713
|
+
const region = validReferenceRegion(Object.hasOwn(raw, "region") ? raw["region"] : void 0);
|
|
19714
|
+
if (region !== void 0) out.region = region;
|
|
19715
|
+
if (Array.isArray(versionsRaw) && versionsRaw.length > 0 && versionsRaw.length <= 8 && versionsRaw.every((v) => isValidReferenceVersion(token, v)) && (readRaw === void 0 || readRaw.every((v) => typeof v === "string"))) {
|
|
19716
|
+
out.versions = [...new Set(versionsRaw)].sort();
|
|
19717
|
+
if (readRaw !== void 0 && readRaw.length > 0) out.readVersions = [...new Set(readRaw)].sort();
|
|
19718
|
+
}
|
|
19719
|
+
return out;
|
|
19720
|
+
}
|
|
19721
|
+
function referenceProvenanceOf(record) {
|
|
19722
|
+
if (!isPlainObject$2(record) || !Object.hasOwn(record, "referenceProvenance")) return void 0;
|
|
19723
|
+
return validatedBag(record["referenceProvenance"]);
|
|
19724
|
+
}
|
|
19725
|
+
function validatedBag(field) {
|
|
19726
|
+
if (!isPlainObject$2(field)) return void 0;
|
|
19727
|
+
const out = Object.create(null);
|
|
19728
|
+
for (const [token, raw] of Object.entries(field)) {
|
|
19729
|
+
const entry = validateReferenceProvenance(token, raw);
|
|
19730
|
+
if (entry !== void 0) out[token] = entry;
|
|
19731
|
+
}
|
|
19732
|
+
return { ...out };
|
|
19733
|
+
}
|
|
19734
|
+
function recordedProvenanceOf(record, token) {
|
|
19735
|
+
if (!isPlainObject$2(record) || !Object.hasOwn(record, "referenceProvenance")) return void 0;
|
|
19736
|
+
const field = record["referenceProvenance"];
|
|
19737
|
+
if (!isPlainObject$2(field) || !Object.hasOwn(field, token)) return void 0;
|
|
19738
|
+
return validateReferenceProvenance(token, field[token]);
|
|
19739
|
+
}
|
|
19740
|
+
function recordedReferenceRegions(record) {
|
|
19741
|
+
const field = referenceProvenanceOf(record);
|
|
19742
|
+
return field === void 0 ? void 0 : regionsOf(field);
|
|
19743
|
+
}
|
|
19744
|
+
function recordedOutputReferenceRegions(state, outputKey) {
|
|
19745
|
+
const field = outputReferenceProvenanceOf(state, outputKey);
|
|
19746
|
+
return field === void 0 ? void 0 : regionsOf(field);
|
|
19747
|
+
}
|
|
19748
|
+
function regionsOf(field) {
|
|
19749
|
+
let out;
|
|
19750
|
+
for (const [token, entry] of Object.entries(field)) {
|
|
19751
|
+
if (entry.region === void 0) continue;
|
|
19752
|
+
(out ??= /* @__PURE__ */ new Map()).set(token, entry.region);
|
|
19753
|
+
}
|
|
19754
|
+
return out;
|
|
19755
|
+
}
|
|
19756
|
+
function keepHeldTokenProvenance(record) {
|
|
19757
|
+
if (!hasReferenceProvenanceField(record)) return record;
|
|
19758
|
+
const field = record.referenceProvenance;
|
|
19759
|
+
if (!isPlainObject$2(field)) return record;
|
|
19760
|
+
const held = recordReferenceTokens(record);
|
|
19761
|
+
const keys = Object.keys(field);
|
|
19762
|
+
if (keys.every((token) => held.has(token))) return record;
|
|
19763
|
+
const kept = {};
|
|
19764
|
+
for (const token of keys) if (held.has(token)) kept[token] = field[token];
|
|
19765
|
+
return {
|
|
19766
|
+
...record,
|
|
19767
|
+
referenceProvenance: kept
|
|
19768
|
+
};
|
|
19769
|
+
}
|
|
19770
|
+
function hasReferenceProvenanceField(record) {
|
|
19771
|
+
return isPlainObject$2(record) && Object.hasOwn(record, "referenceProvenance") && record["referenceProvenance"] !== void 0;
|
|
19772
|
+
}
|
|
19773
|
+
function outputReferenceProvenanceOf(state, outputKey) {
|
|
19774
|
+
if (!isPlainObject$2(state) || !Object.hasOwn(state, "outputReferenceProvenance")) return;
|
|
19775
|
+
const field = state["outputReferenceProvenance"];
|
|
19776
|
+
if (!isPlainObject$2(field) || !Object.hasOwn(field, outputKey)) return void 0;
|
|
19777
|
+
return validatedBag(field[outputKey]);
|
|
19778
|
+
}
|
|
19779
|
+
function persistable(token, entry) {
|
|
19780
|
+
return (entry === void 0 ? void 0 : validateReferenceProvenance(token, entry)) ?? {};
|
|
19781
|
+
}
|
|
19782
|
+
function tokensUnderPaths(properties, paths) {
|
|
19783
|
+
const out = /* @__PURE__ */ new Set();
|
|
19784
|
+
const descend = (value, path, at) => {
|
|
19785
|
+
if (at === path.length) {
|
|
19786
|
+
referenceTokensIn(value, out);
|
|
19787
|
+
return;
|
|
19788
|
+
}
|
|
19789
|
+
if (Array.isArray(value)) {
|
|
19790
|
+
const next = path[at] === "*" ? at + 1 : at;
|
|
19791
|
+
for (const item of value) descend(item, path, next);
|
|
19792
|
+
return;
|
|
19793
|
+
}
|
|
19794
|
+
if (isPlainObject$2(value) && Object.hasOwn(value, path[at])) descend(value[path[at]], path, at + 1);
|
|
19795
|
+
};
|
|
19796
|
+
for (const path of paths) descend(properties, path, 0);
|
|
19797
|
+
return out;
|
|
19798
|
+
}
|
|
19799
|
+
function provenanceForWrittenRecord(args) {
|
|
19800
|
+
const { record, secrets, previous, inPlace } = args;
|
|
19801
|
+
const previousField = inPlace === void 0 ? void 0 : referenceProvenanceOf(previous);
|
|
19802
|
+
if (!hasPassProvenance(secrets) && previousField === void 0 && args.walkWithoutPassProvenance !== true) return;
|
|
19803
|
+
const tokens = recordReferenceTokens(record);
|
|
19804
|
+
if (tokens.size === 0) return void 0;
|
|
19805
|
+
let kept;
|
|
19806
|
+
if (inPlace !== void 0) {
|
|
19807
|
+
kept = inPlace.createOnly === "all" ? tokens : tokensUnderPaths(record.properties, inPlace.createOnly);
|
|
19808
|
+
if (inPlace.attributesCarried) referenceTokensIn(record.attributes, kept);
|
|
19809
|
+
}
|
|
19810
|
+
const out = {};
|
|
19811
|
+
for (const token of [...tokens].sort()) {
|
|
19812
|
+
const pass = passProvenanceFor(secrets, token);
|
|
19813
|
+
if (kept === void 0 || !kept.has(token)) {
|
|
19814
|
+
out[token] = persistable(token, pass);
|
|
19815
|
+
continue;
|
|
19816
|
+
}
|
|
19817
|
+
const before = previousField !== void 0 && Object.hasOwn(previousField, token) ? previousField[token] : void 0;
|
|
19818
|
+
if (pass === void 0) {
|
|
19819
|
+
out[token] = before === void 0 ? {} : { ...before };
|
|
19820
|
+
continue;
|
|
19821
|
+
}
|
|
19822
|
+
out[token] = persistable(token, unionWithPrevious(pass, before));
|
|
19823
|
+
}
|
|
19824
|
+
return out;
|
|
19825
|
+
}
|
|
19826
|
+
function unionWithPrevious(pass, before) {
|
|
19827
|
+
const out = {};
|
|
19828
|
+
if (pass.region !== void 0 && (before?.region === void 0 || before.region === pass.region)) out.region = pass.region;
|
|
19829
|
+
if (pass.versions !== void 0 && before?.versions !== void 0) {
|
|
19830
|
+
out.versions = [.../* @__PURE__ */ new Set([...before.versions, ...pass.versions])].sort();
|
|
19831
|
+
if (pass.readVersions !== void 0) out.readVersions = [...pass.readVersions];
|
|
19832
|
+
}
|
|
19833
|
+
return out;
|
|
19834
|
+
}
|
|
19835
|
+
function outputProvenanceForPersist(args) {
|
|
19836
|
+
const { outputs, resolvedThisRun, carriedFrom, sinkOf } = args;
|
|
19837
|
+
if (!resolvedThisRun) return carriedFrom !== void 0 && isPlainObject$2(carriedFrom.outputReferenceProvenance) ? carriedFrom.outputReferenceProvenance : void 0;
|
|
19838
|
+
let out;
|
|
19839
|
+
for (const [outputKey, value] of Object.entries(outputs)) {
|
|
19840
|
+
const sink = sinkOf(outputKey);
|
|
19841
|
+
if (!hasPassProvenance(sink)) continue;
|
|
19842
|
+
const tokens = referenceTokensIn(value);
|
|
19843
|
+
if (tokens.size === 0) continue;
|
|
19844
|
+
const entries = {};
|
|
19845
|
+
for (const token of [...tokens].sort()) entries[token] = persistable(token, passProvenanceFor(sink, token));
|
|
19846
|
+
out ??= Object.create(null);
|
|
19847
|
+
out[outputKey] = entries;
|
|
19848
|
+
}
|
|
19849
|
+
return out === void 0 ? void 0 : { ...out };
|
|
19850
|
+
}
|
|
19851
|
+
const KEEP_REFERENCE_PROVENANCE = Symbol("keep reference provenance");
|
|
19852
|
+
function withReferenceProvenance(record, field) {
|
|
19853
|
+
if (field === KEEP_REFERENCE_PROVENANCE) return record;
|
|
19854
|
+
if (field === void 0 && !Object.hasOwn(record, "referenceProvenance")) return record;
|
|
19855
|
+
const { referenceProvenance: _previous, ...rest } = record;
|
|
19856
|
+
return field === void 0 ? rest : {
|
|
19857
|
+
...rest,
|
|
19858
|
+
referenceProvenance: field
|
|
19859
|
+
};
|
|
19860
|
+
}
|
|
19861
|
+
|
|
19862
|
+
//#endregion
|
|
19863
|
+
//#region src/deployment/intrinsic-resolver/recorded-reference-routes.ts
|
|
19864
|
+
function tokensOf(value) {
|
|
19865
|
+
const out = /* @__PURE__ */ new Set();
|
|
19866
|
+
for (const leaf of wholeStringLeavesOf(value)) for (const token of dynamicReferenceTokens(leaf)) out.add(token);
|
|
19867
|
+
return [...out];
|
|
19868
|
+
}
|
|
19869
|
+
function recordedTokenRoutes(value, record) {
|
|
19870
|
+
if (!hasReferenceProvenanceField(record)) return void 0;
|
|
19871
|
+
const routes = /* @__PURE__ */ new Map();
|
|
19872
|
+
let recorded = false;
|
|
19873
|
+
for (const token of tokensOf(value)) {
|
|
19874
|
+
const entry = recordedProvenanceOf(record, token);
|
|
19875
|
+
const region = entry?.region;
|
|
19876
|
+
const pin = entry?.versions?.length === 1 ? entry.versions[0] : void 0;
|
|
19877
|
+
if (region !== void 0 || pin !== void 0) recorded = true;
|
|
19878
|
+
routes.set(token, {
|
|
19879
|
+
region,
|
|
19880
|
+
pin
|
|
19881
|
+
});
|
|
19882
|
+
}
|
|
19883
|
+
return recorded ? routes : void 0;
|
|
19884
|
+
}
|
|
19885
|
+
async function reresolveByRecordedRoutes(resolver, value, logicalId, context, origin, sourceKey, routes, defaults) {
|
|
19886
|
+
const tokens = [...routes.keys()];
|
|
19887
|
+
const regionOf = (token) => routes.get(token)?.region ?? defaults.region;
|
|
19888
|
+
const unrouted = tokens.filter((token) => routes.get(token)?.region === void 0);
|
|
19889
|
+
if (defaults.proofs !== void 0 && unrouted.length > 0) {
|
|
19890
|
+
if (!defaults.proofs.regionProven(unrouted)) {
|
|
19891
|
+
defaults.proofs.onRegionUnproven();
|
|
19892
|
+
return value;
|
|
19893
|
+
}
|
|
19894
|
+
}
|
|
19895
|
+
const routeOf = (token) => {
|
|
19896
|
+
const region = regionOf(token);
|
|
19897
|
+
return region ? {
|
|
19898
|
+
resolver: resolver.resolverForProducerRegion(region, context),
|
|
19899
|
+
context: withoutProducerRegions(context)
|
|
19900
|
+
} : {
|
|
19901
|
+
resolver,
|
|
19902
|
+
context
|
|
19903
|
+
};
|
|
19904
|
+
};
|
|
19905
|
+
const pins = /* @__PURE__ */ new Map();
|
|
19906
|
+
for (const token of tokens) {
|
|
19907
|
+
const pin = routes.get(token)?.pin;
|
|
19908
|
+
if (pin === void 0) continue;
|
|
19909
|
+
const read = await readsPinnedVersion(token, pin, routeOf(token));
|
|
19910
|
+
if (read === "read") pins.set(token, pin);
|
|
19911
|
+
else if (read === "failed" && context.provenanceCapture !== true) resolver.logger.warn(safeMsg`Could not read the secret version ${resolver.displayMasked(logicalId, context)} was deployed with for ${resolver.displayMasked(origin, context)} (it may have been deprecated or deleted); ${defaults.proofs === void 0 ? "serving its current value instead" : "checking its current value against the physical id instead"}.`);
|
|
19912
|
+
if (read === "short" && defaults.proofs === void 0 && context.provenanceCapture !== true) resolver.logger.warn(safeMsg`Not serving ${resolver.displayMasked(origin, context)} at the secret version ${resolver.displayMasked(logicalId, context)} was deployed with: that value is shorter than four characters, so cdkd could not keep it out of state; serving its current value instead.`);
|
|
19913
|
+
}
|
|
19914
|
+
if (defaults.proofs !== void 0) {
|
|
19915
|
+
const unpinned = tokens.filter((token) => !pins.has(token));
|
|
19916
|
+
if (unpinned.length > 0 && !await defaults.proofs.generationProven(unpinned, routeOf)) {
|
|
19917
|
+
defaults.proofs.onGenerationUnproven();
|
|
19918
|
+
return value;
|
|
19919
|
+
}
|
|
19920
|
+
}
|
|
19921
|
+
const walkContext = pins.size > 0 ? {
|
|
19922
|
+
...context,
|
|
19923
|
+
referencePins: pins
|
|
19924
|
+
} : context;
|
|
19925
|
+
const regions = new Set(tokens.map((token) => regionOf(token) ?? ""));
|
|
19926
|
+
if (regions.size <= 1) {
|
|
19927
|
+
const [only] = regions;
|
|
19928
|
+
return await resolver.reresolveCrossStackValue(value, only || void 0, walkContext, origin, sourceKey);
|
|
19929
|
+
}
|
|
19930
|
+
return await rebuildByToken(value, async (token) => String(await resolver.reresolveCrossStackValue(token, regionOf(token), walkContext, origin, void 0)));
|
|
19931
|
+
}
|
|
19932
|
+
const failedPins = /* @__PURE__ */ new WeakMap();
|
|
19933
|
+
async function readsPinnedVersion(token, pin, { resolver, context }) {
|
|
19934
|
+
const key = injectiveKey(token, pin);
|
|
19935
|
+
let failed = failedPins.get(resolver);
|
|
19936
|
+
if (failed?.has(key) === true) return "known";
|
|
19937
|
+
const { abandonedResolutions: _collected, ...throwing } = context;
|
|
19938
|
+
const quiet = {
|
|
19939
|
+
...throwing,
|
|
19940
|
+
provenanceSuppressed: true
|
|
19941
|
+
};
|
|
19942
|
+
try {
|
|
19943
|
+
await resolver.resolveDynamicReferences(token, quiet);
|
|
19944
|
+
} catch (err) {
|
|
19945
|
+
if (isDeliberateResolutionRefusal(err)) throw err;
|
|
19946
|
+
}
|
|
19947
|
+
try {
|
|
19948
|
+
const served = await resolver.resolveDynamicReferences(token, {
|
|
19949
|
+
...quiet,
|
|
19950
|
+
referencePins: /* @__PURE__ */ new Map([[token, pin]])
|
|
19951
|
+
});
|
|
19952
|
+
return !served.includes("{{resolve:") && served.length < 4 ? "short" : "read";
|
|
19953
|
+
} catch (err) {
|
|
19954
|
+
if (isDeliberateResolutionRefusal(err)) throw err;
|
|
19955
|
+
resolver.logger.debug(safeMsg`Pinned read of ${resolver.displayMasked(token, context)} failed: ${resolver.displayMasked(err instanceof Error ? err.message : String(err), context)}`);
|
|
19956
|
+
if (!isThrottlingError(err)) {
|
|
19957
|
+
if (failed === void 0) {
|
|
19958
|
+
failed = /* @__PURE__ */ new Set();
|
|
19959
|
+
failedPins.set(resolver, failed);
|
|
19960
|
+
}
|
|
19961
|
+
failed.add(key);
|
|
19962
|
+
}
|
|
19963
|
+
return "failed";
|
|
19964
|
+
}
|
|
19965
|
+
}
|
|
19966
|
+
async function rebuildByToken(value, resolveToken) {
|
|
19967
|
+
if (typeof value === "string") {
|
|
19968
|
+
let out = "";
|
|
19969
|
+
let cursor = 0;
|
|
19970
|
+
for (const token of dynamicReferenceTokens(value)) {
|
|
19971
|
+
const at = value.indexOf(token, cursor);
|
|
19972
|
+
if (at < 0) throw new Error("Internal invariant: a scanned dynamic reference was not found in the value it was scanned from");
|
|
19973
|
+
out += value.slice(cursor, at) + await resolveToken(token);
|
|
19974
|
+
cursor = at + token.length;
|
|
19975
|
+
}
|
|
19976
|
+
return out + value.slice(cursor);
|
|
19977
|
+
}
|
|
19978
|
+
if (Array.isArray(value)) {
|
|
19979
|
+
const out = new Array(value.length);
|
|
19980
|
+
for (let i = 0; i < value.length; i++) out[i] = await rebuildByToken(value[i], resolveToken);
|
|
19981
|
+
return out;
|
|
19982
|
+
}
|
|
19983
|
+
if (value !== null && typeof value === "object") {
|
|
19984
|
+
const out = Object.create(null);
|
|
19985
|
+
for (const [k, v] of Object.entries(value)) out[k] = await rebuildByToken(v, resolveToken);
|
|
19986
|
+
return out;
|
|
19987
|
+
}
|
|
19988
|
+
return value;
|
|
19989
|
+
}
|
|
19990
|
+
|
|
19654
19991
|
//#endregion
|
|
19655
19992
|
//#region src/deployment/intrinsic-resolver/getatt-construct-app.ts
|
|
19656
19993
|
async function constructAttributeForAppTypes(resource, attributeName, context, logicalId, resourceType, physicalId, accountId, partition, region) {
|
|
@@ -20055,7 +20392,14 @@ async function resolveGetAtt(getAtt, context) {
|
|
|
20055
20392
|
structured: isStructured(flatValue),
|
|
20056
20393
|
redacted: isSensitiveAttributeName(attributeName)
|
|
20057
20394
|
})}`);
|
|
20058
|
-
if (reresolvesNestedReference)
|
|
20395
|
+
if (reresolvesNestedReference) {
|
|
20396
|
+
const childRegion = nestedStackChildRegionFromLocalArn(resource.physicalId);
|
|
20397
|
+
const nestedOrigin = `nested stack ${logicalId} ${this.displayLeaf(attributeName, context)}`;
|
|
20398
|
+
const nestedSourceKey = crossStackSourceKey({ "Fn::GetAtt": getAtt });
|
|
20399
|
+
const routes = context.recordedSecretValues === void 0 || carriesSecretMask(flatValue) ? void 0 : recordedTokenRoutes(flatValue, resource);
|
|
20400
|
+
if (routes !== void 0) return await reresolveByRecordedRoutes(this, flatValue, logicalId, context, nestedOrigin, nestedSourceKey, routes, { region: childRegion });
|
|
20401
|
+
return await this.reresolveCrossStackValue(flatValue, childRegion, context, nestedOrigin, nestedSourceKey);
|
|
20402
|
+
}
|
|
20059
20403
|
return await this.reresolveRecordedReferences(notedFlatValue, logicalId, context, `${logicalId}.${this.displayLeaf(attributeName, context)}`, crossStackSourceKey({ "Fn::GetAtt": getAtt }));
|
|
20060
20404
|
}
|
|
20061
20405
|
if (attributeName.includes(".")) {
|
|
@@ -20177,22 +20521,38 @@ function recordSecretNamedRead(logicalId, value, context) {
|
|
|
20177
20521
|
async function reresolveRecordedReferences(value, logicalId, context, origin, sourceKey) {
|
|
20178
20522
|
if (!carriesDynamicReference(value) || carriesSecretMask(value)) return value;
|
|
20179
20523
|
if (context.recordedSecretValues === void 0) return value;
|
|
20524
|
+
const notReresolvingLine = () => this.logger.debug(safeMsg`Not re-resolving the reference(s) in ${this.displayMasked(origin, context)}: the template of ${this.displayMasked(logicalId, context)} does not spell them, and this stack may read a stack in another region, so the region that resolved them is unknown`);
|
|
20525
|
+
const servingAsRecordedLine = () => this.logger.warn(safeMsg`Serving ${this.displayMasked(origin, context)} as recorded, with its {{resolve:...}} reference(s) unresolved: cdkd cannot confirm the secret still holds the value ${this.displayMasked(logicalId, context)} was deployed with, because its physical id does not contain it. Either the secret changed since then (update ${this.displayMasked(logicalId, context)} so cdkd deploys it with the new value), or the value is not part of its name (a custom resource's Data, a name shorter than four characters), and cdkd sends the recorded reference as before.`);
|
|
20526
|
+
const record = Object.hasOwn(context.resources, logicalId) ? context.resources[logicalId] : void 0;
|
|
20527
|
+
const routes = recordedTokenRoutes(value, record);
|
|
20528
|
+
if (routes !== void 0) return await reresolveByRecordedRoutes(this, value, logicalId, context, origin, sourceKey, routes, {
|
|
20529
|
+
region: void 0,
|
|
20530
|
+
proofs: {
|
|
20531
|
+
regionProven: (tokens) => referencesProvenLocal(tokens, logicalId, context) || referencesRegionProven(tokens, context, this.resolverRegion),
|
|
20532
|
+
onRegionUnproven: notReresolvingLine,
|
|
20533
|
+
generationProven: (tokens, routeOf) => this.referencesMatchPhysicalId(tokens, logicalId, context, routeOf),
|
|
20534
|
+
onGenerationUnproven: () => {
|
|
20535
|
+
if (context.provenanceCapture !== true) servingAsRecordedLine();
|
|
20536
|
+
}
|
|
20537
|
+
}
|
|
20538
|
+
});
|
|
20180
20539
|
if (!referencesProvenLocal(value, logicalId, context) && !referencesRegionProven(value, context, this.resolverRegion)) {
|
|
20181
|
-
|
|
20540
|
+
notReresolvingLine();
|
|
20182
20541
|
return value;
|
|
20183
20542
|
}
|
|
20184
20543
|
if (!await this.referencesMatchPhysicalId(value, logicalId, context)) {
|
|
20185
20544
|
if (context.provenanceCapture) return value;
|
|
20186
|
-
|
|
20545
|
+
servingAsRecordedLine();
|
|
20187
20546
|
return value;
|
|
20188
20547
|
}
|
|
20189
20548
|
return await this.reresolveCrossStackValue(value, void 0, context, origin, sourceKey);
|
|
20190
20549
|
}
|
|
20191
|
-
async function referencesMatchPhysicalId(value, logicalId, context) {
|
|
20550
|
+
async function referencesMatchPhysicalId(value, logicalId, context, routeOf) {
|
|
20192
20551
|
const record = Object.hasOwn(context.resources, logicalId) ? context.resources[logicalId] : void 0;
|
|
20193
20552
|
const physicalId = typeof record?.physicalId === "string" ? record.physicalId.toLowerCase() : "";
|
|
20194
20553
|
for (const leaf of wholeStringLeavesOf(value)) for (const token of dynamicReferenceTokens(leaf)) {
|
|
20195
|
-
const
|
|
20554
|
+
const route = routeOf?.(token);
|
|
20555
|
+
const plaintext = route === void 0 ? await this.resolveDynamicReferences(token, context) : await route.resolver.resolveDynamicReferences(token, route.context);
|
|
20196
20556
|
if (plaintext.includes("{{resolve:")) continue;
|
|
20197
20557
|
if (plaintext.length < 4) return false;
|
|
20198
20558
|
if (!physicalId.includes(plaintext.toLowerCase())) return false;
|
|
@@ -21276,7 +21636,7 @@ function secretVerdictScope(resolver) {
|
|
|
21276
21636
|
return injectiveKey(credentialFingerprint(ambientCredentialConfig()), canonicalizeRegion(resolver.explicitRegion) ?? "");
|
|
21277
21637
|
}
|
|
21278
21638
|
function recordProvenanceOfResolution(resolver, context, token, version) {
|
|
21279
|
-
if (context === void 0) return;
|
|
21639
|
+
if (context === void 0 || context.provenanceSuppressed === true) return;
|
|
21280
21640
|
const resolution = {
|
|
21281
21641
|
region: canonicalizeRegion(resolver.explicitRegion),
|
|
21282
21642
|
version,
|
|
@@ -21343,14 +21703,21 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21343
21703
|
if (!foreign.complete || foreign.substitutions.length !== 1) complete = false;
|
|
21344
21704
|
continue;
|
|
21345
21705
|
}
|
|
21346
|
-
const
|
|
21347
|
-
const
|
|
21706
|
+
const pin = context?.referencePins?.get(fullMatch);
|
|
21707
|
+
const credentialKey = credentialFingerprint(ambientCredentialConfig());
|
|
21708
|
+
let dynamicReferenceCacheKey = injectiveKey(credentialKey, fullMatch);
|
|
21709
|
+
let cached = this.cachedDynamicReferences.get(dynamicReferenceCacheKey);
|
|
21710
|
+
const pinnedGeneration = pin !== void 0 && cached?.version !== pin;
|
|
21711
|
+
if (pinnedGeneration) {
|
|
21712
|
+
dynamicReferenceCacheKey = injectiveKey(credentialKey, fullMatch, pin);
|
|
21713
|
+
cached = this.cachedDynamicReferences.get(dynamicReferenceCacheKey);
|
|
21714
|
+
}
|
|
21348
21715
|
if (cached) {
|
|
21349
21716
|
if (cached.secret && cached.value && !persistedText) this.refuseSecretAssembledReference(fullMatch, tokenLogText, context);
|
|
21350
21717
|
const recorded = context?.recordedSecretValues;
|
|
21351
21718
|
if (cached.secret && cached.value && recorded) {
|
|
21352
21719
|
recorded.set(cached.value, fullMatch);
|
|
21353
|
-
recordResolvedPair(recorded, fullMatch, cached.value);
|
|
21720
|
+
if (!pinnedGeneration) recordResolvedPair(recorded, fullMatch, cached.value);
|
|
21354
21721
|
}
|
|
21355
21722
|
if (cached.secret && cached.value) recordProvenanceOfResolution(this, context, fullMatch, cached.version);
|
|
21356
21723
|
if (service === "ssm" && !cached.secret && recorded && !this.producerRegionGuest) recordProvenPublicExpression(recorded, fullMatch, cached.value);
|
|
@@ -21371,18 +21738,19 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21371
21738
|
let resolvedVersion;
|
|
21372
21739
|
if (service === "secretsmanager") {
|
|
21373
21740
|
const versionOut = {};
|
|
21374
|
-
resolved = await this.resolveSecretsManagerReference(inner, context, nameLogText, versionOut);
|
|
21741
|
+
resolved = await this.resolveSecretsManagerReference(inner, context, nameLogText, versionOut, pinnedGeneration ? pin : void 0);
|
|
21375
21742
|
resolvedVersion = versionOut.version;
|
|
21376
21743
|
} else if (service === "ssm") {
|
|
21377
21744
|
const decrypt = context?.skipDynamicReferences !== true;
|
|
21378
|
-
const param = await this.resolveSSMReference(parts, decrypt, "ssm", context, nameLogText);
|
|
21745
|
+
const param = await this.resolveSSMReference(parts, decrypt, "ssm", context, nameLogText, pinnedGeneration ? pin : void 0);
|
|
21379
21746
|
const proofBag = context?.recordedSecretValues;
|
|
21747
|
+
const writesVerdict = !pinnedGeneration;
|
|
21380
21748
|
if (param.type === "SecureString") {
|
|
21381
21749
|
if (proofBag) contradictProvenPublicExpression(proofBag, fullMatch);
|
|
21382
|
-
if (decrypt) pinSecureVerdict =
|
|
21383
|
-
else if (persistedText || !this.tokenAssembledForRecording(fullMatch, tokenLogText, context)) this.pinSecretVerdict(fullMatch, true, verdictScope);
|
|
21750
|
+
if (decrypt) pinSecureVerdict = writesVerdict;
|
|
21751
|
+
else if (writesVerdict && (persistedText || !this.tokenAssembledForRecording(fullMatch, tokenLogText, context))) this.pinSecretVerdict(fullMatch, true, verdictScope);
|
|
21384
21752
|
} else if (!param.secure) {
|
|
21385
|
-
this.pinSecretVerdict(fullMatch, false, verdictScope);
|
|
21753
|
+
if (writesVerdict) this.pinSecretVerdict(fullMatch, false, verdictScope);
|
|
21386
21754
|
if (proofBag && !this.producerRegionGuest) recordProvenPublicExpression(proofBag, fullMatch, param.value);
|
|
21387
21755
|
} else {
|
|
21388
21756
|
if (proofBag) contradictProvenPublicExpression(proofBag, fullMatch);
|
|
@@ -21398,7 +21766,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21398
21766
|
resolved = param.value;
|
|
21399
21767
|
resolvedVersion = param.version;
|
|
21400
21768
|
} else if (service === "ssm-secure") {
|
|
21401
|
-
const param = await this.resolveSSMReference(parts, true, "ssm-secure", context, nameLogText);
|
|
21769
|
+
const param = await this.resolveSSMReference(parts, true, "ssm-secure", context, nameLogText, pinnedGeneration ? pin : void 0);
|
|
21402
21770
|
if (!param.secure) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to resolve ${this.displayMasked(tokenLogText, context)}: the parameter is a ${param.type} parameter, and the ssm-secure spelling is defined for SecureString parameters only. Reference it as {{resolve:ssm:...}} if it is public configuration.`));
|
|
21403
21771
|
isSecret = true;
|
|
21404
21772
|
resolved = param.value;
|
|
@@ -21420,7 +21788,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21420
21788
|
const recorded = context?.recordedSecretValues;
|
|
21421
21789
|
if (recorded) {
|
|
21422
21790
|
recorded.set(resolved, fullMatch);
|
|
21423
|
-
recordResolvedPair(recorded, fullMatch, resolved);
|
|
21791
|
+
if (!pinnedGeneration) recordResolvedPair(recorded, fullMatch, resolved);
|
|
21424
21792
|
}
|
|
21425
21793
|
recordProvenanceOfResolution(this, context, fullMatch, resolvedVersion);
|
|
21426
21794
|
if (service === "secretsmanager" || service === "ssm-secure") this.pinSecretVerdict(fullMatch, true, verdictScope);
|
|
@@ -21459,7 +21827,7 @@ async function resolveDynamicReferencesWithLogTwin(value, logTwin, context, inhe
|
|
|
21459
21827
|
|
|
21460
21828
|
//#endregion
|
|
21461
21829
|
//#region src/deployment/intrinsic-resolver/dynamic-ref-lookups.ts
|
|
21462
|
-
async function resolveSecretsManagerReference(inner, context, nameLogText, versionOut) {
|
|
21830
|
+
async function resolveSecretsManagerReference(inner, context, nameLogText, versionOut, pinVersion) {
|
|
21463
21831
|
const afterService = inner.substring(15);
|
|
21464
21832
|
let secretId;
|
|
21465
21833
|
let jsonKey = "";
|
|
@@ -21486,7 +21854,10 @@ async function resolveSecretsManagerReference(inner, context, nameLogText, versi
|
|
|
21486
21854
|
versionStage = remainingParts[1] || "";
|
|
21487
21855
|
versionId = remainingParts[2] || "";
|
|
21488
21856
|
} else secretId = afterService;
|
|
21489
|
-
if (
|
|
21857
|
+
if (pinVersion !== void 0) {
|
|
21858
|
+
versionStage = "";
|
|
21859
|
+
versionId = pinVersion;
|
|
21860
|
+
} else if (!versionStage) versionStage = "AWSCURRENT";
|
|
21490
21861
|
if (!secretId) throw markNonRetryable(/* @__PURE__ */ new Error("Dynamic reference: secretsmanager SECRET_ID is required"));
|
|
21491
21862
|
const loggedSecretId = this.displayMasked(nameLogText(secretId), context);
|
|
21492
21863
|
const loggedJsonKey = this.displayMasked(nameLogText(jsonKey), context);
|
|
@@ -21528,11 +21899,12 @@ async function sendWithThrottleRetry(operation, label, masks) {
|
|
|
21528
21899
|
throw masks.error(error);
|
|
21529
21900
|
}
|
|
21530
21901
|
}
|
|
21531
|
-
async function resolveSSMReference(parts, decrypt, service, context, nameLogText) {
|
|
21532
|
-
const
|
|
21902
|
+
async function resolveSSMReference(parts, decrypt, service, context, nameLogText, pinVersion) {
|
|
21903
|
+
const namedParameter = parts.slice(1).join(":");
|
|
21904
|
+
const parameterName = pinVersion === void 0 ? namedParameter : `${withoutSsmSelector(namedParameter)}:${pinVersion}`;
|
|
21533
21905
|
if (!parameterName) throw markNonRetryable(/* @__PURE__ */ new Error(`Dynamic reference: ${service} PARAMETER_NAME is required`));
|
|
21534
|
-
const loggedParameterName = this.displayMasked(nameLogText(
|
|
21535
|
-
this.logger.debug(`Resolving dynamic reference: ${service}:${loggedParameterName}`);
|
|
21906
|
+
const loggedParameterName = this.displayMasked(nameLogText(namedParameter), context);
|
|
21907
|
+
this.logger.debug(`Resolving dynamic reference: ${service}:${loggedParameterName}${pinVersion === void 0 ? "" : ` (version ${pinVersion})`}`);
|
|
21536
21908
|
const client = this.clientsForRegion(this.explicitRegion).ssm;
|
|
21537
21909
|
const command = new GetParameterCommand({
|
|
21538
21910
|
Name: parameterName,
|
|
@@ -21543,8 +21915,8 @@ async function resolveSSMReference(parts, decrypt, service, context, nameLogText
|
|
|
21543
21915
|
if (paramValue === void 0 || paramValue === null) throw markNonRetryable(/* @__PURE__ */ new Error(`Dynamic reference: SSM parameter ${quotedRender(loggedParameterName, "'")} not found or has no value`));
|
|
21544
21916
|
const paramType = response.Parameter?.Type;
|
|
21545
21917
|
const secure = paramType !== "String" && paramType !== "StringList";
|
|
21546
|
-
if (secure && paramType !== "SecureString" && !this.warnedUnrecognizedSsmTypes.has(injectiveKey(
|
|
21547
|
-
this.warnedUnrecognizedSsmTypes.add(injectiveKey(
|
|
21918
|
+
if (secure && paramType !== "SecureString" && !this.warnedUnrecognizedSsmTypes.has(injectiveKey(namedParameter, String(paramType)))) {
|
|
21919
|
+
this.warnedUnrecognizedSsmTypes.add(injectiveKey(namedParameter, String(paramType)));
|
|
21548
21920
|
const reported = paramType === void 0 ? "(absent)" : quotedRender(this.displayMasked(String(paramType), context), "'");
|
|
21549
21921
|
this.logger.warn(`SSM parameter ${quotedRender(loggedParameterName, "'")} reported an unrecognized Type ${reported} — treating its value as a secret, so cdkd will persist the {{resolve:${service}:...}} expression rather than the resolved value. Declare the parameter as String / StringList if it is public config.`);
|
|
21550
21922
|
}
|
|
@@ -21556,6 +21928,12 @@ async function resolveSSMReference(parts, decrypt, service, context, nameLogText
|
|
|
21556
21928
|
...typeof paramVersion === "number" && Number.isSafeInteger(paramVersion) && { version: String(paramVersion) }
|
|
21557
21929
|
};
|
|
21558
21930
|
}
|
|
21931
|
+
function withoutSsmSelector(parameterName) {
|
|
21932
|
+
const arnName = parameterName.startsWith("arn:") ? parameterName.indexOf(":parameter/") : -1;
|
|
21933
|
+
const nameStart = arnName < 0 ? 0 : arnName + 11;
|
|
21934
|
+
const selector = parameterName.indexOf(":", nameStart);
|
|
21935
|
+
return selector < 0 ? parameterName : parameterName.slice(0, selector);
|
|
21936
|
+
}
|
|
21559
21937
|
|
|
21560
21938
|
//#endregion
|
|
21561
21939
|
//#region src/deployment/intrinsic-resolver/string-functions.ts
|
|
@@ -22904,6 +23282,9 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
22904
23282
|
}
|
|
22905
23283
|
return resolved;
|
|
22906
23284
|
}
|
|
23285
|
+
resolverForRecordedRegion(region) {
|
|
23286
|
+
return this.resolverForProducerRegion(region);
|
|
23287
|
+
}
|
|
22907
23288
|
resolverForProducerRegion(producerRegion, context, producerRegionLogText) {
|
|
22908
23289
|
if (!producerRegion) return this;
|
|
22909
23290
|
const target = canonicalizeRegion(producerRegion);
|
|
@@ -24428,8 +24809,8 @@ function compare(desired, previous, mask) {
|
|
|
24428
24809
|
if (!Array.isArray(desired) || desired.length !== previous.length) return "differs";
|
|
24429
24810
|
return combine(previous.map((item, i) => compare(desired[i], item, mask)));
|
|
24430
24811
|
}
|
|
24431
|
-
if (isPlainObject$
|
|
24432
|
-
if (!isPlainObject$
|
|
24812
|
+
if (isPlainObject$1(previous)) {
|
|
24813
|
+
if (!isPlainObject$1(desired)) return "differs";
|
|
24433
24814
|
if (!Object.keys(desired).every((k) => Object.prototype.hasOwnProperty.call(previous, k))) return "differs";
|
|
24434
24815
|
return combine(Object.keys(previous).map((k) => compare(desired[k], previous[k], mask)));
|
|
24435
24816
|
}
|
|
@@ -24455,7 +24836,7 @@ function resolvesReference(desired, previous, mask) {
|
|
|
24455
24836
|
const pattern = literals.map(escapeRegExp$1).join("[\\s\\S]*");
|
|
24456
24837
|
return new RegExp(`^${pattern}$`).test(desired);
|
|
24457
24838
|
}
|
|
24458
|
-
function isPlainObject$
|
|
24839
|
+
function isPlainObject$1(value) {
|
|
24459
24840
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
24460
24841
|
}
|
|
24461
24842
|
function escapeRegExp$1(text) {
|
|
@@ -25246,7 +25627,7 @@ var CloudControlProvider = class {
|
|
|
25246
25627
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
25247
25628
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
25248
25629
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
25249
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
25630
|
+
const { ASGProvider } = await import("./asg-provider-C6USPLiS.js");
|
|
25250
25631
|
const delegateRegion = ambientRegion();
|
|
25251
25632
|
let asgProvider = this.asgDeleteDelegates.get(delegateRegion);
|
|
25252
25633
|
if (asgProvider === void 0) {
|
|
@@ -25352,7 +25733,7 @@ var CloudControlProvider = class {
|
|
|
25352
25733
|
const family = SDK_DELETE_FAMILIES.get(resourceType);
|
|
25353
25734
|
const cached = this.sdkDeleteDelegates.get(family);
|
|
25354
25735
|
if (cached !== void 0 && cached.region === ccRegion) return cached.provider;
|
|
25355
|
-
const provider = family === "rds" ? new (await (import("./rds-provider-
|
|
25736
|
+
const provider = family === "rds" ? new (await (import("./rds-provider-DcUEh3d2.js"))).RDSProvider({ region: ccRegion }) : new (await (import("./neptune-provider-Ba5va85p.js"))).NeptuneProvider({ region: ccRegion });
|
|
25356
25737
|
this.sdkDeleteDelegates.set(family, {
|
|
25357
25738
|
region: ccRegion,
|
|
25358
25739
|
provider
|
|
@@ -30214,170 +30595,6 @@ function deepEqualValue(a, b) {
|
|
|
30214
30595
|
return true;
|
|
30215
30596
|
}
|
|
30216
30597
|
|
|
30217
|
-
//#endregion
|
|
30218
|
-
//#region src/deployment/reference-provenance-record.ts
|
|
30219
|
-
const SSM_VERSION = /^[0-9]{1,10}$/;
|
|
30220
|
-
const SECRETS_MANAGER_VERSION = /^[A-Za-z0-9_+=.@/-]{32,64}$/;
|
|
30221
|
-
function referenceTokensIn(value, into = /* @__PURE__ */ new Set()) {
|
|
30222
|
-
const walk = (v) => {
|
|
30223
|
-
if (typeof v === "string") {
|
|
30224
|
-
if (!v.includes("{{resolve:")) return;
|
|
30225
|
-
for (const token of dynamicReferenceTokens(v)) into.add(token);
|
|
30226
|
-
return;
|
|
30227
|
-
}
|
|
30228
|
-
if (Array.isArray(v)) {
|
|
30229
|
-
for (const item of v) walk(item);
|
|
30230
|
-
return;
|
|
30231
|
-
}
|
|
30232
|
-
if (v !== null && typeof v === "object") for (const item of Object.values(v)) walk(item);
|
|
30233
|
-
};
|
|
30234
|
-
walk(value);
|
|
30235
|
-
return into;
|
|
30236
|
-
}
|
|
30237
|
-
function recordReferenceTokens(record) {
|
|
30238
|
-
const tokens = referenceTokensIn(record.properties);
|
|
30239
|
-
referenceTokensIn(record.attributes, tokens);
|
|
30240
|
-
referenceTokensIn(record.observedProperties, tokens);
|
|
30241
|
-
return tokens;
|
|
30242
|
-
}
|
|
30243
|
-
function versionShapeOf(token) {
|
|
30244
|
-
if (token.startsWith("{{resolve:secretsmanager:")) return SECRETS_MANAGER_VERSION;
|
|
30245
|
-
if (token.startsWith("{{resolve:ssm:") || token.startsWith("{{resolve:ssm-secure:")) return SSM_VERSION;
|
|
30246
|
-
}
|
|
30247
|
-
function isValidReferenceVersion(token, version) {
|
|
30248
|
-
const shape = versionShapeOf(token);
|
|
30249
|
-
return shape !== void 0 && typeof version === "string" && shape.test(version);
|
|
30250
|
-
}
|
|
30251
|
-
function validReferenceRegion(region) {
|
|
30252
|
-
if (typeof region !== "string") return void 0;
|
|
30253
|
-
return canonicalizeRegion(region) === region && isClientSafeRegion(region) ? region : void 0;
|
|
30254
|
-
}
|
|
30255
|
-
function isPlainObject$1(value) {
|
|
30256
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
30257
|
-
}
|
|
30258
|
-
function validateReferenceProvenance(token, raw) {
|
|
30259
|
-
if (!isSingleDynamicReferenceToken(token) || !isPlainObject$1(raw)) return void 0;
|
|
30260
|
-
const versionsRaw = Object.hasOwn(raw, "versions") ? raw["versions"] : void 0;
|
|
30261
|
-
const readRaw = Object.hasOwn(raw, "readVersions") ? raw["readVersions"] : void 0;
|
|
30262
|
-
if (readRaw !== void 0) {
|
|
30263
|
-
if (!Array.isArray(readRaw)) return void 0;
|
|
30264
|
-
const all = Array.isArray(versionsRaw) ? versionsRaw : [];
|
|
30265
|
-
if (!readRaw.every((v) => all.includes(v))) return void 0;
|
|
30266
|
-
}
|
|
30267
|
-
const out = {};
|
|
30268
|
-
const region = validReferenceRegion(Object.hasOwn(raw, "region") ? raw["region"] : void 0);
|
|
30269
|
-
if (region !== void 0) out.region = region;
|
|
30270
|
-
if (Array.isArray(versionsRaw) && versionsRaw.length > 0 && versionsRaw.length <= 8 && versionsRaw.every((v) => isValidReferenceVersion(token, v)) && (readRaw === void 0 || readRaw.every((v) => typeof v === "string"))) {
|
|
30271
|
-
out.versions = [...new Set(versionsRaw)].sort();
|
|
30272
|
-
if (readRaw !== void 0 && readRaw.length > 0) out.readVersions = [...new Set(readRaw)].sort();
|
|
30273
|
-
}
|
|
30274
|
-
return out;
|
|
30275
|
-
}
|
|
30276
|
-
function referenceProvenanceOf(record) {
|
|
30277
|
-
if (!isPlainObject$1(record) || !Object.hasOwn(record, "referenceProvenance")) return void 0;
|
|
30278
|
-
return validatedBag(record["referenceProvenance"]);
|
|
30279
|
-
}
|
|
30280
|
-
function validatedBag(field) {
|
|
30281
|
-
if (!isPlainObject$1(field)) return void 0;
|
|
30282
|
-
const out = Object.create(null);
|
|
30283
|
-
for (const [token, raw] of Object.entries(field)) {
|
|
30284
|
-
const entry = validateReferenceProvenance(token, raw);
|
|
30285
|
-
if (entry !== void 0) out[token] = entry;
|
|
30286
|
-
}
|
|
30287
|
-
return { ...out };
|
|
30288
|
-
}
|
|
30289
|
-
function hasReferenceProvenanceField(record) {
|
|
30290
|
-
return isPlainObject$1(record) && Object.hasOwn(record, "referenceProvenance") && record["referenceProvenance"] !== void 0;
|
|
30291
|
-
}
|
|
30292
|
-
function outputReferenceProvenanceOf(state, outputKey) {
|
|
30293
|
-
if (!isPlainObject$1(state) || !Object.hasOwn(state, "outputReferenceProvenance")) return;
|
|
30294
|
-
const field = state["outputReferenceProvenance"];
|
|
30295
|
-
if (!isPlainObject$1(field) || !Object.hasOwn(field, outputKey)) return void 0;
|
|
30296
|
-
return validatedBag(field[outputKey]);
|
|
30297
|
-
}
|
|
30298
|
-
function persistable(token, entry) {
|
|
30299
|
-
return (entry === void 0 ? void 0 : validateReferenceProvenance(token, entry)) ?? {};
|
|
30300
|
-
}
|
|
30301
|
-
function tokensUnderPaths(properties, paths) {
|
|
30302
|
-
const out = /* @__PURE__ */ new Set();
|
|
30303
|
-
const descend = (value, path, at) => {
|
|
30304
|
-
if (at === path.length) {
|
|
30305
|
-
referenceTokensIn(value, out);
|
|
30306
|
-
return;
|
|
30307
|
-
}
|
|
30308
|
-
if (Array.isArray(value)) {
|
|
30309
|
-
const next = path[at] === "*" ? at + 1 : at;
|
|
30310
|
-
for (const item of value) descend(item, path, next);
|
|
30311
|
-
return;
|
|
30312
|
-
}
|
|
30313
|
-
if (isPlainObject$1(value) && Object.hasOwn(value, path[at])) descend(value[path[at]], path, at + 1);
|
|
30314
|
-
};
|
|
30315
|
-
for (const path of paths) descend(properties, path, 0);
|
|
30316
|
-
return out;
|
|
30317
|
-
}
|
|
30318
|
-
function provenanceForWrittenRecord(args) {
|
|
30319
|
-
const { record, secrets, previous, inPlace } = args;
|
|
30320
|
-
const previousField = inPlace === void 0 ? void 0 : referenceProvenanceOf(previous);
|
|
30321
|
-
if (!hasPassProvenance(secrets) && previousField === void 0 && args.walkWithoutPassProvenance !== true) return;
|
|
30322
|
-
const tokens = recordReferenceTokens(record);
|
|
30323
|
-
if (tokens.size === 0) return void 0;
|
|
30324
|
-
let kept;
|
|
30325
|
-
if (inPlace !== void 0) {
|
|
30326
|
-
kept = inPlace.createOnly === "all" ? tokens : tokensUnderPaths(record.properties, inPlace.createOnly);
|
|
30327
|
-
if (inPlace.attributesCarried) referenceTokensIn(record.attributes, kept);
|
|
30328
|
-
}
|
|
30329
|
-
const out = {};
|
|
30330
|
-
for (const token of [...tokens].sort()) {
|
|
30331
|
-
const pass = passProvenanceFor(secrets, token);
|
|
30332
|
-
if (kept === void 0 || !kept.has(token)) {
|
|
30333
|
-
out[token] = persistable(token, pass);
|
|
30334
|
-
continue;
|
|
30335
|
-
}
|
|
30336
|
-
const before = previousField !== void 0 && Object.hasOwn(previousField, token) ? previousField[token] : void 0;
|
|
30337
|
-
if (pass === void 0) {
|
|
30338
|
-
out[token] = before === void 0 ? {} : { ...before };
|
|
30339
|
-
continue;
|
|
30340
|
-
}
|
|
30341
|
-
out[token] = persistable(token, unionWithPrevious(pass, before));
|
|
30342
|
-
}
|
|
30343
|
-
return out;
|
|
30344
|
-
}
|
|
30345
|
-
function unionWithPrevious(pass, before) {
|
|
30346
|
-
const out = {};
|
|
30347
|
-
if (pass.region !== void 0 && (before?.region === void 0 || before.region === pass.region)) out.region = pass.region;
|
|
30348
|
-
if (pass.versions !== void 0 && before?.versions !== void 0) {
|
|
30349
|
-
out.versions = [.../* @__PURE__ */ new Set([...before.versions, ...pass.versions])].sort();
|
|
30350
|
-
if (pass.readVersions !== void 0) out.readVersions = [...pass.readVersions];
|
|
30351
|
-
}
|
|
30352
|
-
return out;
|
|
30353
|
-
}
|
|
30354
|
-
function outputProvenanceForPersist(args) {
|
|
30355
|
-
const { outputs, resolvedThisRun, carriedFrom, sinkOf } = args;
|
|
30356
|
-
if (!resolvedThisRun) return carriedFrom !== void 0 && isPlainObject$1(carriedFrom.outputReferenceProvenance) ? carriedFrom.outputReferenceProvenance : void 0;
|
|
30357
|
-
let out;
|
|
30358
|
-
for (const [outputKey, value] of Object.entries(outputs)) {
|
|
30359
|
-
const sink = sinkOf(outputKey);
|
|
30360
|
-
if (!hasPassProvenance(sink)) continue;
|
|
30361
|
-
const tokens = referenceTokensIn(value);
|
|
30362
|
-
if (tokens.size === 0) continue;
|
|
30363
|
-
const entries = {};
|
|
30364
|
-
for (const token of [...tokens].sort()) entries[token] = persistable(token, passProvenanceFor(sink, token));
|
|
30365
|
-
out ??= Object.create(null);
|
|
30366
|
-
out[outputKey] = entries;
|
|
30367
|
-
}
|
|
30368
|
-
return out === void 0 ? void 0 : { ...out };
|
|
30369
|
-
}
|
|
30370
|
-
const KEEP_REFERENCE_PROVENANCE = Symbol("keep reference provenance");
|
|
30371
|
-
function withReferenceProvenance(record, field) {
|
|
30372
|
-
if (field === KEEP_REFERENCE_PROVENANCE) return record;
|
|
30373
|
-
if (field === void 0 && !Object.hasOwn(record, "referenceProvenance")) return record;
|
|
30374
|
-
const { referenceProvenance: _previous, ...rest } = record;
|
|
30375
|
-
return field === void 0 ? rest : {
|
|
30376
|
-
...rest,
|
|
30377
|
-
referenceProvenance: field
|
|
30378
|
-
};
|
|
30379
|
-
}
|
|
30380
|
-
|
|
30381
30598
|
//#endregion
|
|
30382
30599
|
//#region src/deployment/deploy-engine/provenance-capture.ts
|
|
30383
30600
|
function kickOffProvenanceCapture(args) {
|
|
@@ -32565,15 +32782,19 @@ var ReplayResolvers = class {
|
|
|
32565
32782
|
this.pinned.set(target, scoped);
|
|
32566
32783
|
return scoped;
|
|
32567
32784
|
}
|
|
32785
|
+
forRecordedRegion(region) {
|
|
32786
|
+
return this.primary.resolverForRecordedRegion(region);
|
|
32787
|
+
}
|
|
32568
32788
|
};
|
|
32569
32789
|
function regionAmbiguousReplaySecretError(logicalId, propertyPath, secretName, foreignProducerRegions, consumerRegion, execCtx) {
|
|
32570
32790
|
const where = propertyPath === "" ? "" : ` property ${quotedPlainOr(propertyPath, "property path")}`;
|
|
32571
32791
|
const error = new CdkdError(`Rollback of ${shownLogicalId(logicalId)}${where} cannot re-resolve the secret reference ${quotedPlainOr(secretName, "secret name")}: the reference carries no region of its own, and this stack read across a region boundary (producer region(s) on record: ${foreignProducerRegions.map((r) => plainOrDescribed(r, "region")).join(", ")}), so it may have been resolved in one of those rather than in ${quotedOrDescribed(consumerRegion, "region")}. A secret of the same name in two regions is two independent values, so replaying this would write the WRONG secret to a live resource. Refusing instead. Resolve the reference in its own region and set the property directly (or spell it as a full ARN, which names its region and is resolved there), then re-run ${rerunRollbackPhrase(execCtx, "'cdkd rollback'")}.`, "ROLLBACK_SECRET_REGION_AMBIGUOUS");
|
|
32572
32792
|
return markNonRetryable(error);
|
|
32573
32793
|
}
|
|
32574
|
-
function refuseUnprovenReplaySecret(leaf, propertyPath, logicalId, execCtx) {
|
|
32794
|
+
function refuseUnprovenReplaySecret(leaf, propertyPath, logicalId, execCtx, recordedRegions) {
|
|
32575
32795
|
if (execCtx.producerRegionsIncomplete !== true) return;
|
|
32576
32796
|
for (const token of dynamicReferenceTokens(leaf)) {
|
|
32797
|
+
if (recordedRegions?.has(token) === true) continue;
|
|
32577
32798
|
const name = classifyReplaySecretRegion(token, execCtx.region, execCtx.importedProducerRegions).kind === "local" ? regionLessSecretName(token) : void 0;
|
|
32578
32799
|
if (name !== void 0) throw regionUnknownReplaySecretError(logicalId, propertyPath, name, execCtx.region, execCtx);
|
|
32579
32800
|
}
|
|
@@ -32582,17 +32803,17 @@ function regionUnknownReplaySecretError(logicalId, propertyPath, secretName, con
|
|
|
32582
32803
|
const where = propertyPath === "" ? "" : ` property ${quotedPlainOr(propertyPath, "property path")}`;
|
|
32583
32804
|
return new CdkdError(`Rollback of ${shownLogicalId(logicalId)}${where} cannot re-resolve the secret reference ${quotedPlainOr(secretName, "secret name")}: the reference carries no region of its own, and this is a nested stack, and the cross-region reads its parent made are not known to this replay, so the parent may have resolved it in another region than ${quotedOrDescribed(consumerRegion, "region")}. A secret of the same name in two regions is two independent values, so replaying this could write the WRONG secret to a live resource. Refusing instead. Where the journal of the top-level stack still holds this run, roll back the top-level stack instead, which supplies its regions. Otherwise resolve the reference in its own region and set the property directly (or spell it as a full ARN, which names its region and is resolved there), then re-run ${rerunRollbackPhrase(execCtx, "'cdkd rollback'")}.`, "ROLLBACK_SECRET_REGION_AMBIGUOUS");
|
|
32584
32805
|
}
|
|
32585
|
-
async function resolveLeafByRegion(leaf, propertyPath, logicalId, execCtx, resolvers, resolverContext) {
|
|
32586
|
-
const verdicts = dynamicReferenceTokens(leaf).map((token) => [token,
|
|
32806
|
+
async function resolveLeafByRegion(leaf, propertyPath, logicalId, execCtx, resolvers, resolverContext, recordedRegions) {
|
|
32807
|
+
const verdicts = dynamicReferenceTokens(leaf).map((token) => [token, classifyRecordedSecretRegion(token, execCtx.region, execCtx.importedProducerRegions, recordedRegions)]);
|
|
32587
32808
|
for (const [, verdict] of verdicts) if (verdict.kind === "ambiguous") throw regionAmbiguousReplaySecretError(logicalId, propertyPath, verdict.secretName, verdict.foreignProducerRegions, execCtx.region, execCtx);
|
|
32588
|
-
if (!verdicts.some(([, verdict]) => verdict.kind === "named-region")) return await resolvers.primary.resolveDynamicReferences(leaf, resolverContext);
|
|
32809
|
+
if (!verdicts.some(([, verdict]) => verdict.kind === "named-region" || verdict.kind === "recorded-region")) return await resolvers.primary.resolveDynamicReferences(leaf, resolverContext);
|
|
32589
32810
|
let out = "";
|
|
32590
32811
|
let cursor = 0;
|
|
32591
32812
|
for (const [token, verdict] of verdicts) {
|
|
32592
32813
|
const at = leaf.indexOf(token, cursor);
|
|
32593
32814
|
if (at < 0) throw new CdkdError(`Rollback of ${logicalId}${propertyPath === "" ? "" : ` property '${propertyPath}'`} could not locate a scanned dynamic reference in the value it was scanned from. Refusing rather than resolving it in '${execCtx.region}', which would be the wrong region for a reference that names another one. This is an internal invariant failure — please report it with the resource type and property path.`, "ROLLBACK_SECRET_TOKEN_SCAN_MISMATCH");
|
|
32594
32815
|
out += leaf.slice(cursor, at);
|
|
32595
|
-
const resolver = verdict.kind === "named-region" ? resolvers.forRegion(verdict.region) : resolvers.primary;
|
|
32816
|
+
const resolver = verdict.kind === "named-region" ? resolvers.forRegion(verdict.region) : verdict.kind === "recorded-region" ? resolvers.forRecordedRegion(verdict.region) : resolvers.primary;
|
|
32596
32817
|
out += await resolver.resolveDynamicReferences(token, resolverContext);
|
|
32597
32818
|
cursor = at + token.length;
|
|
32598
32819
|
}
|
|
@@ -33327,8 +33548,9 @@ function maskRestoredNoEchoRecord(record, baseline, substituted = []) {
|
|
|
33327
33548
|
|
|
33328
33549
|
//#endregion
|
|
33329
33550
|
//#region src/deployment/rollback-executor/replay-props.ts
|
|
33330
|
-
async function resolveReplayProps(props, resolvers, secrets, execCtx, logicalId) {
|
|
33551
|
+
async function resolveReplayProps(props, resolvers, secrets, execCtx, logicalId, record) {
|
|
33331
33552
|
if (props === void 0) return void 0;
|
|
33553
|
+
const recordedRegions = recordedReferenceRegions(record);
|
|
33332
33554
|
const resolverContext = {
|
|
33333
33555
|
template: { Resources: {} },
|
|
33334
33556
|
resources: {},
|
|
@@ -33337,8 +33559,8 @@ async function resolveReplayProps(props, resolvers, secrets, execCtx, logicalId)
|
|
|
33337
33559
|
const walk = async (v, path) => {
|
|
33338
33560
|
if (typeof v === "string") {
|
|
33339
33561
|
if (!v.includes("{{resolve:")) return v;
|
|
33340
|
-
refuseUnprovenReplaySecret(v, path, logicalId, execCtx);
|
|
33341
|
-
return await resolveLeafByRegion(v, path, logicalId, execCtx, resolvers, resolverContext);
|
|
33562
|
+
refuseUnprovenReplaySecret(v, path, logicalId, execCtx, recordedRegions);
|
|
33563
|
+
return await resolveLeafByRegion(v, path, logicalId, execCtx, resolvers, resolverContext, recordedRegions);
|
|
33342
33564
|
}
|
|
33343
33565
|
if (Array.isArray(v)) {
|
|
33344
33566
|
const out = new Array(v.length);
|
|
@@ -33651,7 +33873,7 @@ async function replayRevert(s) {
|
|
|
33651
33873
|
provisionedBy: op.provisionedBy
|
|
33652
33874
|
});
|
|
33653
33875
|
const noEcho = await substituteMarkedNoEchoLeaves({
|
|
33654
|
-
desired: await resolveReplayProps(previousState.properties, resolver, secrets, ctx, op.logicalId),
|
|
33876
|
+
desired: await resolveReplayProps(previousState.properties, resolver, secrets, ctx, op.logicalId, previousState),
|
|
33655
33877
|
baseline: previousState,
|
|
33656
33878
|
live: current,
|
|
33657
33879
|
logicalId: op.logicalId,
|
|
@@ -33663,7 +33885,7 @@ async function replayRevert(s) {
|
|
|
33663
33885
|
const desiredProps = noEcho.desired;
|
|
33664
33886
|
refuseMaskedReplayBaseline(desiredProps, op.logicalId, noEcho.inert);
|
|
33665
33887
|
logger.info(` Rollback: Restoring ${safe(op.logicalId)} (${safe(op.resourceType)}) to previous state`);
|
|
33666
|
-
const currentProps = noEcho.onPreviousSide(await resolveReplayProps(current.properties, resolver, secrets, ctx, op.logicalId));
|
|
33888
|
+
const currentProps = noEcho.onPreviousSide(await resolveReplayProps(current.properties, resolver, secrets, ctx, op.logicalId, current));
|
|
33667
33889
|
recordNestedStackParameterExpressions(secrets, op.resourceType, desiredProps, previousState.properties, STATE_DERIVED_RULES);
|
|
33668
33890
|
opMasker.addNamed({
|
|
33669
33891
|
resourceType: op.resourceType,
|
|
@@ -33739,7 +33961,7 @@ async function replayReverseReplacement(s) {
|
|
|
33739
33961
|
skipUnaddressableReplay(s, logger, op, "reverse the replacement of");
|
|
33740
33962
|
return;
|
|
33741
33963
|
}
|
|
33742
|
-
const resolvedPrevProps = await resolveReplayProps(prev.properties, resolver, secrets, ctx, op.logicalId) ?? {};
|
|
33964
|
+
const resolvedPrevProps = await resolveReplayProps(prev.properties, resolver, secrets, ctx, op.logicalId, prev) ?? {};
|
|
33743
33965
|
refuseMarkedNoEchoRecreate(resolvedPrevProps, noEchoLeavesOf(prev), op.logicalId);
|
|
33744
33966
|
refuseMaskedReplayBaseline(resolvedPrevProps, op.logicalId);
|
|
33745
33967
|
opMasker.addNamed({
|
|
@@ -34421,7 +34643,7 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
|
|
|
34421
34643
|
provisionedBy: op.provisionedBy ?? current.provisionedBy
|
|
34422
34644
|
});
|
|
34423
34645
|
const noEcho = await substituteMarkedNoEchoLeaves({
|
|
34424
|
-
desired: await resolveReplayProps(prev.properties, resolver, secrets, ctx, op.logicalId),
|
|
34646
|
+
desired: await resolveReplayProps(prev.properties, resolver, secrets, ctx, op.logicalId, prev),
|
|
34425
34647
|
baseline: prev,
|
|
34426
34648
|
live: current,
|
|
34427
34649
|
logicalId: op.logicalId,
|
|
@@ -34432,7 +34654,7 @@ async function replayFailedOperationsUnbound(failedOps, stateResources, stackNam
|
|
|
34432
34654
|
});
|
|
34433
34655
|
const desiredProps = noEcho.desired;
|
|
34434
34656
|
refuseMaskedReplayBaseline(desiredProps, op.logicalId, noEcho.inert);
|
|
34435
|
-
const attemptedProps = noEcho.onPreviousSide(await resolveReplayProps(op.attemptedProperties ?? current.properties, resolver, secrets, ctx, op.logicalId));
|
|
34657
|
+
const attemptedProps = noEcho.onPreviousSide(await resolveReplayProps(op.attemptedProperties ?? current.properties, resolver, secrets, ctx, op.logicalId, op.attemptedProperties === void 0 ? current : void 0));
|
|
34436
34658
|
recordNestedStackParameterExpressions(secrets, op.resourceType, desiredProps, prev.properties, STATE_DERIVED_RULES);
|
|
34437
34659
|
opMasker.addNamed({
|
|
34438
34660
|
resourceType: op.resourceType,
|
|
@@ -46158,5 +46380,5 @@ DeployEngine.prototype.replacementNameOrigin = replacementNameOrigin;
|
|
|
46158
46380
|
DeployEngine.prototype.orphanedNameCollisionAdvice = orphanedNameCollisionAdvice;
|
|
46159
46381
|
|
|
46160
46382
|
//#endregion
|
|
46161
|
-
export { isTruthyCfnBoolean as $, MULTI_REGION_RECREATE_BLOCKED_TYPES as $a, resolveStateBucketWithDefault as $c, malformedOrphanRowsKeptWarning as $i, earliestDefined as $n, maskSecretsInText as $o, isIamRoleArn as $r, orphansAfterRollback as $s, seedsDeleteFirstGuard as $t, noEchoComparisonForTemplate as A, refuseMalformedResourcePropertiesForOrphan as Aa, isDockerClientEnvKey as Ac, passedParameterClassesOf as Ai, injectedAwsRegionValue as Al, journaledOrphanPrintingBag as An, maskReadbackAtCoordinates as Ao, UNSPECIFIED_SKIP_REASON as Ar, TEMPLATE_SOURCED_RULES as As, dropFailedHint as At, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as B, repairMalformedResourcesForReadOnly as Ba, stripControlChars as Bc, hasReadableOrphans as Bi, PRE_DELETE_SNAPSHOT_TYPES as Bn, liveMatchesUnresolvedTokenFrame as Bo, observeThenDisableInstanceApiTermination as Br, crossPrefixDeniedWarning as Bs, getStackRecords as Bt, recordRetainedForReadoption as C, refuseMalformedResourceEntriesForDestroy as Ca, describeDockerCapturedOutput as Cc, AWS_NO_VALUE as Ci, ownValue as Cl, collectDeclaredOutputNames as Cn, lambdaFunctionNameForMask as Co, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Cr, recordNoEchoAttributeValues as Cs, revertNestedChildFromJournal as Ct, withResourceDeadline as D, refuseMalformedResourcePropertiesForDestroy as Da, finchSecretArgvRefusal as Dc, parseWebACLArn as Di, renderAssemblyPathEscape as Dl, DEFAULT_RESOURCE_TIMEOUT_MS as Dn, canonicalCoordinates as Do, slowCcOperationTimeoutMs as Dr, STATE_SOURCED_BASELINE_RULES as Ds, getCurrentNestedStackContext as Dt, serviceTokenBlockingReason as E, refuseMalformedResourceEntriesForOrphan as Ea, dockerSpawnEnvWithSensitive as Ec, refStateLookupFromResource as Ei, displayAssemblyPath as El, bindingSkippedOutputs as En, TemplateParser as Eo, CloudControlProvider as Er, wholeStringLeavesOf as Es, collectNestedChildUnaddressed as Et, PROTECTION_PROPERTY_BY_TYPE as F, repairMalformedOrphanRecordsForReadOnly as Fa, redactedDockerCause as Fc, UNREADABLE_ORPHANS_CONTAINER_ROW as Fi, secretNamedRecordNeedles as Fn, noEchoOutputsComparison as Fo, isWaitAbandonedError as Fr, S3StateBackend as Fs, sameJournaledOrphans as Ft, resolveDynamoDbDeleteBudgetMs as G, findActionableSilentDrops as Ga, synthesisStatusMessage as Gc, malformedDriftResourcePropertiesWarning as Gi, isFinalSnapshotError as Gn, logOnlyValueCount as Go, IntrinsicFunctionResolver as Gr, describeRegionValueKind as Gs, isJournaledOrphan as Gt, compensateRemovedDeletionProtection as H, unreadableOrphanRecords as Ha, AssetManifestLoader as Hc, hasReadableResources as Hi, ccRoutedFinalSnapshotError as Hn, createUnionSecretMasker as Ho, reEnableInstanceApiTermination as Hr, isNotImplemented as Hs, removeProtectionTypeList as Ht, isProtectionValueActive as I, repairMalformedOrphansForReadOnly as Ia, runDockerForeground as Ic, UNREADABLE_RESOURCES_MAP_ROW as Ii, stateSecretNameNeedles as In, passedNoEchoParametersOf as Io, markWaitAbandoned as Ir, rebuildClientForBucketRegion as Is, replayFailedOperations as It, deleteTableWithIndexBusyRetry as J, withoutSilentDropProperties as Ja, loadCdkJson as Jc, malformedLocalOutputsWarning as Ji, maskingRetryLogger as Jn, recordLogOnlyValue as Jo, refuseUnreadableCdkCrossAccountRefs as Jr, hasReasonlessBaselineRefusal as Js, planRollback as Jt, DELETE_INDEX_WAIT_PROCEED_NOTE as K, findSilentDropProperties as Ka, getDefaultStateBucketName as Kc, malformedExportNamesWarning as Ki, refusesFinalSnapshot as Kn, printingCorpusOf as Ko, poisonRenderedSpellingsCollidingIn as Kr, exportNamesCarriedFrom as Ks, isReplacementOrphan as Kt, perType as L, repairMalformedOutputsForReadOnly as La, runDockerStreaming as Lc, accountArgs as Li, storedSecretNameNeedles as Ln, readbackPathFor as Lo, disableInstanceApiTermination as Lr, CrossPrefixReadError as Ls, replayRollback as Lt, noEchoParameterNamesOf as M, refuseMalformedResourcesForDestroy as Ma, partitionSensitiveEnv as Mc, JSON_LISTING_HOLE_VALUE as Mi, resolveBucketRegion as Ml, orphanRecordsPrintingBag as Mn, maskedLeafCoordinatesOf as Mo, deleteLeftInPlace as Mr, isSingleDynamicReferenceToken as Ms, journaledOrphanLines as Mt, recordedProtectionEvidence as N, refuseMalformedResourcesForExport as Na, redactDockerArgvValues as Nc, STATE_REGION_DIVERGED as Ni, secretNamePrintingBag as Nn, noEchoCoordinatesOf as No, deleteSkipReason as Nr, LockManager as Ns, loadJournaledOrphans as Nt, diffSecurity as O, refuseMalformedResourcePropertiesForDrift as Oa, formatDockerLoginError as Oc, withSharedDrainBudget as Oi, resolveAssemblyPath as Ol, DEFAULT_RESOURCE_WARN_AFTER_MS as On, isMarkedCoordinate as Oo, unchangedBehindSecretReference as Or, STATE_SOURCED_CROSS_GENERATION_RULES as Os, withNestedStackContext as Ot, recordedProtectionNote as P, refuseMalformedState as Pa, redactedCause as Pc, STATE_RESOURCES_MALFORMED as Pi, secretNamePrintingBags as Pn, noEchoLeavesOf as Po, withIndeterminateGuard as Pr, isLockInfoExpired as Ps, makeForeignHolderScan as Pt, hasCdkAutoDeleteTag as Q, shownType as Qa, resolveSkipPrefix as Qc, malformedOrphanRecordsWarning as Qi, outputReferenceProvenanceOf as Qn, maskSecretsInError as Qo, explicitRoleArnOrThrow as Qr, isReadableBag as Qs, resolveReplacementOldType as Qt, readProtection as R, repairMalformedResourceEntriesForReadOnly as Ra, warnFinchArgvExposure as Rc, deployRefusesOrphanRowsReason as Ri, extractDeploymentEventError as Rn, readsNoEchoSource as Ro, ec2InstanceProtectionSite as Rr, CrossPrefixScanCache as Rs, awaitInFlightSibling as Rt, keptForReadoption as S, refuseMalformedResourceEntriesForDeploy as Sa, resolveDockerContextDirectory as Sc, keepsSecretReferenceToken as Si, nullPrototypeRecord as Sl, noEchoParameterValueSeed as Sn, canonicalLambdaFunctionName as So, withPrintingSecrets as Sr, recordMaskOnlyValuesIn as Ss, recordDisplacedSkips as St, findServiceTokenRefusals as T, refuseMalformedResourceEntriesForImportSave as Ta, describeDockerFailure as Tc, isStalePlaceholderArnAttribute as Ti, describeFileReadFailure as Tl, isExportAliasCollision as Tn, DagBuilder as To, customResourceResponseExpirationWarning as Tr, recordProvenPublicExpression as Ts, withNestedRevertRun as Tt, deleteBudgetKey as U, unreadableResourceEntries as Ua, getDockerImageBySourceHash as Uc, isReadableOrphanRecord as Ui, createPreDeleteFinalSnapshot as Un, hasMaskableValues as Uo, DiffCalculator as Ur, splitImportedOps as Us, recordAfterRollbackUpdate as Ut, beginDeleteWait as V, unpreviewableOrphanRecords as Va, stripForDisplay as Vc, hasReadableOutputs as Vi, buildFinalSnapshotIdentifier as Vn, carryLogOnlyValues as Vo, reDisableInstanceApiTermination as Vr, isAccessDenied$1 as Vs, withStackRecords as Vt, resolveDynamoDbDeleteBudgetClock as W, withheldAccountClause as Wa, Synthesizer as Wc, isReadableResourceEntry as Wi, effectiveDeletionPolicy as Wn, literalSplitDelimitersOf as Wo, INTRINSIC_KEYS as Wr, acceptedCreateOnlyDropsOf as Ws, demoteSupersededOrphans as Wt, ECR_AUTO_DELETE_IMAGES_TAG as X, hasNoCloudControlHandlers as Xa, resolveAutoAssetStorage as Xc, malformedLocalResourcesWarning as Xi, findDestructiveChanges as Xn, createSecretMasker as Xo, assertFlagRoleArn as Xr, importableOutputKeys as Xs, recordUnderIdIsNotOwn as Xt, waitForIndexesSettled as Y, NO_CC_HANDLERS_REASON as Ya, resolveApp as Yc, malformedLocalResourceEntriesWarning as Yi, constructPathOf as Yn, shareLogOnlyValues as Yo, applyRoleArnIfSet as Yr, hasUnverifiableParameterRefusal as Ys, recheckFailedPlan as Yt, S3_AUTO_DELETE_OBJECTS_TAG as Z, findReplacedReadersOfRecreateTargets as Za, resolveCaptureObservedState as Zc, malformedOrphanRecordsRefusalMessage as Zi, formatDestructiveChange as Zn, errorCauseChain as Zo, assertSendableRoleArn as Zr, importableOutputs as Zs, replacementNeverSwapped as Zt, makeCanonicalizePropertiesFn as _, refuseMalformedOrphansForOrphan as _a, readBootstrapMarkerBody as _c, getAccountInfo as _i, StageLoadError as _l, secretSafeKeyDisplay as _n, requireConfigString as _o, wouldReturnToSdkProvider as _r, recordPhysicalNameCopy as _s, displacedOpClause as _t, findNestedTemplateTreeDefect as a, malformedResourceEntriesWarning as aa, WorkGraph as ac, isSettledInstanceState as ai, CFN_TEMPLATE_BODY_LIMIT as al, isRedactedRecordedValue as an, isWarmThroughputDecrease as ao, DBPROXY_TAG_OPTIONS as ar, withPhysicalNameCopies as as, cyan as at, lookupEachName as b, refuseMalformedResourceAttributesForOrphan as ba, buildDenyExternalAccessPolicy as bc, carriesFetchableDynamicReference as bi, hasOwnKey as bl, exportNameSecretExposure as bn, describeTypeWithThrottleRetry as bo, isCustomResourceType as br, provenPublicValue as bs, getNestedRevertRun as bt, renderNestedTemplateTreeDefect as c, malformedScrubResourceEntriesRefusalMessage as ca, loadPublishableAssetManifest as cc, s3BucketDualStackDomainName as ci, findLargeInlineResources as cl, updatePartialMessage as cn, coerceCfnBoolean as co, refuseMalformedDesiredTags as cr, dynamicReferenceTokens as cs, red as ct, conditionInputsFrom as d, refuseDivergentRecordRegionForDestroy as da, BOOTSTRAP_MARKER_PREFIX as dc, classifyReplaySecretRegion as di, decodeListingKey as dl, DeploymentEventsStore as dn, configIntegerRefusal as do, definedAttributes as dr, identityKeyFor as ds, namesAnyDeclaredParameter as dt, malformedOrphansRefusalMessage as ea, orphansCarriedFrom as ec, sendableAssumeRoleCommand as ei, resolveStateBucketWithDefaultAndSource as el, orphanDeleteNeedsIdentity as en, isStatefulRecreateTargetForReplace as eo, ledgerForStack as er, markSameGenerationBag as es, getPriorAttempts as et, parentSuppliedValues as f, refuseMalformedNestedChildOutputs as fa, assertAssetBucketRegion as fc, producerRegionsFromState as fi, expectedOwnerParam as fl, WITHHELD_NAME_DISPLAY as fn, configStringRefusal as fo, stringifyIfAssigned as fr, inheritNestedStackParameterAssociations as fs, reachableDivergentParameters as ft, mergeNoChangeOutputs as g, refuseMalformedOrphansForDestroy as ga, parseBootstrapMarker as gc, parameterTypeMayLoseSecretIdentity as gi, AssemblyReader as gl, secretBearingStateKeyWarning as gn, requireConfigObject as go, isCustomResource as gr, recordAttributeIdCopy as gs, NESTED_PENDING_PARENT_REASON as gt, keptWholeReasonText as h, refuseMalformedOrphans as ha, isCrossRegionRedirect as hc, isUnboundTemplateParameter as hi, derivePartitionAndUrlSuffix as hl, secretBearing as hn, requireConfigArray as ho, ccBrokenReason as hr, physicalNameCopiesOf as hs, planOrphanAdoption as ht, childTemplateLoader as i, malformedRenderedContainersWarning as ia, stringifyValue as ic, envCredentialsAreAssumedRole as ii, ssmResolvedValueType as il, REDACTED_DELETE_ADDRESS_SKIP_REASON as in, coerceWarmThroughput as io, DBPROXY_TAGS_WHAT as ir, scrubResourceRecord as is, bold as it, noEchoExactEchoLeavesOf as j, refuseMalformedResourcesForDeploy as ja, isMalformedEnvKey as jc, declaresNoEcho as ji, clearBucketRegionCache as jl, maskEventTextWithBoundBags as jn, maskWholeValue as jo, deleteIndeterminateGuards as jr, WHOLE_DYNAMIC_REFERENCE_PATTERN as js, isHandledOrphan as jt, noEchoAttributeNamesOf as k, refuseMalformedResourcePropertiesForExport as ka, getDockerCmd as kc, parameterInputsFor as ki, injectAwsRegion as kl, completedReplayEntries as kn, maskAtCoordinates as ko, RollbackInlinePolicyWriters as kr, STATE_SOURCED_READBACK_RULES as ks, deleteJournaledOrphans as kt, templateIdentity as l, malformedStateRefusalMessage as la, rewriteTemplateAssetReferences as lc, s3BucketRegionalDomainName as li, uploadCfnTemplate as ll, updatePartialReason as ln, coerceCfnInteger as lo, tagMapAsList as lr, isUncertifiedBaselineMaskPosition as ls, yellow as lt, isSecretBearingReferenceString as m, refuseMalformedOrphanRecordsForDestroy as ma, getBootstrapMarkerKey as mc, coerceParameterTypedValue as mi, canonicalizeRegion as ml, exportAliasCollisionScrubWarning as mn, replayWarn as mo, ProviderRegistry as mr, recoverMaskedOutput as ms, makeSiblingClaimReader as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedOutputsRefusalMessage as na, AssetPublisher as nc, applyCallerIdentityCredentials as ni, stateBucketExistenceConfirmed as nl, getCurrentProducerRegions as nn, renderStatefulReason as no, withCreateTokenLedger as nr, snapshotPassProvenance as ns, formatResourceLine as nt, isAbsoluteAssetPath as o, malformedResourcePropertiesWarning as oa, buildAssetRedirectMap as oc, s3BucketArn as oi, CFN_TEMPLATE_URL_LIMIT as ol, redactedDeleteAddressFields as on, toCfnInteger as oo, planTagDiff as or, withoutPhysicalNameCopies as os, gray as ot, readRecordedConditionVerdicts as p, refuseMalformedOrphanRecords as pa, ensureAssetStorage as pc, regionLessSecretName as pi, PARTITION_TABLE as pl, displayTextOrWithheld as pn, readConfigString as po, CC_BROKEN_REASON as pr, recordNestedStackParameterExpressions as ps, resourcesNamingDeclaredParameter as pt, INDEX_SETTLE_POLL_INTERVAL_MS as q, unwrittenCreateOnlyReplacement as qa, getLegacyStateBucketName as qc, malformedExportSourceWarning as qi, unsupportedFinalSnapshotError as qn, recordLogOnlyParameterValue as qo, producerLookupOver as qr, hasReadableExportSet as qs, planFailedOps as qt, computeImplicitDeleteEdges as r, malformedOutputsWarning as ra, isSensitiveAttributeName as rc, callerEnvCredentials as ri, warnDeprecatedNoPrefixCliFlag as rl, inheritProducerRegions as rn, WARM_THROUGHPUT_MEMBERS as ro, acquireIdempotencyToken as rr, redactSecretsForState as rs, createReadOnlyAttributeHealerFactory as rt, listNestedTemplateRows as s, malformedResourcesWarning as sa, createAssetRedirectResolver as sc, s3BucketDomainName as si, MIGRATE_TMP_PREFIX as sl, redactedDeleteAddressSkip as sn, toFiniteNumber as so, readTagList as sr, DYNAMIC_REFERENCE_TOKEN_SCAN as ss, green as st, DeployEngine as t, malformedOrphansWarning as ta, shouldRetainResource as tc, AWS_CREDENTIAL_ENV_KEYS as ti, resolveUseCdkBootstrapAssets as tl, findNestedStackTypeChanges as tn, isStatefulRecreateTargetSync as to, reserveStackCreateToken as tr, recordReferenceProvenanceEntry as ts, markRefusedBeforeApplying as tt, conditionFingerprint as u, previewableOrphanRecords as ua, AssetModeResolver as uc, s3BucketWebsiteUrl as ui, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as ul, DeploymentEventsReader as un, configBooleanRefusal as uo, tagPlanWarning as ur, pathCrossesDottedKey as us, computeParameterTaint as ut, chunks as v, refuseMalformedOutputs as va, validateAssetBucketName as vc, isImpossibleEmptyStoredAttribute as vi, processStackMessages as vl, carriedExportAliasExposure as vn, prefetchCreateOnlyPropertyPaths as vo, TemplateNoEchoReresolver as vr, splitGetAttStringForm as vs, displacedPhysicalIdShown as vt, deferredServiceTokenWarning as w, refuseMalformedResourceEntriesForImport as wa, describeDockerExecFailure as wc, cfnRefValueFromPhysicalId as wi, absoluteAssemblyPathEscape as wl, collectPublishedOutputNames as wn, sameLambdaFunctionAddress as wo, applyCustomResourceResponseExpiration as wr, recordNoEchoParameterFreshValue as ws, revertedNestedRowIds as wt, withApiLimit as x, refuseMalformedResourceEntries as xa, buildDockerImage as xc, isNamelessDynamicReferenceError as xi, hasPlainPrototype$1 as xl, isWholeDynamicReferenceValue as xn, withRetry as xo, getCurrentResourceSecrets as xr, recordMaskOnlyValue as xs, nestedChildStackName as xt, isAccessDeniedError as y, refuseMalformedOutputsForDestroy as ya, validateContainerRepoName as yc, carriesDynamicReference as yi, defineOwnKey as yl, exportNameNoEchoParameters as yn, templateResourceTypes as yo, readsNoEchoDeleteValues as yr, carriesSecretMask as ys, dropSettledNestedJournals as yt, DynamoDBGlobalTableProvider as z, repairMalformedResourcePropertiesForReadOnly as za, escapeRegExp$3 as zc, displayLogicalId as zi, ATOMIC_FINAL_SNAPSHOT_TYPES as zn, valueAtCoordinate as zo, isTerminationProtectionPropagationError as zr, applyCrossPrefixScan as zs, destroyStackRecordsView as zt };
|
|
46162
|
-
//# sourceMappingURL=deploy-engine-
|
|
46383
|
+
export { isTruthyCfnBoolean as $, NO_CC_HANDLERS_REASON as $a, resolveApp as $c, malformedLocalResourceEntriesWarning as $i, ledgerForStack as $n, shareLogOnlyValues as $o, sendableAssumeRoleCommand as $r, hasUnverifiableParameterRefusal as $s, seedsDeleteFirstGuard as $t, noEchoComparisonForTemplate as A, refuseMalformedResourceEntriesForOrphan as Aa, dockerSpawnEnvWithSensitive as Ac, refStateLookupFromResource as Ai, displayAssemblyPath as Al, journaledOrphanPrintingBag as An, TemplateParser as Ao, deleteIndeterminateGuards as Ar, wholeStringLeavesOf as As, dropFailedHint as At, DYNAMODB_DELETE_MIN_RESOURCE_TIMEOUT_MS as B, repairMalformedOrphansForReadOnly as Ba, runDockerForeground as Bc, UNREADABLE_RESOURCES_MAP_ROW as Bi, PRE_DELETE_SNAPSHOT_TYPES as Bn, passedNoEchoParametersOf as Bo, reDisableInstanceApiTermination as Br, rebuildClientForBucketRegion as Bs, getStackRecords as Bt, recordRetainedForReadoption as C, refuseMalformedOutputsForDestroy as Ca, validateContainerRepoName as Cc, carriesDynamicReference as Ci, defineOwnKey as Cl, collectDeclaredOutputNames as Cn, templateResourceTypes as Co, applyCustomResourceResponseExpiration as Cr, carriesSecretMask as Cs, revertNestedChildFromJournal as Ct, withResourceDeadline as D, refuseMalformedResourceEntriesForDestroy as Da, describeDockerCapturedOutput as Dc, AWS_NO_VALUE as Di, ownValue as Dl, DEFAULT_RESOURCE_TIMEOUT_MS as Dn, lambdaFunctionNameForMask as Do, unchangedBehindSecretReference as Dr, recordNoEchoAttributeValues as Ds, getCurrentNestedStackContext as Dt, serviceTokenBlockingReason as E, refuseMalformedResourceEntriesForDeploy as Ea, resolveDockerContextDirectory as Ec, keepsSecretReferenceToken as Ei, nullPrototypeRecord as El, bindingSkippedOutputs as En, canonicalLambdaFunctionName as Eo, slowCcOperationTimeoutMs as Er, recordMaskOnlyValuesIn as Es, collectNestedChildUnaddressed as Et, PROTECTION_PROPERTY_BY_TYPE as F, refuseMalformedResourcesForDeploy as Fa, isMalformedEnvKey as Fc, declaresNoEcho as Fi, clearBucketRegionCache as Fl, secretNamedRecordNeedles as Fn, maskWholeValue as Fo, markWaitAbandoned as Fr, WHOLE_DYNAMIC_REFERENCE_PATTERN as Fs, sameJournaledOrphans as Ft, resolveDynamoDbDeleteBudgetMs as G, unpreviewableOrphanRecords as Ga, stripForDisplay as Gc, hasReadableOutputs as Gi, isFinalSnapshotError as Gn, carryLogOnlyValues as Go, poisonRenderedSpellingsCollidingIn as Gr, isAccessDenied$1 as Gs, isJournaledOrphan as Gt, compensateRemovedDeletionProtection as H, repairMalformedResourceEntriesForReadOnly as Ha, warnFinchArgvExposure as Hc, deployRefusesOrphanRowsReason as Hi, ccRoutedFinalSnapshotError as Hn, readsNoEchoSource as Ho, DiffCalculator as Hr, CrossPrefixScanCache as Hs, removeProtectionTypeList as Ht, isProtectionValueActive as I, refuseMalformedResourcesForDestroy as Ia, partitionSensitiveEnv as Ic, JSON_LISTING_HOLE_VALUE as Ii, resolveBucketRegion as Il, stateSecretNameNeedles as In, maskedLeafCoordinatesOf as Io, disableInstanceApiTermination as Ir, isSingleDynamicReferenceToken as Is, replayFailedOperations as It, deleteTableWithIndexBusyRetry as J, withheldAccountClause as Ja, Synthesizer as Jc, isReadableResourceEntry as Ji, maskingRetryLogger as Jn, literalSplitDelimitersOf as Jo, applyRoleArnIfSet as Jr, acceptedCreateOnlyDropsOf as Js, planRollback as Jt, DELETE_INDEX_WAIT_PROCEED_NOTE as K, unreadableOrphanRecords as Ka, AssetManifestLoader as Kc, hasReadableResources as Ki, refusesFinalSnapshot as Kn, createUnionSecretMasker as Ko, producerLookupOver as Kr, isNotImplemented as Ks, isReplacementOrphan as Kt, perType as L, refuseMalformedResourcesForExport as La, redactDockerArgvValues as Lc, STATE_REGION_DIVERGED as Li, storedSecretNameNeedles as Ln, noEchoCoordinatesOf as Lo, ec2InstanceProtectionSite as Lr, LockManager as Ls, replayRollback as Lt, noEchoParameterNamesOf as M, refuseMalformedResourcePropertiesForDrift as Ma, formatDockerLoginError as Mc, withSharedDrainBudget as Mi, resolveAssemblyPath as Ml, orphanRecordsPrintingBag as Mn, isMarkedCoordinate as Mo, deleteSkipReason as Mr, STATE_SOURCED_CROSS_GENERATION_RULES as Ms, journaledOrphanLines as Mt, recordedProtectionEvidence as N, refuseMalformedResourcePropertiesForExport as Na, getDockerCmd as Nc, parameterInputsFor as Ni, injectAwsRegion as Nl, secretNamePrintingBag as Nn, maskAtCoordinates as No, withIndeterminateGuard as Nr, STATE_SOURCED_READBACK_RULES as Ns, loadJournaledOrphans as Nt, diffSecurity as O, refuseMalformedResourceEntriesForImport as Oa, describeDockerExecFailure as Oc, cfnRefValueFromPhysicalId as Oi, absoluteAssemblyPathEscape as Ol, DEFAULT_RESOURCE_WARN_AFTER_MS as On, sameLambdaFunctionAddress as Oo, RollbackInlinePolicyWriters as Or, recordNoEchoParameterFreshValue as Os, withNestedStackContext as Ot, recordedProtectionNote as P, refuseMalformedResourcePropertiesForOrphan as Pa, isDockerClientEnvKey as Pc, passedParameterClassesOf as Pi, injectedAwsRegionValue as Pl, secretNamePrintingBags as Pn, maskReadbackAtCoordinates as Po, isWaitAbandonedError as Pr, TEMPLATE_SOURCED_RULES as Ps, makeForeignHolderScan as Pt, hasCdkAutoDeleteTag as Q, withoutSilentDropProperties as Qa, loadCdkJson as Qc, malformedLocalOutputsWarning as Qi, earliestDefined as Qn, recordLogOnlyValue as Qo, isIamRoleArn as Qr, hasReasonlessBaselineRefusal as Qs, resolveReplacementOldType as Qt, readProtection as R, refuseMalformedState as Ra, redactedCause as Rc, STATE_RESOURCES_MALFORMED as Ri, extractDeploymentEventError as Rn, noEchoLeavesOf as Ro, isTerminationProtectionPropagationError as Rr, isLockInfoExpired as Rs, awaitInFlightSibling as Rt, keptForReadoption as S, refuseMalformedOutputs as Sa, validateAssetBucketName as Sc, isImpossibleEmptyStoredAttribute as Si, processStackMessages as Sl, noEchoParameterValueSeed as Sn, prefetchCreateOnlyPropertyPaths as So, CUSTOM_RESOURCE_RESPONSE_LIFECYCLE_RULE_ID as Sr, splitGetAttStringForm as Ss, recordDisplacedSkips as St, findServiceTokenRefusals as T, refuseMalformedResourceEntries as Ta, buildDockerImage as Tc, isNamelessDynamicReferenceError as Ti, hasPlainPrototype$1 as Tl, isExportAliasCollision as Tn, withRetry as To, CloudControlProvider as Tr, recordMaskOnlyValue as Ts, withNestedRevertRun as Tt, deleteBudgetKey as U, repairMalformedResourcePropertiesForReadOnly as Ua, escapeRegExp$3 as Uc, displayLogicalId as Ui, createPreDeleteFinalSnapshot as Un, valueAtCoordinate as Uo, INTRINSIC_KEYS as Ur, applyCrossPrefixScan as Us, recordAfterRollbackUpdate as Ut, beginDeleteWait as V, repairMalformedOutputsForReadOnly as Va, runDockerStreaming as Vc, accountArgs as Vi, buildFinalSnapshotIdentifier as Vn, readbackPathFor as Vo, reEnableInstanceApiTermination as Vr, CrossPrefixReadError as Vs, withStackRecords as Vt, resolveDynamoDbDeleteBudgetClock as W, repairMalformedResourcesForReadOnly as Wa, stripControlChars as Wc, hasReadableOrphans as Wi, effectiveDeletionPolicy as Wn, liveMatchesUnresolvedTokenFrame as Wo, IntrinsicFunctionResolver as Wr, crossPrefixDeniedWarning as Ws, demoteSupersededOrphans as Wt, ECR_AUTO_DELETE_IMAGES_TAG as X, findSilentDropProperties as Xa, getDefaultStateBucketName as Xc, malformedExportNamesWarning as Xi, findDestructiveChanges as Xn, printingCorpusOf as Xo, assertSendableRoleArn as Xr, exportNamesCarriedFrom as Xs, recordUnderIdIsNotOwn as Xt, waitForIndexesSettled as Y, findActionableSilentDrops as Ya, synthesisStatusMessage as Yc, malformedDriftResourcePropertiesWarning as Yi, constructPathOf as Yn, logOnlyValueCount as Yo, assertFlagRoleArn as Yr, describeRegionValueKind as Ys, recheckFailedPlan as Yt, S3_AUTO_DELETE_OBJECTS_TAG as Z, unwrittenCreateOnlyReplacement as Za, getLegacyStateBucketName as Zc, malformedExportSourceWarning as Zi, formatDestructiveChange as Zn, recordLogOnlyParameterValue as Zo, explicitRoleArnOrThrow as Zr, hasReadableExportSet as Zs, replacementNeverSwapped as Zt, makeCanonicalizePropertiesFn as _, refuseMalformedOrphanRecords as _a, ensureAssetStorage as _c, regionLessSecretName as _i, PARTITION_TABLE as _l, secretSafeKeyDisplay as _n, readConfigString as _o, TemplateNoEchoReresolver as _r, recordNestedStackParameterExpressions as _s, displacedOpClause as _t, findNestedTemplateTreeDefect as a, malformedOrphansWarning as aa, shouldRetainResource as ac, keepHeldTokenProvenance as ai, resolveUseCdkBootstrapAssets as al, isRedactedRecordedValue as an, isStatefulRecreateTargetSync as ao, planTagDiff as ar, recordReferenceProvenanceEntry as as, cyan as at, lookupEachName as b, refuseMalformedOrphansForDestroy as ba, parseBootstrapMarker as bc, parameterTypeMayLoseSecretIdentity as bi, AssemblyReader as bl, exportNameSecretExposure as bn, requireConfigObject as bo, getCurrentResourceSecrets as br, recordAttributeIdCopy as bs, getNestedRevertRun as bt, renderNestedTemplateTreeDefect as c, malformedRenderedContainersWarning as ca, stringifyValue as cc, recordedReferenceRegions as ci, ssmResolvedValueType as cl, updatePartialMessage as cn, coerceWarmThroughput as co, tagMapAsList as cr, scrubResourceRecord as cs, red as ct, conditionInputsFrom as d, malformedResourcesWarning as da, createAssetRedirectResolver as dc, s3BucketDualStackDomainName as di, MIGRATE_TMP_PREFIX as dl, DeploymentEventsStore as dn, toFiniteNumber as do, stringifyIfAssigned as dr, DYNAMIC_REFERENCE_TOKEN_SCAN as ds, namesAnyDeclaredParameter as dt, malformedLocalResourcesWarning as ea, importableOutputKeys as ec, AWS_CREDENTIAL_ENV_KEYS as ei, resolveAutoAssetStorage as el, orphanDeleteNeedsIdentity as en, hasNoCloudControlHandlers as eo, reserveStackCreateToken as er, createSecretMasker as es, getPriorAttempts as et, parentSuppliedValues as f, malformedScrubResourceEntriesRefusalMessage as fa, loadPublishableAssetManifest as fc, s3BucketRegionalDomainName as fi, findLargeInlineResources as fl, WITHHELD_NAME_DISPLAY as fn, coerceCfnBoolean as fo, CC_BROKEN_REASON as fr, dynamicReferenceTokens as fs, reachableDivergentParameters as ft, mergeNoChangeOutputs as g, refuseMalformedNestedChildOutputs as ga, assertAssetBucketRegion as gc, producerRegionsFromState as gi, expectedOwnerParam as gl, secretBearingStateKeyWarning as gn, configStringRefusal as go, wouldReturnToSdkProvider as gr, inheritNestedStackParameterAssociations as gs, NESTED_PENDING_PARENT_REASON as gt, keptWholeReasonText as h, refuseDivergentRecordRegionForDestroy as ha, BOOTSTRAP_MARKER_PREFIX as hc, classifyReplaySecretRegion as hi, decodeListingKey as hl, secretBearing as hn, configIntegerRefusal as ho, isCustomResource as hr, identityKeyFor as hs, planOrphanAdoption as ht, childTemplateLoader as i, malformedOrphansRefusalMessage as ia, orphansCarriedFrom as ic, isSettledInstanceState as ii, resolveStateBucketWithDefaultAndSource as il, REDACTED_DELETE_ADDRESS_SKIP_REASON as in, isStatefulRecreateTargetForReplace as io, DBPROXY_TAG_OPTIONS as ir, markSameGenerationBag as is, bold as it, noEchoExactEchoLeavesOf as j, refuseMalformedResourcePropertiesForDestroy as ja, finchSecretArgvRefusal as jc, parseWebACLArn as ji, renderAssemblyPathEscape as jl, maskEventTextWithBoundBags as jn, canonicalCoordinates as jo, deleteLeftInPlace as jr, STATE_SOURCED_BASELINE_RULES as js, isHandledOrphan as jt, noEchoAttributeNamesOf as k, refuseMalformedResourceEntriesForImportSave as ka, describeDockerFailure as kc, isStalePlaceholderArnAttribute as ki, describeFileReadFailure as kl, completedReplayEntries as kn, DagBuilder as ko, UNSPECIFIED_SKIP_REASON as kr, recordProvenPublicExpression as ks, deleteJournaledOrphans as kt, templateIdentity as l, malformedResourceEntriesWarning as la, WorkGraph as lc, s3BucketArn as li, CFN_TEMPLATE_BODY_LIMIT as ll, updatePartialReason as ln, isWarmThroughputDecrease as lo, tagPlanWarning as lr, withPhysicalNameCopies as ls, yellow as lt, isSecretBearingReferenceString as m, previewableOrphanRecords as ma, AssetModeResolver as mc, classifyRecordedSecretRegion as mi, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as ml, exportAliasCollisionScrubWarning as mn, configBooleanRefusal as mo, ccBrokenReason as mr, pathCrossesDottedKey as ms, makeSiblingClaimReader as mt, IMPLICIT_DELETE_DEPENDENCIES as n, malformedOrphanRecordsWarning as na, isReadableBag as nc, callerEnvCredentials as ni, resolveSkipPrefix as nl, getCurrentProducerRegions as nn, shownType as no, acquireIdempotencyToken as nr, maskSecretsInError as ns, formatResourceLine as nt, isAbsoluteAssetPath as o, malformedOutputsRefusalMessage as oa, AssetPublisher as oc, outputReferenceProvenanceOf as oi, stateBucketExistenceConfirmed as ol, redactedDeleteAddressFields as on, renderStatefulReason as oo, readTagList as or, snapshotPassProvenance as os, gray as ot, readRecordedConditionVerdicts as p, malformedStateRefusalMessage as pa, rewriteTemplateAssetReferences as pc, s3BucketWebsiteUrl as pi, uploadCfnTemplate as pl, displayTextOrWithheld as pn, coerceCfnInteger as po, ProviderRegistry as pr, isUncertifiedBaselineMaskPosition as ps, resourcesNamingDeclaredParameter as pt, INDEX_SETTLE_POLL_INTERVAL_MS as q, unreadableResourceEntries as qa, getDockerImageBySourceHash as qc, isReadableOrphanRecord as qi, unsupportedFinalSnapshotError as qn, hasMaskableValues as qo, refuseUnreadableCdkCrossAccountRefs as qr, splitImportedOps as qs, planFailedOps as qt, computeImplicitDeleteEdges as r, malformedOrphanRowsKeptWarning as ra, orphansAfterRollback as rc, envCredentialsAreAssumedRole as ri, resolveStateBucketWithDefault as rl, inheritProducerRegions as rn, MULTI_REGION_RECREATE_BLOCKED_TYPES as ro, DBPROXY_TAGS_WHAT as rr, maskSecretsInText as rs, createReadOnlyAttributeHealerFactory as rt, listNestedTemplateRows as s, malformedOutputsWarning as sa, isSensitiveAttributeName as sc, recordedOutputReferenceRegions as si, warnDeprecatedNoPrefixCliFlag as sl, redactedDeleteAddressSkip as sn, WARM_THROUGHPUT_MEMBERS as so, refuseMalformedDesiredTags as sr, redactSecretsForState as ss, green as st, DeployEngine as t, malformedOrphanRecordsRefusalMessage as ta, importableOutputs as tc, applyCallerIdentityCredentials as ti, resolveCaptureObservedState as tl, findNestedStackTypeChanges as tn, findReplacedReadersOfRecreateTargets as to, withCreateTokenLedger as tr, errorCauseChain as ts, markRefusedBeforeApplying as tt, conditionFingerprint as u, malformedResourcePropertiesWarning as ua, buildAssetRedirectMap as uc, s3BucketDomainName as ui, CFN_TEMPLATE_URL_LIMIT as ul, DeploymentEventsReader as un, toCfnInteger as uo, definedAttributes as ur, withoutPhysicalNameCopies as us, computeParameterTaint as ut, chunks as v, refuseMalformedOrphanRecordsForDestroy as va, getBootstrapMarkerKey as vc, coerceParameterTypedValue as vi, canonicalizeRegion as vl, carriedExportAliasExposure as vn, replayWarn as vo, readsNoEchoDeleteValues as vr, recoverMaskedOutput as vs, displacedPhysicalIdShown as vt, deferredServiceTokenWarning as w, refuseMalformedResourceAttributesForOrphan as wa, buildDenyExternalAccessPolicy as wc, carriesFetchableDynamicReference as wi, hasOwnKey as wl, collectPublishedOutputNames as wn, describeTypeWithThrottleRetry as wo, customResourceResponseExpirationWarning as wr, provenPublicValue as ws, revertedNestedRowIds as wt, withApiLimit as x, refuseMalformedOrphansForOrphan as xa, readBootstrapMarkerBody as xc, getAccountInfo as xi, StageLoadError as xl, isWholeDynamicReferenceValue as xn, requireConfigString as xo, withPrintingSecrets as xr, recordPhysicalNameCopy as xs, nestedChildStackName as xt, isAccessDeniedError as y, refuseMalformedOrphans as ya, isCrossRegionRedirect as yc, isUnboundTemplateParameter as yi, derivePartitionAndUrlSuffix as yl, exportNameNoEchoParameters as yn, requireConfigArray as yo, isCustomResourceType as yr, physicalNameCopiesOf as ys, dropSettledNestedJournals as yt, DynamoDBGlobalTableProvider as z, repairMalformedOrphanRecordsForReadOnly as za, redactedDockerCause as zc, UNREADABLE_ORPHANS_CONTAINER_ROW as zi, ATOMIC_FINAL_SNAPSHOT_TYPES as zn, noEchoOutputsComparison as zo, observeThenDisableInstanceApiTermination as zr, S3StateBackend as zs, destroyStackRecordsView as zt };
|
|
46384
|
+
//# sourceMappingURL=deploy-engine-DlLwYRJk.js.map
|