@chrischall/mcp-utils 2.7.1 → 2.9.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 CHANGED
@@ -490,8 +490,9 @@ clone of this repo: `node scripts/audit-fs-confinement.mjs ../your-mcp`.
490
490
  `runBoundedBatch`, `createThrottle`, `createResponseCache`, `parseRetryAfterMs`,
491
491
  `splitHost`, `buildUserAgent`, `parseContentDispositionFilename`, JWT helpers
492
492
  (`decodeJwtExp`, `decodeJwtSessionId`, `decodeJwtClaim`, `validateJwtExpiry`),
493
- and the `ApiError` / `UpstreamHttpError` / `UnauthorizedError` /
494
- `RateLimitedError` / `RequestTimeoutError` classes.
493
+ `detectEdgeBlock`, and the `ApiError` / `UpstreamHttpError` /
494
+ `EdgeBlockedError` / `UnauthorizedError` / `RateLimitedError` /
495
+ `RequestTimeoutError` classes.
495
496
 
496
497
  `decodeJwtClaim(token, claim)` is the generic single-claim reader — returns the
497
498
  raw claim value (`unknown`) or `undefined` for an undecodable token / absent
@@ -546,6 +547,23 @@ status-carrying HTTP error — the manual-throw parallel to `ApiError` (which
546
547
  path that doesn't route through `createApiClient` but still needs to branch on a
547
548
  404.
548
549
 
550
+ `EdgeBlockedError` is what `createApiClient` throws instead of a plain
551
+ `ApiError` when a CDN/WAF in front of the API refused the request — a
552
+ CloudFront "request could not be satisfied" page, a Cloudflare block or
553
+ challenge (`cf-mitigated`), an Akamai or Imperva denial. It keeps the status and
554
+ `extends ApiError`, so existing branches are unchanged; it adds `vendor` and a
555
+ message saying the credential was never evaluated, rather than one that sends
556
+ someone to re-sign in. `detectEdgeBlock({ body, headers })` is the rule itself,
557
+ for a client that does not route through `createApiClient`. It matches each
558
+ vendor's own refusal page only: `x-cache: Error from cloudfront` is set on
559
+ every error CloudFront relays, the origin's own 401 included, so it is not
560
+ evidence of a block. Pass `status` when you have it: a refusal page counts only
561
+ on a 4xx, because CloudFront and Cloudflare show the same markers on their
562
+ 502/504/52x outage pages, which mean the origin is down rather than that this
563
+ host is blocked; a challenge or `cf-mitigated` counts at any status.
564
+ `TokenManager` treats an `EdgeBlockedError` from a refresh as transient, so a
565
+ block never discards the refresh token.
566
+
549
567
  ```ts
550
568
  import { runBoundedBatch } from '@chrischall/mcp-utils';
551
569
 
@@ -1096,6 +1114,21 @@ bridge produces when the relay dials the child before it binds. With
1096
1114
  `@fetchproxy/server` 2.5.0+ the `bridge` block also carries `session_state`,
1097
1115
  `pending_pair_code` and `extension_connected` from `bridgeHealth().session`.
1098
1116
 
1117
+ **When the browser can't serve a verb.** `@fetchproxy/server` 3.3+ tells a
1118
+ browser gap (`capability_unavailable` — e.g. Safari has no downloads; the MCP
1119
+ isn't at fault, and the fix is a browser that supports it, such as Chrome)
1120
+ apart from an MCP bug (`capability_denied` — the MCP used a capability it
1121
+ never declared). `bridgeErrorInfo` and the healthcheck both report these as
1122
+ their own kinds with their own hints, whichever server version is installed:
1123
+ the server's classifier files both under `'protocol'`, so they are detected
1124
+ from the error's class name, its `code`, the `unsupported-capability:` hello
1125
+ rejection, and the fixed wire wording (`… is not available in this browser`).
1126
+ With 3.3+ the `bridge` block also carries `unavailable_capabilities` and
1127
+ `platform` from `bridgeHealth().session`. The hints name the extension the user
1128
+ installs — **ContextMint Bridge** (from
1129
+ [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases);
1130
+ in Safari it ships inside the ContextMint app).
1131
+
1099
1132
  **Direct-first consumers** (hemnet, booli: a plain fetch that falls back to
1100
1133
  the bridge when a bot wall answers) pass `path: () => ({ transport, mode })`
1101
1134
  reporting which leg serves calls now, and may pass `transport` as a getter
@@ -1144,9 +1177,19 @@ registerCredentialHealthcheckTool({
1144
1177
  ```
1145
1178
 
1146
1179
  Arms: `ok`, `no_credential`, `credential_rejected` (401/403),
1147
- `session_expired`, `verification_pending`, `timeout`, `http`, `transport`,
1148
- `unknown` — with the same `classifyThrown` / `hints` hooks as the bridge
1149
- factory.
1180
+ `edge_blocked`, `session_expired`, `verification_pending`, `timeout`, `http`,
1181
+ `transport`, `unknown` — with the same `classifyThrown` / `hints` hooks as the
1182
+ bridge factory.
1183
+
1184
+ `edge_blocked` is decided BEFORE the status: a CDN/WAF block page answers 403
1185
+ exactly as a rejecting API does, and reporting it as `credential_rejected`
1186
+ sends people to re-sign in with a credential that was never looked at. It is
1187
+ read from an `EdgeBlockedError`, or from any thrown error's message,
1188
+ `body`/`bodyPreview`/`responseBody` and `headers` via `detectEdgeBlock`, so a
1189
+ connector with its own client is covered without a change, and so is a
1190
+ `sessionProbe` probe, which throws `EdgeBlockedError` for a refusal page. A resolver throw
1191
+ (a token refresh that met the same block) gets it too, instead of
1192
+ `no_credential`. `classifyThrown` still decides first.
1150
1193
 
1151
1194
  #### Cookie-session connectors: `sessionProbe` / `sessionClassifier`
1152
1195
 
@@ -172,8 +172,8 @@ export function createAuthResolver(opts) {
172
172
  // preserve; surface it verbatim (library-authored, not an untrusted
173
173
  // upstream body — so no truncation that could clip the guidance).
174
174
  if (typedHint !== undefined && isBridgeDown(e)) {
175
- throw createHelpfulError(`Auth: no ${envVar} set, and the fetchproxy bridge is down ` +
176
- `(extension service worker unreachable). ${typedHint}`, { hint: typedHint });
175
+ throw createHelpfulError(`Auth: no ${envVar} set, and ContextMint Bridge is down ` +
176
+ `(its extension service worker is unreachable). ${typedHint}`, { hint: typedHint });
177
177
  }
178
178
  // The rest of the family — pairing not yet approved, a scope that
179
179
  // changed, no matching tab — carries a remedy of its own. DEFER to it
@@ -229,7 +229,7 @@ export async function resolveAuthPattern(pattern) {
229
229
  return resolver();
230
230
  }
231
231
  throw createHelpfulError('No auth configured. Provide a token, OAuth credentials, login credentials, ' +
232
- 'or sign in in your browser (fetchproxy fallback).', { hint: 'Set one of the supported credential env vars, or sign in in your browser.' });
232
+ 'or sign in in your browser (read via ContextMint Bridge).', { hint: 'Set one of the supported credential env vars, or sign in in your browser.' });
233
233
  }
