@go-to-k/cdkd 0.274.0 → 0.275.1

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.
@@ -5280,6 +5280,32 @@ var WorkGraph = class {
5280
5280
 
5281
5281
  //#endregion
5282
5282
  //#region src/utils/stringify.ts
5283
+ /**
5284
+ * Attribute names whose VALUES must never reach a log line, even at debug
5285
+ * level. `Fn::GetAtt` resolution debug-logs the resolved value, and some
5286
+ * attributes carry live long-lived credentials — the first was
5287
+ * `AWS::IAM::AccessKey.SecretAccessKey` (issue #1323), where a `--verbose`
5288
+ * deploy (or a CI log) would otherwise print a usable IAM secret key.
5289
+ * Matched against the ATTRIBUTE NAME (not the value), so legitimate
5290
+ * non-secret attributes keep full debug output.
5291
+ */
5292
+ const SENSITIVE_ATTRIBUTE_NAME = /secret|password|credential/i;
5293
+ /**
5294
+ * Names that MATCH the sensitive pattern but denote identifiers, not the
5295
+ * credential material itself (`SecretArn`, `MasterUserSecret.SecretArn`,
5296
+ * `SecretId`, ...). ARNs / ids are load-bearing debug output — redacting them
5297
+ * would hurt debuggability without protecting anything.
5298
+ */
5299
+ const NON_SENSITIVE_SUFFIX = /(arn|id|name|url|alias|status)$/i;
5300
+ /**
5301
+ * Render an attribute value for a debug log line, redacting values whose
5302
+ * attribute name looks credential-bearing (see
5303
+ * {@link SENSITIVE_ATTRIBUTE_NAME}).
5304
+ */
5305
+ function stringifyAttributeForLog(attributeName, value) {
5306
+ if (SENSITIVE_ATTRIBUTE_NAME.test(attributeName) && !NON_SENSITIVE_SUFFIX.test(attributeName)) return "<redacted>";
5307
+ return stringifyValue(value);
5308
+ }
5283
5309
  function stringifyValue(value) {
5284
5310
  switch (typeof value) {
5285
5311
  case "string": return value;
@@ -7708,6 +7734,7 @@ const IAM_PROPAGATION_ERROR_MESSAGE_PATTERNS = [
7708
7734
  "does not have required permissions",
7709
7735
  "Trusted Entity",
7710
7736
  "Invalid principal in policy",
7737
+ "The user with name",
7711
7738
  "Policy Error: PrincipalNotFound",
7712
7739
  "Invalid value for the parameter Policy",
7713
7740
  "required permissions for: ENHANCED_MONITORING",
@@ -9800,6 +9827,18 @@ function collectReferencedParameterNames(template) {
9800
9827
  }
9801
9828
  return referenced;
9802
9829
  }
9830
+ /**
9831
+ * Render a parameter VALUE for a debug log line, honoring the definition's
9832
+ * `NoEcho` flag (issue #1329). `NoEcho: true` is the template author's
9833
+ * explicit "this value is sensitive" declaration — CloudFormation masks such
9834
+ * values everywhere it echoes them, so cdkd's `--verbose` output must not
9835
+ * print them either. Sibling of `stringifyAttributeForLog` (which redacts
9836
+ * `Fn::GetAtt` ATTRIBUTE values by name heuristic; here the author told us).
9837
+ */
9838
+ function stringifyParameterForLog(paramDef, value) {
9839
+ if (paramDef?.NoEcho === true) return "<redacted>";
9840
+ return stringifyValue(value);
9841
+ }
9803
9842
  var IntrinsicFunctionResolver = class {
9804
9843
  logger = getLogger().child("IntrinsicFunctionResolver");
9805
9844
  resolverRegion;
@@ -9856,7 +9895,7 @@ var IntrinsicFunctionResolver = class {
9856
9895
  const userValue = userParameters[name];
9857
9896
  if (userValue !== void 0) {
9858
9897
  parameters[name] = this.coerceParameterValue(userValue, paramDef.Type);
9859
- this.logger.debug(`Parameter ${name}: using user-provided value ${userValue}`);
9898
+ this.logger.debug(`Parameter ${name}: using user-provided value ${stringifyParameterForLog(paramDef, userValue)}`);
9860
9899
  continue;
9861
9900
  }
9862
9901
  }
@@ -9871,11 +9910,11 @@ var IntrinsicFunctionResolver = class {
9871
9910
  this.logger.debug(`Parameter ${name}: resolving SSM parameter path ${ssmPath}`);
9872
9911
  const resolved = await this.resolveSSMParameter(ssmPath);
9873
9912
  parameters[name] = resolved;
9874
- this.logger.debug(`Parameter ${name}: resolved SSM value ${resolved}`);
9913
+ this.logger.debug(`Parameter ${name}: resolved SSM value ${stringifyParameterForLog(paramDef, resolved)}`);
9875
9914
  continue;
9876
9915
  }
9877
9916
  parameters[name] = paramDef.Default;
9878
- this.logger.debug(`Parameter ${name}: using default value ${stringifyValue(paramDef.Default)}`);
9917
+ this.logger.debug(`Parameter ${name}: using default value ${stringifyParameterForLog(paramDef, paramDef.Default)}`);
9879
9918
  continue;
9880
9919
  }
9881
9920
  throw new Error(`Parameter ${name} is required but no value was provided and no default exists`);
@@ -10004,7 +10043,8 @@ var IntrinsicFunctionResolver = class {
10004
10043
  }
10005
10044
  if (context.parameters && logicalId in context.parameters) {
10006
10045
  const value = context.parameters[logicalId];
10007
- this.logger.debug(`Resolved Ref to parameter: ${logicalId} -> ${stringifyValue(value)}`);
10046
+ const paramDef = context.template.Parameters?.[logicalId];
10047
+ this.logger.debug(`Resolved Ref to parameter: ${logicalId} -> ${stringifyParameterForLog(paramDef, value)}`);
10008
10048
  return value;
10009
10049
  }
10010
10050
  const pseudoValue = await this.resolvePseudoParameter(logicalId, context);
@@ -10092,7 +10132,7 @@ var IntrinsicFunctionResolver = class {
10092
10132
  if (!(resource.resourceType === "AWS::EC2::VPC" && attributeName === "Ipv6CidrBlocks") && resource.attributes !== void 0) {
10093
10133
  const flatValue = resource.attributes[attributeName];
10094
10134
  if (flatValue !== void 0) {
10095
- this.logger.debug(`Resolved Fn::GetAtt from attributes: ${logicalId}.${attributeName} -> ${stringifyValue(flatValue)}`);
10135
+ this.logger.debug(`Resolved Fn::GetAtt from attributes: ${logicalId}.${attributeName} -> ${stringifyAttributeForLog(attributeName, flatValue)}`);
10096
10136
  return flatValue;
10097
10137
  }
10098
10138
  if (attributeName.includes(".")) {
@@ -10104,13 +10144,13 @@ var IntrinsicFunctionResolver = class {
10104
10144
  break;
10105
10145
  }
10106
10146
  if (cursor !== void 0) {
10107
- this.logger.debug(`Resolved Fn::GetAtt from nested attributes: ${logicalId}.${attributeName} -> ${stringifyValue(cursor)}`);
10147
+ this.logger.debug(`Resolved Fn::GetAtt from nested attributes: ${logicalId}.${attributeName} -> ${stringifyAttributeForLog(attributeName, cursor)}`);
10108
10148
  return cursor;
10109
10149
  }
10110
10150
  }
10111
10151
  }
10112
10152
  const value = await this.constructAttribute(resource, attributeName, context, logicalId);
10113
- this.logger.debug(`Resolved Fn::GetAtt: ${logicalId}.${attributeName} -> ${stringifyValue(value)}`);
10153
+ this.logger.debug(`Resolved Fn::GetAtt: ${logicalId}.${attributeName} -> ${stringifyAttributeForLog(attributeName, value)}`);
10114
10154
  return value;
10115
10155
  }
10116
10156
  /**
@@ -11520,7 +11560,6 @@ const NON_PROVISIONABLE_TYPES = /* @__PURE__ */ new Set([
11520
11560
  "AWS::DAX::ParameterGroup",
11521
11561
  "AWS::DAX::SubnetGroup",
11522
11562
  "AWS::DirectoryService::MicrosoftAD",
11523
- "AWS::DMS::Endpoint",
11524
11563
  "AWS::DMS::EventSubscription",
11525
11564
  "AWS::DMS::ReplicationInstance",
11526
11565
  "AWS::DMS::ReplicationSubnetGroup",
@@ -11569,7 +11608,6 @@ const NON_PROVISIONABLE_TYPES = /* @__PURE__ */ new Set([
11569
11608
  "AWS::Greengrass::SubscriptionDefinitionVersion",
11570
11609
  "AWS::GreengrassV2::Component",
11571
11610
  "AWS::GreengrassV2::CoreDevice",
11572
- "AWS::IAM::AccessKey",
11573
11611
  "AWS::IdentityStore::AllGroupMemberships",
11574
11612
  "AWS::ImageBuilder::AllImageBuildVersions",
11575
11613
  "AWS::ImageBuilder::AllWorkflowBuildVersions",
@@ -12002,7 +12040,7 @@ var CloudControlProvider = class {
12002
12040
  this.logger.debug(`Deleting resource ${logicalId} (${resourceType}), physical ID: ${physicalId}`);
12003
12041
  if (context?.removeProtection === true && resourceType === "AWS::AutoScaling::AutoScalingGroup") {
12004
12042
  this.logger.debug(`Delegating protected AutoScalingGroup ${logicalId} delete to the SDK ASGProvider (Cloud Control cannot force-delete a protected ASG)`);
12005
- const { ASGProvider } = await import("./asg-provider-C1xO9Hg8.js").then((n) => n.n);
12043
+ const { ASGProvider } = await import("./asg-provider-c0TMaGXW.js").then((n) => n.n);
12006
12044
  await new ASGProvider().delete(logicalId, physicalId, resourceType, _properties, context);
12007
12045
  return;
12008
12046
  }
@@ -14670,6 +14708,14 @@ const PROPERTY_COVERAGE_BY_TYPE = /* @__PURE__ */ new Map([
14670
14708
  ]),
14671
14709
  silentDrop: /* @__PURE__ */ new Map()
14672
14710
  }],
14711
+ ["AWS::IAM::AccessKey", {
14712
+ handled: /* @__PURE__ */ new Set([
14713
+ "Serial",
14714
+ "Status",
14715
+ "UserName"
14716
+ ]),
14717
+ silentDrop: /* @__PURE__ */ new Map()
14718
+ }],
14673
14719
  ["AWS::IAM::Group", {
14674
14720
  handled: /* @__PURE__ */ new Set([
14675
14721
  "GroupName",
@@ -17771,7 +17817,7 @@ const FLUSH_INTERVAL_MS = 2e3;
17771
17817
  const FLUSH_EVENT_THRESHOLD = 50;
17772
17818
  /** Build-time cdkd version, with a dev fallback for non-built contexts. */
17773
17819
  function getCdkdVersion() {
17774
- return "0.274.0";
17820
+ return "0.275.1";
17775
17821
  }
17776
17822
  /**
17777
17823
  * Generate a time-sortable unique run id, e.g.
@@ -19817,4 +19863,4 @@ var DeployEngine = class {
19817
19863
 
19818
19864
  //#endregion
19819
19865
  export { WorkGraph as $, LockError as $t, slowCcOperationTimeoutMs as A, warnDeprecatedNoPrefixCliFlag as At, applyRoleArnIfSet as B, resolveBucketRegion as Bt, yellow as C, resolveAutoAssetStorage as Ct, ProviderRegistry as D, resolveStateBucketWithDefaultAndSource as Dt, clearOnUpdateRemoval as E, resolveStateBucketWithDefault as Et, refStateLookupFromResource as F, uploadCfnTemplate as Ft, DagBuilder as G, AssetError as Gt, describeTypeWithThrottleRetry as H, getAwsClients as Ht, WAFv2WebACLProvider as I, expectedOwnerParam as It, S3StateBackend as J, DependencyError as Jt, TemplateParser as K, CdkdError as Kt, normalizeAwsTagsToCfn as L, AssemblyReader as Lt, isTerminationProtectionPropagationError as M, CFN_TEMPLATE_URL_LIMIT as Mt, IntrinsicFunctionResolver as N, MIGRATE_TMP_PREFIX as Nt, findActionableSilentDrops as O, resolveUseCdkBootstrapAssets as Ot, cfnRefValueFromPhysicalId as P, findLargeInlineResources as Pt, stringifyValue as Q, LocalStartServiceError as Qt, resolveExplicitPhysicalId as R, processStackMessages as Rt, red as S, resolveApp as St, collectInlinePolicyNamesManagedBySiblings as T, resolveSkipPrefix as Tt, withRetry as U, resetAwsClients as Ut, DiffCalculator as V, AwsClients as Vt, isRetryableTransientError as W, setAwsClients as Wt, shouldRetainResource as X, LocalInvokeBuildError as Xt, rebuildClientForBucketRegion as Y, DeployCancelledError as Yt, AssetPublisher as Z, LocalMigrateError as Zt, formatResourceLine as _, getDockerImageBySourceHash as _t, DeploymentEventsStore as a, ResourceUpdateNotSupportedError as an, BOOTSTRAP_MARKER_PREFIX as at, gray as b, getDefaultStateBucketName as bt, replayFailedOperations as c, StateError as cn, parseBootstrapMarker as ct, IMPLICIT_DELETE_DEPENDENCIES as d, isCdkdError as dn, buildDockerImage as dt, MissingCdkCliError as en, buildAssetRedirectMap as et, computeImplicitDeleteEdges as f, normalizeAwsError as fn, formatDockerLoginError as ft, renderStatefulReason as g, AssetManifestLoader as gt, isStatefulRecreateTargetSync as h, runDockerStreaming as ht, DeploymentEventsReader as i, ResourceTimeoutError as in, AssetModeResolver as it, disableInstanceApiTermination as j, CFN_TEMPLATE_BODY_LIMIT as jt, CloudControlProvider as k, stateBucketExistenceConfirmed as kt, replayRollback as l, SynthesisError as ln, validateAssetBucketName as lt, MULTI_REGION_RECREATE_BLOCKED_TYPES as m, __exportAll as mn, runDockerForeground as mt, DEFAULT_RESOURCE_WARN_AFTER_MS as n, PartialFailureError as nn, loadPublishableAssetManifest as nt, planFailedOps as o, StackHasActiveImportsError as on, ensureAssetStorage as ot, extractDeploymentEventError as p, withErrorHandling as pn, getDockerCmd as pt, LockManager as q, ConfigError as qt, DeployEngine as r, ProvisioningError as rn, rewriteTemplateAssetReferences as rt, planRollback as s, StackTerminationProtectionError as sn, getBootstrapMarkerKey as st, DEFAULT_RESOURCE_TIMEOUT_MS as t, NestedStackChildDirectDestroyError as tn, createAssetRedirectResolver as tt, withResourceDeadline as u, formatError as un, validateContainerRepoName as ut, bold as v, Synthesizer as vt, IAMRoleProvider as w, resolveCaptureObservedState as wt, green as x, getLegacyStateBucketName as xt, cyan as y, synthesisStatusMessage as yt, assertRegionMatch as z, clearBucketRegionCache as zt };
19820
- //# sourceMappingURL=deploy-engine-BVpbuTRu.js.map
19866
+ //# sourceMappingURL=deploy-engine-C44YX-go.js.map