@kodycodes/cli 1.26.2 → 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-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 -162
- 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 -151
- 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 -676
- 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 -922
- 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
|
@@ -0,0 +1,664 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
describeNetworkError
|
|
4
|
+
} from "./chunk-G4YN6XP5.js";
|
|
5
|
+
import {
|
|
6
|
+
readPackageVersion
|
|
7
|
+
} from "./chunk-G6LJWROP.js";
|
|
8
|
+
import {
|
|
9
|
+
capabilityProxyForbiddenMessage,
|
|
10
|
+
currentStoredTokenLifetimeAlias,
|
|
11
|
+
featureDisabledMessage,
|
|
12
|
+
insufficientScopeMessage,
|
|
13
|
+
isScopedApiToken,
|
|
14
|
+
readInsufficientScopeDetails,
|
|
15
|
+
rejectedOauthBearerMessage
|
|
16
|
+
} from "./chunk-RTWUNV76.js";
|
|
17
|
+
import {
|
|
18
|
+
apiTokenEnvVar,
|
|
19
|
+
cliName
|
|
20
|
+
} from "./chunk-IHP6PV6X.js";
|
|
21
|
+
|
|
22
|
+
// src/credential-call-map.ts
|
|
23
|
+
var credentialCallMapFeature = "credential-call-map";
|
|
24
|
+
var credentialCallMapLimits = {
|
|
25
|
+
maxKeys: 32,
|
|
26
|
+
maxPicksPerKey: 16,
|
|
27
|
+
maxTextLength: 100
|
|
28
|
+
};
|
|
29
|
+
var keyPattern = new RegExp(
|
|
30
|
+
`^[A-Za-z0-9][A-Za-z0-9._-]{0,${credentialCallMapLimits.maxTextLength - 1}}$`
|
|
31
|
+
);
|
|
32
|
+
function parseCredentialFlag(raw) {
|
|
33
|
+
const eq = raw.indexOf("=");
|
|
34
|
+
if (eq <= 0) {
|
|
35
|
+
throw new Error(
|
|
36
|
+
`Invalid --credential ${JSON.stringify(raw)}. Use --credential key=name, --credential key=org:name, or --credential key= for none.`
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
const key = raw.slice(0, eq);
|
|
40
|
+
const value = raw.slice(eq + 1);
|
|
41
|
+
assertCredentialMapKey(key);
|
|
42
|
+
if (value === "") return { key, picks: [], empty: true };
|
|
43
|
+
return { key, picks: [parseCredentialPick(value)], empty: false };
|
|
44
|
+
}
|
|
45
|
+
function parseCredentialFlags(flags) {
|
|
46
|
+
if (!flags || flags.length === 0) return void 0;
|
|
47
|
+
const collected = /* @__PURE__ */ new Map();
|
|
48
|
+
const emptyKeys = /* @__PURE__ */ new Set();
|
|
49
|
+
for (const flag of flags) {
|
|
50
|
+
const { key, picks, empty } = parseCredentialFlag(flag);
|
|
51
|
+
if (empty) {
|
|
52
|
+
if ((collected.get(key)?.length ?? 0) > 0) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
`Invalid --credential for ${key}: cannot combine an empty pick (none) with a named pick.`
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
emptyKeys.add(key);
|
|
58
|
+
collected.set(key, []);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (emptyKeys.has(key)) {
|
|
62
|
+
throw new Error(
|
|
63
|
+
`Invalid --credential for ${key}: cannot combine an empty pick (none) with a named pick.`
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
const existing = collected.get(key) ?? [];
|
|
67
|
+
existing.push(...picks);
|
|
68
|
+
if (existing.length > credentialCallMapLimits.maxPicksPerKey) {
|
|
69
|
+
throw new Error(
|
|
70
|
+
`A credentials map takes at most ${credentialCallMapLimits.maxPicksPerKey} picks per key (${key}).`
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
collected.set(key, existing);
|
|
74
|
+
}
|
|
75
|
+
if (collected.size > credentialCallMapLimits.maxKeys) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`A credentials map takes at most ${credentialCallMapLimits.maxKeys} keys.`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
const map = {};
|
|
81
|
+
for (const [key, picks] of collected) {
|
|
82
|
+
if (emptyKeys.has(key)) {
|
|
83
|
+
map[key] = [];
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
map[key] = picks.length === 1 ? picks[0] : picks;
|
|
87
|
+
}
|
|
88
|
+
return map;
|
|
89
|
+
}
|
|
90
|
+
function parseCredentialPick(value) {
|
|
91
|
+
const trimmed = value.trim();
|
|
92
|
+
const colon = trimmed.indexOf(":");
|
|
93
|
+
if (colon > 0) {
|
|
94
|
+
const prefix = trimmed.slice(0, colon);
|
|
95
|
+
if (prefix === "org" || prefix === "personal") {
|
|
96
|
+
const name = trimmed.slice(colon + 1).trim();
|
|
97
|
+
assertCredentialText(name, "credential name");
|
|
98
|
+
return { name, scope: prefix };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
assertCredentialText(trimmed, "credential name");
|
|
102
|
+
return trimmed;
|
|
103
|
+
}
|
|
104
|
+
function assertCredentialMapKey(key) {
|
|
105
|
+
if (!keyPattern.test(key)) {
|
|
106
|
+
throw new Error(
|
|
107
|
+
`Invalid --credential key ${JSON.stringify(key)}. A key starts with a letter or digit and uses letters, digits, dots, underscores, or hyphens (max ${credentialCallMapLimits.maxTextLength}).`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function assertCredentialText(value, label) {
|
|
112
|
+
if (!value || value.length > credentialCallMapLimits.maxTextLength) {
|
|
113
|
+
throw new Error(
|
|
114
|
+
`Invalid --credential ${label} ${JSON.stringify(value)}. Use 1\u2013${credentialCallMapLimits.maxTextLength} characters.`
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function sessionSupportsCredentialCallMap(features) {
|
|
119
|
+
return Array.isArray(features) && features.includes(credentialCallMapFeature);
|
|
120
|
+
}
|
|
121
|
+
function missingCredentialCallMapFeatureMessage() {
|
|
122
|
+
return "This Kody host does not support --credential yet.";
|
|
123
|
+
}
|
|
124
|
+
function formatCredentialFlagSuggestion(key, pick) {
|
|
125
|
+
if (typeof pick === "string") {
|
|
126
|
+
return `--credential ${key}=${pick}`;
|
|
127
|
+
}
|
|
128
|
+
if (Array.isArray(pick)) {
|
|
129
|
+
if (pick.length === 0) return `--credential ${key}=`;
|
|
130
|
+
return pick.map((entry) => formatCredentialFlagSuggestion(key, entry)).filter((line) => line !== null).join("\n");
|
|
131
|
+
}
|
|
132
|
+
if (pick && typeof pick === "object") {
|
|
133
|
+
const record = pick;
|
|
134
|
+
if (typeof record.name !== "string" || !record.name) return null;
|
|
135
|
+
if (record.scope === "org" || record.scope === "personal") {
|
|
136
|
+
return `--credential ${key}=${record.scope}:${record.name}`;
|
|
137
|
+
}
|
|
138
|
+
return `--credential ${key}=${record.name}`;
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
function formatCredentialClientError(error) {
|
|
143
|
+
const code = typeof error.code === "string" && error.code ? error.code : "credential_error";
|
|
144
|
+
const message = typeof error.message === "string" && error.message ? error.message : "The credential could not be used.";
|
|
145
|
+
const lines = [`${code}: ${message}`];
|
|
146
|
+
const retries = Array.isArray(error.retryWith) ? error.retryWith : [];
|
|
147
|
+
for (const entry of retries) {
|
|
148
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) continue;
|
|
149
|
+
const credentials = entry.credentials;
|
|
150
|
+
if (!credentials || typeof credentials !== "object" || Array.isArray(credentials)) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
for (const [key, pick] of Object.entries(credentials)) {
|
|
154
|
+
const suggestion = formatCredentialFlagSuggestion(key, pick);
|
|
155
|
+
if (suggestion) {
|
|
156
|
+
for (const line of suggestion.split("\n")) {
|
|
157
|
+
lines.push(` retry: ${line}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return lines.join("\n");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// src/capability-proxy.ts
|
|
166
|
+
import { Readable } from "node:stream";
|
|
167
|
+
var capabilityProxySessionPath = "v1/capability-proxy/session";
|
|
168
|
+
var capabilityProxyCallPath = "v1/capability-proxy/call";
|
|
169
|
+
var capabilityProxyGatewayFetchPath = "v1/capability-proxy/gateway-fetch";
|
|
170
|
+
var gatewayFetchUrlHeaderName = "X-Kody-Gateway-Url";
|
|
171
|
+
var gatewayFetchMethodHeaderName = "X-Kody-Gateway-Method";
|
|
172
|
+
var gatewayFetchPackageIdHeaderName = "X-Kody-Gateway-Package-Id";
|
|
173
|
+
var gatewayFetchHeadersHeaderName = "X-Kody-Gateway-Headers";
|
|
174
|
+
var secretResolutionHeaderName = "x-kody-secret-resolution";
|
|
175
|
+
var capabilityProxyGatewayDeadlineMs = 5 * 6e4;
|
|
176
|
+
var capabilityProxyHttpTimeoutMs = 7 * 6e4;
|
|
177
|
+
var capabilityProxyConnectTimeoutMs = 1e4;
|
|
178
|
+
function nodeUsesEnvProxy(env = process.env, execArgv = process.execArgv) {
|
|
179
|
+
if (env.NODE_USE_ENV_PROXY === "1") return true;
|
|
180
|
+
const flags = [...execArgv, ...(env.NODE_OPTIONS ?? "").split(/\s+/)];
|
|
181
|
+
return flags.includes("--use-env-proxy");
|
|
182
|
+
}
|
|
183
|
+
var envProxyAgentMinimumNode = { 22: 21, 24: 5 };
|
|
184
|
+
function nodeAgentHonorsEnvProxy(version = process.versions.node) {
|
|
185
|
+
const [major = 0, minor = 0] = version.split(".").map(Number);
|
|
186
|
+
const minimumMinor = envProxyAgentMinimumNode[major];
|
|
187
|
+
if (minimumMinor === void 0) return major > 24;
|
|
188
|
+
return minor >= minimumMinor;
|
|
189
|
+
}
|
|
190
|
+
function createCapabilityProxyFetch(options = {}) {
|
|
191
|
+
const timeoutMs = options.timeoutMs ?? capabilityProxyHttpTimeoutMs;
|
|
192
|
+
const connectTimeoutMs = options.connectTimeoutMs ?? capabilityProxyConnectTimeoutMs;
|
|
193
|
+
const useEnvProxy = options.useEnvProxy ?? nodeUsesEnvProxy();
|
|
194
|
+
if (useEnvProxy && !nodeAgentHonorsEnvProxy()) {
|
|
195
|
+
throw new Error(
|
|
196
|
+
`Node ${process.version} cannot route CapabilityProxy requests through HTTP_PROXY / HTTPS_PROXY: env-proxy support needs Node 22.21 or 24.5 and later. Upgrade Node or unset NODE_USE_ENV_PROXY / --use-env-proxy.`
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
let transports = null;
|
|
200
|
+
return async (input, init = {}) => {
|
|
201
|
+
const url = input instanceof URL ? input : new URL(input instanceof Request ? input.url : input);
|
|
202
|
+
transports ??= loadTransports(useEnvProxy);
|
|
203
|
+
const transport = (await transports)[url.protocol];
|
|
204
|
+
if (!transport) {
|
|
205
|
+
throw new TypeError(`Unsupported protocol for the Kody API: ${url.protocol}`);
|
|
206
|
+
}
|
|
207
|
+
const body = init.body;
|
|
208
|
+
if (body !== void 0 && body !== null && typeof body !== "string") {
|
|
209
|
+
throw new TypeError("CapabilityProxy requests send string bodies.");
|
|
210
|
+
}
|
|
211
|
+
return new Promise((resolve, reject) => {
|
|
212
|
+
const request = transport.request(
|
|
213
|
+
url,
|
|
214
|
+
{
|
|
215
|
+
agent: transport.agent,
|
|
216
|
+
method: init.method ?? "GET",
|
|
217
|
+
headers: Object.fromEntries(new Headers(init.headers))
|
|
218
|
+
},
|
|
219
|
+
(response) => {
|
|
220
|
+
clearTimeout(connectTimer);
|
|
221
|
+
const chunks = [];
|
|
222
|
+
response.on("data", (chunk) => chunks.push(chunk));
|
|
223
|
+
response.on("error", reject);
|
|
224
|
+
response.on("end", () => resolve(toResponse(response, Buffer.concat(chunks))));
|
|
225
|
+
}
|
|
226
|
+
);
|
|
227
|
+
const connectTimer = setTimeout(() => {
|
|
228
|
+
request.destroy(
|
|
229
|
+
new Error(
|
|
230
|
+
`Kody API did not connect within ${connectTimeoutMs}ms (${url.pathname}).`
|
|
231
|
+
)
|
|
232
|
+
);
|
|
233
|
+
}, connectTimeoutMs);
|
|
234
|
+
request.on("socket", (socket) => {
|
|
235
|
+
const clearConnectTimer = () => clearTimeout(connectTimer);
|
|
236
|
+
if (url.protocol === "https:") {
|
|
237
|
+
if (tlsHandshakePending(socket) === false) {
|
|
238
|
+
clearConnectTimer();
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
socket.once("secureConnect", clearConnectTimer);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (!socket.connecting) {
|
|
245
|
+
clearConnectTimer();
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
socket.once("connect", clearConnectTimer);
|
|
249
|
+
});
|
|
250
|
+
request.setTimeout(
|
|
251
|
+
timeoutMs,
|
|
252
|
+
() => request.destroy(
|
|
253
|
+
new Error(`Kody API sent nothing for ${timeoutMs}ms (${url.pathname}).`)
|
|
254
|
+
)
|
|
255
|
+
);
|
|
256
|
+
request.on("error", (error) => {
|
|
257
|
+
clearTimeout(connectTimer);
|
|
258
|
+
reject(error);
|
|
259
|
+
});
|
|
260
|
+
const { signal } = init;
|
|
261
|
+
if (signal) {
|
|
262
|
+
const abort = () => {
|
|
263
|
+
clearTimeout(connectTimer);
|
|
264
|
+
request.destroy(abortError(signal.reason));
|
|
265
|
+
};
|
|
266
|
+
if (signal.aborted) {
|
|
267
|
+
abort();
|
|
268
|
+
} else {
|
|
269
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
270
|
+
request.once("close", () => signal.removeEventListener("abort", abort));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
request.end(body ?? void 0);
|
|
274
|
+
});
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
async function loadTransports(useEnvProxy) {
|
|
278
|
+
const [http, https] = await Promise.all([import("node:http"), import("node:https")]);
|
|
279
|
+
const agentOptions = { keepAlive: true, ...useEnvProxy ? { proxyEnv: process.env } : {} };
|
|
280
|
+
return {
|
|
281
|
+
"http:": { agent: unrefFreeSockets(new http.Agent(agentOptions)), request: http.request },
|
|
282
|
+
"https:": { agent: unrefFreeSockets(new https.Agent(agentOptions)), request: https.request }
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
function unrefFreeSockets(agent) {
|
|
286
|
+
agent.on("free", (socket) => {
|
|
287
|
+
socket.unref();
|
|
288
|
+
});
|
|
289
|
+
return agent;
|
|
290
|
+
}
|
|
291
|
+
function tlsHandshakePending(socket) {
|
|
292
|
+
if (!("secureConnecting" in socket)) return null;
|
|
293
|
+
return socket.secureConnecting;
|
|
294
|
+
}
|
|
295
|
+
function abortError(reason) {
|
|
296
|
+
if (reason instanceof Error) return reason;
|
|
297
|
+
return new DOMException(
|
|
298
|
+
typeof reason === "string" ? reason : "This operation was aborted",
|
|
299
|
+
"AbortError"
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
function toResponse(response, body) {
|
|
303
|
+
const headers = new Headers();
|
|
304
|
+
for (const [name, value] of Object.entries(response.headers)) {
|
|
305
|
+
if (Array.isArray(value)) {
|
|
306
|
+
for (const entry of value) headers.append(name, entry);
|
|
307
|
+
} else if (value !== void 0) {
|
|
308
|
+
headers.set(name, value);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
const status = response.statusCode ?? 0;
|
|
312
|
+
const bodyless = status === 204 || status === 205 || status === 304;
|
|
313
|
+
return new Response(bodyless ? null : body, {
|
|
314
|
+
status,
|
|
315
|
+
statusText: response.statusMessage ?? "",
|
|
316
|
+
headers
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
var defaultCapabilityProxyFetch = null;
|
|
320
|
+
function capabilityProxyFetch() {
|
|
321
|
+
defaultCapabilityProxyFetch ??= createCapabilityProxyFetch();
|
|
322
|
+
return defaultCapabilityProxyFetch;
|
|
323
|
+
}
|
|
324
|
+
var CapabilityProxyError = class extends Error {
|
|
325
|
+
status;
|
|
326
|
+
code;
|
|
327
|
+
constructor(message, options = {}) {
|
|
328
|
+
super(message);
|
|
329
|
+
this.name = "CapabilityProxyError";
|
|
330
|
+
this.status = options.status ?? null;
|
|
331
|
+
this.code = options.code ?? null;
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
var loopbackHosts = /* @__PURE__ */ new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
335
|
+
function assertTokenSafeApiUrl(apiUrl) {
|
|
336
|
+
let url;
|
|
337
|
+
try {
|
|
338
|
+
url = new URL(apiUrl);
|
|
339
|
+
} catch {
|
|
340
|
+
throw new Error(`Invalid Kody API URL: ${apiUrl}`);
|
|
341
|
+
}
|
|
342
|
+
if (url.protocol === "https:") return;
|
|
343
|
+
if (url.protocol === "http:" && loopbackHosts.has(url.hostname)) return;
|
|
344
|
+
throw new Error(
|
|
345
|
+
`Refusing to send the API token to ${url.origin}: use https (plain http is only allowed for localhost).`
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
function capabilityProxyUrl(apiUrl, path) {
|
|
349
|
+
const base = apiUrl.endsWith("/") ? apiUrl : `${apiUrl}/`;
|
|
350
|
+
return new URL(path, base);
|
|
351
|
+
}
|
|
352
|
+
function withOrgQuery(url, org) {
|
|
353
|
+
if (org) url.searchParams.set("org", org);
|
|
354
|
+
return url;
|
|
355
|
+
}
|
|
356
|
+
async function openCapabilityProxySession(input) {
|
|
357
|
+
const url = withOrgQuery(
|
|
358
|
+
capabilityProxyUrl(input.apiUrl, capabilityProxySessionPath),
|
|
359
|
+
input.org
|
|
360
|
+
);
|
|
361
|
+
const response = await send(input, url, { method: "GET" });
|
|
362
|
+
const body = await readJson(response);
|
|
363
|
+
if (!response.ok) {
|
|
364
|
+
throw describeFailure(response.status, body, url, "session", input.token);
|
|
365
|
+
}
|
|
366
|
+
const record = isRecord(body) ? body : {};
|
|
367
|
+
return {
|
|
368
|
+
scopes: Array.isArray(record.scopes) ? record.scopes.filter((scope) => typeof scope === "string") : [],
|
|
369
|
+
expiresAt: typeof record.expiresAt === "string" ? record.expiresAt : null,
|
|
370
|
+
features: Array.isArray(record.features) ? record.features.filter((feature) => typeof feature === "string") : []
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
async function callCapabilityProxy(input) {
|
|
374
|
+
const url = withOrgQuery(
|
|
375
|
+
capabilityProxyUrl(input.apiUrl, capabilityProxyCallPath),
|
|
376
|
+
input.org
|
|
377
|
+
);
|
|
378
|
+
const payload = { path: input.path, args: input.args };
|
|
379
|
+
if (input.conversationId !== void 0) payload.conversationId = input.conversationId;
|
|
380
|
+
if (input.credentials !== void 0) payload.credentials = input.credentials;
|
|
381
|
+
const response = await send(input, url, {
|
|
382
|
+
method: "POST",
|
|
383
|
+
headers: { "content-type": "application/json" },
|
|
384
|
+
body: JSON.stringify(payload)
|
|
385
|
+
});
|
|
386
|
+
const body = await readJson(response);
|
|
387
|
+
if (!response.ok) {
|
|
388
|
+
throw describeFailure(response.status, body, url, "call", input.token);
|
|
389
|
+
}
|
|
390
|
+
const failure = readErrorBody(body);
|
|
391
|
+
if (failure) {
|
|
392
|
+
throw new CapabilityProxyError(failure.message, { status: response.status, code: failure.code });
|
|
393
|
+
}
|
|
394
|
+
return isRecord(body) ? body.result : void 0;
|
|
395
|
+
}
|
|
396
|
+
async function callCapabilityProxyGatewayFetchStream(input) {
|
|
397
|
+
assertTokenSafeApiUrl(input.apiUrl);
|
|
398
|
+
const url = withOrgQuery(
|
|
399
|
+
capabilityProxyUrl(input.apiUrl, capabilityProxyGatewayFetchPath),
|
|
400
|
+
input.org
|
|
401
|
+
);
|
|
402
|
+
const timeoutMs = capabilityProxyHttpTimeoutMs;
|
|
403
|
+
const connectTimeoutMs = capabilityProxyConnectTimeoutMs;
|
|
404
|
+
const useEnvProxy = nodeUsesEnvProxy();
|
|
405
|
+
if (useEnvProxy && !nodeAgentHonorsEnvProxy()) {
|
|
406
|
+
throw new Error(
|
|
407
|
+
`Node ${process.version} cannot route CapabilityProxy requests through HTTP_PROXY / HTTPS_PROXY: env-proxy support needs Node 22.21 or 24.5 and later. Upgrade Node or unset NODE_USE_ENV_PROXY / --use-env-proxy.`
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
const transports = await loadTransports(useEnvProxy);
|
|
411
|
+
const transport = transports[url.protocol];
|
|
412
|
+
if (!transport) {
|
|
413
|
+
throw new TypeError(`Unsupported protocol for the Kody API: ${url.protocol}`);
|
|
414
|
+
}
|
|
415
|
+
const headers = {
|
|
416
|
+
accept: "*/*",
|
|
417
|
+
authorization: `Bearer ${input.token}`,
|
|
418
|
+
"user-agent": `${cliName}/${readPackageVersion()}`,
|
|
419
|
+
[gatewayFetchUrlHeaderName]: input.gateway.url
|
|
420
|
+
};
|
|
421
|
+
if (input.gateway.method) {
|
|
422
|
+
headers[gatewayFetchMethodHeaderName] = input.gateway.method;
|
|
423
|
+
}
|
|
424
|
+
if (input.gateway.packageId) {
|
|
425
|
+
headers[gatewayFetchPackageIdHeaderName] = input.gateway.packageId;
|
|
426
|
+
}
|
|
427
|
+
if (input.gateway.headers && Object.keys(input.gateway.headers).length > 0) {
|
|
428
|
+
headers[gatewayFetchHeadersHeaderName] = JSON.stringify(input.gateway.headers);
|
|
429
|
+
}
|
|
430
|
+
if (input.gateway.secretResolution) {
|
|
431
|
+
headers[secretResolutionHeaderName] = input.gateway.secretResolution;
|
|
432
|
+
}
|
|
433
|
+
if (input.gateway.contentType) {
|
|
434
|
+
headers["content-type"] = input.gateway.contentType;
|
|
435
|
+
}
|
|
436
|
+
if (input.contentLength) {
|
|
437
|
+
headers["content-length"] = input.contentLength;
|
|
438
|
+
}
|
|
439
|
+
const signal = input.signal;
|
|
440
|
+
return await new Promise((resolve, reject) => {
|
|
441
|
+
const request = transport.request(
|
|
442
|
+
url,
|
|
443
|
+
{
|
|
444
|
+
agent: transport.agent,
|
|
445
|
+
method: "POST",
|
|
446
|
+
headers
|
|
447
|
+
},
|
|
448
|
+
(response) => {
|
|
449
|
+
clearTimeout(connectTimer);
|
|
450
|
+
resolve(nodeIncomingToWebResponse(response));
|
|
451
|
+
}
|
|
452
|
+
);
|
|
453
|
+
const connectTimer = setTimeout(() => {
|
|
454
|
+
request.destroy(
|
|
455
|
+
new Error(
|
|
456
|
+
`Kody API did not connect within ${connectTimeoutMs}ms (${url.pathname}).`
|
|
457
|
+
)
|
|
458
|
+
);
|
|
459
|
+
}, connectTimeoutMs);
|
|
460
|
+
request.on("socket", (socket) => {
|
|
461
|
+
const clearConnectTimer = () => clearTimeout(connectTimer);
|
|
462
|
+
if (url.protocol === "https:") {
|
|
463
|
+
if (tlsHandshakePending(socket) === false) {
|
|
464
|
+
clearConnectTimer();
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
socket.once("secureConnect", clearConnectTimer);
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
if (!socket.connecting) {
|
|
471
|
+
clearConnectTimer();
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
socket.once("connect", clearConnectTimer);
|
|
475
|
+
});
|
|
476
|
+
request.setTimeout(
|
|
477
|
+
timeoutMs,
|
|
478
|
+
() => request.destroy(
|
|
479
|
+
new Error(`Kody API sent nothing for ${timeoutMs}ms (${url.pathname}).`)
|
|
480
|
+
)
|
|
481
|
+
);
|
|
482
|
+
request.on("error", (error) => {
|
|
483
|
+
clearTimeout(connectTimer);
|
|
484
|
+
reject(
|
|
485
|
+
error instanceof CapabilityProxyError ? error : new CapabilityProxyError(
|
|
486
|
+
`Could not reach the Kody API at ${url.origin} (${describeNetworkError(error)}). Check --api-url / KODY_API_URL and your network.`
|
|
487
|
+
)
|
|
488
|
+
);
|
|
489
|
+
});
|
|
490
|
+
if (signal) {
|
|
491
|
+
const abort = () => {
|
|
492
|
+
clearTimeout(connectTimer);
|
|
493
|
+
request.destroy(abortError(signal.reason));
|
|
494
|
+
};
|
|
495
|
+
if (signal.aborted) {
|
|
496
|
+
abort();
|
|
497
|
+
} else {
|
|
498
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
499
|
+
request.once("close", () => signal.removeEventListener("abort", abort));
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
if (input.body) {
|
|
503
|
+
input.body.pipe(request);
|
|
504
|
+
input.body.on("error", (error) => {
|
|
505
|
+
clearTimeout(connectTimer);
|
|
506
|
+
request.destroy(error);
|
|
507
|
+
});
|
|
508
|
+
} else {
|
|
509
|
+
request.end();
|
|
510
|
+
}
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
function nodeIncomingToWebResponse(response) {
|
|
514
|
+
const headers = new Headers();
|
|
515
|
+
for (const [name, value] of Object.entries(response.headers)) {
|
|
516
|
+
if (Array.isArray(value)) {
|
|
517
|
+
for (const entry of value) headers.append(name, entry);
|
|
518
|
+
} else if (value !== void 0) {
|
|
519
|
+
headers.set(name, value);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
const status = response.statusCode ?? 0;
|
|
523
|
+
const bodyless = status === 101 || status === 103 || status === 204 || status === 205 || status === 304;
|
|
524
|
+
if (bodyless) {
|
|
525
|
+
response.resume();
|
|
526
|
+
return new Response(null, {
|
|
527
|
+
status,
|
|
528
|
+
statusText: response.statusMessage ?? "",
|
|
529
|
+
headers
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
return new Response(
|
|
533
|
+
Readable.toWeb(response),
|
|
534
|
+
{
|
|
535
|
+
status,
|
|
536
|
+
statusText: response.statusMessage ?? "",
|
|
537
|
+
headers
|
|
538
|
+
}
|
|
539
|
+
);
|
|
540
|
+
}
|
|
541
|
+
async function checkCredentialCallMap(input) {
|
|
542
|
+
const args = {};
|
|
543
|
+
if (input.strict === true) args.strict = true;
|
|
544
|
+
if (input.packageId !== void 0) args.packageId = input.packageId;
|
|
545
|
+
const result = await callCapabilityProxy({
|
|
546
|
+
apiUrl: input.apiUrl,
|
|
547
|
+
token: input.token,
|
|
548
|
+
fetchFn: input.fetchFn,
|
|
549
|
+
signal: input.signal,
|
|
550
|
+
path: ["kody", "credentialClientCheck"],
|
|
551
|
+
args: [args],
|
|
552
|
+
conversationId: input.conversationId,
|
|
553
|
+
credentials: input.credentials
|
|
554
|
+
});
|
|
555
|
+
if (!isRecord(result)) {
|
|
556
|
+
throw new CapabilityProxyError("credentialClientCheck returned an unexpected result.");
|
|
557
|
+
}
|
|
558
|
+
if (result.ok === false) {
|
|
559
|
+
const error = isRecord(result.error) ? result.error : {};
|
|
560
|
+
const code = typeof error.code === "string" ? error.code : "credential_error";
|
|
561
|
+
throw new CapabilityProxyError(formatCredentialClientError(error), { code });
|
|
562
|
+
}
|
|
563
|
+
const value = isRecord(result.value) ? result.value : null;
|
|
564
|
+
const warnings = Array.isArray(value?.warnings) ? value.warnings.filter((warning) => typeof warning === "string") : [];
|
|
565
|
+
return { warnings };
|
|
566
|
+
}
|
|
567
|
+
async function send(input, url, init) {
|
|
568
|
+
const fetchFn = input.fetchFn ?? capabilityProxyFetch();
|
|
569
|
+
try {
|
|
570
|
+
return await fetchFn(url, {
|
|
571
|
+
...init,
|
|
572
|
+
signal: input.signal,
|
|
573
|
+
headers: {
|
|
574
|
+
...init.headers,
|
|
575
|
+
accept: "application/json",
|
|
576
|
+
authorization: `Bearer ${input.token}`,
|
|
577
|
+
"user-agent": `${cliName}/${readPackageVersion()}`
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
} catch (error) {
|
|
581
|
+
const reason = describeNetworkError(error);
|
|
582
|
+
throw new CapabilityProxyError(
|
|
583
|
+
`Could not reach the Kody API at ${url.origin} (${reason}). Check --api-url / KODY_API_URL and your network.`
|
|
584
|
+
);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
async function readJson(response) {
|
|
588
|
+
const text = await response.text();
|
|
589
|
+
if (!text) return null;
|
|
590
|
+
try {
|
|
591
|
+
return JSON.parse(text);
|
|
592
|
+
} catch {
|
|
593
|
+
return text;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
function readErrorBody(body) {
|
|
597
|
+
if (!isRecord(body) || body.error == null) return null;
|
|
598
|
+
const { error } = body;
|
|
599
|
+
if (typeof error === "string") return { code: null, message: error };
|
|
600
|
+
if (isRecord(error)) {
|
|
601
|
+
const code = typeof error.code === "string" ? error.code : null;
|
|
602
|
+
const message = typeof error.message === "string" ? error.message : code ?? JSON.stringify(error);
|
|
603
|
+
return { code, message };
|
|
604
|
+
}
|
|
605
|
+
return { code: null, message: String(error) };
|
|
606
|
+
}
|
|
607
|
+
function describeFailure(status, body, url, stage, token) {
|
|
608
|
+
const failure = readErrorBody(body);
|
|
609
|
+
const code = failure?.code ?? null;
|
|
610
|
+
const detail = failure?.message ? ` Server said: ${failure.message}` : "";
|
|
611
|
+
if (status === 401) {
|
|
612
|
+
const message = isScopedApiToken(token) ? `Kody rejected the API token (expired, revoked, or malformed). Mint a fresh scoped token and pass it with --token or ${apiTokenEnvVar}.${detail}` : `${rejectedOauthBearerMessage()}${detail}`;
|
|
613
|
+
return new CapabilityProxyError(message, { status, code });
|
|
614
|
+
}
|
|
615
|
+
if (code === "feature_disabled") {
|
|
616
|
+
return new CapabilityProxyError(`${featureDisabledMessage()}${detail}`, { status, code });
|
|
617
|
+
}
|
|
618
|
+
if (code === "insufficient_scope") {
|
|
619
|
+
return new CapabilityProxyError(
|
|
620
|
+
`${insufficientScopeMessage({
|
|
621
|
+
...readInsufficientScopeDetails(body),
|
|
622
|
+
currentLifetime: currentStoredTokenLifetimeAlias(url.origin)
|
|
623
|
+
})}${detail}`,
|
|
624
|
+
{ status, code }
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
if (status === 403 && stage === "session") {
|
|
628
|
+
return new CapabilityProxyError(
|
|
629
|
+
capabilityProxyForbiddenMessage({ code, serverMessage: failure?.message }),
|
|
630
|
+
{ status, code }
|
|
631
|
+
);
|
|
632
|
+
}
|
|
633
|
+
if (status === 404 && stage === "session") {
|
|
634
|
+
return new CapabilityProxyError(
|
|
635
|
+
`CapabilityProxy was not found at ${url.href}. Local execute may not be deployed on this Kody API yet; check --api-url / KODY_API_URL.`,
|
|
636
|
+
{ status, code }
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
return new CapabilityProxyError(
|
|
640
|
+
failure?.message ?? `Kody API request failed with HTTP ${status} (${url.pathname}).`,
|
|
641
|
+
{ status, code }
|
|
642
|
+
);
|
|
643
|
+
}
|
|
644
|
+
function isRecord(value) {
|
|
645
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
export {
|
|
649
|
+
parseCredentialFlags,
|
|
650
|
+
sessionSupportsCredentialCallMap,
|
|
651
|
+
missingCredentialCallMapFeatureMessage,
|
|
652
|
+
gatewayFetchUrlHeaderName,
|
|
653
|
+
gatewayFetchMethodHeaderName,
|
|
654
|
+
gatewayFetchPackageIdHeaderName,
|
|
655
|
+
gatewayFetchHeadersHeaderName,
|
|
656
|
+
secretResolutionHeaderName,
|
|
657
|
+
assertTokenSafeApiUrl,
|
|
658
|
+
capabilityProxyUrl,
|
|
659
|
+
openCapabilityProxySession,
|
|
660
|
+
callCapabilityProxy,
|
|
661
|
+
callCapabilityProxyGatewayFetchStream,
|
|
662
|
+
checkCredentialCallMap
|
|
663
|
+
};
|
|
664
|
+
//# sourceMappingURL=chunk-R4IUV5P5.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/credential-call-map.ts", "../src/capability-proxy.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|