234
234
  const DEFAULT_LOGIN_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0 Safari/537.36';
235
235
  /** Node's `Headers` may carry multiple `Set-Cookie`s; prefer the spec'd getter. */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2FG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAkB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA6ElD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAI,GAAkC,CAAC,IAAI,CAAC;QACtD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,GAAY;IAChC,OAAO,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,2BAA2B,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAyB;IAEzB,MAAM,EACJ,MAAM,EACN,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,UAAU,EACV,GAAG,GACJ,GAAG,IAAI,CAAC;IAET,OAAO,KAAK,UAAU,WAAW;QAC/B,iFAAiF;QACjF,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QAED,wEAAwE;QACxE,MAAM,QAAQ,GACZ,aAAa,KAAK,SAAS;YAC3B,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,OAA0B,CAAC;YAC/B,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBACtC,wEAAwE;gBACxE,mEAAmE;gBACnE,uEAAuE;gBACvE,oEAAoE;gBACpE,qEAAqE;gBACrE,oEAAoE;gBACpE,kEAAkE;gBAClE,IAAI,SAAS,KAAK,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/C,MAAM,kBAAkB,CACtB,YAAY,MAAM,uCAAuC;wBACvD,kDAAkD,SAAS,EAAE,EAC/D,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;gBACJ,CAAC;gBACD,kEAAkE;gBAClE,sEAAsE;gBACtE,wEAAwE;gBACxE,uEAAuE;gBACvE,qEAAqE;gBACrE,wEAAwE;gBACxE,uEAAuE;gBACvE,iCAAiC;gBACjC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,MAAM,kBAAkB,CACtB,YAAY,MAAM,yCAAyC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAC/F,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;gBACJ,CAAC;gBACD,kEAAkE;gBAClE,0DAA0D;gBAC1D,MAAM,kBAAkB,CACtB,YAAY,MAAM,yCAAyC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAC/F,EAAE,IAAI,EAAE,OAAO,MAAM,yCAAyC,EAAE,CACjE,CAAC;YACJ,CAAC;YACD,uEAAuE;YACvE,yEAAyE;YACzE,sEAAsE;YACtE,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACpC,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC;YAC5E,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC;gBAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACnF,CAAC;YACD,wEAAwE;YACxE,uEAAuE;YACvE,MAAM,IAAI,4BAA4B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAClE,CAAC;QAED,yDAAyD;QACzD,MAAM,kBAAkB,CACtB,aAAa,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,mBAAmB,UAAU,kBAAkB,CAAC,CAAC,CAAC,8BAA8B,EAAE;YACnH,GAAG,aAAa,CAAC,CAAC,CAAC,WAAW,aAAa,gBAAgB,CAAC,CAAC,CAAC,EAAE,GAAG,EACrE,EAAE,IAAI,EAAE,OAAO,MAAM,8BAA8B,EAAE,CACtD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAwCD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAoB;IAC3D,MAAM,OAAO,GAA4C;QACvD,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,aAAa;QACrB,OAAO,CAAC,UAAU;KACnB,CAAC;IACF,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,QAAQ;YAAE,OAAO,QAAQ,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,kBAAkB,CACtB,6EAA6E;QAC3E,2DAA2D,EAC7D,EAAE,IAAI,EAAE,2EAA2E,EAAE,CACtF,CAAC;AACJ,CAAC;AA6CD,MAAM,gBAAgB,GACpB,gHAAgH,CAAC;AAEnH,mFAAmF;AACnF,SAAS,cAAc,CAAC,OAAgB;IACtC,MAAM,CAAC,GAAG,OAAsD,CAAC;IACjE,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,UAAU;QAAE,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;IAClE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAyB;IAEzB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IACxC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,gBAAgB,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC;IAEvD,4DAA4D;IAC5D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC3C,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;KACnD,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,kBAAkB,CAAC,uBAAuB,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE;YACtF,IAAI,EAAE,sDAAsD;SAC7D,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,kBAAkB,CAAC,yCAAyC,EAAE;YAClE,IAAI,EAAE,qEAAqE;SAC5E,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;QAC/B,CAAC,SAAS,CAAC,EAAE,SAAS;QACtB,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK;QACxB,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,QAAQ;QAC9B,GAAG,IAAI,CAAC,WAAW;KACpB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE;QAC1C,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE;YACP,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,mCAAmC;YACnD,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE;QACD,IAAI;KACL,CAAC,CAAC;IAEH,yEAAyE;IACzE,MAAM,MAAM,GAAG,cAAc,CAAC;QAC5B,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC;KACnC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,kBAAkB,CACtB,yBAAyB,IAAI,CAAC,UAAU,mBAAmB,OAAO,CAAC,MAAM,oCAAoC,EAC7G;YACE,IAAI,EAAE,0GAA0G;SACjH,CACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;AACjD,CAAC;AA0DD;;;;;GAKG;AACH,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IACzC,MAAM,CAAS;IACxB,YAAY,MAAc,EAAE,OAAe,EAAE,IAAwB;QACnE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,0BAA2B,SAAQ,YAAY;IACjD,kBAAkB,GAAG,IAAa,CAAC;IACnC,MAAM,CAAsB;IACrC,YAAY,MAA2B,EAAE,KAAc;QACrD,KAAK,CAAC,uDAAuD,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;YAC1G,IAAI,EAAE,qGAAqG;YAC3G,KAAK;SACN,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,iFAAiF;AACjF,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,CAAC,GAAG,YAAY,kBAAkB,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;AACvE,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAC1C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA4B;IAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,eAAe,CAAC;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC;IAE9C,IAAI,QAAQ,GAAwC,IAAI,CAAC;IACzD,IAAI,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;IAC5C,4EAA4E;IAC5E,6EAA6E;IAC7E,kEAAkE;IAClE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,SAA6B,CAAC;IAElC,KAAK,UAAU,YAAY;QACzB,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;YAC/B,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,mBAAmB;YAClC,GAAG,IAAI,CAAC,MAAM;SACf,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEd,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,MAAM,EAAE,kBAAkB;aAC3B;YACD,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,IAAI,kBAAkB,CAC1B,GAAG,CAAC,MAAM,EACV,gCAAgC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EACrG,EAAE,IAAI,EAAE,gEAAgE,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAiC,CAAC;QAClF,MAAM,WAAW,GAAG,IAAI,EAAE,YAAY,CAAC;QACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,kBAAkB,CAAC,gDAAgD,EAAE;gBACzE,IAAI,EAAE,iDAAiD;aACxD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAwB,EAAE,WAAW,EAAE,CAAC;QACpD,IAAI,OAAO,IAAI,EAAE,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YACzC,IAAI,IAAI,CAAC,aAAa,KAAK,mBAAmB,EAAE,CAAC;gBAC/C,oEAAoE;gBACpE,uEAAuE;gBACvE,qEAAqE;gBACrE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBAC/B,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC;gBACzC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,OAAO,IAAI,EAAE,UAAU,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;YACnC,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,UAAU,iBAAiB;QAC9B,IAAI,OAAgB,CAAC;QACrB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,OAAO,MAAM,YAAY,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,CAAC,CAAC;gBACZ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;oBAAE,MAAM;gBAC3B,IAAI,OAAO,GAAG,UAAU;oBAAE,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,MAAM,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,SAAS,OAAO,CAAC,YAAqB;QAC3C,wEAAwE;QACxE,0DAA0D;QAC1D,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5F,mBAAmB,GAAG,YAAY,CAAC;QACrC,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACpB,SAAS,GAAG,SAAS,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACzC,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC7C,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,IAAI,0BAA0B,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,IAAI,QAAQ,KAAK,CAAC;gBAAE,QAAQ,GAAG,IAAI,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,QAAQ,GAAG,CAAC,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC"}
