@mcp-use/inspector 20.0.0-beta.15 → 20.0.0-beta.17

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.
Files changed (72) hide show
  1. package/README.md +25 -58
  2. package/dist/app/inspector.css +2 -0
  3. package/dist/{cdn → app}/inspector.js +8249 -7972
  4. package/dist/cli.js +292 -286
  5. package/dist/client/auth/manufact-auth.d.ts +1 -1
  6. package/dist/client/auth/manufact-auth.d.ts.map +1 -1
  7. package/dist/client/index.js +1 -1
  8. package/dist/server/{chunk-XCNS5CIW.js → chunk-2K7OKCVV.js} +67 -67
  9. package/dist/server/{chunk-UJLXHNQP.js → chunk-EKD2XITW.js} +3 -2
  10. package/dist/server/{chunk-WNQGHIZ3.js → chunk-EPPZCSJQ.js} +23 -77
  11. package/dist/server/chunk-JWDVSQED.js +156 -0
  12. package/dist/server/{chunk-M5TZA42I.js → chunk-PZF2PUDE.js} +15 -11
  13. package/dist/server/{chunk-XKCUJ6ZJ.js → chunk-RFJAZOK7.js} +27 -8
  14. package/dist/server/{chunk-OWR2BIBW.js → chunk-RKFQG67Z.js} +1 -3
  15. package/dist/server/{chunk-K2F2AJOI.js → chunk-V5A5XLFJ.js} +148 -5
  16. package/dist/server/cli.js +11 -16
  17. package/dist/server/create-dev-api-app.d.ts.map +1 -1
  18. package/dist/server/create-dev-api-app.js +4 -4
  19. package/dist/server/favicon-links.d.ts +2 -2
  20. package/dist/server/favicon-links.d.ts.map +1 -1
  21. package/dist/server/index.d.ts +2 -3
  22. package/dist/server/index.d.ts.map +1 -1
  23. package/dist/server/index.js +8 -13
  24. package/dist/server/{cdn-shell.d.ts → inspector-shell.d.ts} +7 -5
  25. package/dist/server/inspector-shell.d.ts.map +1 -0
  26. package/dist/server/inspector-shell.js +10 -0
  27. package/dist/server/middleware.d.ts +52 -27
  28. package/dist/server/middleware.d.ts.map +1 -1
  29. package/dist/server/middleware.js +8 -10
  30. package/dist/server/proxy/index.js +2 -2
  31. package/dist/server/proxy/mcp-proxy.d.ts.map +1 -1
  32. package/dist/server/proxy/mcp-proxy.js +2 -2
  33. package/dist/server/proxy/oauth-proxy.d.ts +2 -0
  34. package/dist/server/proxy/oauth-proxy.d.ts.map +1 -1
  35. package/dist/server/proxy/oauth-proxy.js +1 -1
  36. package/dist/server/proxy-routes.d.ts.map +1 -1
  37. package/dist/server/proxy-routes.js +3 -3
  38. package/dist/server/server.js +4 -4
  39. package/dist/server/static-assets.d.ts +3 -3
  40. package/dist/server/static-assets.d.ts.map +1 -1
  41. package/dist/server/static-assets.js +3 -3
  42. package/dist/server/version.js +1 -1
  43. package/dist/server/vite-dev-api-plugin.js +4 -4
  44. package/dist/web/assets/index-Dj_E94k4.css +1 -0
  45. package/dist/web/assets/{index-Bqfsh_Rp.js → index-O3gsi3le.js} +91 -91
  46. package/dist/web/index.html +3 -3
  47. package/package.json +30 -11
  48. package/dist/cdn/inspector.css +0 -2
  49. package/dist/server/asset-urls.d.ts +0 -15
  50. package/dist/server/asset-urls.d.ts.map +0 -1
  51. package/dist/server/asset-urls.js +0 -13
  52. package/dist/server/cdn-shell.d.ts.map +0 -1
  53. package/dist/server/cdn-shell.js +0 -12
  54. package/dist/server/chunk-J4FNYLBF.js +0 -54
  55. package/dist/server/chunk-JZT7N2BJ.js +0 -58
  56. package/dist/server/chunk-ZPGABKXL.js +0 -72
  57. package/dist/server/favicon-static.d.ts +0 -4
  58. package/dist/server/favicon-static.d.ts.map +0 -1
  59. package/dist/server/favicon-static.js +0 -8
  60. package/dist/web/assets/index-bCIH1Sdx.css +0 -1
  61. /package/dist/{cdn → app}/apple-touch-icon.png +0 -0
  62. /package/dist/{cdn → app}/favicon-96x96.png +0 -0
  63. /package/dist/{cdn → app}/favicon-black.svg +0 -0
  64. /package/dist/{cdn → app}/favicon-white.svg +0 -0
  65. /package/dist/{cdn → app}/favicon.ico +0 -0
  66. /package/dist/{cdn → app}/favicon.svg +0 -0
  67. /package/dist/{cdn → app}/providers/anthropic.png +0 -0
  68. /package/dist/{cdn → app}/providers/google.png +0 -0
  69. /package/dist/{cdn → app}/providers/openai.png +0 -0
  70. /package/dist/{cdn → app}/site.webmanifest +0 -0
  71. /package/dist/{cdn → app}/web-app-manifest-192x192.png +0 -0
  72. /package/dist/{cdn → app}/web-app-manifest-512x512.png +0 -0
