@mcp-use/client 2.3.4 → 2.4.0-canary.1
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/.tsbuildinfo +1 -1
- package/dist/auth/browser.d.ts.map +1 -1
- package/dist/index-browser.js +11 -7
- package/dist/index-browser.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/react/McpClientProvider.d.ts.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +146 -9
- package/dist/react/index.js.map +1 -1
- package/dist/react/types.d.ts +48 -0
- package/dist/react/types.d.ts.map +1 -1
- package/dist/react/useMcp-operations.d.ts.map +1 -1
- package/dist/react/useMcp.d.ts.map +1 -1
- package/dist/react/view/resolve-view-resource.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpClientProvider.d.ts","sourceRoot":"","sources":["../../src/react/McpClientProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,EAQZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAUpB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,kGAAkG;IAClG,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACzD;;;;;;;;;;OAUG;IACH,YAAY,EAAE,CACZ,EAAE,EAAE,MAAM,EACV,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,iEAAiE;IACjE,oBAAoB,EAAE,CACpB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,0DAA0D;IAC1D,YAAY,EAAE,CACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,KAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sCAAsC;IACtC,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IACjD,yEAAyE;IACzE,aAAa,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"McpClientProvider.d.ts","sourceRoot":"","sources":["../../src/react/McpClientProvider.tsx"],"names":[],"mappings":"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"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* supporting storage / logging utilities for connecting to MCP servers from a
|
|
6
6
|
* React app. MCP Apps host rendering lives in {@link ViewRenderer}.
|
|
7
7
|
*/
|
|
8
|
-
export type { UseMcpOptions, UseMcpResult, ReconnectionOptions, McpServer, McpServerConfig,
|
|
8
|
+
export type { UseMcpOptions, UseMcpResult, McpUserInfoClaims, McpUserInfoState, ReconnectionOptions, McpServer, McpServerConfig,
|
|
9
9
|
/** @deprecated Use McpServerConfig */
|
|
10
10
|
McpServerOptions, PersistedMcpServerConfig, McpNotification, PendingSamplingRequest, PendingElicitationRequest, } from "./types.js";
|
|
11
11
|
export type { Skill, SkillDirectoryEntry, SkillDirectoryReadResult, SkillGetResult, SkillResource, SkillsListResult, } from "../core/skills.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,SAAS,EACT,eAAe;AACf,sCAAsC;AACtC,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,KAAK,EACL,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAG7D,OAAO,EACL,GAAG,EACH,SAAS,EACT,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAG3C,YAAY,EACV,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,oBAAoB,EACpB,IAAI,EACJ,SAAS,GACV,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,sDAAsD;AACtD,MAAM,MAAM,4BAA4B,GAAG;IACzC,4BAA4B;IAC5B,MAAM,EAAE,wBAAwB,CAAC;IACjC,mCAAmC;IACnC,MAAM,EAAE,2BAA2B,CAAC;CACrC,CAAC;AACF,4DAA4D;AAC5D,YAAY,EAAE,4BAA4B,IAAI,oBAAoB,EAAE,CAAC;AACrE,2DAA2D;AAC3D,YAAY,EAAE,2BAA2B,IAAI,mBAAmB,EAAE,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,oCAAoC,GAC1C,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,eAAe;AACf,sCAAsC;AACtC,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,KAAK,EACL,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAG7D,OAAO,EACL,GAAG,EACH,SAAS,EACT,kBAAkB,GACnB,MAAM,mCAAmC,CAAC;AAG3C,YAAY,EACV,cAAc,EACd,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,eAAe,EACf,cAAc,EACd,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,oBAAoB,EACpB,IAAI,EACJ,SAAS,GACV,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,sDAAsD;AACtD,MAAM,MAAM,4BAA4B,GAAG;IACzC,4BAA4B;IAC5B,MAAM,EAAE,wBAAwB,CAAC;IACjC,mCAAmC;IACnC,MAAM,EAAE,2BAA2B,CAAC;CACrC,CAAC;AACF,4DAA4D;AAC5D,YAAY,EAAE,4BAA4B,IAAI,oBAAoB,EAAE,CAAC;AACrE,2DAA2D;AAC3D,YAAY,EAAE,2BAA2B,IAAI,mBAAmB,EAAE,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAG/D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,KAAK,WAAW,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,oCAAoC,GAC1C,MAAM,wBAAwB,CAAC"}
|
package/dist/react/index.js
CHANGED
|
@@ -298,6 +298,9 @@ function pickPersistedServerConfig(source) {
|
|
|
298
298
|
if (source.oauth.scope !== void 0) {
|
|
299
299
|
oauth.scope = source.oauth.scope;
|
|
300
300
|
}
|
|
301
|
+
if (source.oauth.fetchUserInfo !== void 0) {
|
|
302
|
+
oauth.fetchUserInfo = source.oauth.fetchUserInfo;
|
|
303
|
+
}
|
|
301
304
|
if (Object.keys(oauth).length > 0) {
|
|
302
305
|
out.oauth = oauth;
|
|
303
306
|
}
|
|
@@ -1880,7 +1883,7 @@ var HttpConnector = class extends BaseConnector {
|
|
|
1880
1883
|
};
|
|
1881
1884
|
|
|
1882
1885
|
// src/utils/version.ts
|
|
1883
|
-
var VERSION = "2.
|
|
1886
|
+
var VERSION = "2.4.0-canary.1";
|
|
1884
1887
|
function getPackageVersion() {
|
|
1885
1888
|
return VERSION;
|
|
1886
1889
|
}
|
|
@@ -2647,13 +2650,14 @@ var BrowserOAuthClientProvider = class {
|
|
|
2647
2650
|
} catch {
|
|
2648
2651
|
return await base(input, init);
|
|
2649
2652
|
}
|
|
2650
|
-
const
|
|
2653
|
+
const looksLikeMetadata = pathname.includes("/.well-known/");
|
|
2651
2654
|
if (!oauthProxyUrl) {
|
|
2652
2655
|
const response2 = await base(
|
|
2653
|
-
|
|
2654
|
-
|
|
2656
|
+
looksLikeMetadata ? url : input,
|
|
2657
|
+
looksLikeMetadata ? { ...init, cache: "no-store" } : init
|
|
2655
2658
|
);
|
|
2656
|
-
if (!
|
|
2659
|
+
if (!looksLikeMetadata)
|
|
2660
|
+
this.rememberResourceMetadataChallenge(response2);
|
|
2657
2661
|
return response2;
|
|
2658
2662
|
}
|
|
2659
2663
|
if (!restoredDiscovery) {
|
|
@@ -2663,13 +2667,15 @@ var BrowserOAuthClientProvider = class {
|
|
|
2663
2667
|
"registration_endpoint",
|
|
2664
2668
|
"token_endpoint",
|
|
2665
2669
|
"revocation_endpoint",
|
|
2666
|
-
"introspection_endpoint"
|
|
2670
|
+
"introspection_endpoint",
|
|
2671
|
+
"userinfo_endpoint"
|
|
2667
2672
|
]) {
|
|
2668
2673
|
if (typeof metadata?.[key] === "string") {
|
|
2669
2674
|
discoveredEndpoints.add(metadata[key]);
|
|
2670
2675
|
}
|
|
2671
2676
|
}
|
|
2672
2677
|
}
|
|
2678
|
+
const isMetadata = looksLikeMetadata && !discoveredEndpoints.has(url);
|
|
2673
2679
|
const isProxiedEndpoint = discoveredEndpoints.has(url) || /\/(?:register|registration|token|revoke|revocation|introspect|introspection)\/?$/.test(
|
|
2674
2680
|
pathname
|
|
2675
2681
|
);
|
|
@@ -2703,7 +2709,8 @@ var BrowserOAuthClientProvider = class {
|
|
|
2703
2709
|
"registration_endpoint",
|
|
2704
2710
|
"token_endpoint",
|
|
2705
2711
|
"revocation_endpoint",
|
|
2706
|
-
"introspection_endpoint"
|
|
2712
|
+
"introspection_endpoint",
|
|
2713
|
+
"userinfo_endpoint"
|
|
2707
2714
|
]) {
|
|
2708
2715
|
if (typeof metadata[key] === "string") {
|
|
2709
2716
|
discoveredEndpoints.add(metadata[key]);
|
|
@@ -5230,6 +5237,7 @@ function useMcp(options) {
|
|
|
5230
5237
|
const oauthClientId = oauthOptions?.clientId?.trim() || void 0;
|
|
5231
5238
|
const oauthClientMetadataUrl = oauthOptions?.clientMetadataUrl?.trim() || void 0;
|
|
5232
5239
|
const oauthScope = oauthOptions?.scope?.trim() || void 0;
|
|
5240
|
+
const autoFetchUserInfo = oauthOptions?.fetchUserInfo === true;
|
|
5233
5241
|
const staticClientInfo = useMemo(
|
|
5234
5242
|
() => oauthClientId ? { client_id: oauthClientId } : void 0,
|
|
5235
5243
|
[oauthClientId]
|
|
@@ -5387,6 +5395,9 @@ function useMcp(options) {
|
|
|
5387
5395
|
const [authUrl, setAuthUrl] = useState(void 0);
|
|
5388
5396
|
const [authTokens, setAuthTokens] = useState(void 0);
|
|
5389
5397
|
const [authorization, setAuthorization] = useState(void 0);
|
|
5398
|
+
const [userInfo, setUserInfo] = useState({
|
|
5399
|
+
status: "idle"
|
|
5400
|
+
});
|
|
5390
5401
|
const clientRef = useRef(null);
|
|
5391
5402
|
const connectionRef = useRef(null);
|
|
5392
5403
|
const authProviderRef = useRef(
|
|
@@ -5397,6 +5408,10 @@ function useMcp(options) {
|
|
|
5397
5408
|
const isMountedRef = useRef(true);
|
|
5398
5409
|
const connectAttemptRef = useRef(0);
|
|
5399
5410
|
const connectEpochRef = useRef(0);
|
|
5411
|
+
const userInfoRequestRef = useRef(0);
|
|
5412
|
+
const userInfoTokenRef = useRef(void 0);
|
|
5413
|
+
const userInfoAutoRetryRef = useRef(false);
|
|
5414
|
+
const userInfoBaseFetchRef = useRef(customFetch);
|
|
5400
5415
|
const authTimeoutRef = useRef(null);
|
|
5401
5416
|
const retryScheduledRef = useRef(false);
|
|
5402
5417
|
const popupFlowActiveRef = useRef(false);
|
|
@@ -5408,6 +5423,9 @@ function useMcp(options) {
|
|
|
5408
5423
|
const successfulTransportRef = useRef(null);
|
|
5409
5424
|
const connectRef = useRef(null);
|
|
5410
5425
|
const failConnectionRef = useRef(null);
|
|
5426
|
+
useEffect(() => {
|
|
5427
|
+
userInfoBaseFetchRef.current = customFetch;
|
|
5428
|
+
}, [customFetch]);
|
|
5411
5429
|
const onSamplingRef = useRef(onSampling);
|
|
5412
5430
|
const onElicitationRef = useRef(onElicitation);
|
|
5413
5431
|
const hasSamplingCallbackRef = useRef(onSampling !== void 0);
|
|
@@ -5504,6 +5522,8 @@ function useMcp(options) {
|
|
|
5504
5522
|
const disconnect = useCallback2(
|
|
5505
5523
|
async (quiet = false) => {
|
|
5506
5524
|
if (!quiet) addLog("info", "Disconnecting...");
|
|
5525
|
+
userInfoRequestRef.current += 1;
|
|
5526
|
+
if (!quiet && isMountedRef.current) setUserInfo({ status: "idle" });
|
|
5507
5527
|
connectingRef.current = false;
|
|
5508
5528
|
if (authTimeoutRef.current) clearTimeout(authTimeoutRef.current);
|
|
5509
5529
|
authTimeoutRef.current = null;
|
|
@@ -5639,6 +5659,8 @@ function useMcp(options) {
|
|
|
5639
5659
|
}
|
|
5640
5660
|
connectingRef.current = true;
|
|
5641
5661
|
connectEpochRef.current += 1;
|
|
5662
|
+
userInfoRequestRef.current += 1;
|
|
5663
|
+
setUserInfo({ status: "idle" });
|
|
5642
5664
|
connectAttemptRef.current += 1;
|
|
5643
5665
|
if (authorizationServerUrlRef.current !== url) {
|
|
5644
5666
|
authorizationServerUrlRef.current = url;
|
|
@@ -6204,6 +6226,8 @@ function useMcp(options) {
|
|
|
6204
6226
|
retry();
|
|
6205
6227
|
} else if (currentState === "pending_auth" || currentState === "ready" && authorizationRef.current?.mode === "mixed" && !authorizationRef.current.authenticated) {
|
|
6206
6228
|
addLog("info", "Proceeding with authentication...");
|
|
6229
|
+
userInfoRequestRef.current += 1;
|
|
6230
|
+
setUserInfo({ status: "idle" });
|
|
6207
6231
|
try {
|
|
6208
6232
|
assert(
|
|
6209
6233
|
authProviderRef.current,
|
|
@@ -6379,6 +6403,78 @@ function useMcp(options) {
|
|
|
6379
6403
|
mergedClientInfo,
|
|
6380
6404
|
providedAuthProvider
|
|
6381
6405
|
]);
|
|
6406
|
+
const getUserInfo = useCallback2(async () => {
|
|
6407
|
+
const requestId = ++userInfoRequestRef.current;
|
|
6408
|
+
const epoch = connectEpochRef.current;
|
|
6409
|
+
const provider = authProviderRef.current;
|
|
6410
|
+
const finish = (result) => {
|
|
6411
|
+
if (!isMountedRef.current || userInfoRequestRef.current !== requestId || connectEpochRef.current !== epoch || authProviderRef.current !== provider) {
|
|
6412
|
+
return { status: "unavailable", reason: "session_changed" };
|
|
6413
|
+
}
|
|
6414
|
+
setUserInfo(result);
|
|
6415
|
+
return result;
|
|
6416
|
+
};
|
|
6417
|
+
if (!provider?.tokens) {
|
|
6418
|
+
return finish({ status: "unavailable", reason: "not_authenticated" });
|
|
6419
|
+
}
|
|
6420
|
+
setUserInfo({ status: "loading" });
|
|
6421
|
+
try {
|
|
6422
|
+
const tokens = await provider.tokens();
|
|
6423
|
+
if (!tokens?.access_token) {
|
|
6424
|
+
return finish({ status: "unavailable", reason: "not_authenticated" });
|
|
6425
|
+
}
|
|
6426
|
+
const metadata = (await provider.discoveryState?.())?.authorizationServerMetadata;
|
|
6427
|
+
const endpoint = metadata?.userinfo_endpoint;
|
|
6428
|
+
if (typeof endpoint !== "string" || !endpoint) {
|
|
6429
|
+
return finish({
|
|
6430
|
+
status: "unavailable",
|
|
6431
|
+
reason: "no_userinfo_endpoint"
|
|
6432
|
+
});
|
|
6433
|
+
}
|
|
6434
|
+
const userInfoUrl = new URL(endpoint);
|
|
6435
|
+
if (userInfoUrl.username || userInfoUrl.password || userInfoUrl.protocol !== "https:" && !(userInfoUrl.protocol === "http:" && ["localhost", "127.0.0.1", "[::1]"].includes(userInfoUrl.hostname))) {
|
|
6436
|
+
throw new Error("Unsafe UserInfo endpoint");
|
|
6437
|
+
}
|
|
6438
|
+
const baseFetch = userInfoBaseFetchRef.current;
|
|
6439
|
+
const scopedFetch = provider.getProxyFetch?.(baseFetch) ?? baseFetch ?? globalThis.fetch.bind(globalThis);
|
|
6440
|
+
const response = await scopedFetch(endpoint, {
|
|
6441
|
+
method: "GET",
|
|
6442
|
+
headers: {
|
|
6443
|
+
Accept: "application/json",
|
|
6444
|
+
Authorization: `${tokens.token_type || "Bearer"} ${tokens.access_token}`
|
|
6445
|
+
},
|
|
6446
|
+
credentials: "omit",
|
|
6447
|
+
cache: "no-store"
|
|
6448
|
+
});
|
|
6449
|
+
if (!response.ok) {
|
|
6450
|
+
throw new Error(`UserInfo request failed (${response.status})`);
|
|
6451
|
+
}
|
|
6452
|
+
const raw = await response.json();
|
|
6453
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
6454
|
+
throw new Error("Invalid UserInfo response");
|
|
6455
|
+
}
|
|
6456
|
+
const claims = { ...raw };
|
|
6457
|
+
if (typeof claims.sub !== "string" || !claims.sub) {
|
|
6458
|
+
throw new Error("UserInfo response has no subject");
|
|
6459
|
+
}
|
|
6460
|
+
for (const key of ["email", "name", "picture"]) {
|
|
6461
|
+
if (typeof claims[key] !== "string") delete claims[key];
|
|
6462
|
+
}
|
|
6463
|
+
if (typeof claims.email_verified !== "boolean") {
|
|
6464
|
+
delete claims.email_verified;
|
|
6465
|
+
}
|
|
6466
|
+
return finish({
|
|
6467
|
+
status: "available",
|
|
6468
|
+
...typeof metadata?.issuer === "string" ? { issuer: metadata.issuer } : {},
|
|
6469
|
+
claims
|
|
6470
|
+
});
|
|
6471
|
+
} catch (error2) {
|
|
6472
|
+
return finish({
|
|
6473
|
+
status: "error",
|
|
6474
|
+
error: error2 instanceof Error ? error2.message : String(error2)
|
|
6475
|
+
});
|
|
6476
|
+
}
|
|
6477
|
+
}, []);
|
|
6382
6478
|
const clearStorage = useCallback2(() => {
|
|
6383
6479
|
if (authProviderRef.current?.clearStorage) {
|
|
6384
6480
|
const count = authProviderRef.current.clearStorage();
|
|
@@ -6389,6 +6485,38 @@ function useMcp(options) {
|
|
|
6389
6485
|
addLog("warn", "Auth provider not initialized, cannot clear storage.");
|
|
6390
6486
|
}
|
|
6391
6487
|
}, [url, addLog, disconnect]);
|
|
6488
|
+
useEffect(() => {
|
|
6489
|
+
const token = authTokens?.access_token;
|
|
6490
|
+
const tokenChanged = userInfoTokenRef.current !== token;
|
|
6491
|
+
if (tokenChanged) {
|
|
6492
|
+
userInfoTokenRef.current = token;
|
|
6493
|
+
userInfoRequestRef.current += 1;
|
|
6494
|
+
userInfoAutoRetryRef.current = false;
|
|
6495
|
+
setUserInfo({ status: "idle" });
|
|
6496
|
+
}
|
|
6497
|
+
if (!autoFetchUserInfo || state !== "ready" || !token) return;
|
|
6498
|
+
if (tokenChanged || userInfo.status === "idle") {
|
|
6499
|
+
userInfoAutoRetryRef.current = false;
|
|
6500
|
+
void getUserInfo();
|
|
6501
|
+
} else if (userInfo.status === "error" && !userInfoAutoRetryRef.current) {
|
|
6502
|
+
userInfoAutoRetryRef.current = true;
|
|
6503
|
+
let fired = false;
|
|
6504
|
+
const timeout2 = setTimeout(() => {
|
|
6505
|
+
fired = true;
|
|
6506
|
+
void getUserInfo();
|
|
6507
|
+
}, 1e3);
|
|
6508
|
+
return () => {
|
|
6509
|
+
clearTimeout(timeout2);
|
|
6510
|
+
if (!fired) userInfoAutoRetryRef.current = false;
|
|
6511
|
+
};
|
|
6512
|
+
}
|
|
6513
|
+
}, [
|
|
6514
|
+
autoFetchUserInfo,
|
|
6515
|
+
state,
|
|
6516
|
+
authTokens?.access_token,
|
|
6517
|
+
userInfo.status,
|
|
6518
|
+
getUserInfo
|
|
6519
|
+
]);
|
|
6392
6520
|
useEffect(() => {
|
|
6393
6521
|
if (typeof window === "undefined") return;
|
|
6394
6522
|
const handleCallbackPayload = (payload, source) => {
|
|
@@ -6487,6 +6615,8 @@ function useMcp(options) {
|
|
|
6487
6615
|
useEffect(() => {
|
|
6488
6616
|
isMountedRef.current = true;
|
|
6489
6617
|
if (!enabled || !url) {
|
|
6618
|
+
userInfoRequestRef.current += 1;
|
|
6619
|
+
setUserInfo({ status: "idle" });
|
|
6490
6620
|
addLog(
|
|
6491
6621
|
"debug",
|
|
6492
6622
|
enabled ? "No server URL provided, skipping connection." : "Connection disabled via enabled flag."
|
|
@@ -6621,11 +6751,13 @@ function useMcp(options) {
|
|
|
6621
6751
|
authUrl,
|
|
6622
6752
|
authTokens,
|
|
6623
6753
|
authorization,
|
|
6754
|
+
userInfo,
|
|
6624
6755
|
client: clientRef.current,
|
|
6625
6756
|
...connectionOperations,
|
|
6626
6757
|
retry,
|
|
6627
6758
|
disconnect,
|
|
6628
6759
|
authenticate,
|
|
6760
|
+
getUserInfo,
|
|
6629
6761
|
clearStorage,
|
|
6630
6762
|
ensureIconLoaded
|
|
6631
6763
|
};
|
|
@@ -7030,7 +7162,7 @@ function isSameMcpServer(left, right) {
|
|
|
7030
7162
|
return left.id === right.id && sameSerializedValue(
|
|
7031
7163
|
pickLiveServerConfig(left),
|
|
7032
7164
|
pickLiveServerConfig(right)
|
|
7033
|
-
) && left.name === right.name && left.state === right.state && left.error === right.error && left.authUrl === right.authUrl && sameSerializedValue(left.authTokens, right.authTokens) && sameSerializedValue(left.authorization, right.authorization) && left.protocolEra === right.protocolEra && left.protocolVersion === right.protocolVersion && sameSerializedValue(left.serverInfo, right.serverInfo) && sameSerializedValue(left.capabilities, right.capabilities) && left.instructions === right.instructions && sameSerializedValue(left.extensions, right.extensions) && sameSerializedValue(left.tools, right.tools) && sameSerializedValue(left.resources, right.resources) && sameSerializedValue(left.resourceTemplates, right.resourceTemplates) && sameSerializedValue(left.prompts, right.prompts) && sameSerializedValue(left.skills, right.skills) && sameSerializedValue(left.notifications, right.notifications) && left.unreadNotificationCount === right.unreadNotificationCount && sameSerializedValue(
|
|
7165
|
+
) && left.name === right.name && left.state === right.state && left.error === right.error && left.authUrl === right.authUrl && sameSerializedValue(left.authTokens, right.authTokens) && sameSerializedValue(left.authorization, right.authorization) && sameSerializedValue(left.userInfo, right.userInfo) && left.protocolEra === right.protocolEra && left.protocolVersion === right.protocolVersion && sameSerializedValue(left.serverInfo, right.serverInfo) && sameSerializedValue(left.capabilities, right.capabilities) && left.instructions === right.instructions && sameSerializedValue(left.extensions, right.extensions) && sameSerializedValue(left.tools, right.tools) && sameSerializedValue(left.resources, right.resources) && sameSerializedValue(left.resourceTemplates, right.resourceTemplates) && sameSerializedValue(left.prompts, right.prompts) && sameSerializedValue(left.skills, right.skills) && sameSerializedValue(left.notifications, right.notifications) && left.unreadNotificationCount === right.unreadNotificationCount && sameSerializedValue(
|
|
7034
7166
|
left.pendingSamplingRequests,
|
|
7035
7167
|
right.pendingSamplingRequests
|
|
7036
7168
|
) && sameSerializedValue(
|
|
@@ -7214,6 +7346,7 @@ function McpServerWrapper({
|
|
|
7214
7346
|
mcp.extensions,
|
|
7215
7347
|
mcp.authTokens,
|
|
7216
7348
|
mcp.authorization,
|
|
7349
|
+
mcp.userInfo,
|
|
7217
7350
|
// Functions excluded - they're stable via useCallback in useMcp
|
|
7218
7351
|
// mcp.log excluded - log changes shouldn't trigger provider updates
|
|
7219
7352
|
// mcp.client excluded - client reference stability handled by manual check
|
|
@@ -8172,7 +8305,11 @@ function resolveViewResource(options) {
|
|
|
8172
8305
|
if (typeof firstContent.text === "string") {
|
|
8173
8306
|
htmlContent = firstContent.text;
|
|
8174
8307
|
} else if (typeof firstContent.blob === "string") {
|
|
8175
|
-
|
|
8308
|
+
const bytes = Uint8Array.from(
|
|
8309
|
+
atob(firstContent.blob),
|
|
8310
|
+
(char) => char.charCodeAt(0)
|
|
8311
|
+
);
|
|
8312
|
+
htmlContent = new TextDecoder().decode(bytes);
|
|
8176
8313
|
}
|
|
8177
8314
|
}
|
|
8178
8315
|
if (!htmlContent) {
|