@jini-ai/mcp 0.1.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/LICENSE +201 -0
- package/dist/agent-install/index.d.ts +9 -0
- package/dist/agent-install/index.d.ts.map +1 -0
- package/dist/agent-install/index.js +9 -0
- package/dist/agent-install/index.js.map +1 -0
- package/dist/agent-install/install.d.ts +97 -0
- package/dist/agent-install/install.d.ts.map +1 -0
- package/dist/agent-install/install.js +410 -0
- package/dist/agent-install/install.js.map +1 -0
- package/dist/bin/serve.d.ts +75 -0
- package/dist/bin/serve.d.ts.map +1 -0
- package/dist/bin/serve.js +79 -0
- package/dist/bin/serve.js.map +1 -0
- package/dist/client/client.d.ts +48 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +242 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/index.d.ts +8 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +8 -0
- package/dist/client/index.js.map +1 -0
- package/dist/core/config.d.ts +157 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +475 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/index.d.ts +14 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/install-info.d.ts +69 -0
- package/dist/core/install-info.d.ts.map +1 -0
- package/dist/core/install-info.js +79 -0
- package/dist/core/install-info.js.map +1 -0
- package/dist/core/oauth.d.ts +274 -0
- package/dist/core/oauth.d.ts.map +1 -0
- package/dist/core/oauth.js +667 -0
- package/dist/core/oauth.js.map +1 -0
- package/dist/core/secure-write.d.ts +17 -0
- package/dist/core/secure-write.d.ts.map +1 -0
- package/dist/core/secure-write.js +72 -0
- package/dist/core/secure-write.js.map +1 -0
- package/dist/core/tokens.d.ts +72 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +197 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/server/daemon-client.d.ts +21 -0
- package/dist/server/daemon-client.d.ts.map +1 -0
- package/dist/server/daemon-client.js +176 -0
- package/dist/server/daemon-client.js.map +1 -0
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +18 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/resource-protocol.d.ts +38 -0
- package/dist/server/resource-protocol.d.ts.map +1 -0
- package/dist/server/resource-protocol.js +68 -0
- package/dist/server/resource-protocol.js.map +1 -0
- package/dist/server/resources/active-resource.d.ts +12 -0
- package/dist/server/resources/active-resource.d.ts.map +1 -0
- package/dist/server/resources/active-resource.js +46 -0
- package/dist/server/resources/active-resource.js.map +1 -0
- package/dist/server/tool-protocol.d.ts +45 -0
- package/dist/server/tool-protocol.d.ts.map +1 -0
- package/dist/server/tool-protocol.js +74 -0
- package/dist/server/tool-protocol.js.map +1 -0
- package/dist/server/tool-server.d.ts +105 -0
- package/dist/server/tool-server.d.ts.map +1 -0
- package/dist/server/tool-server.js +96 -0
- package/dist/server/tool-server.js.map +1 -0
- package/dist/server/tools/delegated-tool.d.ts +15 -0
- package/dist/server/tools/delegated-tool.d.ts.map +1 -0
- package/dist/server/tools/delegated-tool.js +90 -0
- package/dist/server/tools/delegated-tool.js.map +1 -0
- package/dist/server/tools/run-tools.d.ts +14 -0
- package/dist/server/tools/run-tools.d.ts.map +1 -0
- package/dist/server/tools/run-tools.js +142 -0
- package/dist/server/tools/run-tools.js.map +1 -0
- package/dist/server/tools/tool-catalog-tools.d.ts +8 -0
- package/dist/server/tools/tool-catalog-tools.d.ts.map +1 -0
- package/dist/server/tools/tool-catalog-tools.js +66 -0
- package/dist/server/tools/tool-catalog-tools.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/core/oauth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface WriteSecretFileOptions {
|
|
2
|
+
/** Injectable for tests only; defaults to `process.platform`. */
|
|
3
|
+
platform?: NodeJS.Platform;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Atomically write `contents` to `finalPath` via a same-directory temp file
|
|
7
|
+
* created exclusively with mode 0600. On POSIX platforms, verifies no
|
|
8
|
+
* group/other permission bit made it onto disk before renaming into place;
|
|
9
|
+
* throws (after removing the temp file) if verification fails or the write
|
|
10
|
+
* itself fails, so a caller never observes a partially-written or
|
|
11
|
+
* insufficiently-restricted secret file.
|
|
12
|
+
* @param finalPath Absolute path the secret file should end up at.
|
|
13
|
+
* @param contents UTF-8 text to write.
|
|
14
|
+
* @param options `platform` override for tests; defaults to `process.platform`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function writeSecretFileAtomic(finalPath: string, contents: string, options?: WriteSecretFileOptions): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=secure-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-write.d.ts","sourceRoot":"","sources":["../../src/core/secure-write.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAqBf"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @jini-ai/mcp/core/secure-write
|
|
3
|
+
* Shared atomic, owner-only-permission (0600) secret-file writer used by
|
|
4
|
+
* every secret-bearing on-disk store in this package: the server config
|
|
5
|
+
* store (env vars / `Authorization` headers), the OAuth dynamic-client-
|
|
6
|
+
* registration cache (`clientSecret`), and the OAuth token store (bearer /
|
|
7
|
+
* refresh tokens, confidential-client secrets). CR-006 / SEC-RB-002.
|
|
8
|
+
*
|
|
9
|
+
* The previous pattern in each of those stores wrote the temp file with
|
|
10
|
+
* default permissions and either never restricted it (config, OAuth client
|
|
11
|
+
* cache) or `chmod(0600)`'d it *after* the atomic rename and silently
|
|
12
|
+
* continued when the chmod failed (tokens) — both leave a window where the
|
|
13
|
+
* file exists world/group-readable, and the latter makes the "protection"
|
|
14
|
+
* advisory rather than enforced. This writer instead:
|
|
15
|
+
*
|
|
16
|
+
* 1. Creates the temp file *exclusively* (`wx`) with mode 0600 supplied to
|
|
17
|
+
* the same `open()`/`writeFile()` call that creates it — POSIX applies
|
|
18
|
+
* the requested mode atomically at creation time, so there is no
|
|
19
|
+
* window where the file exists with a broader mode. This repo already
|
|
20
|
+
* relies on `writeFile`'s `mode` option alone for a secret file with no
|
|
21
|
+
* separate chmod step (see `packages/agent-runtime/src/prompt-file.ts`);
|
|
22
|
+
* this module follows that same precedent rather than inventing a new one.
|
|
23
|
+
* 2. On POSIX platforms, verifies the on-disk mode actually landed as
|
|
24
|
+
* owner-only before renaming into place, and fails closed — removing
|
|
25
|
+
* the temp file and throwing — if it did not (e.g. an unusual umask or
|
|
26
|
+
* a filesystem that doesn't honor `mode`).
|
|
27
|
+
* 3. Skips that verification on `win32`: Windows has no POSIX permission-
|
|
28
|
+
* bit model (`mode` there only toggles the read-only attribute), so
|
|
29
|
+
* there is nothing meaningful to enforce or fail closed on — matching
|
|
30
|
+
* this repo's only other cross-platform file-mode precedent, which
|
|
31
|
+
* also does not branch on Windows.
|
|
32
|
+
*
|
|
33
|
+
* Part of the MCP `core` kernel; not part of the package's public barrel —
|
|
34
|
+
* imported directly by sibling `core/*.ts` files.
|
|
35
|
+
*/
|
|
36
|
+
import { mkdir, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
37
|
+
import { randomBytes } from 'node:crypto';
|
|
38
|
+
import path from 'node:path';
|
|
39
|
+
const SECRET_FILE_MODE = 0o600;
|
|
40
|
+
/**
|
|
41
|
+
* Atomically write `contents` to `finalPath` via a same-directory temp file
|
|
42
|
+
* created exclusively with mode 0600. On POSIX platforms, verifies no
|
|
43
|
+
* group/other permission bit made it onto disk before renaming into place;
|
|
44
|
+
* throws (after removing the temp file) if verification fails or the write
|
|
45
|
+
* itself fails, so a caller never observes a partially-written or
|
|
46
|
+
* insufficiently-restricted secret file.
|
|
47
|
+
* @param finalPath Absolute path the secret file should end up at.
|
|
48
|
+
* @param contents UTF-8 text to write.
|
|
49
|
+
* @param options `platform` override for tests; defaults to `process.platform`.
|
|
50
|
+
*/
|
|
51
|
+
export async function writeSecretFileAtomic(finalPath, contents, options = {}) {
|
|
52
|
+
const platform = options.platform ?? process.platform;
|
|
53
|
+
await mkdir(path.dirname(finalPath), { recursive: true });
|
|
54
|
+
const tmp = `${finalPath}.${randomBytes(4).toString('hex')}.tmp`;
|
|
55
|
+
try {
|
|
56
|
+
await writeFile(tmp, contents, { encoding: 'utf8', mode: SECRET_FILE_MODE, flag: 'wx' });
|
|
57
|
+
if (platform !== 'win32') {
|
|
58
|
+
const info = await stat(tmp);
|
|
59
|
+
const bits = info.mode & 0o777;
|
|
60
|
+
if ((bits & 0o077) !== 0) {
|
|
61
|
+
throw new Error(`refusing to persist secret-bearing file with non-owner-only permissions ` +
|
|
62
|
+
`(mode 0${bits.toString(8)}): ${finalPath}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
await rename(tmp, finalPath);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
await rm(tmp, { force: true }).catch(() => undefined);
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=secure-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-write.js","sourceRoot":"","sources":["../../src/core/secure-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAO/B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAiB,EACjB,QAAgB,EAChB,UAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,0EAA0E;oBACxE,UAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,SAAS,EAAE,CAC9C,CAAC;YACJ,CAAC;QACH,CAAC;QACD,MAAM,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @jini-ai/mcp/core/tokens
|
|
3
|
+
* Persistent, 0600-guarded OAuth-token store for remote MCP servers, keyed by
|
|
4
|
+
* server id, with expiry checks. The durable counterpart to `oauth`'s live flow.
|
|
5
|
+
* Part of the MCP `core` kernel; depends on no sibling subdirectory.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Stored OAuth token for a single MCP server. Mirrors the relevant subset
|
|
9
|
+
* of an OAuth 2.0 token-endpoint response (RFC 6749 §5.1), plus the OAuth
|
|
10
|
+
* client context the original authorization-code exchange used. Refresh
|
|
11
|
+
* tokens are bound (RFC 6749 §6) to the client that received them, so we
|
|
12
|
+
* have to refresh against the same `client_id` / `redirect_uri` pair —
|
|
13
|
+
* persisting the context here is what lets us do that without re-running
|
|
14
|
+
* authorization.
|
|
15
|
+
*/
|
|
16
|
+
export interface StoredMcpToken {
|
|
17
|
+
/** The bearer token to send as `Authorization: Bearer …`. */
|
|
18
|
+
accessToken: string;
|
|
19
|
+
/** Refresh token (RFC 6749 §6) if the auth server issued one. */
|
|
20
|
+
refreshToken?: string;
|
|
21
|
+
/** Absolute epoch ms at which `accessToken` expires. Optional — some
|
|
22
|
+
* providers never expire. */
|
|
23
|
+
expiresAt?: number;
|
|
24
|
+
/** RFC 6749 §5.1 token_type. Almost always `Bearer`. */
|
|
25
|
+
tokenType: string;
|
|
26
|
+
/** Space-separated scopes granted (verbatim from the token response). */
|
|
27
|
+
scope?: string;
|
|
28
|
+
/** Wall-clock epoch ms when this record was first persisted. */
|
|
29
|
+
savedAt: number;
|
|
30
|
+
/** Token endpoint that issued this token; reused verbatim for refresh. */
|
|
31
|
+
tokenEndpoint?: string;
|
|
32
|
+
/** Client id that obtained the refresh token. */
|
|
33
|
+
clientId?: string;
|
|
34
|
+
/** Confidential-client secret, if the upstream issued one. */
|
|
35
|
+
clientSecret?: string;
|
|
36
|
+
/** Authorization-server issuer, used to look the cached client back up. */
|
|
37
|
+
authServerIssuer?: string;
|
|
38
|
+
/** Redirect URI registered with the client at authorization time. */
|
|
39
|
+
redirectUri?: string;
|
|
40
|
+
/** RFC 8707 resource indicator the original token was scoped to. */
|
|
41
|
+
resourceUrl?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface McpTokensFile {
|
|
44
|
+
/** keyed by McpServerConfig.id */
|
|
45
|
+
servers: Record<string, StoredMcpToken>;
|
|
46
|
+
}
|
|
47
|
+
/** Coerce a freeform JSON blob into the typed shape, dropping anything that
|
|
48
|
+
* doesn't deserialize cleanly. Used both at read time and as a defensive
|
|
49
|
+
* pass when third-party tooling has hand-edited the file. */
|
|
50
|
+
export declare function sanitizeTokensFile(raw: unknown): McpTokensFile;
|
|
51
|
+
/**
|
|
52
|
+
* Read and sanitize the MCP token store from `<dataDir>/mcp-tokens.json`.
|
|
53
|
+
* Returns an empty store when the file does not exist or contains invalid JSON.
|
|
54
|
+
* @param dataDir The resolved runtime data directory.
|
|
55
|
+
* @returns The sanitized token file, never rejects on missing-file or corrupt-JSON.
|
|
56
|
+
*/
|
|
57
|
+
export declare function readTokensFile(dataDir: string): Promise<McpTokensFile>;
|
|
58
|
+
/** Get the current token for a given server, or null when none is stored
|
|
59
|
+
* (or the persisted entry is malformed). */
|
|
60
|
+
export declare function getToken(dataDir: string, serverId: string): Promise<StoredMcpToken | null>;
|
|
61
|
+
/** Atomically merge a new token for `serverId` into the tokens file. */
|
|
62
|
+
export declare function setToken(dataDir: string, serverId: string, token: StoredMcpToken): Promise<void>;
|
|
63
|
+
/** Atomically delete the stored token for `serverId`. No-op when absent. */
|
|
64
|
+
export declare function clearToken(dataDir: string, serverId: string): Promise<void>;
|
|
65
|
+
/** Bulk read used by the spawn pipeline so we make one disk hit per spawn,
|
|
66
|
+
* not one per server. */
|
|
67
|
+
export declare function readAllTokens(dataDir: string): Promise<Record<string, StoredMcpToken>>;
|
|
68
|
+
/** True when the stored token is past its `expiresAt` (or within `skew`
|
|
69
|
+
* milliseconds of expiring). Returns false when no `expiresAt` is recorded
|
|
70
|
+
* — many providers issue non-expiring tokens. */
|
|
71
|
+
export declare function isTokenExpired(token: StoredMcpToken, now?: number, skew?: number): boolean;
|
|
72
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/core/tokens.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;iCAC6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACzC;AAYD;;6DAE6D;AAC7D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAY9D;AAgED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAa5E;AA4BD;4CAC4C;AAC5C,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAGhC;AAED,wEAAwE;AACxE,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,4EAA4E;AAC5E,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;yBACyB;AACzB,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAGzC;AAED;;iDAEiD;AACjD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EACrB,GAAG,GAAE,MAAmB,EACxB,IAAI,GAAE,MAAe,GACpB,OAAO,CAGT"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @jini-ai/mcp/core/tokens
|
|
3
|
+
* Persistent, 0600-guarded OAuth-token store for remote MCP servers, keyed by
|
|
4
|
+
* server id, with expiry checks. The durable counterpart to `oauth`'s live flow.
|
|
5
|
+
* Part of the MCP `core` kernel; depends on no sibling subdirectory.
|
|
6
|
+
*/
|
|
7
|
+
// Persistent OAuth-token storage for external HTTP / SSE MCP servers.
|
|
8
|
+
//
|
|
9
|
+
// The daemon owns the OAuth flow end-to-end so the user never needs a
|
|
10
|
+
// transient `localhost:<port>` listener (the killer of cloud deployments)
|
|
11
|
+
// and so a token survives across agent turns. Tokens are written to
|
|
12
|
+
// `<dataDir>/mcp-tokens.json` keyed by McpServerConfig.id, with the same
|
|
13
|
+
// atomic write + per-dataDir mutex pattern the rest of the runtime uses.
|
|
14
|
+
//
|
|
15
|
+
// File mode: owner-only (0600) from the very first byte, via
|
|
16
|
+
// `writeSecretFileAtomic` (CR-006 / SEC-RB-002) — NOT a post-rename chmod.
|
|
17
|
+
// The previous chmod-after-rename approach left a window where the file
|
|
18
|
+
// briefly existed with default (potentially world/group-readable)
|
|
19
|
+
// permissions, and silently continued persisting the token when chmod
|
|
20
|
+
// failed for any reason other than ENOTSUP/EPERM, which is not a
|
|
21
|
+
// fail-closed guarantee. `writeSecretFileAtomic` creates the file with mode
|
|
22
|
+
// 0600 atomically at creation and fails closed (removing the temp file and
|
|
23
|
+
// throwing) if a POSIX platform did not honor that mode; it skips
|
|
24
|
+
// verification on `win32`, which has no POSIX permission-bit model.
|
|
25
|
+
import { readFile } from 'node:fs/promises';
|
|
26
|
+
import path from 'node:path';
|
|
27
|
+
import { writeSecretFileAtomic } from './secure-write.js';
|
|
28
|
+
const EMPTY = { servers: {} };
|
|
29
|
+
function tokensFile(dataDir) {
|
|
30
|
+
return path.join(dataDir, 'mcp-tokens.json');
|
|
31
|
+
}
|
|
32
|
+
function isPlainObject(v) {
|
|
33
|
+
return Boolean(v) && typeof v === 'object' && !Array.isArray(v);
|
|
34
|
+
}
|
|
35
|
+
/** Coerce a freeform JSON blob into the typed shape, dropping anything that
|
|
36
|
+
* doesn't deserialize cleanly. Used both at read time and as a defensive
|
|
37
|
+
* pass when third-party tooling has hand-edited the file. */
|
|
38
|
+
export function sanitizeTokensFile(raw) {
|
|
39
|
+
if (!isPlainObject(raw))
|
|
40
|
+
return { servers: {} };
|
|
41
|
+
const servers = raw.servers;
|
|
42
|
+
if (!isPlainObject(servers))
|
|
43
|
+
return { servers: {} };
|
|
44
|
+
const out = {};
|
|
45
|
+
for (const [id, value] of Object.entries(servers)) {
|
|
46
|
+
if (id === '__proto__' || id === 'constructor')
|
|
47
|
+
continue;
|
|
48
|
+
const tok = sanitizeToken(value);
|
|
49
|
+
if (!tok)
|
|
50
|
+
continue;
|
|
51
|
+
out[id] = tok;
|
|
52
|
+
}
|
|
53
|
+
return { servers: out };
|
|
54
|
+
}
|
|
55
|
+
function sanitizeToken(raw) {
|
|
56
|
+
if (!isPlainObject(raw))
|
|
57
|
+
return null;
|
|
58
|
+
const accessToken = typeof raw.accessToken === 'string' ? raw.accessToken.trim() : '';
|
|
59
|
+
if (!accessToken)
|
|
60
|
+
return null;
|
|
61
|
+
const tokenType = typeof raw.tokenType === 'string' && raw.tokenType.trim()
|
|
62
|
+
? raw.tokenType.trim()
|
|
63
|
+
: 'Bearer';
|
|
64
|
+
const refreshToken = typeof raw.refreshToken === 'string' && raw.refreshToken.trim()
|
|
65
|
+
? raw.refreshToken.trim()
|
|
66
|
+
: undefined;
|
|
67
|
+
const scope = typeof raw.scope === 'string' && raw.scope.trim()
|
|
68
|
+
? raw.scope.trim()
|
|
69
|
+
: undefined;
|
|
70
|
+
const expiresAt = typeof raw.expiresAt === 'number' && Number.isFinite(raw.expiresAt)
|
|
71
|
+
? raw.expiresAt
|
|
72
|
+
: undefined;
|
|
73
|
+
const savedAt = typeof raw.savedAt === 'number' && Number.isFinite(raw.savedAt)
|
|
74
|
+
? raw.savedAt
|
|
75
|
+
: Date.now();
|
|
76
|
+
const tokenEndpoint = typeof raw.tokenEndpoint === 'string' && raw.tokenEndpoint.trim()
|
|
77
|
+
? raw.tokenEndpoint.trim()
|
|
78
|
+
: undefined;
|
|
79
|
+
const clientId = typeof raw.clientId === 'string' && raw.clientId.trim()
|
|
80
|
+
? raw.clientId.trim()
|
|
81
|
+
: undefined;
|
|
82
|
+
const clientSecret = typeof raw.clientSecret === 'string' && raw.clientSecret.trim()
|
|
83
|
+
? raw.clientSecret.trim()
|
|
84
|
+
: undefined;
|
|
85
|
+
const authServerIssuer = typeof raw.authServerIssuer === 'string' && raw.authServerIssuer.trim()
|
|
86
|
+
? raw.authServerIssuer.trim()
|
|
87
|
+
: undefined;
|
|
88
|
+
const redirectUri = typeof raw.redirectUri === 'string' && raw.redirectUri.trim()
|
|
89
|
+
? raw.redirectUri.trim()
|
|
90
|
+
: undefined;
|
|
91
|
+
const resourceUrl = typeof raw.resourceUrl === 'string' && raw.resourceUrl.trim()
|
|
92
|
+
? raw.resourceUrl.trim()
|
|
93
|
+
: undefined;
|
|
94
|
+
const out = { accessToken, tokenType, savedAt };
|
|
95
|
+
if (refreshToken)
|
|
96
|
+
out.refreshToken = refreshToken;
|
|
97
|
+
if (scope)
|
|
98
|
+
out.scope = scope;
|
|
99
|
+
if (expiresAt !== undefined)
|
|
100
|
+
out.expiresAt = expiresAt;
|
|
101
|
+
if (tokenEndpoint)
|
|
102
|
+
out.tokenEndpoint = tokenEndpoint;
|
|
103
|
+
if (clientId)
|
|
104
|
+
out.clientId = clientId;
|
|
105
|
+
if (clientSecret)
|
|
106
|
+
out.clientSecret = clientSecret;
|
|
107
|
+
if (authServerIssuer)
|
|
108
|
+
out.authServerIssuer = authServerIssuer;
|
|
109
|
+
if (redirectUri)
|
|
110
|
+
out.redirectUri = redirectUri;
|
|
111
|
+
if (resourceUrl)
|
|
112
|
+
out.resourceUrl = resourceUrl;
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Read and sanitize the MCP token store from `<dataDir>/mcp-tokens.json`.
|
|
117
|
+
* Returns an empty store when the file does not exist or contains invalid JSON.
|
|
118
|
+
* @param dataDir The resolved runtime data directory.
|
|
119
|
+
* @returns The sanitized token file, never rejects on missing-file or corrupt-JSON.
|
|
120
|
+
*/
|
|
121
|
+
export async function readTokensFile(dataDir) {
|
|
122
|
+
try {
|
|
123
|
+
const raw = await readFile(tokensFile(dataDir), 'utf8');
|
|
124
|
+
return sanitizeTokensFile(JSON.parse(raw));
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
const e = err;
|
|
128
|
+
if (e.code === 'ENOENT')
|
|
129
|
+
return { ...EMPTY, servers: { ...EMPTY.servers } };
|
|
130
|
+
if (e.name === 'SyntaxError') {
|
|
131
|
+
console.error('[mcp-tokens] Corrupted JSON, returning empty:', e.message);
|
|
132
|
+
return { ...EMPTY, servers: { ...EMPTY.servers } };
|
|
133
|
+
}
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const writeLocks = new Map();
|
|
138
|
+
async function withLock(dataDir, fn) {
|
|
139
|
+
const prev = writeLocks.get(dataDir) ?? Promise.resolve();
|
|
140
|
+
const task = prev.catch(() => { }).then(fn);
|
|
141
|
+
writeLocks.set(dataDir, task);
|
|
142
|
+
try {
|
|
143
|
+
return await task;
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
if (writeLocks.get(dataDir) === task)
|
|
147
|
+
writeLocks.delete(dataDir);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function writeTokensFile(dataDir, next) {
|
|
151
|
+
const file = tokensFile(dataDir);
|
|
152
|
+
// Bearer tokens can hand someone posting-as-you against the upstream MCP,
|
|
153
|
+
// so the file is created with owner-only (0600) permissions from the
|
|
154
|
+
// first byte and the write fails closed if that can't be guaranteed on a
|
|
155
|
+
// POSIX platform — see `writeSecretFileAtomic`.
|
|
156
|
+
await writeSecretFileAtomic(file, JSON.stringify(next, null, 2));
|
|
157
|
+
return next;
|
|
158
|
+
}
|
|
159
|
+
/** Get the current token for a given server, or null when none is stored
|
|
160
|
+
* (or the persisted entry is malformed). */
|
|
161
|
+
export async function getToken(dataDir, serverId) {
|
|
162
|
+
const file = await readTokensFile(dataDir);
|
|
163
|
+
return file.servers[serverId] ?? null;
|
|
164
|
+
}
|
|
165
|
+
/** Atomically merge a new token for `serverId` into the tokens file. */
|
|
166
|
+
export async function setToken(dataDir, serverId, token) {
|
|
167
|
+
await withLock(dataDir, async () => {
|
|
168
|
+
const file = await readTokensFile(dataDir);
|
|
169
|
+
file.servers[serverId] = token;
|
|
170
|
+
await writeTokensFile(dataDir, file);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/** Atomically delete the stored token for `serverId`. No-op when absent. */
|
|
174
|
+
export async function clearToken(dataDir, serverId) {
|
|
175
|
+
await withLock(dataDir, async () => {
|
|
176
|
+
const file = await readTokensFile(dataDir);
|
|
177
|
+
if (!(serverId in file.servers))
|
|
178
|
+
return;
|
|
179
|
+
delete file.servers[serverId];
|
|
180
|
+
await writeTokensFile(dataDir, file);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/** Bulk read used by the spawn pipeline so we make one disk hit per spawn,
|
|
184
|
+
* not one per server. */
|
|
185
|
+
export async function readAllTokens(dataDir) {
|
|
186
|
+
const file = await readTokensFile(dataDir);
|
|
187
|
+
return file.servers;
|
|
188
|
+
}
|
|
189
|
+
/** True when the stored token is past its `expiresAt` (or within `skew`
|
|
190
|
+
* milliseconds of expiring). Returns false when no `expiresAt` is recorded
|
|
191
|
+
* — many providers issue non-expiring tokens. */
|
|
192
|
+
export function isTokenExpired(token, now = Date.now(), skew = 30_000) {
|
|
193
|
+
if (typeof token.expiresAt !== 'number')
|
|
194
|
+
return false;
|
|
195
|
+
return token.expiresAt - skew <= now;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/core/tokens.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @jini-ai/mcp
|
|
3
|
+
* Public barrel for the MCP (Model Context Protocol) domain. External code
|
|
4
|
+
* imports MCP capabilities only from here — never from a subdirectory — so the
|
|
5
|
+
* internal split (`core` kernel + `client` / `agent-install` concerns) can move
|
|
6
|
+
* without touching consumers.
|
|
7
|
+
*
|
|
8
|
+
* Re-exports are explicit and named (no `export *`) so the public surface is
|
|
9
|
+
* visible here and name collisions surface at build time.
|
|
10
|
+
*/
|
|
11
|
+
export { inferMcpAuthModeForUrl, sanitizeMcpServer, sanitizeMcpConfig, readMcpConfig, writeMcpConfig, isManagedProjectCwd, buildClaudeMcpJson, buildAcpMcpServers, buildOpenCodeMcpConfigContent, } from './core/index.js';
|
|
12
|
+
export type { McpTransport, McpAuthMode, McpServerConfig, McpConfig, AcpMcpServer, OpenCodeConfigBuildOptions, } from './core/index.js';
|
|
13
|
+
export { generateCodeVerifier, deriveCodeChallenge, generateState, discoverProtectedResource, discoverAuthServer, registerClient, getOrRegisterClient, buildAuthorizeUrl, exchangeCodeForToken, refreshAccessToken, PendingAuthCache, beginAuth, } from './core/index.js';
|
|
14
|
+
export type { ProtectedResourceMetadata, AuthorizationServerMetadata, RegisteredClient, OAuthTokenResponse, PendingAuthState, AuthorizeUrlInput, ExchangeCodeInput, RefreshTokenInput, BeginAuthInput, BeginAuthResult, } from './core/index.js';
|
|
15
|
+
export { sanitizeTokensFile, readTokensFile, getToken, setToken, clearToken, readAllTokens, isTokenExpired, } from './core/index.js';
|
|
16
|
+
export type { StoredMcpToken, McpTokensFile } from './core/index.js';
|
|
17
|
+
export { buildMcpInstallPayload } from './core/index.js';
|
|
18
|
+
export type { BuildMcpInstallPayloadInputs, McpInstallPayload } from './core/index.js';
|
|
19
|
+
export { createMcpIdleExitController, extractRelativeRefs, isTextualMime, } from './client/index.js';
|
|
20
|
+
export { cancelRunTool, createMcpToolServer, errorResult, getActiveContextTool, getDaemonJson, getRunTool, listAgentsTool, okResult, postDaemonJson, requireString, RUN_TOOLS, startRunTool, toolsToList, buildToolIndex, handleToolCall, DaemonResponseTooLargeError, } from './server/index.js';
|
|
21
|
+
export type { DaemonRequestOptions, McpServerLike, McpToolContext, McpToolDef, McpToolServerHandle, McpToolServerOptions, McpTransportLike, } from './server/index.js';
|
|
22
|
+
export { activeContextResource, buildResourceIndex, handleResourceRead, KERNEL_RESOURCES, resourcesToList, } from './server/index.js';
|
|
23
|
+
export type { McpResourceDef, McpResourceReadResult } from './server/index.js';
|
|
24
|
+
export { createExecuteDelegatedToolTool } from './server/index.js';
|
|
25
|
+
export type { CreateExecuteDelegatedToolToolOptions } from './server/index.js';
|
|
26
|
+
export { AGENT_SLUGS, isAgentSlug, planAgentInstall, applyJsonInstall, removeJsonInstall, } from './agent-install/index.js';
|
|
27
|
+
export type { AgentSlug, McpLaunchSpec, PlanContext, CliInstallPlan, JsonInstallPlan, ManualInstallPlan, InstallPlan, } from './agent-install/index.js';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,SAAS,EACT,YAAY,EACZ,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,GACV,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,yBAAyB,EACzB,2BAA2B,EAC3B,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,YAAY,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGvF,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,EACd,QAAQ,EACR,cAAc,EACd,aAAa,EACb,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,YAAY,EAAE,qCAAqC,EAAE,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EACL,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,WAAW,GACZ,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @jini-ai/mcp
|
|
3
|
+
* Public barrel for the MCP (Model Context Protocol) domain. External code
|
|
4
|
+
* imports MCP capabilities only from here — never from a subdirectory — so the
|
|
5
|
+
* internal split (`core` kernel + `client` / `agent-install` concerns) can move
|
|
6
|
+
* without touching consumers.
|
|
7
|
+
*
|
|
8
|
+
* Re-exports are explicit and named (no `export *`) so the public surface is
|
|
9
|
+
* visible here and name collisions surface at build time.
|
|
10
|
+
*/
|
|
11
|
+
// ── core: config schema + IO ────────────────────────────────────────────────
|
|
12
|
+
export { inferMcpAuthModeForUrl, sanitizeMcpServer, sanitizeMcpConfig, readMcpConfig, writeMcpConfig, isManagedProjectCwd, buildClaudeMcpJson, buildAcpMcpServers, buildOpenCodeMcpConfigContent, } from './core/index.js';
|
|
13
|
+
// ── core: OAuth 2.1 / PKCE flow ─────────────────────────────────────────────
|
|
14
|
+
export { generateCodeVerifier, deriveCodeChallenge, generateState, discoverProtectedResource, discoverAuthServer, registerClient, getOrRegisterClient, buildAuthorizeUrl, exchangeCodeForToken, refreshAccessToken, PendingAuthCache, beginAuth, } from './core/index.js';
|
|
15
|
+
// ── core: token store ───────────────────────────────────────────────────────
|
|
16
|
+
export { sanitizeTokensFile, readTokensFile, getToken, setToken, clearToken, readAllTokens, isTokenExpired, } from './core/index.js';
|
|
17
|
+
// ── core: install-info payload ──────────────────────────────────────────────
|
|
18
|
+
export { buildMcpInstallPayload } from './core/index.js';
|
|
19
|
+
// ── client: product-neutral stdio-server runtime primitives ─────────────────
|
|
20
|
+
export { createMcpIdleExitController, extractRelativeRefs, isTextualMime, } from './client/index.js';
|
|
21
|
+
// ── server: the generic MCP tool-hosting mechanism + kernel-run tool defs ───
|
|
22
|
+
export { cancelRunTool, createMcpToolServer, errorResult, getActiveContextTool, getDaemonJson, getRunTool, listAgentsTool, okResult, postDaemonJson, requireString, RUN_TOOLS, startRunTool, toolsToList, buildToolIndex, handleToolCall, DaemonResponseTooLargeError, } from './server/index.js';
|
|
23
|
+
// ── server: the generic MCP resource surface + kernel resource defs ────────
|
|
24
|
+
export { activeContextResource, buildResourceIndex, handleResourceRead, KERNEL_RESOURCES, resourcesToList, } from './server/index.js';
|
|
25
|
+
// ── server: gap 3's MCP-callback delegated-tool-execution def ──────────────
|
|
26
|
+
export { createExecuteDelegatedToolTool } from './server/index.js';
|
|
27
|
+
// ── agent-install: register an MCP server into external agents ──────────────
|
|
28
|
+
export { AGENT_SLUGS, isAgentSlug, planAgentInstall, applyJsonInstall, removeJsonInstall, } from './agent-install/index.js';
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,+EAA+E;AAC/E,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AAUzB,+EAA+E;AAC/E,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAczB,+EAA+E;AAC/E,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,+EAA+E;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,+EAA+E;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,UAAU,EACV,cAAc,EACd,QAAQ,EACR,cAAc,EACd,aAAa,EACb,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,cAAc,EACd,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAW3B,8EAA8E;AAC9E,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAG3B,8EAA8E;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAGnE,+EAA+E;AAC/E,OAAO,EACL,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Thrown internally when a response exceeds its byte cap; always translated to a plain `Error` before it crosses this module's public functions. */
|
|
2
|
+
export declare class DaemonResponseTooLargeError extends Error {
|
|
3
|
+
readonly limitBytes: number;
|
|
4
|
+
constructor(limitBytes: number);
|
|
5
|
+
}
|
|
6
|
+
export interface DaemonRequestOptions {
|
|
7
|
+
/** Defaults to the global `fetch`; inject for tests. */
|
|
8
|
+
fetchImpl?: typeof fetch;
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
/** Request deadline in ms. Defaults to {@link DEFAULT_TIMEOUT_MS}. */
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
/** Maximum daemon response size in bytes before the read is aborted. Defaults to {@link DEFAULT_MAX_RESPONSE_BYTES}. */
|
|
13
|
+
maxResponseBytes?: number;
|
|
14
|
+
/** Caller-supplied cancellation signal; combined with the internal timeout signal, so either one aborts the request. */
|
|
15
|
+
signal?: AbortSignal;
|
|
16
|
+
}
|
|
17
|
+
/** `GET <baseUrl><route>` and return the parsed JSON response, throwing on network failure or a non-2xx status. */
|
|
18
|
+
export declare function getDaemonJson<T = unknown>(baseUrl: string, route: string, options?: DaemonRequestOptions): Promise<T>;
|
|
19
|
+
/** `POST body` (JSON-serialized) to `<baseUrl><route>` and return the parsed JSON response, throwing on network failure or a non-2xx status. */
|
|
20
|
+
export declare function postDaemonJson<T = unknown>(baseUrl: string, route: string, body: unknown, options?: DaemonRequestOptions): Promise<T>;
|
|
21
|
+
//# sourceMappingURL=daemon-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-client.d.ts","sourceRoot":"","sources":["../../src/server/daemon-client.ts"],"names":[],"mappings":"AAmCA,qJAAqJ;AACrJ,qBAAa,2BAA4B,SAAQ,KAAK;aACxB,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAI/C;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wHAAwH;IACxH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wHAAwH;IACxH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA+ID,mHAAmH;AACnH,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3H;AAED,gJAAgJ;AAChJ,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3I"}
|