| import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js' |
| import type { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js' |
|
|
| |
| |
| |
| |
| |
| |
| |
| class InProcessTransport implements Transport { |
| private peer: InProcessTransport | undefined |
| private closed = false |
|
|
| onclose?: () => void |
| onerror?: (error: Error) => void |
| onmessage?: (message: JSONRPCMessage) => void |
|
|
| |
| _setPeer(peer: InProcessTransport): void { |
| this.peer = peer |
| } |
|
|
| async start(): Promise<void> {} |
|
|
| async send(message: JSONRPCMessage): Promise<void> { |
| if (this.closed) { |
| throw new Error('Transport is closed') |
| } |
| |
| |
| queueMicrotask(() => { |
| this.peer?.onmessage?.(message) |
| }) |
| } |
|
|
| async close(): Promise<void> { |
| if (this.closed) { |
| return |
| } |
| this.closed = true |
| this.onclose?.() |
| |
| if (this.peer && !this.peer.closed) { |
| this.peer.closed = true |
| this.peer.onclose?.() |
| } |
| } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| export function createLinkedTransportPair(): [Transport, Transport] { |
| const a = new InProcessTransport() |
| const b = new InProcessTransport() |
| a._setPeer(b) |
| b._setPeer(a) |
| return [a, b] |
| } |
|
|