import type { ClientMessage, ServerMessage } from "./interfaces/generic/index" type Callbacks = { resolve: (value: ServerMessage) => void; reject: (reason?: any) => void; } export class Query { static readonly callbacks = new Map() readonly uuid: string readonly message: Omit private readonly socket: WebSocket constructor(socket: WebSocket, message: Omit) { this.uuid = crypto.randomUUID() this.message = message this.socket = socket } private serialize() { return JSON.stringify({ uuid: this.uuid, ...this.message }) } send() { return new Promise((resolve, reject) => { const callbacks = { resolve, reject } this.socket.send(this.serialize()) Query.callbacks.set(this.uuid, callbacks) }) } }