cdk-local 0.74.0 → 0.75.0

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/cli.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { K as createLocalInvokeAgentCoreCommand, f as createLocalStartServiceCommand, gt as createLocalStartApiCommand, h as createLocalRunTaskCommand, mt as createLocalInvokeCommand, n as createLocalListCommand, o as createLocalStartAlbCommand } from "./local-list-Dn0Al276.js";
2
+ import { K as createLocalInvokeAgentCoreCommand, f as createLocalStartServiceCommand, gt as createLocalStartApiCommand, h as createLocalRunTaskCommand, mt as createLocalInvokeCommand, n as createLocalListCommand, o as createLocalStartAlbCommand } from "./local-list-CFINvNxo.js";
3
3
  import { Command } from "commander";
4
4
 
5
5
  //#region src/cli/index.ts
6
6
  const program = new Command();
7
- program.name("cdkl").description("Run AWS CDK stacks locally with Docker.").version("0.74.0");
7
+ program.name("cdkl").description("Run AWS CDK stacks locally with Docker.").version("0.75.0");
8
8
  program.addCommand(createLocalInvokeCommand());
9
9
  program.addCommand(createLocalInvokeAgentCoreCommand());
10
10
  program.addCommand(createLocalStartApiCommand());
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { c as getEmbedConfig, l as resetEmbedConfig, u as setEmbedConfig } from "./docker-cmd-Dqx2YENO.js";
2
- import { An as rejectExplicitCfnStackWithMultipleStacks, Bn as listTargets, Cn as substituteAgainstState, Dn as LocalStateSourceError, En as substituteEnvVarsFromStateAsync, Fn as collectSsmParameterRefs, In as resolveSsmParameters, K as createLocalInvokeAgentCoreCommand, Mn as resolveCfnRegion, Nn as resolveCfnStackName, On as createLocalStateProvider, Pn as CfnLocalStateProvider, Tn as substituteEnvVarsFromState, f as createLocalStartServiceCommand, gt as createLocalStartApiCommand, h as createLocalRunTaskCommand, jn as resolveCfnFallbackRegion, kn as isCfnFlagPresent, mt as createLocalInvokeCommand, n as createLocalListCommand, o as createLocalStartAlbCommand, r as formatTargetListing, wn as substituteAgainstStateAsync, zn as countTargets } from "./local-list-Dn0Al276.js";
2
+ import { An as rejectExplicitCfnStackWithMultipleStacks, Bn as listTargets, Cn as substituteAgainstState, Dn as LocalStateSourceError, En as substituteEnvVarsFromStateAsync, Fn as collectSsmParameterRefs, In as resolveSsmParameters, K as createLocalInvokeAgentCoreCommand, Mn as resolveCfnRegion, Nn as resolveCfnStackName, On as createLocalStateProvider, Pn as CfnLocalStateProvider, Tn as substituteEnvVarsFromState, f as createLocalStartServiceCommand, gt as createLocalStartApiCommand, h as createLocalRunTaskCommand, jn as resolveCfnFallbackRegion, kn as isCfnFlagPresent, mt as createLocalInvokeCommand, n as createLocalListCommand, o as createLocalStartAlbCommand, r as formatTargetListing, wn as substituteAgainstStateAsync, zn as countTargets } from "./local-list-CFINvNxo.js";
3
3
 
4
4
  export { CfnLocalStateProvider, LocalStateSourceError, collectSsmParameterRefs, countTargets, createLocalInvokeAgentCoreCommand, createLocalInvokeCommand, createLocalListCommand, createLocalRunTaskCommand, createLocalStartAlbCommand, createLocalStartApiCommand, createLocalStartServiceCommand, createLocalStateProvider, formatTargetListing, getEmbedConfig, isCfnFlagPresent, listTargets, rejectExplicitCfnStackWithMultipleStacks, resetEmbedConfig, resolveCfnFallbackRegion, resolveCfnRegion, resolveCfnStackName, resolveSsmParameters, setEmbedConfig, substituteAgainstState, substituteAgainstStateAsync, substituteEnvVarsFromState, substituteEnvVarsFromStateAsync };
