UNPKG

@fnlb-project/fnbr

Version:

A library to interact with Epic Games' Fortnite HTTP and XMPP services

74 lines 2.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class WebSocket { constructor(url, options) { var _a; this.listeners = new Map(); const isNode = typeof process !== 'undefined' && ((_a = process.release) === null || _a === void 0 ? void 0 : _a.name) === 'node'; const isBun = typeof Bun !== 'undefined'; if (isNode || isBun) { this.socket = new globalThis.WebSocket(url, options); } else { this.socket = new globalThis.WebSocket(url); } this.socket.onopen = (ev) => this.emit('open', ev); this.socket.onmessage = (ev) => this.emit('message', ev.data); this.socket.onerror = (ev) => { if (!ev.message) ev.message = 'WebSocket connection failed'; this.emit('error', ev); }; this.socket.onclose = (ev) => this.emit('close', ev.code, ev.reason); } get readyState() { return this.socket.readyState; } send(data) { this.socket.send(data); } close(code, reason) { this.socket.close(code, reason); } on(event, listener) { if (!this.listeners.has(event)) this.listeners.set(event, new Set()); this.listeners.get(event).add(listener); return this; } once(event, listener) { const wrapper = (...args) => { this.off(event, wrapper); listener(...args); }; return this.on(event, wrapper); } off(event, listener) { const eventListeners = this.listeners.get(event); if (eventListeners) { eventListeners.delete(listener); } return this; } removeAllListeners(event) { if (event) { this.listeners.delete(event); } else { this.listeners.clear(); } return this; } emit(event, ...args) { const eventListeners = this.listeners.get(event); if (eventListeners) { eventListeners.forEach((listener) => listener(...args)); } } } WebSocket.OPEN = 1; WebSocket.CONNECTING = 0; WebSocket.CLOSING = 2; WebSocket.CLOSED = 3; exports.default = WebSocket; //# sourceMappingURL=WebSocket.js.map