Improve auth docs and add finishAuth convenience method

This commit is contained in:
Justin Spahr-Summers 2025-02-17 10:45:34 +00:00
commit b1f4b65709
No known key found for this signature in database

View file

@ -2,7 +2,7 @@ import { createServer, type IncomingMessage, type Server } from "http";
import { AddressInfo } from "net";
import { JSONRPCMessage } from "../types.js";
import { SSEClientTransport } from "./sse.js";
import { OAuthClientProvider, OAuthTokens } from "./auth.js";
import { OAuthClientProvider, OAuthTokens, UnauthorizedError } from "./auth.js";
describe("SSEClientTransport", () => {
let server: Server;
@ -376,7 +376,7 @@ describe("SSEClientTransport", () => {
authProvider: mockAuthProvider,
});
await expect(() => transport.start()).rejects.toThrow("Unauthorized");
await expect(() => transport.start()).rejects.toThrow(UnauthorizedError);
expect(mockAuthProvider.redirectToAuthorization.mock.calls).toHaveLength(1);
});
@ -431,7 +431,7 @@ describe("SSEClientTransport", () => {
params: {},
};
await expect(() => transport.send(message)).rejects.toThrow("Unauthorized");
await expect(() => transport.send(message)).rejects.toThrow(UnauthorizedError);
expect(mockAuthProvider.redirectToAuthorization.mock.calls).toHaveLength(1);
});
@ -485,17 +485,17 @@ describe("SSEClientTransport", () => {
let connectionAttempts = 0;
server = createServer((req, res) => {
lastServerRequest = req;
if (req.url === "/token" && req.method === "POST") {
// Handle token refresh request
let body = "";
req.on("data", chunk => { body += chunk; });
req.on("end", () => {
const params = new URLSearchParams(body);
if (params.get("grant_type") === "refresh_token" &&
params.get("refresh_token") === "refresh-token" &&
params.get("client_id") === "test-client-id" &&
params.get("client_secret") === "test-client-secret") {
if (params.get("grant_type") === "refresh_token" &&
params.get("refresh_token") === "refresh-token" &&
params.get("client_id") === "test-client-id" &&
params.get("client_secret") === "test-client-secret") {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({
access_token: "new-token",
@ -583,10 +583,10 @@ describe("SSEClientTransport", () => {
req.on("data", chunk => { body += chunk; });
req.on("end", () => {
const params = new URLSearchParams(body);
if (params.get("grant_type") === "refresh_token" &&
params.get("refresh_token") === "refresh-token" &&
params.get("client_id") === "test-client-id" &&
params.get("client_secret") === "test-client-secret") {
if (params.get("grant_type") === "refresh_token" &&
params.get("refresh_token") === "refresh-token" &&
params.get("client_id") === "test-client-id" &&
params.get("client_secret") === "test-client-secret") {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({
access_token: "new-token",
@ -715,7 +715,7 @@ describe("SSEClientTransport", () => {
authProvider: mockAuthProvider,
});
await expect(transport.start()).rejects.toThrow("Unauthorized");
await expect(() => transport.start()).rejects.toThrow(UnauthorizedError);
expect(mockAuthProvider.redirectToAuthorization).toHaveBeenCalled();
});
});