import type { RemoteTransport } from './transport' export interface TransportPair { readonly server: RemoteTransport readonly client: RemoteTransport } export const inMemoryTransportPair = (): TransportPair => { const serverHandlers = new Set<(message: Client) => void>() const clientHandlers = new Set<(message: Server) => void>() return { server: { send: (message) => clientHandlers.forEach((handler) => handler(message)), onMessage: (handler) => { serverHandlers.add(handler) return () => void serverHandlers.delete(handler) }, }, client: { send: (message) => serverHandlers.forEach((handler) => handler(message)), onMessage: (handler) => { clientHandlers.add(handler) return () => void clientHandlers.delete(handler) }, }, } }