{"version":3,"file":"subfork.mjs","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","../node_modules/engine.io-parser/build/esm/index.js","../node_modules/@socket.io/component-emitter/lib/esm/index.js","../node_modules/engine.io-client/build/esm/globals.js","../node_modules/engine.io-client/build/esm/util.js","../node_modules/engine.io-client/build/esm/contrib/parseqs.js","../node_modules/engine.io-client/build/esm/transport.js","../node_modules/engine.io-client/build/esm/transports/polling.js","../node_modules/engine.io-client/build/esm/contrib/has-cors.js","../node_modules/engine.io-client/build/esm/transports/polling-xhr.js","../node_modules/engine.io-client/build/esm/transports/websocket.js","../node_modules/engine.io-client/build/esm/transports/webtransport.js","../node_modules/engine.io-client/build/esm/transports/index.js","../node_modules/engine.io-client/build/esm/contrib/parseuri.js","../node_modules/engine.io-client/build/esm/socket.js","../node_modules/socket.io-client/build/esm/url.js","../node_modules/socket.io-parser/build/esm/is-binary.js","../node_modules/socket.io-parser/build/esm/binary.js","../node_modules/socket.io-parser/build/esm/index.js","../node_modules/socket.io-client/build/esm/on.js","../node_modules/socket.io-client/build/esm/socket.js","../node_modules/socket.io-client/build/esm/contrib/backo2.js","../node_modules/socket.io-client/build/esm/manager.js","../node_modules/socket.io-client/build/esm/index.js","../src/subfork.js"],"sourcesContent":["const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach((key) => {\n    PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n    (typeof Blob !== \"undefined\" &&\n        Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = (obj) => {\n    return typeof ArrayBuffer.isView === \"function\"\n        ? ArrayBuffer.isView(obj)\n        : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n    if (withNativeBlob && data instanceof Blob) {\n        if (supportsBinary) {\n            return callback(data);\n        }\n        else {\n            return encodeBlobAsBase64(data, callback);\n        }\n    }\n    else if (withNativeArrayBuffer &&\n        (data instanceof ArrayBuffer || isView(data))) {\n        if (supportsBinary) {\n            return callback(data);\n        }\n        else {\n            return encodeBlobAsBase64(new Blob([data]), callback);\n        }\n    }\n    // plain string\n    return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n    const fileReader = new FileReader();\n    fileReader.onload = function () {\n        const content = fileReader.result.split(\",\")[1];\n        callback(\"b\" + (content || \"\"));\n    };\n    return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n    if (data instanceof Uint8Array) {\n        return data;\n    }\n    else if (data instanceof ArrayBuffer) {\n        return new Uint8Array(data);\n    }\n    else {\n        return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n    }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n    if (withNativeBlob && packet.data instanceof Blob) {\n        return packet.data.arrayBuffer().then(toArray).then(callback);\n    }\n    else if (withNativeArrayBuffer &&\n        (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n        return callback(toArray(packet.data));\n    }\n    encodePacket(packet, false, (encoded) => {\n        if (!TEXT_ENCODER) {\n            TEXT_ENCODER = new TextEncoder();\n        }\n        callback(TEXT_ENCODER.encode(encoded));\n    });\n}\nexport { encodePacket };\n","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n    lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n    let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n    for (i = 0; i < len; i += 3) {\n        base64 += chars[bytes[i] >> 2];\n        base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n        base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n        base64 += chars[bytes[i + 2] & 63];\n    }\n    if (len % 3 === 2) {\n        base64 = base64.substring(0, base64.length - 1) + '=';\n    }\n    else if (len % 3 === 1) {\n        base64 = base64.substring(0, base64.length - 2) + '==';\n    }\n    return base64;\n};\nexport const decode = (base64) => {\n    let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n    if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n    const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n    for (i = 0; i < len; i += 4) {\n        encoded1 = lookup[base64.charCodeAt(i)];\n        encoded2 = lookup[base64.charCodeAt(i + 1)];\n        encoded3 = lookup[base64.charCodeAt(i + 2)];\n        encoded4 = lookup[base64.charCodeAt(i + 3)];\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n    return arraybuffer;\n};\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE, } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n    if (typeof encodedPacket !== \"string\") {\n        return {\n            type: \"message\",\n            data: mapBinary(encodedPacket, binaryType),\n        };\n    }\n    const type = encodedPacket.charAt(0);\n    if (type === \"b\") {\n        return {\n            type: \"message\",\n            data: decodeBase64Packet(encodedPacket.substring(1), binaryType),\n        };\n    }\n    const packetType = PACKET_TYPES_REVERSE[type];\n    if (!packetType) {\n        return ERROR_PACKET;\n    }\n    return encodedPacket.length > 1\n        ? {\n            type: PACKET_TYPES_REVERSE[type],\n            data: encodedPacket.substring(1),\n        }\n        : {\n            type: PACKET_TYPES_REVERSE[type],\n        };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n    if (withNativeArrayBuffer) {\n        const decoded = decode(data);\n        return mapBinary(decoded, binaryType);\n    }\n    else {\n        return { base64: true, data }; // fallback for old browsers\n    }\n};\nconst mapBinary = (data, binaryType) => {\n    switch (binaryType) {\n        case \"blob\":\n            if (data instanceof Blob) {\n                // from WebSocket + binaryType \"blob\"\n                return data;\n            }\n            else {\n                // from HTTP long-polling or WebTransport\n                return new Blob([data]);\n            }\n        case \"arraybuffer\":\n        default:\n            if (data instanceof ArrayBuffer) {\n                // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n                return data;\n            }\n            else {\n                // from WebTransport (Uint8Array)\n                return data.buffer;\n            }\n    }\n};\n","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET, } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n    // some packets may be added to the array while encoding, so the initial length must be saved\n    const length = packets.length;\n    const encodedPackets = new Array(length);\n    let count = 0;\n    packets.forEach((packet, i) => {\n        // force base64 encoding for binary packets\n        encodePacket(packet, false, (encodedPacket) => {\n            encodedPackets[i] = encodedPacket;\n            if (++count === length) {\n                callback(encodedPackets.join(SEPARATOR));\n            }\n        });\n    });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n    const encodedPackets = encodedPayload.split(SEPARATOR);\n    const packets = [];\n    for (let i = 0; i < encodedPackets.length; i++) {\n        const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n        packets.push(decodedPacket);\n        if (decodedPacket.type === \"error\") {\n            break;\n        }\n    }\n    return packets;\n};\nexport function createPacketEncoderStream() {\n    return new TransformStream({\n        transform(packet, controller) {\n            encodePacketToBinary(packet, (encodedPacket) => {\n                const payloadLength = encodedPacket.length;\n                let header;\n                // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n                if (payloadLength < 126) {\n                    header = new Uint8Array(1);\n                    new DataView(header.buffer).setUint8(0, payloadLength);\n                }\n                else if (payloadLength < 65536) {\n                    header = new Uint8Array(3);\n                    const view = new DataView(header.buffer);\n                    view.setUint8(0, 126);\n                    view.setUint16(1, payloadLength);\n                }\n                else {\n                    header = new Uint8Array(9);\n                    const view = new DataView(header.buffer);\n                    view.setUint8(0, 127);\n                    view.setBigUint64(1, BigInt(payloadLength));\n                }\n                // first bit indicates whether the payload is plain text (0) or binary (1)\n                if (packet.data && typeof packet.data !== \"string\") {\n                    header[0] |= 0x80;\n                }\n                controller.enqueue(header);\n                controller.enqueue(encodedPacket);\n            });\n        },\n    });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n    return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n    if (chunks[0].length === size) {\n        return chunks.shift();\n    }\n    const buffer = new Uint8Array(size);\n    let j = 0;\n    for (let i = 0; i < size; i++) {\n        buffer[i] = chunks[0][j++];\n        if (j === chunks[0].length) {\n            chunks.shift();\n            j = 0;\n        }\n    }\n    if (chunks.length && j < chunks[0].length) {\n        chunks[0] = chunks[0].slice(j);\n    }\n    return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n    if (!TEXT_DECODER) {\n        TEXT_DECODER = new TextDecoder();\n    }\n    const chunks = [];\n    let state = 0 /* State.READ_HEADER */;\n    let expectedLength = -1;\n    let isBinary = false;\n    return new TransformStream({\n        transform(chunk, controller) {\n            chunks.push(chunk);\n            while (true) {\n                if (state === 0 /* State.READ_HEADER */) {\n                    if (totalLength(chunks) < 1) {\n                        break;\n                    }\n                    const header = concatChunks(chunks, 1);\n                    isBinary = (header[0] & 0x80) === 0x80;\n                    expectedLength = header[0] & 0x7f;\n                    if (expectedLength < 126) {\n                        state = 3 /* State.READ_PAYLOAD */;\n                    }\n                    else if (expectedLength === 126) {\n                        state = 1 /* State.READ_EXTENDED_LENGTH_16 */;\n                    }\n                    else {\n                        state = 2 /* State.READ_EXTENDED_LENGTH_64 */;\n                    }\n                }\n                else if (state === 1 /* State.READ_EXTENDED_LENGTH_16 */) {\n                    if (totalLength(chunks) < 2) {\n                        break;\n                    }\n                    const headerArray = concatChunks(chunks, 2);\n                    expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n                    state = 3 /* State.READ_PAYLOAD */;\n                }\n                else if (state === 2 /* State.READ_EXTENDED_LENGTH_64 */) {\n                    if (totalLength(chunks) < 8) {\n                        break;\n                    }\n                    const headerArray = concatChunks(chunks, 8);\n                    const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n                    const n = view.getUint32(0);\n                    if (n > Math.pow(2, 53 - 32) - 1) {\n                        // the maximum safe integer in JavaScript is 2^53 - 1\n                        controller.enqueue(ERROR_PACKET);\n                        break;\n                    }\n                    expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n                    state = 3 /* State.READ_PAYLOAD */;\n                }\n                else {\n                    if (totalLength(chunks) < expectedLength) {\n                        break;\n                    }\n                    const data = concatChunks(chunks, expectedLength);\n                    controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n                    state = 0 /* State.READ_HEADER */;\n                }\n                if (expectedLength === 0 || expectedLength > maxPayload) {\n                    controller.enqueue(ERROR_PACKET);\n                    break;\n                }\n            }\n        },\n    });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload, };\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n  if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n  for (var key in Emitter.prototype) {\n    obj[key] = Emitter.prototype[key];\n  }\n  return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n  (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n    .push(fn);\n  return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n  function on() {\n    this.off(event, on);\n    fn.apply(this, arguments);\n  }\n\n  on.fn = fn;\n  this.on(event, on);\n  return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n\n  // all\n  if (0 == arguments.length) {\n    this._callbacks = {};\n    return this;\n  }\n\n  // specific event\n  var callbacks = this._callbacks['$' + event];\n  if (!callbacks) return this;\n\n  // remove all handlers\n  if (1 == arguments.length) {\n    delete this._callbacks['$' + event];\n    return this;\n  }\n\n  // remove specific handler\n  var cb;\n  for (var i = 0; i < callbacks.length; i++) {\n    cb = callbacks[i];\n    if (cb === fn || cb.fn === fn) {\n      callbacks.splice(i, 1);\n      break;\n    }\n  }\n\n  // Remove event specific arrays for event types that no\n  // one is subscribed for to avoid memory leak.\n  if (callbacks.length === 0) {\n    delete this._callbacks['$' + event];\n  }\n\n  return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n  this._callbacks = this._callbacks || {};\n\n  var args = new Array(arguments.length - 1)\n    , callbacks = this._callbacks['$' + event];\n\n  for (var i = 1; i < arguments.length; i++) {\n    args[i - 1] = arguments[i];\n  }\n\n  if (callbacks) {\n    callbacks = callbacks.slice(0);\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\n      callbacks[i].apply(this, args);\n    }\n  }\n\n  return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n  this._callbacks = this._callbacks || {};\n  return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n  return !! this.listeners(event).length;\n};\n","export const nextTick = (() => {\n    const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n    if (isPromiseAvailable) {\n        return (cb) => Promise.resolve().then(cb);\n    }\n    else {\n        return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n    }\n})();\nexport const globalThisShim = (() => {\n    if (typeof self !== \"undefined\") {\n        return self;\n    }\n    else if (typeof window !== \"undefined\") {\n        return window;\n    }\n    else {\n        return Function(\"return this\")();\n    }\n})();\nexport const defaultBinaryType = \"arraybuffer\";\nexport function createCookieJar() { }\n","import { globalThisShim as globalThis } from \"./globals.node.js\";\nexport function pick(obj, ...attr) {\n    return attr.reduce((acc, k) => {\n        if (obj.hasOwnProperty(k)) {\n            acc[k] = obj[k];\n        }\n        return acc;\n    }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n    if (opts.useNativeTimers) {\n        obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n        obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n    }\n    else {\n        obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n        obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n    }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n    if (typeof obj === \"string\") {\n        return utf8Length(obj);\n    }\n    // arraybuffer or blob\n    return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n    let c = 0, length = 0;\n    for (let i = 0, l = str.length; i < l; i++) {\n        c = str.charCodeAt(i);\n        if (c < 0x80) {\n            length += 1;\n        }\n        else if (c < 0x800) {\n            length += 2;\n        }\n        else if (c < 0xd800 || c >= 0xe000) {\n            length += 3;\n        }\n        else {\n            i++;\n            length += 4;\n        }\n    }\n    return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nexport function randomString() {\n    return (Date.now().toString(36).substring(3) +\n        Math.random().toString(36).substring(2, 5));\n}\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n    let str = '';\n    for (let i in obj) {\n        if (obj.hasOwnProperty(i)) {\n            if (str.length)\n                str += '&';\n            str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n        }\n    }\n    return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n    let qry = {};\n    let pairs = qs.split('&');\n    for (let i = 0, l = pairs.length; i < l; i++) {\n        let pair = pairs[i].split('=');\n        qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n    }\n    return qry;\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nexport class TransportError extends Error {\n    constructor(reason, description, context) {\n        super(reason);\n        this.description = description;\n        this.context = context;\n        this.type = \"TransportError\";\n    }\n}\nexport class Transport extends Emitter {\n    /**\n     * Transport abstract constructor.\n     *\n     * @param {Object} opts - options\n     * @protected\n     */\n    constructor(opts) {\n        super();\n        this.writable = false;\n        installTimerFunctions(this, opts);\n        this.opts = opts;\n        this.query = opts.query;\n        this.socket = opts.socket;\n        this.supportsBinary = !opts.forceBase64;\n    }\n    /**\n     * Emits an error.\n     *\n     * @param {String} reason\n     * @param description\n     * @param context - the error context\n     * @return {Transport} for chaining\n     * @protected\n     */\n    onError(reason, description, context) {\n        super.emitReserved(\"error\", new TransportError(reason, description, context));\n        return this;\n    }\n    /**\n     * Opens the transport.\n     */\n    open() {\n        this.readyState = \"opening\";\n        this.doOpen();\n        return this;\n    }\n    /**\n     * Closes the transport.\n     */\n    close() {\n        if (this.readyState === \"opening\" || this.readyState === \"open\") {\n            this.doClose();\n            this.onClose();\n        }\n        return this;\n    }\n    /**\n     * Sends multiple packets.\n     *\n     * @param {Array} packets\n     */\n    send(packets) {\n        if (this.readyState === \"open\") {\n            this.write(packets);\n        }\n        else {\n            // this might happen if the transport was silently closed in the beforeunload event handler\n        }\n    }\n    /**\n     * Called upon open\n     *\n     * @protected\n     */\n    onOpen() {\n        this.readyState = \"open\";\n        this.writable = true;\n        super.emitReserved(\"open\");\n    }\n    /**\n     * Called with data.\n     *\n     * @param {String} data\n     * @protected\n     */\n    onData(data) {\n        const packet = decodePacket(data, this.socket.binaryType);\n        this.onPacket(packet);\n    }\n    /**\n     * Called with a decoded packet.\n     *\n     * @protected\n     */\n    onPacket(packet) {\n        super.emitReserved(\"packet\", packet);\n    }\n    /**\n     * Called upon close.\n     *\n     * @protected\n     */\n    onClose(details) {\n        this.readyState = \"closed\";\n        super.emitReserved(\"close\", details);\n    }\n    /**\n     * Pauses the transport, in order not to lose packets during an upgrade.\n     *\n     * @param onPause\n     */\n    pause(onPause) { }\n    createUri(schema, query = {}) {\n        return (schema +\n            \"://\" +\n            this._hostname() +\n            this._port() +\n            this.opts.path +\n            this._query(query));\n    }\n    _hostname() {\n        const hostname = this.opts.hostname;\n        return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n    }\n    _port() {\n        if (this.opts.port &&\n            ((this.opts.secure && Number(this.opts.port !== 443)) ||\n                (!this.opts.secure && Number(this.opts.port) !== 80))) {\n            return \":\" + this.opts.port;\n        }\n        else {\n            return \"\";\n        }\n    }\n    _query(query) {\n        const encodedQuery = encode(query);\n        return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n    }\n}\n","import { Transport } from \"../transport.js\";\nimport { randomString } from \"../util.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nexport class Polling extends Transport {\n    constructor() {\n        super(...arguments);\n        this._polling = false;\n    }\n    get name() {\n        return \"polling\";\n    }\n    /**\n     * Opens the socket (triggers polling). We write a PING message to determine\n     * when the transport is open.\n     *\n     * @protected\n     */\n    doOpen() {\n        this._poll();\n    }\n    /**\n     * Pauses polling.\n     *\n     * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n     * @package\n     */\n    pause(onPause) {\n        this.readyState = \"pausing\";\n        const pause = () => {\n            this.readyState = \"paused\";\n            onPause();\n        };\n        if (this._polling || !this.writable) {\n            let total = 0;\n            if (this._polling) {\n                total++;\n                this.once(\"pollComplete\", function () {\n                    --total || pause();\n                });\n            }\n            if (!this.writable) {\n                total++;\n                this.once(\"drain\", function () {\n                    --total || pause();\n                });\n            }\n        }\n        else {\n            pause();\n        }\n    }\n    /**\n     * Starts polling cycle.\n     *\n     * @private\n     */\n    _poll() {\n        this._polling = true;\n        this.doPoll();\n        this.emitReserved(\"poll\");\n    }\n    /**\n     * Overloads onData to detect payloads.\n     *\n     * @protected\n     */\n    onData(data) {\n        const callback = (packet) => {\n            // if its the first message we consider the transport open\n            if (\"opening\" === this.readyState && packet.type === \"open\") {\n                this.onOpen();\n            }\n            // if its a close packet, we close the ongoing requests\n            if (\"close\" === packet.type) {\n                this.onClose({ description: \"transport closed by the server\" });\n                return false;\n            }\n            // otherwise bypass onData and handle the message\n            this.onPacket(packet);\n        };\n        // decode payload\n        decodePayload(data, this.socket.binaryType).forEach(callback);\n        // if an event did not trigger closing\n        if (\"closed\" !== this.readyState) {\n            // if we got data we're not polling\n            this._polling = false;\n            this.emitReserved(\"pollComplete\");\n            if (\"open\" === this.readyState) {\n                this._poll();\n            }\n            else {\n            }\n        }\n    }\n    /**\n     * For polling, send a close packet.\n     *\n     * @protected\n     */\n    doClose() {\n        const close = () => {\n            this.write([{ type: \"close\" }]);\n        };\n        if (\"open\" === this.readyState) {\n            close();\n        }\n        else {\n            // in case we're trying to close while\n            // handshaking is in progress (GH-164)\n            this.once(\"open\", close);\n        }\n    }\n    /**\n     * Writes a packets payload.\n     *\n     * @param {Array} packets - data packets\n     * @protected\n     */\n    write(packets) {\n        this.writable = false;\n        encodePayload(packets, (data) => {\n            this.doWrite(data, () => {\n                this.writable = true;\n                this.emitReserved(\"drain\");\n            });\n        });\n    }\n    /**\n     * Generates uri for connection.\n     *\n     * @private\n     */\n    uri() {\n        const schema = this.opts.secure ? \"https\" : \"http\";\n        const query = this.query || {};\n        // cache busting is forced\n        if (false !== this.opts.timestampRequests) {\n            query[this.opts.timestampParam] = randomString();\n        }\n        if (!this.supportsBinary && !query.sid) {\n            query.b64 = 1;\n        }\n        return this.createUri(schema, query);\n    }\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n    value = typeof XMLHttpRequest !== 'undefined' &&\n        'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n    // if XMLHttp support is disabled in IE then it will throw\n    // when trying to create\n}\nexport const hasCORS = value;\n","import { Polling } from \"./polling.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globals.node.js\";\nimport { hasCORS } from \"../contrib/has-cors.js\";\nfunction empty() { }\nexport class BaseXHR extends Polling {\n    /**\n     * XHR Polling constructor.\n     *\n     * @param {Object} opts\n     * @package\n     */\n    constructor(opts) {\n        super(opts);\n        if (typeof location !== \"undefined\") {\n            const isSSL = \"https:\" === location.protocol;\n            let port = location.port;\n            // some user agents have empty `location.port`\n            if (!port) {\n                port = isSSL ? \"443\" : \"80\";\n            }\n            this.xd =\n                (typeof location !== \"undefined\" &&\n                    opts.hostname !== location.hostname) ||\n                    port !== opts.port;\n        }\n    }\n    /**\n     * Sends data.\n     *\n     * @param {String} data to send.\n     * @param {Function} called upon flush.\n     * @private\n     */\n    doWrite(data, fn) {\n        const req = this.request({\n            method: \"POST\",\n            data: data,\n        });\n        req.on(\"success\", fn);\n        req.on(\"error\", (xhrStatus, context) => {\n            this.onError(\"xhr post error\", xhrStatus, context);\n        });\n    }\n    /**\n     * Starts a poll cycle.\n     *\n     * @private\n     */\n    doPoll() {\n        const req = this.request();\n        req.on(\"data\", this.onData.bind(this));\n        req.on(\"error\", (xhrStatus, context) => {\n            this.onError(\"xhr poll error\", xhrStatus, context);\n        });\n        this.pollXhr = req;\n    }\n}\nexport class Request extends Emitter {\n    /**\n     * Request constructor\n     *\n     * @param {Object} options\n     * @package\n     */\n    constructor(createRequest, uri, opts) {\n        super();\n        this.createRequest = createRequest;\n        installTimerFunctions(this, opts);\n        this._opts = opts;\n        this._method = opts.method || \"GET\";\n        this._uri = uri;\n        this._data = undefined !== opts.data ? opts.data : null;\n        this._create();\n    }\n    /**\n     * Creates the XHR object and sends the request.\n     *\n     * @private\n     */\n    _create() {\n        var _a;\n        const opts = pick(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n        opts.xdomain = !!this._opts.xd;\n        const xhr = (this._xhr = this.createRequest(opts));\n        try {\n            xhr.open(this._method, this._uri, true);\n            try {\n                if (this._opts.extraHeaders) {\n                    // @ts-ignore\n                    xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n                    for (let i in this._opts.extraHeaders) {\n                        if (this._opts.extraHeaders.hasOwnProperty(i)) {\n                            xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n                        }\n                    }\n                }\n            }\n            catch (e) { }\n            if (\"POST\" === this._method) {\n                try {\n                    xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n                }\n                catch (e) { }\n            }\n            try {\n                xhr.setRequestHeader(\"Accept\", \"*/*\");\n            }\n            catch (e) { }\n            (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n            // ie6 check\n            if (\"withCredentials\" in xhr) {\n                xhr.withCredentials = this._opts.withCredentials;\n            }\n            if (this._opts.requestTimeout) {\n                xhr.timeout = this._opts.requestTimeout;\n            }\n            xhr.onreadystatechange = () => {\n                var _a;\n                if (xhr.readyState === 3) {\n                    (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n                    // @ts-ignore\n                    xhr.getResponseHeader(\"set-cookie\"));\n                }\n                if (4 !== xhr.readyState)\n                    return;\n                if (200 === xhr.status || 1223 === xhr.status) {\n                    this._onLoad();\n                }\n                else {\n                    // make sure the `error` event handler that's user-set\n                    // does not throw in the same tick and gets caught here\n                    this.setTimeoutFn(() => {\n                        this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n                    }, 0);\n                }\n            };\n            xhr.send(this._data);\n        }\n        catch (e) {\n            // Need to defer since .create() is called directly from the constructor\n            // and thus the 'error' event can only be only bound *after* this exception\n            // occurs.  Therefore, also, we cannot throw here at all.\n            this.setTimeoutFn(() => {\n                this._onError(e);\n            }, 0);\n            return;\n        }\n        if (typeof document !== \"undefined\") {\n            this._index = Request.requestsCount++;\n            Request.requests[this._index] = this;\n        }\n    }\n    /**\n     * Called upon error.\n     *\n     * @private\n     */\n    _onError(err) {\n        this.emitReserved(\"error\", err, this._xhr);\n        this._cleanup(true);\n    }\n    /**\n     * Cleans up house.\n     *\n     * @private\n     */\n    _cleanup(fromError) {\n        if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n            return;\n        }\n        this._xhr.onreadystatechange = empty;\n        if (fromError) {\n            try {\n                this._xhr.abort();\n            }\n            catch (e) { }\n        }\n        if (typeof document !== \"undefined\") {\n            delete Request.requests[this._index];\n        }\n        this._xhr = null;\n    }\n    /**\n     * Called upon load.\n     *\n     * @private\n     */\n    _onLoad() {\n        const data = this._xhr.responseText;\n        if (data !== null) {\n            this.emitReserved(\"data\", data);\n            this.emitReserved(\"success\");\n            this._cleanup();\n        }\n    }\n    /**\n     * Aborts the request.\n     *\n     * @package\n     */\n    abort() {\n        this._cleanup();\n    }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n    // @ts-ignore\n    if (typeof attachEvent === \"function\") {\n        // @ts-ignore\n        attachEvent(\"onunload\", unloadHandler);\n    }\n    else if (typeof addEventListener === \"function\") {\n        const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n        addEventListener(terminationEvent, unloadHandler, false);\n    }\n}\nfunction unloadHandler() {\n    for (let i in Request.requests) {\n        if (Request.requests.hasOwnProperty(i)) {\n            Request.requests[i].abort();\n        }\n    }\n}\nconst hasXHR2 = (function () {\n    const xhr = newRequest({\n        xdomain: false,\n    });\n    return xhr && xhr.responseType !== null;\n})();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nexport class XHR extends BaseXHR {\n    constructor(opts) {\n        super(opts);\n        const forceBase64 = opts && opts.forceBase64;\n        this.supportsBinary = hasXHR2 && !forceBase64;\n    }\n    request(opts = {}) {\n        Object.assign(opts, { xd: this.xd }, this.opts);\n        return new Request(newRequest, this.uri(), opts);\n    }\n}\nfunction newRequest(opts) {\n    const xdomain = opts.xdomain;\n    // XMLHttpRequest can be disabled on IE\n    try {\n        if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n            return new XMLHttpRequest();\n        }\n    }\n    catch (e) { }\n    if (!xdomain) {\n        try {\n            return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n        }\n        catch (e) { }\n    }\n}\n","import { Transport } from \"../transport.js\";\nimport { pick, randomString } from \"../util.js\";\nimport { encodePacket } from \"engine.io-parser\";\nimport { globalThisShim as globalThis, nextTick } from \"../globals.node.js\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n    typeof navigator.product === \"string\" &&\n    navigator.product.toLowerCase() === \"reactnative\";\nexport class BaseWS extends Transport {\n    get name() {\n        return \"websocket\";\n    }\n    doOpen() {\n        const uri = this.uri();\n        const protocols = this.opts.protocols;\n        // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n        const opts = isReactNative\n            ? {}\n            : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n        if (this.opts.extraHeaders) {\n            opts.headers = this.opts.extraHeaders;\n        }\n        try {\n            this.ws = this.createSocket(uri, protocols, opts);\n        }\n        catch (err) {\n            return this.emitReserved(\"error\", err);\n        }\n        this.ws.binaryType = this.socket.binaryType;\n        this.addEventListeners();\n    }\n    /**\n     * Adds event listeners to the socket\n     *\n     * @private\n     */\n    addEventListeners() {\n        this.ws.onopen = () => {\n            if (this.opts.autoUnref) {\n                this.ws._socket.unref();\n            }\n            this.onOpen();\n        };\n        this.ws.onclose = (closeEvent) => this.onClose({\n            description: \"websocket connection closed\",\n            context: closeEvent,\n        });\n        this.ws.onmessage = (ev) => this.onData(ev.data);\n        this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n    }\n    write(packets) {\n        this.writable = false;\n        // encodePacket efficient as it uses WS framing\n        // no need for encodePayload\n        for (let i = 0; i < packets.length; i++) {\n            const packet = packets[i];\n            const lastPacket = i === packets.length - 1;\n            encodePacket(packet, this.supportsBinary, (data) => {\n                // Sometimes the websocket has already been closed but the browser didn't\n                // have a chance of informing us about it yet, in that case send will\n                // throw an error\n                try {\n                    this.doWrite(packet, data);\n                }\n                catch (e) {\n                }\n                if (lastPacket) {\n                    // fake drain\n                    // defer to next tick to allow Socket to clear writeBuffer\n                    nextTick(() => {\n                        this.writable = true;\n                        this.emitReserved(\"drain\");\n                    }, this.setTimeoutFn);\n                }\n            });\n        }\n    }\n    doClose() {\n        if (typeof this.ws !== \"undefined\") {\n            this.ws.onerror = () => { };\n            this.ws.close();\n            this.ws = null;\n        }\n    }\n    /**\n     * Generates uri for connection.\n     *\n     * @private\n     */\n    uri() {\n        const schema = this.opts.secure ? \"wss\" : \"ws\";\n        const query = this.query || {};\n        // append timestamp to URI\n        if (this.opts.timestampRequests) {\n            query[this.opts.timestampParam] = randomString();\n        }\n        // communicate binary support capabilities\n        if (!this.supportsBinary) {\n            query.b64 = 1;\n        }\n        return this.createUri(schema, query);\n    }\n}\nconst WebSocketCtor = globalThis.WebSocket || globalThis.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nexport class WS extends BaseWS {\n    createSocket(uri, protocols, opts) {\n        return !isReactNative\n            ? protocols\n                ? new WebSocketCtor(uri, protocols)\n                : new WebSocketCtor(uri)\n            : new WebSocketCtor(uri, protocols, opts);\n    }\n    doWrite(_packet, data) {\n        this.ws.send(data);\n    }\n}\n","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"../globals.node.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream, } from \"engine.io-parser\";\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nexport class WT extends Transport {\n    get name() {\n        return \"webtransport\";\n    }\n    doOpen() {\n        try {\n            // @ts-ignore\n            this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n        }\n        catch (err) {\n            return this.emitReserved(\"error\", err);\n        }\n        this._transport.closed\n            .then(() => {\n            this.onClose();\n        })\n            .catch((err) => {\n            this.onError(\"webtransport error\", err);\n        });\n        // note: we could have used async/await, but that would require some additional polyfills\n        this._transport.ready.then(() => {\n            this._transport.createBidirectionalStream().then((stream) => {\n                const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n                const reader = stream.readable.pipeThrough(decoderStream).getReader();\n                const encoderStream = createPacketEncoderStream();\n                encoderStream.readable.pipeTo(stream.writable);\n                this._writer = encoderStream.writable.getWriter();\n                const read = () => {\n                    reader\n                        .read()\n                        .then(({ done, value }) => {\n                        if (done) {\n                            return;\n                        }\n                        this.onPacket(value);\n                        read();\n                    })\n                        .catch((err) => {\n                    });\n                };\n                read();\n                const packet = { type: \"open\" };\n                if (this.query.sid) {\n                    packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n                }\n                this._writer.write(packet).then(() => this.onOpen());\n            });\n        });\n    }\n    write(packets) {\n        this.writable = false;\n        for (let i = 0; i < packets.length; i++) {\n            const packet = packets[i];\n            const lastPacket = i === packets.length - 1;\n            this._writer.write(packet).then(() => {\n                if (lastPacket) {\n                    nextTick(() => {\n                        this.writable = true;\n                        this.emitReserved(\"drain\");\n                    }, this.setTimeoutFn);\n                }\n            });\n        }\n    }\n    doClose() {\n        var _a;\n        (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n    }\n}\n","import { XHR } from \"./polling-xhr.node.js\";\nimport { WS } from \"./websocket.node.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n    websocket: WS,\n    webtransport: WT,\n    polling: XHR,\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n    'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n    if (str.length > 8000) {\n        throw \"URI too long\";\n    }\n    const src = str, b = str.indexOf('['), e = str.indexOf(']');\n    if (b != -1 && e != -1) {\n        str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n    }\n    let m = re.exec(str || ''), uri = {}, i = 14;\n    while (i--) {\n        uri[parts[i]] = m[i] || '';\n    }\n    if (b != -1 && e != -1) {\n        uri.source = src;\n        uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n        uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n        uri.ipv6uri = true;\n    }\n    uri.pathNames = pathNames(uri, uri['path']);\n    uri.queryKey = queryKey(uri, uri['query']);\n    return uri;\n}\nfunction pathNames(obj, path) {\n    const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n    if (path.slice(0, 1) == '/' || path.length === 0) {\n        names.splice(0, 1);\n    }\n    if (path.slice(-1) == '/') {\n        names.splice(names.length - 1, 1);\n    }\n    return names;\n}\nfunction queryKey(uri, query) {\n    const data = {};\n    query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n        if ($1) {\n            data[$1] = $2;\n        }\n    });\n    return data;\n}\n","import { transports as DEFAULT_TRANSPORTS } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { createCookieJar, defaultBinaryType, nextTick, } from \"./globals.node.js\";\nconst withEventListeners = typeof addEventListener === \"function\" &&\n    typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n    // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n    // script, so we create one single event listener here which will forward the event to the socket instances\n    addEventListener(\"offline\", () => {\n        OFFLINE_EVENT_LISTENERS.forEach((listener) => listener());\n    }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n *   transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n *   socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nexport class SocketWithoutUpgrade extends Emitter {\n    /**\n     * Socket constructor.\n     *\n     * @param {String|Object} uri - uri or options\n     * @param {Object} opts - options\n     */\n    constructor(uri, opts) {\n        super();\n        this.binaryType = defaultBinaryType;\n        this.writeBuffer = [];\n        this._prevBufferLen = 0;\n        this._pingInterval = -1;\n        this._pingTimeout = -1;\n        this._maxPayload = -1;\n        /**\n         * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n         * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n         */\n        this._pingTimeoutTime = Infinity;\n        if (uri && \"object\" === typeof uri) {\n            opts = uri;\n            uri = null;\n        }\n        if (uri) {\n            const parsedUri = parse(uri);\n            opts.hostname = parsedUri.host;\n            opts.secure =\n                parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n            opts.port = parsedUri.port;\n            if (parsedUri.query)\n                opts.query = parsedUri.query;\n        }\n        else if (opts.host) {\n            opts.hostname = parse(opts.host).host;\n        }\n        installTimerFunctions(this, opts);\n        this.secure =\n            null != opts.secure\n                ? opts.secure\n                : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n        if (opts.hostname && !opts.port) {\n            // if no port is specified manually, use the protocol default\n            opts.port = this.secure ? \"443\" : \"80\";\n        }\n        this.hostname =\n            opts.hostname ||\n                (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n        this.port =\n            opts.port ||\n                (typeof location !== \"undefined\" && location.port\n                    ? location.port\n                    : this.secure\n                        ? \"443\"\n                        : \"80\");\n        this.transports = [];\n        this._transportsByName = {};\n        opts.transports.forEach((t) => {\n            const transportName = t.prototype.name;\n            this.transports.push(transportName);\n            this._transportsByName[transportName] = t;\n        });\n        this.opts = Object.assign({\n            path: \"/engine.io\",\n            agent: false,\n            withCredentials: false,\n            upgrade: true,\n            timestampParam: \"t\",\n            rememberUpgrade: false,\n            addTrailingSlash: true,\n            rejectUnauthorized: true,\n            perMessageDeflate: {\n                threshold: 1024,\n            },\n            transportOptions: {},\n            closeOnBeforeunload: false,\n        }, opts);\n        this.opts.path =\n            this.opts.path.replace(/\\/$/, \"\") +\n                (this.opts.addTrailingSlash ? \"/\" : \"\");\n        if (typeof this.opts.query === \"string\") {\n            this.opts.query = decode(this.opts.query);\n        }\n        if (withEventListeners) {\n            if (this.opts.closeOnBeforeunload) {\n                // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n                // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n                // closed/reloaded)\n                this._beforeunloadEventListener = () => {\n                    if (this.transport) {\n                        // silently close the transport\n                        this.transport.removeAllListeners();\n                        this.transport.close();\n                    }\n                };\n                addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n            }\n            if (this.hostname !== \"localhost\") {\n                this._offlineEventListener = () => {\n                    this._onClose(\"transport close\", {\n                        description: \"network connection lost\",\n                    });\n                };\n                OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n            }\n        }\n        if (this.opts.withCredentials) {\n            this._cookieJar = createCookieJar();\n        }\n        this._open();\n    }\n    /**\n     * Creates transport of the given type.\n     *\n     * @param {String} name - transport name\n     * @return {Transport}\n     * @private\n     */\n    createTransport(name) {\n        const query = Object.assign({}, this.opts.query);\n        // append engine.io protocol identifier\n        query.EIO = protocol;\n        // transport name\n        query.transport = name;\n        // session id if we already have one\n        if (this.id)\n            query.sid = this.id;\n        const opts = Object.assign({}, this.opts, {\n            query,\n            socket: this,\n            hostname: this.hostname,\n            secure: this.secure,\n            port: this.port,\n        }, this.opts.transportOptions[name]);\n        return new this._transportsByName[name](opts);\n    }\n    /**\n     * Initializes transport to use and starts probe.\n     *\n     * @private\n     */\n    _open() {\n        if (this.transports.length === 0) {\n            // Emit error on next tick so it can be listened to\n            this.setTimeoutFn(() => {\n                this.emitReserved(\"error\", \"No transports available\");\n            }, 0);\n            return;\n        }\n        const transportName = this.opts.rememberUpgrade &&\n            SocketWithoutUpgrade.priorWebsocketSuccess &&\n            this.transports.indexOf(\"websocket\") !== -1\n            ? \"websocket\"\n            : this.transports[0];\n        this.readyState = \"opening\";\n        const transport = this.createTransport(transportName);\n        transport.open();\n        this.setTransport(transport);\n    }\n    /**\n     * Sets the current transport. Disables the existing one (if any).\n     *\n     * @private\n     */\n    setTransport(transport) {\n        if (this.transport) {\n            this.transport.removeAllListeners();\n        }\n        // set up transport\n        this.transport = transport;\n        // set up transport listeners\n        transport\n            .on(\"drain\", this._onDrain.bind(this))\n            .on(\"packet\", this._onPacket.bind(this))\n            .on(\"error\", this._onError.bind(this))\n            .on(\"close\", (reason) => this._onClose(\"transport close\", reason));\n    }\n    /**\n     * Called when connection is deemed open.\n     *\n     * @private\n     */\n    onOpen() {\n        this.readyState = \"open\";\n        SocketWithoutUpgrade.priorWebsocketSuccess =\n            \"websocket\" === this.transport.name;\n        this.emitReserved(\"open\");\n        this.flush();\n    }\n    /**\n     * Handles a packet.\n     *\n     * @private\n     */\n    _onPacket(packet) {\n        if (\"opening\" === this.readyState ||\n            \"open\" === this.readyState ||\n            \"closing\" === this.readyState) {\n            this.emitReserved(\"packet\", packet);\n            // Socket is live - any packet counts\n            this.emitReserved(\"heartbeat\");\n            switch (packet.type) {\n                case \"open\":\n                    this.onHandshake(JSON.parse(packet.data));\n                    break;\n                case \"ping\":\n                    this._sendPacket(\"pong\");\n                    this.emitReserved(\"ping\");\n                    this.emitReserved(\"pong\");\n                    this._resetPingTimeout();\n                    break;\n                case \"error\":\n                    const err = new Error(\"server error\");\n                    // @ts-ignore\n                    err.code = packet.data;\n                    this._onError(err);\n                    break;\n                case \"message\":\n                    this.emitReserved(\"data\", packet.data);\n                    this.emitReserved(\"message\", packet.data);\n                    break;\n            }\n        }\n        else {\n        }\n    }\n    /**\n     * Called upon handshake completion.\n     *\n     * @param {Object} data - handshake obj\n     * @private\n     */\n    onHandshake(data) {\n        this.emitReserved(\"handshake\", data);\n        this.id = data.sid;\n        this.transport.query.sid = data.sid;\n        this._pingInterval = data.pingInterval;\n        this._pingTimeout = data.pingTimeout;\n        this._maxPayload = data.maxPayload;\n        this.onOpen();\n        // In case open handler closes socket\n        if (\"closed\" === this.readyState)\n            return;\n        this._resetPingTimeout();\n    }\n    /**\n     * Sets and resets ping timeout timer based on server pings.\n     *\n     * @private\n     */\n    _resetPingTimeout() {\n        this.clearTimeoutFn(this._pingTimeoutTimer);\n        const delay = this._pingInterval + this._pingTimeout;\n        this._pingTimeoutTime = Date.now() + delay;\n        this._pingTimeoutTimer = this.setTimeoutFn(() => {\n            this._onClose(\"ping timeout\");\n        }, delay);\n        if (this.opts.autoUnref) {\n            this._pingTimeoutTimer.unref();\n        }\n    }\n    /**\n     * Called on `drain` event\n     *\n     * @private\n     */\n    _onDrain() {\n        this.writeBuffer.splice(0, this._prevBufferLen);\n        // setting prevBufferLen = 0 is very important\n        // for example, when upgrading, upgrade packet is sent over,\n        // and a nonzero prevBufferLen could cause problems on `drain`\n        this._prevBufferLen = 0;\n        if (0 === this.writeBuffer.length) {\n            this.emitReserved(\"drain\");\n        }\n        else {\n            this.flush();\n        }\n    }\n    /**\n     * Flush write buffers.\n     *\n     * @private\n     */\n    flush() {\n        if (\"closed\" !== this.readyState &&\n            this.transport.writable &&\n            !this.upgrading &&\n            this.writeBuffer.length) {\n            const packets = this._getWritablePackets();\n            this.transport.send(packets);\n            // keep track of current length of writeBuffer\n            // splice writeBuffer and callbackBuffer on `drain`\n            this._prevBufferLen = packets.length;\n            this.emitReserved(\"flush\");\n        }\n    }\n    /**\n     * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n     * long-polling)\n     *\n     * @private\n     */\n    _getWritablePackets() {\n        const shouldCheckPayloadSize = this._maxPayload &&\n            this.transport.name === \"polling\" &&\n            this.writeBuffer.length > 1;\n        if (!shouldCheckPayloadSize) {\n            return this.writeBuffer;\n        }\n        let payloadSize = 1; // first packet type\n        for (let i = 0; i < this.writeBuffer.length; i++) {\n            const data = this.writeBuffer[i].data;\n            if (data) {\n                payloadSize += byteLength(data);\n            }\n            if (i > 0 && payloadSize > this._maxPayload) {\n                return this.writeBuffer.slice(0, i);\n            }\n            payloadSize += 2; // separator + packet type\n        }\n        return this.writeBuffer;\n    }\n    /**\n     * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n     *\n     * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n     * `write()` method then the message would not be buffered by the Socket.IO client.\n     *\n     * @return {boolean}\n     * @private\n     */\n    /* private */ _hasPingExpired() {\n        if (!this._pingTimeoutTime)\n            return true;\n        const hasExpired = Date.now() > this._pingTimeoutTime;\n        if (hasExpired) {\n            this._pingTimeoutTime = 0;\n            nextTick(() => {\n                this._onClose(\"ping timeout\");\n            }, this.setTimeoutFn);\n        }\n        return hasExpired;\n    }\n    /**\n     * Sends a message.\n     *\n     * @param {String} msg - message.\n     * @param {Object} options.\n     * @param {Function} fn - callback function.\n     * @return {Socket} for chaining.\n     */\n    write(msg, options, fn) {\n        this._sendPacket(\"message\", msg, options, fn);\n        return this;\n    }\n    /**\n     * Sends a message. Alias of {@link Socket#write}.\n     *\n     * @param {String} msg - message.\n     * @param {Object} options.\n     * @param {Function} fn - callback function.\n     * @return {Socket} for chaining.\n     */\n    send(msg, options, fn) {\n        this._sendPacket(\"message\", msg, options, fn);\n        return this;\n    }\n    /**\n     * Sends a packet.\n     *\n     * @param {String} type: packet type.\n     * @param {String} data.\n     * @param {Object} options.\n     * @param {Function} fn - callback function.\n     * @private\n     */\n    _sendPacket(type, data, options, fn) {\n        if (\"function\" === typeof data) {\n            fn = data;\n            data = undefined;\n        }\n        if (\"function\" === typeof options) {\n            fn = options;\n            options = null;\n        }\n        if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n            return;\n        }\n        options = options || {};\n        options.compress = false !== options.compress;\n        const packet = {\n            type: type,\n            data: data,\n            options: options,\n        };\n        this.emitReserved(\"packetCreate\", packet);\n        this.writeBuffer.push(packet);\n        if (fn)\n            this.once(\"flush\", fn);\n        this.flush();\n    }\n    /**\n     * Closes the connection.\n     */\n    close() {\n        const close = () => {\n            this._onClose(\"forced close\");\n            this.transport.close();\n        };\n        const cleanupAndClose = () => {\n            this.off(\"upgrade\", cleanupAndClose);\n            this.off(\"upgradeError\", cleanupAndClose);\n            close();\n        };\n        const waitForUpgrade = () => {\n            // wait for upgrade to finish since we can't send packets while pausing a transport\n            this.once(\"upgrade\", cleanupAndClose);\n            this.once(\"upgradeError\", cleanupAndClose);\n        };\n        if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n            this.readyState = \"closing\";\n            if (this.writeBuffer.length) {\n                this.once(\"drain\", () => {\n                    if (this.upgrading) {\n                        waitForUpgrade();\n                    }\n                    else {\n                        close();\n                    }\n                });\n            }\n            else if (this.upgrading) {\n                waitForUpgrade();\n            }\n            else {\n                close();\n            }\n        }\n        return this;\n    }\n    /**\n     * Called upon transport error\n     *\n     * @private\n     */\n    _onError(err) {\n        SocketWithoutUpgrade.priorWebsocketSuccess = false;\n        if (this.opts.tryAllTransports &&\n            this.transports.length > 1 &&\n            this.readyState === \"opening\") {\n            this.transports.shift();\n            return this._open();\n        }\n        this.emitReserved(\"error\", err);\n        this._onClose(\"transport error\", err);\n    }\n    /**\n     * Called upon transport close.\n     *\n     * @private\n     */\n    _onClose(reason, description) {\n        if (\"opening\" === this.readyState ||\n            \"open\" === this.readyState ||\n            \"closing\" === this.readyState) {\n            // clear timers\n            this.clearTimeoutFn(this._pingTimeoutTimer);\n            // stop event from firing again for transport\n            this.transport.removeAllListeners(\"close\");\n            // ensure transport won't stay open\n            this.transport.close();\n            // ignore further transport communication\n            this.transport.removeAllListeners();\n            if (withEventListeners) {\n                if (this._beforeunloadEventListener) {\n                    removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n                }\n                if (this._offlineEventListener) {\n                    const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n                    if (i !== -1) {\n                        OFFLINE_EVENT_LISTENERS.splice(i, 1);\n                    }\n                }\n            }\n            // set ready state\n            this.readyState = \"closed\";\n            // clear session id\n            this.id = null;\n            // emit close event\n            this.emitReserved(\"close\", reason, description);\n            // clean buffers after, so users can still\n            // grab the buffers on `close` event\n            this.writeBuffer = [];\n            this._prevBufferLen = 0;\n        }\n    }\n}\nSocketWithoutUpgrade.protocol = protocol;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n *   transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n *   socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\nexport class SocketWithUpgrade extends SocketWithoutUpgrade {\n    constructor() {\n        super(...arguments);\n        this._upgrades = [];\n    }\n    onOpen() {\n        super.onOpen();\n        if (\"open\" === this.readyState && this.opts.upgrade) {\n            for (let i = 0; i < this._upgrades.length; i++) {\n                this._probe(this._upgrades[i]);\n            }\n        }\n    }\n    /**\n     * Probes a transport.\n     *\n     * @param {String} name - transport name\n     * @private\n     */\n    _probe(name) {\n        let transport = this.createTransport(name);\n        let failed = false;\n        SocketWithoutUpgrade.priorWebsocketSuccess = false;\n        const onTransportOpen = () => {\n            if (failed)\n                return;\n            transport.send([{ type: \"ping\", data: \"probe\" }]);\n            transport.once(\"packet\", (msg) => {\n                if (failed)\n                    return;\n                if (\"pong\" === msg.type && \"probe\" === msg.data) {\n                    this.upgrading = true;\n                    this.emitReserved(\"upgrading\", transport);\n                    if (!transport)\n                        return;\n                    SocketWithoutUpgrade.priorWebsocketSuccess =\n                        \"websocket\" === transport.name;\n                    this.transport.pause(() => {\n                        if (failed)\n                            return;\n                        if (\"closed\" === this.readyState)\n                            return;\n                        cleanup();\n                        this.setTransport(transport);\n                        transport.send([{ type: \"upgrade\" }]);\n                        this.emitReserved(\"upgrade\", transport);\n                        transport = null;\n                        this.upgrading = false;\n                        this.flush();\n                    });\n                }\n                else {\n                    const err = new Error(\"probe error\");\n                    // @ts-ignore\n                    err.transport = transport.name;\n                    this.emitReserved(\"upgradeError\", err);\n                }\n            });\n        };\n        function freezeTransport() {\n            if (failed)\n                return;\n            // Any callback called by transport should be ignored since now\n            failed = true;\n            cleanup();\n            transport.close();\n            transport = null;\n        }\n        // Handle any error that happens while probing\n        const onerror = (err) => {\n            const error = new Error(\"probe error: \" + err);\n            // @ts-ignore\n            error.transport = transport.name;\n            freezeTransport();\n            this.emitReserved(\"upgradeError\", error);\n        };\n        function onTransportClose() {\n            onerror(\"transport closed\");\n        }\n        // When the socket is closed while we're probing\n        function onclose() {\n            onerror(\"socket closed\");\n        }\n        // When the socket is upgraded while we're probing\n        function onupgrade(to) {\n            if (transport && to.name !== transport.name) {\n                freezeTransport();\n            }\n        }\n        // Remove all listeners on the transport and on self\n        const cleanup = () => {\n            transport.removeListener(\"open\", onTransportOpen);\n            transport.removeListener(\"error\", onerror);\n            transport.removeListener(\"close\", onTransportClose);\n            this.off(\"close\", onclose);\n            this.off(\"upgrading\", onupgrade);\n        };\n        transport.once(\"open\", onTransportOpen);\n        transport.once(\"error\", onerror);\n        transport.once(\"close\", onTransportClose);\n        this.once(\"close\", onclose);\n        this.once(\"upgrading\", onupgrade);\n        if (this._upgrades.indexOf(\"webtransport\") !== -1 &&\n            name !== \"webtransport\") {\n            // favor WebTransport\n            this.setTimeoutFn(() => {\n                if (!failed) {\n                    transport.open();\n                }\n            }, 200);\n        }\n        else {\n            transport.open();\n        }\n    }\n    onHandshake(data) {\n        this._upgrades = this._filterUpgrades(data.upgrades);\n        super.onHandshake(data);\n    }\n    /**\n     * Filters upgrades, returning only those matching client transports.\n     *\n     * @param {Array} upgrades - server upgrades\n     * @private\n     */\n    _filterUpgrades(upgrades) {\n        const filteredUpgrades = [];\n        for (let i = 0; i < upgrades.length; i++) {\n            if (~this.transports.indexOf(upgrades[i]))\n                filteredUpgrades.push(upgrades[i]);\n        }\n        return filteredUpgrades;\n    }\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n *   socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nexport class Socket extends SocketWithUpgrade {\n    constructor(uri, opts = {}) {\n        const o = typeof uri === \"object\" ? uri : opts;\n        if (!o.transports ||\n            (o.transports && typeof o.transports[0] === \"string\")) {\n            o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"])\n                .map((transportName) => DEFAULT_TRANSPORTS[transportName])\n                .filter((t) => !!t);\n        }\n        super(uri, o);\n    }\n}\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n *        Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n    let obj = uri;\n    // default to window.location\n    loc = loc || (typeof location !== \"undefined\" && location);\n    if (null == uri)\n        uri = loc.protocol + \"//\" + loc.host;\n    // relative path support\n    if (typeof uri === \"string\") {\n        if (\"/\" === uri.charAt(0)) {\n            if (\"/\" === uri.charAt(1)) {\n                uri = loc.protocol + uri;\n            }\n            else {\n                uri = loc.host + uri;\n            }\n        }\n        if (!/^(https?|wss?):\\/\\//.test(uri)) {\n            if (\"undefined\" !== typeof loc) {\n                uri = loc.protocol + \"//\" + uri;\n            }\n            else {\n                uri = \"https://\" + uri;\n            }\n        }\n        // parse\n        obj = parse(uri);\n    }\n    // make sure we treat `localhost:80` and `localhost` equally\n    if (!obj.port) {\n        if (/^(http|ws)$/.test(obj.protocol)) {\n            obj.port = \"80\";\n        }\n        else if (/^(http|ws)s$/.test(obj.protocol)) {\n            obj.port = \"443\";\n        }\n    }\n    obj.path = obj.path || \"/\";\n    const ipv6 = obj.host.indexOf(\":\") !== -1;\n    const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n    // define unique id\n    obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n    // define href\n    obj.href =\n        obj.protocol +\n            \"://\" +\n            host +\n            (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n    return obj;\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n    return typeof ArrayBuffer.isView === \"function\"\n        ? ArrayBuffer.isView(obj)\n        : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n    (typeof Blob !== \"undefined\" &&\n        toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n    (typeof File !== \"undefined\" &&\n        toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n    return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n        (withNativeBlob && obj instanceof Blob) ||\n        (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n    if (!obj || typeof obj !== \"object\") {\n        return false;\n    }\n    if (Array.isArray(obj)) {\n        for (let i = 0, l = obj.length; i < l; i++) {\n            if (hasBinary(obj[i])) {\n                return true;\n            }\n        }\n        return false;\n    }\n    if (isBinary(obj)) {\n        return true;\n    }\n    if (obj.toJSON &&\n        typeof obj.toJSON === \"function\" &&\n        arguments.length === 1) {\n        return hasBinary(obj.toJSON(), true);\n    }\n    for (const key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n            return true;\n        }\n    }\n    return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n    const buffers = [];\n    const packetData = packet.data;\n    const pack = packet;\n    pack.data = _deconstructPacket(packetData, buffers);\n    pack.attachments = buffers.length; // number of binary 'attachments'\n    return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n    if (!data)\n        return data;\n    if (isBinary(data)) {\n        const placeholder = { _placeholder: true, num: buffers.length };\n        buffers.push(data);\n        return placeholder;\n    }\n    else if (Array.isArray(data)) {\n        const newData = new Array(data.length);\n        for (let i = 0; i < data.length; i++) {\n            newData[i] = _deconstructPacket(data[i], buffers);\n        }\n        return newData;\n    }\n    else if (typeof data === \"object\" && !(data instanceof Date)) {\n        const newData = {};\n        for (const key in data) {\n            if (Object.prototype.hasOwnProperty.call(data, key)) {\n                newData[key] = _deconstructPacket(data[key], buffers);\n            }\n        }\n        return newData;\n    }\n    return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n    packet.data = _reconstructPacket(packet.data, buffers);\n    delete packet.attachments; // no longer useful\n    return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n    if (!data)\n        return data;\n    if (data && data._placeholder === true) {\n        const isIndexValid = typeof data.num === \"number\" &&\n            data.num >= 0 &&\n            data.num < buffers.length;\n        if (isIndexValid) {\n            return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n        }\n        else {\n            throw new Error(\"illegal attachments\");\n        }\n    }\n    else if (Array.isArray(data)) {\n        for (let i = 0; i < data.length; i++) {\n            data[i] = _reconstructPacket(data[i], buffers);\n        }\n    }\n    else if (typeof data === \"object\") {\n        for (const key in data) {\n            if (Object.prototype.hasOwnProperty.call(data, key)) {\n                data[key] = _reconstructPacket(data[key], buffers);\n            }\n        }\n    }\n    return data;\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n    \"connect\",\n    \"connect_error\",\n    \"disconnect\",\n    \"disconnecting\",\n    \"newListener\",\n    \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n    PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n    PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n    PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n    PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n    PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n    PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n    PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n    /**\n     * Encoder constructor\n     *\n     * @param {function} replacer - custom replacer to pass down to JSON.parse\n     */\n    constructor(replacer) {\n        this.replacer = replacer;\n    }\n    /**\n     * Encode a packet as a single string if non-binary, or as a\n     * buffer sequence, depending on packet type.\n     *\n     * @param {Object} obj - packet object\n     */\n    encode(obj) {\n        if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n            if (hasBinary(obj)) {\n                return this.encodeAsBinary({\n                    type: obj.type === PacketType.EVENT\n                        ? PacketType.BINARY_EVENT\n                        : PacketType.BINARY_ACK,\n                    nsp: obj.nsp,\n                    data: obj.data,\n                    id: obj.id,\n                });\n            }\n        }\n        return [this.encodeAsString(obj)];\n    }\n    /**\n     * Encode packet as string.\n     */\n    encodeAsString(obj) {\n        // first is type\n        let str = \"\" + obj.type;\n        // attachments if we have them\n        if (obj.type === PacketType.BINARY_EVENT ||\n            obj.type === PacketType.BINARY_ACK) {\n            str += obj.attachments + \"-\";\n        }\n        // if we have a namespace other than `/`\n        // we append it followed by a comma `,`\n        if (obj.nsp && \"/\" !== obj.nsp) {\n            str += obj.nsp + \",\";\n        }\n        // immediately followed by the id\n        if (null != obj.id) {\n            str += obj.id;\n        }\n        // json data\n        if (null != obj.data) {\n            str += JSON.stringify(obj.data, this.replacer);\n        }\n        return str;\n    }\n    /**\n     * Encode packet as 'buffer sequence' by removing blobs, and\n     * deconstructing packet into object with placeholders and\n     * a list of buffers.\n     */\n    encodeAsBinary(obj) {\n        const deconstruction = deconstructPacket(obj);\n        const pack = this.encodeAsString(deconstruction.packet);\n        const buffers = deconstruction.buffers;\n        buffers.unshift(pack); // add packet info to beginning of data list\n        return buffers; // write all the buffers\n    }\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n    return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n    /**\n     * Decoder constructor\n     *\n     * @param {function} reviver - custom reviver to pass down to JSON.stringify\n     */\n    constructor(reviver) {\n        super();\n        this.reviver = reviver;\n    }\n    /**\n     * Decodes an encoded packet string into packet JSON.\n     *\n     * @param {String} obj - encoded packet\n     */\n    add(obj) {\n        let packet;\n        if (typeof obj === \"string\") {\n            if (this.reconstructor) {\n                throw new Error(\"got plaintext data when reconstructing a packet\");\n            }\n            packet = this.decodeString(obj);\n            const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n            if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n                packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n                // binary packet's json\n                this.reconstructor = new BinaryReconstructor(packet);\n                // no attachments, labeled binary but no binary data to follow\n                if (packet.attachments === 0) {\n                    super.emitReserved(\"decoded\", packet);\n                }\n            }\n            else {\n                // non-binary full packet\n                super.emitReserved(\"decoded\", packet);\n            }\n        }\n        else if (isBinary(obj) || obj.base64) {\n            // raw binary data\n            if (!this.reconstructor) {\n                throw new Error(\"got binary data when not reconstructing a packet\");\n            }\n            else {\n                packet = this.reconstructor.takeBinaryData(obj);\n                if (packet) {\n                    // received final buffer\n                    this.reconstructor = null;\n                    super.emitReserved(\"decoded\", packet);\n                }\n            }\n        }\n        else {\n            throw new Error(\"Unknown type: \" + obj);\n        }\n    }\n    /**\n     * Decode a packet String (JSON data)\n     *\n     * @param {String} str\n     * @return {Object} packet\n     */\n    decodeString(str) {\n        let i = 0;\n        // look up type\n        const p = {\n            type: Number(str.charAt(0)),\n        };\n        if (PacketType[p.type] === undefined) {\n            throw new Error(\"unknown packet type \" + p.type);\n        }\n        // look up attachments if type binary\n        if (p.type === PacketType.BINARY_EVENT ||\n            p.type === PacketType.BINARY_ACK) {\n            const start = i + 1;\n            while (str.charAt(++i) !== \"-\" && i != str.length) { }\n            const buf = str.substring(start, i);\n            if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n                throw new Error(\"Illegal attachments\");\n            }\n            p.attachments = Number(buf);\n        }\n        // look up namespace (if any)\n        if (\"/\" === str.charAt(i + 1)) {\n            const start = i + 1;\n            while (++i) {\n                const c = str.charAt(i);\n                if (\",\" === c)\n                    break;\n                if (i === str.length)\n                    break;\n            }\n            p.nsp = str.substring(start, i);\n        }\n        else {\n            p.nsp = \"/\";\n        }\n        // look up id\n        const next = str.charAt(i + 1);\n        if (\"\" !== next && Number(next) == next) {\n            const start = i + 1;\n            while (++i) {\n                const c = str.charAt(i);\n                if (null == c || Number(c) != c) {\n                    --i;\n                    break;\n                }\n                if (i === str.length)\n                    break;\n            }\n            p.id = Number(str.substring(start, i + 1));\n        }\n        // look up json data\n        if (str.charAt(++i)) {\n            const payload = this.tryParse(str.substr(i));\n            if (Decoder.isPayloadValid(p.type, payload)) {\n                p.data = payload;\n            }\n            else {\n                throw new Error(\"invalid payload\");\n            }\n        }\n        return p;\n    }\n    tryParse(str) {\n        try {\n            return JSON.parse(str, this.reviver);\n        }\n        catch (e) {\n            return false;\n        }\n    }\n    static isPayloadValid(type, payload) {\n        switch (type) {\n            case PacketType.CONNECT:\n                return isObject(payload);\n            case PacketType.DISCONNECT:\n                return payload === undefined;\n            case PacketType.CONNECT_ERROR:\n                return typeof payload === \"string\" || isObject(payload);\n            case PacketType.EVENT:\n            case PacketType.BINARY_EVENT:\n                return (Array.isArray(payload) &&\n                    (typeof payload[0] === \"number\" ||\n                        (typeof payload[0] === \"string\" &&\n                            RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n            case PacketType.ACK:\n            case PacketType.BINARY_ACK:\n                return Array.isArray(payload);\n        }\n    }\n    /**\n     * Deallocates a parser's resources\n     */\n    destroy() {\n        if (this.reconstructor) {\n            this.reconstructor.finishedReconstruction();\n            this.reconstructor = null;\n        }\n    }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n    constructor(packet) {\n        this.packet = packet;\n        this.buffers = [];\n        this.reconPack = packet;\n    }\n    /**\n     * Method to be called when binary data received from connection\n     * after a BINARY_EVENT packet.\n     *\n     * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n     * @return {null | Object} returns null if more binary data is expected or\n     *   a reconstructed packet object if all buffers have been received.\n     */\n    takeBinaryData(binData) {\n        this.buffers.push(binData);\n        if (this.buffers.length === this.reconPack.attachments) {\n            // done with buffer list\n            const packet = reconstructPacket(this.reconPack, this.buffers);\n            this.finishedReconstruction();\n            return packet;\n        }\n        return null;\n    }\n    /**\n     * Cleans up binary packet reconstruction variables.\n     */\n    finishedReconstruction() {\n        this.reconPack = null;\n        this.buffers = [];\n    }\n}\n","export function on(obj, ev, fn) {\n    obj.on(ev, fn);\n    return function subDestroy() {\n        obj.off(ev, fn);\n    };\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n    connect: 1,\n    connect_error: 1,\n    disconnect: 1,\n    disconnecting: 1,\n    // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n    newListener: 1,\n    removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n *   console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n *   // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n *   console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n    /**\n     * `Socket` constructor.\n     */\n    constructor(io, nsp, opts) {\n        super();\n        /**\n         * Whether the socket is currently connected to the server.\n         *\n         * @example\n         * const socket = io();\n         *\n         * socket.on(\"connect\", () => {\n         *   console.log(socket.connected); // true\n         * });\n         *\n         * socket.on(\"disconnect\", () => {\n         *   console.log(socket.connected); // false\n         * });\n         */\n        this.connected = false;\n        /**\n         * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n         * be transmitted by the server.\n         */\n        this.recovered = false;\n        /**\n         * Buffer for packets received before the CONNECT packet\n         */\n        this.receiveBuffer = [];\n        /**\n         * Buffer for packets that will be sent once the socket is connected\n         */\n        this.sendBuffer = [];\n        /**\n         * The queue of packets to be sent with retry in case of failure.\n         *\n         * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n         * @private\n         */\n        this._queue = [];\n        /**\n         * A sequence to generate the ID of the {@link QueuedPacket}.\n         * @private\n         */\n        this._queueSeq = 0;\n        this.ids = 0;\n        /**\n         * A map containing acknowledgement handlers.\n         *\n         * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n         *\n         * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n         * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n         * - `const value = await socket.emitWithAck(\"test\")`\n         *\n         * From those that don't:\n         *\n         * - `socket.emit(\"test\", (value) => { ... });`\n         *\n         * In the first case, the handlers will be called with an error when:\n         *\n         * - the timeout is reached\n         * - the socket gets disconnected\n         *\n         * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n         * an acknowledgement from the server.\n         *\n         * @private\n         */\n        this.acks = {};\n        this.flags = {};\n        this.io = io;\n        this.nsp = nsp;\n        if (opts && opts.auth) {\n            this.auth = opts.auth;\n        }\n        this._opts = Object.assign({}, opts);\n        if (this.io._autoConnect)\n            this.open();\n    }\n    /**\n     * Whether the socket is currently disconnected\n     *\n     * @example\n     * const socket = io();\n     *\n     * socket.on(\"connect\", () => {\n     *   console.log(socket.disconnected); // false\n     * });\n     *\n     * socket.on(\"disconnect\", () => {\n     *   console.log(socket.disconnected); // true\n     * });\n     */\n    get disconnected() {\n        return !this.connected;\n    }\n    /**\n     * Subscribe to open, close and packet events\n     *\n     * @private\n     */\n    subEvents() {\n        if (this.subs)\n            return;\n        const io = this.io;\n        this.subs = [\n            on(io, \"open\", this.onopen.bind(this)),\n            on(io, \"packet\", this.onpacket.bind(this)),\n            on(io, \"error\", this.onerror.bind(this)),\n            on(io, \"close\", this.onclose.bind(this)),\n        ];\n    }\n    /**\n     * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n     *\n     * @example\n     * const socket = io();\n     *\n     * console.log(socket.active); // true\n     *\n     * socket.on(\"disconnect\", (reason) => {\n     *   if (reason === \"io server disconnect\") {\n     *     // the disconnection was initiated by the server, you need to manually reconnect\n     *     console.log(socket.active); // false\n     *   }\n     *   // else the socket will automatically try to reconnect\n     *   console.log(socket.active); // true\n     * });\n     */\n    get active() {\n        return !!this.subs;\n    }\n    /**\n     * \"Opens\" the socket.\n     *\n     * @example\n     * const socket = io({\n     *   autoConnect: false\n     * });\n     *\n     * socket.connect();\n     */\n    connect() {\n        if (this.connected)\n            return this;\n        this.subEvents();\n        if (!this.io[\"_reconnecting\"])\n            this.io.open(); // ensure open\n        if (\"open\" === this.io._readyState)\n            this.onopen();\n        return this;\n    }\n    /**\n     * Alias for {@link connect()}.\n     */\n    open() {\n        return this.connect();\n    }\n    /**\n     * Sends a `message` event.\n     *\n     * This method mimics the WebSocket.send() method.\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n     *\n     * @example\n     * socket.send(\"hello\");\n     *\n     * // this is equivalent to\n     * socket.emit(\"message\", \"hello\");\n     *\n     * @return self\n     */\n    send(...args) {\n        args.unshift(\"message\");\n        this.emit.apply(this, args);\n        return this;\n    }\n    /**\n     * Override `emit`.\n     * If the event is in `events`, it's emitted normally.\n     *\n     * @example\n     * socket.emit(\"hello\", \"world\");\n     *\n     * // all serializable datastructures are supported (no need to call JSON.stringify)\n     * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n     *\n     * // with an acknowledgement from the server\n     * socket.emit(\"hello\", \"world\", (val) => {\n     *   // ...\n     * });\n     *\n     * @return self\n     */\n    emit(ev, ...args) {\n        var _a, _b, _c;\n        if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n            throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n        }\n        args.unshift(ev);\n        if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n            this._addToQueue(args);\n            return this;\n        }\n        const packet = {\n            type: PacketType.EVENT,\n            data: args,\n        };\n        packet.options = {};\n        packet.options.compress = this.flags.compress !== false;\n        // event ack callback\n        if (\"function\" === typeof args[args.length - 1]) {\n            const id = this.ids++;\n            const ack = args.pop();\n            this._registerAckCallback(id, ack);\n            packet.id = id;\n        }\n        const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n        const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n        const discardPacket = this.flags.volatile && !isTransportWritable;\n        if (discardPacket) {\n        }\n        else if (isConnected) {\n            this.notifyOutgoingListeners(packet);\n            this.packet(packet);\n        }\n        else {\n            this.sendBuffer.push(packet);\n        }\n        this.flags = {};\n        return this;\n    }\n    /**\n     * @private\n     */\n    _registerAckCallback(id, ack) {\n        var _a;\n        const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n        if (timeout === undefined) {\n            this.acks[id] = ack;\n            return;\n        }\n        // @ts-ignore\n        const timer = this.io.setTimeoutFn(() => {\n            delete this.acks[id];\n            for (let i = 0; i < this.sendBuffer.length; i++) {\n                if (this.sendBuffer[i].id === id) {\n                    this.sendBuffer.splice(i, 1);\n                }\n            }\n            ack.call(this, new Error(\"operation has timed out\"));\n        }, timeout);\n        const fn = (...args) => {\n            // @ts-ignore\n            this.io.clearTimeoutFn(timer);\n            ack.apply(this, args);\n        };\n        fn.withError = true;\n        this.acks[id] = fn;\n    }\n    /**\n     * Emits an event and waits for an acknowledgement\n     *\n     * @example\n     * // without timeout\n     * const response = await socket.emitWithAck(\"hello\", \"world\");\n     *\n     * // with a specific timeout\n     * try {\n     *   const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n     * } catch (err) {\n     *   // the server did not acknowledge the event in the given delay\n     * }\n     *\n     * @return a Promise that will be fulfilled when the server acknowledges the event\n     */\n    emitWithAck(ev, ...args) {\n        return new Promise((resolve, reject) => {\n            const fn = (arg1, arg2) => {\n                return arg1 ? reject(arg1) : resolve(arg2);\n            };\n            fn.withError = true;\n            args.push(fn);\n            this.emit(ev, ...args);\n        });\n    }\n    /**\n     * Add the packet to the queue.\n     * @param args\n     * @private\n     */\n    _addToQueue(args) {\n        let ack;\n        if (typeof args[args.length - 1] === \"function\") {\n            ack = args.pop();\n        }\n        const packet = {\n            id: this._queueSeq++,\n            tryCount: 0,\n            pending: false,\n            args,\n            flags: Object.assign({ fromQueue: true }, this.flags),\n        };\n        args.push((err, ...responseArgs) => {\n            if (packet !== this._queue[0]) {\n                // the packet has already been acknowledged\n                return;\n            }\n            const hasError = err !== null;\n            if (hasError) {\n                if (packet.tryCount > this._opts.retries) {\n                    this._queue.shift();\n                    if (ack) {\n                        ack(err);\n                    }\n                }\n            }\n            else {\n                this._queue.shift();\n                if (ack) {\n                    ack(null, ...responseArgs);\n                }\n            }\n            packet.pending = false;\n            return this._drainQueue();\n        });\n        this._queue.push(packet);\n        this._drainQueue();\n    }\n    /**\n     * Send the first packet of the queue, and wait for an acknowledgement from the server.\n     * @param force - whether to resend a packet that has not been acknowledged yet\n     *\n     * @private\n     */\n    _drainQueue(force = false) {\n        if (!this.connected || this._queue.length === 0) {\n            return;\n        }\n        const packet = this._queue[0];\n        if (packet.pending && !force) {\n            return;\n        }\n        packet.pending = true;\n        packet.tryCount++;\n        this.flags = packet.flags;\n        this.emit.apply(this, packet.args);\n    }\n    /**\n     * Sends a packet.\n     *\n     * @param packet\n     * @private\n     */\n    packet(packet) {\n        packet.nsp = this.nsp;\n        this.io._packet(packet);\n    }\n    /**\n     * Called upon engine `open`.\n     *\n     * @private\n     */\n    onopen() {\n        if (typeof this.auth == \"function\") {\n            this.auth((data) => {\n                this._sendConnectPacket(data);\n            });\n        }\n        else {\n            this._sendConnectPacket(this.auth);\n        }\n    }\n    /**\n     * Sends a CONNECT packet to initiate the Socket.IO session.\n     *\n     * @param data\n     * @private\n     */\n    _sendConnectPacket(data) {\n        this.packet({\n            type: PacketType.CONNECT,\n            data: this._pid\n                ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n                : data,\n        });\n    }\n    /**\n     * Called upon engine or manager `error`.\n     *\n     * @param err\n     * @private\n     */\n    onerror(err) {\n        if (!this.connected) {\n            this.emitReserved(\"connect_error\", err);\n        }\n    }\n    /**\n     * Called upon engine `close`.\n     *\n     * @param reason\n     * @param description\n     * @private\n     */\n    onclose(reason, description) {\n        this.connected = false;\n        delete this.id;\n        this.emitReserved(\"disconnect\", reason, description);\n        this._clearAcks();\n    }\n    /**\n     * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n     * the server.\n     *\n     * @private\n     */\n    _clearAcks() {\n        Object.keys(this.acks).forEach((id) => {\n            const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id);\n            if (!isBuffered) {\n                // note: handlers that do not accept an error as first argument are ignored here\n                const ack = this.acks[id];\n                delete this.acks[id];\n                if (ack.withError) {\n                    ack.call(this, new Error(\"socket has been disconnected\"));\n                }\n            }\n        });\n    }\n    /**\n     * Called with socket packet.\n     *\n     * @param packet\n     * @private\n     */\n    onpacket(packet) {\n        const sameNamespace = packet.nsp === this.nsp;\n        if (!sameNamespace)\n            return;\n        switch (packet.type) {\n            case PacketType.CONNECT:\n                if (packet.data && packet.data.sid) {\n                    this.onconnect(packet.data.sid, packet.data.pid);\n                }\n                else {\n                    this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n                }\n                break;\n            case PacketType.EVENT:\n            case PacketType.BINARY_EVENT:\n                this.onevent(packet);\n                break;\n            case PacketType.ACK:\n            case PacketType.BINARY_ACK:\n                this.onack(packet);\n                break;\n            case PacketType.DISCONNECT:\n                this.ondisconnect();\n                break;\n            case PacketType.CONNECT_ERROR:\n                this.destroy();\n                const err = new Error(packet.data.message);\n                // @ts-ignore\n                err.data = packet.data.data;\n                this.emitReserved(\"connect_error\", err);\n                break;\n        }\n    }\n    /**\n     * Called upon a server event.\n     *\n     * @param packet\n     * @private\n     */\n    onevent(packet) {\n        const args = packet.data || [];\n        if (null != packet.id) {\n            args.push(this.ack(packet.id));\n        }\n        if (this.connected) {\n            this.emitEvent(args);\n        }\n        else {\n            this.receiveBuffer.push(Object.freeze(args));\n        }\n    }\n    emitEvent(args) {\n        if (this._anyListeners && this._anyListeners.length) {\n            const listeners = this._anyListeners.slice();\n            for (const listener of listeners) {\n                listener.apply(this, args);\n            }\n        }\n        super.emit.apply(this, args);\n        if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n            this._lastOffset = args[args.length - 1];\n        }\n    }\n    /**\n     * Produces an ack callback to emit with an event.\n     *\n     * @private\n     */\n    ack(id) {\n        const self = this;\n        let sent = false;\n        return function (...args) {\n            // prevent double callbacks\n            if (sent)\n                return;\n            sent = true;\n            self.packet({\n                type: PacketType.ACK,\n                id: id,\n                data: args,\n            });\n        };\n    }\n    /**\n     * Called upon a server acknowledgement.\n     *\n     * @param packet\n     * @private\n     */\n    onack(packet) {\n        const ack = this.acks[packet.id];\n        if (typeof ack !== \"function\") {\n            return;\n        }\n        delete this.acks[packet.id];\n        // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n        if (ack.withError) {\n            packet.data.unshift(null);\n        }\n        // @ts-ignore\n        ack.apply(this, packet.data);\n    }\n    /**\n     * Called upon server connect.\n     *\n     * @private\n     */\n    onconnect(id, pid) {\n        this.id = id;\n        this.recovered = pid && this._pid === pid;\n        this._pid = pid; // defined only if connection state recovery is enabled\n        this.connected = true;\n        this.emitBuffered();\n        this.emitReserved(\"connect\");\n        this._drainQueue(true);\n    }\n    /**\n     * Emit buffered events (received and emitted).\n     *\n     * @private\n     */\n    emitBuffered() {\n        this.receiveBuffer.forEach((args) => this.emitEvent(args));\n        this.receiveBuffer = [];\n        this.sendBuffer.forEach((packet) => {\n            this.notifyOutgoingListeners(packet);\n            this.packet(packet);\n        });\n        this.sendBuffer = [];\n    }\n    /**\n     * Called upon server disconnect.\n     *\n     * @private\n     */\n    ondisconnect() {\n        this.destroy();\n        this.onclose(\"io server disconnect\");\n    }\n    /**\n     * Called upon forced client/server side disconnections,\n     * this method ensures the manager stops tracking us and\n     * that reconnections don't get triggered for this.\n     *\n     * @private\n     */\n    destroy() {\n        if (this.subs) {\n            // clean subscriptions to avoid reconnections\n            this.subs.forEach((subDestroy) => subDestroy());\n            this.subs = undefined;\n        }\n        this.io[\"_destroy\"](this);\n    }\n    /**\n     * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n     *\n     * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n     *\n     * @example\n     * const socket = io();\n     *\n     * socket.on(\"disconnect\", (reason) => {\n     *   // console.log(reason); prints \"io client disconnect\"\n     * });\n     *\n     * socket.disconnect();\n     *\n     * @return self\n     */\n    disconnect() {\n        if (this.connected) {\n            this.packet({ type: PacketType.DISCONNECT });\n        }\n        // remove socket from pool\n        this.destroy();\n        if (this.connected) {\n            // fire events\n            this.onclose(\"io client disconnect\");\n        }\n        return this;\n    }\n    /**\n     * Alias for {@link disconnect()}.\n     *\n     * @return self\n     */\n    close() {\n        return this.disconnect();\n    }\n    /**\n     * Sets the compress flag.\n     *\n     * @example\n     * socket.compress(false).emit(\"hello\");\n     *\n     * @param compress - if `true`, compresses the sending data\n     * @return self\n     */\n    compress(compress) {\n        this.flags.compress = compress;\n        return this;\n    }\n    /**\n     * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n     * ready to send messages.\n     *\n     * @example\n     * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n     *\n     * @returns self\n     */\n    get volatile() {\n        this.flags.volatile = true;\n        return this;\n    }\n    /**\n     * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n     * given number of milliseconds have elapsed without an acknowledgement from the server:\n     *\n     * @example\n     * socket.timeout(5000).emit(\"my-event\", (err) => {\n     *   if (err) {\n     *     // the server did not acknowledge the event in the given delay\n     *   }\n     * });\n     *\n     * @returns self\n     */\n    timeout(timeout) {\n        this.flags.timeout = timeout;\n        return this;\n    }\n    /**\n     * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n     * callback.\n     *\n     * @example\n     * socket.onAny((event, ...args) => {\n     *   console.log(`got ${event}`);\n     * });\n     *\n     * @param listener\n     */\n    onAny(listener) {\n        this._anyListeners = this._anyListeners || [];\n        this._anyListeners.push(listener);\n        return this;\n    }\n    /**\n     * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n     * callback. The listener is added to the beginning of the listeners array.\n     *\n     * @example\n     * socket.prependAny((event, ...args) => {\n     *   console.log(`got event ${event}`);\n     * });\n     *\n     * @param listener\n     */\n    prependAny(listener) {\n        this._anyListeners = this._anyListeners || [];\n        this._anyListeners.unshift(listener);\n        return this;\n    }\n    /**\n     * Removes the listener that will be fired when any event is emitted.\n     *\n     * @example\n     * const catchAllListener = (event, ...args) => {\n     *   console.log(`got event ${event}`);\n     * }\n     *\n     * socket.onAny(catchAllListener);\n     *\n     * // remove a specific listener\n     * socket.offAny(catchAllListener);\n     *\n     * // or remove all listeners\n     * socket.offAny();\n     *\n     * @param listener\n     */\n    offAny(listener) {\n        if (!this._anyListeners) {\n            return this;\n        }\n        if (listener) {\n            const listeners = this._anyListeners;\n            for (let i = 0; i < listeners.length; i++) {\n                if (listener === listeners[i]) {\n                    listeners.splice(i, 1);\n                    return this;\n                }\n            }\n        }\n        else {\n            this._anyListeners = [];\n        }\n        return this;\n    }\n    /**\n     * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n     * e.g. to remove listeners.\n     */\n    listenersAny() {\n        return this._anyListeners || [];\n    }\n    /**\n     * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n     * callback.\n     *\n     * Note: acknowledgements sent to the server are not included.\n     *\n     * @example\n     * socket.onAnyOutgoing((event, ...args) => {\n     *   console.log(`sent event ${event}`);\n     * });\n     *\n     * @param listener\n     */\n    onAnyOutgoing(listener) {\n        this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n        this._anyOutgoingListeners.push(listener);\n        return this;\n    }\n    /**\n     * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n     * callback. The listener is added to the beginning of the listeners array.\n     *\n     * Note: acknowledgements sent to the server are not included.\n     *\n     * @example\n     * socket.prependAnyOutgoing((event, ...args) => {\n     *   console.log(`sent event ${event}`);\n     * });\n     *\n     * @param listener\n     */\n    prependAnyOutgoing(listener) {\n        this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n        this._anyOutgoingListeners.unshift(listener);\n        return this;\n    }\n    /**\n     * Removes the listener that will be fired when any event is emitted.\n     *\n     * @example\n     * const catchAllListener = (event, ...args) => {\n     *   console.log(`sent event ${event}`);\n     * }\n     *\n     * socket.onAnyOutgoing(catchAllListener);\n     *\n     * // remove a specific listener\n     * socket.offAnyOutgoing(catchAllListener);\n     *\n     * // or remove all listeners\n     * socket.offAnyOutgoing();\n     *\n     * @param [listener] - the catch-all listener (optional)\n     */\n    offAnyOutgoing(listener) {\n        if (!this._anyOutgoingListeners) {\n            return this;\n        }\n        if (listener) {\n            const listeners = this._anyOutgoingListeners;\n            for (let i = 0; i < listeners.length; i++) {\n                if (listener === listeners[i]) {\n                    listeners.splice(i, 1);\n                    return this;\n                }\n            }\n        }\n        else {\n            this._anyOutgoingListeners = [];\n        }\n        return this;\n    }\n    /**\n     * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n     * e.g. to remove listeners.\n     */\n    listenersAnyOutgoing() {\n        return this._anyOutgoingListeners || [];\n    }\n    /**\n     * Notify the listeners for each packet sent\n     *\n     * @param packet\n     *\n     * @private\n     */\n    notifyOutgoingListeners(packet) {\n        if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n            const listeners = this._anyOutgoingListeners.slice();\n            for (const listener of listeners) {\n                listener.apply(this, packet.data);\n            }\n        }\n    }\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n    opts = opts || {};\n    this.ms = opts.min || 100;\n    this.max = opts.max || 10000;\n    this.factor = opts.factor || 2;\n    this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n    this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n    var ms = this.ms * Math.pow(this.factor, this.attempts++);\n    if (this.jitter) {\n        var rand = Math.random();\n        var deviation = Math.floor(rand * this.jitter * ms);\n        ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n    }\n    return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n    this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n    this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n    this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n    this.jitter = jitter;\n};\n","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n    constructor(uri, opts) {\n        var _a;\n        super();\n        this.nsps = {};\n        this.subs = [];\n        if (uri && \"object\" === typeof uri) {\n            opts = uri;\n            uri = undefined;\n        }\n        opts = opts || {};\n        opts.path = opts.path || \"/socket.io\";\n        this.opts = opts;\n        installTimerFunctions(this, opts);\n        this.reconnection(opts.reconnection !== false);\n        this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n        this.reconnectionDelay(opts.reconnectionDelay || 1000);\n        this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n        this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n        this.backoff = new Backoff({\n            min: this.reconnectionDelay(),\n            max: this.reconnectionDelayMax(),\n            jitter: this.randomizationFactor(),\n        });\n        this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n        this._readyState = \"closed\";\n        this.uri = uri;\n        const _parser = opts.parser || parser;\n        this.encoder = new _parser.Encoder();\n        this.decoder = new _parser.Decoder();\n        this._autoConnect = opts.autoConnect !== false;\n        if (this._autoConnect)\n            this.open();\n    }\n    reconnection(v) {\n        if (!arguments.length)\n            return this._reconnection;\n        this._reconnection = !!v;\n        if (!v) {\n            this.skipReconnect = true;\n        }\n        return this;\n    }\n    reconnectionAttempts(v) {\n        if (v === undefined)\n            return this._reconnectionAttempts;\n        this._reconnectionAttempts = v;\n        return this;\n    }\n    reconnectionDelay(v) {\n        var _a;\n        if (v === undefined)\n            return this._reconnectionDelay;\n        this._reconnectionDelay = v;\n        (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n        return this;\n    }\n    randomizationFactor(v) {\n        var _a;\n        if (v === undefined)\n            return this._randomizationFactor;\n        this._randomizationFactor = v;\n        (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n        return this;\n    }\n    reconnectionDelayMax(v) {\n        var _a;\n        if (v === undefined)\n            return this._reconnectionDelayMax;\n        this._reconnectionDelayMax = v;\n        (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n        return this;\n    }\n    timeout(v) {\n        if (!arguments.length)\n            return this._timeout;\n        this._timeout = v;\n        return this;\n    }\n    /**\n     * Starts trying to reconnect if reconnection is enabled and we have not\n     * started reconnecting yet\n     *\n     * @private\n     */\n    maybeReconnectOnOpen() {\n        // Only try to reconnect if it's the first time we're connecting\n        if (!this._reconnecting &&\n            this._reconnection &&\n            this.backoff.attempts === 0) {\n            // keeps reconnection from firing twice for the same reconnection loop\n            this.reconnect();\n        }\n    }\n    /**\n     * Sets the current transport `socket`.\n     *\n     * @param {Function} fn - optional, callback\n     * @return self\n     * @public\n     */\n    open(fn) {\n        if (~this._readyState.indexOf(\"open\"))\n            return this;\n        this.engine = new Engine(this.uri, this.opts);\n        const socket = this.engine;\n        const self = this;\n        this._readyState = \"opening\";\n        this.skipReconnect = false;\n        // emit `open`\n        const openSubDestroy = on(socket, \"open\", function () {\n            self.onopen();\n            fn && fn();\n        });\n        const onError = (err) => {\n            this.cleanup();\n            this._readyState = \"closed\";\n            this.emitReserved(\"error\", err);\n            if (fn) {\n                fn(err);\n            }\n            else {\n                // Only do this if there is no fn to handle the error\n                this.maybeReconnectOnOpen();\n            }\n        };\n        // emit `error`\n        const errorSub = on(socket, \"error\", onError);\n        if (false !== this._timeout) {\n            const timeout = this._timeout;\n            // set timer\n            const timer = this.setTimeoutFn(() => {\n                openSubDestroy();\n                onError(new Error(\"timeout\"));\n                socket.close();\n            }, timeout);\n            if (this.opts.autoUnref) {\n                timer.unref();\n            }\n            this.subs.push(() => {\n                this.clearTimeoutFn(timer);\n            });\n        }\n        this.subs.push(openSubDestroy);\n        this.subs.push(errorSub);\n        return this;\n    }\n    /**\n     * Alias for open()\n     *\n     * @return self\n     * @public\n     */\n    connect(fn) {\n        return this.open(fn);\n    }\n    /**\n     * Called upon transport open.\n     *\n     * @private\n     */\n    onopen() {\n        // clear old subs\n        this.cleanup();\n        // mark as open\n        this._readyState = \"open\";\n        this.emitReserved(\"open\");\n        // add new subs\n        const socket = this.engine;\n        this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), \n        // @ts-ignore\n        on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n    }\n    /**\n     * Called upon a ping.\n     *\n     * @private\n     */\n    onping() {\n        this.emitReserved(\"ping\");\n    }\n    /**\n     * Called with data.\n     *\n     * @private\n     */\n    ondata(data) {\n        try {\n            this.decoder.add(data);\n        }\n        catch (e) {\n            this.onclose(\"parse error\", e);\n        }\n    }\n    /**\n     * Called when parser fully decodes a packet.\n     *\n     * @private\n     */\n    ondecoded(packet) {\n        // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n        nextTick(() => {\n            this.emitReserved(\"packet\", packet);\n        }, this.setTimeoutFn);\n    }\n    /**\n     * Called upon socket error.\n     *\n     * @private\n     */\n    onerror(err) {\n        this.emitReserved(\"error\", err);\n    }\n    /**\n     * Creates a new socket for the given `nsp`.\n     *\n     * @return {Socket}\n     * @public\n     */\n    socket(nsp, opts) {\n        let socket = this.nsps[nsp];\n        if (!socket) {\n            socket = new Socket(this, nsp, opts);\n            this.nsps[nsp] = socket;\n        }\n        else if (this._autoConnect && !socket.active) {\n            socket.connect();\n        }\n        return socket;\n    }\n    /**\n     * Called upon a socket close.\n     *\n     * @param socket\n     * @private\n     */\n    _destroy(socket) {\n        const nsps = Object.keys(this.nsps);\n        for (const nsp of nsps) {\n            const socket = this.nsps[nsp];\n            if (socket.active) {\n                return;\n            }\n        }\n        this._close();\n    }\n    /**\n     * Writes a packet.\n     *\n     * @param packet\n     * @private\n     */\n    _packet(packet) {\n        const encodedPackets = this.encoder.encode(packet);\n        for (let i = 0; i < encodedPackets.length; i++) {\n            this.engine.write(encodedPackets[i], packet.options);\n        }\n    }\n    /**\n     * Clean up transport subscriptions and packet buffer.\n     *\n     * @private\n     */\n    cleanup() {\n        this.subs.forEach((subDestroy) => subDestroy());\n        this.subs.length = 0;\n        this.decoder.destroy();\n    }\n    /**\n     * Close the current socket.\n     *\n     * @private\n     */\n    _close() {\n        this.skipReconnect = true;\n        this._reconnecting = false;\n        this.onclose(\"forced close\");\n    }\n    /**\n     * Alias for close()\n     *\n     * @private\n     */\n    disconnect() {\n        return this._close();\n    }\n    /**\n     * Called when:\n     *\n     * - the low-level engine is closed\n     * - the parser encountered a badly formatted packet\n     * - all sockets are disconnected\n     *\n     * @private\n     */\n    onclose(reason, description) {\n        var _a;\n        this.cleanup();\n        (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n        this.backoff.reset();\n        this._readyState = \"closed\";\n        this.emitReserved(\"close\", reason, description);\n        if (this._reconnection && !this.skipReconnect) {\n            this.reconnect();\n        }\n    }\n    /**\n     * Attempt a reconnection.\n     *\n     * @private\n     */\n    reconnect() {\n        if (this._reconnecting || this.skipReconnect)\n            return this;\n        const self = this;\n        if (this.backoff.attempts >= this._reconnectionAttempts) {\n            this.backoff.reset();\n            this.emitReserved(\"reconnect_failed\");\n            this._reconnecting = false;\n        }\n        else {\n            const delay = this.backoff.duration();\n            this._reconnecting = true;\n            const timer = this.setTimeoutFn(() => {\n                if (self.skipReconnect)\n                    return;\n                this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n                // check again for the case socket closed in above events\n                if (self.skipReconnect)\n                    return;\n                self.open((err) => {\n                    if (err) {\n                        self._reconnecting = false;\n                        self.reconnect();\n                        this.emitReserved(\"reconnect_error\", err);\n                    }\n                    else {\n                        self.onreconnect();\n                    }\n                });\n            }, delay);\n            if (this.opts.autoUnref) {\n                timer.unref();\n            }\n            this.subs.push(() => {\n                this.clearTimeoutFn(timer);\n            });\n        }\n    }\n    /**\n     * Called upon successful reconnect.\n     *\n     * @private\n     */\n    onreconnect() {\n        const attempt = this.backoff.attempts;\n        this._reconnecting = false;\n        this.backoff.reset();\n        this.emitReserved(\"reconnect\", attempt);\n    }\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n    if (typeof uri === \"object\") {\n        opts = uri;\n        uri = undefined;\n    }\n    opts = opts || {};\n    const parsed = url(uri, opts.path || \"/socket.io\");\n    const source = parsed.source;\n    const id = parsed.id;\n    const path = parsed.path;\n    const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n    const newConnection = opts.forceNew ||\n        opts[\"force new connection\"] ||\n        false === opts.multiplex ||\n        sameNamespace;\n    let io;\n    if (newConnection) {\n        io = new Manager(source, opts);\n    }\n    else {\n        if (!cache[id]) {\n            cache[id] = new Manager(source, opts);\n        }\n        io = cache[id];\n    }\n    if (parsed.query && !opts.query) {\n        opts.query = parsed.queryKey;\n    }\n    return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n    Manager,\n    Socket,\n    io: lookup,\n    connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\nexport { Fetch, NodeXHR, XHR, NodeWebSocket, WebSocket, WebTransport, } from \"engine.io-client\";\n","/*\nCopyright (c) 2022-2025 Subfork. All rights reserved.\n*/\n\nimport { io } from \"socket.io-client\";\n\n// define some constants\nconst version = \"0.2.0\";\nconst api_version = \"api\";\nconst event_url = \"https://events.subfork.com\";\nconst wait_time = 100;\n\n// define some variables\n// TODO: support multiple connections\nvar socket;\n\n// waits for condition to be true\nfunction wait_for(condition, callback) {\n    if(!condition()) {\n        window.setTimeout(wait_for.bind(null, condition, callback), wait_time);\n    } else {\n        callback();\n    };\n};\n\n// returns a full api url\nfunction _build_url(endpoint, apiBase) {\n    const base = (apiBase || window.location.origin).replace(/\\/+$/, \"\");\n    const api = String(api_version).replace(/^\\/+|\\/+$/g, \"\");\n    const tail = String(endpoint).replace(/^\\/+/, \"\");\n    let url = `${base}/${api}/${tail}`;\n    return url;\n};\n\n/*\npost request to server:\nif a callback is provided, it will be invoked with the parsed JSON response.\nalways returns a Promise that resolves to the response object.\n*/\nfunction post_request(url, data = {}, callback = null) {\n    return fetch(url, {\n        method: \"POST\",\n        credentials: \"include\",\n        headers: {\n            \"Content-Type\": \"application/json; charset=utf-8\",\n            \"Accept\": \"application/json\",\n        },\n        body: JSON.stringify(data ?? {}),\n    })\n    .then(async (resp) => {\n        let json;\n        try {\n            json = await resp.json();\n        } catch (e) {\n            json = { success: false, error: \"bad json\", status: resp.status };\n        }\n\n        // If server returned non-2xx, keep it visible to callers.\n        if (!resp.ok && (json && typeof json.success === \"undefined\")) {\n            json.success = false;\n            json.status = resp.status;\n        }\n\n        if (callback) callback(json);\n        return json;\n    })\n    .catch((e) => {\n        const err = { success: false, error: String(e) };\n        if (callback) callback(err);\n        return err;\n    });\n};\n\n/*\ndatatype class - represents a data collection\n*/\nclass Datatype {\n    constructor(name, conn) {\n        this.name = name;\n        this.conn = conn;\n    }\n    // create a new data row\n    create(data, callback=null) {\n        let row_data = {\n            \"collection\": this.name,\n            \"data\": data,\n            \"version\": version,\n        };\n        let url = this.conn.build_url(\"data/create\");\n        return post_request(url, row_data, callback);\n    }\n    // delete data rows matching params\n    delete(params, callback=null) {\n        let data = {\n            \"collection\": this.name,\n            \"params\": params,\n            \"version\": version,\n        };\n        let url = this.conn.build_url(\"data/delete\");\n        return post_request(url, data, callback);\n    }\n    // find data rows matching params\n    find(params, callback=null, expand=false) {\n        let data = {\n            \"collection\": this.name,\n            \"expand\": expand,\n            \"params\": params,\n            \"version\": version,\n        };\n        let url = this.conn.build_url(\"data/get\");\n        return post_request(url, data, callback);\n    }\n    // update a data row by id\n    update(id, data, callback=null) {\n        let row_data = {\n            \"collection\": this.name,\n            \"id\": id,\n            \"data\": data,\n            \"version\": version,\n        };\n        let url = this.conn.build_url(\"data/update\");\n        return post_request(url, row_data, callback);\n    }\n};\n\n/*\nevent class - used in event callbacks\n*/\nclass SubforkEvent {\n    constructor(event_name, event_data, conn) {\n        this.name = event_name;\n        this.type = event_data.type;\n        this.message = event_data.message;\n        this.event_data = event_data;\n        this.conn = conn;\n    }\n    data() {\n        if (this.type == \"data\") {\n            return new Datatype(this.name, this.conn);\n        }\n    }\n    task() {\n        if (this.type == \"task\") {\n            let queue = new SubforkTaskQueue(this.conn, this.event_data.queue);\n            return new SubforkTask(queue, this.event_data.task);\n        }\n    }\n    user() {\n        if (this.type == \"user\") {\n            return new SubforkUser(this.event_data.user);\n        }\n    }\n};\n\n/*\ntask class - represents a task in a task queue\n*/\nclass SubforkTask {\n    constructor(queue, data) {\n        this.queue = queue;\n        this.data = data;\n    }\n    get_error() {\n        return this.data.error;\n    }\n    get_results() {\n        try {\n            return JSON.parse(this.data.results);\n        } catch {\n            return this.data.results;\n        };\n    }\n    // TODO: hash the event signature\n    on(event_name, callback) {\n        return this.queue.on(event_name, callback);\n    }\n};\n\n/*\ntask queue class - represents a task queue\n*/\nclass SubforkTaskQueue {\n    constructor(conn, name) {\n        this.conn = conn;\n        this.name = name;\n    }\n    // create and enqueue new task\n    create(data) {\n        var t = new SubforkTask(this, data);\n        if (this.enqueue(t)) {\n            return t;\n        }\n    }\n    // enqueue a task\n    enqueue(task, callback=null) {\n        let data = {\n            \"queue\": this.name,\n            \"data\": task.data,\n            \"version\": version,\n        };\n        let url = this.conn.build_url(\"task/create\");\n        return post_request(url, data, callback);\n    }\n    // find and return a task by id\n    get(taskid, callback=null) {\n        let data = {\n            \"queue\": this.name,\n            \"taskid\": taskid,\n            \"version\": version,\n        };\n        let url = this.conn.build_url(\"task/get\");\n        return post_request(url, data, (resp) => {\n            if (!resp || !resp.success) {\n                if (callback) callback(null, resp);\n                return;\n            }\n            const task = new SubforkTask(this, resp.data);\n            if (callback) callback(task, resp);\n        }).then((resp) => {\n            if (resp && resp.success) return new SubforkTask(this, resp.data);\n            return null;\n        });\n    }\n    // listen for task events\n    on(event_name, callback) {\n        if (!socket) { console.error(\"Socket is not initialized\"); return false; }\n        const sig = `task:${this.name}:${event_name}`;\n        console.debug(\"listening for event\", sig);\n        socket.on(sig, (event_data) => {\n            const event = new SubforkEvent(event_name, event_data, this.conn);\n            callback(event);\n        });\n        return true;\n    }\n};\n\n/*\nuser class - represents a user\n*/\nclass SubforkUser {\n    constructor(data) {\n        this.data = data;\n    }\n    get(key) {\n        return this.data[key];\n    }\n};\n\n/*\nsimple cache for datatypes, users, and task queues\n*/\nclass SubforkCache {\n    constructor(parent) {\n        this.parent = parent;\n        this._cache = {};\n    }\n    // type is one of: data, user, task\n    add(type, name, value) {\n        if (!(type in this._cache)) {\n            this._cache[type] = {};\n        };\n        this._cache[type][name] = value;\n    }\n    // clear all cached items\n    clear() {\n        Object.keys(this._cache).forEach(key => {\n            delete this._cache[key];\n        });\n    }\n    // remove a cached item\n    del(type, name) {\n        if (type in this._cache && name in this._cache[type]) {\n            delete this._cache[type][name];\n        }\n    }\n    // get a cached item\n    get(type, name) {\n        if (type in this._cache && name in this._cache[type]) {\n            return this._cache[type][name];\n        };\n    }\n    // update a cached item\n    update(type, other) {\n        if (!(type in this._cache)) {\n            this._cache[type] = {};\n        };\n        Object.assign(this._cache[type], other);\n    }\n};\n\n/*\nmain Subfork client class\n*/\nclass Subfork {\n    constructor(config={}) {\n        this.cache = new SubforkCache(this);\n        this.session = {};\n        this.set_config(config);\n        this.connect();\n    }\n    // checks config values for default overrides\n    set_config(config) {\n        this.config = config;\n        this.config.host = this.config.host ?? window.location.hostname;\n        this.config.port = this.config.port ?? window.location.port;\n        this.config.apiBase = this.config.apiBase ?? window.location.origin;\n        this.config.eventsUrl = this.config.eventsUrl ?? event_url;\n    }\n    // build a full api url\n    build_url(endpoint) {\n        return _build_url(endpoint, this.config.apiBase);\n    }\n    // connect to event server with session token\n    async connect() {\n        this.session = await this.get_session_data();\n        console.debug(\"session\", this.session);\n\n        const token = this.session && this.session.token;\n        if (!token) {\n            console.warn(\"No token was found in session; skipping WS connect\");\n            return false;\n        }\n\n        socket = io(this.config.eventsUrl, {\n            transports: [\"websocket\"],\n            path: \"/socket.io\",\n            auth: { token },\n            withCredentials: true\n        });\n\n        socket.on(\"connect\", () => console.debug(\"WS connected\", socket.id));\n        socket.on(\"connect_error\", (err) =>\n            console.error(\"WS connect_error:\", (err && err.message) || err)\n        );\n        return true;\n    }\n    // get session data from the server (synchronous)\n    async get_session_data(callback=null) {\n        let data = {\"source\": this.config.host, \"version\": api_version};\n        let url = this.build_url(\"session\");\n        return post_request(url, data, (resp) => {\n            if (resp && resp.success && resp.data) {\n                if (callback) callback(resp.data, resp);\n            } else {\n                console.error(resp && resp.error);\n                if (callback) callback(null, resp);\n            }\n        }).then((resp) => (resp && resp.success && resp.data) ? resp.data : {});\n    };\n    // datatype accessor - get or create a datatype\n    data(name) {\n        if (!(this.cache.get(\"data\", name))) {\n            this.cache.add(\"data\", name, new Datatype(name, this));\n        };\n        return this.cache.get(\"data\", name);\n    }\n    // return true if connected to event server\n    is_connected() {\n        return !!(socket && socket.connected);\n    }\n    // on ready wait for socket connection\n    ready(callback) {\n        wait_for(() => socket && socket.connected, () => callback());\n    }\n    // task queue accessor - get or create a task queue\n    task(name) {\n        if (!(this.cache.get(\"task\", name))) {\n            var q = new SubforkTaskQueue(this, name);\n            this.cache.add(\"task\", name, q);\n        };\n        return this.cache.get(\"task\", name);\n    }\n    // user accessor - get user data by username (synchronous)\n    user(username, callback=null) {\n        // If cached, return it (and callback immediately if provided).\n        const cached = this.cache.get(\"user\", username);\n        if (cached) {\n            if (callback) callback(cached, { success: true, data: cached.data });\n            return Promise.resolve(cached);\n        }\n\n        let data = {\n            \"username\": username,\n            \"version\": version,\n        };\n        let url = this.build_url(\"user/get\");\n\n        return post_request(url, data, (resp) => {\n            if (resp && resp.success) {\n                const user = new SubforkUser(resp.data);\n                this.cache.add(\"user\", username, user);\n                if (callback) callback(user, resp);\n            } else {\n                if (callback) callback(null, resp);\n            }\n        }).then((resp) => {\n            if (resp && resp.success) {\n                const user = new SubforkUser(resp.data);\n                this.cache.add(\"user\", username, user);\n                return user;\n            }\n            return null;\n        });\n    }\n};\n\nexport default Subfork;\n"],"names":["PACKET_TYPES","PACKET_TYPES_REVERSE","key","ERROR_PACKET","withNativeBlob","withNativeArrayBuffer","isView","obj","encodePacket","type","data","supportsBinary","callback","encodeBlobAsBase64","fileReader","content","toArray","TEXT_ENCODER","encodePacketToBinary","packet","encoded","chars","lookup","i","decode","base64","bufferLength","len","p","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","decodePacket","encodedPacket","binaryType","mapBinary","decodeBase64Packet","decoded","SEPARATOR","encodePayload","packets","length","encodedPackets","count","decodePayload","encodedPayload","decodedPacket","createPacketEncoderStream","controller","payloadLength","header","view","TEXT_DECODER","totalLength","chunks","acc","chunk","concatChunks","size","buffer","j","createPacketDecoderStream","maxPayload","state","expectedLength","isBinary","headerArray","n","protocol","Emitter","mixin","event","fn","on","callbacks","cb","args","nextTick","setTimeoutFn","globalThisShim","defaultBinaryType","pick","attr","k","NATIVE_SET_TIMEOUT","globalThis","NATIVE_CLEAR_TIMEOUT","installTimerFunctions","opts","BASE64_OVERHEAD","byteLength","utf8Length","str","c","l","randomString","encode","qs","qry","pairs","pair","TransportError","reason","description","context","Transport","details","onPause","schema","query","hostname","encodedQuery","Polling","pause","total","close","value","hasCORS","empty","BaseXHR","isSSL","port","req","xhrStatus","Request","createRequest","uri","_a","xhr","e","err","fromError","unloadHandler","terminationEvent","hasXHR2","newRequest","XHR","forceBase64","xdomain","isReactNative","BaseWS","protocols","closeEvent","ev","lastPacket","WebSocketCtor","WS","_packet","WT","stream","decoderStream","reader","encoderStream","read","done","transports","re","parts","parse","src","b","m","pathNames","queryKey","path","regx","names","$0","$1","$2","withEventListeners","OFFLINE_EVENT_LISTENERS","listener","SocketWithoutUpgrade","parsedUri","t","transportName","name","transport","delay","payloadSize","hasExpired","msg","options","cleanupAndClose","waitForUpgrade","SocketWithUpgrade","failed","onTransportOpen","cleanup","freezeTransport","onerror","error","onTransportClose","onclose","onupgrade","to","upgrades","filteredUpgrades","o","DEFAULT_TRANSPORTS","url","loc","host","toString","withNativeFile","hasBinary","toJSON","deconstructPacket","buffers","packetData","pack","_deconstructPacket","placeholder","newData","reconstructPacket","_reconstructPacket","RESERVED_EVENTS","PacketType","Encoder","replacer","deconstruction","isObject","Decoder","reviver","isBinaryEvent","BinaryReconstructor","start","buf","next","payload","binData","Socket","io","nsp","_b","_c","id","ack","isTransportWritable","isConnected","timeout","timer","resolve","reject","arg1","arg2","responseArgs","force","listeners","self","sent","pid","subDestroy","compress","Backoff","ms","rand","deviation","min","max","jitter","Manager","_parser","parser","v","Engine","socket","openSubDestroy","onError","errorSub","nsps","attempt","cache","parsed","source","sameNamespace","newConnection","version","api_version","event_url","wait_time","wait_for","condition","_build_url","endpoint","apiBase","base","api","tail","post_request","resp","json","Datatype","conn","row_data","params","expand","SubforkEvent","event_name","event_data","queue","SubforkTaskQueue","SubforkTask","SubforkUser","task","taskid","sig","SubforkCache","parent","other","Subfork","config","token","q","username","cached","user"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}