@mcp-use/client 2.1.3 → 2.1.4-canary.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/dist/index.js CHANGED
@@ -1525,7 +1525,7 @@ init_connector_telemetry();
1525
1525
  init_logging();
1526
1526
 
1527
1527
  // src/utils/version.ts
1528
- var VERSION = "2.1.3";
1528
+ var VERSION = "2.1.4-canary.0";
1529
1529
  function getPackageVersion() {
1530
1530
  return VERSION;
1531
1531
  }
@@ -1900,7 +1900,7 @@ var HttpConnector = class extends BaseConnector {
1900
1900
  };
1901
1901
 
1902
1902
  // src/utils/version.ts
1903
- var VERSION = "2.1.3";
1903
+ var VERSION = "2.1.4-canary.0";
1904
1904
  function getPackageVersion() {
1905
1905
  return VERSION;
1906
1906
  }
@@ -1971,6 +1971,11 @@ function resolveClientOptions(clientOptions) {
1971
1971
  };
1972
1972
  }
1973
1973
 
1974
+ // src/auth/browser.ts
1975
+ import {
1976
+ extractWWWAuthenticateParams
1977
+ } from "@modelcontextprotocol/client";
1978
+
1974
1979
  // src/auth/storage.ts
1975
1980
  var AUTH_CRYPTO_DATABASE = "mcp-use-oauth-crypto";
1976
1981
  var AUTH_CRYPTO_STORE = "keys";
@@ -2510,6 +2515,8 @@ var BrowserOAuthClientProvider = class {
2510
2515
  proxyOAuthRequests;
2511
2516
  lastAttemptedAuthUrl = null;
2512
2517
  authorizationPending = false;
2518
+ /** Latest protected-resource metadata URL advertised by an MCP 401. */
2519
+ challengedResourceMetadataUrl;
2513
2520
  /** Callback invoked immediately before an authorization popup opens. */
2514
2521
  onPopupWindow;
2515
2522
  constructor(serverUrl, options = {}) {
@@ -2617,6 +2624,11 @@ var BrowserOAuthClientProvider = class {
2617
2624
  return url;
2618
2625
  }
2619
2626
  }
2627
+ rememberResourceMetadataChallenge(response) {
2628
+ if (response.status !== 401) return;
2629
+ const { resourceMetadataUrl } = extractWWWAuthenticateParams(response);
2630
+ this.challengedResourceMetadataUrl = resourceMetadataUrl?.toString();
2631
+ }
2620
2632
  /**
2621
2633
  * Returns a `fetch` function, scoped to this provider, that routes OAuth
2622
2634
  * metadata and non-browser OAuth endpoint requests through the configured
@@ -2655,10 +2667,12 @@ var BrowserOAuthClientProvider = class {
2655
2667
  }
2656
2668
  const isMetadata = pathname.includes("/.well-known/");
2657
2669
  if (!oauthProxyUrl) {
2658
- return await base(
2670
+ const response2 = await base(
2659
2671
  isMetadata ? url : input,
2660
2672
  isMetadata ? { ...init, cache: "no-store" } : init
2661
2673
  );
2674
+ if (!isMetadata) this.rememberResourceMetadataChallenge(response2);
2675
+ return response2;
2662
2676
  }
2663
2677
  if (!restoredDiscovery) {
2664
2678
  restoredDiscovery = true;
@@ -2678,7 +2692,9 @@ var BrowserOAuthClientProvider = class {
2678
2692
  pathname
2679
2693
  );
2680
2694
  if (!isMetadata && !isProxiedEndpoint) {
2681
- return await base(input, init);
2695
+ const response2 = await base(input, init);
2696
+ this.rememberResourceMetadataChallenge(response2);
2697
+ return response2;
2682
2698
  }
2683
2699
  try {
2684
2700
  const urlObj = new URL(url);
@@ -2815,8 +2831,15 @@ var BrowserOAuthClientProvider = class {
2815
2831
  return this.session.saveDiscoveryState(state);
2816
2832
  }
2817
2833
  /** Return previously saved OAuth discovery state, or `undefined`. */
2818
- discoveryState() {
2819
- return this.session.discoveryState();
2834
+ async discoveryState() {
2835
+ const state = await this.session.discoveryState();
2836
+ const challengedUrl = this.challengedResourceMetadataUrl;
2837
+ this.challengedResourceMetadataUrl = void 0;
2838
+ if (challengedUrl && state && (state.resourceMetadataUrl !== challengedUrl || !state.resourceMetadata)) {
2839
+ await this.session.invalidateCredentials("discovery");
2840
+ return void 0;
2841
+ }
2842
+ return state;
2820
2843
  }
2821
2844
  /**
2822
2845
  * Return the token endpoint from the SDK's persisted discovery state.