UNPKG

it-ws

Version:

Simple async iterables for websocket client connections

48 lines 1.55 kB
import sink from './sink.js'; import source from './source.js'; export default (socket, options) => { options = options ?? {}; const connectedSource = source(socket); let remoteAddress = options.remoteAddress; let remotePort = options.remotePort; if (socket.url != null) { // only client->server sockets have urls, server->client connections do not try { const url = new URL(socket.url); remoteAddress = url.hostname; remotePort = parseInt(url.port, 10); } catch { } } if (remoteAddress == null || remotePort == null) { throw new Error('Remote connection did not have address and/or port'); } const duplex = { sink: sink(socket, options), source: connectedSource, connected: async () => { await connectedSource.connected(); }, close: async () => { if (socket.readyState === socket.CONNECTING || socket.readyState === socket.OPEN) { await new Promise((resolve) => { socket.addEventListener('close', () => { resolve(); }); socket.close(); }); } }, destroy: () => { if (socket.terminate != null) { socket.terminate(); } else { socket.close(); } }, remoteAddress, remotePort, socket }; return duplex; }; //# sourceMappingURL=duplex.js.map