@@ -1,11 +1,10 @@
1
1
  import {
2
2
  registerInspectorProxyRoutes
3
- } from "./chunk-UJLXHNQP.js";
3
+ } from "./chunk-EKD2XITW.js";
4
4
 
5
5
  // src/server/create-dev-api-app.ts
6
6
  import { Hono } from "hono";
7
7
  import { cors } from "hono/cors";
8
- import { logger } from "hono/logger";
9
8
  function createDevApiApp() {
10
9
  const app = new Hono();
11
10
  app.use(
@@ -27,7 +26,6 @@ function createDevApiApp() {
27
26
  exposeHeaders: ["*"]
28
27
  })
29
28
  );
30
- app.use("/inspector/api/*", logger());
31
29
  registerInspectorProxyRoutes(app, {
32
30
  oauthProxyAllowedOrigins: [],
33
31
  oauthProxyAllowLoopback: true
@@ -1,5 +1,6 @@
1
1
  // src/server/proxy/oauth-proxy.ts
2
2
  import { lookup } from "dns/promises";
3
+ import { Buffer } from "buffer";
3
4
  import { isIP } from "net";
4
5
  var SAFE_REQUEST_HEADERS = /* @__PURE__ */ new Set([
5
6
  "accept",
@@ -24,6 +25,8 @@ var ENDPOINT_FIELDS = [
24
25
  ];
25
26
  var BINDING_TTL_MS = 10 * 60 * 1e3;
26
27
  var MAX_BINDINGS = 100;
28
+ var CONFIDENTIAL_CLIENT_TTL_MS = 24 * 60 * 60 * 1e3;
29
+ var MAX_CONFIDENTIAL_CLIENTS = 500;
27
30
  function mountOAuthProxy(app, options = {}) {
28
31
  const {
29
32
  basePath = "/oauth",
@@ -32,15 +35,17 @@ function mountOAuthProxy(app, options = {}) {
32
35
  timeoutMs = 1e4,
33
36
  maxRequestBodyBytes = 64 * 1024,
34
37
  maxResponseBodyBytes = 1024 * 1024,
38
+ callbackPath = "/oauth/callback",
35
39
  enableLogging = true,
36
40
  authenticate,
37
41
  validateServerUrl
38
42
  } = options;
39
43
  const origins = new Set(allowedOrigins.map(normalizeOrigin));
40
44
  const bindings = /* @__PURE__ */ new Map();
45
+ const confidentialClients = /* @__PURE__ */ new Map();
41
46
  app.use(`${basePath}/*`, async (c, next) => {
42
47
  const origin = c.req.header("Origin");
43
- if (origin && !isAllowedOrigin(origin, c.req.url, origins)) {
48
+ if (origin && !isAllowedOrigin(origin, c, origins)) {
44
49
  return c.json({ error: "Origin not allowed" }, 403);
45
50
  }
46
51
  if (c.req.method === "OPTIONS") {
@@ -197,7 +202,24 @@ function mountOAuthProxy(app, options = {}) {
197
202
  }
198
203
  try {
199
204
  const headers = filterRequestHeaders(request.headers);
200
- const body = serializeBody(request.body, headers);
205
+ let body = serializeBody(request.body, headers);
206
+ if (endpointKind === "registration") {
207
+ const publicOrigin = normalizeOrigin(
208
+ c.req.header("Origin") ?? new URL(c.req.url).origin
209
+ );
210
+ body = enforceRegistrationRedirectUri(
211
+ body,
212
+ headers,
213
+ new URL(callbackPath, publicOrigin).toString()
214
+ );
215
+ } else {
216
+ body = applyConfidentialClientAuthentication({
217
+ body,
218
+ headers,
219
+ bindingKey,
220
+ clients: confidentialClients
221
+ });
222
+ }
201
223
  if (new TextEncoder().encode(body ?? "").byteLength > maxRequestBodyBytes) {
202
224
  return c.json({ error: "OAuth request body too large" }, 413);
203
225
  }
@@ -225,6 +247,14 @@ function mountOAuthProxy(app, options = {}) {
225
247
  } catch {
226
248
  }
227
249
  }
250
+ if (endpointKind === "registration" && upstream.ok && responseBody && typeof responseBody === "object" && !Array.isArray(responseBody)) {
251
+ responseBody = retainConfidentialClient({
252
+ responseBody,
253
+ binding,
254
+ bindingKey,
255
+ clients: confidentialClients
256
+ });
257
+ }
228
258
  return c.json({
229
259
  status: upstream.status,
230
260
  statusText: upstream.statusText,
@@ -331,6 +361,7 @@ async function bindProtectedResource(metadata, serverUrl, binding, allowLoopback
331
361
  }
332
362
  binding.authorizationServers = issuers;
333
363
  binding.endpoints.clear();
364
+ binding.tokenEndpointAuthMethods.clear();
334
365
  }
335
366
  async function bindAuthorizationServer(metadata, expectedIssuer, binding, allowLoopback) {
336
367
  if (typeof metadata.issuer !== "string" || canonicalUrl(new URL(metadata.issuer)) !== expectedIssuer) {
@@ -339,6 +370,11 @@ async function bindAuthorizationServer(metadata, expectedIssuer, binding, allowL
339
370
  );
340
371
  }
341
372
  binding.endpoints.clear();
373
+ binding.tokenEndpointAuthMethods = new Set(
374
+ Array.isArray(metadata.token_endpoint_auth_methods_supported) ? metadata.token_endpoint_auth_methods_supported.filter(
375
+ (method) => typeof method === "string"
376
+ ) : []
377
+ );
342
378
  for (const [field, kind] of ENDPOINT_FIELDS) {
343
379
  const value = metadata[field];
344
380
  if (value === void 0) continue;
@@ -435,7 +471,17 @@ function filterResponseHeaders(headers) {
435
471
  }
436
472
  function serializeBody(body, headers) {
437
473
  if (body === void 0 || body === null) return void 0;
438
- if (typeof body === "string") return body;
474
+ if (typeof body === "string") {
475
+ if (!headers.has("content-type")) {
476
+ try {
477
+ JSON.parse(body);
478
+ headers.set("content-type", "application/json");
479
+ } catch {
480
+ headers.set("content-type", "application/x-www-form-urlencoded");
481
+ }
482
+ }
483
+ return body;
484
+ }
439
485
  const contentType = headers.get("content-type") ?? "";
440
486
  if (contentType.includes("application/x-www-form-urlencoded") && typeof body === "object" && !Array.isArray(body)) {
441
487
  const params = new URLSearchParams();
@@ -451,6 +497,77 @@ function serializeBody(body, headers) {
451
497
  }
452
498
  return JSON.stringify(body);
453
499
  }
500
+ function confidentialClientKey(bindingKey, clientId) {
501
+ return `${bindingKey}\0${clientId}`;
502
+ }
503
+ function retainConfidentialClient(options) {
504
+ const { responseBody, binding, bindingKey, clients } = options;
505
+ const clientId = responseBody.client_id;
506
+ const clientSecret = responseBody.client_secret;
507
+ if (typeof clientId !== "string" || typeof clientSecret !== "string") {
508
+ return responseBody;
509
+ }
510
+ const returnedMethod = responseBody.token_endpoint_auth_method;
511
+ const authMethod = returnedMethod === "client_secret_post" || returnedMethod === "client_secret_basic" ? returnedMethod : binding.tokenEndpointAuthMethods.has("client_secret_basic") ? "client_secret_basic" : "client_secret_post";
512
+ const upstreamExpiry = responseBody.client_secret_expires_at;
513
+ const expiresAt = upstreamExpiry === 0 ? Number.POSITIVE_INFINITY : typeof upstreamExpiry === "number" && upstreamExpiry > 0 ? upstreamExpiry * 1e3 : Date.now() + CONFIDENTIAL_CLIENT_TTL_MS;
514
+ pruneConfidentialClients(clients);
515
+ clients.set(confidentialClientKey(bindingKey, clientId), {
516
+ clientSecret,
517
+ authMethod,
518
+ expiresAt
519
+ });
520
+ while (clients.size > MAX_CONFIDENTIAL_CLIENTS) {
521
+ const oldest = clients.keys().next().value;
522
+ if (!oldest) break;
523
+ clients.delete(oldest);
524
+ }
525
+ const browserSafe = { ...responseBody };
526
+ delete browserSafe.client_secret;
527
+ delete browserSafe.client_secret_expires_at;
528
+ browserSafe.token_endpoint_auth_method = "none";
529
+ return browserSafe;
530
+ }
531
+ function applyConfidentialClientAuthentication(options) {
532
+ const { body, headers, bindingKey, clients } = options;
533
+ if (!body || !(headers.get("content-type") ?? "").includes(
534
+ "application/x-www-form-urlencoded"
535
+ )) {
536
+ return body;
537
+ }
538
+ const params = new URLSearchParams(body);
539
+ const clientId = params.get("client_id");
540
+ if (!clientId) return body;
541
+ const key = confidentialClientKey(bindingKey, clientId);
542
+ const client = clients.get(key);
543
+ if (!client) return body;
544
+ if (client.expiresAt <= Date.now()) {
545
+ clients.delete(key);
546
+ return body;
547
+ }
548
+ params.delete("client_secret");
549
+ if (client.authMethod === "client_secret_basic") {
550
+ const encoded = Buffer.from(
551
+ `${encodeOAuthClientCredential(clientId)}:${encodeOAuthClientCredential(client.clientSecret)}`,
552
+ "utf8"
553
+ ).toString("base64");
554
+ headers.set("authorization", `Basic ${encoded}`);
555
+ } else {
556
+ headers.delete("authorization");
557
+ params.set("client_id", clientId);
558
+ params.set("client_secret", client.clientSecret);
559
+ }
560
+ return params.toString();
561
+ }
562
+ function encodeOAuthClientCredential(value) {
563
+ return new URLSearchParams({ value }).toString().slice("value=".length);
564
+ }
565
+ function pruneConfidentialClients(clients) {
566
+ const now = Date.now();
567
+ for (const [key, client] of clients) {
568
+ if (client.expiresAt <= now) clients.delete(key);
569
+ }
570
+ }
454
571
  async function readRequestCapped(request, maxBytes) {
455
572
  const declared = Number(request.headers.get("content-length"));
456
573
  if (Number.isFinite(declared) && declared > maxBytes) {
@@ -510,6 +627,7 @@ function getBinding(bindings, key) {
510
627
  return {
511
628
  authorizationServers: /* @__PURE__ */ new Set(),
512
629
  endpoints: /* @__PURE__ */ new Map(),
630
+ tokenEndpointAuthMethods: /* @__PURE__ */ new Set(),
513
631
  updatedAt: Date.now()
514
632
  };
515
633
  }
@@ -532,6 +650,23 @@ function canonicalUrl(url) {
532
650
  }
533
651
  return copy.toString().replace(/\/$/, "");
534
652
  }
653
+ function enforceRegistrationRedirectUri(body, headers, callbackUrl) {
654
+ if (!body) return body;
655
+ const contentType = headers.get("content-type") ?? "";
656
+ if (!contentType.includes("json")) return body;
657
+ try {
658
+ const parsed = JSON.parse(body);
659
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
660
+ return body;
661
+ }
662
+ return JSON.stringify({
663
+ ...parsed,
664
+ redirect_uris: [callbackUrl]
665
+ });
666
+ } catch {
667
+ return body;
668
+ }
669
+ }
535
670
  function normalizeOrigin(origin) {
536
671
  const url = new URL(origin);
537
672
  if (url.pathname !== "/" || url.search || url.hash) {
@@ -539,10 +674,18 @@ function normalizeOrigin(origin) {
539
674
  }
540
675
  return url.origin;
541
676
  }
542
- function isAllowedOrigin(origin, requestUrl, allowed) {
677
+ function isAllowedOrigin(origin, c, allowed) {
543
678
  try {
544
679
  const normalized = normalizeOrigin(origin);
545
- return normalized === new URL(requestUrl).origin || allowed.has(normalized);
680
+ if (normalized === new URL(c.req.url).origin || allowed.has(normalized)) {
681
+ return true;
682
+ }
683
+ const originUrl = new URL(normalized);
684
+ const forwardedHost = c.req.header("x-forwarded-host")?.split(",")[0]?.trim();
685
+ const requestHost = forwardedHost || c.req.header("host");
686
+ if (!requestHost || originUrl.host !== requestHost) return false;
687
+ const forwardedProto = c.req.header("x-forwarded-proto")?.split(",")[0]?.trim();
688
+ return !forwardedProto || `${forwardedProto}:` === originUrl.protocol;
546
689
  } catch {
547
690
  return false;
548
691
  }
@@ -4,28 +4,25 @@ import {
4
4
  isValidUrl
5
5
  } from "./chunk-KD7K27XK.js";
6
6
  import {
7
- registerInspectorCdnShell
8
- } from "./chunk-WNQGHIZ3.js";
9
- import "./chunk-M5TZA42I.js";
7
+ registerInspectorShell
8
+ } from "./chunk-EPPZCSJQ.js";
9
+ import "./chunk-PZF2PUDE.js";
10
10
  import {
11
11
  getInspectorVersion
12
- } from "./chunk-XKCUJ6ZJ.js";
13
- import "./chunk-JZT7N2BJ.js";
12
+ } from "./chunk-RFJAZOK7.js";
13
+ import "./chunk-WFT4JHYI.js";
14
14
  import {
15
15
  registerInspectorProxyRoutes
16
- } from "./chunk-UJLXHNQP.js";
16
+ } from "./chunk-EKD2XITW.js";
17
17
  import "./chunk-IKTZUWSX.js";
18
- import "./chunk-XCNS5CIW.js";
19
- import "./chunk-K2F2AJOI.js";
20
- import "./chunk-J4FNYLBF.js";
21
- import "./chunk-WFT4JHYI.js";
18
+ import "./chunk-2K7OKCVV.js";
19
+ import "./chunk-V5A5XLFJ.js";
22
20
  import "./chunk-PKBMQBKP.js";
23
21
 
24
22
  // src/server/cli.ts
25
23
  import { serve } from "@hono/node-server";
26
24
  import { Hono } from "hono";
27
25
  import { cors } from "hono/cors";
28
- import { logger } from "hono/logger";
29
26
  import open from "open";
30
27
  var args = process.argv.slice(2);
31
28
  var mcpUrl;
@@ -98,15 +95,13 @@ app.use(
98
95
  exposeHeaders: ["*"]
99
96
  })
100
97
  );
101
- app.use("/inspector/api/proxy/*", logger());
102
- var inspectorMode = process.env.MCP_INSPECTOR_MODE ?? (process.env.RAILWAY_ENVIRONMENT_NAME ? "cloud" : "standalone");
103
98
  registerInspectorProxyRoutes(app, {
104
99
  autoConnectUrl: mcpUrl,
105
100
  oauthProxyAllowedOrigins: [],
106
- oauthProxyAllowLoopback: inspectorMode === "standalone"
101
+ oauthProxyAllowLoopback: true
107
102
  });
108
- registerInspectorCdnShell(app, {
109
- inspectorMode,
103
+ registerInspectorShell(app, {
104
+ inspectorMode: "standalone",
110
105
  manufactChatUrl: process.env.MANUFACT_CHAT_URL
111
106
  });
112
107
  async function startServer() {
@@ -1 +1 @@
1
- {"version":3,"file":"create-dev-api-app.d.ts","sourceRoot":"","sources":["../../src/server/create-dev-api-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,qEAAqE;AACrE,wBAAgB,eAAe,IAAI,IAAI,CA+BtC"}
1
+ {"version":3,"file":"create-dev-api-app.d.ts","sourceRoot":"","sources":["../../src/server/create-dev-api-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,qEAAqE;AACrE,wBAAgB,eAAe,IAAI,IAAI,CA6BtC"}
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createDevApiApp
3
- } from "./chunk-OWR2BIBW.js";
4
- import "./chunk-UJLXHNQP.js";
3
+ } from "./chunk-RKFQG67Z.js";
4
+ import "./chunk-EKD2XITW.js";
5
5
  import "./chunk-IKTZUWSX.js";
6
- import "./chunk-XCNS5CIW.js";
7
- import "./chunk-K2F2AJOI.js";
6
+ import "./chunk-2K7OKCVV.js";
7
+ import "./chunk-V5A5XLFJ.js";
8
8
  import "./chunk-PKBMQBKP.js";
9
9
  export {
10
10
  createDevApiApp
@@ -1,12 +1,12 @@
1
1
  /** Bust Chrome's aggressive favicon cache when the asset changes. */
2
2
  export declare const FAVICON_CACHE_VERSION = "4";
3
- /** Static favicon assets copied to CDN / public alongside the inspector bundle. */
3
+ /** Static favicon assets copied alongside the Inspector browser bundle. */
4
4
  export declare const INSPECTOR_FAVICON_ASSETS: readonly ["favicon.svg", "favicon-96x96.png", "favicon.ico", "apple-touch-icon.png", "site.webmanifest", "web-app-manifest-192x192.png", "web-app-manifest-512x512.png", "favicon-black.svg", "favicon-white.svg"];
5
5
  /**
6
6
  * Render `<link>` tags for inspector favicons.
7
7
  *
8
8
  * Uses same-origin `favicon-black.svg` (light icon in all color schemes).
9
- * Do not point at inspector-cdn production CDN still ships a dark-mode SVG.
9
+ * Keep favicon URLs on the same package-local asset route as the application.
10
10
  */
11
11
  export declare function renderInspectorFaviconLinks(basePath?: string): string;
12
12
  //# sourceMappingURL=favicon-links.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"favicon-links.d.ts","sourceRoot":"","sources":["../../src/server/favicon-links.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,oNAU3B,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,SAAK,GAAG,MAAM,CAIjE"}
1
+ {"version":3,"file":"favicon-links.d.ts","sourceRoot":"","sources":["../../src/server/favicon-links.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,oNAU3B,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,SAAK,GAAG,MAAM,CAIjE"}
@@ -1,10 +1,9 @@
1
1
  /**
2
- * MCP Inspector - Middleware for mounting inspector UI on Express apps
2
+ * MCP Inspector - local Fetch handler and framework mounting adapters
3
3
  *
4
4
  * This is the main entry point for importing the inspector as a library.
5
5
  * For standalone server usage, see cli.ts
6
6
  */
7
- export { mountInspector } from "./middleware.js";
7
+ export { mountInspector, type InspectorFetchHandler, type MountInspectorOptions, } from "./middleware.js";
8
8
  export { registerInspectorProxyRoutes, type InspectorProxyRoutesConfig, } from "./proxy-routes.js";
9
- export { registerInspectorCdnShell, type CdnShellConfig, type InspectorMode, } from "./cdn-shell.js";
10
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,4BAA4B,EAC5B,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,yBAAyB,EACzB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,4BAA4B,EAC5B,KAAK,0BAA0B,GAChC,MAAM,mBAAmB,CAAC"}
@@ -1,23 +1,18 @@
1
1
  import {
2
2
  mountInspector
3
- } from "./chunk-ZPGABKXL.js";
4
- import {
5
- registerInspectorCdnShell
6
- } from "./chunk-WNQGHIZ3.js";
7
- import "./chunk-M5TZA42I.js";
8
- import "./chunk-XKCUJ6ZJ.js";
9
- import "./chunk-JZT7N2BJ.js";
3
+ } from "./chunk-JWDVSQED.js";
4
+ import "./chunk-EPPZCSJQ.js";
5
+ import "./chunk-PZF2PUDE.js";
6
+ import "./chunk-RFJAZOK7.js";
7
+ import "./chunk-WFT4JHYI.js";
10
8
  import {
11
9
  registerInspectorProxyRoutes
12
- } from "./chunk-UJLXHNQP.js";
10
+ } from "./chunk-EKD2XITW.js";
13
11
  import "./chunk-IKTZUWSX.js";
14
- import "./chunk-XCNS5CIW.js";
15
- import "./chunk-K2F2AJOI.js";
16
- import "./chunk-J4FNYLBF.js";
17
- import "./chunk-WFT4JHYI.js";
12
+ import "./chunk-2K7OKCVV.js";
13
+ import "./chunk-V5A5XLFJ.js";
18
14
  import "./chunk-PKBMQBKP.js";
19
15
  export {
20
16
  mountInspector,
21
- registerInspectorCdnShell,
22
17
  registerInspectorProxyRoutes
23
18
  };
@@ -1,7 +1,6 @@
1
1
  import type { Hono } from "hono";
2
- import { type InspectorMode } from "./asset-urls.js";
3
- export type { InspectorMode } from "./asset-urls.js";
4
- export type CdnShellConfig = {
2
+ type InspectorMode = "standalone" | "embedded" | "cloud";
3
+ type InspectorShellConfig = {
5
4
  basePath?: string;
6
5
  devMode?: boolean;
7
6
  sandboxOrigin?: string | null;
@@ -10,9 +9,12 @@ export type CdnShellConfig = {
10
9
  inspectorMode?: InspectorMode;
11
10
  manufactChatUrl?: string | null;
12
11
  disableTelemetry?: boolean;
12
+ /** Preserve the standalone CLI's `/` to `/inspector` redirect (default true). */
13
+ rootRedirect?: boolean;
13
14
  };
14
15
  /**
15
16
  * Serve the inspector UI at `${basePath}/inspector`.
16
17
  */
17
- export declare function registerInspectorCdnShell(app: Hono, config?: CdnShellConfig, basePath?: string): void;
18
- //# sourceMappingURL=cdn-shell.d.ts.map
18
+ export declare function registerInspectorShell(app: Hono, config?: InspectorShellConfig, basePath?: string): void;
19
+ export {};
20
+ //# sourceMappingURL=inspector-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector-shell.d.ts","sourceRoot":"","sources":["../../src/server/inspector-shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,MAAM,CAAC;AAM1C,KAAK,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAC;AAEzD,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAkJF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,IAAI,EACT,MAAM,CAAC,EAAE,oBAAoB,EAC7B,QAAQ,GAAE,MAAW,QAyDtB"}
@@ -0,0 +1,10 @@
1
+ import {
2
+ registerInspectorShell
3
+ } from "./chunk-EPPZCSJQ.js";
4
+ import "./chunk-PZF2PUDE.js";
5
+ import "./chunk-RFJAZOK7.js";
6
+ import "./chunk-WFT4JHYI.js";
7
+ import "./chunk-PKBMQBKP.js";
8
+ export {
9
+ registerInspectorShell
10
+ };
@@ -1,40 +1,65 @@
1
1
  import type { Express } from "express";
2
2
  import { Hono } from "hono";
3
- /**
4
- * Mount the MCP Inspector UI at a specified path on an Express or Hono app
5
- * Similar to how FastAPI mounts Swagger UI at /docs
6
- *
7
- * @param app - Express or Hono application instance
8
- * @param config - Optional configuration including autoConnectUrl
9
- *
10
- * @example
11
- * ```typescript
12
- * import { MCPServer } from 'mcp-use'
13
- * import { mountInspector } from '@mcp-use/inspector'
14
- *
15
- * const server = new MCPServer({ name: 'my-server', version: '1.0.0' })
16
- * mountInspector(server) // Mounts at /inspector
17
- * mountInspector(server, { autoConnectUrl: 'http://localhost:3000/mcp' }) // With auto-connect
18
- * ```
19
- */
20
- export declare function mountInspector(app: Express | Hono, config?: {
3
+ /** Web-standard handler returned by {@link mountInspector}. */
4
+ export type InspectorFetchHandler = (request: globalThis.Request) => Promise<globalThis.Response>;
5
+ /** Configuration shared by framework-neutral and framework-mounted inspectors. */
6
+ export interface MountInspectorOptions {
7
+ /**
8
+ * MCP URL passed to the client for automatic connection. For the returned
9
+ * Fetch handler, omission derives `${request.origin}${basePath}` so localhost
10
+ * and public tunnel URLs both target the listener the browser actually used.
11
+ * Pass `null` to disable auto-connect.
12
+ */
21
13
  autoConnectUrl?: string | null;
22
14
  manufactChatUrl?: string | null;
23
- /** Whether the server is running in development mode (enables same-origin sandbox) */
15
+ /** Whether to enable the same-origin development sandbox (default `true`). */
24
16
  devMode?: boolean;
25
- /** Override the sandbox origin for MCP Apps widgets (e.g., for production reverse proxies) */
17
+ /** Override the sandbox origin for MCP Apps widgets. */
26
18
  sandboxOrigin?: string | null;
27
19
  /** Explicit cross-origin callers of the OAuth BFF. Same-origin is implicit. */
28
20
  oauthProxyAllowedOrigins?: readonly string[];
29
- /** Allow OAuth discovery against loopback targets. Use only for local development. */
21
+ /** Allow OAuth and MCP proxy requests to loopback targets (default `true`). */
30
22
  oauthProxyAllowLoopback?: boolean;
31
23
  /**
32
- * Normalized server-wide path prefix the embedding server mounts its whole
33
- * framework surface under (default `/mcp`; `""` = root). The inspector
34
- * relocates to `${basePath}/inspector` and its proxy/API live under
35
- * `${basePath}/inspector/api/*`. Injected into the client HTML as
36
- * `window.__MCP_BASE_PATH__` so the client can derive its own URLs.
24
+ * Server-wide MCP path prefix (default `/mcp`; `""` = root). The Inspector
25
+ * is served from `${basePath}/inspector` and its API from
26
+ * `${basePath}/inspector/api/*`.
37
27
  */
38
28
  basePath?: string;
39
- }): void;
29
+ }
30
+ /**
31
+ * Create or mount the local MCP Inspector.
32
+ *
33
+ * With options (or no arguments), this returns a framework-neutral Fetch
34
+ * handler. A development server can dispatch Inspector requests to this
35
+ * handler on its existing listener without starting a child process or a
36
+ * second port.
37
+ *
38
+ * Passing an Express or Hono app preserves the v1 mounting API. Hono routes
39
+ * are registered directly; Express receives a narrowly scoped adapter.
40
+ *
41
+ * The UI bundle is always served from this installed package. The same Hono
42
+ * route implementation owns the UI, MCP proxy, OAuth BFF, callback, health,
43
+ * and config routes in every integration.
44
+ *
45
+ * @example Framework-neutral, same-listener use
46
+ * ```typescript
47
+ * const inspector = mountInspector({
48
+ * basePath: "/mcp",
49
+ * autoConnectUrl: "http://localhost:3000/mcp",
50
+ * });
51
+ *
52
+ * const response = await inspector(request);
53
+ * ```
54
+ *
55
+ * @example Legacy Hono or Express mounting
56
+ * ```typescript
57
+ * mountInspector(app, {
58
+ * basePath: "/mcp",
59
+ * autoConnectUrl: "http://localhost:3000/mcp",
60
+ * });
61
+ * ```
62
+ */
63
+ export declare function mountInspector(options?: MountInspectorOptions): InspectorFetchHandler;
64
+ export declare function mountInspector(app: Express | Hono, options?: MountInspectorOptions): void;
40
65
  //# sourceMappingURL=middleware.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAO5B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,GAAG,IAAI,EACnB,MAAM,CAAC,EAAE;IACP,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,sFAAsF;IACtF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,IAAI,CA4DN"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ5B,+DAA+D;AAC/D,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,UAAU,CAAC,OAAO,KACxB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAElC,kFAAkF;AAClF,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,+EAA+E;IAC/E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,qBAAqB,CAAC;AAEzB,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAAC"}
@@ -1,16 +1,14 @@
1
1
  import {
2
2
  mountInspector
3
- } from "./chunk-ZPGABKXL.js";
4
- import "./chunk-WNQGHIZ3.js";
5
- import "./chunk-M5TZA42I.js";
6
- import "./chunk-XKCUJ6ZJ.js";
7
- import "./chunk-JZT7N2BJ.js";
8
- import "./chunk-UJLXHNQP.js";
9
- import "./chunk-IKTZUWSX.js";
10
- import "./chunk-XCNS5CIW.js";
11
- import "./chunk-K2F2AJOI.js";
12
- import "./chunk-J4FNYLBF.js";
3
+ } from "./chunk-JWDVSQED.js";
4
+ import "./chunk-EPPZCSJQ.js";
5
+ import "./chunk-PZF2PUDE.js";
6
+ import "./chunk-RFJAZOK7.js";
13
7
  import "./chunk-WFT4JHYI.js";
8
+ import "./chunk-EKD2XITW.js";
9
+ import "./chunk-IKTZUWSX.js";
10
+ import "./chunk-2K7OKCVV.js";
11
+ import "./chunk-V5A5XLFJ.js";
14
12
  import "./chunk-PKBMQBKP.js";
15
13
  export {
16
14
  mountInspector
@@ -1,10 +1,10 @@
1
1
  import "../chunk-IKTZUWSX.js";
2
2
  import {
3
3
  mountMcpProxy
4
- } from "../chunk-XCNS5CIW.js";
4
+ } from "../chunk-2K7OKCVV.js";
5
5
  import {
6
6
  mountOAuthProxy
7
- } from "../chunk-K2F2AJOI.js";
7
+ } from "../chunk-V5A5XLFJ.js";
8
8
  import "../chunk-PKBMQBKP.js";
9
9
  export {
10
10
  mountMcpProxy,
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/proxy/mcp-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM1C;;GAEG;AACH,UAAU,eAAe;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAE1D;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAEhC,mEAAmE;IACnE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CA0R5E"}
1
+ {"version":3,"file":"mcp-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/proxy/mcp-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQ1C;;GAEG;AACH,UAAU,eAAe;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAE1D;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAEhC,mEAAmE;IACnE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GAAG,IAAI,GAC3B,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,GAAE,eAAoB,GAAG,IAAI,CAiO5E"}
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  isOpenEndedSseResponse,
3
3
  mountMcpProxy
4
- } from "../chunk-XCNS5CIW.js";
5
- import "../chunk-K2F2AJOI.js";
4
+ } from "../chunk-2K7OKCVV.js";
5
+ import "../chunk-V5A5XLFJ.js";
6
6
  import "../chunk-PKBMQBKP.js";
7
7
  export {
8
8
  isOpenEndedSseResponse,
@@ -12,6 +12,8 @@ interface OAuthProxyOptions {
12
12
  maxRequestBodyBytes?: number;
13
13
  /** @default 1048576 */
14
14
  maxResponseBodyBytes?: number;
15
+ /** Exact browser callback path enforced on dynamic registrations. */
16
+ callbackPath?: string;
15
17
  /** @default true */
16
18
  enableLogging?: boolean;
17
19
  /** Optional authentication applied before any outbound request. */
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/proxy/oauth-proxy.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsB1C,UAAU,iBAAiB;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC1D,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,CAClB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjC;AA0BD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,EACT,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CAkPN;AAkDD,uEAAuE;AACvE,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,aAAa,UAAQ,GACpB,OAAO,CAAC,OAAO,CAAC,CAElB"}
1
+ {"version":3,"file":"oauth-proxy.d.ts","sourceRoot":"","sources":["../../../src/server/proxy/oauth-proxy.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA6B1C,UAAU,iBAAiB;IACzB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mEAAmE;IACnE,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC1D,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,CAClB,SAAS,EAAE,MAAM,EACjB,CAAC,EAAE,OAAO,KACP,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjC;AA4BD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,EACT,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CAmRN;AAkDD,uEAAuE;AACvE,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,aAAa,UAAQ,GACpB,OAAO,CAAC,OAAO,CAAC,CAElB"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  isSafeProxyTarget,
3
3
  mountOAuthProxy
4
- } from "../chunk-K2F2AJOI.js";
4
+ } from "../chunk-V5A5XLFJ.js";
5
5
  import "../chunk-PKBMQBKP.js";
6
6
  export {
7
7
  isSafeProxyTarget,
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-routes.d.ts","sourceRoot":"","sources":["../../src/server/proxy-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,MAAM,0BAA0B,GAAG;IACvC,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,IAAI,EACT,MAAM,CAAC,EAAE,0BAA0B,EACnC,QAAQ,GAAE,MAAW,QAmCtB"}
1
+ {"version":3,"file":"proxy-routes.d.ts","sourceRoot":"","sources":["../../src/server/proxy-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,MAAM,0BAA0B,GAAG;IACvC,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,+EAA+E;IAC/E,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,0EAA0E;IAC1E,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,IAAI,EACT,MAAM,CAAC,EAAE,0BAA0B,EACnC,QAAQ,GAAE,MAAW,QAoCtB"}