package/dist/internal.js CHANGED
@@ -1,3 +1,3 @@
1
- import { $ as MCP_PROTOCOL_VERSION, $n as pickAgentCoreCandidateStack, $t as applyAuthorizerOverlay, A as mergeForService, At as startApiServer, B as DEFAULT_SHADOW_READY_TIMEOUT_MS, Bt as buildMethodArn, C as parseRestartPolicy, Ct as materializeLayerFromArn, D as ImageOverrideError, Dt as filterRoutesByApiIdentifiers, E as runEcsServiceEmulator, Et as filterRoutesByApiIdentifier, F as isLocalCdkAssetImage, Ft as buildJwksUrlFromIssuer, G as addInvokeAgentCoreSpecificOptions, Gn as pickRefLogicalId, Gt as attachAuthorizers, H as setShadowReadyTimeoutMs, Hn as discoverWebSocketApisOrThrow, Ht as evaluateCachedLambdaPolicy, I as listPinnedTargets, It as createJwksCache, J as A2A_CONTAINER_PORT, Jn as AGENTCORE_AGUI_PROTOCOL, Jt as buildCorsConfigFromCloudFrontChain, Kn as resolveLambdaArnIntrinsic, Kt as applyCorsResponseHeaders, L as buildCloudMapIndex, Ln as resolveWatchConfig, Lt as verifyCognitoJwt, M as resolveImageOverrides, Mt as resolveServiceIntegrationParameters, N as runImageOverrideBuilds, Nt as defaultCredentialsLoader, O as buildImageOverrideTag, Ot as groupRoutesByServer, P as describePinnedImageUri, Pt as buildCognitoJwksUrl, Q as MCP_PATH, Qn as AgentCoreResolutionError, Qt as translateLambdaResponse, R as CloudMapRegistry, Rn as resolveSingleTarget, Rt as verifyJwtAuthorizer, S as parseMaxTasks, Sn as EcsTaskResolutionError, St as buildStageMap, T as resolveSharedSidecarCredentials, Tt as availableApiIdentifiers, U as getContainerNetworkIp, Un as parseSelectionExpressionPath, Ut as invokeRequestAuthorizer, V as SOFT_RELOAD_COMPLETION_LOG_SUFFIX, Vn as discoverWebSocketApis, Vt as computeRequestIdentityHash, W as attachContainerLogStreamer, Wn as discoverRoutes, Wt as invokeTokenAuthorizer, X as a2aInvokeOnce, Xn as AGENTCORE_MCP_PROTOCOL, Xt as matchPreflight, Y as A2A_PATH, Yn as AGENTCORE_HTTP_PROTOCOL, Yt as isFunctionUrlOacFronted, Z as MCP_CONTAINER_PORT, Zn as AGENTCORE_RUNTIME_TYPE, Zt as matchRoute, _ as addCommonEcsServiceOptions, _n as architectureToPlatform, _t as createWatchPredicates, a as albStrategy, an as tryParseStatus, ar as LocalInvokeBuildError, at as invokeAgentCore, b as buildEcsImageResolutionContext, bn as resolveRuntimeFileExtension, bt as createFileWatcher, c as resolveAlbTarget, cn as probeHostGatewaySupport, ct as SUPPORTED_CODE_RUNTIMES, d as addStartServiceSpecificOptions, dn as buildMgmtEndpointEnvUrl, dt as renderCodeDockerfile, en as buildHttpApiV2Event, er as resolveAgentCoreTarget, et as mcpInvokeOnce, fn as handleConnectionsRequest, ft as toCmdArgv, g as MAX_TASKS_SUBNET_RANGE_CAP, gn as buildMessageEvent, hn as buildDisconnectEvent, ht as addStartApiSpecificOptions, i as addAlbSpecificOptions, in as selectIntegrationResponse, ir as tryResolveImageFnJoin, it as AGENTCORE_SESSION_ID_HEADER, j as parseImageOverrideFlags, jt as resolveSelectionExpression, k as enforceImageOverrideOrphans, kt as readMtlsMaterialsFromDisk, l as isApplicationLoadBalancer, ln as bufferToBody, lt as buildAgentCoreCodeImage, m as addRunTaskSpecificOptions, mn as buildConnectEvent, nn as evaluateResponseParameters, nr as formatStateRemedy, nt as AGENTCORE_SIGV4_SERVICE, on as VtlEvaluationError, or as buildStsClientConfig, ot as waitForAgentCorePing, p as serviceStrategy, pn as parseConnectionsPath, pt as addInvokeSpecificOptions, q as invokeAgentCoreWs, qn as AGENTCORE_A2A_PROTOCOL, qt as buildCorsConfigByApiId, rn as pickResponseTemplate, rr as substituteImagePlaceholders, rt as signAgentCoreInvocation, s as parseLbPortOverrides, sn as HOST_GATEWAY_MIN_VERSION, sr as resolveProfileCredentials, st as downloadAndExtractS3Bundle, t as addListSpecificOptions, tn as buildRestV1Event, tr as derivePseudoParametersFromRegion, tt as parseSseForJsonRpc, u as resolveAlbFrontDoor, un as ConnectionRegistry, ut as computeCodeImageTag, v as addEcsAssumeRoleOptions, vn as buildContainerImage, vt as resolveApiTargetSubset, w as resolveEcsAssumeRoleOption, wt as resolveEnvVars, x as ecsClusterOption, xn as resolveRuntimeImage, xt as attachStageContext, y as addImageOverrideOptions, yn as resolveRuntimeCodeMountPath, yt as createAuthorizerCache, z as classifySourceChange, zt as verifyJwtViaDiscovery } from "./local-list-Dn0Al276.js";
1
+ import { $ as MCP_PROTOCOL_VERSION, $n as pickAgentCoreCandidateStack, $t as applyAuthorizerOverlay, A as mergeForService, At as startApiServer, B as DEFAULT_SHADOW_READY_TIMEOUT_MS, Bt as buildMethodArn, C as parseRestartPolicy, Ct as materializeLayerFromArn, D as ImageOverrideError, Dt as filterRoutesByApiIdentifiers, E as runEcsServiceEmulator, Et as filterRoutesByApiIdentifier, F as isLocalCdkAssetImage, Ft as buildJwksUrlFromIssuer, G as addInvokeAgentCoreSpecificOptions, Gn as pickRefLogicalId, Gt as attachAuthorizers, H as setShadowReadyTimeoutMs, Hn as discoverWebSocketApisOrThrow, Ht as evaluateCachedLambdaPolicy, I as listPinnedTargets, It as createJwksCache, J as A2A_CONTAINER_PORT, Jn as AGENTCORE_AGUI_PROTOCOL, Jt as buildCorsConfigFromCloudFrontChain, Kn as resolveLambdaArnIntrinsic, Kt as applyCorsResponseHeaders, L as buildCloudMapIndex, Ln as resolveWatchConfig, Lt as verifyCognitoJwt, M as resolveImageOverrides, Mt as resolveServiceIntegrationParameters, N as runImageOverrideBuilds, Nt as defaultCredentialsLoader, O as buildImageOverrideTag, Ot as groupRoutesByServer, P as describePinnedImageUri, Pt as buildCognitoJwksUrl, Q as MCP_PATH, Qn as AgentCoreResolutionError, Qt as translateLambdaResponse, R as CloudMapRegistry, Rn as resolveSingleTarget, Rt as verifyJwtAuthorizer, S as parseMaxTasks, Sn as EcsTaskResolutionError, St as buildStageMap, T as resolveSharedSidecarCredentials, Tt as availableApiIdentifiers, U as getContainerNetworkIp, Un as parseSelectionExpressionPath, Ut as invokeRequestAuthorizer, V as SOFT_RELOAD_COMPLETION_LOG_SUFFIX, Vn as discoverWebSocketApis, Vt as computeRequestIdentityHash, W as attachContainerLogStreamer, Wn as discoverRoutes, Wt as invokeTokenAuthorizer, X as a2aInvokeOnce, Xn as AGENTCORE_MCP_PROTOCOL, Xt as matchPreflight, Y as A2A_PATH, Yn as AGENTCORE_HTTP_PROTOCOL, Yt as isFunctionUrlOacFronted, Z as MCP_CONTAINER_PORT, Zn as AGENTCORE_RUNTIME_TYPE, Zt as matchRoute, _ as addCommonEcsServiceOptions, _n as architectureToPlatform, _t as createWatchPredicates, a as albStrategy, an as tryParseStatus, ar as LocalInvokeBuildError, at as invokeAgentCore, b as buildEcsImageResolutionContext, bn as resolveRuntimeFileExtension, bt as createFileWatcher, c as resolveAlbTarget, cn as probeHostGatewaySupport, ct as SUPPORTED_CODE_RUNTIMES, d as addStartServiceSpecificOptions, dn as buildMgmtEndpointEnvUrl, dt as renderCodeDockerfile, en as buildHttpApiV2Event, er as resolveAgentCoreTarget, et as mcpInvokeOnce, fn as handleConnectionsRequest, ft as toCmdArgv, g as MAX_TASKS_SUBNET_RANGE_CAP, gn as buildMessageEvent, hn as buildDisconnectEvent, ht as addStartApiSpecificOptions, i as addAlbSpecificOptions, in as selectIntegrationResponse, ir as tryResolveImageFnJoin, it as AGENTCORE_SESSION_ID_HEADER, j as parseImageOverrideFlags, jt as resolveSelectionExpression, k as enforceImageOverrideOrphans, kt as readMtlsMaterialsFromDisk, l as isApplicationLoadBalancer, ln as bufferToBody, lt as buildAgentCoreCodeImage, m as addRunTaskSpecificOptions, mn as buildConnectEvent, nn as evaluateResponseParameters, nr as formatStateRemedy, nt as AGENTCORE_SIGV4_SERVICE, on as VtlEvaluationError, or as buildStsClientConfig, ot as waitForAgentCorePing, p as serviceStrategy, pn as parseConnectionsPath, pt as addInvokeSpecificOptions, q as invokeAgentCoreWs, qn as AGENTCORE_A2A_PROTOCOL, qt as buildCorsConfigByApiId, rn as pickResponseTemplate, rr as substituteImagePlaceholders, rt as signAgentCoreInvocation, s as parseLbPortOverrides, sn as HOST_GATEWAY_MIN_VERSION, sr as resolveProfileCredentials, st as downloadAndExtractS3Bundle, t as addListSpecificOptions, tn as buildRestV1Event, tr as derivePseudoParametersFromRegion, tt as parseSseForJsonRpc, u as resolveAlbFrontDoor, un as ConnectionRegistry, ut as computeCodeImageTag, v as addEcsAssumeRoleOptions, vn as buildContainerImage, vt as resolveApiTargetSubset, w as resolveEcsAssumeRoleOption, wt as resolveEnvVars, x as ecsClusterOption, xn as resolveRuntimeImage, xt as attachStageContext, y as addImageOverrideOptions, yn as resolveRuntimeCodeMountPath, yt as createAuthorizerCache, z as classifySourceChange, zt as verifyJwtViaDiscovery } from "./local-list-CFINvNxo.js";
2
2
 
