Added proxy fetch for use by auth (to avoid CORS and other issues when using browser fetch)

This commit is contained in:
Bob Dickinson 2026-01-30 16:18:47 -08:00
commit 3b2dec0063

View file

@ -1,3 +1,4 @@
import React from "react";
import {
render,
screen,
@ -8,8 +9,8 @@ import {
import "@testing-library/jest-dom";
import { describe, it, beforeEach, jest } from "@jest/globals";
import AuthDebugger, { AuthDebuggerProps } from "../AuthDebugger";
import { TooltipProvider } from "@/components/ui/tooltip";
import { SESSION_KEYS } from "@/lib/constants";
import { TooltipProvider } from "../ui/tooltip";
import { SESSION_KEYS, DEFAULT_INSPECTOR_CONFIG } from "../../lib/constants";
const mockOAuthTokens = {
access_token: "test_access_token",
@ -55,10 +56,10 @@ import {
discoverOAuthProtectedResourceMetadata,
} from "@modelcontextprotocol/sdk/client/auth.js";
import { OAuthMetadata } from "@modelcontextprotocol/sdk/shared/auth.js";
import { EMPTY_DEBUGGER_STATE } from "@/lib/auth-types";
import { EMPTY_DEBUGGER_STATE } from "../../lib/auth-types";
// Mock local auth module
jest.mock("@/lib/auth", () => ({
jest.mock("../../lib/auth", () => ({
DebugInspectorOAuthClientProvider: jest.fn().mockImplementation(() => ({
tokens: jest.fn().mockImplementation(() => Promise.resolve(undefined)),
clear: jest.fn().mockImplementation(() => {
@ -106,7 +107,7 @@ jest.mock("@/lib/auth", () => ({
discoverScopes: jest.fn().mockResolvedValue("read write" as never),
}));
import { discoverScopes } from "@/lib/auth";
import { discoverScopes } from "../../lib/auth";
// Type the mocked functions properly
const mockDiscoverAuthorizationServerMetadata =
@ -269,6 +270,7 @@ describe("AuthDebugger", () => {
// Should first discover and save OAuth metadata
expect(mockDiscoverAuthorizationServerMetadata).toHaveBeenCalledWith(
new URL("https://example.com/"),
{ fetchFn: undefined },
);
// Check that updateAuthState was called with the right info message
@ -404,6 +406,65 @@ describe("AuthDebugger", () => {
});
});
describe("Proxy Fetch integration", () => {
it("passes fetchFn to SDK when connectionType is proxy", async () => {
const configWithProxy = {
...DEFAULT_INSPECTOR_CONFIG,
MCP_PROXY_FULL_ADDRESS: {
...DEFAULT_INSPECTOR_CONFIG.MCP_PROXY_FULL_ADDRESS,
value: "http://localhost:6277",
},
MCP_PROXY_AUTH_TOKEN: {
...DEFAULT_INSPECTOR_CONFIG.MCP_PROXY_AUTH_TOKEN,
value: "test-proxy-token",
},
};
await act(async () => {
renderAuthDebugger({
config: configWithProxy,
connectionType: "proxy",
authState: {
...defaultAuthState,
isInitiatingAuth: false,
oauthStep: "metadata_discovery",
},
});
});
await act(async () => {
fireEvent.click(screen.getByText("Continue"));
});
expect(mockDiscoverAuthorizationServerMetadata).toHaveBeenCalledWith(
new URL("https://example.com/"),
{ fetchFn: expect.any(Function) },
);
});
it("passes undefined fetchFn when connectionType is direct", async () => {
await act(async () => {
renderAuthDebugger({
connectionType: "direct",
authState: {
...defaultAuthState,
isInitiatingAuth: false,
oauthStep: "metadata_discovery",
},
});
});
await act(async () => {
fireEvent.click(screen.getByText("Continue"));
});
expect(mockDiscoverAuthorizationServerMetadata).toHaveBeenCalledWith(
new URL("https://example.com/"),
{ fetchFn: undefined },
);
});
});
describe("OAuth Flow Steps", () => {
it("should handle OAuth flow step progression", async () => {
const updateAuthState = jest.fn();
@ -428,6 +489,7 @@ describe("AuthDebugger", () => {
expect(mockDiscoverAuthorizationServerMetadata).toHaveBeenCalledWith(
new URL("https://example.com/"),
{ fetchFn: undefined },
);
});
@ -725,6 +787,8 @@ describe("AuthDebugger", () => {
await waitFor(() => {
expect(mockDiscoverOAuthProtectedResourceMetadata).toHaveBeenCalledWith(
"https://example.com/mcp",
{},
undefined,
);
});
@ -773,6 +837,8 @@ describe("AuthDebugger", () => {
await waitFor(() => {
expect(mockDiscoverOAuthProtectedResourceMetadata).toHaveBeenCalledWith(
"https://example.com/mcp",
{},
undefined,
);
});
@ -791,6 +857,7 @@ describe("AuthDebugger", () => {
// Verify that regular OAuth metadata discovery was still called
expect(mockDiscoverAuthorizationServerMetadata).toHaveBeenCalledWith(
new URL("https://example.com/"),
{ fetchFn: undefined },
);
});
});