@chrischall/mcp-utils 0.6.0 → 0.8.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 +148 -9
- package/dist/auth/index.d.ts +15 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +48 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/config/index.d.ts +66 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +97 -0
- package/dist/config/index.js.map +1 -1
- package/dist/errors/index.d.ts +12 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +45 -3
- package/dist/errors/index.js.map +1 -1
- package/dist/fetchproxy/index.d.ts +149 -2
- package/dist/fetchproxy/index.d.ts.map +1 -1
- package/dist/fetchproxy/index.js +179 -2
- package/dist/fetchproxy/index.js.map +1 -1
- package/dist/http/index.d.ts +179 -5
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +280 -21
- package/dist/http/index.js.map +1 -1
- package/dist/http/throttle.d.ts +28 -0
- package/dist/http/throttle.d.ts.map +1 -0
- package/dist/http/throttle.js +39 -0
- package/dist/http/throttle.js.map +1 -0
- package/dist/response/index.d.ts +5 -1
- package/dist/response/index.d.ts.map +1 -1
- package/dist/response/index.js +7 -2
- package/dist/response/index.js.map +1 -1
- package/dist/session/index.d.ts +139 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +215 -9
- package/dist/session/index.js.map +1 -1
- package/dist/zod/index.d.ts +19 -0
- package/dist/zod/index.d.ts.map +1 -1
- package/dist/zod/index.js +27 -0
- package/dist/zod/index.js.map +1 -1
- package/package.json +1 -1
package/dist/errors/index.js
CHANGED
|
@@ -113,12 +113,54 @@ export function createHelpfulError(message, opts) {
|
|
|
113
113
|
const BEARER_RE = /(bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi;
|
|
114
114
|
// A JWT-shaped triple (header.payload.signature), each segment base64url-ish.
|
|
115
115
|
const JWT_RE = /\b[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{8,}\b/g;
|
|
116
|
+
// `Authorization: Basic <base64 credentials>` — anchored on the full header name
|
|
117
|
+
// so prose like "basic principles" never matches.
|
|
118
|
+
const BASIC_AUTH_RE = /(authorization\s*:\s*basic\s+)[A-Za-z0-9+/=_-]{6,}/gi;
|
|
119
|
+
// `Set-Cookie: name=value; Path=/; …` — redact the cookie VALUE only; the name
|
|
120
|
+
// and the (non-secret) attributes stay visible for debuggability.
|
|
121
|
+
const SET_COOKIE_RE = /(\bset-cookie\s*:\s*)([^=;,\s]+)=[^;,\s]*/gi;
|
|
122
|
+
// `Cookie: a=1; b=2` — redact every pair's value, keep the names. The lookbehind
|
|
123
|
+
// keeps this from re-matching the `Cookie` inside `Set-Cookie:`.
|
|
124
|
+
const COOKIE_HEADER_RE = /((?<!set-)\bcookie\s*:\s*)((?:[^=;,\s]+=[^;,\s]*)(?:;\s*[^=;,\s]+=[^;,\s]*)*)/gi;
|
|
125
|
+
// Well-known API-key shapes as standalone tokens, each anchored to its documented
|
|
126
|
+
// prefix + length/charset so ordinary prose (short hex ids, version strings,
|
|
127
|
+
// UUIDs) never matches. Charsets containing `-` (a non-word character) can end
|
|
128
|
+
// on it, where a trailing `\b` has nothing to anchor on — those patterns carry
|
|
129
|
+
// a negative lookahead over their own charset instead.
|
|
130
|
+
const API_KEY_RE = new RegExp([
|
|
131
|
+
'sk-[A-Za-z0-9_-]{20,}(?![A-Za-z0-9_-])', // OpenAI / Anthropic (incl. sk-ant-…)
|
|
132
|
+
'gh[pousr]_[A-Za-z0-9]{36,}\\b', // GitHub ghp_/gho_/ghu_/ghs_/ghr_
|
|
133
|
+
'xox[baprs]-[A-Za-z0-9-]{10,}(?![A-Za-z0-9-])', // Slack
|
|
134
|
+
'AIza[0-9A-Za-z_-]{35}(?![0-9A-Za-z_-])', // Google API key (39 chars total)
|
|
135
|
+
'AKIA[0-9A-Z]{16}\\b', // AWS access key id (20 chars total)
|
|
136
|
+
'whsec_[A-Za-z0-9]{16,}\\b', // webhook signing secret (Stripe-style)
|
|
137
|
+
]
|
|
138
|
+
.map((p) => `\\b${p}`)
|
|
139
|
+
.join('|'), 'g');
|
|
140
|
+
// Secret-bearing query params — the value after `=` up to `&`/`#`/quote/space/end.
|
|
141
|
+
// Anchored on `?`/`&` so plain prose like `key=primary` (no URL context) never
|
|
142
|
+
// matches; that constraint is what makes short names like `key`/`sig` safe.
|
|
143
|
+
const QUERY_SECRET_RE = /([?&](?:access_token|refresh_token|client_secret|api_?key|signature|token|key|sig)=)[^&#\s"'<>`]+/gi;
|
|
116
144
|
/**
|
|
117
145
|
* Redact secrets that commonly leak into upstream error bodies before the text
|
|
118
|
-
* is surfaced to a client: `Bearer <token>`
|
|
146
|
+
* is surfaced to a client: `Bearer <token>` / `Authorization: Basic <…>` headers,
|
|
147
|
+
* `Cookie:` / `Set-Cookie:` header values (cookie names stay visible), standalone
|
|
148
|
+
* JWTs, well-known API-key shapes (OpenAI/Anthropic `sk-…`, GitHub `ghp_…`,
|
|
149
|
+
* Slack `xox?-…`, Google `AIza…`, AWS `AKIA…`, `whsec_…`), and secret-bearing
|
|
150
|
+
* URL query params (`access_token`, `api_key`, `token`, `key`, `sig`, …).
|
|
151
|
+
*
|
|
152
|
+
* Exported so fleet repos can redact custom strings (log lines, debug payloads)
|
|
153
|
+
* without taking on {@link truncateErrorMessage}'s length cap.
|
|
119
154
|
*/
|
|
120
|
-
function redactSecrets(text) {
|
|
121
|
-
return text
|
|
155
|
+
export function redactSecrets(text) {
|
|
156
|
+
return text
|
|
157
|
+
.replace(BEARER_RE, '$1[REDACTED]')
|
|
158
|
+
.replace(BASIC_AUTH_RE, '$1[REDACTED]')
|
|
159
|
+
.replace(SET_COOKIE_RE, '$1$2=[REDACTED]')
|
|
160
|
+
.replace(COOKIE_HEADER_RE, (_m, prefix, pairs) => `${prefix}${pairs.replace(/=[^;,\s]*/g, '=[REDACTED]')}`)
|
|
161
|
+
.replace(API_KEY_RE, '[REDACTED]')
|
|
162
|
+
.replace(QUERY_SECRET_RE, '$1[REDACTED]')
|
|
163
|
+
.replace(JWT_RE, '[REDACTED]');
|
|
122
164
|
}
|
|
123
165
|
/**
|
|
124
166
|
* Redact secrets, then cap an (upstream) error string at `max` characters,
|
package/dist/errors/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,13 @@
|
|
|
9
9
|
*
|
|
10
10
|
* - {@link createFetchproxyTransport} wraps a `FetchproxyServer` in the
|
|
11
11
|
* `start` / `close` / `status` lifecycle every MCP's transport interface
|
|
12
|
-
* expects, with optional debug-gated role logging
|
|
12
|
+
* expects, with optional debug-gated role logging, PLUS the opt-in verb
|
|
13
|
+
* passthroughs (`fetch` / `requestJson` / `runProbe`) that redfin / homes /
|
|
14
|
+
* compass / musescore had each hand-rolled over the server.
|
|
15
|
+
* - {@link registerBridgeHealthcheckTool} registers a `<prefix>_healthcheck`
|
|
16
|
+
* tool that round-trips a probe path through the bridge and surfaces the
|
|
17
|
+
* actionable hint ladder compass + musescore had each copied (with drifted
|
|
18
|
+
* internals + a hardcoded-port bug) into `src/tools/healthcheck.ts`.
|
|
13
19
|
* - {@link createBootstrapOpts} assembles a multi-domain / capture-header /
|
|
14
20
|
* storage-pointer declaration fragment of `FetchproxyServerOpts`, deriving
|
|
15
21
|
* the required `capabilities` from the declared bootstrap so callers can't
|
|
@@ -18,10 +24,52 @@
|
|
|
18
24
|
* The adapter shape is identical across 12+ fetchproxy MCPs; collapsing it here
|
|
19
25
|
* keeps the per-row / concurrency / deadline helpers as re-exports rather than
|
|
20
26
|
* re-rolled code.
|
|
27
|
+
*
|
|
28
|
+
* Lazy-import note: this whole subpath is gated behind the OPTIONAL
|
|
29
|
+
* `@fetchproxy/server` peer dep — a consumer only resolves it by importing
|
|
30
|
+
* `@chrischall/mcp-utils/fetchproxy`, never via the core barrel. The eager
|
|
31
|
+
* top-level import below therefore never reaches a `.mcpb` bundle that
|
|
32
|
+
* externalizes `@fetchproxy/server` unless that consumer actually opted into
|
|
33
|
+
* the bridge. Everything added here routes through that same already-imported
|
|
34
|
+
* `FetchproxyServer` instance (no NEW top-level `@fetchproxy/server` import),
|
|
35
|
+
* so the bundle-load smoke posture is unchanged.
|
|
21
36
|
*/
|
|
22
|
-
import { FetchproxyServer, type FetchproxyServerOpts } from '@fetchproxy/server';
|
|
37
|
+
import { FetchproxyServer, type FetchproxyServerOpts, type HttpResponse, type BridgeProbeResult } from '@fetchproxy/server';
|
|
38
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
23
39
|
export { FetchproxyServer, mapWithConcurrency, withDeadline, TokenBucket, classifyBotWall, retryOnceOnTimeout, FetchproxyProtocolError, FetchproxyHttpError, FetchproxyBridgeDownError, FetchproxyTimeoutError, classifyBridgeError, classifyRowError, classifyFetchError, backoffDelayMs, BRIDGE_CONCURRENCY, chunk, sleep, extractGlobalAssign, extractBalancedObject, extractImgTags, lastPathSegment, } from '@fetchproxy/server';
|
|
24
40
|
export type { FetchproxyServerOpts, FetchResult, FetchResultError, HttpResponse, RequestOpts, BodylessRequestOpts, BridgeHealth, BridgeProbeResult, BridgeError, FetchErrorKind, BotWallResult, BotWallVendor, TokenBucketOptions, BackoffOptions, DeadlineOutcome, } from '@fetchproxy/server';
|
|
41
|
+
/**
|
|
42
|
+
* One request to round-trip through the bridge. The path is resolved relative
|
|
43
|
+
* to the transport's declared domain (a `defaultSubdomain` — e.g. `'www'` — is
|
|
44
|
+
* applied unless the caller overrides it per-call). This is the common
|
|
45
|
+
* `FetchInit` redfin / homes / compass / musescore each declared verbatim in
|
|
46
|
+
* their `src/transport.ts`.
|
|
47
|
+
*/
|
|
48
|
+
export interface FetchproxyFetchInit {
|
|
49
|
+
/** Path-and-query relative to the declared domain, e.g. `/robots.txt`. */
|
|
50
|
+
path: string;
|
|
51
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
52
|
+
headers?: Record<string, string>;
|
|
53
|
+
/** Serialized request body. JSON callers stringify before calling. */
|
|
54
|
+
body?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Per-call subdomain override. Defaults to the transport's `defaultSubdomain`
|
|
57
|
+
* (and, absent that, the apex). Absolute `http(s)://` paths self-describe
|
|
58
|
+
* their host, so this is ignored for them.
|
|
59
|
+
*/
|
|
60
|
+
subdomain?: string;
|
|
61
|
+
/** Per-call base-domain selector (required only for multi-domain MCPs). */
|
|
62
|
+
domain?: string;
|
|
63
|
+
}
|
|
64
|
+
/** The success-arm `{status, body, url}` triple every consumer returns. */
|
|
65
|
+
export type FetchproxyFetchResult = HttpResponse;
|
|
66
|
+
/** Options for {@link FetchproxyTransport.requestJson}. */
|
|
67
|
+
export interface FetchproxyRequestJsonInit {
|
|
68
|
+
headers?: Record<string, string>;
|
|
69
|
+
body?: unknown;
|
|
70
|
+
subdomain?: string;
|
|
71
|
+
domain?: string;
|
|
72
|
+
}
|
|
25
73
|
/**
|
|
26
74
|
* The lifecycle surface every per-MCP fetchproxy transport interface exposes.
|
|
27
75
|
* `createFetchproxyTransport` returns this, typed as the caller's `T` so it can
|
|
@@ -48,6 +96,31 @@ export interface FetchproxyTransport {
|
|
|
48
96
|
* verb.
|
|
49
97
|
*/
|
|
50
98
|
readonly server: FetchproxyServer;
|
|
99
|
+
/**
|
|
100
|
+
* Verb passthrough: round-trip one request through `server.request(...)`,
|
|
101
|
+
* applying the transport's `defaultSubdomain`, and return the success-arm
|
|
102
|
+
* `{status, body, url}` triple. Bridge failures throw the typed errors
|
|
103
|
+
* (`FetchproxyBridgeDownError` / `FetchproxyTimeoutError` / …), exactly like
|
|
104
|
+
* `server.request`. This is the `fetch(init)` redfin / homes / compass /
|
|
105
|
+
* musescore each wrote by hand.
|
|
106
|
+
*/
|
|
107
|
+
fetch(init: FetchproxyFetchInit): Promise<FetchproxyFetchResult>;
|
|
108
|
+
/**
|
|
109
|
+
* Verb passthrough over `server.requestJson(...)` (serialization + header
|
|
110
|
+
* defaults + 204→null + JSON.parse). Returns BOTH the parsed `data` and the
|
|
111
|
+
* raw success-arm `result`, so the caller keeps its per-site `throwIfNotOk` /
|
|
112
|
+
* sign-in guards over `result`. `defaultSubdomain` is applied.
|
|
113
|
+
*/
|
|
114
|
+
requestJson<T = unknown>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, init?: FetchproxyRequestJsonInit): Promise<{
|
|
115
|
+
data: T | null;
|
|
116
|
+
result: FetchproxyFetchResult;
|
|
117
|
+
}>;
|
|
118
|
+
/**
|
|
119
|
+
* Verb passthrough over `server.runProbe(...)` — run one healthcheck probe,
|
|
120
|
+
* measure elapsed ms, classify any thrown error, and project the post-probe
|
|
121
|
+
* `bridgeHealth()`. Powers {@link registerBridgeHealthcheckTool}.
|
|
122
|
+
*/
|
|
123
|
+
runProbe(fetchFn: (path: string) => Promise<unknown>, probePath: string): Promise<BridgeProbeResult>;
|
|
51
124
|
}
|
|
52
125
|
/** Options for {@link createFetchproxyTransport}. */
|
|
53
126
|
export type CreateFetchproxyTransportOptions = FetchproxyServerOpts & {
|
|
@@ -59,6 +132,14 @@ export type CreateFetchproxyTransportOptions = FetchproxyServerOpts & {
|
|
|
59
132
|
debugEnvVar?: string;
|
|
60
133
|
/** Env source for {@link debugEnvVar}. Defaults to `process.env`. */
|
|
61
134
|
env?: NodeJS.ProcessEnv;
|
|
135
|
+
/**
|
|
136
|
+
* Subdomain the verb adapters (`fetch` / `requestJson`) apply per call unless
|
|
137
|
+
* the caller overrides it. This is the ONE per-site bit of the verb surface:
|
|
138
|
+
* redfin / homes / compass pin `'www'`; apex-served sites (musescore) omit it
|
|
139
|
+
* to hit the bare domain. Absolute `http(s)://` paths self-describe their host
|
|
140
|
+
* and ignore this entirely.
|
|
141
|
+
*/
|
|
142
|
+
defaultSubdomain?: string;
|
|
62
143
|
};
|
|
63
144
|
/**
|
|
64
145
|
* Wrap a `FetchproxyServer` in the `start`/`close`/`status` lifecycle the
|
|
@@ -155,4 +236,70 @@ export interface BridgeErrorInfo {
|
|
|
155
236
|
* string kind (drop-in compatible with `@fetchproxy/server`).
|
|
156
237
|
*/
|
|
157
238
|
export declare function bridgeErrorInfo(err: unknown): BridgeErrorInfo;
|
|
239
|
+
/** The diagnostic result a `<prefix>_healthcheck` tool returns. */
|
|
240
|
+
export interface BridgeHealthcheckResult {
|
|
241
|
+
ok: boolean;
|
|
242
|
+
bridge: BridgeProbeResult['bridge'] & {
|
|
243
|
+
last_extension_message_at: number | null;
|
|
244
|
+
};
|
|
245
|
+
probe: {
|
|
246
|
+
url: string;
|
|
247
|
+
elapsed_ms: number;
|
|
248
|
+
status?: number;
|
|
249
|
+
body_length?: number;
|
|
250
|
+
};
|
|
251
|
+
error?: {
|
|
252
|
+
kind: BridgeErrorInfo['type'];
|
|
253
|
+
message: string;
|
|
254
|
+
/** Server-authored next-step hint (`FetchproxyBridgeDownError.hint`), when present. */
|
|
255
|
+
bridge_hint?: string;
|
|
256
|
+
};
|
|
257
|
+
/** Plain-English next-step suggestion derived from the result. */
|
|
258
|
+
hint: string;
|
|
259
|
+
}
|
|
260
|
+
/** Options for {@link registerBridgeHealthcheckTool}. */
|
|
261
|
+
export interface RegisterBridgeHealthcheckToolArgs {
|
|
262
|
+
/** The `McpServer` to register the tool on. */
|
|
263
|
+
server: McpServer;
|
|
264
|
+
/** Tool-name + host-banner prefix, e.g. `'compass'` → `compass_healthcheck`. */
|
|
265
|
+
prefix: string;
|
|
266
|
+
/** Public probe path to round-trip, e.g. `'/robots.txt'`. */
|
|
267
|
+
probePath: string;
|
|
268
|
+
/**
|
|
269
|
+
* Display host for the probe URL + hint copy, e.g. `'compass.com'` or
|
|
270
|
+
* `'www.redfin.com'`. The probe URL is `https://<hostLabel><probePath>`.
|
|
271
|
+
*/
|
|
272
|
+
hostLabel: string;
|
|
273
|
+
/**
|
|
274
|
+
* The bridge transport — supplies `runProbe` (the probe loop + classification
|
|
275
|
+
* + post-probe bridge projection) and `status()` (for the liveness counter the
|
|
276
|
+
* projection omits). Any {@link FetchproxyTransport}-shaped object works.
|
|
277
|
+
*/
|
|
278
|
+
transport: Pick<FetchproxyTransport, 'runProbe' | 'status'>;
|
|
279
|
+
/**
|
|
280
|
+
* Performs the actual probe fetch for `probePath`. Required — most consumers
|
|
281
|
+
* pass `(path) => client.fetchHtml(path)` so the probe exercises the same
|
|
282
|
+
* client path real tools use (sign-in guards and all).
|
|
283
|
+
*/
|
|
284
|
+
probeFn: (path: string) => Promise<string>;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Register a `<prefix>_healthcheck` MCP tool that round-trips `probePath`
|
|
288
|
+
* through the bridge and reports bridge status + role + timing, plus an
|
|
289
|
+
* actionable hint ladder on failure.
|
|
290
|
+
*
|
|
291
|
+
* The probe loop / error classification / post-probe bridge projection all live
|
|
292
|
+
* in `transport.runProbe` (the `@fetchproxy/server` primitive); this factory
|
|
293
|
+
* owns only the tool registration, the result shape, and the hint ladder. The
|
|
294
|
+
* per-site bits (`prefix`, `probePath`, `hostLabel`, the probe `fetchFn`) are
|
|
295
|
+
* options.
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* registerBridgeHealthcheckTool({
|
|
299
|
+
* server, prefix: 'compass', probePath: '/robots.txt',
|
|
300
|
+
* hostLabel: 'compass.com', transport,
|
|
301
|
+
* probeFn: (p) => client.fetchHtml(p),
|
|
302
|
+
* });
|
|
303
|
+
*/
|
|
304
|
+
export declare function registerBridgeHealthcheckTool(args: RegisterBridgeHealthcheckToolArgs): void;
|
|
158
305
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
|
package/dist/fetchproxy/index.js
CHANGED
|
@@ -9,7 +9,13 @@
|
|
|
9
9
|
*
|
|
10
10
|
* - {@link createFetchproxyTransport} wraps a `FetchproxyServer` in the
|
|
11
11
|
* `start` / `close` / `status` lifecycle every MCP's transport interface
|
|
12
|
-
* expects, with optional debug-gated role logging
|
|
12
|
+
* expects, with optional debug-gated role logging, PLUS the opt-in verb
|
|
13
|
+
* passthroughs (`fetch` / `requestJson` / `runProbe`) that redfin / homes /
|
|
14
|
+
* compass / musescore had each hand-rolled over the server.
|
|
15
|
+
* - {@link registerBridgeHealthcheckTool} registers a `<prefix>_healthcheck`
|
|
16
|
+
* tool that round-trips a probe path through the bridge and surfaces the
|
|
17
|
+
* actionable hint ladder compass + musescore had each copied (with drifted
|
|
18
|
+
* internals + a hardcoded-port bug) into `src/tools/healthcheck.ts`.
|
|
13
19
|
* - {@link createBootstrapOpts} assembles a multi-domain / capture-header /
|
|
14
20
|
* storage-pointer declaration fragment of `FetchproxyServerOpts`, deriving
|
|
15
21
|
* the required `capabilities` from the declared bootstrap so callers can't
|
|
@@ -18,6 +24,15 @@
|
|
|
18
24
|
* The adapter shape is identical across 12+ fetchproxy MCPs; collapsing it here
|
|
19
25
|
* keeps the per-row / concurrency / deadline helpers as re-exports rather than
|
|
20
26
|
* re-rolled code.
|
|
27
|
+
*
|
|
28
|
+
* Lazy-import note: this whole subpath is gated behind the OPTIONAL
|
|
29
|
+
* `@fetchproxy/server` peer dep — a consumer only resolves it by importing
|
|
30
|
+
* `@chrischall/mcp-utils/fetchproxy`, never via the core barrel. The eager
|
|
31
|
+
* top-level import below therefore never reaches a `.mcpb` bundle that
|
|
32
|
+
* externalizes `@fetchproxy/server` unless that consumer actually opted into
|
|
33
|
+
* the bridge. Everything added here routes through that same already-imported
|
|
34
|
+
* `FetchproxyServer` instance (no NEW top-level `@fetchproxy/server` import),
|
|
35
|
+
* so the bundle-load smoke posture is unchanged.
|
|
21
36
|
*/
|
|
22
37
|
import { FetchproxyServer, FetchproxyBridgeDownError, classifyBridgeError as classifyBridgeErrorKind, } from '@fetchproxy/server';
|
|
23
38
|
import { truncateErrorMessage, messageOf } from '../errors/index.js';
|
|
@@ -70,7 +85,7 @@ function envFlagEnabled(key, env = process.env) {
|
|
|
70
85
|
* });
|
|
71
86
|
*/
|
|
72
87
|
export function createFetchproxyTransport(opts) {
|
|
73
|
-
const { debugEnvVar, env, ...serverOpts } = opts;
|
|
88
|
+
const { debugEnvVar, env, defaultSubdomain, ...serverOpts } = opts;
|
|
74
89
|
if (!serverOpts.serverName || serverOpts.serverName.trim().length === 0) {
|
|
75
90
|
throw new Error('createFetchproxyTransport: `serverName` is required.');
|
|
76
91
|
}
|
|
@@ -79,6 +94,15 @@ export function createFetchproxyTransport(opts) {
|
|
|
79
94
|
}
|
|
80
95
|
const server = new FetchproxyServer(serverOpts);
|
|
81
96
|
const debug = debugEnvVar !== undefined && envFlagEnabled(debugEnvVar, env ?? process.env);
|
|
97
|
+
// Apply `defaultSubdomain` only when the call didn't override it AND a
|
|
98
|
+
// default exists — so an apex-served MCP (no default) sends no `subdomain`
|
|
99
|
+
// and a per-call override always wins.
|
|
100
|
+
const withSubdomain = (callOpts) => {
|
|
101
|
+
if (callOpts.subdomain !== undefined || defaultSubdomain === undefined) {
|
|
102
|
+
return callOpts;
|
|
103
|
+
}
|
|
104
|
+
return { ...callOpts, subdomain: defaultSubdomain };
|
|
105
|
+
};
|
|
82
106
|
const transport = {
|
|
83
107
|
server,
|
|
84
108
|
get role() {
|
|
@@ -98,6 +122,30 @@ export function createFetchproxyTransport(opts) {
|
|
|
98
122
|
status() {
|
|
99
123
|
return server.bridgeHealth();
|
|
100
124
|
},
|
|
125
|
+
async fetch(init) {
|
|
126
|
+
const response = await server.request(init.method, init.path, withSubdomain({
|
|
127
|
+
...(init.headers !== undefined ? { headers: init.headers } : {}),
|
|
128
|
+
...(init.body !== undefined ? { body: init.body } : {}),
|
|
129
|
+
...(init.subdomain !== undefined ? { subdomain: init.subdomain } : {}),
|
|
130
|
+
...(init.domain !== undefined ? { domain: init.domain } : {}),
|
|
131
|
+
}));
|
|
132
|
+
return { status: response.status, body: response.body, url: response.url };
|
|
133
|
+
},
|
|
134
|
+
async requestJson(method, path, init = {}) {
|
|
135
|
+
const { data, result } = await server.requestJson(method, path, withSubdomain({
|
|
136
|
+
...(init.headers !== undefined ? { headers: init.headers } : {}),
|
|
137
|
+
...(init.body !== undefined ? { body: init.body } : {}),
|
|
138
|
+
...(init.subdomain !== undefined ? { subdomain: init.subdomain } : {}),
|
|
139
|
+
...(init.domain !== undefined ? { domain: init.domain } : {}),
|
|
140
|
+
}));
|
|
141
|
+
return {
|
|
142
|
+
data,
|
|
143
|
+
result: { status: result.status, body: result.body, url: result.url },
|
|
144
|
+
};
|
|
145
|
+
},
|
|
146
|
+
runProbe(fetchFn, probePath) {
|
|
147
|
+
return server.runProbe(fetchFn, probePath);
|
|
148
|
+
},
|
|
101
149
|
};
|
|
102
150
|
return transport;
|
|
103
151
|
}
|
|
@@ -200,4 +248,133 @@ export function bridgeErrorInfo(err) {
|
|
|
200
248
|
return { type: 'unknown', message };
|
|
201
249
|
}
|
|
202
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* Build the actionable next-step hint from a probe outcome. Order matters:
|
|
253
|
+
* the specific error kinds win over the generic role-based message, because a
|
|
254
|
+
* `bridge_down` can fire with `role === null` (the bridge can hand back the
|
|
255
|
+
* SW-eviction error before `listen()` resolves a role) and the specific hint
|
|
256
|
+
* must beat the "never bound a role" fallback.
|
|
257
|
+
*
|
|
258
|
+
* `port` is the ACTUAL configured bridge port (from `bridgeHealth()`), NOT a
|
|
259
|
+
* hardcoded literal — this is the audit-bug fix both copies shared.
|
|
260
|
+
*/
|
|
261
|
+
function healthcheckHint(args) {
|
|
262
|
+
const { hostLabel, prefix, probePath, port } = args;
|
|
263
|
+
if (args.ok) {
|
|
264
|
+
return `Bridge round-tripped ${probePath} successfully. If real tools still fail, the problem is downstream of fetchproxy (${hostLabel} redirecting on login, a bot-wall / behavioral challenge, etc.) — not the bridge.`;
|
|
265
|
+
}
|
|
266
|
+
if (args.errorKind === 'bridge_down') {
|
|
267
|
+
const base = `The fetchproxy browser extension's service worker is not responding. Chrome evicts extension service workers after ~30s idle by default — this looks like that case. Wake it by clicking the fetchproxy extension icon (or opening any ${hostLabel} tab and reloading), then retry. If it keeps happening, reload the extension from chrome://extensions.`;
|
|
268
|
+
return args.bridgeHint ? `${args.bridgeHint} ${base}` : base;
|
|
269
|
+
}
|
|
270
|
+
if (args.role === null) {
|
|
271
|
+
return `The bridge never bound a role. listen() may have failed silently on startup. Check stderr from ${prefix}-mcp for an error during start, and confirm port ${port} isn't blocked.`;
|
|
272
|
+
}
|
|
273
|
+
if (args.errorKind === 'timeout') {
|
|
274
|
+
return `Bridge is alive (role=${args.role}), but the request didn't get a response in time. Either (a) the fetchproxy browser extension isn't connected to this MCP yet — open the extension popup and check for a green dot next to "${prefix}-mcp", or (b) the signed-in ${hostLabel} tab is sleeping / closed. Open ${hostLabel} in your browser, then retry.`;
|
|
275
|
+
}
|
|
276
|
+
if (args.errorKind === 'protocol' || args.errorKind === 'http') {
|
|
277
|
+
return `The bridge returned a protocol error before any HTTP response. Most commonly: no ${hostLabel} tab is open, or the extension declined the request. Open ${hostLabel}, sign in, and retry.`;
|
|
278
|
+
}
|
|
279
|
+
return `Unexpected error — see the error.message field for details.`;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Register a `<prefix>_healthcheck` MCP tool that round-trips `probePath`
|
|
283
|
+
* through the bridge and reports bridge status + role + timing, plus an
|
|
284
|
+
* actionable hint ladder on failure.
|
|
285
|
+
*
|
|
286
|
+
* The probe loop / error classification / post-probe bridge projection all live
|
|
287
|
+
* in `transport.runProbe` (the `@fetchproxy/server` primitive); this factory
|
|
288
|
+
* owns only the tool registration, the result shape, and the hint ladder. The
|
|
289
|
+
* per-site bits (`prefix`, `probePath`, `hostLabel`, the probe `fetchFn`) are
|
|
290
|
+
* options.
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* registerBridgeHealthcheckTool({
|
|
294
|
+
* server, prefix: 'compass', probePath: '/robots.txt',
|
|
295
|
+
* hostLabel: 'compass.com', transport,
|
|
296
|
+
* probeFn: (p) => client.fetchHtml(p),
|
|
297
|
+
* });
|
|
298
|
+
*/
|
|
299
|
+
export function registerBridgeHealthcheckTool(args) {
|
|
300
|
+
const { server, prefix, probePath, hostLabel, transport, probeFn } = args;
|
|
301
|
+
const probeUrl = `https://${hostLabel}${probePath}`;
|
|
302
|
+
server.registerTool(`${prefix}_healthcheck`, {
|
|
303
|
+
title: 'Verify the fetchproxy bridge end-to-end',
|
|
304
|
+
description: `Round-trips a small public ${hostLabel} URL (${probePath}) through the fetchproxy bridge and returns diagnostics: the bridge's role (host/peer/null), port, version, the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'real ${hostLabel}-side problem'. Call this when a real tool fails and you want to know which hop broke. Read-only, no auth required.`,
|
|
305
|
+
annotations: {
|
|
306
|
+
title: 'Verify the fetchproxy bridge end-to-end',
|
|
307
|
+
readOnlyHint: true,
|
|
308
|
+
idempotentHint: true,
|
|
309
|
+
openWorldHint: true,
|
|
310
|
+
},
|
|
311
|
+
inputSchema: {},
|
|
312
|
+
}, async () => {
|
|
313
|
+
let probeBody = '';
|
|
314
|
+
let thrown;
|
|
315
|
+
const probeResult = await transport.runProbe(async (path) => {
|
|
316
|
+
try {
|
|
317
|
+
probeBody = await probeFn(path);
|
|
318
|
+
return probeBody;
|
|
319
|
+
}
|
|
320
|
+
catch (e) {
|
|
321
|
+
thrown = e;
|
|
322
|
+
throw e;
|
|
323
|
+
}
|
|
324
|
+
}, probePath);
|
|
325
|
+
const ok = probeResult.ok;
|
|
326
|
+
const probe = ok
|
|
327
|
+
? {
|
|
328
|
+
url: probeUrl,
|
|
329
|
+
elapsed_ms: probeResult.elapsed_ms,
|
|
330
|
+
status: 200,
|
|
331
|
+
body_length: probeBody.length,
|
|
332
|
+
}
|
|
333
|
+
: { url: probeUrl, elapsed_ms: probeResult.elapsed_ms };
|
|
334
|
+
let error;
|
|
335
|
+
let bridgeHint;
|
|
336
|
+
if (probeResult.error) {
|
|
337
|
+
// `runProbe` already classified the throw into `probeResult.error.kind`
|
|
338
|
+
// (fetchproxy's raw vocabulary). Trust that as the discriminator —
|
|
339
|
+
// mapping `'other'` → `'unknown'` to match the envelope — rather than
|
|
340
|
+
// re-classifying a plain `{kind,message}` object. Use the typed `thrown`
|
|
341
|
+
// (set by our probe wrapper) only to lift the server-authored
|
|
342
|
+
// `FetchproxyBridgeDownError.hint`.
|
|
343
|
+
const kind = probeResult.error.kind === 'other' ? 'unknown' : probeResult.error.kind;
|
|
344
|
+
bridgeHint =
|
|
345
|
+
thrown instanceof FetchproxyBridgeDownError ? thrown.hint : undefined;
|
|
346
|
+
error = {
|
|
347
|
+
kind,
|
|
348
|
+
message: probeResult.error.message,
|
|
349
|
+
...(bridgeHint !== undefined ? { bridge_hint: bridgeHint } : {}),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
// The post-probe bridge projection omits `lastExtensionMessageAt`; read it
|
|
353
|
+
// off the live status snapshot (same call, so it's current).
|
|
354
|
+
const lastExtensionMessageAt = transport.status().lastExtensionMessageAt;
|
|
355
|
+
const result = {
|
|
356
|
+
ok,
|
|
357
|
+
bridge: {
|
|
358
|
+
...probeResult.bridge,
|
|
359
|
+
last_extension_message_at: lastExtensionMessageAt,
|
|
360
|
+
},
|
|
361
|
+
probe,
|
|
362
|
+
...(error ? { error } : {}),
|
|
363
|
+
hint: healthcheckHint({
|
|
364
|
+
ok,
|
|
365
|
+
role: probeResult.bridge.role,
|
|
366
|
+
// FIX: the real configured port from bridgeHealth(), not a literal 37149.
|
|
367
|
+
port: probeResult.bridge.port,
|
|
368
|
+
hostLabel,
|
|
369
|
+
prefix,
|
|
370
|
+
probePath,
|
|
371
|
+
errorKind: error?.kind,
|
|
372
|
+
bridgeHint: error?.kind === 'bridge_down' ? bridgeHint : undefined,
|
|
373
|
+
}),
|
|
374
|
+
};
|
|
375
|
+
return {
|
|
376
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
377
|
+
};
|
|
378
|
+
});
|
|
379
|
+
}
|
|
203
380
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
|