3
3
  export { A2A_CONTAINER_PORT, A2A_PATH, AGENTCORE_A2A_PROTOCOL, AGENTCORE_AGUI_PROTOCOL, AGENTCORE_HTTP_PROTOCOL, AGENTCORE_MCP_PROTOCOL, AGENTCORE_RUNTIME_TYPE, AGENTCORE_SESSION_ID_HEADER, AGENTCORE_SIGV4_SERVICE, AgentCoreResolutionError, CloudMapRegistry, ConnectionRegistry, DEFAULT_SHADOW_READY_TIMEOUT_MS, EcsTaskResolutionError, HOST_GATEWAY_MIN_VERSION, ImageOverrideError, LocalInvokeBuildError, MAX_TASKS_SUBNET_RANGE_CAP, MCP_CONTAINER_PORT, MCP_PATH, MCP_PROTOCOL_VERSION, SOFT_RELOAD_COMPLETION_LOG_SUFFIX, SUPPORTED_CODE_RUNTIMES, VtlEvaluationError, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addEcsAssumeRoleOptions, addImageOverrideOptions, addInvokeAgentCoreSpecificOptions, addInvokeSpecificOptions, addListSpecificOptions, addRunTaskSpecificOptions, addStartApiSpecificOptions, addStartServiceSpecificOptions, albStrategy, applyAuthorizerOverlay, applyCorsResponseHeaders, architectureToPlatform, attachAuthorizers, attachContainerLogStreamer, attachStageContext, availableApiIdentifiers, bufferToBody, buildAgentCoreCodeImage, buildCloudMapIndex, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildEcsImageResolutionContext, buildHttpApiV2Event, buildImageOverrideTag, buildJwksUrlFromIssuer, buildMessageEvent, buildMethodArn, buildMgmtEndpointEnvUrl, buildRestV1Event, buildStageMap, buildStsClientConfig, classifySourceChange, computeCodeImageTag, computeRequestIdentityHash, createAuthorizerCache, createFileWatcher, createJwksCache, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, describePinnedImageUri, discoverRoutes, discoverWebSocketApis, discoverWebSocketApisOrThrow, downloadAndExtractS3Bundle, ecsClusterOption, enforceImageOverrideOrphans, evaluateCachedLambdaPolicy, evaluateResponseParameters, filterRoutesByApiIdentifier, filterRoutesByApiIdentifiers, formatStateRemedy, getContainerNetworkIp, groupRoutesByServer, handleConnectionsRequest, invokeAgentCore, invokeAgentCoreWs, invokeRequestAuthorizer, invokeTokenAuthorizer, isApplicationLoadBalancer, isFunctionUrlOacFronted, isLocalCdkAssetImage, listPinnedTargets, matchPreflight, matchRoute, materializeLayerFromArn, mcpInvokeOnce, mergeForService, parseConnectionsPath, parseImageOverrideFlags, parseLbPortOverrides, parseMaxTasks, parseRestartPolicy, parseSelectionExpressionPath, parseSseForJsonRpc, pickAgentCoreCandidateStack, pickRefLogicalId, pickResponseTemplate, probeHostGatewaySupport, readMtlsMaterialsFromDisk, renderCodeDockerfile, resolveAgentCoreTarget, resolveAlbFrontDoor, resolveAlbTarget, resolveApiTargetSubset, resolveEcsAssumeRoleOption, resolveEnvVars, resolveImageOverrides, resolveLambdaArnIntrinsic, resolveProfileCredentials, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSelectionExpression, resolveServiceIntegrationParameters, resolveSharedSidecarCredentials, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, runImageOverrideBuilds, selectIntegrationResponse, serviceStrategy, setShadowReadyTimeoutMs, signAgentCoreInvocation, startApiServer, substituteImagePlaceholders, toCmdArgv, translateLambdaResponse, tryParseStatus, tryResolveImageFnJoin, verifyCognitoJwt, verifyJwtAuthorizer, verifyJwtViaDiscovery, waitForAgentCorePing };
