Update OAuth callback code
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import { useEffect, useRef } from "react";
|
import { useEffect, useRef } from "react";
|
||||||
import { handleOAuthCallback } from "../lib/auth";
|
import { authProvider } from "../lib/auth";
|
||||||
import { SESSION_KEYS } from "../lib/constants";
|
import { SESSION_KEYS } from "../lib/constants";
|
||||||
|
import { auth } from "@modelcontextprotocol/sdk/client/auth.js";
|
||||||
|
|
||||||
const OAuthCallback = () => {
|
const OAuthCallback = () => {
|
||||||
const hasProcessedRef = useRef(false);
|
const hasProcessedRef = useRef(false);
|
||||||
@@ -24,15 +25,11 @@ const OAuthCallback = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const tokens = await handleOAuthCallback(serverUrl, code);
|
const result = await auth(authProvider, { serverUrl, authorizationCode: code });
|
||||||
// Store both access and refresh tokens
|
if (result !== "AUTHORIZED") {
|
||||||
sessionStorage.setItem(SESSION_KEYS.ACCESS_TOKEN, tokens.access_token);
|
throw new Error(`Expected to be authorized after providing auth code, got: ${result}`);
|
||||||
if (tokens.refresh_token) {
|
|
||||||
sessionStorage.setItem(
|
|
||||||
SESSION_KEYS.REFRESH_TOKEN,
|
|
||||||
tokens.refresh_token,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Redirect back to the main app with server URL to trigger auto-connect
|
// Redirect back to the main app with server URL to trigger auto-connect
|
||||||
window.location.href = `/?serverUrl=${encodeURIComponent(serverUrl)}`;
|
window.location.href = `/?serverUrl=${encodeURIComponent(serverUrl)}`;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { OAuthClientInformation, OAuthClientInformationSchema, OAuthClientProvider, OAuthTokens, OAuthTokensSchema } from "@modelcontextprotocol/sdk/client/auth.js";
|
import { OAuthClientInformation, OAuthClientInformationSchema, OAuthClientProvider, OAuthTokens, OAuthTokensSchema } from "@modelcontextprotocol/sdk/client/auth.js";
|
||||||
import { SESSION_KEYS } from "./constants";
|
import { SESSION_KEYS } from "./constants";
|
||||||
|
|
||||||
export class InspectorOAuthClientProvider implements OAuthClientProvider {
|
class InspectorOAuthClientProvider implements OAuthClientProvider {
|
||||||
get redirectUrl() {
|
get redirectUrl() {
|
||||||
return window.location.origin + "/oauth/callback";
|
return window.location.origin + "/oauth/callback";
|
||||||
}
|
}
|
||||||
@@ -69,3 +69,5 @@ export class InspectorOAuthClientProvider implements OAuthClientProvider {
|
|||||||
return verifier;
|
return verifier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const authProvider = new InspectorOAuthClientProvider();
|
||||||
@@ -19,7 +19,7 @@ import { z } from "zod";
|
|||||||
import { SESSION_KEYS } from "../constants";
|
import { SESSION_KEYS } from "../constants";
|
||||||
import { Notification, StdErrNotificationSchema } from "../notificationTypes";
|
import { Notification, StdErrNotificationSchema } from "../notificationTypes";
|
||||||
import { auth } from "@modelcontextprotocol/sdk/client/auth.js";
|
import { auth } from "@modelcontextprotocol/sdk/client/auth.js";
|
||||||
import { InspectorOAuthClientProvider } from "../auth";
|
import { authProvider } from "../auth";
|
||||||
|
|
||||||
const DEFAULT_REQUEST_TIMEOUT_MSEC = 10000;
|
const DEFAULT_REQUEST_TIMEOUT_MSEC = 10000;
|
||||||
|
|
||||||
@@ -122,12 +122,11 @@ export function useConnection({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const authProvider = new InspectorOAuthClientProvider();
|
|
||||||
const handleAuthError = async (error: unknown) => {
|
const handleAuthError = async (error: unknown) => {
|
||||||
if (error instanceof SseError && error.code === 401) {
|
if (error instanceof SseError && error.code === 401) {
|
||||||
sessionStorage.setItem(SESSION_KEYS.SERVER_URL, sseUrl);
|
sessionStorage.setItem(SESSION_KEYS.SERVER_URL, sseUrl);
|
||||||
|
|
||||||
const result = await auth(authProvider, { serverUrl: sseUrl })
|
const result = await auth(authProvider, { serverUrl: sseUrl });
|
||||||
return result === "AUTHORIZED";
|
return result === "AUTHORIZED";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user