@@ -363,7 +363,13 @@ export interface CreateBootstrapOptsArgs {
363
363
  export declare function createBootstrapOpts(args: CreateBootstrapOptsArgs): Pick<FetchproxyServerOpts, 'domains' | 'capabilities' | 'cookieKeys' | 'localStorageKeys' | 'sessionStorageKeys' | 'localStoragePointers' | 'sessionStoragePointers' | 'captureHeaders' | 'indexedDbScopes' | 'domSelectors'>;
364
364
  /** Discriminated classification of a tool-boundary error. */
365
365
  export interface BridgeErrorInfo {
366
- type: 'session_not_ready' | 'bridge_down' | 'timeout' | 'http' | 'protocol' | 'unknown';
366
+ /**
367
+ * `capability_unavailable` (the BROWSER can't serve the verb — not the
368
+ * MCP's fault) and `capability_denied` (the MCP used a capability it never
369
+ * declared — a bug in the MCP) arrived with @fetchproxy 3.3 support; a consumer that
370
+ * `switch`es exhaustively on this union gains two cases.
371
+ */
372
+ type: 'session_not_ready' | 'bridge_down' | 'timeout' | 'http' | 'protocol' | 'capability_unavailable' | 'capability_denied' | 'unknown';
367
373
  message: string;
368
374
  hint?: string;
369
375
  }
@@ -375,6 +381,10 @@ export interface BridgeErrorInfo {
375
381
  * exists. The surfaced message is redacted + truncated. Use this when you want
376
382
  * the structured envelope; use the re-exported `classifyBridgeError` for the raw
377
383
  * string kind (drop-in compatible with `@fetchproxy/server`).
384
+ *
385
+ * `capability_unavailable` / `capability_denied` are detected ahead of the
386
+ * server's classifier, which files both under `'protocol'` (or, for a
387
+ * browser that refused the hello outright, `'hello_rejected'`).
378
388
  */
379
389
  export declare function bridgeErrorInfo(err: unknown): BridgeErrorInfo;
380
390
  /** The diagnostic result a `<prefix>_healthcheck` tool returns. */
@@ -392,6 +402,13 @@ export interface BridgeHealthcheckResult {
392
402
  session_state?: 'not_listening' | 'linked' | 'pair_pending' | 'extension_disconnected' | 'no_session';
393
403
  pending_pair_code?: string | null;
394
404
  extension_connected?: boolean;
405
+ /**
406
+ * Capabilities the browser behind the current session said it cannot
407
+ * serve, and which browser that is (`@fetchproxy/server` 3.3+,
408
+ * `bridgeHealth().session`). Absent on older servers.
409
+ */
410
+ unavailable_capabilities?: string[];
411
+ platform?: string | null;
395
412
  };
396
413
  /** Which leg served the probe — present when {@link RegisterBridgeHealthcheckToolArgs.path} is supplied. */
397
414
  transport?: HealthcheckPath;
@@ -425,7 +442,7 @@ export interface BridgeHealthcheckResult {
425
442
  hint: string;
426
443
  }
427
444
  /** The hint-ladder arms whose copy {@link RegisterBridgeHealthcheckToolArgs.hints} can override. */
428
- export type HealthcheckHintArm = 'ok' | 'session_not_ready' | 'bridge_down' | 'no_role' | 'timeout' | 'protocol' | 'direct' | 'unknown';
445
+ export type HealthcheckHintArm = 'ok' | 'session_not_ready' | 'bridge_down' | 'no_role' | 'timeout' | 'protocol' | 'capability_unavailable' | 'capability_denied' | 'direct' | 'unknown';
429
446
  /**
430
447
  * Which leg a direct-first consumer is serving calls on. `transport` is the
431
448
  * path the next call rides; `mode` is the configured pin (e.g. hemnet's
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fetchproxy/index.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@
34
34
  * `FetchproxyServer` instance (no NEW top-level `@fetchproxy/server` import),
35
35
  * so the bundle-load smoke posture is unchanged.
36
36
  */
37
- import { FetchproxyServer, FetchproxyBridgeDownError, FetchproxySessionNotReadyError, classifyBridgeError as classifyBridgeErrorKind, } from '@fetchproxy/server';
37
+ import { FetchproxyServer, FetchproxyBridgeDownError, FetchproxySessionNotReadyError, classifyBridgeError as classifyBridgeErrorKind, classifyFetchError as classifyFetchErrorKind, } from '@fetchproxy/server';
38
38
  import { truncateErrorMessage, messageOf } from '../errors/index.js';
39
39
  // ---------------------------------------------------------------------------
40
40
  // Re-exports — single import site for the bridge primitives (design: re-export,
@@ -319,6 +319,94 @@ export function createBootstrapOpts(args) {
319
319
  ...(nonEmpty(b.domSelectors) ? { domSelectors: b.domSelectors } : {}),
320
320
  };
321
321
  }