@@ -113,6 +113,35 @@ function parseAssumeRoleToken(raw, previous) {
113
113
  return acc;
114
114
  }
115
115
  /**
116
+ * Compose `--assume-role` (value-form accumulator) and the separate
117
+ * `--assume-role-auto` boolean flag into the in-process
118
+ * representation `localStartApiCommand` consumes downstream.
119
+ *
120
+ * - both unset -> `undefined` (pass dev creds through)
121
+ * - only `--assume-role-auto` -> `{ perLambda: {}, bareAutoResolve: true }`
122
+ * (per-Lambda auto-resolve for every routed Lambda)
123
+ * - only `--assume-role` -> the value-form accumulator (global ARN
124
+ * and/or per-Lambda map) as-is
125
+ * - both -> accumulator with `bareAutoResolve = true` overlaid;
126
+ * the per-Lambda map still wins for named Lambdas, auto-resolve
127
+ * fills in for every Lambda the map does NOT name
128
+ *
129
+ * Enforces the mutual-exclusion guard: `--assume-role-auto` and a
130
+ * global ARN (`--assume-role <arn>`) both occupy the "default for
131
+ * every other Lambda" slot, so the combination is ambiguous and
132
+ * rejected at boot with a clear error. The per-Lambda map IS
133
+ * compatible with either side.
134
+ */
135
+ function normalizeStartApiAssumeRole(raw, autoResolve) {
136
+ if (raw === void 0) return autoResolve ? {
137
+ perLambda: {},
138
+ bareAutoResolve: true
139
+ } : void 0;
140
+ if (autoResolve && raw.globalArn) throw new Error(`--assume-role-auto auto-resolves EACH routed Lambda's own execution role, but --assume-role ${raw.globalArn} also names a single global default. These are mutually exclusive on the global slot. Either drop the global ARN to keep --assume-role-auto for every Lambda, or drop --assume-role-auto to keep the global default. Per-Lambda overrides (--assume-role <LogicalId>=<arn>) are compatible with either side.`);
141
+ if (autoResolve) raw.bareAutoResolve = true;
142
+ return raw;
143
+ }
144
+ /**
116
145
  * Resolve the effective IAM role ARN for a given Lambda. Per-Lambda
117
146
  * override wins; otherwise the global default; otherwise `undefined`
118
147
  * (no role to assume — pass developer creds through).
@@ -15265,6 +15294,9 @@ async function localStartApiCommand(targets, options, extraStateProviders) {
15265
15294
  const interactivePicked = { value: false };
15266
15295
  const allStacksConflictList = allStacksConflicts(options, targets, apiFilters);
15267
15296
  if (allStacksConflictList.length > 0) throw new Error(`--all-stacks serves every stack's API and cannot be combined with a target subset selector (${allStacksConflictList.join(", ")}). Drop --all-stacks to target specific APIs, or drop the selector to serve them all. The bare --from-cfn-stack flag (no value) IS compatible with --all-stacks.`);
15297
+ const normalizedAssumeRole = normalizeStartApiAssumeRole(options.assumeRole, options.assumeRoleAuto ?? false);
15298
+ if (normalizedAssumeRole === void 0) delete options.assumeRole;
15299
+ else options.assumeRole = normalizedAssumeRole;
15268
15300
  await applyRoleArnIfSet({
15269
15301
  roleArn: options.roleArn,
15270
15302
  region: options.region,
@@ -15376,7 +15408,7 @@ async function localStartApiCommand(targets, options, extraStateProviders) {
15376
15408
  logicalId,
15377
15409
  stacks: targetStacks,
15378
15410
  overrides,
15379
- assumeRole: options.assumeRole,
15411
+ assumeRole: normalizedAssumeRole,
15380
15412
  containerHost: options.containerHost,
15381
15413
  ...debugPortBase !== void 0 && { debugPort: debugPortBase + i },
15382
15414
  stsRegion: options.region ?? process.env["AWS_REGION"] ?? process.env["AWS_DEFAULT_REGION"],
@@ -16041,6 +16073,59 @@ function warnIamRoutes(routesWithAuth) {
16041
16073
  return true;
16042
16074
  }
16043
16075
  /**
16076
+ * Resolve the effective IAM role ARN to assume for a single routed
16077
+ * Lambda, honoring the four `--assume-role` forms of issue #256
16078
+ * Option 1 (non-breaking step):
16079
+ *
16080
+ * - per-Lambda override (`<LogicalId>=<arn>`) — wins over every other
16081
+ * form for the named Lambda.
16082
+ * - global default (bare ARN) — used when the per-Lambda map misses.
16083
+ * - bare-auto-resolve (`--assume-role` with no value) — when neither
16084
+ * the per-Lambda map nor a global default applies, resolves THIS
16085
+ * Lambda's own `Role` (its `AWS::Lambda::Function`'s `Role`
16086
+ * property -> role ARN). Resolution sources, in order:
16087
+ * 1. literal-ARN form of `Properties.Role` in the SYNTHESIZED
16088
+ * template (rare in CDK output but possible);
16089
+ * 2. deployed state (`stateBundle.state.resources`) when
16090
+ * `--from-cfn-stack` (or a host-provided extension) is
16091
+ * active, via the same shared helper
16092
+ * `resolveExecutionRoleArnFromState` `cdkl invoke`'s bare-
16093
+ * form uses.
16094
+ * - flag absent / `--no-assume-role-auto` — returns `undefined`
16095
+ * (per-Lambda map and global default already filtered out by the
16096
+ * null-check at the top; bare-auto-resolve = false short-circuits
16097
+ * before the state lookup).
16098
+ *
16099
+ * The shape-level mutual exclusion (bare-auto-resolve + global ARN
16100
+ * together) is caught at boot by
16101
+ * {@link normalizeStartApiAssumeRole}; this resolver only sees a
16102
+ * well-formed `AssumeRoleOption`.
16103
+ *
16104
+ * Bare-auto-resolve misses (no literal-ARN, no state, state did not
16105
+ * carry the role attribute) warn-and-fall-through to the
16106
+ * dev-creds-passed-through branch — same trade-off `cdkl invoke
16107
+ * --assume-role` makes when bare auto-resolve cannot find an ARN.
16108
+ *
16109
+ * Exported for unit testing.
16110
+ */
16111
+ function resolveStartApiAssumeRoleArn(args) {
16112
+ const { logicalId, assumeRole, lambdaResource, stateBundle } = args;
16113
+ if (!assumeRole) return void 0;
16114
+ const explicit = effectiveAssumeRoleArn(logicalId, assumeRole);
16115
+ if (explicit) return explicit;
16116
+ if (!assumeRole.bareAutoResolve) return void 0;
16117
+ const roleProp = (lambdaResource.Properties ?? {})["Role"];
16118
+ if (typeof roleProp === "string" && roleProp.startsWith("arn:")) return roleProp;
16119
+ if (stateBundle) {
16120
+ const fromState = resolveExecutionRoleArnFromState(stateBundle.state, logicalId);
16121
+ if (fromState) {
16122
+ getLogger().info(`--assume-role: auto-resolved execution role for '${logicalId}' from state: ${fromState}`);
16123
+ return fromState;
16124
+ }
16125
+ }
16126
+ getLogger().warn(`--assume-role: could not auto-resolve the execution role ARN for '${logicalId}'. Pair --assume-role with --from-cfn-stack (or a host-provided state-source extension) so the deployed Role's ARN can be looked up, OR pin the ARN explicitly with --assume-role ${logicalId}=<arn>. Falling back to the developer's shell credentials for this Lambda.`);
16127
+ }
16128
+ /**
16044
16129
  * Build the per-Lambda container spec — code dir, env vars (template +
16045
16130
  * --env-vars overlay), STS-issued creds when --assume-role names this
16046
16131
  * Lambda, optional --debug-port reservation. Errors out with a clear
@@ -16111,7 +16196,12 @@ async function buildContainerSpec(args) {
16111
16196
  AWS_LAMBDA_LOG_STREAM_NAME: "local",
16112
16197
  ...envResult.resolved
16113
16198
  };
16114
- const roleArn = effectiveAssumeRoleArn(logicalId, assumeRole);
16199
+ const roleArn = resolveStartApiAssumeRoleArn({
16200
+ logicalId,
16201
+ assumeRole,
16202
+ lambdaResource: lambda.resource,
16203
+ stateBundle
16204
+ });
16115
16205
  if (roleArn) {
16116
16206
  const creds = await assumeLambdaExecutionRole$1(roleArn, stsRegion, profile);
16117
16207
  dockerEnv["AWS_ACCESS_KEY_ID"] = creds.accessKeyId;
@@ -16944,7 +17034,7 @@ function createLocalStartApiCommand(opts = {}) {
16944
17034
  * `--help` clusters. Chainable: returns `cmd`.
16945
17035
  */
