@kodycodes/cli 1.26.1 → 1.26.3
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/auth-4FW6GCLG.js +26 -0
- package/dist/auth-4FW6GCLG.js.map +6 -0
- package/dist/bin.js +27 -3
- package/dist/bin.js.map +6 -1
- package/dist/chunk-46IJPEID.js +30 -0
- package/dist/chunk-46IJPEID.js.map +6 -0
- package/dist/chunk-4D6ORNXY.js +24404 -0
- package/dist/chunk-4D6ORNXY.js.map +6 -0
- package/dist/chunk-64IM6G4Z.js +341 -0
- package/dist/chunk-64IM6G4Z.js.map +6 -0
- package/dist/{package-local-runtime-source.js → chunk-64XN367G.js} +373 -52
- package/dist/chunk-64XN367G.js.map +6 -0
- package/dist/chunk-6XQP5SWX.js +26 -0
- package/dist/chunk-6XQP5SWX.js.map +6 -0
- package/dist/chunk-75RZUXQL.js +62 -0
- package/dist/chunk-75RZUXQL.js.map +6 -0
- package/dist/chunk-BISUL7CE.js +106 -0
- package/dist/chunk-BISUL7CE.js.map +6 -0
- package/dist/chunk-BPGY4IE7.js +57 -0
- package/dist/chunk-BPGY4IE7.js.map +6 -0
- package/dist/chunk-CASGRYOF.js +21 -0
- package/dist/chunk-CASGRYOF.js.map +6 -0
- package/dist/chunk-CWWHR4FH.js +19 -0
- package/dist/chunk-CWWHR4FH.js.map +6 -0
- package/dist/chunk-D55XPY3T.js +1382 -0
- package/dist/chunk-D55XPY3T.js.map +6 -0
- package/dist/chunk-EOCV74B2.js +948 -0
- package/dist/chunk-EOCV74B2.js.map +6 -0
- package/dist/chunk-FBVNFWR6.js +437 -0
- package/dist/chunk-FBVNFWR6.js.map +6 -0
- package/dist/chunk-G4YN6XP5.js +14 -0
- package/dist/chunk-G4YN6XP5.js.map +6 -0
- package/dist/chunk-G6LJWROP.js +18 -0
- package/dist/chunk-G6LJWROP.js.map +6 -0
- package/dist/chunk-IHP6PV6X.js +49 -0
- package/dist/chunk-IHP6PV6X.js.map +6 -0
- package/dist/chunk-JWEFKKAD.js +24 -0
- package/dist/chunk-JWEFKKAD.js.map +6 -0
- package/dist/chunk-LWNB26KO.js +147 -0
- package/dist/chunk-LWNB26KO.js.map +6 -0
- package/dist/chunk-OVGXPRSY.js +20 -0
- package/dist/chunk-OVGXPRSY.js.map +6 -0
- package/dist/chunk-PDWCKWQF.js +453 -0
- package/dist/chunk-PDWCKWQF.js.map +6 -0
- package/dist/chunk-QHBCP4OB.js +44 -0
- package/dist/chunk-QHBCP4OB.js.map +6 -0
- package/dist/chunk-R4IUV5P5.js +664 -0
- package/dist/chunk-R4IUV5P5.js.map +6 -0
- package/dist/chunk-RM34N3KI.js +525 -0
- package/dist/chunk-RM34N3KI.js.map +6 -0
- package/dist/chunk-RTWUNV76.js +309 -0
- package/dist/chunk-RTWUNV76.js.map +6 -0
- package/dist/chunk-SMURF26I.js +23 -0
- package/dist/chunk-SMURF26I.js.map +6 -0
- package/dist/chunk-SXHULGL4.js +426 -0
- package/dist/chunk-SXHULGL4.js.map +6 -0
- package/dist/chunk-TIL35OWA.js +1959 -0
- package/dist/chunk-TIL35OWA.js.map +6 -0
- package/dist/chunk-VQS5YSCI.js +54 -0
- package/dist/chunk-VQS5YSCI.js.map +6 -0
- package/dist/chunk-XDCOWU5R.js +696 -0
- package/dist/chunk-XDCOWU5R.js.map +6 -0
- package/dist/chunk-XOPPGRUP.js +605 -0
- package/dist/chunk-XOPPGRUP.js.map +6 -0
- package/dist/cli.js +74 -1500
- package/dist/cli.js.map +6 -1
- package/dist/dev/dev-watcher.d.ts +5 -1
- package/dist/dev-command-3LX234N6.js +4900 -0
- package/dist/dev-command-3LX234N6.js.map +6 -0
- package/dist/git-credential-FUE3JE3T.js +163 -0
- package/dist/git-credential-FUE3JE3T.js.map +6 -0
- package/dist/install-ZML2TCDG.js +10694 -0
- package/dist/install-ZML2TCDG.js.map +6 -0
- package/dist/local-execute-SZV6XN4T.js +368 -0
- package/dist/local-execute-SZV6XN4T.js.map +6 -0
- package/dist/local-package-run-2TMCAZZ2.js +23 -0
- package/dist/local-package-run-2TMCAZZ2.js.map +6 -0
- package/dist/mcp-G2AWTIXR.js +21 -0
- package/dist/mcp-G2AWTIXR.js.map +6 -0
- package/dist/mock-dep-resolve-TVABDNR7.js +52 -0
- package/dist/mock-dep-resolve-TVABDNR7.js.map +6 -0
- package/dist/mock-fetch-gateway-B5TFGGQS.js +34 -0
- package/dist/mock-fetch-gateway-B5TFGGQS.js.map +6 -0
- package/dist/mock-local-deps-5SZT3PWT.js +197 -0
- package/dist/mock-local-deps-5SZT3PWT.js.map +6 -0
- package/dist/mock-server-SV2IKC4I.js +21 -0
- package/dist/mock-server-SV2IKC4I.js.map +6 -0
- package/dist/open-api-client-DVVMLY7P.js +42 -0
- package/dist/open-api-client-DVVMLY7P.js.map +6 -0
- package/dist/org-X7B5BI4R.js +132 -0
- package/dist/org-X7B5BI4R.js.map +6 -0
- package/dist/package-manifest-QH2RU64C.js +14 -0
- package/dist/package-manifest-QH2RU64C.js.map +6 -0
- package/dist/remote-execute-QMQDVHOY.js +110 -0
- package/dist/remote-execute-QMQDVHOY.js.map +6 -0
- package/dist/setup-git-5KCUBYPB.js +88 -0
- package/dist/setup-git-5KCUBYPB.js.map +6 -0
- package/dist/skill-ENPATRIW.js +43 -0
- package/dist/skill-ENPATRIW.js.map +6 -0
- package/dist/store-WTMRH527.js +48 -0
- package/dist/store-WTMRH527.js.map +6 -0
- package/dist/structured-error-C65GQ53Z.js +13 -0
- package/dist/structured-error-C65GQ53Z.js.map +6 -0
- package/dist/target-3QHY7JT4.js +45 -0
- package/dist/target-3QHY7JT4.js.map +6 -0
- package/dist/webapi-NTVP4BO3.js +2482 -0
- package/dist/webapi-NTVP4BO3.js.map +6 -0
- package/package.json +8 -8
- package/dist/add-mcp-install.js +0 -59
- package/dist/add-mcp-install.js.map +0 -1
- package/dist/api-token-store.js +0 -120
- package/dist/api-token-store.js.map +0 -1
- package/dist/api-token.js +0 -238
- package/dist/api-token.js.map +0 -1
- package/dist/auth-bootstrap.js +0 -373
- package/dist/auth-bootstrap.js.map +0 -1
- package/dist/auth.js +0 -386
- package/dist/auth.js.map +0 -1
- package/dist/capability-proxy.js +0 -527
- package/dist/capability-proxy.js.map +0 -1
- package/dist/credential-call-map.js +0 -155
- package/dist/credential-call-map.js.map +0 -1
- package/dist/credential-client-runtime-source.js +0 -9
- package/dist/credential-client-runtime-source.js.map +0 -1
- package/dist/credentialed-fetch-scan.js +0 -98
- package/dist/credentialed-fetch-scan.js.map +0 -1
- package/dist/defaults.js +0 -34
- package/dist/defaults.js.map +0 -1
- package/dist/detect-running-hosts.js +0 -13
- package/dist/detect-running-hosts.js.map +0 -1
- package/dist/dev/dev-assets.js +0 -202
- package/dist/dev/dev-assets.js.map +0 -1
- package/dist/dev/dev-bundler.js +0 -65
- package/dist/dev/dev-bundler.js.map +0 -1
- package/dist/dev/dev-events.js +0 -94
- package/dist/dev/dev-events.js.map +0 -1
- package/dist/dev/dev-port.js +0 -80
- package/dist/dev/dev-port.js.map +0 -1
- package/dist/dev/dev-protocol.js +0 -14
- package/dist/dev/dev-protocol.js.map +0 -1
- package/dist/dev/dev-registry.js +0 -95
- package/dist/dev/dev-registry.js.map +0 -1
- package/dist/dev/dev-watcher.js +0 -156
- package/dist/dev/dev-watcher.js.map +0 -1
- package/dist/dev/error-page.js +0 -64
- package/dist/dev/error-page.js.map +0 -1
- package/dist/dev/live-reload.js +0 -148
- package/dist/dev/live-reload.js.map +0 -1
- package/dist/dev/prebuild.js +0 -102
- package/dist/dev/prebuild.js.map +0 -1
- package/dist/dev/process-reaper.js +0 -151
- package/dist/dev/process-reaper.js.map +0 -1
- package/dist/dev/stack-trace.js +0 -56
- package/dist/dev/stack-trace.js.map +0 -1
- package/dist/dev/workerd-process.js +0 -118
- package/dist/dev/workerd-process.js.map +0 -1
- package/dist/dev-command.js +0 -672
- package/dist/dev-command.js.map +0 -1
- package/dist/discover-login-identity.js +0 -77
- package/dist/discover-login-identity.js.map +0 -1
- package/dist/discover-org.js +0 -62
- package/dist/discover-org.js.map +0 -1
- package/dist/git-credential.js +0 -147
- package/dist/git-credential.js.map +0 -1
- package/dist/help.js +0 -333
- package/dist/help.js.map +0 -1
- package/dist/host-catalog.js +0 -427
- package/dist/host-catalog.js.map +0 -1
- package/dist/host-config.js +0 -80
- package/dist/host-config.js.map +0 -1
- package/dist/http-error-body.js +0 -35
- package/dist/http-error-body.js.map +0 -1
- package/dist/install-hosts.js +0 -328
- package/dist/install-hosts.js.map +0 -1
- package/dist/install.js +0 -120
- package/dist/install.js.map +0 -1
- package/dist/invoke-passthrough.js +0 -60
- package/dist/invoke-passthrough.js.map +0 -1
- package/dist/local-bundle.js +0 -200
- package/dist/local-bundle.js.map +0 -1
- package/dist/local-execute-auth.js +0 -53
- package/dist/local-execute-auth.js.map +0 -1
- package/dist/local-execute.js +0 -338
- package/dist/local-execute.js.map +0 -1
- package/dist/local-gateway-fetch-forward.js +0 -135
- package/dist/local-gateway-fetch-forward.js.map +0 -1
- package/dist/local-host-runtime-surface.js +0 -75
- package/dist/local-host-runtime-surface.js.map +0 -1
- package/dist/local-package-graph.js +0 -405
- package/dist/local-package-graph.js.map +0 -1
- package/dist/local-package-run.js +0 -307
- package/dist/local-package-run.js.map +0 -1
- package/dist/local-runtime-bridge.js +0 -132
- package/dist/local-runtime-bridge.js.map +0 -1
- package/dist/local-runtime-source.js +0 -541
- package/dist/local-runtime-source.js.map +0 -1
- package/dist/login-callback-assets.js +0 -10
- package/dist/login-callback-assets.js.map +0 -1
- package/dist/login-callback-page.js +0 -362
- package/dist/login-callback-page.js.map +0 -1
- package/dist/mcp.js +0 -134
- package/dist/mcp.js.map +0 -1
- package/dist/mock/ensure-msw.js +0 -215
- package/dist/mock/ensure-msw.js.map +0 -1
- package/dist/mock/install-mock-fetch-shim.js +0 -36
- package/dist/mock/install-mock-fetch-shim.js.map +0 -1
- package/dist/mock/load-package-mocks.js +0 -136
- package/dist/mock/load-package-mocks.js.map +0 -1
- package/dist/mock/mock-fetch-gateway.js +0 -343
- package/dist/mock/mock-fetch-gateway.js.map +0 -1
- package/dist/mock/mock-gateway-fetch-shim.js +0 -104
- package/dist/mock/mock-gateway-fetch-shim.js.map +0 -1
- package/dist/mock/mock-server.js +0 -499
- package/dist/mock/mock-server.js.map +0 -1
- package/dist/mock/mock-storage.js +0 -186
- package/dist/mock/mock-storage.js.map +0 -1
- package/dist/mock/mock-supported.js +0 -63
- package/dist/mock/mock-supported.js.map +0 -1
- package/dist/mock-dep-resolve.js +0 -47
- package/dist/mock-dep-resolve.js.map +0 -1
- package/dist/mock-local-deps.js +0 -207
- package/dist/mock-local-deps.js.map +0 -1
- package/dist/network-error.js +0 -11
- package/dist/network-error.js.map +0 -1
- package/dist/node-engine.js +0 -21
- package/dist/node-engine.js.map +0 -1
- package/dist/oauth-provider.js +0 -107
- package/dist/oauth-provider.js.map +0 -1
- package/dist/onboarding-prompt.js +0 -15
- package/dist/onboarding-prompt.js.map +0 -1
- package/dist/open-api-client.js +0 -432
- package/dist/open-api-client.js.map +0 -1
- package/dist/open-url.js +0 -21
- package/dist/open-url.js.map +0 -1
- package/dist/org-resolve.js +0 -16
- package/dist/org-resolve.js.map +0 -1
- package/dist/org-slug.js +0 -11
- package/dist/org-slug.js.map +0 -1
- package/dist/org.js +0 -100
- package/dist/org.js.map +0 -1
- package/dist/package-app-dev.js +0 -905
- package/dist/package-app-dev.js.map +0 -1
- package/dist/package-collaborators.js +0 -179
- package/dist/package-collaborators.js.map +0 -1
- package/dist/package-info.js +0 -19
- package/dist/package-info.js.map +0 -1
- package/dist/package-local-runtime-source.js.map +0 -1
- package/dist/package-manifest.js +0 -364
- package/dist/package-manifest.js.map +0 -1
- package/dist/process-info.js +0 -14
- package/dist/process-info.js.map +0 -1
- package/dist/redact.js +0 -16
- package/dist/redact.js.map +0 -1
- package/dist/remote-execute.js +0 -108
- package/dist/remote-execute.js.map +0 -1
- package/dist/setup-git.js +0 -676
- package/dist/setup-git.js.map +0 -1
- package/dist/skill.js +0 -35
- package/dist/skill.js.map +0 -1
- package/dist/store.js +0 -597
- package/dist/store.js.map +0 -1
- package/dist/structured-error.js +0 -57
- package/dist/structured-error.js.map +0 -1
- package/dist/target.js +0 -52
- package/dist/target.js.map +0 -1
- package/dist/tool-result.js +0 -19
- package/dist/tool-result.js.map +0 -1
- package/dist/which.js +0 -22
- package/dist/which.js.map +0 -1
- package/dist/workerd-binary.js +0 -98
- package/dist/workerd-binary.js.map +0 -1
|
@@ -1,343 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Node-side mock outbound fetch gateway: match MSW handlers from
|
|
3
|
-
* `.kody/mocks.ts`, optionally passthrough allowlisted hosts to real network,
|
|
4
|
-
* otherwise fail closed with `unmocked_request` + a paste-ready handler stub.
|
|
5
|
-
*
|
|
6
|
-
* On `--target mock`, *every* outbound hop (ambient `fetch`, `credential().fetch`,
|
|
7
|
-
* `createAuthenticatedFetch` / `kody.authenticatedFetch`, `kody.gatewayFetch`,
|
|
8
|
-
* and `kody.gatewayFetchStream`) goes through this gateway. Packages without
|
|
9
|
-
* `.kody/mocks.ts` use public-network passthrough for ambient/gatewayFetch
|
|
10
|
-
* (authenticatedFetch still fails closed). With `.kody/mocks.ts`, unmatched
|
|
11
|
-
* hosts fail closed with `unmocked_request`.
|
|
12
|
-
*/
|
|
13
|
-
import { StructuredCliError } from '../structured-error.js';
|
|
14
|
-
import { importMsw, mswPackageSpec, } from './ensure-msw.js';
|
|
15
|
-
import { loadPackageMocks } from './load-package-mocks.js';
|
|
16
|
-
export function parsePassthroughHosts(raw) {
|
|
17
|
-
if (!raw?.trim())
|
|
18
|
-
return [];
|
|
19
|
-
return [
|
|
20
|
-
...new Set(raw
|
|
21
|
-
.split(',')
|
|
22
|
-
.map((part) => part.trim().toLowerCase())
|
|
23
|
-
.filter(Boolean)),
|
|
24
|
-
];
|
|
25
|
-
}
|
|
26
|
-
export function createMockFetchGateway(input) {
|
|
27
|
-
const passthroughHosts = input.passthroughHosts ?? [];
|
|
28
|
-
const allowPrivateNetwork = input.allowPrivateNetwork === true;
|
|
29
|
-
const passthroughAll = input.passthroughAll === true;
|
|
30
|
-
const fetchFn = input.fetchFn ?? fetch;
|
|
31
|
-
const mode = passthroughAll ? 'passthrough-all' : 'msw';
|
|
32
|
-
return {
|
|
33
|
-
enabled: !passthroughAll,
|
|
34
|
-
mode,
|
|
35
|
-
handlers: input.handlers,
|
|
36
|
-
passthroughHosts,
|
|
37
|
-
allowPrivateNetwork,
|
|
38
|
-
handle: async (args, signal) => {
|
|
39
|
-
const request = readGatewayRequest(args);
|
|
40
|
-
return await dispatchMockGatewayFetch({
|
|
41
|
-
handlers: input.handlers,
|
|
42
|
-
passthroughHosts,
|
|
43
|
-
allowPrivateNetwork,
|
|
44
|
-
passthroughAll,
|
|
45
|
-
request,
|
|
46
|
-
fetchFn,
|
|
47
|
-
signal,
|
|
48
|
-
msw: input.msw,
|
|
49
|
-
});
|
|
50
|
-
},
|
|
51
|
-
handleAuthenticatedFetch: async (args, signal) => {
|
|
52
|
-
const request = readAuthenticatedFetchRequest(args);
|
|
53
|
-
// Authenticated / OAuth hops never get a fake stub. Without an MSW
|
|
54
|
-
// match (or explicit --passthrough host), fail closed.
|
|
55
|
-
return await dispatchMockGatewayFetch({
|
|
56
|
-
handlers: input.handlers,
|
|
57
|
-
passthroughHosts,
|
|
58
|
-
allowPrivateNetwork,
|
|
59
|
-
passthroughAll: false,
|
|
60
|
-
request,
|
|
61
|
-
fetchFn,
|
|
62
|
-
signal,
|
|
63
|
-
msw: input.msw,
|
|
64
|
-
});
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
export async function dispatchMockGatewayFetch(input) {
|
|
69
|
-
const method = (input.request.method ?? 'GET').toUpperCase();
|
|
70
|
-
const url = String(input.request.url ?? '');
|
|
71
|
-
if (!url) {
|
|
72
|
-
throw new StructuredCliError({
|
|
73
|
-
code: 'unmocked_request',
|
|
74
|
-
message: 'Mock gatewayFetch requires request.url.',
|
|
75
|
-
target: 'mock',
|
|
76
|
-
fix: 'Pass an absolute URL from ambient fetch.',
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
let parsed;
|
|
80
|
-
try {
|
|
81
|
-
parsed = new URL(url);
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
throw new StructuredCliError({
|
|
85
|
-
code: 'unmocked_request',
|
|
86
|
-
message: `Mock gatewayFetch URL is not absolute: ${JSON.stringify(url)}.`,
|
|
87
|
-
target: 'mock',
|
|
88
|
-
where: `${method} ${url}`,
|
|
89
|
-
fix: 'Use an absolute https:// URL in package code under --target mock.',
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
const passthrough = input.passthroughAll === true ||
|
|
93
|
-
hostMatchesPassthrough(parsed.hostname, input.passthroughHosts);
|
|
94
|
-
// MSW handlers may target private hosts without --allow-private-network.
|
|
95
|
-
// Real network (passthrough) still requires the flag for private/local hosts.
|
|
96
|
-
if (!passthrough && input.handlers.length > 0) {
|
|
97
|
-
const headers = new Headers(input.request.headers ?? {});
|
|
98
|
-
const body = input.request.bodyBase64 != null && input.request.bodyBase64 !== ''
|
|
99
|
-
? Buffer.from(input.request.bodyBase64, 'base64')
|
|
100
|
-
: undefined;
|
|
101
|
-
const requestInit = {
|
|
102
|
-
method,
|
|
103
|
-
headers,
|
|
104
|
-
...(body !== undefined && method !== 'GET' && method !== 'HEAD'
|
|
105
|
-
? { body }
|
|
106
|
-
: {}),
|
|
107
|
-
signal: input.signal,
|
|
108
|
-
};
|
|
109
|
-
const request = new Request(parsed.href, requestInit);
|
|
110
|
-
const { getResponse, isPassthroughResponse } = await importMsw(input.msw);
|
|
111
|
-
const response = await getResponse([...input.handlers], request);
|
|
112
|
-
if (response && !isPassthroughResponse(response)) {
|
|
113
|
-
return await serializeResponse(response);
|
|
114
|
-
}
|
|
115
|
-
throw unmockedRequestError(method, parsed.href);
|
|
116
|
-
}
|
|
117
|
-
if (passthrough) {
|
|
118
|
-
assertOutboundAllowed(parsed, input.allowPrivateNetwork);
|
|
119
|
-
return await realNetworkFetch({
|
|
120
|
-
request: input.request,
|
|
121
|
-
method,
|
|
122
|
-
url: parsed.href,
|
|
123
|
-
fetchFn: input.fetchFn ?? fetch,
|
|
124
|
-
signal: input.signal,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
assertOutboundAllowed(parsed, input.allowPrivateNetwork);
|
|
128
|
-
throw unmockedRequestError(method, parsed.href);
|
|
129
|
-
}
|
|
130
|
-
function readGatewayRequest(args) {
|
|
131
|
-
const record = args && typeof args === 'object' && !Array.isArray(args)
|
|
132
|
-
? args
|
|
133
|
-
: {};
|
|
134
|
-
const nested = record.request && typeof record.request === 'object' && !Array.isArray(record.request)
|
|
135
|
-
? record.request
|
|
136
|
-
: record;
|
|
137
|
-
return {
|
|
138
|
-
url: typeof nested.url === 'string' ? nested.url : undefined,
|
|
139
|
-
method: typeof nested.method === 'string' ? nested.method : undefined,
|
|
140
|
-
headers: nested.headers && typeof nested.headers === 'object' && !Array.isArray(nested.headers)
|
|
141
|
-
? nested.headers
|
|
142
|
-
: undefined,
|
|
143
|
-
bodyBase64: typeof nested.bodyBase64 === 'string' ? nested.bodyBase64 : undefined,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
function readAuthenticatedFetchRequest(args) {
|
|
147
|
-
const record = args && typeof args === 'object' && !Array.isArray(args)
|
|
148
|
-
? args
|
|
149
|
-
: {};
|
|
150
|
-
const nested = record.request && typeof record.request === 'object' && !Array.isArray(record.request)
|
|
151
|
-
? record.request
|
|
152
|
-
: record;
|
|
153
|
-
return {
|
|
154
|
-
url: typeof nested.url === 'string' ? nested.url : undefined,
|
|
155
|
-
method: typeof nested.method === 'string' ? nested.method : undefined,
|
|
156
|
-
headers: nested.headers && typeof nested.headers === 'object' && !Array.isArray(nested.headers)
|
|
157
|
-
? nested.headers
|
|
158
|
-
: undefined,
|
|
159
|
-
bodyBase64: typeof nested.bodyBase64 === 'string' ? nested.bodyBase64 : undefined,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
export function hostMatchesPassthrough(hostname, hosts) {
|
|
163
|
-
const target = hostname.toLowerCase();
|
|
164
|
-
return hosts.some((entry) => {
|
|
165
|
-
const normalized = entry.trim().toLowerCase();
|
|
166
|
-
if (!normalized)
|
|
167
|
-
return false;
|
|
168
|
-
if (normalized.startsWith('*.')) {
|
|
169
|
-
const suffix = normalized.slice(1);
|
|
170
|
-
return target.endsWith(suffix) && target.length > suffix.length;
|
|
171
|
-
}
|
|
172
|
-
return target === normalized;
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
/** Refuse private/local hosts unless `--allow-private-network` (clear error). */
|
|
176
|
-
export function assertOutboundAllowed(url, allowPrivateNetwork) {
|
|
177
|
-
if (allowPrivateNetwork)
|
|
178
|
-
return;
|
|
179
|
-
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
180
|
-
throw new StructuredCliError({
|
|
181
|
-
code: 'unmocked_request',
|
|
182
|
-
message: `Mock outbound fetch refused for non-http(s) URL ${url.href}.`,
|
|
183
|
-
target: 'mock',
|
|
184
|
-
where: url.href,
|
|
185
|
-
fix: 'Use http(s) URLs, or mock this request in .kody/mocks.ts.',
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
if (isPrivateOrLocalHost(url.hostname)) {
|
|
189
|
-
throw new StructuredCliError({
|
|
190
|
-
code: 'unmocked_request',
|
|
191
|
-
message: `Blocked private/local fetch to ${JSON.stringify(url.hostname)} under --target mock.`,
|
|
192
|
-
target: 'mock',
|
|
193
|
-
where: url.href,
|
|
194
|
-
fix: 'Pass --allow-private-network, or mock this host in .kody/mocks.ts instead of hitting the private network.',
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
export function isPrivateOrLocalHost(hostname) {
|
|
199
|
-
const host = hostname.toLowerCase();
|
|
200
|
-
return (host === 'localhost' ||
|
|
201
|
-
host === '127.0.0.1' ||
|
|
202
|
-
host === '::1' ||
|
|
203
|
-
host === '[::1]' ||
|
|
204
|
-
host.endsWith('.local') ||
|
|
205
|
-
/^10\./.test(host) ||
|
|
206
|
-
/^192\.168\./.test(host) ||
|
|
207
|
-
/^172\.(1[6-9]|2\d|3[0-1])\./.test(host));
|
|
208
|
-
}
|
|
209
|
-
async function realNetworkFetch(input) {
|
|
210
|
-
const headers = new Headers(input.request.headers ?? {});
|
|
211
|
-
// Credentials stay fake on mock — never forward opaque credential handles
|
|
212
|
-
// or Authorization that would look like a real secret placement.
|
|
213
|
-
headers.delete('x-kody-credential-client');
|
|
214
|
-
const body = input.request.bodyBase64 != null && input.request.bodyBase64 !== ''
|
|
215
|
-
? Buffer.from(input.request.bodyBase64, 'base64')
|
|
216
|
-
: undefined;
|
|
217
|
-
const response = await input.fetchFn(input.url, {
|
|
218
|
-
method: input.method,
|
|
219
|
-
headers,
|
|
220
|
-
...(body !== undefined && input.method !== 'GET' && input.method !== 'HEAD'
|
|
221
|
-
? { body }
|
|
222
|
-
: {}),
|
|
223
|
-
signal: input.signal,
|
|
224
|
-
redirect: 'manual',
|
|
225
|
-
});
|
|
226
|
-
return await serializeResponse(response);
|
|
227
|
-
}
|
|
228
|
-
async function serializeResponse(response) {
|
|
229
|
-
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
230
|
-
return {
|
|
231
|
-
status: response.status,
|
|
232
|
-
statusText: response.statusText,
|
|
233
|
-
headers: Object.fromEntries(response.headers.entries()),
|
|
234
|
-
bodyBase64: Buffer.from(bytes).toString('base64'),
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
export function unmockedRequestError(method, url) {
|
|
238
|
-
const stub = buildHandlerStub(method, url);
|
|
239
|
-
const handlerLine = buildHandlerLine(method, url);
|
|
240
|
-
return new StructuredCliError({
|
|
241
|
-
code: 'unmocked_request',
|
|
242
|
-
message: `Unmocked ${method} ${url} under --target mock.`,
|
|
243
|
-
target: 'mock',
|
|
244
|
-
where: `${method} ${url}`,
|
|
245
|
-
fix: `Create or edit .kody/mocks.ts in the package root (next to package.json), ` +
|
|
246
|
-
`or pass --passthrough ${safeHost(url)} for real network without secrets.\n\n` +
|
|
247
|
-
`Ready-to-paste .kody/mocks.ts:\n\n${stub}\n\n` +
|
|
248
|
-
`Or append this handler to an existing handlers array:\n\n${handlerLine}`,
|
|
249
|
-
details: { method, url, handlerStub: stub, handlerLine, mocksPath: '.kody/mocks.ts' },
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
/** Single MSW handler line for pasting into an existing `handlers` array. */
|
|
253
|
-
export function buildHandlerLine(method, url) {
|
|
254
|
-
const httpMethod = httpMethodForStub(method);
|
|
255
|
-
return (` http.${httpMethod}(${JSON.stringify(url)}, () =>\n` +
|
|
256
|
-
` HttpResponse.json({ /* TODO */ }, { status: 200 }),\n` +
|
|
257
|
-
` ),`);
|
|
258
|
-
}
|
|
259
|
-
export function buildHandlerStub(method, url) {
|
|
260
|
-
const httpMethod = httpMethodForStub(method);
|
|
261
|
-
return [
|
|
262
|
-
`import { http, HttpResponse } from 'msw'`,
|
|
263
|
-
``,
|
|
264
|
-
`export const handlers = [`,
|
|
265
|
-
` http.${httpMethod}(${JSON.stringify(url)}, () =>`,
|
|
266
|
-
` HttpResponse.json({ /* TODO */ }, { status: 200 }),`,
|
|
267
|
-
` ),`,
|
|
268
|
-
`]`,
|
|
269
|
-
].join('\n');
|
|
270
|
-
}
|
|
271
|
-
function httpMethodForStub(method) {
|
|
272
|
-
const verb = method.toLowerCase();
|
|
273
|
-
return ['get', 'post', 'put', 'patch', 'delete', 'options', 'head'].includes(verb)
|
|
274
|
-
? verb
|
|
275
|
-
: 'all';
|
|
276
|
-
}
|
|
277
|
-
function safeHost(url) {
|
|
278
|
-
try {
|
|
279
|
-
return new URL(url).hostname;
|
|
280
|
-
}
|
|
281
|
-
catch {
|
|
282
|
-
return 'example.com';
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Bridge interceptor: handle `kody.gatewayFetch`, `kody.gatewayFetchStream`,
|
|
287
|
-
* and `kody.authenticatedFetch` when a mock gateway is active (always on
|
|
288
|
-
* `--target mock`). Stream hops buffer through the same MSW path.
|
|
289
|
-
*/
|
|
290
|
-
export function tryHandleMockGatewayFetchCall(input) {
|
|
291
|
-
if (!input.gateway)
|
|
292
|
-
return null;
|
|
293
|
-
const pathKey = input.path.join('.');
|
|
294
|
-
if (pathKey === 'kody.gatewayFetch' || pathKey === 'kody.gatewayFetchStream') {
|
|
295
|
-
return input.gateway.handle(input.args[0], input.signal);
|
|
296
|
-
}
|
|
297
|
-
if (pathKey === 'kody.authenticatedFetch') {
|
|
298
|
-
return input.gateway.handleAuthenticatedFetch(input.args[0], input.signal);
|
|
299
|
-
}
|
|
300
|
-
return null;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Always build a mock fetch gateway for `--target mock`.
|
|
304
|
-
* With `.kody/mocks.ts`: MSW fail-closed (+ `--passthrough`).
|
|
305
|
-
* Without: public-network passthrough for ambient/gatewayFetch; authenticatedFetch
|
|
306
|
-
* still fails closed (no placeholder stubs).
|
|
307
|
-
*/
|
|
308
|
-
export async function resolveMockFetchGateway(input) {
|
|
309
|
-
if (input.target !== 'mock')
|
|
310
|
-
return undefined;
|
|
311
|
-
const msw = {
|
|
312
|
-
...input.msw,
|
|
313
|
-
onInstall: (spec) => {
|
|
314
|
-
input.onStatus?.(`Installing ${spec} for --target mock…`);
|
|
315
|
-
input.msw?.onInstall?.(spec);
|
|
316
|
-
},
|
|
317
|
-
};
|
|
318
|
-
const loaded = input.packageRoot
|
|
319
|
-
? await loadPackageMocks(input.packageRoot, msw)
|
|
320
|
-
: null;
|
|
321
|
-
if (loaded) {
|
|
322
|
-
input.onStatus?.(`Loaded ${loaded.handlers.length} MSW handler${loaded.handlers.length === 1 ? '' : 's'} from .kody/mocks.ts (outbound fetch fail-closed on mock).`);
|
|
323
|
-
return createMockFetchGateway({
|
|
324
|
-
handlers: loaded.handlers,
|
|
325
|
-
passthroughHosts: input.passthroughHosts,
|
|
326
|
-
allowPrivateNetwork: input.allowPrivateNetwork,
|
|
327
|
-
passthroughAll: false,
|
|
328
|
-
msw,
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
if (input.passthroughHosts?.length) {
|
|
332
|
-
input.onStatus?.(`No .kody/mocks.ts — --passthrough hosts are unused until you add MSW handlers (ambient fetch uses public-network passthrough on mock).`);
|
|
333
|
-
}
|
|
334
|
-
return createMockFetchGateway({
|
|
335
|
-
handlers: [],
|
|
336
|
-
passthroughHosts: input.passthroughHosts,
|
|
337
|
-
allowPrivateNetwork: input.allowPrivateNetwork,
|
|
338
|
-
passthroughAll: true,
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
/** Exported for tests / docs that mention the on-demand pin. */
|
|
342
|
-
export { mswPackageSpec };
|
|
343
|
-
//# sourceMappingURL=mock-fetch-gateway.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock-fetch-gateway.js","sourceRoot":"","sources":["../../src/mock/mock-fetch-gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mock-only workerd side-effect module (flat name
|
|
3
|
-
* `.__kody_mock_gateway_fetch__.js` — see install-mock-fetch-shim.ts).
|
|
4
|
-
* Wraps ambient `fetch` so every outbound request hops through the Node bridge
|
|
5
|
-
* as `kody.gatewayFetch` (MSW matching / passthrough / unmocked_request).
|
|
6
|
-
* Origin's `.__kody_virtual__/runtime.js` stays for CAF / packageStorage.
|
|
7
|
-
*/
|
|
8
|
-
import { localWorkerModuleNames } from '../local-runtime-source.js';
|
|
9
|
-
/**
|
|
10
|
-
* Source for the CLI-owned mock gateway-fetch shim. Side-effect imported before
|
|
11
|
-
* user code; fetch calls happen after `__kodyInstallLocalBridge`.
|
|
12
|
-
*
|
|
13
|
-
* Registered under a flat module name so bare `"kody:runtime"` resolves to the
|
|
14
|
-
* host module (path-like names like `.__kody_virtual__/runtime.js` path-join).
|
|
15
|
-
*/
|
|
16
|
-
export function createMockGatewayFetchShimSource() {
|
|
17
|
-
return `
|
|
18
|
-
import { kody } from ${JSON.stringify(localWorkerModuleNames.runtime)};
|
|
19
|
-
|
|
20
|
-
const __kodyNativeFetch = globalThis.fetch.bind(globalThis);
|
|
21
|
-
const __kodyNullBodyStatuses = new Set([101, 103, 204, 205, 304]);
|
|
22
|
-
|
|
23
|
-
function __kodyBytesToBase64(bytes) {
|
|
24
|
-
let binary = '';
|
|
25
|
-
for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
|
|
26
|
-
return btoa(binary);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function __kodyBase64ToBytes(value) {
|
|
30
|
-
const binary = atob(String(value ?? ''));
|
|
31
|
-
const bytes = new Uint8Array(binary.length);
|
|
32
|
-
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
33
|
-
return bytes;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async function __kodyBodyToBytes(body) {
|
|
37
|
-
if (body == null) return null;
|
|
38
|
-
if (typeof body === 'string') return new TextEncoder().encode(body);
|
|
39
|
-
if (body instanceof Uint8Array) return body;
|
|
40
|
-
if (body instanceof ArrayBuffer) return new Uint8Array(body);
|
|
41
|
-
if (ArrayBuffer.isView(body)) {
|
|
42
|
-
return new Uint8Array(body.buffer, body.byteOffset, body.byteLength);
|
|
43
|
-
}
|
|
44
|
-
if (typeof Blob !== 'undefined' && body instanceof Blob) {
|
|
45
|
-
return new Uint8Array(await body.arrayBuffer());
|
|
46
|
-
}
|
|
47
|
-
if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {
|
|
48
|
-
return new TextEncoder().encode(body.toString());
|
|
49
|
-
}
|
|
50
|
-
if (body && typeof body.getReader === 'function') {
|
|
51
|
-
return new Uint8Array(await new Response(body).arrayBuffer());
|
|
52
|
-
}
|
|
53
|
-
if (typeof FormData !== 'undefined' && body instanceof FormData) {
|
|
54
|
-
throw new Error(
|
|
55
|
-
'Mock fetch gateway does not support FormData bodies yet; use Uint8Array, Blob, or string.',
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
throw new Error('Mock fetch gateway could not serialize the request body.');
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
globalThis.fetch = async (input, init) => {
|
|
62
|
-
let url;
|
|
63
|
-
let method = 'GET';
|
|
64
|
-
let headers = {};
|
|
65
|
-
let bodyBytes = null;
|
|
66
|
-
if (typeof input === 'string' || input instanceof URL) {
|
|
67
|
-
url = String(input);
|
|
68
|
-
method = String(init?.method ?? 'GET');
|
|
69
|
-
headers = Object.fromEntries(new Headers(init?.headers).entries());
|
|
70
|
-
if (init?.body != null) bodyBytes = await __kodyBodyToBytes(init.body);
|
|
71
|
-
} else {
|
|
72
|
-
const merged = new Request(input, init);
|
|
73
|
-
url = merged.url;
|
|
74
|
-
method = merged.method;
|
|
75
|
-
headers = Object.fromEntries(merged.headers.entries());
|
|
76
|
-
if (method !== 'GET' && method !== 'HEAD') {
|
|
77
|
-
bodyBytes = new Uint8Array(await merged.arrayBuffer());
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
const result = await kody.gatewayFetch({
|
|
81
|
-
request: {
|
|
82
|
-
url,
|
|
83
|
-
method,
|
|
84
|
-
headers,
|
|
85
|
-
...(bodyBytes != null ? { bodyBase64: __kodyBytesToBase64(bodyBytes) } : {}),
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
const bytes = __kodyBase64ToBytes(result.bodyBase64 ?? '');
|
|
89
|
-
return new Response(
|
|
90
|
-
__kodyNullBodyStatuses.has(result.status) ? null : bytes,
|
|
91
|
-
{
|
|
92
|
-
status: result.status,
|
|
93
|
-
statusText: result.statusText ?? '',
|
|
94
|
-
headers: result.headers ?? {},
|
|
95
|
-
},
|
|
96
|
-
);
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
// Retain a reference so workerd keeps the binding available for debugging.
|
|
100
|
-
void __kodyNativeFetch;
|
|
101
|
-
export {};
|
|
102
|
-
`.trimStart();
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=mock-gateway-fetch-shim.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock-gateway-fetch-shim.js","sourceRoot":"","sources":["../../src/mock/mock-gateway-fetch-shim.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAEnE;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC;IAC/C,OAAO;uBACe,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoFpE,CAAC,SAAS,EAAE,CAAA;AACb,CAAC"}
|