322
+ /** Where users get the extension. No store listing exists yet — never invent one. */
323
+ const CONTEXTMINT_BRIDGE_RELEASES = 'https://github.com/nullnet-app/contextmint-bridge/releases';
324
+ /**
325
+ * The fixed wire wording for a capability the browser lacks
326
+ * (`@fetchproxy/protocol`'s `capabilityUnavailableMessage`), matched anywhere
327
+ * in the message because callers wrap it. Also accepts the pre-3.3 form that
328
+ * named no browser. Duplicated rather than imported so this works against a
329
+ * `@fetchproxy/server` that predates it.
330
+ */
331
+ const CAPABILITY_UNAVAILABLE_RE = /capability "([^"]{1,64})" is not available in this browser(?: \(([^)]{1,32})\))?/;
332
+ /** The `hello-rejected` reason sent when NOTHING the MCP declared is servable here. */
333
+ const UNSUPPORTED_CAPABILITY_RE = /unsupported-capability:\s*([^()]+?)\s*\(not available in this browser\)/;
334
+ /** The extension's wording for a capability the MCP never declared (`capability_denied`). */
335
+ const CAPABILITY_DENIED_RE = /\bcapability \S.* not granted/;
336
+ /**
337
+ * The server-classifier kinds a capability error can arrive under: a bare or
338
+ * hinted protocol error, a refused hello, or (from a foreign copy of the
339
+ * package) nothing it recognises. Never an upstream HTTP error, a timeout or a
340
+ * dead service worker — their messages can quote anything.
341
+ */
342
+ function mayBeCapabilityError(kind) {
343
+ return kind === 'protocol' || kind === 'hello_rejected' || kind === 'other';
344
+ }
345
+ function stringField(err, key) {
346
+ if (typeof err !== 'object' || err === null)
347
+ return undefined;
348
+ const v = err[key];
349
+ return typeof v === 'string' && v.length > 0 ? v : undefined;
350
+ }
351
+ /**
352
+ * Detect "this browser cannot serve that capability" (@fetchproxy 3.3+, #418)
353
+ * on ANY installed `@fetchproxy/server`: by the typed error's name and fields,
354
+ * by the wire `code`, by the `unsupported-capability:` hello rejection, and by
355
+ * the fixed wording — the last being all a pre-3.3 server passes through (as a
356
+ * bare `FetchproxyProtocolError`, which its classifier calls `'protocol'`).
357
+ * Duck-typed on purpose: importing the 3.3 classes would fail to link against
358
+ * the older servers the peer range still accepts.
359
+ */
360
+ function capabilityGapOf(err) {
361
+ const name = err instanceof Error ? err.name : undefined;
362
+ const message = messageOf(err);
363
+ const originalError = stringField(err, 'originalError');
364
+ const platformField = stringField(err, 'platform') ?? null;
365
+ if (name === 'FetchproxyHelloRejectedError') {
366
+ const listed = err.unavailableCapabilities;
367
+ const parsed = UNSUPPORTED_CAPABILITY_RE.exec(stringField(err, 'reason') ?? message);
368
+ const capabilities = Array.isArray(listed) && listed.length > 0
369
+ ? listed.map(String)
370
+ : parsed
371
+ ? parsed[1].split(',').map((c) => c.trim()).filter(Boolean)
372
+ : [];
373
+ return capabilities.length > 0 ? { capabilities, platform: platformField } : null;
374
+ }
375
+ const wording = CAPABILITY_UNAVAILABLE_RE.exec(originalError ?? message);
376
+ const typed = name === 'FetchproxyCapabilityUnavailableError';
377
+ const coded = stringField(err, 'code') === 'capability_unavailable';
378
+ // The server's own string classifier, where the installed one knows the kind
379
+ // (3.3+). Harmless on older servers — it answers something else.
380
+ const classified = classifyFetchErrorKind(originalError ?? message) === 'capability_unavailable';
381
+ if (!typed && !coded && !wording && !classified)
382
+ return null;
383
+ const capability = stringField(err, 'capability') ?? wording?.[1];
384
+ return {
385
+ capabilities: capability ? [capability] : [],
386
+ platform: platformField ?? wording?.[2] ?? null,
387
+ ...(originalError !== undefined ? { originalError } : {}),
388
+ };
389
+ }
390
+ /** `capability_denied`: the MCP asked for a capability it never declared. */
391
+ function isCapabilityDenied(err) {
392
+ const text = stringField(err, 'originalError') ?? messageOf(err);
393
+ if (CAPABILITY_UNAVAILABLE_RE.test(text))
394
+ return false;
395
+ return classifyFetchErrorKind(text) === 'capability_denied' || CAPABILITY_DENIED_RE.test(text);
396
+ }
397
+ function capabilityUnavailableHint(gap) {
398
+ const where = gap.platform ? `This browser (${gap.platform})` : 'This browser';
399
+ const what = gap.capabilities.length === 0
400
+ ? 'what this tool needs'
401
+ : gap.capabilities.length === 1
402
+ ? `the "${gap.capabilities[0]}" capability this tool needs`
403
+ : `the capabilities this MCP needs (${gap.capabilities.map((c) => `"${c}"`).join(', ')})`;
404
+ return (`${where} can't serve ${what} — ContextMint Bridge checked for the browser API and it is missing. ` +
405
+ `The MCP isn't at fault, and re-pairing or updating won't change it: use a browser that supports it ` +
406
+ `(for example Chrome) for this.`);
407
+ }
408
+ const CAPABILITY_DENIED_HINT = 'The MCP asked ContextMint Bridge for a capability it never declared, so the request was refused. ' +
409
+ 'This is a bug in the MCP, not in your browser or pairing — please report it to the maintainer of the MCP.';
322
410
  /**
323
411
  * Thin discriminator over the `@fetchproxy/server` typed-error hierarchy. Folds
324
412
  * the re-exported raw {@link classifyBridgeError} (which returns a bare kind
@@ -327,6 +415,10 @@ export function createBootstrapOpts(args) {
327
415
  * exists. The surfaced message is redacted + truncated. Use this when you want
328
416
  * the structured envelope; use the re-exported `classifyBridgeError` for the raw
329
417
  * string kind (drop-in compatible with `@fetchproxy/server`).
418
+ *
419
+ * `capability_unavailable` / `capability_denied` are detected ahead of the
420
+ * server's classifier, which files both under `'protocol'` (or, for a
421
+ * browser that refused the hello outright, `'hello_rejected'`).
330
422
  */
