cdk-local 0.149.5 → 0.149.6

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 { D as createLocalStartAgentCoreCommand, F as createLocalStartCloudFrontCommand, Mn as createLocalInvokeCommand, Ot as createLocalStartServiceCommand, Pn as createLocalStartApiCommand, St as createLocalStartAlbCommand, a as createLocalStudioCommand, jt as createLocalRunTaskCommand, sn as createLocalInvokeAgentCoreCommand, w as createLocalListCommand } from "./local-studio-CV21zLBM.js";
2
+ import { D as createLocalStartAgentCoreCommand, F as createLocalStartCloudFrontCommand, Mn as createLocalInvokeCommand, Ot as createLocalStartServiceCommand, Pn as createLocalStartApiCommand, St as createLocalStartAlbCommand, a as createLocalStudioCommand, jt as createLocalRunTaskCommand, sn as createLocalInvokeAgentCoreCommand, w as createLocalListCommand } from "./local-studio-CLk7iSNq.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.149.5");
7
+ program.name("cdkl").description("Run AWS CDK stacks locally with Docker.").version("0.149.6");
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 { E as setEmbedConfig, T as resetEmbedConfig, w as getEmbedConfig } from "./docker-cmd-B5yU__zC.js";
2
- import { $r as resolveCfnStackName, D as createLocalStartAgentCoreCommand, F as createLocalStartCloudFrontCommand, Gr as substituteEnvVarsFromState, Jr as createLocalStateProvider, Kr as substituteEnvVarsFromStateAsync, Mn as createLocalInvokeCommand, Ot as createLocalStartServiceCommand, Pn as createLocalStartApiCommand, Qr as resolveCfnRegion, St as createLocalStartAlbCommand, T as formatTargetListing, Ur as substituteAgainstState, Wr as substituteAgainstStateAsync, Xr as rejectExplicitCfnStackWithMultipleStacks, Yr as isCfnFlagPresent, Zr as resolveCfnFallbackRegion, a as createLocalStudioCommand, ai as countTargets, ei as CfnLocalStateProvider, jt as createLocalRunTaskCommand, ni as resolveSsmParameters, oi as listTargets, qr as LocalStateSourceError, sn as createLocalInvokeAgentCoreCommand, ti as collectSsmParameterRefs, w as createLocalListCommand } from "./local-studio-CV21zLBM.js";
2
+ import { $r as resolveCfnStackName, D as createLocalStartAgentCoreCommand, F as createLocalStartCloudFrontCommand, Gr as substituteEnvVarsFromState, Jr as createLocalStateProvider, Kr as substituteEnvVarsFromStateAsync, Mn as createLocalInvokeCommand, Ot as createLocalStartServiceCommand, Pn as createLocalStartApiCommand, Qr as resolveCfnRegion, St as createLocalStartAlbCommand, T as formatTargetListing, Ur as substituteAgainstState, Wr as substituteAgainstStateAsync, Xr as rejectExplicitCfnStackWithMultipleStacks, Yr as isCfnFlagPresent, Zr as resolveCfnFallbackRegion, a as createLocalStudioCommand, ai as countTargets, ei as CfnLocalStateProvider, jt as createLocalRunTaskCommand, ni as resolveSsmParameters, oi as listTargets, qr as LocalStateSourceError, sn as createLocalInvokeAgentCoreCommand, ti as collectSsmParameterRefs, w as createLocalListCommand } from "./local-studio-CLk7iSNq.js";
3
3
 
4
4
  export { CfnLocalStateProvider, LocalStateSourceError, collectSsmParameterRefs, countTargets, createLocalInvokeAgentCoreCommand, createLocalInvokeCommand, createLocalListCommand, createLocalRunTaskCommand, createLocalStartAgentCoreCommand, createLocalStartAlbCommand, createLocalStartApiCommand, createLocalStartCloudFrontCommand, createLocalStartServiceCommand, createLocalStateProvider, createLocalStudioCommand, formatTargetListing, getEmbedConfig, isCfnFlagPresent, listTargets, rejectExplicitCfnStackWithMultipleStacks, resetEmbedConfig, resolveCfnFallbackRegion, resolveCfnRegion, resolveCfnStackName, resolveSsmParameters, setEmbedConfig, substituteAgainstState, substituteAgainstStateAsync, substituteEnvVarsFromState, substituteEnvVarsFromStateAsync };
