@mcp-use/client 2.0.0-beta.13 → 2.0.0-beta.14

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.
@@ -48,6 +48,7 @@ export declare class BrowserOAuthClientProvider implements OAuthClientProvider {
48
48
  private connectionUrl?;
49
49
  private proxyOAuthRequests;
50
50
  private lastAttemptedAuthUrl;
51
+ private authorizationPending;
51
52
  readonly onPopupWindow: ((url: string, features: string, window: globalThis.Window | null) => void) | undefined;
52
53
  constructor(serverUrl: string, options?: BrowserOAuthOptions);
53
54
  get storageKeyPrefix(): string;
@@ -59,6 +60,8 @@ export declare class BrowserOAuthClientProvider implements OAuthClientProvider {
59
60
  get scope(): string | undefined;
60
61
  get clientMetadataUrl(): string | undefined;
61
62
  getKey(keySuffix: string): string;
63
+ get hasPendingFlow(): boolean;
64
+ markFlowComplete(): void;
62
65
  /**
63
66
  * Re-anchor an SDK-derived OAuth discovery URL from the MCP connection
64
67
  * (proxy) origin onto the actual MCP server.
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/auth/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/auth/browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC7B,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACZ,MAAM,8BAA8B,CAAC;AAwBtC,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,KAC7B,IAAI,CAAC;CACX;AAED;;GAEG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IACnD,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAG9C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,OAAO,CAAC,eAAe,CAAC,CAAU;IAClC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,oBAAoB,CAAS;IACrC,QAAQ,CAAC,aAAa,EAClB,CAAC,CACC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,KAC7B,IAAI,CAAC,GACV,SAAS,CAAC;gBAEF,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;IAwBhE,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIjC,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,gBAAgB,IAAI,IAAI;IAIxB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,OAAO,KAAK,GAAG,SAAS;IAyKjE,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,cAAc,IAAI,mBAAmB,CAExC;IAED,MAAM,CACJ,GAAG,CAAC,EAAE,6BAA6B,GAClC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAInC,UAAU,CACR,MAAM,EAAE,WAAW,EACnB,GAAG,CAAC,EAAE,6BAA6B,GAClC,OAAO,CAAC,IAAI,CAAC;IAMV,iBAAiB,CACrB,GAAG,CAAC,EAAE,6BAA6B,GAClC,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IASxC,qBAAqB,CACzB,iBAAiB,EAAE,sBAAsB,EACzC,GAAG,CAAC,EAAE,6BAA6B,GAClC,OAAO,CAAC,IAAI,CAAC;IAyBhB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,qBAAqB,CACnB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAC5D,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;OAIG;IACH,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,qEAAqE;IACrE,cAAc,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAI1D;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI1C,yEAAyE;IACzE,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIrC;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC;QACpC,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC;IAKT;;;;;OAKG;IACG,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBrE;;;OAGG;IACG,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDnE;;OAEG;IACH,uBAAuB,IAAI,MAAM,GAAG,IAAI;IAIxC,YAAY,IAAI,MAAM;CAoBvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED,YAAY,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../src/auth/callback.ts"],"names":[],"mappings":"AA4MA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
1
+ {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../src/auth/callback.ts"],"names":[],"mappings":"AAuMA;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
@@ -1 +1 @@
1
- {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/auth/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AAgBtC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAgB/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GAC3D,OAAO,CAAC,IAAI,CAAC,CAyBf"}
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/auth/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AAmBtC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAgB/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GAC3D,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -19,6 +19,13 @@ export declare class OAuthFlowError extends Error {
19
19
  readonly description?: string;
20
20
  constructor(code: string, description?: string);
21
21
  }
22
+ /** Authorization response captured by the Node loopback callback. */
23
+ export interface NodeOAuthAuthorizationResponse {
24
+ /** Authorization code returned by the authorization server. */
25
+ code: string;
26
+ /** RFC 9207 authorization-server issuer, when present in the callback. */
27
+ iss?: string;
28
+ }
22
29
  /**
23
30
  * Node/CLI OAuth client provider for MCP. Owns a localhost loopback callback
24
31
  * server, opens the user's browser, and resolves the authorization code via
@@ -38,7 +45,7 @@ export declare class NodeOAuthClientProvider implements OAuthClientProvider {
38
45
  private server;
39
46
  /** Currently in-flight deferred — used to prevent overlapping flows. */
40
47
  private pending;
41
- /** Latest deferred (settled or in-flight) what `getAuthorizationCode()` returns. */
48
+ /** Latest deferred (settled or in-flight) for the loopback response. */
42
49
  private lastFlow;
43
50
  private pendingTimer;
44
51
  private constructor();
@@ -67,11 +74,19 @@ export declare class NodeOAuthClientProvider implements OAuthClientProvider {
67
74
  redirectToAuthorization(authorizationUrl: URL): Promise<void>;
68
75
  /**
69
76
  * Resolves with the authorization code captured by the loopback callback.
77
+ *
78
+ * @remarks This compatibility method omits the RFC 9207 issuer. OAuth flow
79
+ * orchestrators should use {@link getAuthorizationResponse} when available.
70
80
  * Must be called after `redirectToAuthorization()`. Returns the same
71
81
  * promise whether the callback has fired or not — callers may subscribe
72
82
  * before or after.
73
83
  */
74
84
  getAuthorizationCode(): Promise<string>;
85
+ /**
86
+ * Resolves with the authorization code and RFC 9207 issuer captured by the
87
+ * loopback callback.
88
+ */
89
+ getAuthorizationResponse(): Promise<NodeOAuthAuthorizationResponse>;
75
90
  /**
76
91
  * Cancel an in-progress flow (timeout, SIGINT, etc.) and close the loopback.
77
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/auth/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/auth/node.ts"],"names":[],"mappings":"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"}
@@ -128,7 +128,7 @@ var Logger = class {
128
128
  var logger = Logger.get();
129
129
 
130
130
  // src/utils/version.ts
131
- var VERSION = "2.0.0-beta.13";
131
+ var VERSION = "2.0.0-beta.14";
132
132
  function getPackageVersion() {
133
133
  return VERSION;
134
134
  }
@@ -148,16 +148,13 @@ var MCPAgentExecutionEvent = class extends BaseTelemetryEvent {
148
148
  return {
149
149
  // Core execution info
150
150
  execution_method: this.data.executionMethod,
151
- query: this.data.query,
152
151
  query_length: this.data.query.length,
153
152
  success: this.data.success,
154
153
  // Agent configuration
155
154
  model_provider: this.data.modelProvider,
156
155
  model_name: this.data.modelName,
157
156
  server_count: this.data.serverCount,
158
- server_identifiers: this.data.serverIdentifiers,
159
157
  total_tools_available: this.data.totalToolsAvailable,
160
- tools_available_names: this.data.toolsAvailableNames,
161
158
  max_steps_configured: this.data.maxStepsConfigured,
162
159
  memory_enabled: this.data.memoryEnabled,
163
160
  use_server_manager: this.data.useServerManager,
@@ -168,8 +165,6 @@ var MCPAgentExecutionEvent = class extends BaseTelemetryEvent {
168
165
  // Execution results (always include, even if null)
169
166
  steps_taken: this.data.stepsTaken ?? null,
170
167
  tools_used_count: this.data.toolsUsedCount ?? null,
171
- tools_used_names: this.data.toolsUsedNames ?? null,
172
- response: this.data.response ?? null,
173
168
  response_length: this.data.response ? this.data.response.length : null,
174
169
  execution_time_ms: this.data.executionTimeMs ?? null,
175
170
  error_type: this.data.errorType ?? null,
@@ -265,21 +260,72 @@ async function telFetch(url, init) {
265
260
  }
266
261
  var POSTHOG_HOST = "https://eu.i.posthog.com";
267
262
  var POSTHOG_API_KEY = "phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI";
268
- function capturePostHog(params) {
269
- const host = params.host ?? POSTHOG_HOST;
270
- const apiKey = params.apiKey ?? POSTHOG_API_KEY;
271
- return telFetch(`${host}/i/v0/e/`, {
272
- method: "POST",
273
- headers: { "Content-Type": "application/json" },
274
- keepalive: true,
275
- body: JSON.stringify({
263
+ var CONTENT_PROPERTY = /(^|_)(arguments?|args|body|command|headers?|location|message|query|response|secret|subject|token|uri|url|user_agent)(_|$)/i;
264
+ var IDENTIFYING_PROPERTY = /(^|_)(server_identifiers?|server_names?|servers|tool_names?|tools_(available|used)_names)(_|$)/i;
265
+ var AGGREGATE_PROPERTY = /(_count|_length|_duration(?:_ms)?|_time_ms|(^|_)num_[a-z0-9_]+)$/i;
266
+ function normalizePropertyKey(key) {
267
+ return key.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/[^a-z0-9_$]+/gi, "_").toLowerCase();
268
+ }
269
+ function sanitizeValue(value, seen) {
270
+ if (Array.isArray(value)) {
271
+ if (seen.has(value)) {
272
+ throw new TypeError("Cyclic telemetry properties are not supported");
273
+ }
274
+ seen.add(value);
275
+ const sanitized = value.map((item) => sanitizeValue(item, seen));
276
+ seen.delete(value);
277
+ return sanitized;
278
+ }
279
+ if (value !== null && typeof value === "object" && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null)) {
280
+ if (seen.has(value)) {
281
+ throw new TypeError("Cyclic telemetry properties are not supported");
282
+ }
283
+ seen.add(value);
284
+ const sanitized = sanitizeProperties(
285
+ value,
286
+ seen
287
+ );
288
+ seen.delete(value);
289
+ return sanitized;
290
+ }
291
+ return value;
292
+ }
293
+ function sanitizeProperties(properties, seen = /* @__PURE__ */ new WeakSet()) {
294
+ const sanitized = {};
295
+ for (const [key, value] of Object.entries(properties)) {
296
+ const normalizedKey = normalizePropertyKey(key);
297
+ if (AGGREGATE_PROPERTY.test(normalizedKey)) {
298
+ if (value === null || typeof value === "number") {
299
+ sanitized[key] = value;
300
+ }
301
+ continue;
302
+ }
303
+ if (IDENTIFYING_PROPERTY.test(normalizedKey) || CONTENT_PROPERTY.test(normalizedKey)) {
304
+ continue;
305
+ }
306
+ sanitized[key] = sanitizeValue(value, seen);
307
+ }
308
+ return sanitized;
309
+ }
310
+ async function capturePostHog(params) {
311
+ try {
312
+ const host = params.host ?? POSTHOG_HOST;
313
+ const apiKey = params.apiKey ?? POSTHOG_API_KEY;
314
+ const body = JSON.stringify({
276
315
  api_key: apiKey,
277
316
  event: params.event,
278
317
  distinct_id: params.distinctId,
279
- properties: params.properties,
318
+ properties: sanitizeProperties(params.properties),
280
319
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
281
- })
282
- });
320
+ });
321
+ await telFetch(`${host}/i/v0/e/`, {
322
+ method: "POST",
323
+ headers: { "Content-Type": "application/json" },
324
+ keepalive: true,
325
+ body
326
+ });
327
+ } catch {
328
+ }
283
329
  }