331
423
  export function bridgeErrorInfo(err) {
332
424
  if (err instanceof FetchproxySessionNotReadyError) {
@@ -341,20 +433,37 @@ export function bridgeErrorInfo(err) {
341
433
  };
342
434
  }
343
435
  const kind = classifyBridgeErrorKind(err);
436
+ const gap = mayBeCapabilityError(kind) ? capabilityGapOf(err) : null;
437
+ if (gap) {
438
+ return {
439
+ type: 'capability_unavailable',
440
+ // A hinted server error folds its own remedy into the message; keep the
441
+ // wire rejection so a consumer appending `hint` doesn't say it twice.
442
+ message: truncateErrorMessage(gap.originalError ?? messageOf(err)),
443
+ hint: capabilityUnavailableHint(gap),
444
+ };
445
+ }
446
+ if (mayBeCapabilityError(kind) && isCapabilityDenied(err)) {
447
+ return {
448
+ type: 'capability_denied',
449
+ message: truncateErrorMessage(stringField(err, 'originalError') ?? messageOf(err)),
450
+ hint: CAPABILITY_DENIED_HINT,
451
+ };
452
+ }
344
453
  const message = truncateErrorMessage(messageOf(err));
345
454
  switch (kind) {
346
455
  case 'timeout':
347
456
  return {
348
457
  type: 'timeout',
349
458
  message,
350
- hint: 'The fetchproxy bridge timed out. Check the browser tab is open and responsive, then retry.',
459
+ hint: 'The request through ContextMint Bridge timed out. Check the browser tab is open and responsive, then retry.',
351
460
  };
352
461
  case 'bridge_down': {
353
462
  const hint = err instanceof FetchproxyBridgeDownError ? err.hint : undefined;
354
463
  return {
355
464
  type: 'bridge_down',
356
465
  message,
357
- hint: hint ?? 'The fetchproxy browser bridge is offline. Open a signed-in tab so the extension can relay the request.',
466
+ hint: hint ?? 'ContextMint Bridge is offline. Open a signed-in tab so the extension can relay the request.',
358
467
  };
359
468
  }
360
469
  case 'http':
@@ -363,7 +472,7 @@ export function bridgeErrorInfo(err) {
363
472
  return {
364
473
  type: 'protocol',
365
474
  message,
366
- hint: 'The fetchproxy bridge could not relay the request (e.g. no signed-in tab or denied domain).',
475
+ hint: 'ContextMint Bridge could not relay the request (e.g. no signed-in tab or denied domain).',
367
476
  };
368
477
  case 'other':
369
478
  default:
@@ -389,20 +498,26 @@ function healthcheckHint(args) {
389
498
  if (args.direct) {
390
499
  return `Direct fetch round-tripped ${probePath} successfully — the browser bridge wasn't used for this probe. If real tools still fail, the problem is on the ${hostLabel} side (a bot wall answering some calls but not this one, a field that moved, …), not the transport.`;
391
500
  }
392
- 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.`;
501
+ return `Bridge round-tripped ${probePath} successfully. If real tools still fail, the problem is downstream of ContextMint Bridge (${hostLabel} redirecting on login, a bot-wall / behavioral challenge, etc.) — not the bridge.`;
502
+ }
503
+ if (args.errorKind === 'capability_unavailable') {
504
+ return capabilityUnavailableHint(args.capabilityGap ?? { capabilities: [], platform: null });
505
+ }
506
+ if (args.errorKind === 'capability_denied') {
507
+ return CAPABILITY_DENIED_HINT;
393
508
  }
394
509
  if (args.errorKind === 'session_not_ready') {
395
510
  const s = args.session;
396
511
  if (s?.pairCode) {
397
- return `The Transporter extension is waiting for you to approve pair code ${s.pairCode} for ${prefix}-mcp. Open the extension popup, approve it, then retry.`;
512
+ return `ContextMint Bridge is waiting for you to approve pair code ${s.pairCode} for ${prefix}-mcp. Open the ContextMint Bridge popup, approve it, then retry.`;
398
513
  }
399
514
  if (s?.state === 'extension_disconnected') {
400
- return `No Transporter extension is attached to this bridge${portNote}. Open Chrome with the extension installed and a ${hostLabel} tab, then retry.`;
515
+ return `ContextMint Bridge isn't attached to this bridge${portNote}. Open a browser with ContextMint Bridge installed and a ${hostLabel} tab, then retry. (Chrome: load the extension from ${CONTEXTMINT_BRIDGE_RELEASES}; Safari: it ships inside the ContextMint app.)`;
401
516
  }
402
- return `The Transporter extension is attached but never confirmed a session for ${prefix}-mcp — its hello got no answer within the session-ready timeout. Reload the extension (chrome://extensions) or reopen the ${hostLabel} tab, then retry. On a hosted bridge this is also what a relay that dialled the child before it bound its port${portNote} looks like.`;
517
+ return `ContextMint Bridge is attached but never confirmed a session for ${prefix}-mcp — its hello got no answer within the session-ready timeout. Reload the extension (chrome://extensions) or reopen the ${hostLabel} tab, then retry. On a hosted bridge this is also what a relay that dialled the child before it bound its port${portNote} looks like.`;
403
518
  }
404
519
  if (args.errorKind === 'bridge_down') {
405
- 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.`;
520
+ const base = `The ContextMint Bridge 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 ContextMint Bridge icon in the toolbar (or opening any ${hostLabel} tab and reloading), then retry. If it keeps happening, reload the extension from chrome://extensions.`;
406
521
  return args.bridgeHint ? `${args.bridgeHint} ${base}` : base;
407
522
  }
408
523
  if (args.direct) {
@@ -412,10 +527,10 @@ function healthcheckHint(args) {
412
527
  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 === null ? 'the bridge port' : `port ${port}`} isn't blocked.`;
413
528
  }
414
529
  if (args.errorKind === 'timeout') {
415
- 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.`;
530
+ return `Bridge is alive (role=${args.role}), but the request didn't get a response in time. Either (a) ContextMint Bridge isn't connected to this MCP yet — open the ContextMint Bridge 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.`;
416
531
  }
417
532
  if (args.errorKind === 'protocol' || args.errorKind === 'http') {
418
- 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.`;
533
+ return `The bridge returned a protocol error before any HTTP response. Most commonly: no ${hostLabel} tab is open, or ContextMint Bridge declined the request. Open ${hostLabel}, sign in, and retry.`;
419
534
  }
420
535
  return `Unexpected error — see the error.message field for details.`;
421
536
  }
@@ -445,6 +560,11 @@ function projectBridgeStatus(health) {
445
560
  session_state: session.state,
446
561
  pending_pair_code: session.pairCode,
447
562
  extension_connected: session.extensionConnected,
563
+ // 3.3+ only; absent keys stay absent on an older server.
564
+ ...(session.unavailableCapabilities !== undefined
565
+ ? { unavailable_capabilities: session.unavailableCapabilities }
566
+ : {}),
567
+ ...(session.platform !== undefined ? { platform: session.platform } : {}),
448
568
  }
449
569
  : {}),