package/dist/internal.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { _ as describeCredentialLoadFailure, g as describeAwsFailureForWarn } from "./docker-cmd-B5yU__zC.js";
2
- import { $ as applyEdgeResponseResult, $n as buildJwksUrlFromIssuer, $t as buildCloudMapIndex, A as startAgentCoreHttpServer, Ai as resolveProfileCredentials, An as classifySourceChange, Ar as ConnectionRegistry, At as addRunTaskSpecificOptions, B as idFromArn, Bn as buildStageMap, Br as resolveRuntimeFileExtension, Bt as resolveEcsAssumeRoleOption, C as addListSpecificOptions, Ci as resolveAgentCoreTarget, Cn as waitForAgentCorePing, Cr as tryParseStatus, Ct as parseLbPortOverrides, Di as tryResolveImageFnJoin, Dn as computeCodeImageTag, Dr as probeHostGatewaySupport, Dt as addStartServiceSpecificOptions, E as addStartAgentCoreSpecificOptions, Ei as substituteImagePlaceholders, En as buildAgentCoreCodeImage, Er as HOST_GATEWAY_MIN_VERSION, Et as resolveAlbFrontDoor, Fn as createWatchPredicates, Fr as buildDisconnectEvent, Ft as addImageOverrideOptions, G as classifyS3Error, Gn as filterRoutesByApiIdentifiers, Gt as enforceImageOverrideOrphans, H as createDeployedKvsDataSource, Hn as resolveEnvVars, Hr as EcsTaskResolutionError, Ht as runEcsServiceEmulator, I as normalizeKvsFileKeys, In as resolveApiTargetSubset, Ir as buildMessageEvent, It as buildEcsImageResolutionContext, J as startCloudFrontServer, Jn as startApiServer, Jt as resolveImageOverrides, K as createS3OriginReader, Kn as groupRoutesByServer, Kt as mergeForService, L as parseKvsFileOverrides, Ln as createAuthorizerCache, Lr as architectureToPlatform, Lt as ecsClusterOption, M as startAgentCoreWsBridge, Mi as isProxyEnvConfigured, Mr as handleConnectionsRequest, Mt as MAX_TASKS_SUBNET_RANGE_CAP, N as LocalStartCloudFrontError, Nn as addStartApiSpecificOptions, Nr as parseConnectionsPath, Nt as addCommonEcsServiceOptions, O as buildAgentCoreServeAuthCheck, Oi as LocalInvokeBuildError, On as renderCodeDockerfile, Or as resolveHostGatewayExtraHosts, P as addStartCloudFrontSpecificOptions, Pr as buildConnectEvent, Pt as addEcsAssumeRoleOptions, Q as applyEdgeRequestResult, Qn as buildCognitoJwksUrl, Qt as listPinnedTargets, R as parseOriginOverrides, Rn as createFileWatcher, Rr as buildContainerImage, Rt as parseMaxTasks, S as StudioEventBus, Si as pickAgentCoreCandidateStack, Sn as waitForAgentCoreHttpReady, Sr as selectIntegrationResponse, Ti as formatStateRemedy, Tn as SUPPORTED_CODE_RUNTIMES, Tr as HOST_DOCKER_INTERNAL_GATEWAY, Tt as isApplicationLoadBalancer, U as resolveDeployedKvsArnByName, Un as availableApiIdentifiers, Ut as ImageOverrideError, V as resolveKvsModulesForDistribution, Vn as materializeLayerFromArn, Vr as resolveRuntimeImage, Vt as resolveSharedSidecarCredentials, W as resolveDeployedOriginBucket, Wn as filterRoutesByApiIdentifier, Wt as buildImageOverrideTag, X as serveFromStaticOrigin, Xn as resolveServiceIntegrationParameters, Xt as describePinnedImageUri, Y as resolveErrorResponseCandidates, Yn as resolveSelectionExpression, Yt as runImageOverrideBuilds, Z as serveLambdaUrlOrigin, Zn as defaultCredentialsLoader, Zt as isLocalCdkAssetImage, _ as filterStudioTargetGroups, _i as AGENTCORE_AGUI_PROTOCOL, _n as parseSseForJsonRpc, _r as applyAuthorizerOverlay, _t as createCloudFrontModule, an as attachContainerLogStreamer, ar as computeRequestIdentityHash, at as describeS3OriginDomain, b as renderStudioHtml, bi as AGENTCORE_RUNTIME_TYPE, bn as AGENTCORE_SESSION_ID_HEADER, br as evaluateResponseParameters, bt as addAlbSpecificOptions, c as startStudioProxy, ci as discoverWebSocketApis, cn as bridgeAgentCoreWs, cr as invokeTokenAuthorizer, ct as pickFunctionUrlLogicalIdFromOrigin, d as createStudioDispatcher, di as parseSelectionExpressionPath, dn as A2A_PATH, dr as buildCorsConfigByApiId, dt as pickTargetFunctionLogicalId, en as CloudMapRegistry, er as createJwksCache, et as buildEdgeRequestEvent, f as filterStudioCustomResources, fi as webSocketApiMatchesIdentifier, fn as a2aInvokeOnce, fr as buildCorsConfigFromCloudFrontChain, ft as resolveCloudFrontDistribution, g as annotatePinnedEcsTargets, gi as AGENTCORE_A2A_PROTOCOL, gn as mcpInvokeOnce, gr as translateLambdaResponse, gt as stripCloudFrontImport, h as annotateEcsTaskPinnedTargets, hi as resolveLambdaArnIntrinsic, hn as MCP_PROTOCOL_VERSION, hr as matchRoute, ht as runViewerResponse, i as coerceStopRequest, ii as resolveSingleTarget, in as getContainerNetworkIp, ir as buildMethodArn, it as CLOUDFRONT_DISTRIBUTION_TYPE, j as attachAgentCoreWsBridge, ji as buildProxyClientConfig, jn as addInvokeSpecificOptions, jr as buildMgmtEndpointEnvUrl, k as selectServeInboundAuth, ki as buildStsClientConfig, kn as toCmdArgv, kr as bufferToBody, kt as serviceStrategy, l as relayServeRequest, li as discoverWebSocketApisOrThrow, ln as invokeAgentCoreWs, lr as attachAuthorizers, lt as pickKvsLogicalIdFromArn, m as annotateAlbPinnedBackingServices, mi as pickRefLogicalId, mn as MCP_PATH, mr as matchPreflight, mt as runViewerRequest, n as coerceRunRequest, nn as SOFT_RELOAD_COMPLETION_LOG_SUFFIX, nr as verifyJwtAuthorizer, nt as edgeHeadersToHttp, o as resolveServeBaseUrl, on as addInvokeAgentCoreSpecificOptions, or as evaluateCachedLambdaPolicy, ot as extractKvsAssociations, p as isCustomResourceLambdaTarget, pi as discoverRoutes, pn as MCP_CONTAINER_PORT, pr as isFunctionUrlOacFronted, pt as compileCloudFrontFunction, q as matchBehavior, qn as readMtlsMaterialsFromDisk, qt as parseImageOverrideFlags, r as coerceServeRequest, ri as resolveWatchConfig, rn as setShadowReadyTimeoutMs, rr as verifyJwtViaDiscovery, rt as httpHeadersToEdge, s as createStudioServeManager, si as availableWebSocketApiIdentifiers, sr as invokeRequestAuthorizer, st as isCloudFrontDistribution, t as addStudioSpecificOptions, tn as DEFAULT_SHADOW_READY_TIMEOUT_MS, tr as verifyCognitoJwt, tt as buildEdgeResponseEvent, u as reinvoke, ui as filterWebSocketApisByIdentifiers, un as A2A_CONTAINER_PORT, ur as applyCorsResponseHeaders, ut as pickLambdaEdgeFunctionLogicalId, v as startStudioServer, vi as AGENTCORE_HTTP_PROTOCOL, vn as AGENTCORE_SIGV4_SERVICE, vr as buildHttpApiV2Event, vt as createLocalFileKvsDataSource, wi as derivePseudoParametersFromRegion, wn as downloadAndExtractS3Bundle, wr as VtlEvaluationError, wt as resolveAlbTarget, x as createStudioStore, xi as AgentCoreResolutionError, xn as invokeAgentCore, xr as pickResponseTemplate, xt as albStrategy, y as toStudioTargetGroups, yi as AGENTCORE_MCP_PROTOCOL, yn as signAgentCoreInvocation, yr as buildRestV1Event, yt as createUnboundCloudFrontModule, z as resolveCloudFrontTarget, zn as attachStageContext, zr as resolveRuntimeCodeMountPath, zt as parseRestartPolicy } from "./local-studio-CV21zLBM.js";
2
+ import { $ as applyEdgeResponseResult, $n as buildJwksUrlFromIssuer, $t as buildCloudMapIndex, A as startAgentCoreHttpServer, Ai as resolveProfileCredentials, An as classifySourceChange, Ar as ConnectionRegistry, At as addRunTaskSpecificOptions, B as idFromArn, Bn as buildStageMap, Br as resolveRuntimeFileExtension, Bt as resolveEcsAssumeRoleOption, C as addListSpecificOptions, Ci as resolveAgentCoreTarget, Cn as waitForAgentCorePing, Cr as tryParseStatus, Ct as parseLbPortOverrides, Di as tryResolveImageFnJoin, Dn as computeCodeImageTag, Dr as probeHostGatewaySupport, Dt as addStartServiceSpecificOptions, E as addStartAgentCoreSpecificOptions, Ei as substituteImagePlaceholders, En as buildAgentCoreCodeImage, Er as HOST_GATEWAY_MIN_VERSION, Et as resolveAlbFrontDoor, Fn as createWatchPredicates, Fr as buildDisconnectEvent, Ft as addImageOverrideOptions, G as classifyS3Error, Gn as filterRoutesByApiIdentifiers, Gt as enforceImageOverrideOrphans, H as createDeployedKvsDataSource, Hn as resolveEnvVars, Hr as EcsTaskResolutionError, Ht as runEcsServiceEmulator, I as normalizeKvsFileKeys, In as resolveApiTargetSubset, Ir as buildMessageEvent, It as buildEcsImageResolutionContext, J as startCloudFrontServer, Jn as startApiServer, Jt as resolveImageOverrides, K as createS3OriginReader, Kn as groupRoutesByServer, Kt as mergeForService, L as parseKvsFileOverrides, Ln as createAuthorizerCache, Lr as architectureToPlatform, Lt as ecsClusterOption, M as startAgentCoreWsBridge, Mi as isProxyEnvConfigured, Mr as handleConnectionsRequest, Mt as MAX_TASKS_SUBNET_RANGE_CAP, N as LocalStartCloudFrontError, Nn as addStartApiSpecificOptions, Nr as parseConnectionsPath, Nt as addCommonEcsServiceOptions, O as buildAgentCoreServeAuthCheck, Oi as LocalInvokeBuildError, On as renderCodeDockerfile, Or as resolveHostGatewayExtraHosts, P as addStartCloudFrontSpecificOptions, Pr as buildConnectEvent, Pt as addEcsAssumeRoleOptions, Q as applyEdgeRequestResult, Qn as buildCognitoJwksUrl, Qt as listPinnedTargets, R as parseOriginOverrides, Rn as createFileWatcher, Rr as buildContainerImage, Rt as parseMaxTasks, S as StudioEventBus, Si as pickAgentCoreCandidateStack, Sn as waitForAgentCoreHttpReady, Sr as selectIntegrationResponse, Ti as formatStateRemedy, Tn as SUPPORTED_CODE_RUNTIMES, Tr as HOST_DOCKER_INTERNAL_GATEWAY, Tt as isApplicationLoadBalancer, U as resolveDeployedKvsArnByName, Un as availableApiIdentifiers, Ut as ImageOverrideError, V as resolveKvsModulesForDistribution, Vn as materializeLayerFromArn, Vr as resolveRuntimeImage, Vt as resolveSharedSidecarCredentials, W as resolveDeployedOriginBucket, Wn as filterRoutesByApiIdentifier, Wt as buildImageOverrideTag, X as serveFromStaticOrigin, Xn as resolveServiceIntegrationParameters, Xt as describePinnedImageUri, Y as resolveErrorResponseCandidates, Yn as resolveSelectionExpression, Yt as runImageOverrideBuilds, Z as serveLambdaUrlOrigin, Zn as defaultCredentialsLoader, Zt as isLocalCdkAssetImage, _ as filterStudioTargetGroups, _i as AGENTCORE_AGUI_PROTOCOL, _n as parseSseForJsonRpc, _r as applyAuthorizerOverlay, _t as createCloudFrontModule, an as attachContainerLogStreamer, ar as computeRequestIdentityHash, at as describeS3OriginDomain, b as renderStudioHtml, bi as AGENTCORE_RUNTIME_TYPE, bn as AGENTCORE_SESSION_ID_HEADER, br as evaluateResponseParameters, bt as addAlbSpecificOptions, c as startStudioProxy, ci as discoverWebSocketApis, cn as bridgeAgentCoreWs, cr as invokeTokenAuthorizer, ct as pickFunctionUrlLogicalIdFromOrigin, d as createStudioDispatcher, di as parseSelectionExpressionPath, dn as A2A_PATH, dr as buildCorsConfigByApiId, dt as pickTargetFunctionLogicalId, en as CloudMapRegistry, er as createJwksCache, et as buildEdgeRequestEvent, f as filterStudioCustomResources, fi as webSocketApiMatchesIdentifier, fn as a2aInvokeOnce, fr as buildCorsConfigFromCloudFrontChain, ft as resolveCloudFrontDistribution, g as annotatePinnedEcsTargets, gi as AGENTCORE_A2A_PROTOCOL, gn as mcpInvokeOnce, gr as translateLambdaResponse, gt as stripCloudFrontImport, h as annotateEcsTaskPinnedTargets, hi as resolveLambdaArnIntrinsic, hn as MCP_PROTOCOL_VERSION, hr as matchRoute, ht as runViewerResponse, i as coerceStopRequest, ii as resolveSingleTarget, in as getContainerNetworkIp, ir as buildMethodArn, it as CLOUDFRONT_DISTRIBUTION_TYPE, j as attachAgentCoreWsBridge, ji as buildProxyClientConfig, jn as addInvokeSpecificOptions, jr as buildMgmtEndpointEnvUrl, k as selectServeInboundAuth, ki as buildStsClientConfig, kn as toCmdArgv, kr as bufferToBody, kt as serviceStrategy, l as relayServeRequest, li as discoverWebSocketApisOrThrow, ln as invokeAgentCoreWs, lr as attachAuthorizers, lt as pickKvsLogicalIdFromArn, m as annotateAlbPinnedBackingServices, mi as pickRefLogicalId, mn as MCP_PATH, mr as matchPreflight, mt as runViewerRequest, n as coerceRunRequest, nn as SOFT_RELOAD_COMPLETION_LOG_SUFFIX, nr as verifyJwtAuthorizer, nt as edgeHeadersToHttp, o as resolveServeBaseUrl, on as addInvokeAgentCoreSpecificOptions, or as evaluateCachedLambdaPolicy, ot as extractKvsAssociations, p as isCustomResourceLambdaTarget, pi as discoverRoutes, pn as MCP_CONTAINER_PORT, pr as isFunctionUrlOacFronted, pt as compileCloudFrontFunction, q as matchBehavior, qn as readMtlsMaterialsFromDisk, qt as parseImageOverrideFlags, r as coerceServeRequest, ri as resolveWatchConfig, rn as setShadowReadyTimeoutMs, rr as verifyJwtViaDiscovery, rt as httpHeadersToEdge, s as createStudioServeManager, si as availableWebSocketApiIdentifiers, sr as invokeRequestAuthorizer, st as isCloudFrontDistribution, t as addStudioSpecificOptions, tn as DEFAULT_SHADOW_READY_TIMEOUT_MS, tr as verifyCognitoJwt, tt as buildEdgeResponseEvent, u as reinvoke, ui as filterWebSocketApisByIdentifiers, un as A2A_CONTAINER_PORT, ur as applyCorsResponseHeaders, ut as pickLambdaEdgeFunctionLogicalId, v as startStudioServer, vi as AGENTCORE_HTTP_PROTOCOL, vn as AGENTCORE_SIGV4_SERVICE, vr as buildHttpApiV2Event, vt as createLocalFileKvsDataSource, wi as derivePseudoParametersFromRegion, wn as downloadAndExtractS3Bundle, wr as VtlEvaluationError, wt as resolveAlbTarget, x as createStudioStore, xi as AgentCoreResolutionError, xn as invokeAgentCore, xr as pickResponseTemplate, xt as albStrategy, y as toStudioTargetGroups, yi as AGENTCORE_MCP_PROTOCOL, yn as signAgentCoreInvocation, yr as buildRestV1Event, yt as createUnboundCloudFrontModule, z as resolveCloudFrontTarget, zn as attachStageContext, zr as resolveRuntimeCodeMountPath, zt as parseRestartPolicy } from "./local-studio-CLk7iSNq.js";
3
3
 
