@kodycodes/cli 1.26.2 → 1.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -167
- package/dist/add-mcp-install.d.ts +1 -1
- package/dist/api-token.d.ts +1 -1
- package/dist/auth-6ZE6QQXA.js +31 -0
- package/dist/auth-6ZE6QQXA.js.map +6 -0
- package/dist/auth-bootstrap.d.ts +1 -1
- package/dist/auth.d.ts +27 -3
- package/dist/bin.js +27 -3
- package/dist/bin.js.map +6 -1
- package/dist/capability-proxy.d.ts +1 -1
- package/dist/chunk-2IHISXHN.js +1413 -0
- package/dist/chunk-2IHISXHN.js.map +6 -0
- package/dist/chunk-2XPH7L2P.js +23 -0
- package/dist/chunk-2XPH7L2P.js.map +6 -0
- package/dist/chunk-3H72XY5R.js +535 -0
- package/dist/chunk-3H72XY5R.js.map +6 -0
- package/dist/chunk-46IJPEID.js +30 -0
- package/dist/chunk-46IJPEID.js.map +6 -0
- package/dist/chunk-4GIFJVGT.js +14 -0
- package/dist/chunk-4GIFJVGT.js.map +6 -0
- package/dist/chunk-5JIRHJQP.js +1016 -0
- package/dist/chunk-5JIRHJQP.js.map +6 -0
- package/dist/chunk-5ZBJAP6G.js +2005 -0
- package/dist/chunk-5ZBJAP6G.js.map +6 -0
- package/dist/chunk-6ZYUGXVW.js +26 -0
- package/dist/chunk-6ZYUGXVW.js.map +6 -0
- package/dist/chunk-7PRJ36I5.js +23 -0
- package/dist/chunk-7PRJ36I5.js.map +6 -0
- package/dist/chunk-BTL3PJ2H.js +38 -0
- package/dist/chunk-BTL3PJ2H.js.map +6 -0
- package/dist/chunk-CASGRYOF.js +21 -0
- package/dist/chunk-CASGRYOF.js.map +6 -0
- package/dist/chunk-CPS7HW4T.js +56 -0
- package/dist/chunk-CPS7HW4T.js.map +6 -0
- package/dist/chunk-CWWHR4FH.js +19 -0
- package/dist/chunk-CWWHR4FH.js.map +6 -0
- package/dist/chunk-D366STO5.js +2051 -0
- package/dist/chunk-D366STO5.js.map +6 -0
- package/dist/chunk-DW5UTJ6T.js +115 -0
- package/dist/chunk-DW5UTJ6T.js.map +6 -0
- package/dist/chunk-EJXEVGWF.js +47 -0
- package/dist/chunk-EJXEVGWF.js.map +6 -0
- package/dist/chunk-FBEZ6PZ7.js +746 -0
- package/dist/chunk-FBEZ6PZ7.js.map +6 -0
- package/dist/chunk-JOMBXQOS.js +435 -0
- package/dist/chunk-JOMBXQOS.js.map +6 -0
- package/dist/{package-local-runtime-source.js → chunk-LU7I7CQ4.js} +395 -52
- package/dist/chunk-LU7I7CQ4.js.map +6 -0
- package/dist/chunk-OZDWOZLV.js +964 -0
- package/dist/chunk-OZDWOZLV.js.map +6 -0
- package/dist/chunk-SLNAWWQK.js +64 -0
- package/dist/chunk-SLNAWWQK.js.map +6 -0
- package/dist/chunk-TUUFQYWP.js +348 -0
- package/dist/chunk-TUUFQYWP.js.map +6 -0
- package/dist/chunk-UW6AWLXX.js +43 -0
- package/dist/chunk-UW6AWLXX.js.map +6 -0
- package/dist/chunk-W2SAFAT4.js +1563 -0
- package/dist/chunk-W2SAFAT4.js.map +6 -0
- package/dist/chunk-XV6D6HSG.js +57 -0
- package/dist/chunk-XV6D6HSG.js.map +6 -0
- package/dist/chunk-Y4FOJETX.js +616 -0
- package/dist/chunk-Y4FOJETX.js.map +6 -0
- package/dist/chunk-YDWTXEKQ.js +469 -0
- package/dist/chunk-YDWTXEKQ.js.map +6 -0
- package/dist/chunk-ZILB2HWE.js +24 -0
- package/dist/chunk-ZILB2HWE.js.map +6 -0
- package/dist/cli.js +74 -1500
- package/dist/cli.js.map +6 -1
- package/dist/defaults.d.ts +1 -1
- package/dist/detect-running-hosts.d.ts +1 -1
- package/dist/dev/dev-assets.d.ts +1 -1
- package/dist/dev/dev-registry.d.ts +1 -1
- package/dist/dev/error-page.d.ts +1 -1
- package/dist/dev/live-reload.d.ts +2 -2
- package/dist/dev-command-5PDEIWOC.js +5025 -0
- package/dist/dev-command-5PDEIWOC.js.map +6 -0
- package/dist/dev-command.d.ts +1 -1
- package/dist/discover-login-identity.d.ts +6 -7
- package/dist/discover-org.d.ts +2 -3
- package/dist/generated/openapi-routes.d.ts +6 -0
- package/dist/git-credential-INB2UV4C.js +170 -0
- package/dist/git-credential-INB2UV4C.js.map +6 -0
- package/dist/install-ONEJRYZ3.js +10728 -0
- package/dist/install-ONEJRYZ3.js.map +6 -0
- package/dist/install.d.ts +1 -1
- package/dist/local-execute-I3BP5NEQ.js +395 -0
- package/dist/local-execute-I3BP5NEQ.js.map +6 -0
- package/dist/local-execute-auth.d.ts +2 -2
- package/dist/local-execute.d.ts +1 -1
- package/dist/local-gateway-fetch-forward.d.ts +2 -2
- package/dist/local-package-run-JFKNSNWM.js +23 -0
- package/dist/local-package-run-JFKNSNWM.js.map +6 -0
- package/dist/local-package-run.d.ts +2 -2
- package/dist/mock/mock-fetch-gateway.d.ts +2 -2
- package/dist/mock/mock-supported.d.ts +1 -1
- package/dist/mock-dep-resolve-B5ZH4U3H.js +60 -0
- package/dist/mock-dep-resolve-B5ZH4U3H.js.map +6 -0
- package/dist/mock-fetch-gateway-S2ULVFAI.js +35 -0
- package/dist/mock-fetch-gateway-S2ULVFAI.js.map +6 -0
- package/dist/mock-local-deps-2VVNJLFF.js +200 -0
- package/dist/mock-local-deps-2VVNJLFF.js.map +6 -0
- package/dist/mock-local-deps.d.ts +1 -1
- package/dist/mock-server-TFO7Q26H.js +22 -0
- package/dist/mock-server-TFO7Q26H.js.map +6 -0
- package/dist/oauth-browser.d.ts +42 -0
- package/dist/oauth-provider.d.ts +14 -19
- package/dist/open-api-client-SR4B7265.js +43 -0
- package/dist/open-api-client-SR4B7265.js.map +6 -0
- package/dist/open-api-client.d.ts +2 -1
- package/dist/org-535LB4PD.js +134 -0
- package/dist/org-535LB4PD.js.map +6 -0
- package/dist/org-resolve.d.ts +2 -0
- package/dist/package-app-dev.d.ts +2 -2
- package/dist/package-manifest-DFF6XCPV.js +15 -0
- package/dist/package-manifest-DFF6XCPV.js.map +6 -0
- package/dist/remote-execute-JN6DRFEU.js +129 -0
- package/dist/remote-execute-JN6DRFEU.js.map +6 -0
- package/dist/remote-execute.d.ts +3 -3
- package/dist/setup-git-MHK563LB.js +87 -0
- package/dist/setup-git-MHK563LB.js.map +6 -0
- package/dist/setup-git.d.ts +1 -1
- package/dist/skill-D74XVI6T.js +61 -0
- package/dist/skill-D74XVI6T.js.map +6 -0
- package/dist/store-27J4CQZ2.js +48 -0
- package/dist/store-27J4CQZ2.js.map +6 -0
- package/dist/structured-error-5MLWXYR3.js +14 -0
- package/dist/structured-error-5MLWXYR3.js.map +6 -0
- package/dist/structured-error.d.ts +1 -1
- package/dist/target-33ATHDUF.js +17 -0
- package/dist/target-33ATHDUF.js.map +6 -0
- package/package.json +12 -11
- package/skills/kody/SKILL.md +53 -50
- 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.d.ts +0 -34
- 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
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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"}
|