450
570
  };
@@ -482,7 +602,7 @@ function probeDisplayUrl(hostLabel, probePath) {
482
602
  return `https://${hostLabel}${probePath.startsWith('/') ? '' : '/'}${probePath}`;
483
603
  }
484
604
  export function bridgeHealthcheckDescription(hostLabel, probePath) {
485
- return `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 extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'real ${hostLabel}-side problem'. Read-only, no auth required.`;
605
+ return `Round-trips a small public ${hostLabel} URL (${probePath}) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real ${hostLabel}-side problem'. Read-only, no auth required.`;
486
606
  }
487
607
  /**
488
608
  * The bridge healthcheck's whole body, without the registration.
@@ -561,6 +681,7 @@ export async function runBridgeHealthcheck(args) {
561
681
  let bridgeHint;
562
682
  let customHint;
563
683
  let customDetail;
684
+ let capabilityGap;
564
685
  if (rawError) {
565
686
  // `runProbe` (or classifyBridgeError on the direct route) already
566
687
  // classified the throw in fetchproxy's raw vocabulary. Trust that as
@@ -575,6 +696,18 @@ export async function runBridgeHealthcheck(args) {
575
696
  else if (thrown instanceof FetchproxyBridgeDownError) {
576
697
  bridgeHint = thrown.hint;
577
698
  }
699
+ else if (thrown !== undefined && mayBeCapabilityError(rawError.kind)) {
700
+ // The server's classifier files a browser gap under 'protocol' (or
701
+ // 'hello_rejected'); name it, so the ladder can say whose fault it isn't.
702
+ const gap = capabilityGapOf(thrown);
703
+ if (gap) {
704
+ kind = 'capability_unavailable';
705
+ capabilityGap = gap;
706
+ }
707
+ else if (isCapabilityDenied(thrown)) {
708
+ kind = 'capability_denied';
709
+ }
710
+ }
578
711
  // A consumer classifier can re-kind the thrown error (e.g. workday's
579
712
  // session_expired) and supply site-specific next-step copy.
580
713
  if (thrown !== undefined && classifyThrown) {
@@ -600,19 +733,21 @@ export async function runBridgeHealthcheck(args) {
600
733
  // so per-arm `hints` overrides land on the same arm the default copy would.
601
734
  const arm = ok
602
735
  ? 'ok'
603
- : error?.kind === 'session_not_ready'
604
- ? 'session_not_ready'
605
- : error?.kind === 'bridge_down'
606
- ? 'bridge_down'
607
- : direct
608
- ? 'direct'
609
- : bridge === undefined || bridge.role === null
610
- ? 'no_role'
611
- : error?.kind === 'timeout'
612
- ? 'timeout'
613
- : error?.kind === 'protocol' || error?.kind === 'http'
614
- ? 'protocol'
615
- : 'unknown';
736
+ : error?.kind === 'capability_unavailable' || error?.kind === 'capability_denied'
737
+ ? error.kind
738
+ : error?.kind === 'session_not_ready'
739
+ ? 'session_not_ready'
740
+ : error?.kind === 'bridge_down'
741
+ ? 'bridge_down'
742
+ : direct
743
+ ? 'direct'
744
+ : bridge === undefined || bridge.role === null
745
+ ? 'no_role'
746
+ : error?.kind === 'timeout'
747
+ ? 'timeout'
748
+ : error?.kind === 'protocol' || error?.kind === 'http'
749
+ ? 'protocol'
750
+ : 'unknown';
616
751
  const defaultHint = healthcheckHint({
617
752
  ok,
618
753
  role: bridge?.role ?? null,
@@ -629,6 +764,15 @@ export async function runBridgeHealthcheck(args) {
629
764
  (thrown instanceof FetchproxySessionNotReadyError ? thrown.pairCode : null),
630
765
  },
631
766
  direct,
767
+ ...(capabilityGap
768
+ ? {
769
+ capabilityGap: {
770
+ capabilities: capabilityGap.capabilities,
771
+ // The error may not name the browser; the session snapshot can.
772
+ platform: capabilityGap.platform ?? bridge?.platform ?? null,
773
+ },
774
+ }
775
+ : {}),
632
776
  });
633
777
  const result = {
634
778
  ok,
@@ -649,10 +793,10 @@ export async function runBridgeHealthcheck(args) {
649
793
  */
650
794
  export function registerBridgeHealthcheckTool(args) {
651
795
  args.server.registerTool(`${args.prefix}_healthcheck`, {
652
- title: 'Verify the fetchproxy bridge end-to-end',
796
+ title: 'Verify the ContextMint Bridge connection end-to-end',
653
797
  description: `${bridgeHealthcheckDescription(args.hostLabel, args.probePath)} Call this when a real tool fails and you want to know which hop broke.`,
654
798
  annotations: {
655
- title: 'Verify the fetchproxy bridge end-to-end',
799
+ title: 'Verify the ContextMint Bridge connection end-to-end',
656
800
  readOnlyHint: true,
657
801
  idempotentHint: true,
658
802
  openWorldHint: true,