16946
17036
  function addStartApiSpecificOptions(cmd) {
16947
- return cmd.addOption(new Option("--port <port>", "HTTP server port (default: auto-allocate)").default("0")).addOption(new Option("--host <host>", "Bind address").default("127.0.0.1")).addOption(new Option("--stack <name>", "Stack to start (single-stack apps auto-detect)")).addOption(new Option("--all-stacks", "Serve every stack's API in a multi-stack app (each API on its own port) instead of erroring out. Mutually exclusive with a positional target subset, --stack, and an explicit --from-cfn-stack <name>; the bare --from-cfn-stack flag stays compatible (binds each routed stack to its own CFn stack).").default(false)).addOption(new Option("--warm", "Pre-start one container per Lambda at server boot").default(false)).addOption(new Option("--per-lambda-concurrency <n>", "Pool size cap per Lambda (default 2, max 4)").default("2")).addOption(new Option("--no-pull", "Skip docker pull (cached image)")).addOption(new Option("--no-build", "Skip docker build on every container Lambda local-asset build (use the previously-built tag). Requires the deterministic tag to already be in the local registry; errors with an actionable message when missing. No-op for ZIP Lambdas and the IMAGE ECR-pull path. Compatible with --no-pull.")).addOption(new Option("--container-host <host>", "IP the host uses to bind/probe the RIE port (must be a numeric IP — `docker run -p <ip>:<port>:8080` rejects hostnames). Defaults to 127.0.0.1.").default("127.0.0.1")).addOption(new Option("--debug-port-base <port>", "Reserve a contiguous --debug-port range (one per Lambda)")).addOption(new Option("--debug-port <port>", "Alias of --debug-port-base for parity with `cdkl invoke --debug-port`. Reserves a contiguous --debug-port range (one per Lambda) starting at <port>.")).addOption(new Option("--ecr-role-arn <arn>", "Role ARN to assume before authenticating against ECR for cross-account / centralized registries on the container-Lambda ECR-pull fallback. Issues sts:AssumeRole via the default credential chain and uses the temporary credentials for ecr:GetAuthorizationToken + docker pull. Required when the caller does not have direct cross-account access to the target repository. Same-account / same-region pulls do not need this flag.")).addOption(new Option("--env-vars <file>", "JSON env-var overrides (SAM-compatible: {\"LogicalId\":{\"KEY\":\"VALUE\"}, \"Parameters\": {...}})")).addOption(new Option("--assume-role <arn-or-pair>", "Assume the Lambda's execution role and forward STS-issued temp creds. Bare <arn> = global default; <LogicalId>=<arn> = per-Lambda override (repeatable). Per-Lambda > global > unset (developer creds passed through).").argParser((raw, prev) => parseAssumeRoleToken(raw, prev))).addOption(new Option("--watch", "Hot-reload: re-synth + re-discover routes when the CDK app's source changes (honors cdk.json watch.include/exclude; cdk.out, node_modules, .git are always excluded). Off by default; the server keeps the previous version serving when synth fails mid-reload.").default(false)).addOption(new Option("--stage <name>", "Select an API Gateway Stage by its 'StageName'. Default: the first Stage attached to each API. Drives event.stageVariables for both REST v1 and HTTP API v2. NOTE: For HTTP API v2 routes, requestContext.stage is always '$default' regardless of this flag (AWS-side limitation — HTTP API only exposes one stage to the integration event); only event.stageVariables is affected for v2 routes. For REST v1 routes the selected StageName is also threaded into requestContext.stage.")).addOption(new Option("--api <id>", "DEPRECATED — use the positional <targets...> argument instead. Accepts a SINGLE identifier; for a subset pass multiple positional targets. Same accepted forms (bare logical id, stack-qualified, Construct path, ancestor prefix). Will be removed in a future major release.")).addOption(new Option("--layer-role-arn <arn>", "Role to sts:AssumeRole before calling lambda:GetLayerVersion on every literal-ARN entry in Properties.Layers (issue #448). Use only when the dev credentials cannot read the layer — typically cross-account layers. AWS-published public layers (e.g. Lambda Powertools) are readable from every account and need no role.")).addOption(new Option("--from-cfn-stack [cfn-stack-name]", "Read a deployed CloudFormation stack via ListStackResources and substitute Ref / Fn::ImportValue in Lambda env vars with the deployed physical IDs / exports. Use for CDK apps deployed via the upstream CDK CLI (`cdk deploy`). Bare form uses the resolved stack name per routed stack; pass an explicit value when a single CFn stack should serve every routed stack. Fn::GetAtt is warn-and-dropped in v1 (CFn ListStackResources does not return per-attribute values).")).addOption(new Option("--stack-region <region>", "Region of the state record to read. Used with --from-cfn-stack as the CFn client region.")).addOption(new Option("--mtls-truststore <path>", `PEM-encoded CA bundle for client-certificate verification (mutual TLS). When set, the local server switches from HTTP to HTTPS and the TLS handshake rejects clients whose certificate doesn't chain to one of these CAs. Verified certs are surfaced on the Lambda event under requestContext.identity.clientCert (REST v1) / requestContext.authentication.clientCert (HTTP API v2). Must be set together with --mtls-cert + --mtls-key; partial flag sets are rejected. Generate a CA + server + client cert for local dev: openssl req -x509 -newkey rsa:2048 -nodes -keyout ca-key.pem -out ca.pem -subj "/CN=${getEmbedConfig().resourceNamePrefix}-ca" -days 365; openssl req -newkey rsa:2048 -nodes -keyout server-key.pem -out server-csr.pem -subj "/CN=localhost"; openssl x509 -req -in server-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 365; openssl req -newkey rsa:2048 -nodes -keyout client-key.pem -out client-csr.pem -subj "/CN=client"; openssl x509 -req -in client-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 365; curl --cacert ca.pem --cert client-cert.pem --key client-key.pem https://localhost:<port>/...`)).addOption(new Option("--mtls-cert <path>", "PEM-encoded server certificate for mutual TLS. Self-signed is fine for local dev. Must be set together with --mtls-truststore + --mtls-key.")).addOption(new Option("--mtls-key <path>", "PEM-encoded server private key matching --mtls-cert. Must be set together with --mtls-truststore + --mtls-cert.")).addOption(new Option("--strict-sigv4", "Opt-in: DENY AWS_IAM SigV4 requests that cannot be cryptographically verified (foreign access-key-id — e.g. a federated / Cognito Identity Pool / cross-account signer — OR no local AWS credentials configured) instead of the default warn-and-pass. DEFAULT off: cdk-local warn-and-passes unverifiable IAM requests with a placeholder principalId so local dev exercises app logic without reproducing an auth boundary it cannot fully emulate. OAC-fronted Function URLs always warn-and-pass regardless.").default(false));
17037
+ return cmd.addOption(new Option("--port <port>", "HTTP server port (default: auto-allocate)").default("0")).addOption(new Option("--host <host>", "Bind address").default("127.0.0.1")).addOption(new Option("--stack <name>", "Stack to start (single-stack apps auto-detect)")).addOption(new Option("--all-stacks", "Serve every stack's API in a multi-stack app (each API on its own port) instead of erroring out. Mutually exclusive with a positional target subset, --stack, and an explicit --from-cfn-stack <name>; the bare --from-cfn-stack flag stays compatible (binds each routed stack to its own CFn stack).").default(false)).addOption(new Option("--warm", "Pre-start one container per Lambda at server boot").default(false)).addOption(new Option("--per-lambda-concurrency <n>", "Pool size cap per Lambda (default 2, max 4)").default("2")).addOption(new Option("--no-pull", "Skip docker pull (cached image)")).addOption(new Option("--no-build", "Skip docker build on every container Lambda local-asset build (use the previously-built tag). Requires the deterministic tag to already be in the local registry; errors with an actionable message when missing. No-op for ZIP Lambdas and the IMAGE ECR-pull path. Compatible with --no-pull.")).addOption(new Option("--container-host <host>", "IP the host uses to bind/probe the RIE port (must be a numeric IP — `docker run -p <ip>:<port>:8080` rejects hostnames). Defaults to 127.0.0.1.").default("127.0.0.1")).addOption(new Option("--debug-port-base <port>", "Reserve a contiguous --debug-port range (one per Lambda)")).addOption(new Option("--debug-port <port>", "Alias of --debug-port-base for parity with `cdkl invoke --debug-port`. Reserves a contiguous --debug-port range (one per Lambda) starting at <port>.")).addOption(new Option("--ecr-role-arn <arn>", "Role ARN to assume before authenticating against ECR for cross-account / centralized registries on the container-Lambda ECR-pull fallback. Issues sts:AssumeRole via the default credential chain and uses the temporary credentials for ecr:GetAuthorizationToken + docker pull. Required when the caller does not have direct cross-account access to the target repository. Same-account / same-region pulls do not need this flag.")).addOption(new Option("--env-vars <file>", "JSON env-var overrides (SAM-compatible: {\"LogicalId\":{\"KEY\":\"VALUE\"}, \"Parameters\": {...}})")).addOption(new Option("--assume-role <arn-or-pair>", "Assume the Lambda's execution role and forward STS-issued temp creds. Two forms: (1) `--assume-role <arn>` sets a single global default ARN used for every routed Lambda; (2) `--assume-role <LogicalId>=<arn>` (repeatable) is a per-Lambda override (wins over the global default and over --assume-role-auto for the named Lambda). Pair with --assume-role-auto to auto-resolve every other Lambda. Precedence: per-Lambda > (--assume-role-auto OR global default) > unset (developer creds passed through).").argParser((raw, prev) => parseAssumeRoleToken(raw, prev))).addOption(new Option("--assume-role-auto", "Auto-resolve EACH routed Lambda's own execution role per-Lambda (literal ARN / Fn::GetAtt against template / --from-cfn-stack state). Slower boot — one STS call per Lambda — but the right shape when each Lambda's deployed role differs. Mutually exclusive with `--assume-role <arn>` (global default); errors at boot. Compatible with `--assume-role <LogicalId>=<arn>` per-Lambda overrides — the map wins for named Lambdas, auto-resolve handles the rest.").default(false)).addOption(new Option("--watch", "Hot-reload: re-synth + re-discover routes when the CDK app's source changes (honors cdk.json watch.include/exclude; cdk.out, node_modules, .git are always excluded). Off by default; the server keeps the previous version serving when synth fails mid-reload.").default(false)).addOption(new Option("--stage <name>", "Select an API Gateway Stage by its 'StageName'. Default: the first Stage attached to each API. Drives event.stageVariables for both REST v1 and HTTP API v2. NOTE: For HTTP API v2 routes, requestContext.stage is always '$default' regardless of this flag (AWS-side limitation — HTTP API only exposes one stage to the integration event); only event.stageVariables is affected for v2 routes. For REST v1 routes the selected StageName is also threaded into requestContext.stage.")).addOption(new Option("--api <id>", "DEPRECATED — use the positional <targets...> argument instead. Accepts a SINGLE identifier; for a subset pass multiple positional targets. Same accepted forms (bare logical id, stack-qualified, Construct path, ancestor prefix). Will be removed in a future major release.")).addOption(new Option("--layer-role-arn <arn>", "Role to sts:AssumeRole before calling lambda:GetLayerVersion on every literal-ARN entry in Properties.Layers (issue #448). Use only when the dev credentials cannot read the layer — typically cross-account layers. AWS-published public layers (e.g. Lambda Powertools) are readable from every account and need no role.")).addOption(new Option("--from-cfn-stack [cfn-stack-name]", "Read a deployed CloudFormation stack via ListStackResources and substitute Ref / Fn::ImportValue in Lambda env vars with the deployed physical IDs / exports. Use for CDK apps deployed via the upstream CDK CLI (`cdk deploy`). Bare form uses the resolved stack name per routed stack; pass an explicit value when a single CFn stack should serve every routed stack. Fn::GetAtt is warn-and-dropped in v1 (CFn ListStackResources does not return per-attribute values).")).addOption(new Option("--stack-region <region>", "Region of the state record to read. Used with --from-cfn-stack as the CFn client region.")).addOption(new Option("--mtls-truststore <path>", `PEM-encoded CA bundle for client-certificate verification (mutual TLS). When set, the local server switches from HTTP to HTTPS and the TLS handshake rejects clients whose certificate doesn't chain to one of these CAs. Verified certs are surfaced on the Lambda event under requestContext.identity.clientCert (REST v1) / requestContext.authentication.clientCert (HTTP API v2). Must be set together with --mtls-cert + --mtls-key; partial flag sets are rejected. Generate a CA + server + client cert for local dev: openssl req -x509 -newkey rsa:2048 -nodes -keyout ca-key.pem -out ca.pem -subj "/CN=${getEmbedConfig().resourceNamePrefix}-ca" -days 365; openssl req -newkey rsa:2048 -nodes -keyout server-key.pem -out server-csr.pem -subj "/CN=localhost"; openssl x509 -req -in server-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -days 365; openssl req -newkey rsa:2048 -nodes -keyout client-key.pem -out client-csr.pem -subj "/CN=client"; openssl x509 -req -in client-csr.pem -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -days 365; curl --cacert ca.pem --cert client-cert.pem --key client-key.pem https://localhost:<port>/...`)).addOption(new Option("--mtls-cert <path>", "PEM-encoded server certificate for mutual TLS. Self-signed is fine for local dev. Must be set together with --mtls-truststore + --mtls-key.")).addOption(new Option("--mtls-key <path>", "PEM-encoded server private key matching --mtls-cert. Must be set together with --mtls-truststore + --mtls-cert.")).addOption(new Option("--strict-sigv4", "Opt-in: DENY AWS_IAM SigV4 requests that cannot be cryptographically verified (foreign access-key-id — e.g. a federated / Cognito Identity Pool / cross-account signer — OR no local AWS credentials configured) instead of the default warn-and-pass. DEFAULT off: cdk-local warn-and-passes unverifiable IAM requests with a placeholder principalId so local dev exercises app logic without reproducing an auth boundary it cannot fully emulate. OAC-fronted Function URLs always warn-and-pass regardless.").default(false));
16948
17038
  }
