Add SseError class for easier introspection

This commit is contained in:
Justin Spahr-Summers 2025-01-24 11:26:12 +00:00
commit 63f8f07a22
No known key found for this signature in database

View file

@ -1,7 +1,17 @@
import { EventSource, type EventSourceInit } from "eventsource";
import { EventSource, type ErrorEvent, type EventSourceInit } from "eventsource";
import { Transport } from "../shared/transport.js";
import { JSONRPCMessage, JSONRPCMessageSchema } from "../types.js";
export class SseError extends Error {
constructor(
public readonly code: number | undefined,
message: string | undefined,
public readonly event: ErrorEvent,
) {
super(`SSE error: ${message}`);
}
}
/**
* Client transport for SSE: this will connect to a server using Server-Sent Events for receiving
* messages and make separate POST requests for sending messages.
@ -42,10 +52,7 @@ export class SSEClientTransport implements Transport {
this._abortController = new AbortController();
this._eventSource.onerror = (event) => {
const message = `SSE error: ${event.message}`;
const error = new Error(message);
Object.assign(error, { code: event.code });
const error = new SseError(event.code, event.message, event);
reject(error);
this.onerror?.(error);
};