seyfert
Version:
The most advanced framework for discord bots
66 lines (65 loc) • 2.06 kB
JavaScript
"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;