UNPKG

seyfert

Version:

The most advanced framework for discord bots

66 lines (65 loc) 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseSocket = void 0; const node_crypto_1 = require("node:crypto"); const custom_1 = require("./socket/custom"); class BaseSocket { internal; ping; constructor(kind, url) { this.internal = kind === 'ws' ? new custom_1.SeyfertWebSocket(url) : new WebSocket(url); if (kind === 'ws') { const ws = this.internal; this.ping = ws.waitPing.bind(ws); ws.onpong = data => { const promise = ws.__promises.get(data); if (promise) { ws.__promises.delete(data); promise?.resolve(); } }; } else { const ws = this.internal; this.ping = () => { return new Promise(res => { const nonce = (0, node_crypto_1.randomUUID)(); const start = performance.now(); const listener = (data) => { if (data.toString() !== nonce) return; //@ts-expect-error ws.removeListener('pong', listener); res(performance.now() - start); }; //@ts-expect-error ws.on('pong', listener); //@ts-expect-error ws.ping(nonce); }); }; } } set onopen(callback) { this.internal.onopen = callback; } set onmessage(callback) { this.internal.onmessage = callback; } set onclose(callback) { this.internal.onclose = callback; } set onerror(callback) { this.internal.onerror = callback; } send(data) { return this.internal.send(data); } close(...args) { return this.internal.close(...args); } get readyState() { return this.internal.readyState; } } exports.BaseSocket = BaseSocket;