4
4
  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, CLOUDFRONT_DISTRIBUTION_TYPE, CloudMapRegistry, ConnectionRegistry, DEFAULT_SHADOW_READY_TIMEOUT_MS, EcsTaskResolutionError, HOST_DOCKER_INTERNAL_GATEWAY, HOST_GATEWAY_MIN_VERSION, ImageOverrideError, LocalInvokeBuildError, LocalStartCloudFrontError, MAX_TASKS_SUBNET_RANGE_CAP, MCP_CONTAINER_PORT, MCP_PATH, MCP_PROTOCOL_VERSION, SOFT_RELOAD_COMPLETION_LOG_SUFFIX, SUPPORTED_CODE_RUNTIMES, StudioEventBus, VtlEvaluationError, a2aInvokeOnce, addAlbSpecificOptions, addCommonEcsServiceOptions, addEcsAssumeRoleOptions, addImageOverrideOptions, addInvokeAgentCoreSpecificOptions, addInvokeSpecificOptions, addListSpecificOptions, addRunTaskSpecificOptions, addStartAgentCoreSpecificOptions, addStartApiSpecificOptions, addStartCloudFrontSpecificOptions, addStartServiceSpecificOptions, addStudioSpecificOptions, albStrategy, annotateAlbPinnedBackingServices, annotateEcsTaskPinnedTargets, annotatePinnedEcsTargets, applyAuthorizerOverlay, applyCorsResponseHeaders, applyEdgeRequestResult, applyEdgeResponseResult, architectureToPlatform, attachAgentCoreWsBridge, attachAuthorizers, attachContainerLogStreamer, attachStageContext, availableApiIdentifiers, availableWebSocketApiIdentifiers, bridgeAgentCoreWs, bufferToBody, buildAgentCoreCodeImage, buildAgentCoreServeAuthCheck, buildCloudMapIndex, buildCognitoJwksUrl, buildConnectEvent, buildContainerImage, buildCorsConfigByApiId, buildCorsConfigFromCloudFrontChain, buildDisconnectEvent, buildEcsImageResolutionContext, buildEdgeRequestEvent, buildEdgeResponseEvent, buildHttpApiV2Event, buildImageOverrideTag, buildJwksUrlFromIssuer, buildMessageEvent, buildMethodArn, buildMgmtEndpointEnvUrl, buildProxyClientConfig, buildRestV1Event, buildStageMap, buildStsClientConfig, classifyS3Error, classifySourceChange, coerceRunRequest, coerceServeRequest, coerceStopRequest, compileCloudFrontFunction, computeCodeImageTag, computeRequestIdentityHash, createAuthorizerCache, createCloudFrontModule, createDeployedKvsDataSource, createFileWatcher, createJwksCache, createLocalFileKvsDataSource, createS3OriginReader, createStudioDispatcher, createStudioServeManager, createStudioStore, createUnboundCloudFrontModule, createWatchPredicates, defaultCredentialsLoader, derivePseudoParametersFromRegion, describeAwsFailureForWarn, describeCredentialLoadFailure, describePinnedImageUri, describeS3OriginDomain, discoverRoutes, discoverWebSocketApis, discoverWebSocketApisOrThrow, downloadAndExtractS3Bundle, ecsClusterOption, edgeHeadersToHttp, enforceImageOverrideOrphans, evaluateCachedLambdaPolicy, evaluateResponseParameters, extractKvsAssociations, filterRoutesByApiIdentifier, filterRoutesByApiIdentifiers, filterStudioCustomResources, filterStudioTargetGroups, filterWebSocketApisByIdentifiers, formatStateRemedy, getContainerNetworkIp, groupRoutesByServer, handleConnectionsRequest, httpHeadersToEdge, idFromArn, invokeAgentCore, invokeAgentCoreWs, invokeRequestAuthorizer, invokeTokenAuthorizer, isApplicationLoadBalancer, isCloudFrontDistribution, isCustomResourceLambdaTarget, isFunctionUrlOacFronted, isLocalCdkAssetImage, isProxyEnvConfigured, listPinnedTargets, matchBehavior, matchPreflight, matchRoute, materializeLayerFromArn, mcpInvokeOnce, mergeForService, normalizeKvsFileKeys, parseConnectionsPath, parseImageOverrideFlags, parseKvsFileOverrides, parseLbPortOverrides, parseMaxTasks, parseOriginOverrides, parseRestartPolicy, parseSelectionExpressionPath, parseSseForJsonRpc, pickAgentCoreCandidateStack, pickFunctionUrlLogicalIdFromOrigin, pickKvsLogicalIdFromArn, pickLambdaEdgeFunctionLogicalId, pickRefLogicalId, pickResponseTemplate, pickTargetFunctionLogicalId, probeHostGatewaySupport, readMtlsMaterialsFromDisk, reinvoke, relayServeRequest, renderCodeDockerfile, renderStudioHtml, resolveAgentCoreTarget, resolveAlbFrontDoor, resolveAlbTarget, resolveApiTargetSubset, resolveCloudFrontDistribution, resolveCloudFrontTarget, resolveDeployedKvsArnByName, resolveDeployedOriginBucket, resolveEcsAssumeRoleOption, resolveEnvVars, resolveErrorResponseCandidates, resolveHostGatewayExtraHosts, resolveImageOverrides, resolveKvsModulesForDistribution, resolveLambdaArnIntrinsic, resolveProfileCredentials, resolveRuntimeCodeMountPath, resolveRuntimeFileExtension, resolveRuntimeImage, resolveSelectionExpression, resolveServeBaseUrl, resolveServiceIntegrationParameters, resolveSharedSidecarCredentials, resolveSingleTarget, resolveWatchConfig, runEcsServiceEmulator, runImageOverrideBuilds, runViewerRequest, runViewerResponse, selectIntegrationResponse, selectServeInboundAuth, serveFromStaticOrigin, serveLambdaUrlOrigin, serviceStrategy, setShadowReadyTimeoutMs, signAgentCoreInvocation, startAgentCoreHttpServer, startAgentCoreWsBridge, startApiServer, startCloudFrontServer, startStudioProxy, startStudioServer, stripCloudFrontImport, substituteImagePlaceholders, toCmdArgv, toStudioTargetGroups, translateLambdaResponse, tryParseStatus, tryResolveImageFnJoin, verifyCognitoJwt, verifyJwtAuthorizer, verifyJwtViaDiscovery, waitForAgentCoreHttpReady, waitForAgentCorePing, webSocketApiMatchesIdentifier };
