import {encode} from '@/packets/index.js'; let connected = false; let socket; function onMessage(event) { postMessage(event.data); } onmessage = async (event) => { if (!connected) { const url = new URL(`wss://${event.data.host}/ws`) if ('production' === process.env.NODE_ENV) { url.protocol = 'ws:'; } socket = new WebSocket(url.href); socket.binaryType = 'arraybuffer'; const {promise, resolve, reject} = Promise.withResolvers(); socket.addEventListener('open', resolve); socket.addEventListener('error', reject); await promise; socket.removeEventListener('open', resolve); socket.removeEventListener('error', reject); socket.addEventListener('message', onMessage); socket.addEventListener('close', () => { postMessage(encode({type: 'ConnectionAborted'})); close(); }); socket.addEventListener('error', () => { postMessage(encode({type: 'ConnectionAborted'})); close(); }); connected = true; return; } socket.send(event.data); };