284
330
 
285
331
  // src/telemetry/telemetry.ts
@@ -1052,7 +1098,7 @@ var OAuthSessionStore = class _OAuthSessionStore {
1052
1098
  */
1053
1099
  async storeAuthorizationState(authorizationUrl, opts = {}) {
1054
1100
  const state = globalThis.crypto.randomUUID();
1055
- const stateKey = `${this.storageKeyPrefix}:state_${state}`;
1101
+ const stateKey = `${this.storageKeyPrefix}_${this.serverUrlHash}_state_${state}`;
1056
1102
  const stateData = {
1057
1103
  serverUrlHash: this.serverUrlHash,
1058
1104
  expiry: Date.now() + 1e3 * 60 * 10,
@@ -1124,6 +1170,7 @@ var BrowserOAuthClientProvider = class {
1124
1170
  connectionUrl;
1125
1171
  proxyOAuthRequests;
1126
1172
  lastAttemptedAuthUrl = null;
1173
+ authorizationPending = false;
1127
1174
  onPopupWindow;
1128
1175
  constructor(serverUrl, options = {}) {
1129
1176
  if (options.staticClientInfo?.client_secret) {
@@ -1174,6 +1221,12 @@ var BrowserOAuthClientProvider = class {
1174
1221
  getKey(keySuffix) {
1175
1222
  return this.session.getKey(keySuffix);
1176
1223
  }
1224
+ get hasPendingFlow() {
1225
+ return this.authorizationPending;
1226
+ }
1227
+ markFlowComplete() {
1228
+ this.authorizationPending = false;
1229
+ }
1177
1230
  /**
1178
1231
  * Re-anchor an SDK-derived OAuth discovery URL from the MCP connection
1179
1232
  * (proxy) origin onto the actual MCP server.
@@ -1354,6 +1407,7 @@ var BrowserOAuthClientProvider = class {
1354
1407
  }
1355
1408
  saveTokens(tokens, ctx) {
1356
1409
  this.lastAttemptedAuthUrl = null;
1410
+ this.authorizationPending = false;
1357
1411
  return this.session.saveTokens(tokens, ctx);
1358
1412
  }
1359
1413
  async clientInformation(ctx) {
@@ -1434,6 +1488,7 @@ var BrowserOAuthClientProvider = class {
1434
1488
  }
1435
1489
  );
1436
1490
  this.lastAttemptedAuthUrl = prepared;
1491
+ this.authorizationPending = true;
1437
1492
  return prepared;
1438
1493
  }
1439
1494
  /**
@@ -1490,15 +1545,13 @@ var BrowserOAuthClientProvider = class {
1490
1545
  }
1491
1546
  clearStorage() {
1492
1547
  this.lastAttemptedAuthUrl = null;
1548
+ this.authorizationPending = false;
1493
1549
  const prefixPattern = `${this.storageKeyPrefix}_${this.serverUrlHash}_`;
1494
- const statePattern = `${this.storageKeyPrefix}:state_`;
1495
1550
  const keysToRemove = [];
1496
1551
  let count = 0;
1497
1552
  for (const key of this.storage.keys()) {
1498
1553
  if (key.startsWith(prefixPattern)) {
1499
1554
  keysToRemove.push(key);
1500
- } else if (key.startsWith(statePattern)) {
1501
- keysToRemove.push(key);
1502
1555
  }
1503
1556
  }
1504
1557
  const uniqueKeysToRemove = [...new Set(keysToRemove)];
@@ -1711,20 +1764,14 @@ function renderResult(title, message, error, returnUrl) {
1711
1764
  }
1712
1765
  document.body.appendChild(container);
1713
1766
  }
1714
- function findStoredState(state) {
1715
- const defaultKey = `mcp:auth:state_${state}`;
1716
- let key = localStorage.getItem(defaultKey) ? defaultKey : null;
1717
- if (!key) {
1718
- const suffix = `:state_${state}`;
1719
- for (let index = 0; index < localStorage.length; index++) {
1720
- const candidate = localStorage.key(index);
1721
- if (candidate?.endsWith(suffix)) {
1722
- key = candidate;
1723
- break;
1724
- }
1725
- }
1726
- }
1727
- const serialized = key ? localStorage.getItem(key) : null;
1767
+ async function findStoredState(state) {
1768
+ const store = new LocalStorageKVStore();
1769
+ const legacySuffix = `:state_${state}`;
1770
+ const scopedSuffix = `_state_${state}`;
1771
+ const key = (await store.keys()).find(
1772
+ (candidate) => candidate.endsWith(legacySuffix) || candidate.endsWith(scopedSuffix)
1773
+ );
1774
+ const serialized = key ? await store.get(key) : null;
1728
1775
  if (!key || !serialized) {
1729
1776
  throw new Error(`Invalid or expired OAuth state "${state}".`);
1730
1777
  }
@@ -1732,10 +1779,10 @@ function findStoredState(state) {
1732
1779
  try {
1733
1780
  value = JSON.parse(serialized);
1734
1781
  } catch {
1735
- localStorage.removeItem(key);
1782
+ await store.remove(key);
1736
1783
  throw new Error("Failed to parse stored OAuth state.");
1737
1784
  }
1738
- return { key, value };
1785
+ return { key, value, store };
1739
1786
  }
1740
1787
  function redirectWithError(returnUrl, message) {
1741
1788
  const url = new URL(returnUrl);
@@ -1794,17 +1841,19 @@ async function completeAuthorization() {
1794
1841
  const callbackParams = new URLSearchParams(window.location.search);
1795
1842
  const state = callbackParams.get("state");
1796
1843
  let stateKey = null;
1844
+ let stateStore = null;
1797
1845
  let storedState = null;
1798
1846
  let provider = null;
1799
1847
  try {
1800
1848
  if (!state) {
1801
1849
  throw new Error("OAuth callback is missing the state parameter.");
1802
1850
  }
1803
- const stored = findStoredState(state);
1851
+ const stored = await findStoredState(state);
1804
1852
  stateKey = stored.key;
1853
+ stateStore = stored.store;
1805
1854
  storedState = stored.value;
1806
1855
  if (!storedState.expiry || storedState.expiry < Date.now()) {
1807
- localStorage.removeItem(stateKey);
1856
+ await stateStore.remove(stateKey);
1808
1857
  throw new Error(
1809
1858
  "OAuth state has expired. Please start authentication again."
1810
1859
  );
@@ -1819,7 +1868,7 @@ async function completeAuthorization() {
1819
1868
  fetch: provider.getProxyFetch()
1820
1869
  });
1821
1870
  await transport.finishAuth(callbackParams);
1822
- localStorage.removeItem(stateKey);
1871
+ await stateStore.remove(stateKey);
1823
1872
  signalResult(true, void 0, storedState, {
1824
1873
  state,
1825
1874
  serverUrlHash: storedState.serverUrlHash
@@ -1827,8 +1876,12 @@ async function completeAuthorization() {
1827
1876
  } catch (error) {
1828
1877
  const message = error instanceof Error ? error.message : String(error);
1829
1878
  console.error("[mcp-callback] OAuth callback failed:", error);
1830
- if (stateKey) localStorage.removeItem(stateKey);
1831
- if (provider) localStorage.removeItem(provider.getKey("last_auth_url"));
1879
+ if (stateKey && stateStore) await stateStore.remove(stateKey);
1880
+ if (provider) {
1881
+ await (stateStore ?? new LocalStorageKVStore()).remove(
1882
+ provider.getKey("last_auth_url")
1883
+ );
1884
+ }
1832
1885
  signalResult(false, message, storedState, {
1833
1886
  state,
1834
1887
  serverUrlHash: storedState?.serverUrlHash
@@ -1870,11 +1923,12 @@ async function completeOAuthFlow(provider, serverUrl, options = {}) {
1870
1923
  throw new Error(`Unexpected OAuth auth() result: ${result}`);
1871
1924
  }
1872
1925
  }
1873
- if (typeof flowProvider.getAuthorizationCode === "function") {
1874
- const code = await flowProvider.getAuthorizationCode();
1926
+ if (typeof flowProvider.getAuthorizationResponse === "function" || typeof flowProvider.getAuthorizationCode === "function") {
1927
+ const response = typeof flowProvider.getAuthorizationResponse === "function" ? await flowProvider.getAuthorizationResponse() : { code: await flowProvider.getAuthorizationCode() };
1875
1928
  await auth(provider, {
1876
1929
  serverUrl,
1877
- authorizationCode: code,
1930
+ authorizationCode: response.code,
1931
+ ...response.iss !== void 0 ? { iss: response.iss } : {},
1878
1932
  fetchFn
1879
1933
  });
1880
1934
  return;
@@ -1888,6 +1942,8 @@ async function waitForBrowserAuthComplete(provider, timeoutMs) {
1888
1942
  );
1889
1943
  }
1890
1944
  if (provider.useRedirectFlow) {
1945
+ await new Promise(() => {
1946
+ });
1891
1947
  return;
1892
1948
  }
1893
1949
  const tokensKey = provider.getKey?.("tokens");
@@ -1904,25 +1960,29 @@ async function waitForBrowserAuthComplete(provider, timeoutMs) {
1904
1960
  } catch {
1905
1961
  }
1906
1962
  }
1907
- const result = await runAuthPopup({
1908
- popup: null,
1909
- state,
1910
- tokensKey,
1911
- timeoutMs
1912
- });
1913
- switch (result.kind) {
1914
- case "success":
1915
- return;
1916
- case "cancelled":
1917
- throw new Error("OAuth authentication was cancelled.");
1918
- case "timeout":
1919
- throw new Error(
1920
- `OAuth callback not received within ${timeoutMs}ms. Ensure /oauth/callback calls onMcpAuthorization().`
1921
- );
1922
- case "error":
1923
- throw new Error(result.error);
1924
- default:
1925
- throw new Error("Unexpected OAuth popup result");
1963
+ try {
1964
+ const result = await runAuthPopup({
1965
+ popup: null,
1966
+ state,
1967
+ tokensKey,
1968
+ timeoutMs
1969
+ });
1970
+ switch (result.kind) {
1971
+ case "success":
1972
+ return;
1973
+ case "cancelled":
1974
+ throw new Error("OAuth authentication was cancelled.");
1975
+ case "timeout":
1976
+ throw new Error(
1977
+ `OAuth callback not received within ${timeoutMs}ms. Ensure /oauth/callback calls onMcpAuthorization().`
1978
+ );
1979
+ case "error":
1980
+ throw new Error(result.error);
1981
+ default:
1982
+ throw new Error("Unexpected OAuth popup result");
1983
+ }
1984
+ } finally {
1985
+ provider.markFlowComplete?.();
1926
1986
  }
1927
1987
  }
1928
1988