@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
package/dist/api-token.js
DELETED
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { loadStoredApiToken, } from './api-token-store.js';
|
|
2
|
-
import { apiTokenEnvVar, defaultApiUrl, defaultMcpUrl, } from './defaults.js';
|
|
3
|
-
/** ADR 0056 `short` absolute max (24h), used only to infer hint lifetime. */
|
|
4
|
-
const shortAbsoluteLifetimeMs = 24 * 60 * 60 * 1000;
|
|
5
|
-
/** Platform tracking for login OAuth as CapabilityProxy / package-graph Bearer. */
|
|
6
|
-
export const localExecuteOauthPlatformIssueUrl = 'https://github.com/kentcdodds/kody/issues/2812';
|
|
7
|
-
const loopbackHosts = new Set(['localhost', '127.0.0.1', '[::1]', '::1']);
|
|
8
|
-
function tryParseUrl(value) {
|
|
9
|
-
try {
|
|
10
|
-
return new URL(value);
|
|
11
|
-
}
|
|
12
|
-
catch {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
function isWorkersDevHostname(hostname) {
|
|
17
|
-
return hostname.endsWith('.workers.dev');
|
|
18
|
-
}
|
|
19
|
-
/** Whether a login OAuth bearer may be sent to this API origin. */
|
|
20
|
-
export function isPairedApiUrl(apiUrl = defaultApiUrl, mcpUrl = defaultMcpUrl) {
|
|
21
|
-
const api = tryParseUrl(apiUrl);
|
|
22
|
-
const mcp = tryParseUrl(mcpUrl);
|
|
23
|
-
if (!api || !mcp)
|
|
24
|
-
return false;
|
|
25
|
-
const apiIsLoopback = loopbackHosts.has(api.hostname.toLowerCase());
|
|
26
|
-
const mcpIsLoopback = loopbackHosts.has(mcp.hostname.toLowerCase());
|
|
27
|
-
if (apiIsLoopback && mcpIsLoopback) {
|
|
28
|
-
return ['http:', 'https:'].includes(api.protocol) &&
|
|
29
|
-
['http:', 'https:'].includes(mcp.protocol);
|
|
30
|
-
}
|
|
31
|
-
if (api.protocol !== 'https:' || mcp.protocol !== 'https:')
|
|
32
|
-
return false;
|
|
33
|
-
const apiIsWorkersDev = isWorkersDevHostname(api.hostname);
|
|
34
|
-
const mcpIsWorkersDev = isWorkersDevHostname(mcp.hostname);
|
|
35
|
-
if (apiIsWorkersDev || mcpIsWorkersDev) {
|
|
36
|
-
if (!apiIsWorkersDev || !mcpIsWorkersDev)
|
|
37
|
-
return false;
|
|
38
|
-
const apiLabels = api.hostname.toLowerCase().split('.');
|
|
39
|
-
const mcpLabels = mcp.hostname.toLowerCase().split('.');
|
|
40
|
-
return (apiLabels.length === mcpLabels.length &&
|
|
41
|
-
apiLabels.slice(1).join('.') === mcpLabels.slice(1).join('.') &&
|
|
42
|
-
apiLabels[0] === `${mcpLabels[0]}-api`);
|
|
43
|
-
}
|
|
44
|
-
return api.hostname.toLowerCase() === `api.${mcp.hostname.toLowerCase()}`;
|
|
45
|
-
}
|
|
46
|
-
export function expectedPairedApiOrigin(mcpUrl) {
|
|
47
|
-
const mcp = tryParseUrl(mcpUrl);
|
|
48
|
-
if (!mcp)
|
|
49
|
-
return 'a paired API origin';
|
|
50
|
-
if (loopbackHosts.has(mcp.hostname.toLowerCase())) {
|
|
51
|
-
return 'a loopback API origin';
|
|
52
|
-
}
|
|
53
|
-
const hostname = mcp.hostname.toLowerCase();
|
|
54
|
-
if (isWorkersDevHostname(hostname)) {
|
|
55
|
-
const labels = hostname.split('.');
|
|
56
|
-
labels[0] = `${labels[0]}-api`;
|
|
57
|
-
return `https://${labels.join('.')}`;
|
|
58
|
-
}
|
|
59
|
-
return `https://api.${hostname}`;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Scoped Open API / CapabilityProxy token (`kody_at_…`). Same source for
|
|
63
|
-
* `execute --local`, token-only cloud execute, and Open API search/whoami.
|
|
64
|
-
*/
|
|
65
|
-
export function readApiToken(values = {}, env = process.env) {
|
|
66
|
-
const token = (values.token ?? env[apiTokenEnvVar] ?? '').trim();
|
|
67
|
-
return token.length > 0 ? token : null;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Resolve a scoped API token without falling back to `kody login` OAuth.
|
|
71
|
-
* Priority: `--token` / `KODY_API_TOKEN` → stored bootstrap/API token.
|
|
72
|
-
*/
|
|
73
|
-
export function resolveScopedApiToken(input = {}) {
|
|
74
|
-
const token = readApiToken(input.tokenValues, input.env);
|
|
75
|
-
if (token)
|
|
76
|
-
return token;
|
|
77
|
-
const apiUrl = input.apiUrl || defaultApiUrl;
|
|
78
|
-
const loadApi = input.loadApiToken ?? loadStoredApiToken;
|
|
79
|
-
return loadApi(apiUrl, input.apiTokenBackend, input.apiTokenResolution)?.token ?? null;
|
|
80
|
-
}
|
|
81
|
-
/** True when the bearer looks like a minted Open API token (not MCP OAuth). */
|
|
82
|
-
export function isScopedApiToken(token) {
|
|
83
|
-
return token.startsWith('kody_at_');
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* How to mint a scoped token for CI/headless. Interactive agents on MCP should
|
|
87
|
-
* prefer `cliCredentialBootstrap` → `auth bootstrap` instead.
|
|
88
|
-
*/
|
|
89
|
-
export function apiTokenMintInstructions() {
|
|
90
|
-
return `For CI/headless only: mint with the Kody MCP \`api\` tool \`tokenCreate\` (include \`org:execute\` plus the capability scopes this command needs, e.g. \`package:execute\` / \`integration:read\`) and pass --token or set ${apiTokenEnvVar}.`;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* CapabilityProxy refused the token outright (not a missing scope): one line
|
|
94
|
-
* saying so, then one line with the command that fixes it.
|
|
95
|
-
*/
|
|
96
|
-
export function capabilityProxyForbiddenMessage(input) {
|
|
97
|
-
const reason = input.serverMessage ? `: ${input.serverMessage}` : '';
|
|
98
|
-
return (`The API token is not allowed to use CapabilityProxy (${input.code ?? 'forbidden'})${reason}.\n` +
|
|
99
|
-
`Fix: run \`npx @kodycodes/cli login\` (agents on Kody MCP: ${cliBootstrapInstructions()}; CI: tokenCreate with \`org:execute\`, passed via --token or ${apiTokenEnvVar}).`);
|
|
100
|
-
}
|
|
101
|
-
/** Preferred interactive path for agents already on Kody MCP (ADR 0056). */
|
|
102
|
-
export function cliBootstrapInstructions(lifetime = 'short') {
|
|
103
|
-
return `From MCP, call \`cliCredentialBootstrap\` (MCP \`api\` / \`kody.cliCredentialBootstrap\`), then run \`npx @kodycodes/cli auth bootstrap --code <kody_bc_…> --lifetime ${lifetime}\``;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Infer short|long from a stored token's absolute expiry. Tokens that can live
|
|
107
|
-
* longer than the `short` absolute max are treated as `long` so
|
|
108
|
-
* `insufficient_scope` hints remint with the same lifetime class.
|
|
109
|
-
*/
|
|
110
|
-
export function inferCliTokenLifetimeAlias(stored, nowMs = Date.now()) {
|
|
111
|
-
if (!stored)
|
|
112
|
-
return 'short';
|
|
113
|
-
const absoluteMs = Date.parse(stored.maxExpiresAt ?? '') || Date.parse(stored.expiresAt ?? '');
|
|
114
|
-
if (!Number.isFinite(absoluteMs))
|
|
115
|
-
return 'short';
|
|
116
|
-
return absoluteMs - nowMs > shortAbsoluteLifetimeMs ? 'long' : 'short';
|
|
117
|
-
}
|
|
118
|
-
/** `--lifetime short|long` fragment for auth bootstrap hint commands. */
|
|
119
|
-
export function cliBootstrapLifetimeFlags(lifetime = 'short') {
|
|
120
|
-
return `--lifetime ${lifetime}`;
|
|
121
|
-
}
|
|
122
|
-
/** `{ lifetime: "short"|"long" }` for cliCredentialBootstrap hint calls. */
|
|
123
|
-
export function cliBootstrapLifetimeMintFields(lifetime = 'short') {
|
|
124
|
-
return { lifetime };
|
|
125
|
-
}
|
|
126
|
-
/** Lifetime hint from the stored API token for `apiUrl`, defaulting to short. */
|
|
127
|
-
export function currentStoredTokenLifetimeAlias(apiUrl = defaultApiUrl, nowMs = Date.now(), loadApiToken = loadStoredApiToken) {
|
|
128
|
-
return inferCliTokenLifetimeAlias(loadApiToken(apiUrl), nowMs);
|
|
129
|
-
}
|
|
130
|
-
/** Token-only Open API paths (search / whoami / cloud token execute) with no token. */
|
|
131
|
-
export function missingApiTokenMessage(purpose) {
|
|
132
|
-
return `${purpose} needs a scoped Kody API token. ${cliBootstrapInstructions()}, or ${apiTokenMintInstructions()}`;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* `execute --local` with neither env/`--token`, stored bootstrap token, nor
|
|
136
|
-
* `kody login`. Prefer bootstrap (MCP) → login → tokenCreate (CI).
|
|
137
|
-
*/
|
|
138
|
-
export function missingLocalExecuteAuthMessage(purpose = 'execute --local') {
|
|
139
|
-
return `${purpose} needs auth. ${cliBootstrapInstructions()}; or run \`kody login\`; or for CI/headless, ${apiTokenMintInstructions()}`;
|
|
140
|
-
}
|
|
141
|
-
/** Cloud search / whoami / execute when the process has neither a session nor a token. */
|
|
142
|
-
export function missingCliAuthMessage() {
|
|
143
|
-
return `Not logged in, and no API token is set. ${cliBootstrapInstructions()}; or run \`kody login\` for browser OAuth (search, whoami, cloud execute, and login-backed \`execute --local\`); or for CI/headless, ${apiTokenMintInstructions()}`;
|
|
144
|
-
}
|
|
145
|
-
/** 401 when CapabilityProxy rejected a non-`kody_at_` bearer (typically CLI OAuth). */
|
|
146
|
-
export function rejectedOauthBearerMessage() {
|
|
147
|
-
return `Kody rejected the bearer from \`kody login\`: the Open API still accepts only scoped \`kody_at_…\` API tokens on CapabilityProxy / package-graph (not MCP OAuth). See ${localExecuteOauthPlatformIssueUrl}. Until that lands, ${apiTokenMintInstructions()}`;
|
|
148
|
-
}
|
|
149
|
-
export function readInsufficientScopeDetails(body) {
|
|
150
|
-
const details = isRecord(body) && isRecord(body.error) && isRecord(body.error.details)
|
|
151
|
-
? body.error.details
|
|
152
|
-
: null;
|
|
153
|
-
if (!details)
|
|
154
|
-
return { requiredScope: null, mintScopes: null, denial: null };
|
|
155
|
-
const requiredScope = readNonEmptyString(details.required_scope) ??
|
|
156
|
-
readNonEmptyString(details.required_permission) ??
|
|
157
|
-
readStringList(details.required_scopes)?.join(', ') ??
|
|
158
|
-
null;
|
|
159
|
-
return {
|
|
160
|
-
requiredScope,
|
|
161
|
-
mintScopes: readStringList(details.mint_scopes),
|
|
162
|
-
denial: readNonEmptyString(details.denial),
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/** `npx @kodycodes/cli auth bootstrap --lifetime short --scopes a,b` */
|
|
166
|
-
export function cliBootstrapScopesCommand(scopes, lifetimeFlags = 'short') {
|
|
167
|
-
const flags = lifetimeFlags === 'short' || lifetimeFlags === 'long'
|
|
168
|
-
? cliBootstrapLifetimeFlags(lifetimeFlags)
|
|
169
|
-
: lifetimeFlags;
|
|
170
|
-
return `npx @kodycodes/cli auth bootstrap ${flags} --scopes ${scopes.join(',')}`;
|
|
171
|
-
}
|
|
172
|
-
/** `cliCredentialBootstrap({ lifetime: "short", scopes: ["a", "b"] })` */
|
|
173
|
-
export function cliBootstrapMintCall(scopes, lifetime = 'short') {
|
|
174
|
-
const fieldsRecord = lifetime === 'short' || lifetime === 'long'
|
|
175
|
-
? cliBootstrapLifetimeMintFields(lifetime)
|
|
176
|
-
: lifetime;
|
|
177
|
-
const fields = [
|
|
178
|
-
...Object.entries(fieldsRecord).map(([key, value]) => `${key}: ${JSON.stringify(value)}`),
|
|
179
|
-
`scopes: [${scopes.map((scope) => JSON.stringify(scope)).join(', ')}]`,
|
|
180
|
-
];
|
|
181
|
-
return `cliCredentialBootstrap({ ${fields.join(', ')} })`;
|
|
182
|
-
}
|
|
183
|
-
export function insufficientScopeMessage(input) {
|
|
184
|
-
const required = input.requiredScope ?? null;
|
|
185
|
-
const lifetime = input.currentLifetime === 'long' || input.currentLifetime === 'short'
|
|
186
|
-
? input.currentLifetime
|
|
187
|
-
: 'short';
|
|
188
|
-
const lifetimeFlags = cliBootstrapLifetimeFlags(lifetime);
|
|
189
|
-
const lifetimeMint = cliBootstrapLifetimeMintFields(lifetime);
|
|
190
|
-
if (input.denial === 'missing_permission') {
|
|
191
|
-
return `Kody returned insufficient_scope: your org role does not grant ${required ? `"${required}"` : 'the required permission'}. A new token cannot add it; an org Owner can grant it.`;
|
|
192
|
-
}
|
|
193
|
-
if (!required) {
|
|
194
|
-
return `Kody returned insufficient_scope. Mint a token that includes the missing scope: run \`${cliBootstrapScopesCommand(['<scope>', '…'], lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(['<scope>', '…'], lifetimeMint)}\` and run its cli_command. Scopes replace the defaults, so list every scope you need. For CI/headless, mint with tokenCreate and pass --token or set ${apiTokenEnvVar}.`;
|
|
195
|
-
}
|
|
196
|
-
const mintScopes = input.mintScopes && input.mintScopes.length > 0
|
|
197
|
-
? input.mintScopes
|
|
198
|
-
: input.currentScopes && input.currentScopes.length > 0
|
|
199
|
-
? [...new Set([...input.currentScopes, ...required.split(/,\s*/)])].sort()
|
|
200
|
-
: null;
|
|
201
|
-
if (!mintScopes) {
|
|
202
|
-
return `Kody returned insufficient_scope: this token is missing "${required}". Mint a token whose scopes include "${required}" plus the ones you already use (scopes replace the defaults): run \`${cliBootstrapScopesCommand(['<current scopes>', required], lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(['<current scopes>', required], lifetimeMint)}\` and run its cli_command. For CI/headless, mint with tokenCreate including "${required}" and pass --token or set ${apiTokenEnvVar}.`;
|
|
203
|
-
}
|
|
204
|
-
return `Kody returned insufficient_scope: this token is missing "${required}". Mint one that includes it: run \`${cliBootstrapScopesCommand(mintScopes, lifetimeFlags)}\` after \`kody login\`, or from Kody MCP call \`${cliBootstrapMintCall(mintScopes, lifetimeMint)}\` and run its cli_command. For CI/headless, mint with tokenCreate using those scopes and pass --token or set ${apiTokenEnvVar}.`;
|
|
205
|
-
}
|
|
206
|
-
function isRecord(value) {
|
|
207
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
208
|
-
}
|
|
209
|
-
function readNonEmptyString(value) {
|
|
210
|
-
return typeof value === 'string' && value.trim() ? value.trim() : null;
|
|
211
|
-
}
|
|
212
|
-
function readStringList(value) {
|
|
213
|
-
if (!Array.isArray(value))
|
|
214
|
-
return null;
|
|
215
|
-
const list = value
|
|
216
|
-
.filter((item) => typeof item === 'string')
|
|
217
|
-
.map((item) => item.trim())
|
|
218
|
-
.filter(Boolean);
|
|
219
|
-
return list.length > 0 ? list : null;
|
|
220
|
-
}
|
|
221
|
-
export function featureDisabledMessage() {
|
|
222
|
-
return 'Kody returned feature_disabled: CapabilityProxy is not enabled for this Kody account (feature flag `local-execute`). `execute --local` and token-auth cloud execute both stop here; minting another token does not bypass the flag. Browser `kody login` can still run cloud execute over MCP.';
|
|
223
|
-
}
|
|
224
|
-
export function requireApiToken(values = {}, env = process.env, purpose = 'this command', options = {}) {
|
|
225
|
-
const token = resolveScopedApiToken({
|
|
226
|
-
tokenValues: values,
|
|
227
|
-
env,
|
|
228
|
-
...options,
|
|
229
|
-
});
|
|
230
|
-
if (!token)
|
|
231
|
-
throw new Error(missingApiTokenMessage(purpose));
|
|
232
|
-
return token;
|
|
233
|
-
}
|
|
234
|
-
/** True when the user passed `--token` (not only the env var). */
|
|
235
|
-
export function hasExplicitTokenFlag(values) {
|
|
236
|
-
return typeof values.token === 'string' && values.token.trim().length > 0;
|
|
237
|
-
}
|
|
238
|
-
//# sourceMappingURL=api-token.js.map
|
package/dist/api-token.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api-token.js","sourceRoot":"","sources":["../src/api-token.ts"],"names":[],"mappings":"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"}
|
package/dist/auth-bootstrap.js
DELETED
|
@@ -1,373 +0,0 @@
|
|
|
1
|
-
import { assertTokenSafeApiUrl, capabilityProxyUrl } from './capability-proxy.js';
|
|
2
|
-
import { cliName, defaultApiUrl } from './defaults.js';
|
|
3
|
-
import { summarizeNonJsonErrorBody } from './http-error-body.js';
|
|
4
|
-
import { describeNetworkError } from './network-error.js';
|
|
5
|
-
import { readPackageVersion } from './package-info.js';
|
|
6
|
-
import { saveStoredApiToken, } from './api-token-store.js';
|
|
7
|
-
/** ADR 0056 one-shot bootstrap code prefix (`kody_bc_…`). */
|
|
8
|
-
export const cliBootstrapCodePrefix = 'kody_bc_';
|
|
9
|
-
/** Platform shape: `kody_bc_<16 alnum>_<32 base64url>`. */
|
|
10
|
-
const bootstrapCodePattern = /^kody_bc_([a-z0-9]{16})_([A-Za-z0-9_-]{32})$/;
|
|
11
|
-
export const bootstrapRedeemPath = 'v1/tokens/bootstrap/redeem';
|
|
12
|
-
/** ADR 0056 idle / absolute lifetime caps (seconds). */
|
|
13
|
-
export const cliTokenLifetimePolicy = {
|
|
14
|
-
minIdleTtlSeconds: 60,
|
|
15
|
-
/** Idle timeout at most 14 days. */
|
|
16
|
-
maxIdleTtlSeconds: 14 * 24 * 60 * 60,
|
|
17
|
-
/** Absolute lifetime at most 3 months. */
|
|
18
|
-
maxMaxLifetimeSeconds: 90 * 24 * 60 * 60,
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Input aliases for required token lifetimes. Sugar only: never stored on the
|
|
22
|
-
* token. `short` suits single-task agents; `long` is the policy maximum.
|
|
23
|
-
*/
|
|
24
|
-
export const cliTokenLifetimeAliases = {
|
|
25
|
-
short: {
|
|
26
|
-
idleTtlSeconds: 60 * 60,
|
|
27
|
-
maxLifetimeSeconds: 24 * 60 * 60,
|
|
28
|
-
},
|
|
29
|
-
long: {
|
|
30
|
-
idleTtlSeconds: cliTokenLifetimePolicy.maxIdleTtlSeconds,
|
|
31
|
-
maxLifetimeSeconds: cliTokenLifetimePolicy.maxMaxLifetimeSeconds,
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
export function parseCliBootstrapCode(value) {
|
|
35
|
-
const match = bootstrapCodePattern.exec(value.trim());
|
|
36
|
-
if (!match)
|
|
37
|
-
return null;
|
|
38
|
-
const [, codeId, secret] = match;
|
|
39
|
-
if (!codeId || !secret)
|
|
40
|
-
return null;
|
|
41
|
-
return { codeId, secret };
|
|
42
|
-
}
|
|
43
|
-
export function assertCliBootstrapCode(code) {
|
|
44
|
-
const trimmed = code.trim();
|
|
45
|
-
if (!parseCliBootstrapCode(trimmed)) {
|
|
46
|
-
throw new Error(`Invalid bootstrap code. Expected a one-shot ${cliBootstrapCodePrefix}… from cliCredentialBootstrap (MCP api / kody.cliCredentialBootstrap).`);
|
|
47
|
-
}
|
|
48
|
-
return trimmed;
|
|
49
|
-
}
|
|
50
|
-
/** Exact CLI flag syntax for a missing lifetime (ADR 0056). */
|
|
51
|
-
export function cliTokenLifetimeMissingError() {
|
|
52
|
-
return ('Token lifetime is required. Pass --lifetime short|long, or both ' +
|
|
53
|
-
`--idle-ttl-seconds <n> and --max-lifetime-seconds <n> ` +
|
|
54
|
-
`(idle ${cliTokenLifetimePolicy.minIdleTtlSeconds}-${cliTokenLifetimePolicy.maxIdleTtlSeconds}s, ` +
|
|
55
|
-
`max age up to ${cliTokenLifetimePolicy.maxMaxLifetimeSeconds}s). ` +
|
|
56
|
-
'Single-task agents should use --lifetime short.');
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Resolve a required lifetime choice. Aliases expand to idle/max seconds for
|
|
60
|
-
* validation; the redeem body still sends the alias or explicit seconds only.
|
|
61
|
-
*/
|
|
62
|
-
export function resolveCliTokenLifetime(input) {
|
|
63
|
-
const aliasRaw = typeof input.lifetime === 'string' ? input.lifetime.trim() : '';
|
|
64
|
-
const hasAlias = aliasRaw.length > 0;
|
|
65
|
-
const hasIdle = input.idleTtlSeconds !== undefined;
|
|
66
|
-
const hasMax = input.maxLifetimeSeconds !== undefined;
|
|
67
|
-
if (!hasAlias && !hasIdle && !hasMax) {
|
|
68
|
-
throw new Error(cliTokenLifetimeMissingError());
|
|
69
|
-
}
|
|
70
|
-
if (hasAlias && (hasIdle || hasMax)) {
|
|
71
|
-
throw new Error('Pass --lifetime short|long, or both --idle-ttl-seconds and --max-lifetime-seconds, not both forms.');
|
|
72
|
-
}
|
|
73
|
-
if (hasAlias) {
|
|
74
|
-
if (!(aliasRaw in cliTokenLifetimeAliases)) {
|
|
75
|
-
throw new Error(`--lifetime must be short or long (got ${JSON.stringify(aliasRaw)}).`);
|
|
76
|
-
}
|
|
77
|
-
const lifetime = aliasRaw;
|
|
78
|
-
const resolved = cliTokenLifetimeAliases[lifetime];
|
|
79
|
-
return {
|
|
80
|
-
kind: 'alias',
|
|
81
|
-
lifetime,
|
|
82
|
-
idleTtlSeconds: resolved.idleTtlSeconds,
|
|
83
|
-
maxLifetimeSeconds: resolved.maxLifetimeSeconds,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
if (!hasIdle || !hasMax) {
|
|
87
|
-
throw new Error('When not using --lifetime short|long, both --idle-ttl-seconds and --max-lifetime-seconds are required.');
|
|
88
|
-
}
|
|
89
|
-
const idleTtlSeconds = readRequiredInteger({
|
|
90
|
-
value: input.idleTtlSeconds,
|
|
91
|
-
min: cliTokenLifetimePolicy.minIdleTtlSeconds,
|
|
92
|
-
max: cliTokenLifetimePolicy.maxIdleTtlSeconds,
|
|
93
|
-
field: '--idle-ttl-seconds',
|
|
94
|
-
});
|
|
95
|
-
const maxLifetimeSeconds = readRequiredInteger({
|
|
96
|
-
value: input.maxLifetimeSeconds,
|
|
97
|
-
min: idleTtlSeconds,
|
|
98
|
-
max: cliTokenLifetimePolicy.maxMaxLifetimeSeconds,
|
|
99
|
-
field: '--max-lifetime-seconds',
|
|
100
|
-
});
|
|
101
|
-
return {
|
|
102
|
-
kind: 'explicit',
|
|
103
|
-
idleTtlSeconds,
|
|
104
|
-
maxLifetimeSeconds,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
/** Build the redeem JSON body (alias or explicit seconds — never both). */
|
|
108
|
-
export function bootstrapRedeemRequestBody(code, lifetime) {
|
|
109
|
-
if (lifetime.kind === 'alias') {
|
|
110
|
-
return { code, lifetime: lifetime.lifetime };
|
|
111
|
-
}
|
|
112
|
-
return {
|
|
113
|
-
code,
|
|
114
|
-
idle_ttl_seconds: lifetime.idleTtlSeconds,
|
|
115
|
-
max_lifetime_seconds: lifetime.maxLifetimeSeconds,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
/** Parse a CLI `--idle-ttl-seconds` / `--max-lifetime-seconds` string flag. */
|
|
119
|
-
export function parseCliLifetimeSecondsFlag(raw, flag) {
|
|
120
|
-
if (raw === undefined)
|
|
121
|
-
return undefined;
|
|
122
|
-
const trimmed = raw.trim();
|
|
123
|
-
if (!/^-?\d+$/.test(trimmed)) {
|
|
124
|
-
throw new Error(`${flag} must be an integer.`);
|
|
125
|
-
}
|
|
126
|
-
return Number(trimmed);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Lifetime for redeem after a successful mint. Trusts the server's clamped
|
|
130
|
-
* idle/max seconds (may be below CLI flag mins, or max below the requested
|
|
131
|
-
* idle). Only coerces idle down when max < idle so the pair stays consistent.
|
|
132
|
-
*/
|
|
133
|
-
export function resolveMintedRedeemLifetime(minted) {
|
|
134
|
-
const maxLifetimeSeconds = minted.max_lifetime_seconds;
|
|
135
|
-
const idleTtlSeconds = Math.min(minted.idle_ttl_seconds, maxLifetimeSeconds);
|
|
136
|
-
return {
|
|
137
|
-
kind: 'explicit',
|
|
138
|
-
idleTtlSeconds,
|
|
139
|
-
maxLifetimeSeconds,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* POST /v1/tokens/bootstrap/redeem with JSON `{ code, lifetime }` or
|
|
144
|
-
* `{ code, idle_ttl_seconds, max_lifetime_seconds }` and **no** Authorization
|
|
145
|
-
* header (ADR 0056). Returns the minted `kody_at_…` once.
|
|
146
|
-
*
|
|
147
|
-
* Pass `trustedMintLifetime` after cliCredentialBootstrap so server-clamped
|
|
148
|
-
* seconds are redeemed without re-applying CLI flag mins (max may be below
|
|
149
|
-
* the requested idle or below `--idle-ttl-seconds` minimum).
|
|
150
|
-
*/
|
|
151
|
-
export async function redeemBootstrapCode(input) {
|
|
152
|
-
const code = assertCliBootstrapCode(input.code);
|
|
153
|
-
const lifetime = input.trustedMintLifetime
|
|
154
|
-
? resolveMintedRedeemLifetime(input.trustedMintLifetime)
|
|
155
|
-
: resolveCliTokenLifetime({
|
|
156
|
-
lifetime: input.lifetime,
|
|
157
|
-
idleTtlSeconds: input.idleTtlSeconds,
|
|
158
|
-
maxLifetimeSeconds: input.maxLifetimeSeconds,
|
|
159
|
-
});
|
|
160
|
-
const apiUrl = input.apiUrl || defaultApiUrl;
|
|
161
|
-
assertTokenSafeApiUrl(apiUrl);
|
|
162
|
-
const url = capabilityProxyUrl(apiUrl, bootstrapRedeemPath);
|
|
163
|
-
const fetchFn = input.fetchFn ?? fetch;
|
|
164
|
-
let response;
|
|
165
|
-
try {
|
|
166
|
-
response = await fetchFn(url, {
|
|
167
|
-
method: 'POST',
|
|
168
|
-
headers: {
|
|
169
|
-
accept: 'application/json',
|
|
170
|
-
'content-type': 'application/json',
|
|
171
|
-
'user-agent': `${cliName}/${readPackageVersion()}`,
|
|
172
|
-
},
|
|
173
|
-
body: JSON.stringify(bootstrapRedeemRequestBody(code, lifetime)),
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
catch (error) {
|
|
177
|
-
const reason = describeNetworkError(error);
|
|
178
|
-
throw new Error(`Could not reach the Kody API at ${url.origin} (${reason}). Check --api-url / KODY_API_URL and your network.`);
|
|
179
|
-
}
|
|
180
|
-
const body = await readJson(response);
|
|
181
|
-
if (!response.ok) {
|
|
182
|
-
throw describeRedeemFailure(response.status, body, url);
|
|
183
|
-
}
|
|
184
|
-
return parseRedeemResponse(body);
|
|
185
|
-
}
|
|
186
|
-
export function storedApiTokenFromRedeem(input) {
|
|
187
|
-
const token = input.redeemed.token.trim();
|
|
188
|
-
if (!token.startsWith('kody_at_')) {
|
|
189
|
-
throw new Error('Bootstrap redeem did not return a scoped kody_at_… API token.');
|
|
190
|
-
}
|
|
191
|
-
return {
|
|
192
|
-
version: 1,
|
|
193
|
-
apiUrl: input.apiUrl,
|
|
194
|
-
token,
|
|
195
|
-
tokenId: input.redeemed.id,
|
|
196
|
-
...(input.redeemed.name ? { name: input.redeemed.name } : {}),
|
|
197
|
-
...(Array.isArray(input.redeemed.scopes) ? { scopes: input.redeemed.scopes } : {}),
|
|
198
|
-
expiresAt: input.redeemed.expires_at ?? null,
|
|
199
|
-
maxExpiresAt: input.redeemed.max_expires_at ?? null,
|
|
200
|
-
createdVia: input.redeemed.created_via ?? 'cli-bootstrap',
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Redeem a one-shot `kody_bc_…` and persist the resulting API token for
|
|
205
|
-
* `execute --local`. Never returns the token string to callers that print
|
|
206
|
-
* success output — use `stored.tokenId` / backend kind only.
|
|
207
|
-
*/
|
|
208
|
-
export async function authBootstrap(input) {
|
|
209
|
-
const apiUrl = input.apiUrl || defaultApiUrl;
|
|
210
|
-
const redeemed = await redeemBootstrapCode({
|
|
211
|
-
code: input.code,
|
|
212
|
-
lifetime: input.lifetime,
|
|
213
|
-
idleTtlSeconds: input.idleTtlSeconds,
|
|
214
|
-
maxLifetimeSeconds: input.maxLifetimeSeconds,
|
|
215
|
-
apiUrl,
|
|
216
|
-
fetchFn: input.fetchFn,
|
|
217
|
-
});
|
|
218
|
-
const stored = storedApiTokenFromRedeem({ apiUrl, redeemed });
|
|
219
|
-
const saved = saveStoredApiToken(stored, input.backend, input.resolution);
|
|
220
|
-
return {
|
|
221
|
-
stored,
|
|
222
|
-
backendKind: saved.backend.kind,
|
|
223
|
-
...(saved.backend.path ? { backendPath: saved.backend.path } : {}),
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
export const cliCredentialBootstrapOperationId = 'cliCredentialBootstrap';
|
|
227
|
-
/**
|
|
228
|
-
* Parse `--scopes`. Comma- or space-separated, deduped, order kept. The list
|
|
229
|
-
* replaces cliCredentialBootstrap's default scopes; the server validates names.
|
|
230
|
-
*/
|
|
231
|
-
export function parseCliScopesFlag(raw) {
|
|
232
|
-
if (raw === undefined)
|
|
233
|
-
return undefined;
|
|
234
|
-
const scopes = [
|
|
235
|
-
...new Set(raw
|
|
236
|
-
.split(/[\s,]+/)
|
|
237
|
-
.map((scope) => scope.trim())
|
|
238
|
-
.filter(Boolean)),
|
|
239
|
-
];
|
|
240
|
-
if (scopes.length === 0) {
|
|
241
|
-
throw new Error('--scopes needs at least one scope (e.g. --scopes org:execute,package:write).');
|
|
242
|
-
}
|
|
243
|
-
return scopes;
|
|
244
|
-
}
|
|
245
|
-
/** cliCredentialBootstrap params for an explicit scope list and lifetime. */
|
|
246
|
-
export function bootstrapMintParams(scopes, lifetime) {
|
|
247
|
-
return {
|
|
248
|
-
scopes: [...scopes],
|
|
249
|
-
...bootstrapMintLifetimeFields(lifetime),
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
export function bootstrapMintLifetimeFields(lifetime) {
|
|
253
|
-
return lifetime.kind === 'alias'
|
|
254
|
-
? { lifetime: lifetime.lifetime }
|
|
255
|
-
: {
|
|
256
|
-
idle_ttl_seconds: lifetime.idleTtlSeconds,
|
|
257
|
-
max_lifetime_seconds: lifetime.maxLifetimeSeconds,
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
export function parseBootstrapMintResponse(body) {
|
|
261
|
-
if (!isRecord(body) ||
|
|
262
|
-
typeof body.bootstrap_code !== 'string' ||
|
|
263
|
-
typeof body.idle_ttl_seconds !== 'number' ||
|
|
264
|
-
typeof body.max_lifetime_seconds !== 'number') {
|
|
265
|
-
throw new Error('cliCredentialBootstrap returned an unexpected response.');
|
|
266
|
-
}
|
|
267
|
-
return {
|
|
268
|
-
bootstrap_code: body.bootstrap_code,
|
|
269
|
-
scopes: Array.isArray(body.scopes)
|
|
270
|
-
? body.scopes.filter((scope) => typeof scope === 'string')
|
|
271
|
-
: [],
|
|
272
|
-
idle_ttl_seconds: body.idle_ttl_seconds,
|
|
273
|
-
max_lifetime_seconds: body.max_lifetime_seconds,
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Mint a bootstrap code with explicit `scopes` through the caller's current
|
|
278
|
-
* Kody credential, then redeem and store it like `authBootstrap`. Redeems with
|
|
279
|
-
* the minted idle/max seconds because the server may clamp the max lifetime to
|
|
280
|
-
* a parent API token's remaining lifetime — those values must not be
|
|
281
|
-
* re-validated as CLI lifetime flags (which would burn the one-shot code).
|
|
282
|
-
*/
|
|
283
|
-
export async function authBootstrapWithScopes(input) {
|
|
284
|
-
const minted = parseBootstrapMintResponse(await input.mint(bootstrapMintParams(input.scopes, input.lifetime)));
|
|
285
|
-
const apiUrl = input.apiUrl || defaultApiUrl;
|
|
286
|
-
const redeemed = await redeemBootstrapCode({
|
|
287
|
-
code: minted.bootstrap_code,
|
|
288
|
-
trustedMintLifetime: {
|
|
289
|
-
idle_ttl_seconds: minted.idle_ttl_seconds,
|
|
290
|
-
max_lifetime_seconds: minted.max_lifetime_seconds,
|
|
291
|
-
},
|
|
292
|
-
apiUrl,
|
|
293
|
-
fetchFn: input.fetchFn,
|
|
294
|
-
});
|
|
295
|
-
const stored = storedApiTokenFromRedeem({ apiUrl, redeemed });
|
|
296
|
-
const saved = saveStoredApiToken(stored, input.backend, input.resolution);
|
|
297
|
-
return {
|
|
298
|
-
stored,
|
|
299
|
-
backendKind: saved.backend.kind,
|
|
300
|
-
...(saved.backend.path ? { backendPath: saved.backend.path } : {}),
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
function readRequiredInteger(input) {
|
|
304
|
-
if (!Number.isInteger(input.value) ||
|
|
305
|
-
input.value < input.min ||
|
|
306
|
-
input.value > input.max) {
|
|
307
|
-
throw new Error(`${input.field} must be an integer between ${input.min} and ${input.max}.`);
|
|
308
|
-
}
|
|
309
|
-
return input.value;
|
|
310
|
-
}
|
|
311
|
-
function parseRedeemResponse(body) {
|
|
312
|
-
if (!isRecord(body) || typeof body.token !== 'string' || typeof body.id !== 'string') {
|
|
313
|
-
throw new Error('Bootstrap redeem returned an unexpected response.');
|
|
314
|
-
}
|
|
315
|
-
return {
|
|
316
|
-
token: body.token,
|
|
317
|
-
token_type: typeof body.token_type === 'string' ? body.token_type : undefined,
|
|
318
|
-
id: body.id,
|
|
319
|
-
name: typeof body.name === 'string' ? body.name : null,
|
|
320
|
-
scopes: Array.isArray(body.scopes)
|
|
321
|
-
? body.scopes.filter((scope) => typeof scope === 'string')
|
|
322
|
-
: undefined,
|
|
323
|
-
status: typeof body.status === 'string' ? body.status : undefined,
|
|
324
|
-
idle_ttl_seconds: typeof body.idle_ttl_seconds === 'number' ? body.idle_ttl_seconds : undefined,
|
|
325
|
-
expires_at: typeof body.expires_at === 'string' ? body.expires_at : null,
|
|
326
|
-
max_expires_at: typeof body.max_expires_at === 'string' ? body.max_expires_at : null,
|
|
327
|
-
created_via: typeof body.created_via === 'string' ? body.created_via : undefined,
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
function describeRedeemFailure(status, body, url) {
|
|
331
|
-
const failure = readErrorBody(body);
|
|
332
|
-
const detail = failure?.message ? ` Server said: ${failure.message}` : '';
|
|
333
|
-
if (status === 400 || status === 401 || status === 403 || status === 404) {
|
|
334
|
-
return new Error(`Bootstrap redeem failed (HTTP ${status}). The code may be invalid, expired, or already used. Call cliCredentialBootstrap again for a fresh code.${detail}`);
|
|
335
|
-
}
|
|
336
|
-
return new Error(failure?.message ??
|
|
337
|
-
`Bootstrap redeem failed with HTTP ${status} (${url.pathname}).${detail}`);
|
|
338
|
-
}
|
|
339
|
-
async function readJson(response) {
|
|
340
|
-
const text = await response.text();
|
|
341
|
-
if (!text)
|
|
342
|
-
return null;
|
|
343
|
-
try {
|
|
344
|
-
return JSON.parse(text);
|
|
345
|
-
}
|
|
346
|
-
catch {
|
|
347
|
-
return text;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
function readErrorBody(body) {
|
|
351
|
-
if (!isRecord(body) || body.error == null) {
|
|
352
|
-
if (typeof body === 'string' && body.trim()) {
|
|
353
|
-
return { code: null, message: summarizeNonJsonErrorBody(body) };
|
|
354
|
-
}
|
|
355
|
-
if (isRecord(body) && typeof body.message === 'string') {
|
|
356
|
-
return { code: null, message: body.message };
|
|
357
|
-
}
|
|
358
|
-
return null;
|
|
359
|
-
}
|
|
360
|
-
const { error } = body;
|
|
361
|
-
if (typeof error === 'string')
|
|
362
|
-
return { code: null, message: error };
|
|
363
|
-
if (isRecord(error)) {
|
|
364
|
-
const code = typeof error.code === 'string' ? error.code : null;
|
|
365
|
-
const message = typeof error.message === 'string' ? error.message : code ?? JSON.stringify(error);
|
|
366
|
-
return { code, message };
|
|
367
|
-
}
|
|
368
|
-
return { code: null, message: String(error) };
|
|
369
|
-
}
|
|
370
|
-
function isRecord(value) {
|
|
371
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
372
|
-
}
|
|
373
|
-
//# sourceMappingURL=auth-bootstrap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-bootstrap.js","sourceRoot":"","sources":["../src/auth-bootstrap.ts"],"names":[],"mappings":"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"}
|