@go-to-k/cdkd 0.290.30 → 0.290.31
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-De5KONKr.js → asg-provider-DNzgk-BS.js} +2 -2
- package/dist/{asg-provider-De5KONKr.js.map → asg-provider-DNzgk-BS.js.map} +1 -1
- package/dist/cli.js +2 -2
- package/dist/{deploy-engine-mI1Xv1oi.js → deploy-engine-21iNqwR3.js} +162 -105
- package/dist/{deploy-engine-mI1Xv1oi.js.map → deploy-engine-21iNqwR3.js.map} +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{program-qSSjqstP.js → program-CnSaRdY9.js} +17 -4
- package/dist/{program-qSSjqstP.js.map → program-CnSaRdY9.js.map} +1 -1
- package/dist/{version-C15BftsD.js → version-IwTfNQ-K.js} +2 -2
- package/dist/{version-C15BftsD.js.map → version-IwTfNQ-K.js.map} +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-
|
|
2
|
+
import { n as isVersionOnlyInvocation, t as getCdkdVersion } from "./version-IwTfNQ-K.js";
|
|
3
3
|
|
|
4
4
|
//#region src/cli/pipe-close-handler.ts
|
|
5
5
|
/**
|
|
@@ -74,7 +74,7 @@ async function main() {
|
|
|
74
74
|
console.log(getCdkdVersion());
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
|
-
const { buildProgram } = await import("./program-
|
|
77
|
+
const { buildProgram } = await import("./program-CnSaRdY9.js");
|
|
78
78
|
const program = buildProgram();
|
|
79
79
|
const args = reorderArgs(process.argv);
|
|
80
80
|
await program.parseAsync(args);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as displayAwsMessage, E as truncateCodePoints, S as UNRENDERABLE, T as displaySafe, d as applyDefaultNameForFallback, f as explicitNamePropertyFor, g as looksLikeCdkdGeneratedName, h as getCurrentStackName, m as generateResourceNameWithFallback, n as getLogger, p as generateResourceName, r as isStdoutReservedForPayload, s as getLiveRenderer, v as withStackName, w as displayIdent, x as STACK_REF_MAX_CODE_POINTS, y as withoutGeneratedFallbackName } from "./logger-BjWM-UVj.js";
|
|
2
2
|
import { a as setAssumedRoleCredentials, i as getPreAssumeEnvCredentials, n as awsClientDefaults, o as setPreAssumeEnvCredentials, r as getAssumedRoleCredentials, t as SECOND_ROLE_PUBLISH_REFUSAL } from "./aws-client-defaults-BoIxyCir.js";
|
|
3
|
-
import { t as getCdkdVersion } from "./version-
|
|
3
|
+
import { t as getCdkdVersion } from "./version-IwTfNQ-K.js";
|
|
4
4
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
6
6
|
import { CreateBucketCommand, DeleteObjectCommand, DeleteObjectsCommand, GetBucketLocationCommand, GetBucketReplicationCommand, GetObjectCommand, HeadBucketCommand, HeadObjectCommand, ListObjectVersionsCommand, ListObjectsV2Command, NoSuchKey, PutBucketEncryptionCommand, PutBucketPolicyCommand, PutObjectCommand, PutPublicAccessBlockCommand, S3Client, S3ServiceException } from "@aws-sdk/client-s3";
|
|
@@ -17109,7 +17109,8 @@ var DagBuilder = class {
|
|
|
17109
17109
|
resourceIds.forEach((logicalId) => {
|
|
17110
17110
|
const resource = this.parser.getResource(template, logicalId);
|
|
17111
17111
|
graph.setNode(logicalId, resource);
|
|
17112
|
-
|
|
17112
|
+
const typeText = resource?.Type == null ? "<no Type>" : displayIdent(resource.Type);
|
|
17113
|
+
this.logger.debug(`Added node: ${displayIdent(logicalId)} (${typeText})`);
|
|
17113
17114
|
});
|
|
17114
17115
|
this.logger.debug(`Total nodes: ${resourceIds.length}`);
|
|
17115
17116
|
const parameterNames = new Set(Object.keys(template.Parameters ?? {}));
|
|
@@ -17123,15 +17124,15 @@ var DagBuilder = class {
|
|
|
17123
17124
|
for (const depId of dependencies) {
|
|
17124
17125
|
if (skip?.has(depId)) {
|
|
17125
17126
|
relaxedEdgeCount++;
|
|
17126
|
-
this.logger.debug(`Skipped CDK-defensive DependsOn edge: ${depId} -> ${logicalId} (default; opt out with --no-aggressive-vpc-parallel)`);
|
|
17127
|
+
this.logger.debug(`Skipped CDK-defensive DependsOn edge: ${displayIdent(depId)} -> ${displayIdent(logicalId)} (default; opt out with --no-aggressive-vpc-parallel)`);
|
|
17127
17128
|
continue;
|
|
17128
17129
|
}
|
|
17129
17130
|
if (graph.hasNode(depId)) {
|
|
17130
17131
|
graph.setEdge(depId, logicalId);
|
|
17131
17132
|
edgeCount++;
|
|
17132
|
-
this.logger.debug(`Added edge: ${depId} -> ${logicalId}`);
|
|
17133
|
-
} else if (parameterNames.has(depId)) this.logger.debug(`Skipped Parameter reference: ${logicalId} -> ${depId}`);
|
|
17134
|
-
else this.logger.warn(`Resource ${logicalId} depends on ${depId}, but ${depId} not found in template`);
|
|
17133
|
+
this.logger.debug(`Added edge: ${displayIdent(depId)} -> ${displayIdent(logicalId)}`);
|
|
17134
|
+
} else if (parameterNames.has(depId)) this.logger.debug(`Skipped Parameter reference: ${displayIdent(logicalId)} -> ${displayIdent(depId)}`);
|
|
17135
|
+
else this.logger.warn(`Resource ${displayIdent(logicalId)} depends on ${displayIdent(depId)}, but ${displayIdent(depId)} not found in template`);
|
|
17135
17136
|
}
|
|
17136
17137
|
}
|
|
17137
17138
|
if (relaxedEdgeCount > 0) this.logger.info(`[DagBuilder] Relaxed ${relaxedEdgeCount} CDK-defensive DependsOn edge(s) (default; opt out with --no-aggressive-vpc-parallel)`);
|
|
@@ -17140,7 +17141,7 @@ var DagBuilder = class {
|
|
|
17140
17141
|
edgeCount += this.addLambdaVpcEdges(graph, template);
|
|
17141
17142
|
if (!alg.isAcyclic(graph)) {
|
|
17142
17143
|
const cycles = this.findCycles(graph);
|
|
17143
|
-
throw new DependencyError(`Circular dependency detected in template. Cycles: ${cycles.map((c) => c.join(" -> ")).join("; ")}`);
|
|
17144
|
+
throw new DependencyError(`Circular dependency detected in template. Cycles: ${cycles.map((c) => c.map((n) => displayIdent(n)).join(" -> ")).join("; ")}`);
|
|
17144
17145
|
}
|
|
17145
17146
|
return graph;
|
|
17146
17147
|
}
|
|
@@ -17172,9 +17173,9 @@ var DagBuilder = class {
|
|
|
17172
17173
|
});
|
|
17173
17174
|
if (readyNodes.length === 0) {
|
|
17174
17175
|
const remaining = graphCopy.nodes();
|
|
17175
|
-
throw new DependencyError(`Circular dependency detected. Remaining nodes: ${remaining.join(", ")}`);
|
|
17176
|
+
throw new DependencyError(`Circular dependency detected. Remaining nodes: ${remaining.map((n) => displayIdent(n)).join(", ")}`);
|
|
17176
17177
|
}
|
|
17177
|
-
this.logger.debug(`Level ${levelNum}: ${readyNodes.length} resources - ${readyNodes.join(", ")}`);
|
|
17178
|
+
this.logger.debug(`Level ${levelNum}: ${readyNodes.length} resources - ${readyNodes.map((n) => displayIdent(n)).join(", ")}`);
|
|
17178
17179
|
levels.push(readyNodes);
|
|
17179
17180
|
readyNodes.forEach((node) => {
|
|
17180
17181
|
graphCopy.removeNode(node);
|
|
@@ -17291,7 +17292,7 @@ var DagBuilder = class {
|
|
|
17291
17292
|
if (graph.hasEdge(policyId, logicalId)) continue;
|
|
17292
17293
|
graph.setEdge(policyId, logicalId);
|
|
17293
17294
|
added++;
|
|
17294
|
-
this.logger.debug(`Added implicit edge (custom resource policy): ${policyId} -> ${logicalId}`);
|
|
17295
|
+
this.logger.debug(`Added implicit edge (custom resource policy): ${displayIdent(policyId)} -> ${displayIdent(logicalId)}`);
|
|
17295
17296
|
}
|
|
17296
17297
|
}
|
|
17297
17298
|
if (added > 0) this.logger.debug(`Added ${added} implicit edges for custom resource policies`);
|
|
@@ -17322,7 +17323,7 @@ var DagBuilder = class {
|
|
|
17322
17323
|
if (graph.hasEdge(depId, dependentId)) continue;
|
|
17323
17324
|
graph.setEdge(depId, dependentId);
|
|
17324
17325
|
added++;
|
|
17325
|
-
this.logger.debug(`Added implicit edge (lambda vpc): ${depId} -> ${dependentId}`);
|
|
17326
|
+
this.logger.debug(`Added implicit edge (lambda vpc): ${displayIdent(depId)} -> ${displayIdent(dependentId)}`);
|
|
17326
17327
|
}
|
|
17327
17328
|
if (added > 0) this.logger.debug(`Added ${added} implicit edges for Lambda VpcConfig`);
|
|
17328
17329
|
return added;
|
|
@@ -27188,14 +27189,14 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
27188
27189
|
if (!targetRegion) return ambient;
|
|
27189
27190
|
const target = canonicalizeRegion(targetRegion);
|
|
27190
27191
|
const loggedTarget = targetLogText ?? (targetRegion === this.explicitRegion ? this.explicitRegionLogText : void 0) ?? target;
|
|
27191
|
-
if (!isClientSafeRegion(target)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to build AWS clients for the region '${stripControlChars(loggedTarget).slice(0, 64)}': it is not a valid AWS region name, and a region is substituted into the AWS service hostname.`));
|
|
27192
|
+
if (!isClientSafeRegion(target)) throw markNonRetryable(new IntrinsicResolutionRefusalError(`Refusing to build AWS clients for the region '${displaySafe(stripControlChars(loggedTarget)).slice(0, 64)}': it is not a valid AWS region name, and a region is substituted into the AWS service hostname.`));
|
|
27192
27193
|
if (typeof ambient.withRegion !== "function") return ambient;
|
|
27193
27194
|
const cached = this.regionScopedClients.get(target);
|
|
27194
27195
|
if (cached) return cached;
|
|
27195
27196
|
if (canonicalizeRegion(ambient.configuredRegion) === target) return ambient;
|
|
27196
27197
|
const scoped = ambient.withRegion(target);
|
|
27197
27198
|
this.regionScopedClients.set(target, scoped);
|
|
27198
|
-
this.logger.debug(`Using region-scoped AWS clients for ${loggedTarget}`);
|
|
27199
|
+
this.logger.debug(`Using region-scoped AWS clients for ${displaySafe(loggedTarget)}`);
|
|
27199
27200
|
return scoped;
|
|
27200
27201
|
}
|
|
27201
27202
|
/**
|
|
@@ -27261,7 +27262,10 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
27261
27262
|
*/
|
|
27262
27263
|
async resolveParameters(template, userParameters, options) {
|
|
27263
27264
|
const inheritedSecrets = options?.inheritedSecrets;
|
|
27264
|
-
const maskInherited = (text) =>
|
|
27265
|
+
const maskInherited = (text) => {
|
|
27266
|
+
const mask = (value) => inheritedSecrets && inheritedSecrets.size > 0 ? maskSecretsInText(value, inheritedSecrets) : value;
|
|
27267
|
+
return displaySafe(mask(stripControlChars(mask(text))));
|
|
27268
|
+
};
|
|
27265
27269
|
const inheritedLogContext = {
|
|
27266
27270
|
template,
|
|
27267
27271
|
resources: {},
|
|
@@ -27366,7 +27370,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
27366
27370
|
for (const name of Object.keys(templateConditions)) try {
|
|
27367
27371
|
await withSharedDrainBudget(() => evaluateByName(name));
|
|
27368
27372
|
} catch (error) {
|
|
27369
|
-
this.logger.warn(this.
|
|
27373
|
+
this.logger.warn(this.displayMasked(`Failed to evaluate condition ${name}: ${error instanceof Error ? error.message : String(error)}, assuming false`, maskingContext));
|
|
27370
27374
|
conditions[name] = false;
|
|
27371
27375
|
inProgress.delete(name);
|
|
27372
27376
|
}
|
|
@@ -27664,10 +27668,11 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
27664
27668
|
this.logger.debug(`Resolved Ref to pseudo parameter: ${logicalId} -> ${valueStr}`);
|
|
27665
27669
|
return pseudoValue;
|
|
27666
27670
|
}
|
|
27667
|
-
const
|
|
27671
|
+
const loggedLogicalId = this.displayMasked(logicalId, context);
|
|
27672
|
+
const notFoundMsg = `Ref ${loggedLogicalId} not found (not a resource, parameter, or pseudo parameter)`;
|
|
27668
27673
|
if (context.bestEffort) this.logger.debug(notFoundMsg);
|
|
27669
27674
|
else this.logger.warn(notFoundMsg);
|
|
27670
|
-
throw markNonRetryable(/* @__PURE__ */ new Error(`Ref ${
|
|
27675
|
+
throw markNonRetryable(/* @__PURE__ */ new Error(`Ref ${loggedLogicalId} not found`));
|
|
27671
27676
|
}
|
|
27672
27677
|
/**
|
|
27673
27678
|
* Resolve the value a CloudFormation `Ref` returns for a resource.
|
|
@@ -27849,7 +27854,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
27849
27854
|
}
|
|
27850
27855
|
}
|
|
27851
27856
|
if (resource.resourceType === NESTED_STACK_RESOURCE_TYPE$1 && attributeName.startsWith(NESTED_STACK_OUTPUT_ATTRIBUTE_PREFIX)) {
|
|
27852
|
-
const declared = Object.keys(resource.attributes ?? {}).filter((k) => k.startsWith(NESTED_STACK_OUTPUT_ATTRIBUTE_PREFIX)).sort().map((k) => this.
|
|
27857
|
+
const declared = Object.keys(resource.attributes ?? {}).filter((k) => k.startsWith(NESTED_STACK_OUTPUT_ATTRIBUTE_PREFIX)).sort().map((k) => this.displayMasked(this.outputNameLogText(k, context), context));
|
|
27853
27858
|
const declaredText = declared.length > 0 ? declared.join(", ") : "(none)";
|
|
27854
27859
|
throw markNonRetryable(new IntrinsicResolutionRefusalError(`Cannot resolve Fn::GetAtt [${logicalId}, ${this.displayMasked(attributeName, context)}]: the nested stack '${logicalId}' declares no output named '${this.displayMasked(this.outputNameLogText(attributeName, context), context)}'. Its outputs are ${this.displayMasked(declaredText, context)}. Check the output name in the nested stack's template, and deploy the child stack again if you have just added it.`));
|
|
27855
27860
|
}
|
|
@@ -27905,7 +27910,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
27905
27910
|
const declared = context.noEchoAttributeResources?.get(logicalId);
|
|
27906
27911
|
if ((declared === true || declared !== void 0 && declared.has(attributeName)) && context.recordedSecretValues) recordMaskOnlyValuesIn(value, context.recordedSecretValues);
|
|
27907
27912
|
if (context.redactedAttributeReads !== void 0 && carriesSecretMask(value)) {
|
|
27908
|
-
const maskedAttributeName = this.
|
|
27913
|
+
const maskedAttributeName = this.displayMasked(attributeName, context);
|
|
27909
27914
|
this.pushRedactedAttributeRead(context, {
|
|
27910
27915
|
kind: "attribute",
|
|
27911
27916
|
logicalId,
|
|
@@ -28806,13 +28811,13 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
28806
28811
|
} catch (getAttError) {
|
|
28807
28812
|
if (getAttError instanceof IntrinsicResolutionRefusalError) throw getAttError;
|
|
28808
28813
|
this.rethrowStructuralSubFailure(varNameStr, getAttError, context);
|
|
28809
|
-
this.logger.warn(this.
|
|
28814
|
+
this.logger.warn(this.displayMasked(this.subPlaceholderWarning(varNameStr, getAttError), context));
|
|
28810
28815
|
replacement = match[0];
|
|
28811
28816
|
}
|
|
28812
28817
|
else {
|
|
28813
28818
|
if (refError instanceof IntrinsicResolutionRefusalError) throw refError;
|
|
28814
28819
|
this.rethrowStructuralSubFailure(varNameStr, refError, context);
|
|
28815
|
-
this.logger.warn(this.
|
|
28820
|
+
this.logger.warn(this.displayMasked(this.subPlaceholderWarning(varNameStr, refError), context));
|
|
28816
28821
|
replacement = match[0];
|
|
28817
28822
|
}
|
|
28818
28823
|
}
|
|
@@ -29193,7 +29198,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29193
29198
|
return recovered;
|
|
29194
29199
|
}
|
|
29195
29200
|
if (context.redactedAttributeReads !== void 0) {
|
|
29196
|
-
const loggedOrigin = this.
|
|
29201
|
+
const loggedOrigin = this.displayMasked(origin, context);
|
|
29197
29202
|
this.pushRedactedAttributeRead(context, {
|
|
29198
29203
|
kind: "cross-stack",
|
|
29199
29204
|
display: loggedOrigin
|
|
@@ -29287,7 +29292,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29287
29292
|
const target = canonicalizeRegion(producerRegion);
|
|
29288
29293
|
if (target === canonicalizeRegion(this.explicitRegion)) return this;
|
|
29289
29294
|
const regionText = producerRegionLogText !== void 0 ? canonicalizeRegion(producerRegionLogText) : this.regionLogText(producerRegion, context);
|
|
29290
|
-
const guestRegionText = this.
|
|
29295
|
+
const guestRegionText = this.displayMasked(regionText, context);
|
|
29291
29296
|
const cached = this.producerRegionResolvers.get(target);
|
|
29292
29297
|
if (cached) {
|
|
29293
29298
|
if (cached.explicitRegionLogText !== guestRegionText) cached.explicitRegionLogText = "***";
|
|
@@ -29313,7 +29318,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29313
29318
|
const exportName = await this.resolveValue(importValueArg, context);
|
|
29314
29319
|
if (typeof exportName !== "string") throw new Error(`Fn::ImportValue: export name must resolve to a string, got ${typeof exportName}`);
|
|
29315
29320
|
if (!context.stateBackend) throw new Error("Fn::ImportValue: state backend is required for cross-stack references");
|
|
29316
|
-
const loggedExportName = this.
|
|
29321
|
+
const loggedExportName = this.displayMasked(exportName, context);
|
|
29317
29322
|
this.logger.debug(`Resolving Fn::ImportValue: ${loggedExportName}`);
|
|
29318
29323
|
if (context.exportIndex) {
|
|
29319
29324
|
let entry;
|
|
@@ -29442,7 +29447,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29442
29447
|
* `OutputName` is the overwhelmingly common cause, and the list is what makes
|
|
29443
29448
|
* the error actionable.
|
|
29444
29449
|
*
|
|
29445
|
-
* `
|
|
29450
|
+
* `maskSecretsRaw` reads the consumer pass's log twin first (issue #3150),
|
|
29446
29451
|
* so a key equal to a name this pass assembled around a short secret is
|
|
29447
29452
|
* masked. Residual, stated rather than hidden: the needles and twins belong to the
|
|
29448
29453
|
* CONSUMER's resolution, so a plaintext sitting in a PRODUCER key that this
|
|
@@ -29493,7 +29498,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29493
29498
|
} catch (error) {
|
|
29494
29499
|
const message = error instanceof Error ? error.message : String(error);
|
|
29495
29500
|
const cfnNameMask = this.positionalNameMask([[stackName, this.displayMasked(stackName, context)], [region, this.displayMasked(loggedRegionText, context)]]);
|
|
29496
|
-
this.logger.warn(`Fn::GetStackOutput: CloudFormation DescribeStacks fallback failed for stack '${this.displayMasked(stackName, context)}' (${this.displayMasked(loggedRegionText, context)}): ${displayAwsMessage(this.
|
|
29501
|
+
this.logger.warn(`Fn::GetStackOutput: CloudFormation DescribeStacks fallback failed for stack '${this.displayMasked(stackName, context)}' (${this.displayMasked(loggedRegionText, context)}): ${displayAwsMessage(this.displayMasked(cfnNameMask ? cfnNameMask(message) : message, context))}. Grant cloudformation:DescribeStacks to resolve outputs from CloudFormation-managed stacks, or pass --no-cfn-fallback to disable the fallback.`);
|
|
29497
29502
|
return;
|
|
29498
29503
|
}
|
|
29499
29504
|
}
|
|
@@ -29616,7 +29621,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29616
29621
|
if (!roleArn && context.stackName && context.stackName === stackName && canonicalizeRegion(region) === canonicalizeRegion(this.resolverRegion)) throw new Error(`Fn::GetStackOutput: cannot reference own stack '${this.displayMasked(stackName, context)}' in the same region '${this.displayMasked(loggedRegionText, context)}'`);
|
|
29617
29622
|
const loggedStackName = this.displayMasked(stackName, context);
|
|
29618
29623
|
const loggedOutputName = this.displayMasked(outputName, context);
|
|
29619
|
-
const loggedRegion = this.
|
|
29624
|
+
const loggedRegion = this.displayMasked(loggedRegionText, context);
|
|
29620
29625
|
const shownRoleArn = roleArn ? displayIdent(roleArn, { maxCodePoints: 613 }) : "";
|
|
29621
29626
|
this.logger.debug(`Resolving Fn::GetStackOutput: StackName=${loggedStackName}, Region=${loggedRegion}, OutputName=${loggedOutputName}${roleArn ? `, RoleArn=${shownRoleArn}` : ""}`);
|
|
29622
29627
|
let stateData;
|
|
@@ -29706,7 +29711,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29706
29711
|
* own comment says why. What this clause is not is redundant against
|
|
29707
29712
|
* `raw !== masked`: `rememberLogTwin` has no empty-key guard and
|
|
29708
29713
|
* `splitLogTwins` registers every piece it produces, so `registeredLogTwin`
|
|
29709
|
-
* can answer `***` for the empty string and make `
|
|
29714
|
+
* can answer `***` for the empty string and make `maskSecretsRaw('')`
|
|
29710
29715
|
* differ from `''`. Neither call site can reach it — both refuse an empty
|
|
29711
29716
|
* name upstream — so it fences nothing measured today.
|
|
29712
29717
|
*
|
|
@@ -29931,7 +29936,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29931
29936
|
this.logger.debug(`Resolved Fn::GetAZs from cache: ${this.displayMasked(loggedRegionText ?? region, context)} -> ${JSON.stringify(this.maskValueLeaves(cached, context))}`);
|
|
29932
29937
|
return cached;
|
|
29933
29938
|
}
|
|
29934
|
-
const ec2Client = this.clientsForRegion(clientRegion, loggedRegionText === void 0 ? void 0 : this.
|
|
29939
|
+
const ec2Client = this.clientsForRegion(clientRegion, loggedRegionText === void 0 ? void 0 : this.displayMasked(loggedRegionText, context)).ec2;
|
|
29935
29940
|
let azNames;
|
|
29936
29941
|
try {
|
|
29937
29942
|
azNames = ((await ec2Client.send(new DescribeAvailabilityZonesCommand({ Filters: [{
|
|
@@ -29980,9 +29985,31 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29980
29985
|
* Results are cached to avoid repeated API calls.
|
|
29981
29986
|
*/
|
|
29982
29987
|
/**
|
|
29983
|
-
*
|
|
29984
|
-
* the secrets recorded on the resolution pass (GHSA fix). No-op when
|
|
29985
|
-
* recorded no secrets.
|
|
29988
|
+
* The SECRET answer alone: mask any resolved secret value out of `text`,
|
|
29989
|
+
* using the secrets recorded on the resolution pass (GHSA fix). No-op when
|
|
29990
|
+
* the pass recorded no secrets.
|
|
29991
|
+
*
|
|
29992
|
+
* ## NOT a display form, and the name says so
|
|
29993
|
+
*
|
|
29994
|
+
* This was `maskSecretsForLog` until go-to-k/cdkd#3426, and the name was the
|
|
29995
|
+
* defect. It answers "does this text contain a recorded secret" and makes no
|
|
29996
|
+
* claim about CONTROL CHARACTERS — but it read as "the spelling a log line
|
|
29997
|
+
* takes", so TEN local bindings took its result and interpolated it later,
|
|
29998
|
+
* one of them reaching an `Fn::ImportValue` warn and throw with a live
|
|
29999
|
+
* `ESC[2K` + CR from a template-supplied export name (measured on this tree,
|
|
30000
|
+
* at DEFAULT verbosity, on the DEFAULT path). Renaming it is what makes the
|
|
30001
|
+
* hazard visible at the BINDING rather than at the render: `const x =
|
|
30002
|
+
* this.maskSecretsRaw(...)` states that more work is owed.
|
|
30003
|
+
*
|
|
30004
|
+
* Reachable from ONE place, {@link maskThenStripThenMask}, which is itself
|
|
30005
|
+
* reachable only from {@link displayMasked}. That containment is the whole
|
|
30006
|
+
* mechanism and it is enforced, not conventional:
|
|
30007
|
+
* `scripts/check-resolver-mask-coverage.ts` does not list this method in
|
|
30008
|
+
* `MASKERS`, so its AST walk — which RESOLVES an interpolated identifier to
|
|
30009
|
+
* its declaration — reports any render that reaches it, through a binding or
|
|
30010
|
+
* directly. Do not add it to that list, and do not call it from a new site.
|
|
30011
|
+
*
|
|
30012
|
+
* ## What the masking itself does
|
|
29986
30013
|
*
|
|
29987
30014
|
* A value with a registered LOG TWIN prints as its twin first (issue
|
|
29988
30015
|
* [#3150](https://github.com/go-to-k/cdkd/issues/3150)). The needle mask
|
|
@@ -29992,7 +30019,8 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
29992
30019
|
* reference) printed in the clear at every site that handed its RAW value
|
|
29993
30020
|
* here, although the pass had registered where the secret sits. Looking the
|
|
29994
30021
|
* twin up HERE, rather than at each such site, is what makes the class
|
|
29995
|
-
* closed for raw values: every one of those sites already
|
|
30022
|
+
* closed for raw values: every one of those sites already reaches this
|
|
30023
|
+
* method through the builder.
|
|
29996
30024
|
* The twin prints as it is: it is the raw text with masked spans, so it
|
|
29997
30025
|
* holds no recorded needle the raw text lacks. When the needle mask ALSO
|
|
29998
30026
|
* changes the raw text the whole text is masked instead, the rule
|
|
@@ -30000,8 +30028,21 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30000
30028
|
* cannot be merged. What this cannot see is a value TRANSFORMED before it
|
|
30001
30029
|
* arrives (a lowercased region, a sliced output name, an assembled
|
|
30002
30030
|
* sentence); those sites derive their text from the twin themselves.
|
|
30031
|
+
*
|
|
30032
|
+
* ## The SELF-COMPARISON, and why it did not block the strip
|
|
30033
|
+
*
|
|
30034
|
+
* The line below compares `maskNeedlesForLog(text) !== text` — the NEEDLE
|
|
30035
|
+
* mask, not this method's own result — so making the RENDER path strip
|
|
30036
|
+
* changes no comparison anywhere. An earlier revision of `displayMasked`'s
|
|
30037
|
+
* comment said stripping could not move inside "the masker" because its
|
|
30038
|
+
* result is also a comparison; that was a claim about this expression, and
|
|
30039
|
+
* the expression's operand is a different function. The measurement that
|
|
30040
|
+
* settled it: every one of this method's 20 escaping call sites rendered
|
|
30041
|
+
* into a log line, a throw, or a `display:` field that becomes one — none
|
|
30042
|
+
* compared, persisted or re-parsed the result — so the render path could
|
|
30043
|
+
* take the strip whole.
|
|
30003
30044
|
*/
|
|
30004
|
-
|
|
30045
|
+
maskSecretsRaw(text, context) {
|
|
30005
30046
|
const registered = this.registeredLogTwin(text, context);
|
|
30006
30047
|
if (registered === void 0) return this.maskNeedlesForLog(text, context);
|
|
30007
30048
|
return this.maskNeedlesForLog(text, context) !== text ? "***" : registered;
|
|
@@ -30020,19 +30061,19 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30020
30061
|
const raw = error instanceof Error ? error.message : String(error);
|
|
30021
30062
|
return {
|
|
30022
30063
|
unit,
|
|
30023
|
-
subject: this.
|
|
30024
|
-
message: this.
|
|
30064
|
+
subject: this.displayMasked(subject, context),
|
|
30065
|
+
message: this.displayMasked(preRedact === void 0 ? raw : preRedact(raw), context),
|
|
30025
30066
|
error,
|
|
30026
30067
|
carriedDynamicReference: carriesDynamicReference(rawInput),
|
|
30027
30068
|
carriedFetchableReference: carriesFetchableDynamicReference(rawInput)
|
|
30028
30069
|
};
|
|
30029
30070
|
}
|
|
30030
30071
|
/**
|
|
30031
|
-
* The needle mask alone: {@link
|
|
30072
|
+
* The needle mask alone: {@link maskSecretsRaw} without the log-twin
|
|
30032
30073
|
* lookup. For the two DETECTORS that must ask the needle mask apart from the
|
|
30033
30074
|
* position mask: `logTwinText`, which asks it of a value that already has a
|
|
30034
30075
|
* twin, and `resolveBase64`, whose other operand is the position mask. A
|
|
30035
|
-
* message masks through `
|
|
30076
|
+
* message masks through `displayMasked`.
|
|
30036
30077
|
*/
|
|
30037
30078
|
maskNeedlesForLog(text, context) {
|
|
30038
30079
|
let masked = text;
|
|
@@ -30060,7 +30101,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30060
30101
|
* part of it outside the span. The value's own needle mask cannot be merged
|
|
30061
30102
|
* with the twin's positions, so the line gives both up for `***`: never
|
|
30062
30103
|
* more text than either mask alone would print. Returns the text BEFORE the
|
|
30063
|
-
* needle mask; each log line wraps it in `
|
|
30104
|
+
* needle mask; each log line wraps it in `displayMasked` itself, so the
|
|
30064
30105
|
* resolver's mask-coverage checker sees a masker at the site.
|
|
30065
30106
|
*/
|
|
30066
30107
|
logTwinText(result, twin, context) {
|
|
@@ -30112,12 +30153,12 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30112
30153
|
* the leaf treated as a resolution product — masked whole when it is a
|
|
30113
30154
|
* recorded secret, otherwise the masked twin this pass registered for it —
|
|
30114
30155
|
* and then `logTwinText`'s whole-line guard. The caller still wraps the
|
|
30115
|
-
* result in `
|
|
30156
|
+
* result in `displayMasked`. Used where the text is needed BEFORE that
|
|
30116
30157
|
* masker, or apart from it: the `Fn::Base64` line and its detector, and the
|
|
30117
30158
|
* names issue [#3150](https://github.com/go-to-k/cdkd/issues/3150)
|
|
30118
30159
|
* transforms or composes before printing (`regionLogText`,
|
|
30119
30160
|
* `outputNameLogText`, the invalid-region refusals, the cross-stack `origin`
|
|
30120
|
-
* strings). A leaf printed as it is needs none of it: `
|
|
30161
|
+
* strings). A leaf printed as it is needs none of it: `displayMasked`
|
|
30121
30162
|
* looks the twin up itself, which is how `maskValueLeaves` gives its lines
|
|
30122
30163
|
* and the THROWN messages it masks (the `Fn::Cidr` argument refusals, for
|
|
30123
30164
|
* one) the same position mask.
|
|
@@ -30357,7 +30398,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30357
30398
|
maskValueLeaves(value, context) {
|
|
30358
30399
|
const done = /* @__PURE__ */ new Map();
|
|
30359
30400
|
const walk = (node) => {
|
|
30360
|
-
if (typeof node === "string") return this.
|
|
30401
|
+
if (typeof node === "string") return this.displayMasked(node, context);
|
|
30361
30402
|
if (node === null || typeof node !== "object") return node;
|
|
30362
30403
|
const memo = done.get(node);
|
|
30363
30404
|
if (memo !== void 0) return memo;
|
|
@@ -30369,7 +30410,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30369
30410
|
}
|
|
30370
30411
|
const out = Object.create(null);
|
|
30371
30412
|
done.set(node, out);
|
|
30372
|
-
for (const [key, child] of Object.entries(node)) out[this.
|
|
30413
|
+
for (const [key, child] of Object.entries(node)) out[this.displayMasked(key, context)] = walk(child);
|
|
30373
30414
|
return out;
|
|
30374
30415
|
};
|
|
30375
30416
|
return walk(value);
|
|
@@ -30400,10 +30441,18 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30400
30441
|
* of the text in hand. A value this resolver resolved cannot be that text
|
|
30401
30442
|
* (the split copy is itself recorded, so the first mask catches it), but a
|
|
30402
30443
|
* template LITERAL can: issue #3150's region-scoped clients refusal prints
|
|
30403
|
-
* a producer-region guest's region through
|
|
30404
|
-
* region spelling a recorded `st-1` as `s` + U+0001 + `t-1` is
|
|
30405
|
-
* by the second pass
|
|
30406
|
-
* pins both halves on
|
|
30444
|
+
* a producer-region guest's region through {@link displayMasked}, and a
|
|
30445
|
+
* literal ARN region spelling a recorded `st-1` as `s` + U+0001 + `t-1` is
|
|
30446
|
+
* masked only by the second pass
|
|
30447
|
+
* (`intrinsic-resolver-name-argument-log-twin.test.ts` pins both halves on
|
|
30448
|
+
* that route).
|
|
30449
|
+
*
|
|
30450
|
+
* ONE CALLER, {@link displayMasked}, since go-to-k/cdkd#3426. It is most of
|
|
30451
|
+
* the answer and reads like all of it — it omits `displaySafe`, and
|
|
30452
|
+
* therefore `U+2028` / `U+2029` and the bidi overrides — so a site reaching
|
|
30453
|
+
* for it directly is the near-miss back onto the treadmill. It is not in
|
|
30454
|
+
* `MASKERS` in `scripts/check-resolver-mask-coverage.ts`, so a render that
|
|
30455
|
+
* reaches it (through a binding or directly) is reported there.
|
|
30407
30456
|
*
|
|
30408
30457
|
* THE BOUND, since this file's job is to state them: this covers a needle
|
|
30409
30458
|
* split by a character `stripControlChars` removes. A needle split by
|
|
@@ -30412,59 +30461,67 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30412
30461
|
* solved here.
|
|
30413
30462
|
*/
|
|
30414
30463
|
maskThenStripThenMask(value, context) {
|
|
30415
|
-
return this.
|
|
30464
|
+
return this.maskSecretsRaw(stripControlChars(this.maskSecretsRaw(value, context)), context);
|
|
30416
30465
|
}
|
|
30417
30466
|
/**
|
|
30418
|
-
* The ONE way a masked value reaches a message in this file
|
|
30467
|
+
* The ONE way a masked value reaches a message in this file — and, since
|
|
30468
|
+
* go-to-k/cdkd#3426, the ONLY exit from the masking machinery at all.
|
|
30419
30469
|
*
|
|
30420
30470
|
* ## Why this exists rather than a rule about call sites
|
|
30421
30471
|
*
|
|
30422
|
-
*
|
|
30423
|
-
* makes NO claim about control characters
|
|
30424
|
-
*
|
|
30425
|
-
*
|
|
30426
|
-
*
|
|
30427
|
-
*
|
|
30428
|
-
*
|
|
30429
|
-
*
|
|
30430
|
-
*
|
|
30431
|
-
*
|
|
30432
|
-
*
|
|
30433
|
-
* `describeAvailableOutputs`. Each round fixed what it found and the next
|
|
30434
|
-
* round found more, because the population was never enumerated. Measured
|
|
30435
|
-
* 2026-09-19 with a comment-stripped scan: SEVENTY-ONE interpolations
|
|
30436
|
-
* rendered a `maskSecretsForLog` result directly, plus thirteen hand-spelled
|
|
30472
|
+
* {@link maskSecretsRaw} answers "does this text contain a recorded secret"
|
|
30473
|
+
* and makes NO claim about control characters. That split produced a
|
|
30474
|
+
* four-round treadmill on go-to-k/cdkd#3408. Round 1 found the four
|
|
30475
|
+
* `Fn::GetStackOutput` throws rendering a masked name raw and fixed them.
|
|
30476
|
+
* Round 2 found the CloudFormation-fallback warn — the DEFAULT path, at
|
|
30477
|
+
* DEFAULT verbosity — and the self-reference throw. Round 3 found the
|
|
30478
|
+
* `reresolveCrossStackValue` origin builder and `describeAvailableOutputs`.
|
|
30479
|
+
* Each round fixed what it found and the next round found more, because the
|
|
30480
|
+
* population was never enumerated. Measured 2026-09-19 with a
|
|
30481
|
+
* comment-stripped scan: SEVENTY-ONE interpolations rendered a bare masker
|
|
30482
|
+
* result directly, plus thirteen hand-spelled
|
|
30437
30483
|
* `displaySafe(maskThenStripThenMask(...))` compositions and two bare
|
|
30438
30484
|
* `maskThenStripThenMask` interpolations — and three reviewers between them
|
|
30439
30485
|
* reached eight of the eighty-six.
|
|
30440
30486
|
*
|
|
30441
|
-
*
|
|
30442
|
-
*
|
|
30443
|
-
*
|
|
30444
|
-
*
|
|
30445
|
-
* `
|
|
30446
|
-
*
|
|
30447
|
-
*
|
|
30448
|
-
*
|
|
30449
|
-
*
|
|
30450
|
-
*
|
|
30451
|
-
*
|
|
30452
|
-
*
|
|
30453
|
-
*
|
|
30454
|
-
*
|
|
30455
|
-
*
|
|
30456
|
-
*
|
|
30457
|
-
* `
|
|
30458
|
-
*
|
|
30459
|
-
*
|
|
30460
|
-
*
|
|
30461
|
-
*
|
|
30462
|
-
*
|
|
30463
|
-
*
|
|
30464
|
-
* `
|
|
30465
|
-
*
|
|
30466
|
-
*
|
|
30467
|
-
*
|
|
30487
|
+
* ROUND FIVE was the BINDING shape: `const loggedExportName =
|
|
30488
|
+
* this.<masker>(...)` interpolated later, which a line-shaped scanner
|
|
30489
|
+
* forbidding `${this.<masker>(` structurally cannot see. Ten of them existed,
|
|
30490
|
+
* and `loggedExportName` was a LIVE exposure — an `Fn::ImportValue` export
|
|
30491
|
+
* name carrying `ESC[2K` + CR reached a warn AND a throw unstripped, at
|
|
30492
|
+
* default verbosity on the default path.
|
|
30493
|
+
*
|
|
30494
|
+
* Patching those ten sites would have been the fifth round of one
|
|
30495
|
+
* enumeration. What closes the class instead is that there is no longer a
|
|
30496
|
+
* masking answer a site can reach WITHOUT the strip: every escaping call of
|
|
30497
|
+
* the old `maskSecretsForLog` now calls this builder, the raw masker is
|
|
30498
|
+
* reachable only through {@link maskThenStripThenMask}, and that helper is
|
|
30499
|
+
* reachable only from here.
|
|
30500
|
+
*
|
|
30501
|
+
* ## What keeps it closed
|
|
30502
|
+
*
|
|
30503
|
+
* `scripts/check-resolver-mask-coverage.ts` — an AST walk that already
|
|
30504
|
+
* RESOLVES an interpolated identifier to its declaration and judges the
|
|
30505
|
+
* initializer. Its `MASKERS` list names the functions a render may reach,
|
|
30506
|
+
* and since go-to-k/cdkd#3426 every entry on it SANITIZES as well as masks.
|
|
30507
|
+
* So a binding of a raw masker is a finding wherever it is later
|
|
30508
|
+
* interpolated, by the same mechanism that already answered the secret
|
|
30509
|
+
* question — no second scanner, and nothing line-shaped.
|
|
30510
|
+
* `tests/unit/deployment/resolver-display-masked-population.test.ts` pins the
|
|
30511
|
+
* population and the builder bodies beside it.
|
|
30512
|
+
*
|
|
30513
|
+
* KNOWN BOUND, stated rather than implied away: a site carrying an
|
|
30514
|
+
* exclusion marker is exempt from that walk, because the marker answers the
|
|
30515
|
+
* SECRET question ("this value cannot carry a plaintext"), which is not the
|
|
30516
|
+
* control-character question. Such a site sanitizes by hand or not at all —
|
|
30517
|
+
* `clientsForRegion`'s two region renders are both markered, and both
|
|
30518
|
+
* sanitize. Widening the walk to judge every interpolated value is
|
|
30519
|
+
* go-to-k/cdkd#3405's mixed-render scope, not this builder's.
|
|
30520
|
+
*
|
|
30521
|
+
* (The marker's literal spelling is deliberately not written in this comment:
|
|
30522
|
+
* the checker scans the raw text for it, and a prose mention parses as a
|
|
30523
|
+
* marker no site consumes — which it then reports STALE. Measured while
|
|
30524
|
+
* writing this paragraph.)
|
|
30468
30525
|
*
|
|
30469
30526
|
* ## What it does, in order
|
|
30470
30527
|
*
|
|
@@ -30478,8 +30535,8 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30478
30535
|
*
|
|
30479
30536
|
* It is listed in `MASKERS` in `scripts/check-resolver-mask-coverage.ts`,
|
|
30480
30537
|
* which is a SECURITY decision and a sound one: every path through it passes
|
|
30481
|
-
*
|
|
30482
|
-
* and cannot be weaker at any input.
|
|
30538
|
+
* the needle-and-twin mask, twice, so it is strictly stronger than the bare
|
|
30539
|
+
* masker it replaced and cannot be weaker at any input.
|
|
30483
30540
|
*/
|
|
30484
30541
|
displayMasked(value, context) {
|
|
30485
30542
|
return displaySafe(this.maskThenStripThenMask(value, context));
|
|
@@ -30489,16 +30546,16 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30489
30546
|
* the same reason as {@link displayMasked} and closed by the same scanner.
|
|
30490
30547
|
*
|
|
30491
30548
|
* `logTextOfLeaf` resolves a value to its registered twin (or `SECRET_MASK`),
|
|
30492
|
-
* which is a MASKING answer and, like `
|
|
30549
|
+
* which is a MASKING answer and, like `maskSecretsRaw`'s, says nothing
|
|
30493
30550
|
* about control characters. Four `origin` builders interpolated it raw — the
|
|
30494
30551
|
* `Fn::ImportValue` pair, the `Fn::GetStackOutput` one and the nested-stack
|
|
30495
30552
|
* attribute one — and those strings flow into `redactedAttributeReads[].display`
|
|
30496
30553
|
* and out through a `ProvisioningError` message.
|
|
30497
30554
|
*
|
|
30498
|
-
* This route is why fixing the masker alone did not close the class:
|
|
30499
|
-
* `displayMasked` covers every site that
|
|
30500
|
-
*
|
|
30501
|
-
*
|
|
30555
|
+
* This route is why fixing the secret masker alone did not close the class:
|
|
30556
|
+
* `displayMasked` covers every site that renders a needle-masked value, and
|
|
30557
|
+
* these render something else. Two routes, two names, one checker refusing
|
|
30558
|
+
* the raw form of both.
|
|
30502
30559
|
*
|
|
30503
30560
|
* Composed rather than re-derived. `maskSecretsInText` is idempotent (see
|
|
30504
30561
|
* {@link maskThenStripThenMask}), so masking twin text again costs nothing
|
|
@@ -30557,7 +30614,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30557
30614
|
continue;
|
|
30558
30615
|
}
|
|
30559
30616
|
const regionVerdict = classifyReplaySecretRegion(fullMatch, this.explicitRegion ?? this.resolverRegion, context?.producerRegions);
|
|
30560
|
-
if (regionVerdict.kind === "ambiguous") throw markNonRetryable(new DynamicReferenceRegionAmbiguousError(`Refusing to resolve the secret reference ${this.displayMasked(tokenLogText, context)}: it names '${this.displayMasked(nameLogText(regionVerdict.secretName), context)}' without a region, and this stack reads from ${this.displayMasked(regionVerdict.foreignProducerRegions.map((r) => this.
|
|
30617
|
+
if (regionVerdict.kind === "ambiguous") throw markNonRetryable(new DynamicReferenceRegionAmbiguousError(`Refusing to resolve the secret reference ${this.displayMasked(tokenLogText, context)}: it names '${this.displayMasked(nameLogText(regionVerdict.secretName), context)}' without a region, and this stack reads from ${this.displayMasked(regionVerdict.foreignProducerRegions.map((r) => this.displayMasked(r, context)).join(", "), context)} as well as its own region. cdkd cannot tell which one must answer, and resolving against the wrong one yields a different secret. Spell the reference as a full ARN to say which region owns it.`));
|
|
30561
30618
|
if (regionVerdict.kind === "named-region") {
|
|
30562
30619
|
const foreign = await this.resolverForProducerRegion(regionVerdict.region, context, nameLogText(regionVerdict.region)).resolveDynamicReferencesWithLogTwin(fullMatch, fullMatch, withoutProducerRegions(context), {
|
|
30563
30620
|
tokenLogText,
|
|
@@ -30626,7 +30683,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30626
30683
|
isSecret = true;
|
|
30627
30684
|
resolved = param.value;
|
|
30628
30685
|
} else {
|
|
30629
|
-
this.logger.warn(this.
|
|
30686
|
+
this.logger.warn(this.displayMasked(`Unsupported dynamic reference service: ${this.displayMasked(nameLogText(String(service)), context)}`, context));
|
|
30630
30687
|
complete = false;
|
|
30631
30688
|
continue;
|
|
30632
30689
|
}
|
|
@@ -30714,8 +30771,8 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30714
30771
|
} else secretId = afterService;
|
|
30715
30772
|
if (!versionStage) versionStage = "AWSCURRENT";
|
|
30716
30773
|
if (!secretId) throw new Error("Dynamic reference: secretsmanager SECRET_ID is required");
|
|
30717
|
-
const loggedSecretId = this.
|
|
30718
|
-
const loggedJsonKey = this.
|
|
30774
|
+
const loggedSecretId = this.displayMasked(nameLogText(secretId), context);
|
|
30775
|
+
const loggedJsonKey = this.displayMasked(nameLogText(jsonKey), context);
|
|
30719
30776
|
this.logger.debug(`Resolving dynamic reference: secretsmanager:${loggedSecretId}:SecretString:${loggedJsonKey}:${this.displayMasked(nameLogText(versionStage), context)}:${this.displayMasked(nameLogText(versionId), context)}`);
|
|
30720
30777
|
const client = this.clientsForRegion(this.explicitRegion).secretsManager;
|
|
30721
30778
|
const command = new GetSecretValueCommand({
|
|
@@ -30880,7 +30937,7 @@ var IntrinsicFunctionResolver = class IntrinsicFunctionResolver {
|
|
|
30880
30937
|
async resolveSSMReference(parts, decrypt, service, context, nameLogText) {
|
|
30881
30938
|
const parameterName = parts.slice(1).join(":");
|
|
30882
30939
|
if (!parameterName) throw new Error(`Dynamic reference: ${service} PARAMETER_NAME is required`);
|
|
30883
|
-
const loggedParameterName = this.
|
|
30940
|
+
const loggedParameterName = this.displayMasked(nameLogText(parameterName), context);
|
|
30884
30941
|
this.logger.debug(`Resolving dynamic reference: ${service}:${loggedParameterName}`);
|
|
30885
30942
|
const client = this.clientsForRegion(this.explicitRegion).ssm;
|
|
30886
30943
|
const command = new GetParameterCommand({
|
|
@@ -32578,7 +32635,7 @@ var CloudControlProvider = class {
|
|
|
32578
32635
|
const indeterminateGuard = await this.confirmDeleteTargetIdentity(logicalId, resourceType, physicalId, context);
|
|
32579
32636
|
if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
|
|
32580
32637
|
this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
|
|
32581
|
-
const { ASGProvider } = await import("./asg-provider-
|
|
32638
|
+
const { ASGProvider } = await import("./asg-provider-DNzgk-BS.js").then((n) => n.n);
|
|
32582
32639
|
const asgProvider = new ASGProvider();
|
|
32583
32640
|
return withIndeterminateGuard(await asgProvider.delete(logicalId, physicalId, resourceType, _properties, context), indeterminateGuard);
|
|
32584
32641
|
}
|
|
@@ -45645,4 +45702,4 @@ var DeployEngine = class DeployEngine {
|
|
|
45645
45702
|
|
|
45646
45703
|
//#endregion
|
|
45647
45704
|
export { secretBearing as $, SynthesisError as $i, recordMaskOnlyValue as $n, AssetManifestLoader as $r, s3BucketArn as $t, extractDeploymentEventError as A, getAwsClients as Ai, refuseMalformedState as An, BOOTSTRAP_MARKER_PREFIX as Ar, isImpossibleEmptyStoredAttribute as At, toCfnInteger as B, IntrinsicResolutionRefusalError as Bi, STATE_SOURCED_BASELINE_RULES as Bn, buildDockerImage as Br, coerceCfnBoolean as Bt, buildFinalSnapshotIdentifier as C, canonicalizeRegion as Ci, producerRecordKey as Cn, stringifyValue as Cr, isTerminationProtectionPropagationError as Ct, refusesFinalSnapshot as D, clearBucketRegionCache as Di, refuseMalformedOutputsForDestroy as Dn, loadPublishableAssetManifest as Dr, cfnRefValueFromPhysicalId as Dt, isFinalSnapshotError as E, processStackMessages as Ei, refuseMalformedOutputs as En, createAssetRedirectResolver as Er, carriesFetchableDynamicReference as Et, isStatefulRecreateTargetSync as F, ConfigError as Fi, findSilentDropProperties as Fn, parseBootstrapMarker as Fr, isSettledInstanceState as Ft, gray as G, NestedStackChildDirectDestroyError as Gi, createSecretMasker as Gn, formatDockerLoginError as Gr, readConfigString as Gt, formatResourceLine as H, LocalStartServiceError as Hi, STATE_SOURCED_READBACK_RULES as Hn, describeDockerExecFailure as Hr, configBooleanRefusal as Ht, renderStatefulReason as I, CrossAccountSecretRefusalError as Ii, describeTypeWithThrottleRetry as In, readBootstrapMarkerBody as Ir, WAFv2WebACLProvider as It, yellow as J, ResourceTimeoutError as Ji, identityKeyFor as Jn, redactDockerArgvValues as Jr, requireConfigObject as Jt, green as K, PartialFailureError as Ki, dynamicReferenceTokens as Kn, getDockerCmd as Kr, replayWarn as Kt, WARM_THROUGHPUT_MEMBERS as L, DependencyError as Li, withRetry as Ln, validateAssetBucketName as Lr, normalizeAwsTagsToCfn as Lt, planOrphanAdoption as M, setAwsClients as Mi, repairMalformedResourcePropertiesForReadOnly as Mn, ensureAssetStorage as Mr, isUnboundTemplateParameter as Mt, MULTI_REGION_RECREATE_BLOCKED_TYPES as N, AssetError as Ni, repairMalformedResourcesForReadOnly as Nn, getBootstrapMarkerKey as Nr, parameterTypeMayLoseSecretIdentity as Nt, unsupportedFinalSnapshotError as O, resolveBucketRegion as Oi, refuseMalformedResourcePropertiesForOrphan as On, rewriteTemplateAssetReferences as Or, coerceParameterTypedValue as Ot, isStatefulRecreateTargetForReplace as P, CdkdError as Pi, findActionableSilentDrops as Pn, isCrossRegionRedirect as Pr, refStateLookupFromResource as Pt, isExportAliasCollision as Q, StateError as Qi, maskSecretsInText as Qn, stripControlChars as Qr, withSharedDrainBudget as Qt, coerceWarmThroughput as R, DeployCancelledError as Ri, DagBuilder as Rn, validateContainerRepoName as Rr, resolveExplicitPhysicalId as Rt, PRE_DELETE_SNAPSHOT_TYPES as S, PARTITION_TABLE as Si, malformedStateRefusalMessage as Sn, AssetPublisher as Sr, disableInstanceApiTermination as St, createPreDeleteFinalSnapshot as T, AssemblyReader as Ti, refuseMalformedNestedChildOutputs as Tn, buildAssetRedirectMap as Tr, carriesDynamicReference as Tt, bold as U, LockError as Ui, TEMPLATE_SOURCED_RULES as Un, describeDockerFailure as Ur, configIntegerRefusal as Ut, toFiniteNumber as V, LocalInvokeBuildError as Vi, STATE_SOURCED_CROSS_GENERATION_RULES as Vn, describeDockerCapturedOutput as Vr, coerceCfnInteger as Vt, cyan as W, MalformedProducerRecordRefusalError as Wi, carriesSecretMask as Wn, dockerSpawnEnvWithSensitive as Wr, configStringRefusal as Wt, collectPublishedOutputNames as X, StackHasActiveImportsError as Xi, markSameGenerationBag as Xn, runDockerStreaming as Xr, classifyReplaySecretRegion as Xt, collectDeclaredOutputNames as Y, ResourceUpdateNotSupportedError as Yi, isSingleDynamicReferenceToken as Yn, runDockerForeground as Yr, requireConfigString as Yt, exportAliasCollisionScrubWarning as Z, StackTerminationProtectionError as Zi, maskSecretsInError as Zn, escapeRegExp$1 as Zr, producerRegionsFromState as Zt, isSecretBearingReferenceString as _, findLargeInlineResources as _i, malformedOutputsRefusalMessage as _n, importableOutputs as _r, isWaitAbandonedError as _t, DeploymentEventsStore as a, isRetryableTransientError as aa, resolveApp as ai, AWS_CREDENTIAL_ENV_KEYS as an, rebuildClientForBucketRegion as ar, clearOnUpdateRemoval as at, bindingSkippedOutputs as b, decodeListingKey as bi, malformedResourcePropertiesWarning as bn, orphansCarriedFrom as br, deleteIndeterminateGuards as bt, replayFailedOperations as c, markNonRetryable as ca, resolveSkipPrefix as ci, envCredentialsAreAssumedRole as cn, buildLockContentionMessage as cr, createMaskedRetryLogger as ct, updatePartialReason as d, describeAwsFailure as da, resolveUseCdkBootstrapAssets as di, STATE_RESOURCES_MALFORMED as dn, shellQuote as dr, beginCommandInterruptScope as dt, formatError as ea, getDockerImageBySourceHash as ei, s3BucketDomainName as en, recoverMaskedOutput as er, secretBearingStateKeyWarning as et, withResourceDeadline as f, safeStringify$1 as fa, stateBucketExistenceConfirmed as fi, hasReadableOutputs as fn, CUSTOM_RESOURCE_RESPONSE_PREFIX as fr, endCommandInterruptScope as ft, bagHoldsSecretExpression as g, MIGRATE_TMP_PREFIX as gi, malformedLocalOutputsWarning as gn, importableOutputKeys as gr, CloudControlProvider as gt, computeImplicitDeleteEdges as h, CFN_TEMPLATE_URL_LIMIT as hi, malformedExportSourceWarning as hn, hasReadableExportSet as hr, startInterruptWatch as ht, DeploymentEventsReader as i, isMarkedNonRetryable as ia, getLegacyStateBucketName as ii, applyRoleArnIfSet as in, S3StateBackend as ir, collectInlinePolicyNamesManagedBySiblings as it, makeSiblingClaimReader as j, resetAwsClients as ji, repairMalformedOutputsForReadOnly as jn, assertAssetBucketRegion as jr, isNamelessDynamicReferenceError as jt, makeCanonicalizePropertiesFn as k, AwsClients as ki, refuseMalformedResourcesForDestroy as kn, AssetModeResolver as kr, getAccountInfo as kt, replayRollback as l, markRedactedCause as la, resolveStateBucketWithDefault as li, DiffCalculator as ln, forceQuitRecoveryClause as lr, maskDeep as lt, IMPLICIT_DELETE_DEPENDENCIES as m, CFN_TEMPLATE_BODY_LIMIT as mi, malformedExportNamesWarning as mn, exportNamesCarriedFrom as mr, isInterruptedWaitError as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, normalizeAwsError as na, synthesisStatusMessage as ni, s3BucketRegionalDomainName as nn, scrubResourceRecord as nr, getCurrentResourceSecrets as nt, planFailedOps as o, isThrottlingError as oa, resolveAutoAssetStorage as oi, applyCallerIdentityCredentials as on, UNREPRODUCIBLE_LOCK_CLAUSE as or, ProviderRegistry as ot, maskingRetryLogger as p, __exportAll as pa, warnDeprecatedNoPrefixCliFlag as pi, hasReadableResources as pn, DEFAULT_STATE_PREFIX as pr, interruptWatchListenerCount as pt, red as q, ProvisioningError as qi, errorCauseChain as qn, partitionSensitiveEnv as qr, requireConfigArray as qt, DeployEngine as r, withErrorHandling as ra, getDefaultStateBucketName as ri, s3BucketWebsiteUrl as rn, LockManager as rr, IAMRoleProvider as rt, planRollback as s, isTransientServerError as sa, resolveCaptureObservedState as si, callerEnvCredentials as sn, buildForceUnlockCommand as sr, wouldReturnToSdkProvider as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, isCdkdError as ta, Synthesizer as ti, s3BucketDualStackDomainName as tn, redactSecretsForState as tr, secretSafeKeyDisplay as tt, updatePartialMessage as u, retryClassificationText as ua, resolveStateBucketWithDefaultAndSource as ui, INTRINSIC_KEYS as un, formatLockExpiry as ur, maskerOrIdentity as ut, keptWholeReasonText as v, uploadCfnTemplate as vi, malformedOutputsWarning as vn, isReadableBag as vr, slowCcOperationTimeoutMs as vt, ccRoutedFinalSnapshotError as w, derivePartitionAndUrlSuffix as wi, refuseDivergentRecordRegionForDestroy as wn, WorkGraph as wr, IntrinsicFunctionResolver as wt, ATOMIC_FINAL_SNAPSHOT_TYPES as x, expectedOwnerParam as xi, malformedResourcesWarning as xn, shouldRetainResource as xr, deleteSkipReason as xt, mergeNoChangeOutputs as y, CUSTOM_RESOURCE_RESPONSE_OBJECT_DESCRIPTION as yi, malformedRenderedContainersWarning as yn, orphansAfterRollback as yr, UNSPECIFIED_SKIP_REASON as yt, isWarmThroughputDecrease as z, DynamicReferenceRegionAmbiguousError as zi, TemplateParser as zn, buildDenyExternalAccessPolicy as zr, assertRegionMatch as zt };
|
|
45648
|
-
//# sourceMappingURL=deploy-engine-
|
|
45705
|
+
//# sourceMappingURL=deploy-engine-21iNqwR3.js.map
|