@@ -7178,6 +7178,166 @@ function applyDeployedEnvFallback(resolvedEnv, unresolved, deployedEnv) {
7178
7178
  };
7179
7179
  }
7180
7180
 
7181
+ //#endregion
7182
+ //#region src/local/ecr-uri.ts
7183
+ /**
7184
+ * Every ECR private-registry host form, read off the AWS-published `ecr`
7185
+ * endpoint list (https://docs.aws.amazon.com/general/latest/gr/ecr.html):
7186
+ *
7187
+ * - `<acct>.dkr.ecr.<region>.<partition suffix>` — the plain IPv4 endpoint.
7188
+ * - `<acct>.dkr.ecr-fips.<region>.<partition suffix>` — FIPS IPv4.
7189
+ * - `<acct>.dkr-ecr.<region>.on.aws` — dual-stack (IPv4 + IPv6).
7190
+ * - `<acct>.dkr-ecr-fips.<region>.on.aws` — dual-stack FIPS.
7191
+ *
7192
+ * Every form except the plain one is scoped to the `aws` and `aws-us-gov`
7193
+ * partitions, the only ones that endpoint list shows it in: both FIPS forms are
7194
+ * listed for `us-east-1` / `us-east-2` / `us-west-1` / `us-west-2` /
7195
+ * `us-gov-east-1` / `us-gov-west-1` only, and `on.aws` is the dual-stack DNS of
7196
+ * those two partitions (the others serve dual-stack under their own suffixes,
7197
+ * which are not listed here). A FIPS or dual-stack host in any other partition
7198
+ * is therefore not recognized and is pulled as a public image, as before issue
7199
+ * #760. The scope is by PARTITION, not by region: a commercial region AWS adds
7200
+ * later is accepted, and a login to an unserved region's FIPS host only fails,
7201
+ * because the suffix is still AWS-owned.
7202
+ */
7203
+ const FIPS_AND_DUAL_STACK_PARTITIONS = ["aws", "aws-us-gov"];
7204
+ const ECR_REGISTRY_HOST_FORMS = [
7205
+ { labels: "dkr.ecr" },
7206
+ {
7207
+ labels: "dkr.ecr-fips",
7208
+ partitions: FIPS_AND_DUAL_STACK_PARTITIONS
7209
+ },
7210
+ {
7211
+ labels: "dkr-ecr",
7212
+ fixedUrlSuffix: "on.aws",
7213
+ partitions: FIPS_AND_DUAL_STACK_PARTITIONS
7214
+ },
7215
+ {
7216
+ labels: "dkr-ecr-fips",
7217
+ fixedUrlSuffix: "on.aws",
7218
+ partitions: FIPS_AND_DUAL_STACK_PARTITIONS
7219
+ }
7220
+ ];
7221
+ const ECR_HOST_FORM_BY_LABELS = new Map(ECR_REGISTRY_HOST_FORMS.map((f) => [f.labels, f]));
7222
+ function escapeRegExp(value) {
7223
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
7224
+ }
7225
+ /**
7226
+ * `<acct>.<labels>.<region>.<suffix>/` — ANCHORED at the start, so nothing
7227
+ * (userinfo, a scheme, another host) can precede the account id, and ending at
7228
+ * the first `/`, so the captured suffix is the rest of the host.
7229
+ *
7230
+ * The labels alternation is built from {@link ECR_REGISTRY_HOST_FORMS},
7231
+ * ESCAPED (an unescaped `dkr.ecr` would match `dkrxecr`) and longest first, so
7232
+ * `dkr.ecr-fips` is tried before its own `dkr.ecr` prefix. The `i` flag makes
7233
+ * the labels case-insensitive, as DNS is; it is non-unicode, so it does NOT
7234
+ * treat U+212A (Kelvin sign) as `k`, and `\d` is ASCII-only.
7235
+ */
7236
+ const ECR_URI_HOST_REGEX = new RegExp(`^(\\d{12})\\.(${[...ECR_REGISTRY_HOST_FORMS].sort((a, b) => b.labels.length - a.labels.length).map((f) => escapeRegExp(f.labels)).join("|")})\\.([^./]+)\\.([^/]+)/`, "i");
7237
+ /**
7238
+ * A region segment is ASCII alphanumerics plus `-`. Tested on the RAW capture,
7239
+ * BEFORE any case fold: `String.prototype.toLowerCase` folds U+212A onto an
7240
+ * ASCII `k`, so testing a folded value would admit `us-eKst-1` (Kelvin sign) as
7241
+ * the region `us-ekst-1` — a region the host does not name, which then seeds
7242
+ * the ECR client and the login endpoint. Today {@link REGION_SHAPE} also
7243
+ * refuses that input, because the fold is ASCII-only and the shape is ASCII
7244
+ * only, so this guard is DEFENSE IN DEPTH: it keeps the region safe if the fold
7245
+ * is ever widened to full Unicode folding.
7246
+ */
7247
+ const CANONICAL_REGION_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9-]*$/;
7248
+ /**
7249
+ * The SHAPE of an AWS region id, tested on the FOLDED region after the charset
7250
+ * guard above. One alternative per partition, transcribed from the
7251
+ * `regionRegex` of each partition in the AWS SDK / botocore `partitions.json`
7252
+ * (`\w+` written as `[a-z0-9]+`):
7253
+ *
7254
+ * - aws: `(us|eu|ap|sa|ca|me|af|il|mx)-X-N`
7255
+ * - aws-cn: `cn-X-N`; aws-us-gov: `us-gov-X-N`
7256
+ * - aws-iso / -b / -e / -f: `us-iso-X-N`, `us-isob-X-N`, `eu-isoe-X-N`,
7257
+ * `us-isof-X-N`
7258
+ * - aws-eusc: `eusc-<cc>-X-N` — broader than upstream's `eusc-(de)-`, matching
7259
+ * `PARTITION_TABLE`'s `eusc-` prefix so a future country is not refused here
7260
+ * while the partition lookup accepts it.
7261
+ *
7262
+ * It refuses a label that is not a region — `s3`, `lambda-url`,
7263
+ * `s3-external-1`, `fips-us-east-1` — so `<acct>.dkr.ecr.s3.amazonaws.com` or
7264
+ * `<acct>.dkr-ecr.lambda-url.on.aws` never becomes a login target. Those hosts
7265
+ * are AWS-owned, but they are not registries, and only TLS would stop a token
7266
+ * sent there (an `insecure-registries` daemon setting turns that off).
7267
+ */
7268
+ const REGION_SHAPE = /^(?:(?:us|eu|ap|sa|ca|me|af|il|mx)-[a-z0-9]+-[0-9]+|cn-[a-z0-9]+-[0-9]+|us-gov-[a-z0-9]+-[0-9]+|us-iso-[a-z0-9]+-[0-9]+|us-isob-[a-z0-9]+-[0-9]+|eu-isoe-[a-z0-9]+-[0-9]+|us-isof-[a-z0-9]+-[0-9]+|eusc-[a-z]+-[a-z0-9]+-[0-9]+)$/;
7269
+ /**
7270
+ * A URL suffix is a dotted name of ASCII alphanumerics and `-`, tested on the
7271
+ * raw capture like the region. Today it is DEFENSE IN DEPTH, not the load-
7272
+ * bearing check: the fold below is ASCII-only, so `cloud.adc-e.uK` (Kelvin
7273
+ * sign) never becomes the `aws-iso-e` suffix, and the exact-suffix comparison
7274
+ * already refuses a port (`:`), userinfo (`@`) or any look-alike. It keeps
7275
+ * the suffix safe if that fold is ever widened to full Unicode folding.
7276
+ */
7277
+ const CANONICAL_URL_SUFFIX = /^[A-Za-z0-9][A-Za-z0-9.-]*$/;
7278
+ /**
7279
+ * Lower-case ONLY `A`-`Z`. DNS case-insensitivity is ASCII-only, and a full
7280
+ * `toLowerCase` would fold U+212A onto `k` and hand the charset guards above an
7281
+ * already-ASCII string, defeating them.
7282
+ */
7283
+ function foldAsciiUpperCase(value) {
7284
+ return value.replace(/[A-Z]+/g, (run) => run.toLowerCase());
7285
+ }
7286
+ /** Docker's rule for "component 1 is a registry host, not a repository segment". */
7287
+ function isRegistryHostComponent(component) {
7288
+ return component.includes(".") || component.includes(":") || component === "localhost";
7289
+ }
7290
+ /**
7291
+ * Lower-case the REGISTRY HOST of an image reference (ASCII letters only) and
7292
+ * leave the repository path and tag byte-identical.
7293
+ *
7294
+ * Docker's credential store is keyed on the hostname VERBATIM, so a login to
7295
+ * one spelling and a pull from another sends no credentials; every
7296
+ * docker-facing use of an ECR reference goes through this one spelling. The
7297
+ * path is not folded: docker requires it lower-case already, and rewriting it
7298
+ * would name a different image. A first component that is not a registry host
7299
+ * (`MyOrg/MyRepo:tag` is a Docker Hub path) is left alone for the same reason.
7300
+ */
7301
+ function canonicalizeImageUriHost(imageUri) {
7302
+ const slash = imageUri.indexOf("/");
7303
+ if (slash < 0) return imageUri;
7304
+ const host = imageUri.slice(0, slash);
7305
+ if (!isRegistryHostComponent(host)) return imageUri;
7306
+ return foldAsciiUpperCase(host) + imageUri.slice(slash);
7307
+ }
7308
+ /**
7309
+ * The ECR registry an image reference names, or `undefined` when its host is
7310
+ * not one of {@link ECR_REGISTRY_HOST_FORMS} with the suffix that form carries
7311
+ * for the region it names.
7312
+ *
7313
+ * The suffix check is what keeps a `docker login` from being pointed at a host
7314
+ * cdk-local does not own: `<acct>.dkr.ecr.<region>.example.com`, a look-alike
7315
+ * `amazonaws.com.evil.example`, a port or userinfo after the suffix, and a
7316
+ * form/suffix mispairing (`dkr-ecr` + `amazonaws.com`, `dkr.ecr` + `on.aws`,
7317
+ * an ISO region + `amazonaws.com`) are all refused.
7318
+ */
7319
+ function parseEcrRegistryHost(imageUri) {
7320
+ const m = ECR_URI_HOST_REGEX.exec(imageUri);
7321
+ if (!m) return void 0;
7322
+ const [, accountId, rawLabels, rawRegion, rawSuffix] = m;
7323
+ if (!CANONICAL_REGION_SEGMENT.test(rawRegion)) return void 0;
7324
+ if (!CANONICAL_URL_SUFFIX.test(rawSuffix)) return void 0;
7325
+ const form = ECR_HOST_FORM_BY_LABELS.get(foldAsciiUpperCase(rawLabels));
7326
+ if (!form) return void 0;
7327
+ const region = foldAsciiUpperCase(rawRegion);
7328
+ if (!REGION_SHAPE.test(region)) return void 0;
7329
+ const suffix = foldAsciiUpperCase(rawSuffix);
7330
+ const partition = derivePartitionAndUrlSuffix(region);
7331
+ if (form.partitions && !form.partitions.includes(partition.partition)) return void 0;
7332
+ if (suffix !== (form.fixedUrlSuffix ?? partition.urlSuffix)) return void 0;
7333
+ return {
7334
+ accountId,
7335
+ region,
7336
+ registryHost: `${accountId}.${form.labels}.${region}.${suffix}`,
7337
+ form
7338
+ };
7339
+ }
7340
+
7181
7341
  //#endregion