16949
17039
 
16950
17040
  //#endregion
@@ -27350,4 +27440,4 @@ function addListSpecificOptions(cmd) {
27350
27440
 
27351
27441
  //#endregion
27352
27442
  export { MCP_PROTOCOL_VERSION as $, pickAgentCoreCandidateStack as $n, applyAuthorizerOverlay as $t, mergeForService as A, rejectExplicitCfnStackWithMultipleStacks as An, startApiServer as At, DEFAULT_SHADOW_READY_TIMEOUT_MS as B, listTargets as Bn, buildMethodArn as Bt, parseRestartPolicy as C, substituteAgainstState as Cn, materializeLayerFromArn as Ct, ImageOverrideError as D, LocalStateSourceError as Dn, filterRoutesByApiIdentifiers as Dt, runEcsServiceEmulator as E, substituteEnvVarsFromStateAsync as En, filterRoutesByApiIdentifier as Et, isLocalCdkAssetImage as F, collectSsmParameterRefs as Fn, buildJwksUrlFromIssuer as Ft, addInvokeAgentCoreSpecificOptions as G, pickRefLogicalId as Gn, attachAuthorizers as Gt, setShadowReadyTimeoutMs as H, discoverWebSocketApisOrThrow as Hn, evaluateCachedLambdaPolicy as Ht, listPinnedTargets as I, resolveSsmParameters as In, createJwksCache as It, A2A_CONTAINER_PORT as J, AGENTCORE_AGUI_PROTOCOL as Jn, buildCorsConfigFromCloudFrontChain as Jt, createLocalInvokeAgentCoreCommand as K, resolveLambdaArnIntrinsic as Kn, applyCorsResponseHeaders as Kt, buildCloudMapIndex as L, resolveWatchConfig as Ln, verifyCognitoJwt as Lt, resolveImageOverrides as M, resolveCfnRegion as Mn, resolveServiceIntegrationParameters as Mt, runImageOverrideBuilds as N, resolveCfnStackName as Nn, defaultCredentialsLoader as Nt, buildImageOverrideTag as O, createLocalStateProvider as On, groupRoutesByServer as Ot, describePinnedImageUri as P, CfnLocalStateProvider as Pn, buildCognitoJwksUrl as Pt, MCP_PATH as Q, AgentCoreResolutionError as Qn, translateLambdaResponse as Qt, CloudMapRegistry as R, resolveSingleTarget as Rn, verifyJwtAuthorizer as Rt, parseMaxTasks as S, EcsTaskResolutionError as Sn, buildStageMap as St, resolveSharedSidecarCredentials as T, substituteEnvVarsFromState as Tn, availableApiIdentifiers as Tt, getContainerNetworkIp as U, parseSelectionExpressionPath as Un, invokeRequestAuthorizer as Ut, SOFT_RELOAD_COMPLETION_LOG_SUFFIX as V, discoverWebSocketApis as Vn, computeRequestIdentityHash as Vt, attachContainerLogStreamer as W, discoverRoutes as Wn, invokeTokenAuthorizer as Wt, a2aInvokeOnce as X, AGENTCORE_MCP_PROTOCOL as Xn, matchPreflight as Xt, A2A_PATH as Y, AGENTCORE_HTTP_PROTOCOL as Yn, isFunctionUrlOacFronted as Yt, MCP_CONTAINER_PORT as Z, AGENTCORE_RUNTIME_TYPE as Zn, matchRoute as Zt, addCommonEcsServiceOptions as _, architectureToPlatform as _n, createWatchPredicates as _t, albStrategy as a, tryParseStatus as an, LocalInvokeBuildError as ar, invokeAgentCore as at, buildEcsImageResolutionContext$1 as b, resolveRuntimeFileExtension as bn, createFileWatcher as bt, resolveAlbTarget as c, probeHostGatewaySupport as cn, SUPPORTED_CODE_RUNTIMES as ct, addStartServiceSpecificOptions as d, buildMgmtEndpointEnvUrl as dn, renderCodeDockerfile as dt, buildHttpApiV2Event as en, resolveAgentCoreTarget as er, mcpInvokeOnce as et, createLocalStartServiceCommand as f, handleConnectionsRequest as fn, toCmdArgv as ft, MAX_TASKS_SUBNET_RANGE_CAP as g, buildMessageEvent as gn, createLocalStartApiCommand as gt, createLocalRunTaskCommand as h, buildDisconnectEvent as hn, addStartApiSpecificOptions as ht, addAlbSpecificOptions as i, selectIntegrationResponse as in, tryResolveImageFnJoin as ir, AGENTCORE_SESSION_ID_HEADER as it, parseImageOverrideFlags as j, resolveCfnFallbackRegion as jn, resolveSelectionExpression as jt, enforceImageOverrideOrphans as k, isCfnFlagPresent as kn, readMtlsMaterialsFromDisk as kt, isApplicationLoadBalancer as l, bufferToBody as ln, buildAgentCoreCodeImage as lt, addRunTaskSpecificOptions as m, buildConnectEvent as mn, createLocalInvokeCommand as mt, createLocalListCommand as n, evaluateResponseParameters as nn, formatStateRemedy as nr, AGENTCORE_SIGV4_SERVICE as nt, createLocalStartAlbCommand as o, VtlEvaluationError as on, buildStsClientConfig as or, waitForAgentCorePing as ot, serviceStrategy as p, parseConnectionsPath as pn, addInvokeSpecificOptions as pt, invokeAgentCoreWs as q, AGENTCORE_A2A_PROTOCOL as qn, buildCorsConfigByApiId as qt, formatTargetListing as r, pickResponseTemplate as rn, substituteImagePlaceholders as rr, signAgentCoreInvocation as rt, parseLbPortOverrides as s, HOST_GATEWAY_MIN_VERSION as sn, resolveProfileCredentials as sr, downloadAndExtractS3Bundle as st, addListSpecificOptions as t, buildRestV1Event as tn, derivePseudoParametersFromRegion as tr, parseSseForJsonRpc as tt, resolveAlbFrontDoor as u, ConnectionRegistry as un, computeCodeImageTag as ut, addEcsAssumeRoleOptions as v, buildContainerImage as vn, resolveApiTargetSubset as vt, resolveEcsAssumeRoleOption as w, substituteAgainstStateAsync as wn, resolveEnvVars as wt, ecsClusterOption as x, resolveRuntimeImage as xn, attachStageContext as xt, addImageOverrideOptions as y, resolveRuntimeCodeMountPath as yn, createAuthorizerCache as yt, classifySourceChange as z, countTargets as zn, verifyJwtViaDiscovery as zt };
27353
- //# sourceMappingURL=local-list-Dn0Al276.js.map
27443
+ //# sourceMappingURL=local-list-CFINvNxo.js.map