Report errors when start() is called multiple times

This commit is contained in:
Justin Spahr-Summers 2024-10-16 13:14:47 +01:00
commit 7b718de77c
No known key found for this signature in database
5 changed files with 29 additions and 1 deletions

View file

@ -22,6 +22,12 @@ export class SSEClientTransport implements Transport {
}
start(): Promise<void> {
if (this._eventSource) {
throw new Error(
"SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.",
);
}
return new Promise((resolve, reject) => {
this._eventSource = new EventSource(this._url.href);
this._abortController = new AbortController();

View file

@ -45,6 +45,12 @@ export class StdioClientTransport implements Transport {
* Starts the server process and prepares to communicate with it.
*/
async start(): Promise<void> {
if (this._process) {
throw new Error(
"StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.",
);
}
return new Promise((resolve, reject) => {
this._process = spawn(
this._serverParams.command,

View file

@ -19,6 +19,12 @@ export class WebSocketClientTransport implements Transport {
}
start(): Promise<void> {
if (this._socket) {
throw new Error(
"WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.",
);
}
return new Promise((resolve, reject) => {
this._socket = new WebSocket(this._url, SUBPROTOCOL);

View file

@ -37,7 +37,9 @@ export class SSEServerTransport implements Transport {
*/
async start(): Promise<void> {
if (this._sseResponse) {
throw new Error("Already connected!");
throw new Error(
"SSEServerTransport already started! If using Server class, note that connect() calls start() automatically.",
);
}
this.res.writeHead(200, {

View file

@ -11,6 +11,7 @@ import { Transport } from "../shared/transport.js";
*/
export class StdioServerTransport implements Transport {
private _readBuffer: ReadBuffer = new ReadBuffer();
private _started = false;
constructor(
private _stdin: Readable = process.stdin,
@ -34,6 +35,13 @@ export class StdioServerTransport implements Transport {
* Starts listening for messages on stdin.
*/
async start(): Promise<void> {
if (this._started) {
throw new Error(
"StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.",
);
}
this._started = true;
this._stdin.on("data", this._ondata);
this._stdin.on("error", this._onerror);
}