7182
7342
  //#region src/local/ecs-task-resolver.ts
7183
7343
  var EcsTaskResolutionError = class EcsTaskResolutionError extends Error {
@@ -7692,9 +7852,10 @@ function buildSubstitutionContextFromImageContext(context) {
7692
7852
  * Parse the `Image` field of an ECS container definition.
7693
7853
  *
7694
7854
  * Three shapes:
7695
- * - `<account>.dkr.ecr.<region>.amazonaws.com/<repo>:<tag>` — same-account
7696
- * same-region ECR. Cross-account/region is hard-errored (matches
7697
- * `cdkl invoke`'s ECR-pull semantics).
7855
+ * - `<account>.dkr.ecr.<region>.amazonaws.com/<repo>:<tag>` — ECR, in any
7856
+ * host form `ECR_REGISTRY_HOST_FORMS` lists (FIPS / dual-stack too) and any
7857
+ * partition. Pulled through `pullEcrImage` (cross-account / cross-region
7858
+ * below).
7698
7859
  * - `Fn::Sub` / `Fn::Join` / `Ref` referencing a `Code.fromAsset`-style
7699
7860
  * CDK asset image. Surfaces `kind: 'cdk-asset'` with the optional
7700
7861
  * asset hash so the runner can route through `docker-build.ts`.
@@ -7741,12 +7902,12 @@ function parseContainerImage(raw, containerName, taskLogicalId, resources, _stac
7741
7902
  if (substituted.includes("AWS::")) throw new EcsTaskResolutionError(`Container '${containerName}' in task '${taskLogicalId}' has an Image that references AWS pseudo parameters (${substituted}). ${getEmbedConfig().productName} could not resolve them: confirm AWS credentials are configured so STS GetCallerIdentity succeeds, and that --region / AWS_REGION names the target region. Workaround: build the image locally (ContainerImage.fromAsset) or pin a public image.`);
7742
7903
  throw new EcsTaskResolutionError(`Container '${containerName}' in task '${taskLogicalId}' has an Image with unresolved \${...} placeholders (${substituted}). ${getEmbedConfig().cliName} only resolves AWS pseudo parameters and same-stack AWS::ECR::Repository refs.`);
7743
7904
  }
7744
- const ecrMatch = /^(\d{12})\.dkr\.ecr\.([^.]+)\.amazonaws\.com(?:\.cn)?\//.exec(substituted);
7745
- if (ecrMatch) return {
7905
+ const ecrHost = parseEcrRegistryHost(substituted);
7906
+ if (ecrHost) return {
7746
7907
  kind: "ecr",
7747
7908
  uri: substituted,
7748
- account: ecrMatch[1],
7749
- region: ecrMatch[2]
7909
+ account: ecrHost.accountId,
7910
+ region: ecrHost.region
7750
7911
  };
7751
7912
  return {
7752
7913
  kind: "public",
@@ -7782,12 +7943,12 @@ function classifyResolvedImage(uri) {
7782
7943
  if (hashMatch) out.assetHash = hashMatch[1];
7783
7944
  return out;
7784
7945
  }
7785
- const ecrMatch = /^(\d{12})\.dkr\.ecr\.([^.]+)\.amazonaws\.com(?:\.cn)?\//.exec(uri);
7786
- if (ecrMatch) return {
7946
+ const ecrHost = parseEcrRegistryHost(uri);
7947
+ if (ecrHost) return {
7787
7948
  kind: "ecr",
7788
7949
  uri,
7789
- account: ecrMatch[1],
7790
- region: ecrMatch[2]
7950
+ account: ecrHost.accountId,
7951
+ region: ecrHost.region
7791
7952
  };
7792
7953
  return {
7793
7954
  kind: "public",
@@ -8805,49 +8966,27 @@ function buildDockerBuildCommand(source, tag, platformOverride) {
8805
8966
  //#endregion
8806
8967
  //#region src/local/ecr-puller.ts
8807
8968
  /**
8808
- * ECR pull fallback for `cdkl invoke` / `cdkl start-api` /
8809
- * `cdkl run-task`. When the image URI resolves to an ECR repo but
8810
- * doesn't match any cdk.out asset (typical when invoking a stack
8811
- * deployed elsewhere or sharing a centralized registry), cdk-local
8812
- * authenticates against the target registry and runs `docker pull`.
8813
- *
8814
- * **Cross-account / cross-region** (#455):
8815
- * - Same-account, same-region: fast path. No STS hop. The default
8816
- * credential chain is used directly for `ecr:GetAuthorizationToken`.
8817
- * - `ecrRoleArn` is provided: `sts:AssumeRole` is issued via the
8818
- * default credential chain to obtain temporary credentials for the
8819
- * target account. The resulting credentials authenticate the ECR
8820
- * client (regardless of region — the ECR client is built for the
8821
- * URI's region, which can differ from the caller's profile region).
8822
- * - Cross-account, NO `ecrRoleArn`: cdk-local falls through to the
8823
- * default credential chain. This works when the caller has been
8824
- * granted cross-account `ecr:GetAuthorizationToken` +
8825
- * `ecr:BatchGetImage` permissions on the target repository via an
8826
- * IAM policy; otherwise AWS rejects the call with `AccessDenied`
8827
- * and the user is pointed at `--ecr-role-arn`.
8828
- *
8829
- * The `--no-pull` semantics (C3 in the design doc):
8830
- * - When NOT set: `ecrLogin` + `docker pull <uri>`.
8831
- * - When set: skip `docker pull`. If the image isn't in the local
8832
- * cache, the subsequent `docker run` will fail; we surface a clearer
8833
- * "image not in local cache" error here so the user knows to drop
8834
- * `--no-pull` or pre-pull manually.
8835
- */
8836
- /** Regex matching the `<acct>.dkr.ecr.<region>.amazonaws.com/<repo>:<tag>` shape. */
8837
- const ECR_URI_REGEX = /^(\d{12})\.dkr\.ecr\.([^.]+)\.amazonaws\.com(?:\.cn)?\/([^:]+):(.+)$/;
8838
- /**
8839
8969
  * Parse an ECR image URI. Returns `undefined` for non-ECR URIs (typically:
8840
8970
  * Docker Hub, public.ecr.aws, gcr.io, ...) — those are user-managed
8841
8971
  * images we don't try to authenticate against.
8972
+ *
8973
+ * Recognizes every host form in `ECR_REGISTRY_HOST_FORMS` (plain, FIPS,
8974
+ * dual-stack, dual-stack FIPS) in every partition, each with the suffix that
8975
+ * form carries for its region (issue #760) — see `parseEcrRegistryHost`.
8842
8976
  */
8843
8977
  function parseEcrUri(imageUri) {
8844
- const m = ECR_URI_REGEX.exec(imageUri);
8978
+ const host = parseEcrRegistryHost(imageUri);
8979
+ if (!host) return void 0;
8980
+ const canonicalUri = canonicalizeImageUriHost(imageUri);
8981
+ const m = /^([^:]+):(.+)$/.exec(canonicalUri.slice(canonicalUri.indexOf("/") + 1));
8845
8982
  if (!m) return void 0;
8846
8983
  return {
8847
- accountId: m[1],
8848
- region: m[2],
8849
- repository: m[3],
8850
- tag: m[4]
8984
+ accountId: host.accountId,
8985
+ region: host.region,
8986
+ repository: m[1],
8987
+ tag: m[2],
8988
+ canonicalUri,
8989
+ registryHost: host.registryHost
8851
8990
  };
8852
8991
  }
8853
8992
  /**
@@ -8887,17 +9026,20 @@ function isCredentialFresh(creds) {
8887
9026
  *
8888
9027
  * Auto-detects cross-account from `STS:GetCallerIdentity` and assumes
8889
9028
  * the supplied role when set. Returns the image URI the caller should
8890
- * pass to `docker run` (same as the input — no rewriting).
9029
+ * pass to `docker run`: the input with its registry host ASCII-lower-cased
9030
+ * (`ParsedEcrUri.canonicalUri`), so the run names the same spelling the pull
9031
+ * and the login used; the repository path and tag are unchanged.
8891
9032
  */
8892
9033
  async function pullEcrImage(imageUri, options) {
8893
9034
  const logger = getLogger().child("ecr-puller");
8894
9035
  const parsed = parseEcrUri(imageUri);
8895
9036
  if (!parsed) throw new LocalInvokeBuildError(`Image URI '${imageUri}' is not an ECR URI. ${getEmbedConfig().cliName} invoke v1 only authenticates against ECR for the deployed-image fallback path.`);
9037
+ const canonicalUri = parsed.canonicalUri;
8896
9038
  const callerRegion = options.region ?? process.env["AWS_REGION"] ?? process.env["AWS_DEFAULT_REGION"];
8897
9039
  if (options.skipPull) {
8898
- logger.info(`Skipping ECR pull (--no-pull). Verifying ${imageUri} is in local cache...`);
8899
- await verifyImageInLocalCache(imageUri);
8900
- return imageUri;
9040
+ logger.info(`Skipping ECR pull (--no-pull). Verifying ${canonicalUri} is in local cache...`);
9041
+ await verifyImageInLocalCache(canonicalUri);
9042
+ return canonicalUri;
8901
9043
  }
8902
9044
  const callerIdentityKey = `${options.profile ?? "_noprofile"}|${callerRegion ?? "_unset"}`;
8903
9045
  let callerAccount = CALLER_IDENTITY_CACHE.get(callerIdentityKey);
@@ -8940,17 +9082,21 @@ async function pullEcrImage(imageUri, options) {
8940
9082
  ...assumed ? { credentials: assumed } : options.profile ? { profile: options.profile } : {}
8941
9083
  });
8942
9084
  try {
8943
- await ecrLogin(ecr, parsed.accountId, parsed.region);
9085
+ await ecrLogin(ecr, {
9086
+ accountId: parsed.accountId,
9087
+ region: parsed.region,
9088
+ registryHost: parsed.registryHost
9089
+ });
8944
9090
  } finally {
8945
9091
  ecr.destroy();
8946
9092
  }
8947
- logger.info(`Pulling ${imageUri}...`);
9093
+ logger.info(`Pulling ${canonicalUri}...`);
8948
9094
  try {
8949
- await runDockerForeground(["pull", imageUri]);
9095
+ await runDockerForeground(["pull", canonicalUri]);
8950
9096
  } catch (err) {
8951
- throw new LocalInvokeBuildError(`docker pull ${imageUri} failed: ${err.message}`);
9097
+ throw new LocalInvokeBuildError(`docker pull ${canonicalUri} failed: ${err.message}`);
8952
9098
  }
8953
- return imageUri;
9099
+ return canonicalUri;
8954
9100
  }
8955
9101
  /**
8956
9102
  * Assume the supplied role via the SDK default credential chain and
@@ -8991,16 +9137,29 @@ async function assumeRoleForEcr(roleArn, callerRegion, profile, logger) {
8991
9137
  * Authenticate the local docker daemon against the target ECR registry.
8992
9138
  * Self-contained in this module so the local-invoke path stays
8993
9139
  * independent of any full asset-publish path's larger surface area.
8994
- */
8995
- async function ecrLogin(client, accountId, region) {
8996
- getLogger().child("ecr-puller").debug(`ECR login (account=${accountId}, region=${region})`);
9140
+ *
9141
+ * The login endpoint is ALWAYS the host the PULL targets (issue #760):
9142
+ * docker's credential store is keyed on the hostname verbatim, so a login to
9143
+ * any other host leaves the pull with no credentials (`no basic auth
9144
+ * credentials`). `GetAuthorizationToken`'s `proxyEndpoint` is therefore NOT
9145
+ * used: it names the CALLER's default registry on the plain host, which is the
9146
+ * wrong host for a FIPS / dual-stack pull and the wrong ACCOUNT for a
9147
+ * cross-account pull made on the caller's own credentials (a repository policy
9148
+ * grant, no `--ecr-role-arn`). The token is principal-scoped, not host-scoped:
9149
+ * measured on real ECR, one token authenticates the plain, FIPS and dual-stack
9150
+ * hosts alike. The password reaches docker only over `--password-stdin`, never
9151
+ * argv.
9152
+ */
9153
+ async function ecrLogin(client, target) {
9154
+ const { accountId, region, registryHost } = target;
9155
+ getLogger().child("ecr-puller").debug(`ECR login (account=${accountId}, region=${region}, host=${registryHost})`);
8997
9156
  const authData = (await client.send(new GetAuthorizationTokenCommand({})).catch((err) => {
8998
9157
  throw new LocalInvokeBuildError(`ECR GetAuthorizationToken failed (account=${accountId}, region=${region}): ${describeAwsFailureForWarn(err, "ECR GetAuthorizationToken")}. Verify the credentials can call ecr:GetAuthorizationToken.`);
8999
9158
  })).authorizationData?.[0];
9000
9159
  if (!authData?.authorizationToken) throw new LocalInvokeBuildError("Failed to get ECR authorization token");
9001
9160
  const [username, password] = Buffer.from(authData.authorizationToken, "base64").toString().split(":");
9002
9161
  if (!username || password === void 0) throw new LocalInvokeBuildError("ECR authorization token has unexpected shape (missing username/password)");
9003
- const endpoint = authData.proxyEndpoint || `https://${accountId}.dkr.ecr.${region}.amazonaws.com`;
9162
+ const endpoint = `https://${registryHost}`;
9004
9163
  try {
9005
9164
  await runDockerStreaming([
9006
9165
  "login",
@@ -40920,4 +41079,4 @@ function addStudioSpecificOptions(cmd) {
40920
41079
 
40921
41080
  //#endregion
40922
41081
  export { applyEdgeResponseResult as $, buildJwksUrlFromIssuer as $n, resolveCfnStackName as $r, buildCloudMapIndex as $t, startAgentCoreHttpServer as A, resolveProfileCredentials as Ai, classifySourceChange as An, ConnectionRegistry as Ar, addRunTaskSpecificOptions as At, idFromArn as B, buildStageMap as Bn, resolveRuntimeFileExtension as Br, resolveEcsAssumeRoleOption as Bt, addListSpecificOptions as C, resolveAgentCoreTarget as Ci, waitForAgentCorePing as Cn, tryParseStatus as Cr, parseLbPortOverrides as Ct, createLocalStartAgentCoreCommand as D, tryResolveImageFnJoin as Di, computeCodeImageTag as Dn, probeHostGatewaySupport as Dr, addStartServiceSpecificOptions as Dt, addStartAgentCoreSpecificOptions as E, substituteImagePlaceholders as Ei, buildAgentCoreCodeImage as En, HOST_GATEWAY_MIN_VERSION as Er, resolveAlbFrontDoor as Et, createLocalStartCloudFrontCommand as F, createWatchPredicates as Fn, buildDisconnectEvent as Fr, addImageOverrideOptions as Ft, classifyS3Error as G, filterRoutesByApiIdentifiers as Gn, substituteEnvVarsFromState as Gr, enforceImageOverrideOrphans as Gt, createDeployedKvsDataSource as H, resolveEnvVars$1 as Hn, EcsTaskResolutionError as Hr, runEcsServiceEmulator as Ht, normalizeKvsFileKeys as I, resolveApiTargetSubset as In, buildMessageEvent as Ir, buildEcsImageResolutionContext$1 as It, startCloudFrontServer as J, startApiServer as Jn, createLocalStateProvider as Jr, resolveImageOverrides as Jt, createS3OriginReader as K, groupRoutesByServer as Kn, substituteEnvVarsFromStateAsync as Kr, mergeForService as Kt, parseKvsFileOverrides as L, createAuthorizerCache as Ln, architectureToPlatform as Lr, ecsClusterOption as Lt, startAgentCoreWsBridge as M, isProxyEnvConfigured as Mi, createLocalInvokeCommand as Mn, handleConnectionsRequest as Mr, MAX_TASKS_SUBNET_RANGE_CAP as Mt, LocalStartCloudFrontError as N, addStartApiSpecificOptions as Nn, parseConnectionsPath as Nr, addCommonEcsServiceOptions as Nt, buildAgentCoreServeAuthCheck as O, LocalInvokeBuildError as Oi, renderCodeDockerfile as On, resolveHostGatewayExtraHosts as Or, createLocalStartServiceCommand as Ot, addStartCloudFrontSpecificOptions as P, createLocalStartApiCommand as Pn, buildConnectEvent as Pr, addEcsAssumeRoleOptions as Pt, applyEdgeRequestResult as Q, buildCognitoJwksUrl as Qn, resolveCfnRegion as Qr, listPinnedTargets as Qt, parseOriginOverrides as R, createFileWatcher as Rn, buildContainerImage as Rr, parseMaxTasks as Rt, StudioEventBus as S, pickAgentCoreCandidateStack as Si, waitForAgentCoreHttpReady as Sn, selectIntegrationResponse as Sr, createLocalStartAlbCommand as St, formatTargetListing as T, formatStateRemedy as Ti, SUPPORTED_CODE_RUNTIMES as Tn, HOST_DOCKER_INTERNAL_GATEWAY as Tr, isApplicationLoadBalancer as Tt, resolveDeployedKvsArnByName as U, availableApiIdentifiers as Un, substituteAgainstState as Ur, ImageOverrideError as Ut, resolveKvsModulesForDistribution as V, materializeLayerFromArn as Vn, resolveRuntimeImage as Vr, resolveSharedSidecarCredentials as Vt, resolveDeployedOriginBucket as W, filterRoutesByApiIdentifier as Wn, substituteAgainstStateAsync as Wr, buildImageOverrideTag as Wt, serveFromStaticOrigin as X, resolveServiceIntegrationParameters as Xn, rejectExplicitCfnStackWithMultipleStacks as Xr, describePinnedImageUri as Xt, resolveErrorResponseCandidates as Y, resolveSelectionExpression as Yn, isCfnFlagPresent as Yr, runImageOverrideBuilds as Yt, serveLambdaUrlOrigin as Z, defaultCredentialsLoader as Zn, resolveCfnFallbackRegion as Zr, isLocalCdkAssetImage as Zt, filterStudioTargetGroups as _, AGENTCORE_AGUI_PROTOCOL as _i, parseSseForJsonRpc as _n, applyAuthorizerOverlay as _r, createCloudFrontModule as _t, createLocalStudioCommand as a, countTargets as ai, attachContainerLogStreamer as an, computeRequestIdentityHash as ar, describeS3OriginDomain as at, renderStudioHtml as b, AGENTCORE_RUNTIME_TYPE as bi, AGENTCORE_SESSION_ID_HEADER as bn, evaluateResponseParameters as br, addAlbSpecificOptions as bt, startStudioProxy as c, discoverWebSocketApis as ci, bridgeAgentCoreWs as cn, invokeTokenAuthorizer as cr, pickFunctionUrlLogicalIdFromOrigin as ct, createStudioDispatcher as d, parseSelectionExpressionPath as di, A2A_PATH as dn, buildCorsConfigByApiId as dr, pickTargetFunctionLogicalId as dt, CfnLocalStateProvider as ei, CloudMapRegistry as en, createJwksCache as er, buildEdgeRequestEvent as et, filterStudioCustomResources as f, webSocketApiMatchesIdentifier as fi, a2aInvokeOnce as fn, buildCorsConfigFromCloudFrontChain as fr, resolveCloudFrontDistribution as ft, annotatePinnedEcsTargets as g, AGENTCORE_A2A_PROTOCOL as gi, mcpInvokeOnce as gn, translateLambdaResponse as gr, stripCloudFrontImport as gt, annotateEcsTaskPinnedTargets as h, resolveLambdaArnIntrinsic as hi, MCP_PROTOCOL_VERSION as hn, matchRoute as hr, runViewerResponse as ht, coerceStopRequest as i, resolveSingleTarget as ii, getContainerNetworkIp as in, buildMethodArn as ir, CLOUDFRONT_DISTRIBUTION_TYPE as it, attachAgentCoreWsBridge as j, buildProxyClientConfig as ji, addInvokeSpecificOptions as jn, buildMgmtEndpointEnvUrl as jr, createLocalRunTaskCommand as jt, selectServeInboundAuth as k, buildStsClientConfig as ki, toCmdArgv as kn, bufferToBody as kr, serviceStrategy as kt, relayServeRequest as l, discoverWebSocketApisOrThrow as li, invokeAgentCoreWs as ln, attachAuthorizers as lr, pickKvsLogicalIdFromArn as lt, annotateAlbPinnedBackingServices as m, pickRefLogicalId as mi, MCP_PATH as mn, matchPreflight as mr, runViewerRequest as mt, coerceRunRequest as n, resolveSsmParameters as ni, SOFT_RELOAD_COMPLETION_LOG_SUFFIX as nn, verifyJwtAuthorizer as nr, edgeHeadersToHttp as nt, resolveServeBaseUrl as o, listTargets as oi, addInvokeAgentCoreSpecificOptions as on, evaluateCachedLambdaPolicy as or, extractKvsAssociations as ot, isCustomResourceLambdaTarget as p, discoverRoutes as pi, MCP_CONTAINER_PORT as pn, isFunctionUrlOacFronted as pr, compileCloudFrontFunction as pt, matchBehavior as q, readMtlsMaterialsFromDisk as qn, LocalStateSourceError as qr, parseImageOverrideFlags as qt, coerceServeRequest as r, resolveWatchConfig as ri, setShadowReadyTimeoutMs as rn, verifyJwtViaDiscovery as rr, httpHeadersToEdge as rt, createStudioServeManager as s, availableWebSocketApiIdentifiers as si, createLocalInvokeAgentCoreCommand as sn, invokeRequestAuthorizer as sr, isCloudFrontDistribution as st, addStudioSpecificOptions as t, collectSsmParameterRefs as ti, DEFAULT_SHADOW_READY_TIMEOUT_MS as tn, verifyCognitoJwt as tr, buildEdgeResponseEvent as tt, reinvoke as u, filterWebSocketApisByIdentifiers as ui, A2A_CONTAINER_PORT as un, applyCorsResponseHeaders as ur, pickLambdaEdgeFunctionLogicalId as ut, startStudioServer as v, AGENTCORE_HTTP_PROTOCOL as vi, AGENTCORE_SIGV4_SERVICE as vn, buildHttpApiV2Event as vr, createLocalFileKvsDataSource as vt, createLocalListCommand as w, derivePseudoParametersFromRegion as wi, downloadAndExtractS3Bundle as wn, VtlEvaluationError as wr, resolveAlbTarget as wt, createStudioStore as x, AgentCoreResolutionError as xi, invokeAgentCore as xn, pickResponseTemplate as xr, albStrategy as xt, toStudioTargetGroups as y, AGENTCORE_MCP_PROTOCOL as yi, signAgentCoreInvocation as yn, buildRestV1Event as yr, createUnboundCloudFrontModule as yt, resolveCloudFrontTarget as z, attachStageContext as zn, resolveRuntimeCodeMountPath as zr, parseRestartPolicy as zt };
40923
- //# sourceMappingURL=local-studio-CV21zLBM.js.map
41082
+ //# sourceMappingURL=local-studio-CLk7iSNq.js.map