From 21a6e1219add92157c5442537d24fbe1129a50f5 Mon Sep 17 00:00:00 2001 From: iifawzi Date: Sat, 15 Oct 2022 22:06:30 +0200 Subject: [PATCH 01/21] feat: add the "addTrailingSlash" option (#694) The "addTrailingSlash" option allows to control whether a trailing slash is added to the path of the HTTP requests created by the library: - true (default): "/engine.io/" - false: "/engine.io" Related: https://github.com/socketio/socket.io-client/issues/1550 Signed-off-by: iifawzi --- lib/socket.ts | 11 ++++++++++- test/engine.io-client.js | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/socket.ts b/lib/socket.ts index 90b4840ab..91f2d7862 100644 --- a/lib/socket.ts +++ b/lib/socket.ts @@ -206,6 +206,12 @@ export interface SocketOptions { */ path: string; + /** + * Whether we should add a trailing slash to the request path. + * @default true + */ + addTrailingSlash: boolean; + /** * Either a single protocol string or an array of protocol strings. These strings are used to indicate sub-protocols, * so that a single server can implement multiple WebSocket sub-protocols (for example, you might want one server to @@ -323,6 +329,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { upgrade: true, timestampParam: "t", rememberUpgrade: false, + addTrailingSlash: true, rejectUnauthorized: true, perMessageDeflate: { threshold: 1024 @@ -333,7 +340,9 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { opts ); - this.opts.path = this.opts.path.replace(/\/$/, "") + "/"; + this.opts.path = + this.opts.path.replace(/\/$/, "") + + (this.opts.addTrailingSlash ? "/" : ""); if (typeof this.opts.query === "string") { this.opts.query = decode(this.opts.query); diff --git a/test/engine.io-client.js b/test/engine.io-client.js index 1d7677dd0..b4a290043 100644 --- a/test/engine.io-client.js +++ b/test/engine.io-client.js @@ -58,6 +58,12 @@ describe("engine.io-client", () => { expect(client.port).to.be("8080"); }); + it("should properly handle the addTrailingSlash option", () => { + const client = new Socket({ host: "localhost", addTrailingSlash: false }); + expect(client.hostname).to.be("localhost"); + expect(client.opts.path).to.be("/engine.io"); + }); + it("should properly parse an IPv6 uri without port", () => { const client = new Socket("http://[::1]"); expect(client.hostname).to.be("::1"); From 824ab4cdd8071f86740199a55cd97e64028b2f05 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Fri, 9 Dec 2022 09:36:46 +0100 Subject: [PATCH 02/21] chore: bump ws to version 8.11.0 Diff: https://github.com/websockets/ws/compare/8.2.3...8.11.0 --- package-lock.json | 46 +++++++++++++++++++++++++++++++++++++--------- package.json | 2 +- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 763eacd9a..d24347fd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "engine.io-client", - "version": "6.2.2", + "version": "6.2.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "engine.io-client", - "version": "6.2.2", + "version": "6.2.3", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3", + "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" }, "devDependencies": { @@ -4426,6 +4426,27 @@ "node": ">= 0.6" } }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/enhanced-resolve": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", @@ -12739,9 +12760,9 @@ } }, "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "engines": { "node": ">=10.0.0" }, @@ -17028,6 +17049,13 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "dev": true, + "requires": {} } } }, @@ -23846,9 +23874,9 @@ "dev": true }, "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "requires": {} }, "xml2js": { diff --git a/package.json b/package.json index 5abe6c0ff..0b4642af4 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3", + "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" }, "devDependencies": { From 6565c8e9569f3c54f4694b1049dd4833a6ecda5e Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Tue, 13 Dec 2022 15:29:20 +0100 Subject: [PATCH 03/21] ci: temporarily disable browser tests The tests are in failure since the 13th November, without any logs from Saucelabs, so we temporarily disable them until further investigation. See: https://github.com/socketio/engine.io-client/actions/runs/3453198221 --- .github/workflows/ci.yml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee626d3c3..e9ba96264 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,22 +24,3 @@ jobs: - run: npm test env: CI: true - - test-browser: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js - uses: actions/setup-node@v1 - with: - node-version: '10.x' - - run: npm ci - - run: npm test - env: - CI: true - BROWSERS: 1 - NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }} - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - timeout-minutes: 20 From 721837c2c90884b20a1e0ca36c77025770920b83 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Tue, 13 Dec 2022 15:33:39 +0100 Subject: [PATCH 04/21] ci: update the versions of actions/checkout and actions/setup-node Reference: https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/ --- .github/workflows/ci.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e9ba96264..f7a34e8e6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,12 +15,16 @@ jobs: node-version: [14, 16] steps: - - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm test - env: - CI: true + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test From 528a61f86f71a994278111b719d5845adf125026 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Tue, 13 Dec 2022 15:36:28 +0100 Subject: [PATCH 05/21] refactor: bump prettier to version 2.8.1 This major bump creates a lot of noise, but it is necessary for prettier to be able to parse new syntax such as: - typed imports: `import { type xxx } from ...` - private attributes: `class A { #b; #c() {} }` --- lib/socket.ts | 16 ++--- lib/transports/index.ts | 2 +- lib/transports/polling.ts | 14 ++-- .../websocket-constructor.browser.ts | 2 +- lib/transports/websocket.ts | 12 ++-- package-lock.json | 19 +++--- package.json | 2 +- support/prod.config.js | 10 +-- support/rollup.config.esm.js | 8 +-- support/rollup.config.umd.js | 14 ++-- support/webpack.config.js | 14 ++-- test/arraybuffer/polling.js | 16 ++--- test/arraybuffer/ws.js | 14 ++-- test/binary-fallback.js | 6 +- test/blob/polling.js | 14 ++-- test/blob/ws.js | 16 ++--- test/connection.js | 36 +++++----- test/fixtures/no-unref.js | 2 +- test/fixtures/unref-polling-only.js | 2 +- test/fixtures/unref-websocket-only.js | 2 +- test/fixtures/unref.js | 2 +- test/node.js | 12 ++-- test/socket.js | 40 +++++------ test/support/env.js | 2 +- test/support/public/worker.js | 2 +- test/support/server.js | 10 +-- test/transport.js | 66 +++++++++---------- test/util.js | 2 +- test/xmlhttprequest.js | 22 +++---- 29 files changed, 191 insertions(+), 188 deletions(-) diff --git a/lib/socket.ts b/lib/socket.ts index 91f2d7862..bd6acf8d1 100644 --- a/lib/socket.ts +++ b/lib/socket.ts @@ -332,10 +332,10 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { addTrailingSlash: true, rejectUnauthorized: true, perMessageDeflate: { - threshold: 1024 + threshold: 1024, }, transportOptions: {}, - closeOnBeforeunload: true + closeOnBeforeunload: true, }, opts ); @@ -374,7 +374,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { if (this.hostname !== "localhost") { this.offlineEventListener = () => { this.onClose("transport close", { - description: "network connection lost" + description: "network connection lost", }); }; addEventListener("offline", this.offlineEventListener, false); @@ -413,7 +413,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { socket: this, hostname: this.hostname, secure: this.secure, - port: this.port + port: this.port, } ); @@ -481,7 +481,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { .on("drain", this.onDrain.bind(this)) .on("packet", this.onPacket.bind(this)) .on("error", this.onError.bind(this)) - .on("close", reason => this.onClose("transport close", reason)); + .on("close", (reason) => this.onClose("transport close", reason)); } /** @@ -502,7 +502,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { debug('probe transport "%s" opened', name); transport.send([{ type: "ping", data: "probe" }]); - transport.once("packet", msg => { + transport.once("packet", (msg) => { if (failed) return; if ("pong" === msg.type && "probe" === msg.data) { debug('probe transport "%s" pong', name); @@ -549,7 +549,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { } // Handle any error that happens while probing - const onerror = err => { + const onerror = (err) => { const error = new Error("probe error: " + err); // @ts-ignore error.transport = transport.name; @@ -828,7 +828,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { const packet = { type: type, data: data, - options: options + options: options, }; this.emitReserved("packetCreate", packet); this.writeBuffer.push(packet); diff --git a/lib/transports/index.ts b/lib/transports/index.ts index e9578529c..67249819f 100755 --- a/lib/transports/index.ts +++ b/lib/transports/index.ts @@ -3,5 +3,5 @@ import { WS } from "./websocket.js"; export const transports = { websocket: WS, - polling: Polling + polling: Polling, }; diff --git a/lib/transports/polling.ts b/lib/transports/polling.ts index 996431fae..217637f78 100644 --- a/lib/transports/polling.ts +++ b/lib/transports/polling.ts @@ -13,9 +13,9 @@ const debug = debugModule("engine.io-client:polling"); // debug() function empty() {} -const hasXHR2 = (function() { +const hasXHR2 = (function () { const xhr = new XMLHttpRequest({ - xdomain: false + xdomain: false, }); return null != xhr.responseType; })(); @@ -96,7 +96,7 @@ export class Polling extends Transport { if (this.polling) { debug("we are currently polling - waiting to pause"); total++; - this.once("pollComplete", function() { + this.once("pollComplete", function () { debug("pre-pause polling complete"); --total || pause(); }); @@ -105,7 +105,7 @@ export class Polling extends Transport { if (!this.writable) { debug("we are currently writing - waiting to pause"); total++; - this.once("drain", function() { + this.once("drain", function () { debug("pre-pause writing complete"); --total || pause(); }); @@ -134,7 +134,7 @@ export class Polling extends Transport { */ onData(data) { debug("polling got data %s", data); - const callback = packet => { + const callback = (packet) => { // if its the first message we consider the transport open if ("opening" === this.readyState && packet.type === "open") { this.onOpen(); @@ -199,7 +199,7 @@ export class Polling extends Transport { write(packets) { this.writable = false; - encodePayload(packets, data => { + encodePayload(packets, (data) => { this.doWrite(data, () => { this.writable = true; this.emitReserved("drain"); @@ -269,7 +269,7 @@ export class Polling extends Transport { doWrite(data, fn) { const req = this.request({ method: "POST", - data: data + data: data, }); req.on("success", fn); req.on("error", (xhrStatus, context) => { diff --git a/lib/transports/websocket-constructor.browser.ts b/lib/transports/websocket-constructor.browser.ts index f103edf9b..99716d006 100644 --- a/lib/transports/websocket-constructor.browser.ts +++ b/lib/transports/websocket-constructor.browser.ts @@ -4,7 +4,7 @@ export const nextTick = (() => { const isPromiseAvailable = typeof Promise === "function" && typeof Promise.resolve === "function"; if (isPromiseAvailable) { - return cb => Promise.resolve().then(cb); + return (cb) => Promise.resolve().then(cb); } else { return (cb, setTimeoutFn) => setTimeoutFn(cb, 0); } diff --git a/lib/transports/websocket.ts b/lib/transports/websocket.ts index a888efa90..c9029f391 100644 --- a/lib/transports/websocket.ts +++ b/lib/transports/websocket.ts @@ -6,7 +6,7 @@ import { defaultBinaryType, nextTick, usingBrowserWebSocket, - WebSocket + WebSocket, } from "./websocket-constructor.js"; import debugModule from "debug"; // debug() import { encodePacket } from "engine.io-parser"; @@ -111,13 +111,13 @@ export class WS extends Transport { } this.onOpen(); }; - this.ws.onclose = closeEvent => + this.ws.onclose = (closeEvent) => this.onClose({ description: "websocket connection closed", - context: closeEvent + context: closeEvent, }); - this.ws.onmessage = ev => this.onData(ev.data); - this.ws.onerror = e => this.onError("websocket error", e); + this.ws.onmessage = (ev) => this.onData(ev.data); + this.ws.onerror = (e) => this.onError("websocket error", e); } /** @@ -135,7 +135,7 @@ export class WS extends Transport { const packet = packets[i]; const lastPacket = i === packets.length - 1; - encodePacket(packet, this.supportsBinary, data => { + encodePacket(packet, this.supportsBinary, (data) => { // always create a new object (GH-437) const opts: { compress?: boolean } = {}; if (!usingBrowserWebSocket) { diff --git a/package-lock.json b/package-lock.json index d24347fd0..a1e2c50ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "expect.js": "^0.3.1", "express": "^4.17.1", "mocha": "^3.2.0", - "prettier": "^1.19.1", + "prettier": "^2.8.1", "rollup": "^2.58.0", "rollup-plugin-terser": "^7.0.2", "socket.io-browsers": "~1.0.4", @@ -9665,15 +9665,18 @@ } }, "node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/process": { @@ -21309,9 +21312,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz", + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==", "dev": true }, "process": { diff --git a/package.json b/package.json index 0b4642af4..cd6cbd9e9 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "expect.js": "^0.3.1", "express": "^4.17.1", "mocha": "^3.2.0", - "prettier": "^1.19.1", + "prettier": "^2.8.1", "rollup": "^2.58.0", "rollup-plugin-terser": "^7.0.2", "socket.io-browsers": "~1.0.4", diff --git a/support/prod.config.js b/support/prod.config.js index 907f4706c..9f4704e1f 100644 --- a/support/prod.config.js +++ b/support/prod.config.js @@ -4,7 +4,7 @@ module.exports = { ...config, output: { ...config.output, - filename: "engine.io.min.js" + filename: "engine.io.min.js", }, mode: "production", module: { @@ -12,8 +12,8 @@ module.exports = { ...config.module.rules, { test: /\.js$/, - loader: "webpack-remove-debug" - } - ] - } + loader: "webpack-remove-debug", + }, + ], + }, }; diff --git a/support/rollup.config.esm.js b/support/rollup.config.esm.js index ee2e86a2e..f64ac8078 100644 --- a/support/rollup.config.esm.js +++ b/support/rollup.config.esm.js @@ -16,12 +16,12 @@ module.exports = { format: "esm", sourcemap: true, plugins: [terser()], - banner + banner, }, plugins: [ nodeResolve({ - browser: true + browser: true, }), - commonjs() - ] + commonjs(), + ], }; diff --git a/support/rollup.config.umd.js b/support/rollup.config.umd.js index 604a93960..affbec66e 100644 --- a/support/rollup.config.umd.js +++ b/support/rollup.config.umd.js @@ -18,7 +18,7 @@ module.exports = { format: "umd", name: "eio", sourcemap: true, - banner + banner, }, { file: "./dist/engine.io.min.js", @@ -26,18 +26,18 @@ module.exports = { name: "eio", sourcemap: true, plugins: [terser()], - banner - } + banner, + }, ], plugins: [ nodeResolve({ - browser: true + browser: true, }), commonjs(), babel({ babelHelpers: "bundled", presets: [["@babel/env"]], - plugins: ["@babel/plugin-transform-object-assign"] - }) - ] + plugins: ["@babel/plugin-transform-object-assign"], + }), + ], }; diff --git a/support/webpack.config.js b/support/webpack.config.js index 15d0f0e05..123b0960d 100644 --- a/support/webpack.config.js +++ b/support/webpack.config.js @@ -11,7 +11,7 @@ module.exports = { filename: "engine.io.js", library: "eio", libraryTarget: "umd", - globalObject: "self" + globalObject: "self", }, mode: "development", node: false, @@ -23,11 +23,11 @@ module.exports = { loader: "babel-loader", options: { presets: ["@babel/preset-env"], - plugins: ["@babel/plugin-transform-object-assign"] - } - } - } - ] + plugins: ["@babel/plugin-transform-object-assign"], + }, + }, + }, + ], }, - plugins: [new BannerPlugin(banner)] + plugins: [new BannerPlugin(banner)], }; diff --git a/test/arraybuffer/polling.js b/test/arraybuffer/polling.js index 8b48d1ff7..b182adc7b 100644 --- a/test/arraybuffer/polling.js +++ b/test/arraybuffer/polling.js @@ -2,10 +2,10 @@ const expect = require("expect.js"); const { Socket } = require("../../"); const { repeat } = require("../util"); -describe("arraybuffer", function() { +describe("arraybuffer", function () { this.timeout(30000); - it("should be able to receive binary data when bouncing it back (polling)", done => { + it("should be able to receive binary data when bouncing it back (polling)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -14,7 +14,7 @@ describe("arraybuffer", function() { socket.binaryType = "arraybuffer"; socket.on("open", () => { socket.send(binaryData); - socket.on("message", data => { + socket.on("message", (data) => { if (data === "hi") return; expect(data).to.be.an(ArrayBuffer); @@ -25,7 +25,7 @@ describe("arraybuffer", function() { }); }); - it("should be able to receive binary data and a multibyte utf-8 string (polling)", done => { + it("should be able to receive binary data and a multibyte utf-8 string (polling)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -37,7 +37,7 @@ describe("arraybuffer", function() { socket.on("open", () => { socket.send(binaryData); socket.send("cash money €€€"); - socket.on("message", data => { + socket.on("message", (data) => { if (data === "hi") return; if (msg === 0) { @@ -53,7 +53,7 @@ describe("arraybuffer", function() { }); }); - it("should be able to receive binary data when forcing base64 (polling)", done => { + it("should be able to receive binary data when forcing base64 (polling)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -62,7 +62,7 @@ describe("arraybuffer", function() { socket.binaryType = "arraybuffer"; socket.on("open", () => { socket.send(binaryData); - socket.on("message", data => { + socket.on("message", (data) => { if (typeof data === "string") return; expect(data).to.be.an(ArrayBuffer); @@ -74,7 +74,7 @@ describe("arraybuffer", function() { }); }); - it("should merge binary packets according to maxPayload value", done => { + it("should merge binary packets according to maxPayload value", (done) => { const socket = new Socket({ transports: ["polling"] }); socket.on("open", () => { socket.send(new Uint8Array(72)); diff --git a/test/arraybuffer/ws.js b/test/arraybuffer/ws.js index 86408174d..ddefc7906 100644 --- a/test/arraybuffer/ws.js +++ b/test/arraybuffer/ws.js @@ -1,10 +1,10 @@ const expect = require("expect.js"); const eio = require("../../"); -describe("arraybuffer", function() { +describe("arraybuffer", function () { this.timeout(30000); - it("should be able to receive binary data when bouncing it back (ws)", done => { + it("should be able to receive binary data when bouncing it back (ws)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -14,7 +14,7 @@ describe("arraybuffer", function() { socket.on("open", () => { socket.on("upgrade", () => { socket.send(binaryData); - socket.on("message", data => { + socket.on("message", (data) => { if (typeof data === "string") return; expect(data).to.be.an(ArrayBuffer); @@ -27,7 +27,7 @@ describe("arraybuffer", function() { }); }); - it("should be able to receive binary data and a multibyte utf-8 string (ws)", done => { + it("should be able to receive binary data and a multibyte utf-8 string (ws)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -40,7 +40,7 @@ describe("arraybuffer", function() { socket.on("upgrade", () => { socket.send(binaryData); socket.send("cash money €€€"); - socket.on("message", data => { + socket.on("message", (data) => { if (data === "hi") return; if (msg === 0) { @@ -57,7 +57,7 @@ describe("arraybuffer", function() { }); }); - it("should be able to receive binary data when bouncing it back and forcing base64 (ws)", done => { + it("should be able to receive binary data when bouncing it back and forcing base64 (ws)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -67,7 +67,7 @@ describe("arraybuffer", function() { socket.on("open", () => { socket.on("upgrade", () => { socket.send(binaryData); - socket.on("message", data => { + socket.on("message", (data) => { if (typeof data === "string") return; expect(data).to.be.an(ArrayBuffer); diff --git a/test/binary-fallback.js b/test/binary-fallback.js index 7255c2b7b..89711e35a 100644 --- a/test/binary-fallback.js +++ b/test/binary-fallback.js @@ -1,15 +1,15 @@ const expect = require("expect.js"); const eio = require("../"); -describe("binary fallback", function() { +describe("binary fallback", function () { this.timeout(10000); - it("should be able to receive binary data when ArrayBuffer not available (polling)", done => { + it("should be able to receive binary data when ArrayBuffer not available (polling)", (done) => { const socket = new eio.Socket({ forceBase64: true }); socket.on("open", () => { socket.send("give binary"); let firstPacket = true; - socket.on("message", data => { + socket.on("message", (data) => { if (firstPacket) { firstPacket = false; return; diff --git a/test/blob/polling.js b/test/blob/polling.js index 2f466cb5e..ad50d3a27 100644 --- a/test/blob/polling.js +++ b/test/blob/polling.js @@ -4,10 +4,10 @@ const { Socket } = require("../../"); const Blob = require("blob"); const { repeat } = require("../util"); -describe("blob", function() { +describe("blob", function () { this.timeout(30000); - it("should be able to receive binary data as blob when bouncing it back (polling)", done => { + it("should be able to receive binary data as blob when bouncing it back (polling)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -16,12 +16,12 @@ describe("blob", function() { socket.binaryType = "blob"; socket.on("open", () => { socket.send(binaryData); - socket.on("message", data => { + socket.on("message", (data) => { if (typeof data === "string") return; expect(data).to.be.a(Blob); const fr = new FileReader(); - fr.onload = function() { + fr.onload = function () { const ab = this.result; const ia = new Int8Array(ab); expect(ia).to.eql(binaryData); @@ -33,7 +33,7 @@ describe("blob", function() { }); }); - it("should be able to send data as a blob when bouncing it back (polling)", done => { + it("should be able to send data as a blob when bouncing it back (polling)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -41,7 +41,7 @@ describe("blob", function() { const socket = new Socket(); socket.on("open", () => { socket.send(new Blob([binaryData.buffer])); - socket.on("message", data => { + socket.on("message", (data) => { if (typeof data === "string") return; expect(data).to.be.an(ArrayBuffer); @@ -52,7 +52,7 @@ describe("blob", function() { }); }); - it("should merge binary packets according to maxPayload value", done => { + it("should merge binary packets according to maxPayload value", (done) => { const socket = new Socket({ transports: ["polling"] }); socket.on("open", () => { socket.send(new Blob([new Uint8Array(72)])); diff --git a/test/blob/ws.js b/test/blob/ws.js index 67a91fe40..96366e2db 100644 --- a/test/blob/ws.js +++ b/test/blob/ws.js @@ -3,10 +3,10 @@ const eio = require("../../"); const Blob = require("blob"); -describe("blob", function() { +describe("blob", function () { this.timeout(30000); - it("should be able to receive binary data as blob when bouncing it back (ws)", done => { + it("should be able to receive binary data as blob when bouncing it back (ws)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -16,10 +16,10 @@ describe("blob", function() { socket.on("open", () => { socket.on("upgrade", () => { socket.send(binaryData); - socket.on("message", data => { + socket.on("message", (data) => { expect(data).to.be.a(Blob); const fr = new FileReader(); - fr.onload = function() { + fr.onload = function () { const ab = this.result; const ia = new Int8Array(ab); expect(ia).to.eql(binaryData); @@ -32,7 +32,7 @@ describe("blob", function() { }); }); - it("should be able to send data as a blob when bouncing it back (ws)", done => { + it("should be able to send data as a blob when bouncing it back (ws)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -41,7 +41,7 @@ describe("blob", function() { socket.on("open", () => { socket.on("upgrade", () => { socket.send(new Blob([binaryData.buffer])); - socket.on("message", data => { + socket.on("message", (data) => { expect(data).to.be.an(ArrayBuffer); expect(new Int8Array(data)).to.eql(binaryData); socket.close(); @@ -51,7 +51,7 @@ describe("blob", function() { }); }); - it("should be able to send data as a blob encoded into base64 when bouncing it back (ws)", done => { + it("should be able to send data as a blob encoded into base64 when bouncing it back (ws)", (done) => { const binaryData = new Int8Array(5); for (let i = 0; i < 5; i++) { binaryData[i] = i; @@ -60,7 +60,7 @@ describe("blob", function() { socket.on("open", () => { socket.on("upgrade", () => { socket.send(new Blob([binaryData.buffer])); - socket.on("message", data => { + socket.on("message", (data) => { expect(data).to.be.an(ArrayBuffer); expect(new Int8Array(data)).to.eql(binaryData); socket.close(); diff --git a/test/connection.js b/test/connection.js index fd28ffb13..49dd1257c 100644 --- a/test/connection.js +++ b/test/connection.js @@ -3,13 +3,13 @@ const Socket = require("../").Socket; const env = require("./support/env"); const { repeat } = require("./util"); -describe("connection", function() { +describe("connection", function () { this.timeout(20000); - it("should connect to localhost", done => { + it("should connect to localhost", (done) => { const socket = new Socket(); socket.on("open", () => { - socket.on("message", data => { + socket.on("message", (data) => { expect(data).to.equal("hi"); socket.close(); done(); @@ -17,11 +17,11 @@ describe("connection", function() { }); }); - it("should receive multibyte utf-8 strings with polling", done => { + it("should receive multibyte utf-8 strings with polling", (done) => { const socket = new Socket(); socket.on("open", () => { socket.send("cash money €€€"); - socket.on("message", data => { + socket.on("message", (data) => { if ("hi" === data) return; expect(data).to.be("cash money €€€"); socket.close(); @@ -30,13 +30,13 @@ describe("connection", function() { }); }); - it("should receive emoji", done => { + it("should receive emoji", (done) => { const socket = new Socket(); socket.on("open", () => { socket.send( "\uD800\uDC00-\uDB7F\uDFFF\uDB80\uDC00-\uDBFF\uDFFF\uE000-\uF8FF" ); - socket.on("message", data => { + socket.on("message", (data) => { if ("hi" === data) return; expect(data).to.be( "\uD800\uDC00-\uDB7F\uDFFF\uDB80\uDC00-\uDBFF\uDFFF\uE000-\uF8FF" @@ -47,7 +47,7 @@ describe("connection", function() { }); }); - it("should not send packets if socket closes", done => { + it("should not send packets if socket closes", (done) => { const socket = new Socket(); socket.on("open", () => { let noPacket = true; @@ -63,7 +63,7 @@ describe("connection", function() { }); }); - it("should merge packets according to maxPayload value", done => { + it("should merge packets according to maxPayload value", (done) => { const socket = new Socket({ transports: ["polling"] }); socket.on("open", () => { socket.send(repeat("a", 99)); @@ -84,7 +84,7 @@ describe("connection", function() { }); }); - it("should send a packet whose length is above the maxPayload value anyway", done => { + it("should send a packet whose length is above the maxPayload value anyway", (done) => { const socket = new Socket({ transports: ["polling"] }); socket.on("open", () => { socket.send(repeat("a", 101)); @@ -98,11 +98,11 @@ describe("connection", function() { // no `Worker` on old IE if (typeof Worker !== "undefined") { - it("should work in a worker", done => { + it("should work in a worker", (done) => { const worker = new Worker("/test/support/worker.js"); let msg = 0; const utf8yay = "пойду спать всем спокойной ночи"; - worker.onmessage = e => { + worker.onmessage = (e) => { msg++; if (msg === 1) { expect(e.data).to.be("hi"); @@ -126,7 +126,7 @@ describe("connection", function() { } if (env.wsSupport && !env.isOldSimulator && !env.isAndroid && !env.isIE11) { - it("should defer close when upgrading", done => { + it("should defer close when upgrading", (done) => { const socket = new Socket(); socket.on("open", () => { let upgraded = false; @@ -144,7 +144,7 @@ describe("connection", function() { }); }); - it("should close on upgradeError if closing is deferred", done => { + it("should close on upgradeError if closing is deferred", (done) => { const socket = new Socket(); socket.on("open", () => { let upgradeError = false; @@ -163,7 +163,7 @@ describe("connection", function() { }); }); - it("should not send packets if closing is deferred", done => { + it("should not send packets if closing is deferred", (done) => { const socket = new Socket(); socket.on("open", () => { let noPacket = true; @@ -181,7 +181,7 @@ describe("connection", function() { }); }); - it("should send all buffered packets if closing is deferred", done => { + it("should send all buffered packets if closing is deferred", (done) => { const socket = new Socket(); socket.on("open", () => { socket @@ -198,10 +198,10 @@ describe("connection", function() { } if (env.browser && typeof addEventListener === "function") { - it("should close the socket when receiving a beforeunload event", done => { + it("should close the socket when receiving a beforeunload event", (done) => { const socket = new Socket(); - const createEvent = name => { + const createEvent = (name) => { if (typeof Event === "function") { return new Event(name); } else { diff --git a/test/fixtures/no-unref.js b/test/fixtures/no-unref.js index fc64cbee3..bf1ea37a3 100644 --- a/test/fixtures/no-unref.js +++ b/test/fixtures/no-unref.js @@ -1,6 +1,6 @@ const { Socket } = require("../.."); const socket = new Socket("http://localhost:3000", { - autoUnref: false + autoUnref: false, }); setTimeout(() => { diff --git a/test/fixtures/unref-polling-only.js b/test/fixtures/unref-polling-only.js index 495433606..188382d31 100644 --- a/test/fixtures/unref-polling-only.js +++ b/test/fixtures/unref-polling-only.js @@ -1,7 +1,7 @@ const { Socket } = require("../.."); const socket = new Socket("http://localhost:3000", { autoUnref: true, - transports: ["polling"] + transports: ["polling"], }); socket.on("open", () => { diff --git a/test/fixtures/unref-websocket-only.js b/test/fixtures/unref-websocket-only.js index fe2bb4b4b..5f10a58fa 100644 --- a/test/fixtures/unref-websocket-only.js +++ b/test/fixtures/unref-websocket-only.js @@ -1,7 +1,7 @@ const { Socket } = require("../.."); const socket = new Socket("http://localhost:3000", { autoUnref: true, - transports: ["websocket"] + transports: ["websocket"], }); socket.on("open", () => { diff --git a/test/fixtures/unref.js b/test/fixtures/unref.js index 2b02b4eb5..eb967f099 100644 --- a/test/fixtures/unref.js +++ b/test/fixtures/unref.js @@ -1,6 +1,6 @@ const { Socket } = require("../.."); const socket = new Socket("http://localhost:3000", { - autoUnref: true + autoUnref: true, }); socket.on("open", () => { diff --git a/test/node.js b/test/node.js index 5edb64cb0..ed61bdf35 100644 --- a/test/node.js +++ b/test/node.js @@ -5,22 +5,22 @@ const { repeat } = require("./util"); describe("node.js", () => { describe("autoRef option", () => { - const fixture = filename => + const fixture = (filename) => process.execPath + " " + path.join(__dirname, "fixtures", filename); - it("should stop once the timer is triggered", done => { + it("should stop once the timer is triggered", (done) => { exec(fixture("unref.js"), done); }); - it("should stop once the timer is triggered (polling)", done => { + it("should stop once the timer is triggered (polling)", (done) => { exec(fixture("unref-polling-only.js"), done); }); - it("should stop once the timer is triggered (websocket)", done => { + it("should stop once the timer is triggered (websocket)", (done) => { exec(fixture("unref-websocket-only.js"), done); }); - it("should not stop with autoUnref set to false", done => { + it("should not stop with autoUnref set to false", (done) => { const process = exec(fixture("no-unref.js"), () => { done(new Error("should not happen")); }); @@ -31,7 +31,7 @@ describe("node.js", () => { }); }); - it("should merge binary packets according to maxPayload value", done => { + it("should merge binary packets according to maxPayload value", (done) => { const socket = new Socket({ transports: ["polling"] }); socket.on("open", () => { socket.send(Buffer.allocUnsafe(72)); diff --git a/test/socket.js b/test/socket.js index c0594101a..94c11bbca 100644 --- a/test/socket.js +++ b/test/socket.js @@ -4,23 +4,23 @@ const { isIE11, isAndroid, isEdge, isIPad } = require("./support/env"); const FakeTimers = require("@sinonjs/fake-timers"); const { repeat } = require("./util"); -describe("Socket", function() { +describe("Socket", function () { this.timeout(10000); describe("filterUpgrades", () => { it("should return only available transports", () => { const socket = new Socket({ transports: ["polling"] }); expect(socket.filterUpgrades(["polling", "websocket"])).to.eql([ - "polling" + "polling", ]); socket.close(); }); }); - it("throws an error when no transports are available", done => { + it("throws an error when no transports are available", (done) => { const socket = new Socket({ transports: [] }); let errorMessage = ""; - socket.on("error", error => { + socket.on("error", (error) => { errorMessage = error; }); socket.open(); @@ -31,18 +31,18 @@ describe("Socket", function() { }); }); - describe("fake timers", function() { - before(function() { + describe("fake timers", function () { + before(function () { if (isIE11 || isAndroid || isEdge || isIPad) { this.skip(); } }); - it("uses window timeout by default", done => { + it("uses window timeout by default", (done) => { const clock = FakeTimers.install(); const socket = new Socket({ transports: [] }); let errorMessage = ""; - socket.on("error", error => { + socket.on("error", (error) => { errorMessage = error; }); socket.open(); @@ -53,15 +53,15 @@ describe("Socket", function() { done(); }); - it.skip("uses custom timeout when provided", done => { + it.skip("uses custom timeout when provided", (done) => { const clock = FakeTimers.install(); const socket = new Socket({ transports: [], - useNativeTimers: true + useNativeTimers: true, }); let errorMessage = ""; - socket.on("error", error => { + socket.on("error", (error) => { errorMessage = error; }); socket.open(); @@ -83,13 +83,13 @@ describe("Socket", function() { }); describe("close", () => { - it("provides details when maxHttpBufferSize is reached (polling)", done => { + it("provides details when maxHttpBufferSize is reached (polling)", (done) => { const socket = new Socket({ transports: ["polling"] }); socket.on("open", () => { socket.send(repeat("a", 101)); // over the maxHttpBufferSize value of the server }); - socket.on("error", err => { + socket.on("error", (err) => { expect(err).to.be.an(Error); expect(err.type).to.eql("TransportError"); expect(err.message).to.eql("xhr post error"); @@ -106,7 +106,7 @@ describe("Socket", function() { }); }); - it("provides details when maxHttpBufferSize is reached (websocket)", done => { + it("provides details when maxHttpBufferSize is reached (websocket)", (done) => { const socket = new Socket({ transports: ["websocket"] }); socket.on("open", () => { socket.send(repeat("a", 101)); // over the maxHttpBufferSize value of the server @@ -128,13 +128,13 @@ describe("Socket", function() { }); }); - it("provides details when the session ID is unknown (polling)", done => { + it("provides details when the session ID is unknown (polling)", (done) => { const socket = new Socket({ transports: ["polling"], - query: { sid: "abc" } + query: { sid: "abc" }, }); - socket.on("error", err => { + socket.on("error", (err) => { expect(err).to.be.an(Error); expect(err.type).to.eql("TransportError"); expect(err.message).to.eql("xhr poll error"); @@ -153,13 +153,13 @@ describe("Socket", function() { }); }); - it("provides details when the session ID is unknown (websocket)", done => { + it("provides details when the session ID is unknown (websocket)", (done) => { const socket = new Socket({ transports: ["websocket"], - query: { sid: "abc" } + query: { sid: "abc" }, }); - socket.on("error", err => { + socket.on("error", (err) => { expect(err).to.be.an(Error); expect(err.type).to.eql("TransportError"); expect(err.message).to.eql("websocket error"); diff --git a/test/support/env.js b/test/support/env.js index 81448aeb2..2f05f07fe 100644 --- a/test/support/env.js +++ b/test/support/env.js @@ -24,6 +24,6 @@ exports.isIPad = /iPad/.test(userAgent); if (typeof location === "undefined") { location = { hostname: "localhost", - port: 3000 + port: 3000, }; } diff --git a/test/support/public/worker.js b/test/support/public/worker.js index fde577aa4..c034a8bde 100644 --- a/test/support/public/worker.js +++ b/test/support/public/worker.js @@ -5,7 +5,7 @@ importScripts("/test/support/engine.io.min.js"); var socket = eio(); var count = 0; -socket.on("message", function(msg) { +socket.on("message", function (msg) { count++; if (count < 10) { socket.send("give utf8"); diff --git a/test/support/server.js b/test/support/server.js index 503c9c1d2..3fd074b25 100644 --- a/test/support/server.js +++ b/test/support/server.js @@ -6,17 +6,17 @@ const join = require("path").join; const http = require("http").Server(app); const server = require("engine.io").attach(http, { pingInterval: 500, - maxHttpBufferSize: 100 + maxHttpBufferSize: 100, }); const { rollup } = require("rollup"); const rollupConfig = require("../../support/rollup.config.umd.js"); -rollup(rollupConfig).then(async bundle => { +rollup(rollupConfig).then(async (bundle) => { await bundle.write({ ...rollupConfig.output[1], file: "./test/support/public/engine.io.min.js", - sourcemap: false + sourcemap: false, }); await bundle.close(); @@ -27,11 +27,11 @@ http.listen(process.env.ZUUL_PORT || 3000); // serve worker.js and engine.io.js as raw file app.use("/test/support", express.static(join(__dirname, "public"))); -server.on("connection", socket => { +server.on("connection", (socket) => { socket.send("hi"); // Bounce any received messages back - socket.on("message", data => { + socket.on("message", (data) => { if (data === "give binary") { const abv = new Int8Array(5); for (let i = 0; i < 5; i++) { diff --git a/test/transport.js b/test/transport.js index 81788fcc9..178655690 100644 --- a/test/transport.js +++ b/test/transport.js @@ -7,7 +7,7 @@ const env = require("./support/env"); describe("Transport", () => { describe("rememberUpgrade", () => { - it("should remember websocket connection", done => { + it("should remember websocket connection", (done) => { const socket = new eio.Socket(); expect(socket.transport.name).to.be("polling"); @@ -18,7 +18,7 @@ describe("Transport", () => { done(); }, 300); - socket.on("upgrade", transport => { + socket.on("upgrade", (transport) => { if (timedout) return; clearTimeout(timeout); socket.close(); @@ -30,7 +30,7 @@ describe("Transport", () => { }); }); - it("should not remember websocket connection", done => { + it("should not remember websocket connection", (done) => { const socket = new eio.Socket(); expect(socket.transport.name).to.be("polling"); @@ -41,7 +41,7 @@ describe("Transport", () => { done(); }, 300); - socket.on("upgrade", transport => { + socket.on("upgrade", (transport) => { if (timedout) return; clearTimeout(timeout); socket.close(); @@ -73,7 +73,7 @@ describe("Transport", () => { hostname: "localhost", secure: false, query: { sid: "test" }, - timestampRequests: false + timestampRequests: false, }); expect(polling.uri()).to.contain("http://localhost/engine.io?sid=test"); }); @@ -85,7 +85,7 @@ describe("Transport", () => { secure: false, query: { sid: "test" }, port: 80, - timestampRequests: false + timestampRequests: false, }); expect(polling.uri()).to.contain("http://localhost/engine.io?sid=test"); }); @@ -97,7 +97,7 @@ describe("Transport", () => { secure: false, query: { sid: "test" }, port: 3000, - timestampRequests: false + timestampRequests: false, }); expect(polling.uri()).to.contain( "http://localhost:3000/engine.io?sid=test" @@ -111,7 +111,7 @@ describe("Transport", () => { secure: true, query: { sid: "test" }, port: 443, - timestampRequests: false + timestampRequests: false, }); expect(polling.uri()).to.contain("https://localhost/engine.io?sid=test"); }); @@ -121,7 +121,7 @@ describe("Transport", () => { path: "/engine.io", hostname: "localhost", timestampParam: "t", - timestampRequests: true + timestampRequests: true, }); expect(polling.uri()).to.match( /http:\/\/localhost\/engine\.io\?(j=[0-9]+&)?(t=[0-9A-Za-z-_]+)/ @@ -134,7 +134,7 @@ describe("Transport", () => { hostname: "::1", secure: false, port: 80, - timestampRequests: false + timestampRequests: false, }); expect(polling.uri()).to.contain("http://[::1]/engine.io"); }); @@ -145,7 +145,7 @@ describe("Transport", () => { hostname: "::1", secure: false, port: 8080, - timestampRequests: false + timestampRequests: false, }); expect(polling.uri()).to.contain("http://[::1]:8080/engine.io"); }); @@ -156,7 +156,7 @@ describe("Transport", () => { hostname: "test", secure: false, query: { transport: "websocket" }, - timestampRequests: false + timestampRequests: false, }); expect(ws.uri()).to.be("ws://test/engine.io?transport=websocket"); }); @@ -167,7 +167,7 @@ describe("Transport", () => { hostname: "test", secure: true, query: {}, - timestampRequests: false + timestampRequests: false, }); expect(ws.uri()).to.be("wss://test/engine.io"); }); @@ -177,7 +177,7 @@ describe("Transport", () => { path: "/engine.io", hostname: "localhost", timestampParam: "woot", - timestampRequests: true + timestampRequests: true, }); expect(ws.uri()).to.match( /ws:\/\/localhost\/engine\.io\?woot=[0-9A-Za-z-_]+/ @@ -190,7 +190,7 @@ describe("Transport", () => { hostname: "::1", secure: false, port: 80, - timestampRequests: false + timestampRequests: false, }); expect(ws.uri()).to.be("ws://[::1]/engine.io"); }); @@ -201,7 +201,7 @@ describe("Transport", () => { hostname: "::1", secure: false, port: 8080, - timestampRequests: false + timestampRequests: false, }); expect(ws.uri()).to.be("ws://[::1]:8080/engine.io"); }); @@ -210,27 +210,27 @@ describe("Transport", () => { // these are server only if (!env.browser) { describe("options", () => { - it("should accept an `agent` option for WebSockets", done => { + it("should accept an `agent` option for WebSockets", (done) => { const polling = new eio.transports.websocket({ path: "/engine.io", hostname: "localhost", agent: { addRequest: () => { done(); - } - } + }, + }, }); polling.doOpen(); }); - it("should accept an `agent` option for XMLHttpRequest", done => { + it("should accept an `agent` option for XMLHttpRequest", (done) => { const polling = new eio.transports.polling({ path: "/engine.io", hostname: "localhost", agent: { addRequest: () => { done(); - } - } + }, + }, }); polling.doOpen(); }); @@ -240,12 +240,12 @@ describe("Transport", () => { const headers = { "X-Custom-Header-For-My-Project": "my-secret-access-token", Cookie: - "user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly" + "user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly", }; const polling = new eio.transports.websocket({ path: "/engine.io", hostname: "localhost", - extraHeaders: headers + extraHeaders: headers, }); expect(polling.opts.extraHeaders).to.equal(headers); }); @@ -253,22 +253,22 @@ describe("Transport", () => { const headers = { "X-Custom-Header-For-My-Project": "my-secret-access-token", Cookie: - "user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly" + "user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly", }; const polling = new eio.transports.polling({ path: "/engine.io", hostname: "localhost", - extraHeaders: headers + extraHeaders: headers, }); expect(polling.opts.extraHeaders).to.equal(headers); }); }); describe("perMessageDeflate", () => { - it("should set threshold", done => { + it("should set threshold", (done) => { const socket = new eio.Socket({ transports: ["websocket"], - perMessageDeflate: { threshold: 0 } + perMessageDeflate: { threshold: 0 }, }); socket.on("open", () => { const ws = socket.transport.ws; @@ -285,7 +285,7 @@ describe("Transport", () => { }); }); - it("should not compress when the byte size is below threshold", done => { + it("should not compress when the byte size is below threshold", (done) => { const socket = new eio.Socket({ transports: ["websocket"] }); socket.on("open", () => { const ws = socket.transport.ws; @@ -310,14 +310,14 @@ describe("Transport", () => { const headers = { "X-Custom-Header-For-My-Project": "my-secret-access-token", Cookie: - "user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly" + "user_session=NI2JlCKF90aE0sJZD9ZzujtdsUqNYSBYxzlTsvdSUe35ZzdtVRGqYFr0kdGxbfc5gUOkR9RGp20GVKza; path=/; expires=Tue, 07-Apr-2015 18:18:08 GMT; secure; HttpOnly", }; const socket = new eio.Socket({ transportOptions: { polling: { - extraHeaders: headers - } - } + extraHeaders: headers, + }, + }, }); expect(socket.transport.name).to.be("polling"); expect(socket.transport.opts.extraHeaders).to.equal(headers); diff --git a/test/util.js b/test/util.js index 981ecff0d..4afe9b569 100644 --- a/test/util.js +++ b/test/util.js @@ -1,5 +1,5 @@ // polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat -exports.repeat = function(str, count) { +exports.repeat = function (str, count) { if (String.prototype.repeat) { return str.repeat(count); } diff --git a/test/xmlhttprequest.js b/test/xmlhttprequest.js index 431028535..a9048a757 100644 --- a/test/xmlhttprequest.js +++ b/test/xmlhttprequest.js @@ -10,7 +10,7 @@ describe("XMLHttpRequest", () => { const xhra = new XMLHttpRequest({ xdomain: false, xscheme: false, - enablesXDR: false + enablesXDR: false, }); expect(xhra).to.be.an("object"); expect(xhra).to.have.property("open"); @@ -18,7 +18,7 @@ describe("XMLHttpRequest", () => { const xhrb = new XMLHttpRequest({ xdomain: false, xscheme: false, - enablesXDR: true + enablesXDR: true, }); expect(xhrb).to.be.an("object"); expect(xhrb).to.have.property("open"); @@ -26,7 +26,7 @@ describe("XMLHttpRequest", () => { const xhrc = new XMLHttpRequest({ xdomain: false, xscheme: true, - enablesXDR: false + enablesXDR: false, }); expect(xhrc).to.be.an("object"); expect(xhrc).to.have.property("open"); @@ -34,7 +34,7 @@ describe("XMLHttpRequest", () => { const xhrd = new XMLHttpRequest({ xdomain: false, xscheme: true, - enablesXDR: true + enablesXDR: true, }); expect(xhrd).to.be.an("object"); expect(xhrd).to.have.property("open"); @@ -48,7 +48,7 @@ describe("XMLHttpRequest", () => { const xhr = new XMLHttpRequest({ xdomain: true, xscheme: false, - enablesXDR: true + enablesXDR: true, }); expect(xhr).to.be.an("object"); expect(xhr).to.have.property("open"); @@ -62,14 +62,14 @@ describe("XMLHttpRequest", () => { const xhra = new XMLHttpRequest({ xdomain: true, xscheme: true, - enablesXDR: false + enablesXDR: false, }); expect(xhra).to.be.an("object"); expect(xhra).not.to.have.property("open"); const xhrb = new XMLHttpRequest({ xdomain: true, xscheme: true, - enablesXDR: true + enablesXDR: true, }); expect(xhrb).to.be.an("object"); expect(xhrb).not.to.have.property("open"); @@ -81,14 +81,14 @@ describe("XMLHttpRequest", () => { const xhra = new XMLHttpRequest({ xdomain: true, xscheme: false, - enablesXDR: false + enablesXDR: false, }); expect(xhra).to.be.an("object"); expect(xhra).not.to.have.property("open"); const xhrb = new XMLHttpRequest({ xdomain: true, xscheme: true, - enablesXDR: false + enablesXDR: false, }); expect(xhrb).to.be.an("object"); expect(xhrb).not.to.have.property("open"); @@ -105,7 +105,7 @@ describe("XMLHttpRequest", () => { const xhra = new XMLHttpRequest({ xdomain: false, xscheme: false, - enablesXDR: true + enablesXDR: true, }); expect(xhra).to.be.an("object"); expect(xhra).to.have.property("open"); @@ -113,7 +113,7 @@ describe("XMLHttpRequest", () => { const xhrb = new XMLHttpRequest({ xdomain: true, xscheme: false, - enablesXDR: true + enablesXDR: true, }); expect(xhrb).to.be.an("object"); expect(xhrb).to.have.property("open"); From 2ddcb825ae01b5bcd1d65c783fcdb64b9318a413 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Tue, 13 Dec 2022 15:40:56 +0100 Subject: [PATCH 06/21] chore: bump caniuse-lite version --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1e2c50ab..07c815ef7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3181,9 +3181,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001335", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz", - "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==", + "version": "1.0.30001439", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", + "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", "dev": true, "funding": [ { @@ -15993,9 +15993,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001335", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz", - "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==", + "version": "1.0.30001439", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz", + "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==", "dev": true }, "caseless": { From ec5a5966806d9bae6dce1863f09be2d901d66398 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Wed, 14 Dec 2022 06:42:34 +0100 Subject: [PATCH 07/21] refactor: improve typings Note: `readyState` and `writeBuffer` are set to public, as they might be useful for the end user. --- lib/socket.ts | 104 ++++++++++++++++++++---------------- lib/transport.ts | 61 +++++++++++---------- lib/transports/polling.ts | 58 ++++++++++---------- lib/transports/websocket.ts | 43 ++++----------- 4 files changed, 129 insertions(+), 137 deletions(-) diff --git a/lib/socket.ts b/lib/socket.ts index bd6acf8d1..d080c3239 100644 --- a/lib/socket.ts +++ b/lib/socket.ts @@ -4,8 +4,14 @@ import { decode } from "./contrib/parseqs.js"; import { parse } from "./contrib/parseuri.js"; import debugModule from "debug"; // debug() import { Emitter } from "@socket.io/component-emitter"; -import { protocol } from "engine.io-parser"; -import { CloseDetails } from "./transport.js"; +import { + protocol, + type Packet, + type BinaryType, + type PacketType, + RawData, +} from "engine.io-parser"; +import { CloseDetails, Transport } from "./transport.js"; const debug = debugModule("engine.io-client:socket"); // debug() @@ -221,11 +227,19 @@ export interface SocketOptions { protocols: string | string[]; } +interface HandshakeData { + sid: string; + upgrades: string[]; + pingInterval: number; + pingTimeout: number; + maxPayload: number; +} + interface SocketReservedEvents { open: () => void; - handshake: (data) => void; - packet: (packet) => void; - packetCreate: (packet) => void; + handshake: (data: HandshakeData) => void; + packet: (packet: Packet) => void; + packetCreate: (packet: Packet) => void; data: (data) => void; message: (data) => void; drain: () => void; @@ -240,13 +254,19 @@ interface SocketReservedEvents { close: (reason: string, description?: CloseDetails | Error) => void; } -export class Socket extends Emitter<{}, {}, SocketReservedEvents> { +type SocketState = "opening" | "open" | "closing" | "closed"; + +export class Socket extends Emitter< + Record, + Record, + SocketReservedEvents +> { public id: string; - public transport: any; - public binaryType: string; + public transport: Transport; + public binaryType: BinaryType; + public readyState: SocketState; + public writeBuffer: Packet[] = []; - private readyState: string; - private writeBuffer; private prevBufferLen: number; private upgrades; private pingInterval: number; @@ -271,9 +291,8 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Socket constructor. * - * @param {String|Object} uri or options + * @param {String|Object} uri - uri or options * @param {Object} opts - options - * @api public */ constructor(uri, opts: Partial = {}) { super(); @@ -317,7 +336,6 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { : "80"); this.transports = opts.transports || ["polling", "websocket"]; - this.readyState = ""; this.writeBuffer = []; this.prevBufferLen = 0; @@ -387,9 +405,9 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Creates transport of the given type. * - * @param {String} transport name + * @param {String} name - transport name * @return {Transport} - * @api private + * @private */ private createTransport(name) { debug('creating transport "%s"', name); @@ -425,7 +443,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Initializes transport to use and starts probe. * - * @api private + * @private */ private open() { let transport; @@ -463,7 +481,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Sets the current transport. Disables the existing one (if any). * - * @api private + * @private */ private setTransport(transport) { debug("setting transport %s", transport.name); @@ -487,8 +505,8 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Probes a transport. * - * @param {String} transport name - * @api private + * @param {String} name - transport name + * @private */ private probe(name) { debug('probing transport "%s"', name); @@ -600,7 +618,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Called when connection is deemed open. * - * @api private + * @private */ private onOpen() { debug("socket open"); @@ -611,11 +629,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { // we check for `readyState` in case an `open` // listener already closed the socket - if ( - "open" === this.readyState && - this.opts.upgrade && - this.transport.pause - ) { + if ("open" === this.readyState && this.opts.upgrade) { debug("starting upgrade probes"); let i = 0; const l = this.upgrades.length; @@ -628,7 +642,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Handles a packet. * - * @api private + * @private */ private onPacket(packet) { if ( @@ -676,9 +690,9 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { * Called upon handshake completion. * * @param {Object} data - handshake obj - * @api private + * @private */ - private onHandshake(data) { + private onHandshake(data: HandshakeData) { this.emitReserved("handshake", data); this.id = data.sid; this.transport.query.sid = data.sid; @@ -695,7 +709,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Sets and resets ping timeout timer based on server pings. * - * @api private + * @private */ private resetPingTimeout() { this.clearTimeoutFn(this.pingTimeoutTimer); @@ -710,7 +724,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Called on `drain` event * - * @api private + * @private */ private onDrain() { this.writeBuffer.splice(0, this.prevBufferLen); @@ -730,7 +744,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Flush write buffers. * - * @api private + * @private */ private flush() { if ( @@ -782,18 +796,17 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Sends a message. * - * @param {String} message. - * @param {Function} callback function. + * @param {String} msg - message. * @param {Object} options. + * @param {Function} callback function. * @return {Socket} for chaining. - * @api public */ - public write(msg, options, fn?) { + public write(msg: RawData, options?, fn?) { this.sendPacket("message", msg, options, fn); return this; } - public send(msg, options, fn?) { + public send(msg: RawData, options?, fn?) { this.sendPacket("message", msg, options, fn); return this; } @@ -801,13 +814,13 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Sends a packet. * - * @param {String} packet type. + * @param {String} type: packet type. * @param {String} data. * @param {Object} options. - * @param {Function} callback function. - * @api private + * @param {Function} fn - callback function. + * @private */ - private sendPacket(type, data?, options?, fn?) { + private sendPacket(type: PacketType, data?: RawData, options?, fn?) { if ("function" === typeof data) { fn = data; data = undefined; @@ -838,8 +851,6 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Closes the connection. - * - * @api public */ public close() { const close = () => { @@ -884,7 +895,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Called upon transport error * - * @api private + * @private */ private onError(err) { debug("socket error %j", err); @@ -896,7 +907,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Called upon transport close. * - * @api private + * @private */ private onClose(reason: string, description?: CloseDetails | Error) { if ( @@ -946,9 +957,8 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> { /** * Filters upgrades, returning only those matching client transports. * - * @param {Array} server upgrades - * @api private - * + * @param {Array} upgrades - server upgrades + * @private */ private filterUpgrades(upgrades) { const filteredUpgrades = []; diff --git a/lib/transport.ts b/lib/transport.ts index 73984eff0..a2c1da040 100644 --- a/lib/transport.ts +++ b/lib/transport.ts @@ -1,4 +1,4 @@ -import { decodePacket, Packet, RawData } from "engine.io-parser"; +import { decodePacket, type Packet, type RawData } from "engine.io-parser"; import { Emitter } from "@socket.io/component-emitter"; import { installTimerFunctions } from "./util.js"; import debugModule from "debug"; // debug() @@ -33,24 +33,27 @@ interface TransportReservedEvents { drain: () => void; } +type TransportState = "opening" | "open" | "closed" | "pausing" | "paused"; + export abstract class Transport extends Emitter< - {}, - {}, + Record, + Record, TransportReservedEvents > { + public query: Record; + public writable: boolean = false; + protected opts: SocketOptions; protected supportsBinary: boolean; - protected query: object; - protected readyState: string; - protected writable: boolean = false; + protected readyState: TransportState; protected socket: any; protected setTimeoutFn: typeof setTimeout; /** * Transport abstract constructor. * - * @param {Object} options. - * @api private + * @param {Object} opts - options + * @protected */ constructor(opts) { super(); @@ -58,7 +61,6 @@ export abstract class Transport extends Emitter< this.opts = opts; this.query = opts.query; - this.readyState = ""; this.socket = opts.socket; } @@ -69,7 +71,7 @@ export abstract class Transport extends Emitter< * @param description * @param context - the error context * @return {Transport} for chaining - * @api protected + * @protected */ protected onError(reason: string, description: any, context?: any) { super.emitReserved( @@ -81,25 +83,19 @@ export abstract class Transport extends Emitter< /** * Opens the transport. - * - * @api public */ - private open() { - if ("closed" === this.readyState || "" === this.readyState) { - this.readyState = "opening"; - this.doOpen(); - } + public open() { + this.readyState = "opening"; + this.doOpen(); return this; } /** * Closes the transport. - * - * @api public */ public close() { - if ("opening" === this.readyState || "open" === this.readyState) { + if (this.readyState === "opening" || this.readyState === "open") { this.doClose(); this.onClose(); } @@ -111,10 +107,9 @@ export abstract class Transport extends Emitter< * Sends multiple packets. * * @param {Array} packets - * @api public */ public send(packets) { - if ("open" === this.readyState) { + if (this.readyState === "open") { this.write(packets); } else { // this might happen if the transport was silently closed in the beforeunload event handler @@ -125,7 +120,7 @@ export abstract class Transport extends Emitter< /** * Called upon open * - * @api protected + * @protected */ protected onOpen() { this.readyState = "open"; @@ -137,7 +132,7 @@ export abstract class Transport extends Emitter< * Called with data. * * @param {String} data - * @api protected + * @protected */ protected onData(data: RawData) { const packet = decodePacket(data, this.socket.binaryType); @@ -147,7 +142,7 @@ export abstract class Transport extends Emitter< /** * Called with a decoded packet. * - * @api protected + * @protected */ protected onPacket(packet: Packet) { super.emitReserved("packet", packet); @@ -156,14 +151,26 @@ export abstract class Transport extends Emitter< /** * Called upon close. * - * @api protected + * @protected */ protected onClose(details?: CloseDetails) { this.readyState = "closed"; super.emitReserved("close", details); } + /** + * The name of the transport + */ + public abstract get name(): string; + + /** + * Pauses the transport, in order not to lose packets during an upgrade. + * + * @param onPause + */ + public pause(onPause: () => void) {} + protected abstract doOpen(); protected abstract doClose(); - protected abstract write(packets); + protected abstract write(packets: Packet[]); } diff --git a/lib/transports/polling.ts b/lib/transports/polling.ts index 217637f78..512ecf960 100644 --- a/lib/transports/polling.ts +++ b/lib/transports/polling.ts @@ -31,7 +31,7 @@ export class Polling extends Transport { * XHR Polling constructor. * * @param {Object} opts - * @api public + * @package */ constructor(opts) { super(opts); @@ -58,10 +58,7 @@ export class Polling extends Transport { this.supportsBinary = hasXHR2 && !forceBase64; } - /** - * Transport name. - */ - get name() { + override get name() { return "polling"; } @@ -69,19 +66,19 @@ export class Polling extends Transport { * Opens the socket (triggers polling). We write a PING message to determine * when the transport is open. * - * @api private + * @protected */ - doOpen() { + override doOpen() { this.poll(); } /** * Pauses polling. * - * @param {Function} callback upon buffers are flushed and transport is paused - * @api private + * @param {Function} onPause - callback upon buffers are flushed and transport is paused + * @package */ - pause(onPause) { + override pause(onPause) { this.readyState = "pausing"; const pause = () => { @@ -118,7 +115,7 @@ export class Polling extends Transport { /** * Starts polling cycle. * - * @api public + * @private */ poll() { debug("polling"); @@ -130,9 +127,9 @@ export class Polling extends Transport { /** * Overloads onData to detect payloads. * - * @api private + * @protected */ - onData(data) { + override onData(data) { debug("polling got data %s", data); const callback = (packet) => { // if its the first message we consider the transport open @@ -170,9 +167,9 @@ export class Polling extends Transport { /** * For polling, send a close packet. * - * @api private + * @protected */ - doClose() { + override doClose() { const close = () => { debug("writing close packet"); this.write([{ type: "close" }]); @@ -192,11 +189,10 @@ export class Polling extends Transport { /** * Writes a packets payload. * - * @param {Array} data packets - * @param {Function} drain callback - * @api private + * @param {Array} packets - data packets + * @protected */ - write(packets) { + override write(packets) { this.writable = false; encodePayload(packets, (data) => { @@ -210,7 +206,7 @@ export class Polling extends Transport { /** * Generates uri for connection. * - * @api private + * @private */ uri() { let query: { b64?: number; sid?: string } = this.query || {}; @@ -252,7 +248,7 @@ export class Polling extends Transport { * Creates a request. * * @param {String} method - * @api private + * @private */ request(opts = {}) { Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts); @@ -264,9 +260,9 @@ export class Polling extends Transport { * * @param {String} data to send. * @param {Function} called upon flush. - * @api private + * @private */ - doWrite(data, fn) { + private doWrite(data, fn) { const req = this.request({ method: "POST", data: data, @@ -280,9 +276,9 @@ export class Polling extends Transport { /** * Starts a poll cycle. * - * @api private + * @private */ - doPoll() { + private doPoll() { debug("xhr poll"); const req = this.request(); req.on("data", this.onData.bind(this)); @@ -317,7 +313,7 @@ export class Request extends Emitter<{}, {}, RequestReservedEvents> { * Request constructor * * @param {Object} options - * @api public + * @package */ constructor(uri, opts) { super(); @@ -335,7 +331,7 @@ export class Request extends Emitter<{}, {}, RequestReservedEvents> { /** * Creates the XHR object and sends the request. * - * @api private + * @private */ private create() { const opts = pick( @@ -422,7 +418,7 @@ export class Request extends Emitter<{}, {}, RequestReservedEvents> { /** * Called upon error. * - * @api private + * @private */ private onError(err: number | Error) { this.emitReserved("error", err, this.xhr); @@ -432,7 +428,7 @@ export class Request extends Emitter<{}, {}, RequestReservedEvents> { /** * Cleans up house. * - * @api private + * @private */ private cleanup(fromError?) { if ("undefined" === typeof this.xhr || null === this.xhr) { @@ -456,7 +452,7 @@ export class Request extends Emitter<{}, {}, RequestReservedEvents> { /** * Called upon load. * - * @api private + * @private */ private onLoad() { const data = this.xhr.responseText; @@ -470,7 +466,7 @@ export class Request extends Emitter<{}, {}, RequestReservedEvents> { /** * Aborts the request. * - * @api public + * @package */ public abort() { this.cleanup(); diff --git a/lib/transports/websocket.ts b/lib/transports/websocket.ts index c9029f391..3ee8d5380 100644 --- a/lib/transports/websocket.ts +++ b/lib/transports/websocket.ts @@ -25,8 +25,8 @@ export class WS extends Transport { /** * WebSocket transport constructor. * - * @api {Object} connection options - * @api public + * @param {Object} opts - connection options + * @protected */ constructor(opts) { super(opts); @@ -34,21 +34,11 @@ export class WS extends Transport { this.supportsBinary = !opts.forceBase64; } - /** - * Transport name. - * - * @api public - */ - get name() { + override get name() { return "websocket"; } - /** - * Opens socket. - * - * @api private - */ - doOpen() { + override doOpen() { if (!this.check()) { // let probe timeout return; @@ -102,9 +92,9 @@ export class WS extends Transport { /** * Adds event listeners to the socket * - * @api private + * @private */ - addEventListeners() { + private addEventListeners() { this.ws.onopen = () => { if (this.opts.autoUnref) { this.ws._socket.unref(); @@ -120,13 +110,7 @@ export class WS extends Transport { this.ws.onerror = (e) => this.onError("websocket error", e); } - /** - * Writes data to socket. - * - * @param {Array} array of packets. - * @api private - */ - write(packets) { + override write(packets) { this.writable = false; // encodePacket efficient as it uses WS framing @@ -179,12 +163,7 @@ export class WS extends Transport { } } - /** - * Closes socket. - * - * @api private - */ - doClose() { + override doClose() { if (typeof this.ws !== "undefined") { this.ws.close(); this.ws = null; @@ -194,7 +173,7 @@ export class WS extends Transport { /** * Generates uri for connection. * - * @api private + * @private */ uri() { let query: { b64?: number } = this.query || {}; @@ -237,9 +216,9 @@ export class WS extends Transport { * Feature detection for WebSocket. * * @return {Boolean} whether this transport is available. - * @api public + * @private */ - check() { + private check() { return !!WebSocket; } } From 1eaeeece35dac24671edda6040404f34eb9a285c Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Wed, 14 Dec 2022 06:55:19 +0100 Subject: [PATCH 08/21] refactor: remove unused option This option was added by error during the TypeScript migration. Related: https://github.com/socketio/engine.io-client/commit/587ccf33809218d6d88e07504da5a8a5d4ce3df7 --- lib/socket.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib/socket.ts b/lib/socket.ts index d080c3239..586762c23 100644 --- a/lib/socket.ts +++ b/lib/socket.ts @@ -82,12 +82,6 @@ export interface SocketOptions { */ transports: string[]; - /** - * The port the policy server listens on - * @default 843 - */ - policyPost: number; - /** * If true and if the previous websocket connection to the server succeeded, * the connection attempt will bypass the normal upgrade process and will From ed6d016a523398b42653a88fe0338c09a123d4fc Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Wed, 14 Dec 2022 07:28:15 +0100 Subject: [PATCH 09/21] chore: add security policy --- SECURITY.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..b2fac90fe --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,22 @@ +# Security Policy + +## Supported Versions + +| Version | `socket.io-client` version | Supported | +|---------|----------------------------|--------------------| +| 6.x | 4.x | :white_check_mark: | +| 4.x | 3.x | :white_check_mark: | +| 3.5.x | 2.4.x | :white_check_mark: | +| < 3.5.0 | < 2.4.0 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability in this package, please send an email to [@darrachequesne](https://github.com/darrachequesne) (see address in profile) describing the vulnerability and how to reproduce it. + +We will get back to you as soon as possible and publish a fix if necessary. + +:warning: IMPORTANT :warning: please do not create an issue in this repository, as attackers might take advantage of it. Thank you in advance for your responsible disclosure. + +## History + +No security vulnerability were reported yet. From 12b7d7817e9c0016c970f903de15ed8b4255ea90 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Mon, 9 Jan 2023 09:36:28 +0100 Subject: [PATCH 10/21] fix: properly parse relative URL with a "@" character A query parameter with a "@" character could be incorrectly parsed. Example: "/foo?bar=@example.com" => host: example.com The parse() method is also used in the `socket.io-client` package, to extract the namespace and the query parameters. Notes: - this bug does not seem exploitable, as an attacker would need to inject the query parameter in the code executed by the client. - we might use the URL object in the next major version, but that means dropping support for some platforms such as IE Reference: https://caniuse.com/url Thanks to Li Jiantao of STAR Labs (@starlabs_sg) for the responsible disclosure. --- lib/contrib/parseuri.ts | 16 ++++++++-- test/index.js | 1 + test/parseuri.js | 68 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 test/parseuri.js diff --git a/lib/contrib/parseuri.ts b/lib/contrib/parseuri.ts index 43cd69b66..7a13c4760 100644 --- a/lib/contrib/parseuri.ts +++ b/lib/contrib/parseuri.ts @@ -1,11 +1,23 @@ // imported from https://github.com/galkn/parseuri /** - * Parses an URI + * Parses a URI + * + * Note: we could also have used the built-in URL object, but it isn't supported on all platforms. + * + * See: + * - https://developer.mozilla.org/en-US/docs/Web/API/URL + * - https://caniuse.com/url + * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B + * + * History of the parse() method: + * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c + * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3 + * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242 * * @author Steven Levithan (MIT license) * @api private */ -const re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; +const re = /^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; const parts = [ 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor' diff --git a/test/index.js b/test/index.js index 702f6ab83..0932c96ed 100644 --- a/test/index.js +++ b/test/index.js @@ -14,6 +14,7 @@ require("./socket"); require("./transport"); require("./connection"); require("./xmlhttprequest"); +require("./parseuri"); if (typeof ArrayBuffer !== "undefined") { require("./arraybuffer"); diff --git a/test/parseuri.js b/test/parseuri.js new file mode 100644 index 000000000..13fda2f7b --- /dev/null +++ b/test/parseuri.js @@ -0,0 +1,68 @@ +// imported from https://github.com/galkn/parseuri +const expect = require("expect.js"); +const parseuri = require("..").parse; + +describe("parseuri", function () { + it("should parse an uri", function () { + const http = parseuri("http://google.com"), + https = parseuri("https://www.google.com:80"), + query = parseuri("google.com:8080/foo/bar?foo=bar"), + localhost = parseuri("localhost:8080"), + ipv6 = parseuri("2001:0db8:85a3:0042:1000:8a2e:0370:7334"), + ipv6short = parseuri("2001:db8:85a3:42:1000:8a2e:370:7334"), + ipv6port = parseuri("2001:db8:85a3:42:1000:8a2e:370:7334:80"), + ipv6abbrev = parseuri("2001::7334:a:80"), + ipv6http = parseuri("http://[2001::7334:a]:80"), + ipv6query = parseuri("http://[2001::7334:a]:80/foo/bar?foo=bar"); + + expect(http.protocol).to.be("http"); + expect(http.port).to.be(""); + expect(http.host).to.be("google.com"); + expect(https.protocol).to.be("https"); + expect(https.port).to.be("80"); + expect(https.host).to.be("www.google.com"); + expect(query.port).to.be("8080"); + expect(query.query).to.be("foo=bar"); + expect(query.path).to.be("/foo/bar"); + expect(query.relative).to.be("/foo/bar?foo=bar"); + expect(query.queryKey.foo).to.be("bar"); + expect(query.pathNames[0]).to.be("foo"); + expect(query.pathNames[1]).to.be("bar"); + expect(localhost.protocol).to.be(""); + expect(localhost.host).to.be("localhost"); + expect(localhost.port).to.be("8080"); + expect(ipv6.protocol).to.be(""); + expect(ipv6.host).to.be("2001:0db8:85a3:0042:1000:8a2e:0370:7334"); + expect(ipv6.port).to.be(""); + expect(ipv6short.protocol).to.be(""); + expect(ipv6short.host).to.be("2001:db8:85a3:42:1000:8a2e:370:7334"); + expect(ipv6short.port).to.be(""); + expect(ipv6port.protocol).to.be(""); + expect(ipv6port.host).to.be("2001:db8:85a3:42:1000:8a2e:370:7334"); + expect(ipv6port.port).to.be("80"); + expect(ipv6abbrev.protocol).to.be(""); + expect(ipv6abbrev.host).to.be("2001::7334:a:80"); + expect(ipv6abbrev.port).to.be(""); + expect(ipv6http.protocol).to.be("http"); + expect(ipv6http.port).to.be("80"); + expect(ipv6http.host).to.be("2001::7334:a"); + expect(ipv6query.protocol).to.be("http"); + expect(ipv6query.port).to.be("80"); + expect(ipv6query.host).to.be("2001::7334:a"); + expect(ipv6query.relative).to.be("/foo/bar?foo=bar"); + + const withUserInfo = parseuri("ws://foo:bar@google.com"); + + expect(withUserInfo.protocol).to.eql("ws"); + expect(withUserInfo.userInfo).to.eql("foo:bar"); + expect(withUserInfo.user).to.eql("foo"); + expect(withUserInfo.password).to.eql("bar"); + expect(withUserInfo.host).to.eql("google.com"); + + const relativeWithQuery = parseuri("/foo?bar=@example.com"); + + expect(relativeWithQuery.host).to.be(""); + expect(relativeWithQuery.path).to.be("/foo"); + expect(relativeWithQuery.query).to.be("bar=@example.com"); + }); +}); From 047f420b86a669752536ff425261e7be60a80692 Mon Sep 17 00:00:00 2001 From: Zong Date: Tue, 10 Jan 2023 21:01:21 +0800 Subject: [PATCH 11/21] fix: use explicit context for setTimeout function (#699) In order to fix "Illegal invocation" errors that happen on some platforms. --- lib/util.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/util.ts b/lib/util.ts index 48e927eeb..442d813e3 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -10,16 +10,16 @@ export function pick(obj, ...attr) { } // Keep a reference to the real timeout functions so they can be used when overridden -const NATIVE_SET_TIMEOUT = setTimeout; -const NATIVE_CLEAR_TIMEOUT = clearTimeout; +const NATIVE_SET_TIMEOUT = globalThis.setTimeout; +const NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout; export function installTimerFunctions(obj, opts) { if (opts.useNativeTimers) { obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis); obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis); } else { - obj.setTimeoutFn = setTimeout.bind(globalThis); - obj.clearTimeoutFn = clearTimeout.bind(globalThis); + obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis); + obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis); } } From e2b39b63f1e8f2692548e0864cc33117781e73d8 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Tue, 10 Jan 2023 17:05:58 +0100 Subject: [PATCH 12/21] chore(release): 6.3.0 Diff: https://github.com/socketio/engine.io-client/compare/6.2.3...6.3.0 --- CHANGELOG.md | 48 +- dist/engine.io.esm.min.js | 6 +- dist/engine.io.esm.min.js.map | 2 +- dist/engine.io.js | 905 +++++++++++----------------------- dist/engine.io.js.map | 2 +- dist/engine.io.min.js | 6 +- dist/engine.io.min.js.map | 2 +- package.json | 2 +- 8 files changed, 340 insertions(+), 633 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4efeaca33..5fde09bb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,15 +1,24 @@ # History +## 2023 + +- [6.3.0](#63O-2023-01-10) (2023-01-10) + +## 2022 + - [6.2.3](#623-2022-10-13) (2022-10-13) - [6.2.2](#622-2022-05-02) (2022-05-02) - [6.2.1](#621-2022-04-17) (2022-04-17) - [6.2.0](#620-2022-04-17) (2022-04-17) + +## 2021 + - [6.0.3](#603-2021-11-14) (2021-11-14) (from the [6.0.x](https://github.com/socketio/engine.io-client/tree/6.0.x) branch) - [6.1.1](#611-2021-11-14) (2021-11-14) - [6.1.0](#610-2021-11-08) (2021-11-08) - [6.0.2](#602-2021-10-15) (2021-10-15) - [6.0.1](#601-2021-10-14) (2021-10-14) -- [6.0.0](#600-2021-10-08) (2021-10-08) +- [**6.0.0**](#600-2021-10-08) (2021-10-08) - [5.2.0](#520-2021-08-29) (2021-08-29) - [5.1.2](#512-2021-06-24) (2021-06-24) - [5.1.1](#511-2021-05-11) (2021-05-11) @@ -17,7 +26,7 @@ - [3.5.2](#352-2021-05-05) (2021-05-05) (from the [3.5.x](https://github.com/socketio/engine.io-client/tree/3.5.x) branch) - [5.1.0](#510-2021-05-04) (2021-05-04) - [5.0.1](#501-2021-03-31) (2021-03-31) -- [5.0.0](#500-2021-03-10) (2021-03-10) +- [**5.0.0**](#500-2021-03-10) (2021-03-10) - [3.5.1](#351-2021-03-02) (2021-03-02) (from the [3.5.x](https://github.com/socketio/engine.io-client/tree/3.5.x) branch) - [4.1.2](#412-2021-02-25) (2021-02-25) - [4.1.1](#411-2021-02-02) (2021-02-02) @@ -25,6 +34,37 @@ # Release notes +## [6.3.0](https://github.com/socketio/engine.io-client/compare/6.2.3...6.3.0) (2023-01-10) + + +### Bug Fixes + +* properly parse relative URL with a "@" character ([12b7d78](https://github.com/socketio/engine.io-client/commit/12b7d7817e9c0016c970f903de15ed8b4255ea90)) +* use explicit context for setTimeout function ([#699](https://github.com/socketio/engine.io-client/issues/699)) ([047f420](https://github.com/socketio/engine.io-client/commit/047f420b86a669752536ff425261e7be60a80692)) + + +### Features + +* add the "addTrailingSlash" option ([#694](https://github.com/socketio/engine.io-client/issues/694)) ([21a6e12](https://github.com/socketio/engine.io-client/commit/21a6e1219add92157c5442537d24fbe1129a50f5)) + +The trailing slash which was added by default can now be disabled: + +```js +import { Socket } from "engine.io-client"; + +const socket = new Socket("https://example.com", { + addTrailingSlash: false +}); +``` + +In the example above, the request URL will be `https://example.com/engine.io` instead of `https://example.com/engine.io/`. + +### Dependencies + +- [`ws@~8.11.0`](https://github.com/websockets/ws/releases/tag/8.11.0) ([diff](https://github.com/websockets/ws/compare/8.2.3...8.11.0)) + + + ## [6.2.3](https://github.com/socketio/engine.io-client/compare/6.2.2...6.2.3) (2022-10-13) @@ -32,6 +72,10 @@ * properly clear "beforeunload" event listener ([99925a4](https://github.com/socketio/engine.io-client/commit/99925a47750f66d2ad36313243545181512579ee)) +### Dependencies + +- [`ws@~8.2.3`](https://github.com/websockets/ws/releases/tag/8.2.3) (no change) + ## [6.2.2](https://github.com/socketio/engine.io-client/compare/6.2.1...6.2.2) (2022-05-02) diff --git a/dist/engine.io.esm.min.js b/dist/engine.io.esm.min.js index 1921cb6cf..6c1380b7e 100644 --- a/dist/engine.io.esm.min.js +++ b/dist/engine.io.esm.min.js @@ -1,7 +1,7 @@ /*! - * Engine.IO v6.2.3 - * (c) 2014-2022 Guillermo Rauch + * Engine.IO v6.3.0 + * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ -const t=Object.create(null);t.open="0",t.close="1",t.ping="2",t.pong="3",t.message="4",t.upgrade="5",t.noop="6";const e=Object.create(null);Object.keys(t).forEach((s=>{e[t[s]]=s}));const s={type:"error",data:"parser error"},r="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),o="function"==typeof ArrayBuffer,i=({type:e,data:s},i,a)=>{return r&&s instanceof Blob?i?a(s):n(s,a):o&&(s instanceof ArrayBuffer||(h=s,"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(h):h&&h.buffer instanceof ArrayBuffer))?i?a(s):n(new Blob([s]),a):a(t[e]+(s||""));var h},n=(t,e)=>{const s=new FileReader;return s.onload=function(){const t=s.result.split(",")[1];e("b"+t)},s.readAsDataURL(t)};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h="undefined"==typeof Uint8Array?[]:new Uint8Array(256),p=0;p{if("string"!=typeof t)return{type:"message",data:d(t,r)};const o=t.charAt(0);if("b"===o)return{type:"message",data:u(t.substring(1),r)};return e[o]?t.length>1?{type:e[o],data:t.substring(1)}:{type:e[o]}:s},u=(t,e)=>{if(c){const s=function(t){var e,s,r,o,i,n=.75*t.length,a=t.length,p=0;"="===t[t.length-1]&&(n--,"="===t[t.length-2]&&n--);var c=new ArrayBuffer(n),l=new Uint8Array(c);for(e=0;e>4,l[p++]=(15&r)<<4|o>>2,l[p++]=(3&o)<<6|63&i;return c}(t);return d(s,e)}return{base64:!0,data:t}},d=(t,e)=>"blob"===e&&t instanceof ArrayBuffer?new Blob([t]):t,f=String.fromCharCode(30);function y(t){if(t)return function(t){for(var e in y.prototype)t[e]=y.prototype[e];return t}(t)}y.prototype.on=y.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},y.prototype.once=function(t,e){function s(){this.off(t,s),e.apply(this,arguments)}return s.fn=e,this.on(t,s),this},y.prototype.off=y.prototype.removeListener=y.prototype.removeAllListeners=y.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var s,r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;o(t.hasOwnProperty(s)&&(e[s]=t[s]),e)),{})}const b=setTimeout,v=clearTimeout;function w(t,e){e.useNativeTimers?(t.setTimeoutFn=b.bind(m),t.clearTimeoutFn=v.bind(m)):(t.setTimeoutFn=setTimeout.bind(m),t.clearTimeoutFn=clearTimeout.bind(m))}class k extends Error{constructor(t,e,s){super(t),this.description=e,this.context=s,this.type="TransportError"}}class x extends y{constructor(t){super(),this.writable=!1,w(this,t),this.opts=t,this.query=t.query,this.readyState="",this.socket=t.socket}onError(t,e,s){return super.emitReserved("error",new k(t,e,s)),this}open(){return"closed"!==this.readyState&&""!==this.readyState||(this.readyState="opening",this.doOpen()),this}close(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}send(t){"open"===this.readyState&&this.write(t)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(t){const e=l(t,this.socket.binaryType);this.onPacket(e)}onPacket(t){super.emitReserved("packet",t)}onClose(t){this.readyState="closed",super.emitReserved("close",t)}}const T="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),S={};let R,E=0,L=0;function B(t){let e="";do{e=T[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function C(){const t=B(+new Date);return t!==R?(E=0,R=t):t+"."+B(E++)}for(;L<64;L++)S[T[L]]=L;function q(t){let e="";for(let s in t)t.hasOwnProperty(s)&&(e.length&&(e+="&"),e+=encodeURIComponent(s)+"="+encodeURIComponent(t[s]));return e}let O=!1;try{O="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(t){}const P=O;function A(t){const e=t.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!e||P))return new XMLHttpRequest}catch(t){}if(!e)try{return new(m[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}function U(){}const H=null!=new A({xdomain:!1}).responseType;class j extends y{constructor(t,e){super(),w(this,e),this.opts=e,this.method=e.method||"GET",this.uri=t,this.async=!1!==e.async,this.data=void 0!==e.data?e.data:null,this.create()}create(){const t=g(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd,t.xscheme=!!this.opts.xs;const e=this.xhr=new A(t);try{e.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(let t in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(t)&&e.setRequestHeader(t,this.opts.extraHeaders[t])}}catch(t){}if("POST"===this.method)try{e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{e.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in e&&(e.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(e.timeout=this.opts.requestTimeout),e.onreadystatechange=()=>{4===e.readyState&&(200===e.status||1223===e.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof e.status?e.status:0)}),0))},e.send(this.data)}catch(t){return void this.setTimeoutFn((()=>{this.onError(t)}),0)}"undefined"!=typeof document&&(this.index=j.requestsCount++,j.requests[this.index]=this)}onError(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}cleanup(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=U,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete j.requests[this.index],this.xhr=null}}onLoad(){const t=this.xhr.responseText;null!==t&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(j.requestsCount=0,j.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",_);else if("function"==typeof addEventListener){addEventListener("onpagehide"in m?"pagehide":"unload",_,!1)}function _(){for(let t in j.requests)j.requests.hasOwnProperty(t)&&j.requests[t].abort()}const F="function"==typeof Promise&&"function"==typeof Promise.resolve?t=>Promise.resolve().then(t):(t,e)=>e(t,0),D=m.WebSocket||m.MozWebSocket,I="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();const M={websocket:class extends x{constructor(t){super(t),this.supportsBinary=!t.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const t=this.uri(),e=this.opts.protocols,s=I?{}:g(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(s.headers=this.opts.extraHeaders);try{this.ws=I?new D(t,e,s):e?new D(t,e):new D(t)}catch(t){return this.emitReserved("error",t)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let e=0;e{try{this.ws.send(t)}catch(t){}r&&F((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){let t=this.query||{};const e=this.opts.secure?"wss":"ws";let s="";this.opts.port&&("wss"===e&&443!==Number(this.opts.port)||"ws"===e&&80!==Number(this.opts.port))&&(s=":"+this.opts.port),this.opts.timestampRequests&&(t[this.opts.timestampParam]=C()),this.supportsBinary||(t.b64=1);const r=q(t);return e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+s+this.opts.path+(r.length?"?"+r:"")}check(){return!!D}},polling:class extends x{constructor(t){if(super(t),this.polling=!1,"undefined"!=typeof location){const e="https:"===location.protocol;let s=location.port;s||(s=e?"443":"80"),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||s!==t.port,this.xs=t.secure!==e}const e=t&&t.forceBase64;this.supportsBinary=H&&!e}get name(){return"polling"}doOpen(){this.poll()}pause(t){this.readyState="pausing";const e=()=>{this.readyState="paused",t()};if(this.polling||!this.writable){let t=0;this.polling&&(t++,this.once("pollComplete",(function(){--t||e()}))),this.writable||(t++,this.once("drain",(function(){--t||e()})))}else e()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){((t,e)=>{const s=t.split(f),r=[];for(let t=0;t{if("opening"===this.readyState&&"open"===t.type&&this.onOpen(),"close"===t.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(t)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState&&this.poll())}doClose(){const t=()=>{this.write([{type:"close"}])};"open"===this.readyState?t():this.once("open",t)}write(t){this.writable=!1,((t,e)=>{const s=t.length,r=new Array(s);let o=0;t.forEach(((t,n)=>{i(t,!1,(t=>{r[n]=t,++o===s&&e(r.join(f))}))}))})(t,(t=>{this.doWrite(t,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){let t=this.query||{};const e=this.opts.secure?"https":"http";let s="";!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=C()),this.supportsBinary||t.sid||(t.b64=1),this.opts.port&&("https"===e&&443!==Number(this.opts.port)||"http"===e&&80!==Number(this.opts.port))&&(s=":"+this.opts.port);const r=q(t);return e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+s+this.opts.path+(r.length?"?"+r:"")}request(t={}){return Object.assign(t,{xd:this.xd,xs:this.xs},this.opts),new j(this.uri(),t)}doWrite(t,e){const s=this.request({method:"POST",data:t});s.on("success",e),s.on("error",((t,e)=>{this.onError("xhr post error",t,e)}))}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",((t,e)=>{this.onError("xhr poll error",t,e)})),this.pollXhr=t}}},W=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,N=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function X(t){const e=t,s=t.indexOf("["),r=t.indexOf("]");-1!=s&&-1!=r&&(t=t.substring(0,s)+t.substring(s,r).replace(/:/g,";")+t.substring(r,t.length));let o=W.exec(t||""),i={},n=14;for(;n--;)i[N[n]]=o[n]||"";return-1!=s&&-1!=r&&(i.source=e,i.host=i.host.substring(1,i.host.length-1).replace(/;/g,":"),i.authority=i.authority.replace("[","").replace("]","").replace(/;/g,":"),i.ipv6uri=!0),i.pathNames=function(t,e){const s=/\/{2,9}/g,r=e.replace(s,"/").split("/");"/"!=e.slice(0,1)&&0!==e.length||r.splice(0,1);"/"==e.slice(-1)&&r.splice(r.length-1,1);return r}(0,i.path),i.queryKey=function(t,e){const s={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,r){e&&(s[e]=r)})),s}(0,i.query),i}class $ extends y{constructor(t,e={}){super(),t&&"object"==typeof t&&(e=t,t=null),t?(t=X(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=X(e.host).host),w(this,e),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=e.transports||["polling","websocket"],this.readyState="",this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},e),this.opts.path=this.opts.path.replace(/\/$/,"")+"/","string"==typeof this.opts.query&&(this.opts.query=function(t){let e={},s=t.split("&");for(let t=0,r=s.length;t{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(t){const e=Object.assign({},this.opts.query);e.EIO=4,e.transport=t,this.id&&(e.sid=this.id);const s=Object.assign({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new M[t](s)}open(){let t;if(this.opts.rememberUpgrade&&$.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(t=>this.onClose("transport close",t)))}probe(t){let e=this.createTransport(t),s=!1;$.priorWebsocketSuccess=!1;const r=()=>{s||(e.send([{type:"ping",data:"probe"}]),e.once("packet",(t=>{if(!s)if("pong"===t.type&&"probe"===t.data){if(this.upgrading=!0,this.emitReserved("upgrading",e),!e)return;$.priorWebsocketSuccess="websocket"===e.name,this.transport.pause((()=>{s||"closed"!==this.readyState&&(p(),this.setTransport(e),e.send([{type:"upgrade"}]),this.emitReserved("upgrade",e),e=null,this.upgrading=!1,this.flush())}))}else{const t=new Error("probe error");t.transport=e.name,this.emitReserved("upgradeError",t)}})))};function o(){s||(s=!0,p(),e.close(),e=null)}const i=t=>{const s=new Error("probe error: "+t);s.transport=e.name,o(),this.emitReserved("upgradeError",s)};function n(){i("transport closed")}function a(){i("socket closed")}function h(t){e&&t.name!==e.name&&o()}const p=()=>{e.removeListener("open",r),e.removeListener("error",i),e.removeListener("close",n),this.off("close",a),this.off("upgrading",h)};e.once("open",r),e.once("error",i),e.once("close",n),this.once("close",a),this.once("upgrading",h),e.open()}onOpen(){if(this.readyState="open",$.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade&&this.transport.pause){let t=0;const e=this.upgrades.length;for(;t{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let t=1;for(let s=0;s=57344?s+=3:(r++,s+=4);return s}(e):Math.ceil(1.33*(e.byteLength||e.size))),s>0&&t>this.maxPayload)return this.writeBuffer.slice(0,s);t+=2}var e;return this.writeBuffer}write(t,e,s){return this.sendPacket("message",t,e,s),this}send(t,e,s){return this.sendPacket("message",t,e,s),this}sendPacket(t,e,s,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof s&&(r=s,s=null),"closing"===this.readyState||"closed"===this.readyState)return;(s=s||{}).compress=!1!==s.compress;const o={type:t,data:e,options:s};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}close(){const t=()=>{this.onClose("forced close"),this.transport.close()},e=()=>{this.off("upgrade",e),this.off("upgradeError",e),t()},s=()=>{this.once("upgrade",e),this.once("upgradeError",e)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?s():t()})):this.upgrading?s():t()),this}onError(t){$.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(t,e){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",t,e),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(t){const e=[];let s=0;const r=t.length;for(;s{e[t[s]]=s}));const s={type:"error",data:"parser error"},r="function"==typeof Blob||"undefined"!=typeof Blob&&"[object BlobConstructor]"===Object.prototype.toString.call(Blob),o="function"==typeof ArrayBuffer,i=({type:e,data:s},i,a)=>{return r&&s instanceof Blob?i?a(s):n(s,a):o&&(s instanceof ArrayBuffer||(h=s,"function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(h):h&&h.buffer instanceof ArrayBuffer))?i?a(s):n(new Blob([s]),a):a(t[e]+(s||""));var h},n=(t,e)=>{const s=new FileReader;return s.onload=function(){const t=s.result.split(",")[1];e("b"+t)},s.readAsDataURL(t)};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h="undefined"==typeof Uint8Array?[]:new Uint8Array(256),p=0;p{if("string"!=typeof t)return{type:"message",data:d(t,r)};const o=t.charAt(0);if("b"===o)return{type:"message",data:u(t.substring(1),r)};return e[o]?t.length>1?{type:e[o],data:t.substring(1)}:{type:e[o]}:s},u=(t,e)=>{if(c){const s=function(t){var e,s,r,o,i,n=.75*t.length,a=t.length,p=0;"="===t[t.length-1]&&(n--,"="===t[t.length-2]&&n--);var c=new ArrayBuffer(n),l=new Uint8Array(c);for(e=0;e>4,l[p++]=(15&r)<<4|o>>2,l[p++]=(3&o)<<6|63&i;return c}(t);return d(s,e)}return{base64:!0,data:t}},d=(t,e)=>"blob"===e&&t instanceof ArrayBuffer?new Blob([t]):t,f=String.fromCharCode(30);function y(t){if(t)return function(t){for(var e in y.prototype)t[e]=y.prototype[e];return t}(t)}y.prototype.on=y.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},y.prototype.once=function(t,e){function s(){this.off(t,s),e.apply(this,arguments)}return s.fn=e,this.on(t,s),this},y.prototype.off=y.prototype.removeListener=y.prototype.removeAllListeners=y.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var s,r=this._callbacks["$"+t];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;o(t.hasOwnProperty(s)&&(e[s]=t[s]),e)),{})}const b=m.setTimeout,v=m.clearTimeout;function w(t,e){e.useNativeTimers?(t.setTimeoutFn=b.bind(m),t.clearTimeoutFn=v.bind(m)):(t.setTimeoutFn=m.setTimeout.bind(m),t.clearTimeoutFn=m.clearTimeout.bind(m))}class k extends Error{constructor(t,e,s){super(t),this.description=e,this.context=s,this.type="TransportError"}}class x extends y{constructor(t){super(),this.writable=!1,w(this,t),this.opts=t,this.query=t.query,this.socket=t.socket}onError(t,e,s){return super.emitReserved("error",new k(t,e,s)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return"opening"!==this.readyState&&"open"!==this.readyState||(this.doClose(),this.onClose()),this}send(t){"open"===this.readyState&&this.write(t)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(t){const e=l(t,this.socket.binaryType);this.onPacket(e)}onPacket(t){super.emitReserved("packet",t)}onClose(t){this.readyState="closed",super.emitReserved("close",t)}pause(t){}}const T="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(""),R={};let S,E=0,B=0;function L(t){let e="";do{e=T[t%64]+e,t=Math.floor(t/64)}while(t>0);return e}function C(){const t=L(+new Date);return t!==S?(E=0,S=t):t+"."+L(E++)}for(;B<64;B++)R[T[B]]=B;function q(t){let e="";for(let s in t)t.hasOwnProperty(s)&&(e.length&&(e+="&"),e+=encodeURIComponent(s)+"="+encodeURIComponent(t[s]));return e}let O=!1;try{O="undefined"!=typeof XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}catch(t){}const P=O;function A(t){const e=t.xdomain;try{if("undefined"!=typeof XMLHttpRequest&&(!e||P))return new XMLHttpRequest}catch(t){}if(!e)try{return new(m[["Active"].concat("Object").join("X")])("Microsoft.XMLHTTP")}catch(t){}}function U(){}const H=null!=new A({xdomain:!1}).responseType;class j extends y{constructor(t,e){super(),w(this,e),this.opts=e,this.method=e.method||"GET",this.uri=t,this.async=!1!==e.async,this.data=void 0!==e.data?e.data:null,this.create()}create(){const t=g(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd,t.xscheme=!!this.opts.xs;const e=this.xhr=new A(t);try{e.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders){e.setDisableHeaderCheck&&e.setDisableHeaderCheck(!0);for(let t in this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(t)&&e.setRequestHeader(t,this.opts.extraHeaders[t])}}catch(t){}if("POST"===this.method)try{e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(t){}try{e.setRequestHeader("Accept","*/*")}catch(t){}"withCredentials"in e&&(e.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(e.timeout=this.opts.requestTimeout),e.onreadystatechange=()=>{4===e.readyState&&(200===e.status||1223===e.status?this.onLoad():this.setTimeoutFn((()=>{this.onError("number"==typeof e.status?e.status:0)}),0))},e.send(this.data)}catch(t){return void this.setTimeoutFn((()=>{this.onError(t)}),0)}"undefined"!=typeof document&&(this.index=j.requestsCount++,j.requests[this.index]=this)}onError(t){this.emitReserved("error",t,this.xhr),this.cleanup(!0)}cleanup(t){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=U,t)try{this.xhr.abort()}catch(t){}"undefined"!=typeof document&&delete j.requests[this.index],this.xhr=null}}onLoad(){const t=this.xhr.responseText;null!==t&&(this.emitReserved("data",t),this.emitReserved("success"),this.cleanup())}abort(){this.cleanup()}}if(j.requestsCount=0,j.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",_);else if("function"==typeof addEventListener){addEventListener("onpagehide"in m?"pagehide":"unload",_,!1)}function _(){for(let t in j.requests)j.requests.hasOwnProperty(t)&&j.requests[t].abort()}const F="function"==typeof Promise&&"function"==typeof Promise.resolve?t=>Promise.resolve().then(t):(t,e)=>e(t,0),D=m.WebSocket||m.MozWebSocket,I="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase();const M={websocket:class extends x{constructor(t){super(t),this.supportsBinary=!t.forceBase64}get name(){return"websocket"}doOpen(){if(!this.check())return;const t=this.uri(),e=this.opts.protocols,s=I?{}:g(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(s.headers=this.opts.extraHeaders);try{this.ws=I?new D(t,e,s):e?new D(t,e):new D(t)}catch(t){return this.emitReserved("error",t)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=t=>this.onClose({description:"websocket connection closed",context:t}),this.ws.onmessage=t=>this.onData(t.data),this.ws.onerror=t=>this.onError("websocket error",t)}write(t){this.writable=!1;for(let e=0;e{try{this.ws.send(t)}catch(t){}r&&F((()=>{this.writable=!0,this.emitReserved("drain")}),this.setTimeoutFn)}))}}doClose(){void 0!==this.ws&&(this.ws.close(),this.ws=null)}uri(){let t=this.query||{};const e=this.opts.secure?"wss":"ws";let s="";this.opts.port&&("wss"===e&&443!==Number(this.opts.port)||"ws"===e&&80!==Number(this.opts.port))&&(s=":"+this.opts.port),this.opts.timestampRequests&&(t[this.opts.timestampParam]=C()),this.supportsBinary||(t.b64=1);const r=q(t);return e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+s+this.opts.path+(r.length?"?"+r:"")}check(){return!!D}},polling:class extends x{constructor(t){if(super(t),this.polling=!1,"undefined"!=typeof location){const e="https:"===location.protocol;let s=location.port;s||(s=e?"443":"80"),this.xd="undefined"!=typeof location&&t.hostname!==location.hostname||s!==t.port,this.xs=t.secure!==e}const e=t&&t.forceBase64;this.supportsBinary=H&&!e}get name(){return"polling"}doOpen(){this.poll()}pause(t){this.readyState="pausing";const e=()=>{this.readyState="paused",t()};if(this.polling||!this.writable){let t=0;this.polling&&(t++,this.once("pollComplete",(function(){--t||e()}))),this.writable||(t++,this.once("drain",(function(){--t||e()})))}else e()}poll(){this.polling=!0,this.doPoll(),this.emitReserved("poll")}onData(t){((t,e)=>{const s=t.split(f),r=[];for(let t=0;t{if("opening"===this.readyState&&"open"===t.type&&this.onOpen(),"close"===t.type)return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(t)})),"closed"!==this.readyState&&(this.polling=!1,this.emitReserved("pollComplete"),"open"===this.readyState&&this.poll())}doClose(){const t=()=>{this.write([{type:"close"}])};"open"===this.readyState?t():this.once("open",t)}write(t){this.writable=!1,((t,e)=>{const s=t.length,r=new Array(s);let o=0;t.forEach(((t,n)=>{i(t,!1,(t=>{r[n]=t,++o===s&&e(r.join(f))}))}))})(t,(t=>{this.doWrite(t,(()=>{this.writable=!0,this.emitReserved("drain")}))}))}uri(){let t=this.query||{};const e=this.opts.secure?"https":"http";let s="";!1!==this.opts.timestampRequests&&(t[this.opts.timestampParam]=C()),this.supportsBinary||t.sid||(t.b64=1),this.opts.port&&("https"===e&&443!==Number(this.opts.port)||"http"===e&&80!==Number(this.opts.port))&&(s=":"+this.opts.port);const r=q(t);return e+"://"+(-1!==this.opts.hostname.indexOf(":")?"["+this.opts.hostname+"]":this.opts.hostname)+s+this.opts.path+(r.length?"?"+r:"")}request(t={}){return Object.assign(t,{xd:this.xd,xs:this.xs},this.opts),new j(this.uri(),t)}doWrite(t,e){const s=this.request({method:"POST",data:t});s.on("success",e),s.on("error",((t,e)=>{this.onError("xhr post error",t,e)}))}doPoll(){const t=this.request();t.on("data",this.onData.bind(this)),t.on("error",((t,e)=>{this.onError("xhr poll error",t,e)})),this.pollXhr=t}}},W=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,N=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function X(t){const e=t,s=t.indexOf("["),r=t.indexOf("]");-1!=s&&-1!=r&&(t=t.substring(0,s)+t.substring(s,r).replace(/:/g,";")+t.substring(r,t.length));let o=W.exec(t||""),i={},n=14;for(;n--;)i[N[n]]=o[n]||"";return-1!=s&&-1!=r&&(i.source=e,i.host=i.host.substring(1,i.host.length-1).replace(/;/g,":"),i.authority=i.authority.replace("[","").replace("]","").replace(/;/g,":"),i.ipv6uri=!0),i.pathNames=function(t,e){const s=/\/{2,9}/g,r=e.replace(s,"/").split("/");"/"!=e.slice(0,1)&&0!==e.length||r.splice(0,1);"/"==e.slice(-1)&&r.splice(r.length-1,1);return r}(0,i.path),i.queryKey=function(t,e){const s={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,(function(t,e,r){e&&(s[e]=r)})),s}(0,i.query),i}class $ extends y{constructor(t,e={}){super(),this.writeBuffer=[],t&&"object"==typeof t&&(e=t,t=null),t?(t=X(t),e.hostname=t.host,e.secure="https"===t.protocol||"wss"===t.protocol,e.port=t.port,t.query&&(e.query=t.query)):e.host&&(e.hostname=X(e.host).host),w(this,e),this.secure=null!=e.secure?e.secure:"undefined"!=typeof location&&"https:"===location.protocol,e.hostname&&!e.port&&(e.port=this.secure?"443":"80"),this.hostname=e.hostname||("undefined"!=typeof location?location.hostname:"localhost"),this.port=e.port||("undefined"!=typeof location&&location.port?location.port:this.secure?"443":"80"),this.transports=e.transports||["polling","websocket"],this.writeBuffer=[],this.prevBufferLen=0,this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},e),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),"string"==typeof this.opts.query&&(this.opts.query=function(t){let e={},s=t.split("&");for(let t=0,r=s.length;t{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this.beforeunloadEventListener,!1)),"localhost"!==this.hostname&&(this.offlineEventListener=()=>{this.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",this.offlineEventListener,!1))),this.open()}createTransport(t){const e=Object.assign({},this.opts.query);e.EIO=4,e.transport=t,this.id&&(e.sid=this.id);const s=Object.assign({},this.opts.transportOptions[t],this.opts,{query:e,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new M[t](s)}open(){let t;if(this.opts.rememberUpgrade&&$.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))t="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((()=>{this.emitReserved("error","No transports available")}),0);t=this.transports[0]}this.readyState="opening";try{t=this.createTransport(t)}catch(t){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)}setTransport(t){this.transport&&this.transport.removeAllListeners(),this.transport=t,t.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(t=>this.onClose("transport close",t)))}probe(t){let e=this.createTransport(t),s=!1;$.priorWebsocketSuccess=!1;const r=()=>{s||(e.send([{type:"ping",data:"probe"}]),e.once("packet",(t=>{if(!s)if("pong"===t.type&&"probe"===t.data){if(this.upgrading=!0,this.emitReserved("upgrading",e),!e)return;$.priorWebsocketSuccess="websocket"===e.name,this.transport.pause((()=>{s||"closed"!==this.readyState&&(p(),this.setTransport(e),e.send([{type:"upgrade"}]),this.emitReserved("upgrade",e),e=null,this.upgrading=!1,this.flush())}))}else{const t=new Error("probe error");t.transport=e.name,this.emitReserved("upgradeError",t)}})))};function o(){s||(s=!0,p(),e.close(),e=null)}const i=t=>{const s=new Error("probe error: "+t);s.transport=e.name,o(),this.emitReserved("upgradeError",s)};function n(){i("transport closed")}function a(){i("socket closed")}function h(t){e&&t.name!==e.name&&o()}const p=()=>{e.removeListener("open",r),e.removeListener("error",i),e.removeListener("close",n),this.off("close",a),this.off("upgrading",h)};e.once("open",r),e.once("error",i),e.once("close",n),this.once("close",a),this.once("upgrading",h),e.open()}onOpen(){if(this.readyState="open",$.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade){let t=0;const e=this.upgrades.length;for(;t{this.onClose("ping timeout")}),this.pingInterval+this.pingTimeout),this.opts.autoUnref&&this.pingTimeoutTimer.unref()}onDrain(){this.writeBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0===this.writeBuffer.length?this.emitReserved("drain"):this.flush()}flush(){if("closed"!==this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){const t=this.getWritablePackets();this.transport.send(t),this.prevBufferLen=t.length,this.emitReserved("flush")}}getWritablePackets(){if(!(this.maxPayload&&"polling"===this.transport.name&&this.writeBuffer.length>1))return this.writeBuffer;let t=1;for(let s=0;s=57344?s+=3:(r++,s+=4);return s}(e):Math.ceil(1.33*(e.byteLength||e.size))),s>0&&t>this.maxPayload)return this.writeBuffer.slice(0,s);t+=2}var e;return this.writeBuffer}write(t,e,s){return this.sendPacket("message",t,e,s),this}send(t,e,s){return this.sendPacket("message",t,e,s),this}sendPacket(t,e,s,r){if("function"==typeof e&&(r=e,e=void 0),"function"==typeof s&&(r=s,s=null),"closing"===this.readyState||"closed"===this.readyState)return;(s=s||{}).compress=!1!==s.compress;const o={type:t,data:e,options:s};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),r&&this.once("flush",r),this.flush()}close(){const t=()=>{this.onClose("forced close"),this.transport.close()},e=()=>{this.off("upgrade",e),this.off("upgradeError",e),t()},s=()=>{this.once("upgrade",e),this.once("upgradeError",e)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(()=>{this.upgrading?s():t()})):this.upgrading?s():t()),this}onError(t){$.priorWebsocketSuccess=!1,this.emitReserved("error",t),this.onClose("transport error",t)}onClose(t,e){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",t,e),this.writeBuffer=[],this.prevBufferLen=0)}filterUpgrades(t){const e=[];let s=0;const r=t.length;for(;s {\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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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 = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = 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 = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = 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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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} options.\n * @api private\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.readyState = \"\";\n this.socket = opts.socket;\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 * @api 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 * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\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 * @api 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 * @api 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 * @api protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n /**\n * Transport name.\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 * @api private\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\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 * @api public\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\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 * @api private\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} data packets\n * @param {Function} drain callback\n * @api private\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 * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api 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 * @api 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 * @api public\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 * @api private\n */\n create() {\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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 * @api private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @api 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 * @api 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 * @api public\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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api 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 /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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 /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses an URI\n *\n * @author Steven Levithan (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 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 } 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\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} opts - options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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 rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api 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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api 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 * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @api 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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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 * @api private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\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 * @api private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @api 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 * @api 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 * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\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} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api 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 * @api public\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 * @api private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @api 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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport const protocol = Socket.protocol;\nexport { Transport } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./transports/websocket-constructor.js\";\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","obj","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","globalThis","clearTimeoutFn","TransportError","Error","constructor","reason","description","context","super","Transport","writable","query","readyState","socket","onError","open","doOpen","close","doClose","onClose","send","packets","write","onOpen","onData","packet","onPacket","details","alphabet","map","prev","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Request","uri","method","async","undefined","xd","xscheme","xs","xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","transports","websocket","forceBase64","name","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","schema","secure","port","Number","timestampRequests","timestampParam","b64","encodedQuery","hostname","indexOf","path","polling","location","isSSL","protocol","poll","pause","onPause","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","count","encodePayload","doWrite","sid","request","assign","req","xhrStatus","pollXhr","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","qs","qry","pairs","l","pair","decodeURIComponent","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","createTransport","EIO","priorWebsocketSuccess","shift","setTransport","onDrain","probe","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"engine.io.esm.min.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/index.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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport const protocol = Socket.protocol;\nexport { Transport } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./transports/websocket-constructor.js\";\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","obj","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","TransportError","Error","constructor","reason","description","context","super","Transport","writable","query","socket","onError","open","readyState","doOpen","close","doClose","onClose","send","packets","write","onOpen","onData","packet","onPacket","details","pause","onPause","alphabet","map","prev","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Request","uri","method","async","undefined","xd","xscheme","xs","xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","transports","websocket","forceBase64","name","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","schema","secure","port","Number","timestampRequests","timestampParam","b64","encodedQuery","hostname","indexOf","path","polling","location","isSSL","protocol","poll","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","count","encodePayload","doWrite","sid","request","assign","req","xhrStatus","pollXhr","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","qs","qry","pairs","l","pair","decodeURIComponent","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","createTransport","EIO","priorWebsocketSuccess","shift","setTransport","onDrain","probe","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file diff --git a/dist/engine.io.js b/dist/engine.io.js index 2395d98c5..2a88cb832 100644 --- a/dist/engine.io.js +++ b/dist/engine.io.js @@ -1,6 +1,6 @@ /*! - * Engine.IO v6.2.3 - * (c) 2014-2022 Guillermo Rauch + * Engine.IO v6.3.0 + * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ (function (global, factory) { @@ -12,64 +12,52 @@ function _typeof(obj) { "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); } - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } - function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); return Constructor; } - function _extends() { - _extends = Object.assign || function (target) { + _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; - for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } - return target; }; - return _extends.apply(this, arguments); } - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } - subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, @@ -77,41 +65,38 @@ configurable: true } }); + Object.defineProperty(subClass, "prototype", { + writable: false + }); if (superClass) _setPrototypeOf(subClass, superClass); } - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; - return _setPrototypeOf(o, p); } - function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } - function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; + _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; @@ -122,34 +107,25 @@ return instance; }; } - return _construct.apply(null, arguments); } - function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } - function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; - _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; - if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } - if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); - _cache.set(Class, Wrapper); } - function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } - Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, @@ -160,77 +136,75 @@ }); return _setPrototypeOf(Wrapper, Class); }; - return _wrapNativeSuper(Class); } - function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } - return self; } - function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; + } else if (call !== void 0) { + throw new TypeError("Derived constructors may only return object or undefined"); } - return _assertThisInitialized(self); } - function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), - result; - + result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } - return _possibleConstructorReturn(this, result); }; } - function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } - return object; } - - function _get(target, property, receiver) { + function _get() { if (typeof Reflect !== "undefined" && Reflect.get) { - _get = Reflect.get; + _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); - if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); - if (desc.get) { - return desc.get.call(receiver); + return desc.get.call(arguments.length < 3 ? target : receiver); } - return desc.value; }; } - - return _get(target, property, receiver || target); + return _get.apply(this, arguments); + } + function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); + } + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); } var PACKET_TYPES = Object.create(null); // no Map = no polyfill - PACKET_TYPES["open"] = "0"; PACKET_TYPES["close"] = "1"; PACKET_TYPES["ping"] = "2"; @@ -248,16 +222,14 @@ }; var withNativeBlob = typeof Blob === "function" || typeof Blob !== "undefined" && Object.prototype.toString.call(Blob) === "[object BlobConstructor]"; - var withNativeArrayBuffer$1 = typeof ArrayBuffer === "function"; // ArrayBuffer.isView method is not defined in IE10 - + var withNativeArrayBuffer$1 = typeof ArrayBuffer === "function"; + // ArrayBuffer.isView method is not defined in IE10 var isView = function isView(obj) { return typeof ArrayBuffer.isView === "function" ? ArrayBuffer.isView(obj) : obj && obj.buffer instanceof ArrayBuffer; }; - var encodePacket = function encodePacket(_ref, supportsBinary, callback) { var type = _ref.type, - data = _ref.data; - + data = _ref.data; if (withNativeBlob && data instanceof Blob) { if (supportsBinary) { return callback(data); @@ -270,20 +242,16 @@ } else { return encodeBlobAsBase64(new Blob([data]), callback); } - } // plain string - - + } + // plain string return callback(PACKET_TYPES[type] + (data || "")); }; - var encodeBlobAsBase64 = function encodeBlobAsBase64(data, callback) { var fileReader = new FileReader(); - fileReader.onload = function () { var content = fileReader.result.split(",")[1]; callback("b" + content); }; - return fileReader.readAsDataURL(data); }; @@ -292,35 +260,29 @@ * Copyright (c) 2022 Niklas von Hertzen * Released under MIT License */ - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Use a lookup table to find the index. - + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // Use a lookup table to find the index. var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); - for (var i$1 = 0; i$1 < chars.length; i$1++) { lookup[chars.charCodeAt(i$1)] = i$1; } - var decode$1 = function decode(base64) { var bufferLength = base64.length * 0.75, - len = base64.length, - i, - p = 0, - encoded1, - encoded2, - encoded3, - encoded4; - + len = base64.length, + i, + p = 0, + encoded1, + encoded2, + encoded3, + encoded4; if (base64[base64.length - 1] === '=') { bufferLength--; - if (base64[base64.length - 2] === '=') { bufferLength--; } } - var arraybuffer = new ArrayBuffer(bufferLength), - bytes = new Uint8Array(arraybuffer); - + bytes = new Uint8Array(arraybuffer); for (i = 0; i < len; i += 4) { encoded1 = lookup[base64.charCodeAt(i)]; encoded2 = lookup[base64.charCodeAt(i + 1)]; @@ -330,12 +292,10 @@ bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; } - return arraybuffer; }; var withNativeArrayBuffer = typeof ArrayBuffer === "function"; - var decodePacket = function decodePacket(encodedPacket, binaryType) { if (typeof encodedPacket !== "string") { return { @@ -343,22 +303,17 @@ data: mapBinary(encodedPacket, binaryType) }; } - var type = encodedPacket.charAt(0); - if (type === "b") { return { type: "message", data: decodeBase64Packet(encodedPacket.substring(1), binaryType) }; } - var packetType = PACKET_TYPES_REVERSE[type]; - if (!packetType) { return ERROR_PACKET; } - return encodedPacket.length > 1 ? { type: PACKET_TYPES_REVERSE[type], data: encodedPacket.substring(1) @@ -366,7 +321,6 @@ type: PACKET_TYPES_REVERSE[type] }; }; - var decodeBase64Packet = function decodeBase64Packet(data, binaryType) { if (withNativeArrayBuffer) { var decoded = decode$1(data); @@ -383,7 +337,6 @@ switch (binaryType) { case "blob": return data instanceof ArrayBuffer ? new Blob([data]) : data; - case "arraybuffer": default: return data; @@ -392,7 +345,6 @@ }; var SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text - var encodePayload = function encodePayload(packets, callback) { // some packets may be added to the array while encoding, so the initial length must be saved var length = packets.length; @@ -402,30 +354,24 @@ // force base64 encoding for binary packets encodePacket(packet, false, function (encodedPacket) { encodedPackets[i] = encodedPacket; - if (++count === length) { callback(encodedPackets.join(SEPARATOR)); } }); }); }; - var decodePayload = function decodePayload(encodedPayload, binaryType) { var encodedPackets = encodedPayload.split(SEPARATOR); var packets = []; - for (var i = 0; i < encodedPackets.length; i++) { var decodedPacket = decodePacket(encodedPackets[i], binaryType); packets.push(decodedPacket); - if (decodedPacket.type === "error") { break; } } - return packets; }; - var protocol = 4; /** @@ -433,9 +379,11 @@ * * @api public */ + function Emitter(obj) { if (obj) return mixin(obj); } + /** * Mixin the emitter properties. * @@ -448,9 +396,9 @@ for (var key in Emitter.prototype) { obj[key] = Emitter.prototype[key]; } - return obj; } + /** * Listen on the given `event` with `fn`. * @@ -460,12 +408,12 @@ * @api public */ - Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) { this._callbacks = this._callbacks || {}; (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); return this; }; + /** * Adds an `event` listener that will be invoked a single * time then automatically removed. @@ -476,17 +424,16 @@ * @api public */ - Emitter.prototype.once = function (event, fn) { function on() { this.off(event, on); fn.apply(this, arguments); } - on.fn = fn; this.on(event, on); return this; }; + /** * Remove the given callback for `event` or all * registered callbacks. @@ -497,44 +444,43 @@ * @api public */ - Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) { - this._callbacks = this._callbacks || {}; // all + this._callbacks = this._callbacks || {}; + // all if (0 == arguments.length) { this._callbacks = {}; return this; - } // specific event - + } + // specific event var callbacks = this._callbacks['$' + event]; - if (!callbacks) return this; // remove all handlers + if (!callbacks) return this; + // remove all handlers if (1 == arguments.length) { delete this._callbacks['$' + event]; return this; - } // remove specific handler - + } + // remove specific handler var cb; - for (var i = 0; i < callbacks.length; i++) { cb = callbacks[i]; - if (cb === fn || cb.fn === fn) { callbacks.splice(i, 1); break; } - } // Remove event specific arrays for event types that no - // one is subscribed for to avoid memory leak. - + } + // Remove event specific arrays for event types that no + // one is subscribed for to avoid memory leak. if (callbacks.length === 0) { delete this._callbacks['$' + event]; } - return this; }; + /** * Emit `event` with the given args. * @@ -543,29 +489,25 @@ * @return {Emitter} */ - Emitter.prototype.emit = function (event) { this._callbacks = this._callbacks || {}; var args = new Array(arguments.length - 1), - callbacks = this._callbacks['$' + event]; - + callbacks = this._callbacks['$' + event]; for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } - if (callbacks) { callbacks = callbacks.slice(0); - for (var i = 0, len = callbacks.length; i < len; ++i) { callbacks[i].apply(this, args); } } - return this; - }; // alias used for reserved events (protected method) - + }; + // alias used for reserved events (protected method) Emitter.prototype.emitReserved = Emitter.prototype.emit; + /** * Return array of callbacks for `event`. * @@ -578,6 +520,7 @@ this._callbacks = this._callbacks || {}; return this._callbacks['$' + event] || []; }; + /** * Check if this emitter has `event` handlers. * @@ -586,7 +529,6 @@ * @api public */ - Emitter.prototype.hasListeners = function (event) { return !!this.listeners(event).length; }; @@ -605,46 +547,40 @@ for (var _len = arguments.length, attr = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { attr[_key - 1] = arguments[_key]; } - return attr.reduce(function (acc, k) { if (obj.hasOwnProperty(k)) { acc[k] = obj[k]; } - return acc; }, {}); - } // Keep a reference to the real timeout functions so they can be used when overridden - - var NATIVE_SET_TIMEOUT = setTimeout; - var NATIVE_CLEAR_TIMEOUT = clearTimeout; + } + // Keep a reference to the real timeout functions so they can be used when overridden + var NATIVE_SET_TIMEOUT = globalThisShim.setTimeout; + var NATIVE_CLEAR_TIMEOUT = globalThisShim.clearTimeout; function installTimerFunctions(obj, opts) { if (opts.useNativeTimers) { obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThisShim); obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThisShim); } else { - obj.setTimeoutFn = setTimeout.bind(globalThisShim); - obj.clearTimeoutFn = clearTimeout.bind(globalThisShim); + obj.setTimeoutFn = globalThisShim.setTimeout.bind(globalThisShim); + obj.clearTimeoutFn = globalThisShim.clearTimeout.bind(globalThisShim); } - } // base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64) - - var BASE64_OVERHEAD = 1.33; // we could also have used `new Blob([obj]).size`, but it isn't supported in IE9 - + } + // base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64) + var BASE64_OVERHEAD = 1.33; + // we could also have used `new Blob([obj]).size`, but it isn't supported in IE9 function byteLength(obj) { if (typeof obj === "string") { return utf8Length(obj); - } // arraybuffer or blob - - + } + // arraybuffer or blob return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD); } - function utf8Length(str) { var c = 0, - length = 0; - + length = 0; for (var i = 0, l = str.length; i < l; i++) { c = str.charCodeAt(i); - if (c < 0x80) { length += 1; } else if (c < 0x800) { @@ -656,52 +592,40 @@ length += 4; } } - return length; } var TransportError = /*#__PURE__*/function (_Error) { _inherits(TransportError, _Error); - var _super = _createSuper(TransportError); - function TransportError(reason, description, context) { var _this; - _classCallCheck(this, TransportError); - _this = _super.call(this, reason); _this.description = description; _this.context = context; _this.type = "TransportError"; return _this; } - - return TransportError; + return _createClass(TransportError); }( /*#__PURE__*/_wrapNativeSuper(Error)); - var Transport = /*#__PURE__*/function (_Emitter) { _inherits(Transport, _Emitter); - var _super2 = _createSuper(Transport); - /** * Transport abstract constructor. * - * @param {Object} options. - * @api private + * @param {Object} opts - options + * @protected */ function Transport(opts) { var _this2; - _classCallCheck(this, Transport); - _this2 = _super2.call(this); _this2.writable = false; installTimerFunctions(_assertThisInitialized(_this2), opts); _this2.opts = opts; _this2.query = opts.query; - _this2.readyState = ""; _this2.socket = opts.socket; return _this2; } @@ -712,84 +636,66 @@ * @param description * @param context - the error context * @return {Transport} for chaining - * @api protected + * @protected */ - - _createClass(Transport, [{ key: "onError", value: function onError(reason, description, context) { _get(_getPrototypeOf(Transport.prototype), "emitReserved", this).call(this, "error", new TransportError(reason, description, context)); - return this; } /** * Opens the transport. - * - * @api public */ - }, { key: "open", value: function open() { - if ("closed" === this.readyState || "" === this.readyState) { - this.readyState = "opening"; - this.doOpen(); - } - + this.readyState = "opening"; + this.doOpen(); return this; } /** * Closes the transport. - * - * @api public */ - }, { key: "close", value: function close() { - if ("opening" === this.readyState || "open" === this.readyState) { + if (this.readyState === "opening" || this.readyState === "open") { this.doClose(); this.onClose(); } - return this; } /** * Sends multiple packets. * * @param {Array} packets - * @api public */ - }, { key: "send", value: function send(packets) { - if ("open" === this.readyState) { + if (this.readyState === "open") { this.write(packets); } } /** * Called upon open * - * @api protected + * @protected */ - }, { key: "onOpen", value: function onOpen() { this.readyState = "open"; this.writable = true; - _get(_getPrototypeOf(Transport.prototype), "emitReserved", this).call(this, "open"); } /** * Called with data. * * @param {String} data - * @api protected + * @protected */ - }, { key: "onData", value: function onData(data) { @@ -799,9 +705,8 @@ /** * Called with a decoded packet. * - * @api protected + * @protected */ - }, { key: "onPacket", value: function onPacket(packet) { @@ -810,29 +715,34 @@ /** * Called upon close. * - * @api protected + * @protected */ - }, { key: "onClose", value: function onClose(details) { this.readyState = "closed"; - _get(_getPrototypeOf(Transport.prototype), "emitReserved", this).call(this, "close", details); } + /** + * Pauses the transport, in order not to lose packets during an upgrade. + * + * @param onPause + */ + }, { + key: "pause", + value: function pause(onPause) {} }]); - return Transport; }(Emitter); // imported from https://github.com/unshiftio/yeast var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), - length = 64, - map = {}; + length = 64, + map = {}; var seed = 0, - i = 0, - prev; + i = 0, + prev; /** * Return a string representing the specified number. * @@ -840,15 +750,12 @@ * @returns {String} The string representation of the number. * @api public */ - function encode$1(num) { var encoded = ''; - do { encoded = alphabet[num % length] + encoded; num = Math.floor(num / length); } while (num > 0); - return encoded; } /** @@ -857,21 +764,19 @@ * @returns {String} A unique id. * @api public */ - function yeast() { var now = encode$1(+new Date()); if (now !== prev) return seed = 0, prev = now; return now + '.' + encode$1(seed++); - } // + } + // // Map each character to its index. // - for (; i < length; i++) { map[alphabet[i]] = i; } // imported from https://github.com/galkn/querystring - /** * Compiles a querystring * Returns string representation of the object @@ -881,14 +786,12 @@ */ function encode(obj) { var str = ''; - for (var i in obj) { if (obj.hasOwnProperty(i)) { if (str.length) str += '&'; str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]); } } - return str; } /** @@ -897,40 +800,35 @@ * @param {String} qs * @api private */ - function decode(qs) { var qry = {}; var pairs = qs.split('&'); - for (var i = 0, l = pairs.length; i < l; i++) { var pair = pairs[i].split('='); qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); } - return qry; } // imported from https://github.com/component/has-cors var value = false; - try { value = typeof XMLHttpRequest !== 'undefined' && 'withCredentials' in new XMLHttpRequest(); - } catch (err) {// if XMLHttp support is disabled in IE then it will throw + } catch (err) { + // if XMLHttp support is disabled in IE then it will throw // when trying to create } - var hasCORS = value; // browser shim for xmlhttprequest module function XHR(opts) { - var xdomain = opts.xdomain; // XMLHttpRequest can be disabled on IE - + var xdomain = opts.xdomain; + // XMLHttpRequest can be disabled on IE try { if ("undefined" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) { return new XMLHttpRequest(); } } catch (e) {} - if (!xdomain) { try { return new globalThisShim[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP"); @@ -939,99 +837,82 @@ } function empty() {} - var hasXHR2 = function () { var xhr = new XHR({ xdomain: false }); return null != xhr.responseType; }(); - var Polling = /*#__PURE__*/function (_Transport) { _inherits(Polling, _Transport); - var _super = _createSuper(Polling); - /** * XHR Polling constructor. * * @param {Object} opts - * @api public + * @package */ function Polling(opts) { var _this; - _classCallCheck(this, Polling); - _this = _super.call(this, opts); _this.polling = false; - if (typeof location !== "undefined") { var isSSL = "https:" === location.protocol; - var port = location.port; // some user agents have empty `location.port` - + var port = location.port; + // some user agents have empty `location.port` if (!port) { port = isSSL ? "443" : "80"; } - _this.xd = typeof location !== "undefined" && opts.hostname !== location.hostname || port !== opts.port; _this.xs = opts.secure !== isSSL; } /** * XHR supports binary */ - - var forceBase64 = opts && opts.forceBase64; _this.supportsBinary = hasXHR2 && !forceBase64; return _this; } - /** - * Transport name. - */ - - _createClass(Polling, [{ - key: "doOpen", - + key: "name", + get: function get() { + return "polling"; + } /** * Opens the socket (triggers polling). We write a PING message to determine * when the transport is open. * - * @api private + * @protected */ + }, { + key: "doOpen", value: function doOpen() { this.poll(); } /** * Pauses polling. * - * @param {Function} callback upon buffers are flushed and transport is paused - * @api private + * @param {Function} onPause - callback upon buffers are flushed and transport is paused + * @package */ - }, { key: "pause", value: function pause(onPause) { var _this2 = this; - this.readyState = "pausing"; - var pause = function pause() { _this2.readyState = "paused"; onPause(); }; - if (this.polling || !this.writable) { var total = 0; - if (this.polling) { total++; this.once("pollComplete", function () { --total || pause(); }); } - if (!this.writable) { total++; this.once("drain", function () { @@ -1045,9 +926,8 @@ /** * Starts polling cycle. * - * @api public + * @private */ - }, { key: "poll", value: function poll() { @@ -1058,41 +938,34 @@ /** * Overloads onData to detect payloads. * - * @api private + * @protected */ - }, { key: "onData", value: function onData(data) { var _this3 = this; - var callback = function callback(packet) { // if its the first message we consider the transport open if ("opening" === _this3.readyState && packet.type === "open") { _this3.onOpen(); - } // if its a close packet, we close the ongoing requests - - + } + // if its a close packet, we close the ongoing requests if ("close" === packet.type) { _this3.onClose({ description: "transport closed by the server" }); - return false; - } // otherwise bypass onData and handle the message - - + } + // otherwise bypass onData and handle the message _this3.onPacket(packet); - }; // decode payload - - - decodePayload(data, this.socket.binaryType).forEach(callback); // if an event did not trigger closing - + }; + // decode payload + decodePayload(data, this.socket.binaryType).forEach(callback); + // if an event did not trigger closing if ("closed" !== this.readyState) { // if we got data we're not polling this.polling = false; this.emitReserved("pollComplete"); - if ("open" === this.readyState) { this.poll(); } @@ -1101,20 +974,17 @@ /** * For polling, send a close packet. * - * @api private + * @protected */ - }, { key: "doClose", value: function doClose() { var _this4 = this; - var close = function close() { _this4.write([{ type: "close" }]); }; - if ("open" === this.readyState) { close(); } else { @@ -1126,21 +996,17 @@ /** * Writes a packets payload. * - * @param {Array} data packets - * @param {Function} drain callback - * @api private + * @param {Array} packets - data packets + * @protected */ - }, { key: "write", value: function write(packets) { var _this5 = this; - this.writable = false; encodePayload(packets, function (data) { _this5.doWrite(data, function () { _this5.writable = true; - _this5.emitReserved("drain"); }); }); @@ -1148,29 +1014,25 @@ /** * Generates uri for connection. * - * @api private + * @private */ - }, { key: "uri", value: function uri() { var query = this.query || {}; var schema = this.opts.secure ? "https" : "http"; - var port = ""; // cache busting is forced - + var port = ""; + // cache busting is forced if (false !== this.opts.timestampRequests) { query[this.opts.timestampParam] = yeast(); } - if (!this.supportsBinary && !query.sid) { query.b64 = 1; - } // avoid port if default for schema - - + } + // avoid port if default for schema if (this.opts.port && ("https" === schema && Number(this.opts.port) !== 443 || "http" === schema && Number(this.opts.port) !== 80)) { port = ":" + this.opts.port; } - var encodedQuery = encode(query); var ipv6 = this.opts.hostname.indexOf(":") !== -1; return schema + "://" + (ipv6 ? "[" + this.opts.hostname + "]" : this.opts.hostname) + port + this.opts.path + (encodedQuery.length ? "?" + encodedQuery : ""); @@ -1179,19 +1041,16 @@ * Creates a request. * * @param {String} method - * @api private + * @private */ - }, { key: "request", value: function request() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - _extends(opts, { xd: this.xd, xs: this.xs }, this.opts); - return new Request(this.uri(), opts); } /** @@ -1199,14 +1058,12 @@ * * @param {String} data to send. * @param {Function} called upon flush. - * @api private + * @private */ - }, { key: "doWrite", value: function doWrite(data, fn) { var _this6 = this; - var req = this.request({ method: "POST", data: data @@ -1219,14 +1076,12 @@ /** * Starts a poll cycle. * - * @api private + * @private */ - }, { key: "doPoll", value: function doPoll() { var _this7 = this; - var req = this.request(); req.on("data", this.onData.bind(this)); req.on("error", function (xhrStatus, context) { @@ -1234,31 +1089,21 @@ }); this.pollXhr = req; } - }, { - key: "name", - get: function get() { - return "polling"; - } }]); - return Polling; }(Transport); var Request = /*#__PURE__*/function (_Emitter) { _inherits(Request, _Emitter); - var _super2 = _createSuper(Request); - /** * Request constructor * * @param {Object} options - * @api public + * @package */ function Request(uri, opts) { var _this8; - _classCallCheck(this, Request); - _this8 = _super2.call(this); installTimerFunctions(_assertThisInitialized(_this8), opts); _this8.opts = opts; @@ -1266,35 +1111,27 @@ _this8.uri = uri; _this8.async = false !== opts.async; _this8.data = undefined !== opts.data ? opts.data : null; - _this8.create(); - return _this8; } /** * Creates the XHR object and sends the request. * - * @api private + * @private */ - - _createClass(Request, [{ key: "create", value: function create() { var _this9 = this; - var opts = pick(this.opts, "agent", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "autoUnref"); opts.xdomain = !!this.opts.xd; opts.xscheme = !!this.opts.xs; var xhr = this.xhr = new XHR(opts); - try { xhr.open(this.method, this.uri, this.async); - try { if (this.opts.extraHeaders) { xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true); - for (var i in this.opts.extraHeaders) { if (this.opts.extraHeaders.hasOwnProperty(i)) { xhr.setRequestHeader(i, this.opts.extraHeaders[i]); @@ -1302,29 +1139,23 @@ } } } catch (e) {} - if ("POST" === this.method) { try { xhr.setRequestHeader("Content-type", "text/plain;charset=UTF-8"); } catch (e) {} } - try { xhr.setRequestHeader("Accept", "*/*"); - } catch (e) {} // ie6 check - - + } catch (e) {} + // ie6 check if ("withCredentials" in xhr) { xhr.withCredentials = this.opts.withCredentials; } - if (this.opts.requestTimeout) { xhr.timeout = this.opts.requestTimeout; } - xhr.onreadystatechange = function () { if (4 !== xhr.readyState) return; - if (200 === xhr.status || 1223 === xhr.status) { _this9.onLoad(); } else { @@ -1335,7 +1166,6 @@ }, 0); } }; - xhr.send(this.data); } catch (e) { // Need to defer since .create() is called directly from the constructor @@ -1346,7 +1176,6 @@ }, 0); return; } - if (typeof document !== "undefined") { this.index = Request.requestsCount++; Request.requests[this.index] = this; @@ -1355,9 +1184,8 @@ /** * Called upon error. * - * @api private + * @private */ - }, { key: "onError", value: function onError(err) { @@ -1367,41 +1195,34 @@ /** * Cleans up house. * - * @api private + * @private */ - }, { key: "cleanup", value: function cleanup(fromError) { if ("undefined" === typeof this.xhr || null === this.xhr) { return; } - this.xhr.onreadystatechange = empty; - if (fromError) { try { this.xhr.abort(); } catch (e) {} } - if (typeof document !== "undefined") { delete Request.requests[this.index]; } - this.xhr = null; } /** * Called upon load. * - * @api private + * @private */ - }, { key: "onLoad", value: function onLoad() { var data = this.xhr.responseText; - if (data !== null) { this.emitReserved("data", data); this.emitReserved("success"); @@ -1411,16 +1232,14 @@ /** * Aborts the request. * - * @api public + * @package */ - }, { key: "abort", value: function abort() { this.cleanup(); } }]); - return Request; }(Emitter); Request.requestsCount = 0; @@ -1430,7 +1249,6 @@ * memory leaks (e.g. when using IE) and to ensure that no spurious error is * emitted. */ - if (typeof document !== "undefined") { // @ts-ignore if (typeof attachEvent === "function") { @@ -1441,7 +1259,6 @@ addEventListener(terminationEvent, unloadHandler, false); } } - function unloadHandler() { for (var i in Request.requests) { if (Request.requests.hasOwnProperty(i)) { @@ -1452,7 +1269,6 @@ var nextTick = function () { var isPromiseAvailable = typeof Promise === "function" && typeof Promise.resolve === "function"; - if (isPromiseAvailable) { return function (cb) { return Promise.resolve().then(cb); @@ -1467,154 +1283,115 @@ var usingBrowserWebSocket = true; var defaultBinaryType = "arraybuffer"; + // detect ReactNative environment var isReactNative = typeof navigator !== "undefined" && typeof navigator.product === "string" && navigator.product.toLowerCase() === "reactnative"; var WS = /*#__PURE__*/function (_Transport) { _inherits(WS, _Transport); - var _super = _createSuper(WS); - /** * WebSocket transport constructor. * - * @api {Object} connection options - * @api public + * @param {Object} opts - connection options + * @protected */ function WS(opts) { var _this; - _classCallCheck(this, WS); - _this = _super.call(this, opts); _this.supportsBinary = !opts.forceBase64; return _this; } - /** - * Transport name. - * - * @api public - */ - - _createClass(WS, [{ + key: "name", + get: function get() { + return "websocket"; + } + }, { key: "doOpen", - - /** - * Opens socket. - * - * @api private - */ value: function doOpen() { if (!this.check()) { // let probe timeout return; } - var uri = this.uri(); - var protocols = this.opts.protocols; // React Native only supports the 'headers' option, and will print a warning if anything else is passed - + var protocols = this.opts.protocols; + // React Native only supports the 'headers' option, and will print a warning if anything else is passed var opts = isReactNative ? {} : pick(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity"); - if (this.opts.extraHeaders) { opts.headers = this.opts.extraHeaders; } - try { this.ws = usingBrowserWebSocket && !isReactNative ? protocols ? new WebSocket(uri, protocols) : new WebSocket(uri) : new WebSocket(uri, protocols, opts); } catch (err) { return this.emitReserved("error", err); } - this.ws.binaryType = this.socket.binaryType || defaultBinaryType; this.addEventListeners(); } /** * Adds event listeners to the socket * - * @api private + * @private */ - }, { key: "addEventListeners", value: function addEventListeners() { var _this2 = this; - this.ws.onopen = function () { if (_this2.opts.autoUnref) { _this2.ws._socket.unref(); } - _this2.onOpen(); }; - this.ws.onclose = function (closeEvent) { return _this2.onClose({ description: "websocket connection closed", context: closeEvent }); }; - this.ws.onmessage = function (ev) { return _this2.onData(ev.data); }; - this.ws.onerror = function (e) { return _this2.onError("websocket error", e); }; } - /** - * Writes data to socket. - * - * @param {Array} array of packets. - * @api private - */ - }, { key: "write", value: function write(packets) { var _this3 = this; - - this.writable = false; // encodePacket efficient as it uses WS framing + this.writable = false; + // encodePacket efficient as it uses WS framing // no need for encodePayload - var _loop = function _loop(i) { var packet = packets[i]; var lastPacket = i === packets.length - 1; encodePacket(packet, _this3.supportsBinary, function (data) { // always create a new object (GH-437) var opts = {}; + // Sometimes the websocket has already been closed but the browser didn't // have a chance of informing us about it yet, in that case send will // throw an error - - try { if (usingBrowserWebSocket) { // TypeError is thrown when passing the second argument on Safari _this3.ws.send(data); } } catch (e) {} - if (lastPacket) { // fake drain // defer to next tick to allow Socket to clear writeBuffer nextTick(function () { _this3.writable = true; - _this3.emitReserved("drain"); }, _this3.setTimeoutFn); } }); }; - for (var i = 0; i < packets.length; i++) { _loop(i); } } - /** - * Closes socket. - * - * @api private - */ - }, { key: "doClose", value: function doClose() { @@ -1626,30 +1403,26 @@ /** * Generates uri for connection. * - * @api private + * @private */ - }, { key: "uri", value: function uri() { var query = this.query || {}; var schema = this.opts.secure ? "wss" : "ws"; - var port = ""; // avoid port if default for schema - + var port = ""; + // avoid port if default for schema if (this.opts.port && ("wss" === schema && Number(this.opts.port) !== 443 || "ws" === schema && Number(this.opts.port) !== 80)) { port = ":" + this.opts.port; - } // append timestamp to URI - - + } + // append timestamp to URI if (this.opts.timestampRequests) { query[this.opts.timestampParam] = yeast(); - } // communicate binary support capabilities - - + } + // communicate binary support capabilities if (!this.supportsBinary) { query.b64 = 1; } - var encodedQuery = encode(query); var ipv6 = this.opts.hostname.indexOf(":") !== -1; return schema + "://" + (ipv6 ? "[" + this.opts.hostname + "]" : this.opts.hostname) + port + this.opts.path + (encodedQuery.length ? "?" + encodedQuery : ""); @@ -1658,21 +1431,14 @@ * Feature detection for WebSocket. * * @return {Boolean} whether this transport is available. - * @api public + * @private */ - }, { key: "check", value: function check() { return !!WebSocket; } - }, { - key: "name", - get: function get() { - return "websocket"; - } }]); - return WS; }(Transport); @@ -1682,59 +1448,60 @@ }; // imported from https://github.com/galkn/parseuri - /** - * Parses an URI + * Parses a URI + * + * Note: we could also have used the built-in URL object, but it isn't supported on all platforms. + * + * See: + * - https://developer.mozilla.org/en-US/docs/Web/API/URL + * - https://caniuse.com/url + * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B + * + * History of the parse() method: + * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c + * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3 + * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242 * * @author Steven Levithan (MIT license) * @api private */ - var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + var re = /^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor']; function parse(str) { var src = str, - b = str.indexOf('['), - e = str.indexOf(']'); - + b = str.indexOf('['), + e = str.indexOf(']'); if (b != -1 && e != -1) { str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length); } - var m = re.exec(str || ''), - uri = {}, - i = 14; - + uri = {}, + i = 14; while (i--) { uri[parts[i]] = m[i] || ''; } - if (b != -1 && e != -1) { uri.source = src; uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':'); uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':'); uri.ipv6uri = true; } - uri.pathNames = pathNames(uri, uri['path']); uri.queryKey = queryKey(uri, uri['query']); return uri; } - function pathNames(obj, path) { var regx = /\/{2,9}/g, - names = path.replace(regx, "/").split("/"); - + names = path.replace(regx, "/").split("/"); if (path.slice(0, 1) == '/' || path.length === 0) { names.splice(0, 1); } - if (path.slice(-1) == '/') { names.splice(names.length - 1, 1); } - return names; } - function queryKey(uri, query) { var data = {}; query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) { @@ -1747,30 +1514,23 @@ var Socket = /*#__PURE__*/function (_Emitter) { _inherits(Socket, _Emitter); - var _super = _createSuper(Socket); - /** * Socket constructor. * - * @param {String|Object} uri or options + * @param {String|Object} uri - uri or options * @param {Object} opts - options - * @api public */ function Socket(uri) { var _this; - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - _classCallCheck(this, Socket); - _this = _super.call(this); - + _this.writeBuffer = []; if (uri && "object" === _typeof(uri)) { opts = uri; uri = null; } - if (uri) { uri = parse(uri); opts.hostname = uri.host; @@ -1780,19 +1540,15 @@ } else if (opts.host) { opts.hostname = parse(opts.host).host; } - installTimerFunctions(_assertThisInitialized(_this), opts); _this.secure = null != opts.secure ? opts.secure : typeof location !== "undefined" && "https:" === location.protocol; - if (opts.hostname && !opts.port) { // if no port is specified manually, use the protocol default opts.port = _this.secure ? "443" : "80"; } - _this.hostname = opts.hostname || (typeof location !== "undefined" ? location.hostname : "localhost"); _this.port = opts.port || (typeof location !== "undefined" && location.port ? location.port : _this.secure ? "443" : "80"); _this.transports = opts.transports || ["polling", "websocket"]; - _this.readyState = ""; _this.writeBuffer = []; _this.prevBufferLen = 0; _this.opts = _extends({ @@ -1802,6 +1558,7 @@ upgrade: true, timestampParam: "t", rememberUpgrade: false, + addTrailingSlash: true, rejectUnauthorized: true, perMessageDeflate: { threshold: 1024 @@ -1809,20 +1566,17 @@ transportOptions: {}, closeOnBeforeunload: true }, opts); - _this.opts.path = _this.opts.path.replace(/\/$/, "") + "/"; - + _this.opts.path = _this.opts.path.replace(/\/$/, "") + (_this.opts.addTrailingSlash ? "/" : ""); if (typeof _this.opts.query === "string") { _this.opts.query = decode(_this.opts.query); - } // set on handshake - - + } + // set on handshake _this.id = null; _this.upgrades = null; _this.pingInterval = null; - _this.pingTimeout = null; // set on heartbeat - + _this.pingTimeout = null; + // set on heartbeat _this.pingTimeoutTimer = null; - if (typeof addEventListener === "function") { if (_this.opts.closeOnBeforeunload) { // Firefox closes the connection when the "beforeunload" event is emitted but not Chrome. This event listener @@ -1832,50 +1586,40 @@ if (_this.transport) { // silently close the transport _this.transport.removeAllListeners(); - _this.transport.close(); } }; - addEventListener("beforeunload", _this.beforeunloadEventListener, false); } - if (_this.hostname !== "localhost") { _this.offlineEventListener = function () { _this.onClose("transport close", { description: "network connection lost" }); }; - addEventListener("offline", _this.offlineEventListener, false); } } - _this.open(); - return _this; } /** * Creates transport of the given type. * - * @param {String} transport name + * @param {String} name - transport name * @return {Transport} - * @api private + * @private */ - - _createClass(Socket, [{ key: "createTransport", value: function createTransport(name) { - var query = _extends({}, this.opts.query); // append engine.io protocol identifier - - - query.EIO = protocol; // transport name - - query.transport = name; // session id if we already have one - + var query = _extends({}, this.opts.query); + // append engine.io protocol identifier + query.EIO = protocol; + // transport name + query.transport = name; + // session id if we already have one if (this.id) query.sid = this.id; - var opts = _extends({}, this.opts.transportOptions[name], this.opts, { query: query, socket: this, @@ -1883,22 +1627,18 @@ secure: this.secure, port: this.port }); - return new transports[name](opts); } /** * Initializes transport to use and starts probe. * - * @api private + * @private */ - }, { key: "open", value: function open() { var _this2 = this; - var transport; - if (this.opts.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf("websocket") !== -1) { transport = "websocket"; } else if (0 === this.transports.length) { @@ -1910,9 +1650,8 @@ } else { transport = this.transports[0]; } - - this.readyState = "opening"; // Retry with the next transport if the transport is disabled (jsonp: false) - + this.readyState = "opening"; + // Retry with the next transport if the transport is disabled (jsonp: false) try { transport = this.createTransport(transport); } catch (e) { @@ -1920,28 +1659,24 @@ this.open(); return; } - transport.open(); this.setTransport(transport); } /** * Sets the current transport. Disables the existing one (if any). * - * @api private + * @private */ - }, { key: "setTransport", value: function setTransport(transport) { var _this3 = this; - if (this.transport) { this.transport.removeAllListeners(); - } // set up transport - - - this.transport = transport; // set up transport listeners - + } + // set up transport + this.transport = transport; + // set up transport listeners transport.on("drain", this.onDrain.bind(this)).on("packet", this.onPacket.bind(this)).on("error", this.onError.bind(this)).on("close", function (reason) { return _this3.onClose("transport close", reason); }); @@ -1949,19 +1684,16 @@ /** * Probes a transport. * - * @param {String} transport name - * @api private + * @param {String} name - transport name + * @private */ - }, { key: "probe", value: function probe(name) { var _this4 = this; - var transport = this.createTransport(name); var failed = false; Socket.priorWebsocketSuccess = false; - var onTransportOpen = function onTransportOpen() { if (failed) return; transport.send([{ @@ -1970,89 +1702,69 @@ }]); transport.once("packet", function (msg) { if (failed) return; - if ("pong" === msg.type && "probe" === msg.data) { _this4.upgrading = true; - _this4.emitReserved("upgrading", transport); - if (!transport) return; Socket.priorWebsocketSuccess = "websocket" === transport.name; - _this4.transport.pause(function () { if (failed) return; if ("closed" === _this4.readyState) return; cleanup(); - _this4.setTransport(transport); - transport.send([{ type: "upgrade" }]); - _this4.emitReserved("upgrade", transport); - transport = null; _this4.upgrading = false; - _this4.flush(); }); } else { - var err = new Error("probe error"); // @ts-ignore - + var err = new Error("probe error"); + // @ts-ignore err.transport = transport.name; - _this4.emitReserved("upgradeError", err); } }); }; - function freezeTransport() { - if (failed) return; // Any callback called by transport should be ignored since now - + if (failed) return; + // Any callback called by transport should be ignored since now failed = true; cleanup(); transport.close(); transport = null; - } // Handle any error that happens while probing - - + } + // Handle any error that happens while probing var onerror = function onerror(err) { - var error = new Error("probe error: " + err); // @ts-ignore - + var error = new Error("probe error: " + err); + // @ts-ignore error.transport = transport.name; freezeTransport(); - _this4.emitReserved("upgradeError", error); }; - function onTransportClose() { onerror("transport closed"); - } // When the socket is closed while we're probing - - + } + // When the socket is closed while we're probing function onclose() { onerror("socket closed"); - } // When the socket is upgraded while we're probing - - + } + // When the socket is upgraded while we're probing function onupgrade(to) { if (transport && to.name !== transport.name) { freezeTransport(); } - } // Remove all listeners on the transport and on self - - + } + // Remove all listeners on the transport and on self var cleanup = function cleanup() { transport.removeListener("open", onTransportOpen); transport.removeListener("error", onerror); transport.removeListener("close", onTransportClose); - _this4.off("close", onclose); - _this4.off("upgrading", onupgrade); }; - transport.once("open", onTransportOpen); transport.once("error", onerror); transport.once("close", onTransportClose); @@ -2063,22 +1775,20 @@ /** * Called when connection is deemed open. * - * @api private + * @private */ - }, { key: "onOpen", value: function onOpen() { this.readyState = "open"; Socket.priorWebsocketSuccess = "websocket" === this.transport.name; this.emitReserved("open"); - this.flush(); // we check for `readyState` in case an `open` + this.flush(); + // we check for `readyState` in case an `open` // listener already closed the socket - - if ("open" === this.readyState && this.opts.upgrade && this.transport.pause) { + if ("open" === this.readyState && this.opts.upgrade) { var i = 0; var l = this.upgrades.length; - for (; i < l; i++) { this.probe(this.upgrades[i]); } @@ -2087,36 +1797,31 @@ /** * Handles a packet. * - * @api private + * @private */ - }, { key: "onPacket", value: function onPacket(packet) { if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { - this.emitReserved("packet", packet); // Socket is live - any packet counts - + this.emitReserved("packet", packet); + // Socket is live - any packet counts this.emitReserved("heartbeat"); - switch (packet.type) { case "open": this.onHandshake(JSON.parse(packet.data)); break; - case "ping": this.resetPingTimeout(); this.sendPacket("pong"); this.emitReserved("ping"); this.emitReserved("pong"); break; - case "error": - var err = new Error("server error"); // @ts-ignore - + var err = new Error("server error"); + // @ts-ignore err.code = packet.data; this.onError(err); break; - case "message": this.emitReserved("data", packet.data); this.emitReserved("message", packet.data); @@ -2128,9 +1833,8 @@ * Called upon handshake completion. * * @param {Object} data - handshake obj - * @api private + * @private */ - }, { key: "onHandshake", value: function onHandshake(data) { @@ -2141,27 +1845,24 @@ this.pingInterval = data.pingInterval; this.pingTimeout = data.pingTimeout; this.maxPayload = data.maxPayload; - this.onOpen(); // In case open handler closes socket - + this.onOpen(); + // In case open handler closes socket if ("closed" === this.readyState) return; this.resetPingTimeout(); } /** * Sets and resets ping timeout timer based on server pings. * - * @api private + * @private */ - }, { key: "resetPingTimeout", value: function resetPingTimeout() { var _this5 = this; - this.clearTimeoutFn(this.pingTimeoutTimer); this.pingTimeoutTimer = this.setTimeoutFn(function () { _this5.onClose("ping timeout"); }, this.pingInterval + this.pingTimeout); - if (this.opts.autoUnref) { this.pingTimeoutTimer.unref(); } @@ -2169,18 +1870,16 @@ /** * Called on `drain` event * - * @api private + * @private */ - }, { key: "onDrain", value: function onDrain() { - this.writeBuffer.splice(0, this.prevBufferLen); // setting prevBufferLen = 0 is very important + this.writeBuffer.splice(0, this.prevBufferLen); + // setting prevBufferLen = 0 is very important // for example, when upgrading, upgrade packet is sent over, // and a nonzero prevBufferLen could cause problems on `drain` - this.prevBufferLen = 0; - if (0 === this.writeBuffer.length) { this.emitReserved("drain"); } else { @@ -2190,17 +1889,16 @@ /** * Flush write buffers. * - * @api private + * @private */ - }, { key: "flush", value: function flush() { if ("closed" !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) { var packets = this.getWritablePackets(); - this.transport.send(packets); // keep track of current length of writeBuffer + this.transport.send(packets); + // keep track of current length of writeBuffer // splice writeBuffer and callbackBuffer on `drain` - this.prevBufferLen = packets.length; this.emitReserved("flush"); } @@ -2211,29 +1909,22 @@ * * @private */ - }, { key: "getWritablePackets", value: function getWritablePackets() { var shouldCheckPayloadSize = this.maxPayload && this.transport.name === "polling" && this.writeBuffer.length > 1; - if (!shouldCheckPayloadSize) { return this.writeBuffer; } - var payloadSize = 1; // first packet type - for (var i = 0; i < this.writeBuffer.length; i++) { var data = this.writeBuffer[i].data; - if (data) { payloadSize += byteLength(data); } - if (i > 0 && payloadSize > this.maxPayload) { return this.writeBuffer.slice(0, i); } - payloadSize += 2; // separator + packet type } @@ -2242,13 +1933,11 @@ /** * Sends a message. * - * @param {String} message. - * @param {Function} callback function. + * @param {String} msg - message. * @param {Object} options. + * @param {Function} callback function. * @return {Socket} for chaining. - * @api public */ - }, { key: "write", value: function write(msg, options, fn) { @@ -2264,13 +1953,12 @@ /** * Sends a packet. * - * @param {String} packet type. + * @param {String} type: packet type. * @param {String} data. * @param {Object} options. - * @param {Function} callback function. - * @api private + * @param {Function} fn - callback function. + * @private */ - }, { key: "sendPacket", value: function sendPacket(type, data, options, fn) { @@ -2278,16 +1966,13 @@ fn = data; data = undefined; } - if ("function" === typeof options) { fn = options; options = null; } - if ("closing" === this.readyState || "closed" === this.readyState) { return; } - options = options || {}; options.compress = false !== options.compress; var packet = { @@ -2302,39 +1987,27 @@ } /** * Closes the connection. - * - * @api public */ - }, { key: "close", value: function close() { var _this6 = this; - var close = function close() { _this6.onClose("forced close"); - _this6.transport.close(); }; - var cleanupAndClose = function cleanupAndClose() { _this6.off("upgrade", cleanupAndClose); - _this6.off("upgradeError", cleanupAndClose); - close(); }; - var waitForUpgrade = function waitForUpgrade() { // wait for upgrade to finish since we can't send packets while pausing a transport _this6.once("upgrade", cleanupAndClose); - _this6.once("upgradeError", cleanupAndClose); }; - if ("opening" === this.readyState || "open" === this.readyState) { this.readyState = "closing"; - if (this.writeBuffer.length) { this.once("drain", function () { if (_this6.upgrading) { @@ -2349,15 +2022,13 @@ close(); } } - return this; } /** * Called upon transport error * - * @api private + * @private */ - }, { key: "onError", value: function onError(err) { @@ -2368,35 +2039,32 @@ /** * Called upon transport close. * - * @api private + * @private */ - }, { key: "onClose", value: function onClose(reason, description) { if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { // clear timers - this.clearTimeoutFn(this.pingTimeoutTimer); // stop event from firing again for transport - - this.transport.removeAllListeners("close"); // ensure transport won't stay open - - this.transport.close(); // ignore further transport communication - + this.clearTimeoutFn(this.pingTimeoutTimer); + // stop event from firing again for transport + this.transport.removeAllListeners("close"); + // ensure transport won't stay open + this.transport.close(); + // ignore further transport communication this.transport.removeAllListeners(); - if (typeof removeEventListener === "function") { removeEventListener("beforeunload", this.beforeunloadEventListener, false); removeEventListener("offline", this.offlineEventListener, false); - } // set ready state - - - this.readyState = "closed"; // clear session id - - this.id = null; // emit close event - - this.emitReserved("close", reason, description); // clean buffers after, so users can still + } + // set ready state + this.readyState = "closed"; + // clear session id + this.id = null; + // emit close event + this.emitReserved("close", reason, description); + // clean buffers after, so users can still // grab the buffers on `close` event - this.writeBuffer = []; this.prevBufferLen = 0; } @@ -2404,26 +2072,21 @@ /** * Filters upgrades, returning only those matching client transports. * - * @param {Array} server upgrades - * @api private - * + * @param {Array} upgrades - server upgrades + * @private */ - }, { key: "filterUpgrades", value: function filterUpgrades(upgrades) { var filteredUpgrades = []; var i = 0; var j = upgrades.length; - for (; i < j; i++) { if (~this.transports.indexOf(upgrades[i])) filteredUpgrades.push(upgrades[i]); } - return filteredUpgrades; } }]); - return Socket; }(Emitter); Socket.protocol = protocol; diff --git a/dist/engine.io.js.map b/dist/engine.io.js.map index 59b0d0de7..98cea7f96 100644 --- a/dist/engine.io.js.map +++ b/dist/engine.io.js.map @@ -1 +1 @@ -{"version":3,"file":"engine.io.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/browser-entrypoint.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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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 = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = 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 = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = 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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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} options.\n * @api private\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.readyState = \"\";\n this.socket = opts.socket;\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 * @api 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 * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\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 * @api 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 * @api 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 * @api protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n /**\n * Transport name.\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 * @api private\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\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 * @api public\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\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 * @api private\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} data packets\n * @param {Function} drain callback\n * @api private\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 * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api 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 * @api 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 * @api public\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 * @api private\n */\n create() {\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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 * @api private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @api 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 * @api 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 * @api public\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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api 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 /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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 /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses an URI\n *\n * @author Steven Levithan (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 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 } 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\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} opts - options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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 rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api 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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api 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 * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @api 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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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 * @api private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\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 * @api private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @api 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 * @api 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 * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\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} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api 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 * @api public\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 * @api private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @api 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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","isView","obj","buffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","fileReader","FileReader","onload","content","result","split","readAsDataURL","i","decode","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","packetType","length","decoded","base64","SEPARATOR","String","fromCharCode","encodePayload","packets","encodedPackets","Array","count","packet","join","decodePayload","encodedPayload","decodedPacket","push","protocol","Emitter","mixin","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","emit","args","slice","len","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","globalThis","clearTimeoutFn","BASE64_OVERHEAD","byteLength","utf8Length","Math","ceil","size","str","c","l","charCodeAt","TransportError","reason","description","context","Error","Transport","writable","query","readyState","socket","doOpen","doClose","onClose","write","onPacket","details","alphabet","map","seed","prev","encode","num","encoded","floor","yeast","now","Date","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","empty","hasXHR2","xhr","responseType","Polling","polling","location","isSSL","port","xd","hostname","xs","secure","forceBase64","poll","onPause","pause","total","doPoll","onOpen","close","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","ipv6","indexOf","path","Request","uri","req","request","method","xhrStatus","onError","onData","pollXhr","async","undefined","xscheme","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","terminationEvent","nextTick","isPromiseAvailable","Promise","resolve","then","WebSocket","MozWebSocket","usingBrowserWebSocket","defaultBinaryType","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","queryKey","regx","names","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","shouldCheckPayloadSize","payloadSize","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"engine.io.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/browser-entrypoint.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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","isView","obj","buffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decode","base64","bufferLength","len","p","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","packetType","decoded","SEPARATOR","String","fromCharCode","encodePayload","packets","encodedPackets","Array","count","packet","join","decodePayload","encodedPayload","decodedPacket","push","protocol","Emitter","mixin","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","emit","args","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","BASE64_OVERHEAD","byteLength","utf8Length","Math","ceil","size","str","c","l","TransportError","reason","description","context","Error","Transport","writable","query","socket","readyState","doOpen","doClose","onClose","write","onPacket","details","onPause","alphabet","map","seed","prev","encode","num","encoded","floor","yeast","now","Date","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","empty","hasXHR2","xhr","responseType","Polling","polling","location","isSSL","port","xd","hostname","xs","secure","forceBase64","poll","pause","total","doPoll","onOpen","close","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","ipv6","indexOf","path","Request","uri","req","request","method","xhrStatus","onError","onData","pollXhr","async","undefined","xscheme","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","terminationEvent","nextTick","isPromiseAvailable","Promise","resolve","then","WebSocket","MozWebSocket","usingBrowserWebSocket","defaultBinaryType","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","queryKey","regx","names","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","shouldCheckPayloadSize","payloadSize","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file diff --git a/dist/engine.io.min.js b/dist/engine.io.min.js index 7f564a31d..ddd8df8aa 100644 --- a/dist/engine.io.min.js +++ b/dist/engine.io.min.js @@ -1,7 +1,7 @@ /*! - * Engine.IO v6.2.3 - * (c) 2014-2022 Guillermo Rauch + * Engine.IO v6.3.0 + * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).eio=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;r1?{type:v[r],data:e.substring(1)}:{type:v[r]}:m},E=function(e,t){if(x){var r=function(e){var t,r,n,o,i,s=.75*e.length,a=e.length,u=0;"="===e[e.length-1]&&(s--,"="===e[e.length-2]&&s--);var c=new ArrayBuffer(s),p=new Uint8Array(c);for(t=0;t>4,p[u++]=(15&n)<<4|o>>2,p[u++]=(3&o)<<6|63&i;return c}(e);return L(r,t)}return{base64:!0,data:e}},L=function(e,t){return"blob"===t&&e instanceof ArrayBuffer?new Blob([e]):e},P=String.fromCharCode(30);function B(e){if(e)return function(e){for(var t in B.prototype)e[t]=B.prototype[t];return e}(e)}B.prototype.on=B.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},B.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},B.prototype.off=B.prototype.removeListener=B.prototype.removeAllListeners=B.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o1?t-1:0),n=1;n0);return t}function X(){var e=N(+new Date);return e!==U?(I=0,U=e):e+"."+N(I++)}for(;W<64;W++)M[D[W]]=W;function $(e){var t="";for(var r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}function z(e){for(var t={},r=e.split("&"),n=0,o=r.length;n0&&void 0!==arguments[0]?arguments[0]:{};return o(e,{xd:this.xd,xs:this.xs},this.opts),new Z(this.uri(),e)}},{key:"doWrite",value:function(e,t){var r=this,n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",(function(e,t){r.onError("xhr post error",e,t)}))}},{key:"doPoll",value:function(){var e=this,t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(function(t,r){e.onError("xhr poll error",t,r)})),this.pollXhr=t}},{key:"name",get:function(){return"polling"}}]),s}(F),Z=function(e){i(o,e);var r=f(o);function o(e,n){var i;return t(this,o),_(h(i=r.call(this)),n),i.opts=n,i.method=n.method||"GET",i.uri=e,i.async=!1!==n.async,i.data=void 0!==n.data?n.data:null,i.create(),i}return n(o,[{key:"create",value:function(){var e=this,t=q(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd,t.xscheme=!!this.opts.xs;var r=this.xhr=new J(t);try{r.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var n in r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(n)&&r.setRequestHeader(n,this.opts.extraHeaders[n])}catch(e){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{r.setRequestHeader("Accept","*/*")}catch(e){}"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=function(){4===r.readyState&&(200===r.status||1223===r.status?e.onLoad():e.setTimeoutFn((function(){e.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(t){return void this.setTimeoutFn((function(){e.onError(t)}),0)}"undefined"!=typeof document&&(this.index=o.requestsCount++,o.requests[this.index]=this)}},{key:"onError",value:function(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}},{key:"cleanup",value:function(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=K,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete o.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}},{key:"abort",value:function(){this.cleanup()}}]),o}(B);if(Z.requestsCount=0,Z.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",ee);else if("function"==typeof addEventListener){addEventListener("onpagehide"in C?"pagehide":"unload",ee,!1)}function ee(){for(var e in Z.requests)Z.requests.hasOwnProperty(e)&&Z.requests[e].abort()}var te="function"==typeof Promise&&"function"==typeof Promise.resolve?function(e){return Promise.resolve().then(e)}:function(e,t){return t(e,0)},re=C.WebSocket||C.MozWebSocket,ne="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),oe=function(e){i(o,e);var r=f(o);function o(e){var n;return t(this,o),(n=r.call(this,e)).supportsBinary=!e.forceBase64,n}return n(o,[{key:"doOpen",value:function(){if(this.check()){var e=this.uri(),t=this.opts.protocols,r=ne?{}:q(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=ne?new re(e,t,r):t?new re(e,t):new re(e)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}}},{key:"addEventListeners",value:function(){var e=this;this.ws.onopen=function(){e.opts.autoUnref&&e.ws._socket.unref(),e.onOpen()},this.ws.onclose=function(t){return e.onClose({description:"websocket connection closed",context:t})},this.ws.onmessage=function(t){return e.onData(t.data)},this.ws.onerror=function(t){return e.onError("websocket error",t)}}},{key:"write",value:function(e){var t=this;this.writable=!1;for(var r=function(r){var n=e[r],o=r===e.length-1;k(n,t.supportsBinary,(function(e){try{t.ws.send(e)}catch(e){}o&&te((function(){t.writable=!0,t.emitReserved("drain")}),t.setTimeoutFn)}))},n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return t(this,a),n=s.call(this),r&&"object"===e(r)&&(i=r,r=null),r?(r=ue(r),i.hostname=r.host,i.secure="https"===r.protocol||"wss"===r.protocol,i.port=r.port,r.query&&(i.query=r.query)):i.host&&(i.hostname=ue(i.host).host),_(h(n),i),n.secure=null!=i.secure?i.secure:"undefined"!=typeof location&&"https:"===location.protocol,i.hostname&&!i.port&&(i.port=n.secure?"443":"80"),n.hostname=i.hostname||("undefined"!=typeof location?location.hostname:"localhost"),n.port=i.port||("undefined"!=typeof location&&location.port?location.port:n.secure?"443":"80"),n.transports=i.transports||["polling","websocket"],n.readyState="",n.writeBuffer=[],n.prevBufferLen=0,n.opts=o({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},i),n.opts.path=n.opts.path.replace(/\/$/,"")+"/","string"==typeof n.opts.query&&(n.opts.query=z(n.opts.query)),n.id=null,n.upgrades=null,n.pingInterval=null,n.pingTimeout=null,n.pingTimeoutTimer=null,"function"==typeof addEventListener&&(n.opts.closeOnBeforeunload&&(n.beforeunloadEventListener=function(){n.transport&&(n.transport.removeAllListeners(),n.transport.close())},addEventListener("beforeunload",n.beforeunloadEventListener,!1)),"localhost"!==n.hostname&&(n.offlineEventListener=function(){n.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",n.offlineEventListener,!1))),n.open(),n}return n(a,[{key:"createTransport",value:function(e){var t=o({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);var r=o({},this.opts.transportOptions[e],this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new ie[e](r)}},{key:"open",value:function(){var e,t=this;if(this.opts.rememberUpgrade&&a.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((function(){t.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}},{key:"setTransport",value:function(e){var t=this;this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(e){return t.onClose("transport close",e)}))}},{key:"probe",value:function(e){var t=this,r=this.createTransport(e),n=!1;a.priorWebsocketSuccess=!1;var o=function(){n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",(function(e){if(!n)if("pong"===e.type&&"probe"===e.data){if(t.upgrading=!0,t.emitReserved("upgrading",r),!r)return;a.priorWebsocketSuccess="websocket"===r.name,t.transport.pause((function(){n||"closed"!==t.readyState&&(h(),t.setTransport(r),r.send([{type:"upgrade"}]),t.emitReserved("upgrade",r),r=null,t.upgrading=!1,t.flush())}))}else{var o=new Error("probe error");o.transport=r.name,t.emitReserved("upgradeError",o)}})))};function i(){n||(n=!0,h(),r.close(),r=null)}var s=function(e){var n=new Error("probe error: "+e);n.transport=r.name,i(),t.emitReserved("upgradeError",n)};function u(){s("transport closed")}function c(){s("socket closed")}function p(e){r&&e.name!==r.name&&i()}var h=function(){r.removeListener("open",o),r.removeListener("error",s),r.removeListener("close",u),t.off("close",c),t.off("upgrading",p)};r.once("open",o),r.once("error",s),r.once("close",u),this.once("close",c),this.once("upgrading",p),r.open()}},{key:"onOpen",value:function(){if(this.readyState="open",a.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade&&this.transport.pause)for(var e=0,t=this.upgrades.length;e1))return this.writeBuffer;for(var e,t=1,r=0;r=57344?r+=3:(n++,r+=4);return r}(e):Math.ceil(1.33*(e.byteLength||e.size))),r>0&&t>this.maxPayload)return this.writeBuffer.slice(0,r);t+=2}return this.writeBuffer}},{key:"write",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"send",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"sendPacket",value:function(e,t,r,n){if("function"==typeof t&&(n=t,t=void 0),"function"==typeof r&&(n=r,r=null),"closing"!==this.readyState&&"closed"!==this.readyState){(r=r||{}).compress=!1!==r.compress;var o={type:e,data:t,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),n&&this.once("flush",n),this.flush()}}},{key:"close",value:function(){var e=this,t=function(){e.onClose("forced close"),e.transport.close()},r=function r(){e.off("upgrade",r),e.off("upgradeError",r),t()},n=function(){e.once("upgrade",r),e.once("upgradeError",r)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){e.upgrading?n():t()})):this.upgrading?n():t()),this}},{key:"onError",value:function(e){a.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}},{key:"onClose",value:function(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(e){for(var t=[],r=0,n=e.length;r1?{type:m[r],data:e.substring(1)}:{type:m[r]}:g},P=function(e,t){if(x){var r=function(e){var t,r,n,o,i,s=.75*e.length,a=e.length,u=0;"="===e[e.length-1]&&(s--,"="===e[e.length-2]&&s--);var c=new ArrayBuffer(s),p=new Uint8Array(c);for(t=0;t>4,p[u++]=(15&n)<<4|o>>2,p[u++]=(3&o)<<6|63&i;return c}(e);return B(r,t)}return{base64:!0,data:e}},B=function(e,t){return"blob"===t&&e instanceof ArrayBuffer?new Blob([e]):e},L=String.fromCharCode(30);function C(e){if(e)return function(e){for(var t in C.prototype)e[t]=C.prototype[t];return e}(e)}C.prototype.on=C.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},C.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},C.prototype.off=C.prototype.removeListener=C.prototype.removeAllListeners=C.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o1?t-1:0),n=1;n0);return t}function $(){var e=X(+new Date);return e!==H?(W=0,H=e):e+"."+X(W++)}for(;N<64;N++)I[M[N]]=N;function z(e){var t="";for(var r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}function V(e){for(var t={},r=e.split("&"),n=0,o=r.length;n0&&void 0!==arguments[0]?arguments[0]:{};return o(e,{xd:this.xd,xs:this.xs},this.opts),new ee(this.uri(),e)}},{key:"doWrite",value:function(e,t){var r=this,n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",(function(e,t){r.onError("xhr post error",e,t)}))}},{key:"doPoll",value:function(){var e=this,t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(function(t,r){e.onError("xhr poll error",t,r)})),this.pollXhr=t}}]),s}(D),ee=function(e){i(o,e);var r=f(o);function o(e,n){var i;return t(this,o),U(h(i=r.call(this)),n),i.opts=n,i.method=n.method||"GET",i.uri=e,i.async=!1!==n.async,i.data=void 0!==n.data?n.data:null,i.create(),i}return n(o,[{key:"create",value:function(){var e=this,t=j(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd,t.xscheme=!!this.opts.xs;var r=this.xhr=new K(t);try{r.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var n in r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(n)&&r.setRequestHeader(n,this.opts.extraHeaders[n])}catch(e){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{r.setRequestHeader("Accept","*/*")}catch(e){}"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=function(){4===r.readyState&&(200===r.status||1223===r.status?e.onLoad():e.setTimeoutFn((function(){e.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(t){return void this.setTimeoutFn((function(){e.onError(t)}),0)}"undefined"!=typeof document&&(this.index=o.requestsCount++,o.requests[this.index]=this)}},{key:"onError",value:function(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}},{key:"cleanup",value:function(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Q,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete o.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}},{key:"abort",value:function(){this.cleanup()}}]),o}(C);if(ee.requestsCount=0,ee.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",te);else if("function"==typeof addEventListener){addEventListener("onpagehide"in q?"pagehide":"unload",te,!1)}function te(){for(var e in ee.requests)ee.requests.hasOwnProperty(e)&&ee.requests[e].abort()}var re="function"==typeof Promise&&"function"==typeof Promise.resolve?function(e){return Promise.resolve().then(e)}:function(e,t){return t(e,0)},ne=q.WebSocket||q.MozWebSocket,oe="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),ie=function(e){i(o,e);var r=f(o);function o(e){var n;return t(this,o),(n=r.call(this,e)).supportsBinary=!e.forceBase64,n}return n(o,[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var e=this.uri(),t=this.opts.protocols,r=oe?{}:j(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=oe?new ne(e,t,r):t?new ne(e,t):new ne(e)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}}},{key:"addEventListeners",value:function(){var e=this;this.ws.onopen=function(){e.opts.autoUnref&&e.ws._socket.unref(),e.onOpen()},this.ws.onclose=function(t){return e.onClose({description:"websocket connection closed",context:t})},this.ws.onmessage=function(t){return e.onData(t.data)},this.ws.onerror=function(t){return e.onError("websocket error",t)}}},{key:"write",value:function(e){var t=this;this.writable=!1;for(var r=function(r){var n=e[r],o=r===e.length-1;w(n,t.supportsBinary,(function(e){try{t.ws.send(e)}catch(e){}o&&re((function(){t.writable=!0,t.emitReserved("drain")}),t.setTimeoutFn)}))},n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return t(this,a),(n=s.call(this)).writeBuffer=[],r&&"object"===e(r)&&(i=r,r=null),r?(r=ce(r),i.hostname=r.host,i.secure="https"===r.protocol||"wss"===r.protocol,i.port=r.port,r.query&&(i.query=r.query)):i.host&&(i.hostname=ce(i.host).host),U(h(n),i),n.secure=null!=i.secure?i.secure:"undefined"!=typeof location&&"https:"===location.protocol,i.hostname&&!i.port&&(i.port=n.secure?"443":"80"),n.hostname=i.hostname||("undefined"!=typeof location?location.hostname:"localhost"),n.port=i.port||("undefined"!=typeof location&&location.port?location.port:n.secure?"443":"80"),n.transports=i.transports||["polling","websocket"],n.writeBuffer=[],n.prevBufferLen=0,n.opts=o({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},i),n.opts.path=n.opts.path.replace(/\/$/,"")+(n.opts.addTrailingSlash?"/":""),"string"==typeof n.opts.query&&(n.opts.query=V(n.opts.query)),n.id=null,n.upgrades=null,n.pingInterval=null,n.pingTimeout=null,n.pingTimeoutTimer=null,"function"==typeof addEventListener&&(n.opts.closeOnBeforeunload&&(n.beforeunloadEventListener=function(){n.transport&&(n.transport.removeAllListeners(),n.transport.close())},addEventListener("beforeunload",n.beforeunloadEventListener,!1)),"localhost"!==n.hostname&&(n.offlineEventListener=function(){n.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",n.offlineEventListener,!1))),n.open(),n}return n(a,[{key:"createTransport",value:function(e){var t=o({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);var r=o({},this.opts.transportOptions[e],this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new se[e](r)}},{key:"open",value:function(){var e,t=this;if(this.opts.rememberUpgrade&&a.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((function(){t.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}},{key:"setTransport",value:function(e){var t=this;this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(e){return t.onClose("transport close",e)}))}},{key:"probe",value:function(e){var t=this,r=this.createTransport(e),n=!1;a.priorWebsocketSuccess=!1;var o=function(){n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",(function(e){if(!n)if("pong"===e.type&&"probe"===e.data){if(t.upgrading=!0,t.emitReserved("upgrading",r),!r)return;a.priorWebsocketSuccess="websocket"===r.name,t.transport.pause((function(){n||"closed"!==t.readyState&&(h(),t.setTransport(r),r.send([{type:"upgrade"}]),t.emitReserved("upgrade",r),r=null,t.upgrading=!1,t.flush())}))}else{var o=new Error("probe error");o.transport=r.name,t.emitReserved("upgradeError",o)}})))};function i(){n||(n=!0,h(),r.close(),r=null)}var s=function(e){var n=new Error("probe error: "+e);n.transport=r.name,i(),t.emitReserved("upgradeError",n)};function u(){s("transport closed")}function c(){s("socket closed")}function p(e){r&&e.name!==r.name&&i()}var h=function(){r.removeListener("open",o),r.removeListener("error",s),r.removeListener("close",u),t.off("close",c),t.off("upgrading",p)};r.once("open",o),r.once("error",s),r.once("close",u),this.once("close",c),this.once("upgrading",p),r.open()}},{key:"onOpen",value:function(){if(this.readyState="open",a.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade)for(var e=0,t=this.upgrades.length;e1))return this.writeBuffer;for(var e,t=1,r=0;r=57344?r+=3:(n++,r+=4);return r}(e):Math.ceil(1.33*(e.byteLength||e.size))),r>0&&t>this.maxPayload)return this.writeBuffer.slice(0,r);t+=2}return this.writeBuffer}},{key:"write",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"send",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"sendPacket",value:function(e,t,r,n){if("function"==typeof t&&(n=t,t=void 0),"function"==typeof r&&(n=r,r=null),"closing"!==this.readyState&&"closed"!==this.readyState){(r=r||{}).compress=!1!==r.compress;var o={type:e,data:t,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),n&&this.once("flush",n),this.flush()}}},{key:"close",value:function(){var e=this,t=function(){e.onClose("forced close"),e.transport.close()},r=function r(){e.off("upgrade",r),e.off("upgradeError",r),t()},n=function(){e.once("upgrade",r),e.once("upgradeError",r)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){e.upgrading?n():t()})):this.upgrading?n():t()),this}},{key:"onError",value:function(e){a.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}},{key:"onClose",value:function(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(e){for(var t=[],r=0,n=e.length;r {\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","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\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};\nexport default encodePacket;\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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 = setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = 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 = setTimeout.bind(globalThis);\n obj.clearTimeoutFn = 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","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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} options.\n * @api private\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.readyState = \"\";\n this.socket = opts.socket;\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 * @api 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 * @api public\n */\n open() {\n if (\"closed\" === this.readyState || \"\" === this.readyState) {\n this.readyState = \"opening\";\n this.doOpen();\n }\n return this;\n }\n /**\n * Closes the transport.\n *\n * @api public\n */\n close() {\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n * @api public\n */\n send(packets) {\n if (\"open\" === this.readyState) {\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 * @api 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 * @api 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 * @api protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @api protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n /**\n * Transport name.\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 * @api private\n */\n doOpen() {\n this.poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} callback upon buffers are flushed and transport is paused\n * @api private\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 * @api public\n */\n poll() {\n this.polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @api private\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 * @api private\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} data packets\n * @param {Function} drain callback\n * @api private\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 * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @api private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @api 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 * @api 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 * @api public\n */\n constructor(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 * @api private\n */\n create() {\n const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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 * @api private\n */\n onError(err) {\n this.emitReserved(\"error\", err, this.xhr);\n this.cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @api 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 * @api 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 * @api public\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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @api {Object} connection options\n * @api public\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Transport name.\n *\n * @api public\n */\n get name() {\n return \"websocket\";\n }\n /**\n * Opens socket.\n *\n * @api private\n */\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @api 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 /**\n * Writes data to socket.\n *\n * @param {Array} array of packets.\n * @api private\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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 /**\n * Closes socket.\n *\n * @api private\n */\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @api private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @api public\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling\n};\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses an URI\n *\n * @author Steven Levithan (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 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 } 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\";\nexport class Socket extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri or options\n * @param {Object} opts - options\n * @api public\n */\n constructor(uri, opts = {}) {\n super();\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.readyState = \"\";\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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 rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024\n },\n transportOptions: {},\n closeOnBeforeunload: true\n }, opts);\n this.opts.path = this.opts.path.replace(/\\/$/, \"\") + \"/\";\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\n }\n this.open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} transport name\n * @return {Transport}\n * @api 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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @api private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @api 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 * Probes a transport.\n *\n * @param {String} transport name\n * @api private\n */\n probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @api private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState &&\n this.opts.upgrade &&\n this.transport.pause) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\n }\n /**\n * Handles a packet.\n *\n * @api 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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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 * @api private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this.upgrades = this.filterUpgrades(data.upgrades);\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 * @api private\n */\n resetPingTimeout() {\n this.clearTimeoutFn(this.pingTimeoutTimer);\n this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\n if (this.opts.autoUnref) {\n this.pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @api 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 * @api 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 * Sends a message.\n *\n * @param {String} message.\n * @param {Function} callback function.\n * @param {Object} options.\n * @return {Socket} for chaining.\n * @api public\n */\n write(msg, options, fn) {\n this.sendPacket(\"message\", msg, options, fn);\n return this;\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} packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} callback function.\n * @api 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 * @api public\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 * @api private\n */\n onError(err) {\n Socket.priorWebsocketSuccess = false;\n this.emitReserved(\"error\", err);\n this.onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @api 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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} server upgrades\n * @api private\n *\n */\n filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","obj","encodeBlobAsBase64","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","_callbacks","this","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","globalThis","clearTimeoutFn","prev","TransportError","reason","description","context","Error","Transport","writable","query","readyState","socket","doOpen","doClose","onClose","packets","write","packet","onPacket","details","alphabet","map","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","qs","qry","pairs","l","pair","decodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Polling","polling","location","isSSL","protocol","port","xd","hostname","xs","secure","forceBase64","poll","onPause","pause","_this2","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","_this3","onOpen","close","_this4","count","encodePayload","_this5","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","indexOf","path","Request","uri","req","request","method","xhrStatus","_this6","onError","onData","_this7","pollXhr","async","undefined","xscheme","xhr","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","_this9","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","_this","writeBuffer","prevBufferLen","_extends","agent","upgrade","rememberUpgrade","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"engine.io.min.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/browser-entrypoint.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","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\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};\nexport default encodePacket;\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","obj","encodeBlobAsBase64","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","prev","TransportError","_inherits","reason","description","context","_classCallCheck","_this","Error","Transport","_this2","writable","query","socket","_createClass","value","_get","readyState","doOpen","doClose","onClose","packets","write","packet","onPacket","details","onPause","alphabet","map","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","qs","qry","pairs","l","pair","decodeURIComponent","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Polling","polling","location","isSSL","protocol","port","xd","hostname","xs","secure","forceBase64","get","poll","pause","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","_this3","onOpen","close","_this4","count","encodePayload","_this5","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","indexOf","path","_extends","Request","uri","req","request","method","xhrStatus","_this6","onError","onData","_this7","pollXhr","_this8","async","undefined","xscheme","xhr","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","_this9","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","_loop","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":";;;;;6lHAAA,IAAMA,EAAeC,OAAOC,OAAO,MACnCF,EAAmB,KAAI,IACvBA,EAAoB,MAAI,IACxBA,EAAmB,KAAI,IACvBA,EAAmB,KAAI,IACvBA,EAAsB,QAAI,IAC1BA,EAAsB,QAAI,IAC1BA,EAAmB,KAAI,IACvB,IAAMG,EAAuBF,OAAOC,OAAO,MAC3CD,OAAOG,KAAKJ,GAAcK,SAAQ,SAAAC,GAC9BH,EAAqBH,EAAaM,IAAQA,CAC9C,ICPA,IDQA,IAAMC,EAAe,CAAEC,KAAM,QAASC,KAAM,gBEXtCC,EAAiC,mBAATC,MACT,oBAATA,MACqC,6BAAzCV,OAAOW,UAAUC,SAASC,KAAKH,MACjCI,EAA+C,mBAAhBC,YAO/BC,EAAe,WAAiBC,EAAgBC,GAAa,IALpDC,EAKSZ,IAAAA,KAAMC,IAAAA,KAC1B,OAAIC,GAAkBD,aAAgBE,KAC9BO,EACOC,EAASV,GAGTY,EAAmBZ,EAAMU,GAG/BJ,IACJN,aAAgBO,cAfVI,EAegCX,EAdN,mBAAvBO,YAAYM,OACpBN,YAAYM,OAAOF,GACnBA,GAAOA,EAAIG,kBAAkBP,cAa3BE,EACOC,EAASV,GAGTY,EAAmB,IAAIV,KAAK,CAACF,IAAQU,GAI7CA,EAASnB,EAAaQ,IAASC,GAAQ,IAClD,EACMY,EAAqB,SAACZ,EAAMU,GAC9B,IAAMK,EAAa,IAAIC,WAKvB,OAJAD,EAAWE,OAAS,WAChB,IAAMC,EAAUH,EAAWI,OAAOC,MAAM,KAAK,GAC7CV,EAAS,IAAMQ,IAEZH,EAAWM,cAAcrB,EACpC,EDvCMsB,EAAQ,mEAGRC,EAA+B,oBAAfC,WAA6B,GAAK,IAAIA,WAAW,KAC9DC,EAAI,EAAGA,EAAIH,EAAMI,OAAQD,IAC9BF,EAAOD,EAAMK,WAAWF,IAAMA,MEH5BnB,EAA+C,mBAAhBC,YAC/BqB,EAAe,SAACC,EAAeC,GACjC,GAA6B,iBAAlBD,EACP,MAAO,CACH9B,KAAM,UACNC,KAAM+B,EAAUF,EAAeC,IAGvC,IAAM/B,EAAO8B,EAAcG,OAAO,GAClC,MAAa,MAATjC,EACO,CACHA,KAAM,UACNC,KAAMiC,EAAmBJ,EAAcK,UAAU,GAAIJ,IAG1CpC,EAAqBK,GAIjC8B,EAAcH,OAAS,EACxB,CACE3B,KAAML,EAAqBK,GAC3BC,KAAM6B,EAAcK,UAAU,IAEhC,CACEnC,KAAML,EAAqBK,IARxBD,CAUf,EACMmC,EAAqB,SAACjC,EAAM8B,GAC9B,GAAIxB,EAAuB,CACvB,IAAM6B,EFFQ,SAACC,GACnB,IAEIX,EAEAY,EACAC,EACAC,EACAC,EAPAC,EAA+B,IAAhBL,EAAOV,OACtBgB,EAAMN,EAAOV,OAEbiB,EAAI,EAM0B,MAA9BP,EAAOA,EAAOV,OAAS,KACvBe,IACkC,MAA9BL,EAAOA,EAAOV,OAAS,IACvBe,KAIR,IAAMG,EAAc,IAAIrC,YAAYkC,GAChCI,EAAQ,IAAIrB,WAAWoB,GAE3B,IAAKnB,EAAI,EAAGA,EAAIiB,EAAKjB,GAAK,EACtBY,EAAWd,EAAOa,EAAOT,WAAWF,IACpCa,EAAWf,EAAOa,EAAOT,WAAWF,EAAI,IACxCc,EAAWhB,EAAOa,EAAOT,WAAWF,EAAI,IACxCe,EAAWjB,EAAOa,EAAOT,WAAWF,EAAI,IAExCoB,EAAMF,KAAQN,GAAY,EAAMC,GAAY,EAC5CO,EAAMF,MAAoB,GAAXL,IAAkB,EAAMC,GAAY,EACnDM,EAAMF,MAAoB,EAAXJ,IAAiB,EAAiB,GAAXC,EAG1C,OAAOI,CACX,CE9BwBE,CAAO9C,GACvB,OAAO+B,EAAUI,EAASL,GAG1B,MAAO,CAAEM,QAAQ,EAAMpC,KAAAA,EAE/B,EACM+B,EAAY,SAAC/B,EAAM8B,GACrB,MACS,SADDA,GAEO9B,aAAgBO,YAAc,IAAIL,KAAK,CAACF,IAGxCA,CAEnB,EC7CM+C,EAAYC,OAAOC,aAAa,ICI/B,SAASC,EAAQvC,GACtB,GAAIA,EAAK,OAWX,SAAeA,GACb,IAAK,IAAId,KAAOqD,EAAQ/C,UACtBQ,EAAId,GAAOqD,EAAQ/C,UAAUN,GAE/B,OAAOc,CACT,CAhBkBwC,CAAMxC,EACxB,CA0BAuC,EAAQ/C,UAAUiD,GAClBF,EAAQ/C,UAAUkD,iBAAmB,SAASC,EAAOC,GAInD,OAHAC,KAAKC,WAAaD,KAAKC,YAAc,IACpCD,KAAKC,WAAW,IAAMH,GAASE,KAAKC,WAAW,IAAMH,IAAU,IAC7DI,KAAKH,GACDC,IACT,EAYAN,EAAQ/C,UAAUwD,KAAO,SAASL,EAAOC,GACvC,SAASH,IACPI,KAAKI,IAAIN,EAAOF,GAChBG,EAAGM,MAAML,KAAMM,WAKjB,OAFAV,EAAGG,GAAKA,EACRC,KAAKJ,GAAGE,EAAOF,GACRI,IACT,EAYAN,EAAQ/C,UAAUyD,IAClBV,EAAQ/C,UAAU4D,eAClBb,EAAQ/C,UAAU6D,mBAClBd,EAAQ/C,UAAU8D,oBAAsB,SAASX,EAAOC,GAItD,GAHAC,KAAKC,WAAaD,KAAKC,YAAc,GAGjC,GAAKK,UAAUpC,OAEjB,OADA8B,KAAKC,WAAa,GACXD,KAIT,IAUIU,EAVAC,EAAYX,KAAKC,WAAW,IAAMH,GACtC,IAAKa,EAAW,OAAOX,KAGvB,GAAI,GAAKM,UAAUpC,OAEjB,cADO8B,KAAKC,WAAW,IAAMH,GACtBE,KAKT,IAAK,IAAI/B,EAAI,EAAGA,EAAI0C,EAAUzC,OAAQD,IAEpC,IADAyC,EAAKC,EAAU1C,MACJ8B,GAAMW,EAAGX,KAAOA,EAAI,CAC7BY,EAAUC,OAAO3C,EAAG,GACpB,MAUJ,OAJyB,IAArB0C,EAAUzC,eACL8B,KAAKC,WAAW,IAAMH,GAGxBE,IACT,EAUAN,EAAQ/C,UAAUkE,KAAO,SAASf,GAChCE,KAAKC,WAAaD,KAAKC,YAAc,GAKrC,IAHA,IAAIa,EAAO,IAAIC,MAAMT,UAAUpC,OAAS,GACpCyC,EAAYX,KAAKC,WAAW,IAAMH,GAE7B7B,EAAI,EAAGA,EAAIqC,UAAUpC,OAAQD,IACpC6C,EAAK7C,EAAI,GAAKqC,UAAUrC,GAG1B,GAAI0C,EAEG,CAAI1C,EAAI,EAAb,IAAK,IAAWiB,GADhByB,EAAYA,EAAUK,MAAM,IACI9C,OAAQD,EAAIiB,IAAOjB,EACjD0C,EAAU1C,GAAGoC,MAAML,KAAMc,EADK5C,CAKlC,OAAO8B,IACT,EAGAN,EAAQ/C,UAAUsE,aAAevB,EAAQ/C,UAAUkE,KAUnDnB,EAAQ/C,UAAUuE,UAAY,SAASpB,GAErC,OADAE,KAAKC,WAAaD,KAAKC,YAAc,GAC9BD,KAAKC,WAAW,IAAMH,IAAU,EACzC,EAUAJ,EAAQ/C,UAAUwE,aAAe,SAASrB,GACxC,QAAUE,KAAKkB,UAAUpB,GAAO5B,MAClC,ECxKO,IAAMkD,EACW,oBAATC,KACAA,KAEgB,oBAAXC,OACLA,OAGAC,SAAS,cAATA,GCPR,SAASC,EAAKrE,GAAc,2BAANsE,mCAAAA,oBACzB,OAAOA,EAAKC,QAAO,SAACC,EAAKC,GAIrB,OAHIzE,EAAI0E,eAAeD,KACnBD,EAAIC,GAAKzE,EAAIyE,IAEVD,IACR,GACP,CAEA,IAAMG,EAAqBC,EAAWC,WAChCC,EAAuBF,EAAWG,aACjC,SAASC,EAAsBhF,EAAKiF,GACnCA,EAAKC,iBACLlF,EAAImF,aAAeR,EAAmBS,KAAKR,GAC3C5E,EAAIqF,eAAiBP,EAAqBM,KAAKR,KAG/C5E,EAAImF,aAAeP,EAAWC,WAAWO,KAAKR,GAC9C5E,EAAIqF,eAAiBT,EAAWG,aAAaK,KAAKR,GAE1D,CCnBkD,ICC7BU,EDAfC,cAAcC,OAAA,WAChB,WAAYC,EAAQC,EAAaC,GAAS,MAIT,OAJSC,WACtCC,cAAMJ,IACDC,YAAcA,EACnBG,EAAKF,QAAUA,EACfE,EAAKzG,KAAO,mBACf,WAAA,IANwB0G,QAQhBC,cAASP,OAAA,WAOlB,WAAYP,GAAM,MAMY,OANZW,WACdI,gBACKC,UAAW,EAChBjB,OAA4BC,GAC5Be,EAAKf,KAAOA,EACZe,EAAKE,MAAQjB,EAAKiB,MAClBF,EAAKG,OAASlB,EAAKkB,SAwFL,OAtFlBC,MAAAlH,cAAAmH,MASA,SAAQZ,EAAQC,EAAaC,GAEzB,OADAW,gDAAmB,QAAS,IAAIf,EAAeE,EAAQC,EAAaC,IAC7D9C,QAEX3D,WAAAmH,MAGA,WAGI,OAFAxD,KAAK0D,WAAa,UAClB1D,KAAK2D,SACE3D,QAEX3D,YAAAmH,MAGA,WAKI,MAJwB,YAApBxD,KAAK0D,YAAgD,SAApB1D,KAAK0D,aACtC1D,KAAK4D,UACL5D,KAAK6D,WAEF7D,QAEX3D,WAAAmH,MAKA,SAAKM,GACuB,SAApB9D,KAAK0D,YACL1D,KAAK+D,MAAMD,MAMnBzH,aAAAmH,MAKA,WACIxD,KAAK0D,WAAa,OAClB1D,KAAKoD,UAAW,EAChBK,gDAAmB,WAEvBpH,aAAAmH,MAMA,SAAOhH,GACH,IAAMwH,EAAS5F,EAAa5B,EAAMwD,KAAKsD,OAAOhF,YAC9C0B,KAAKiE,SAASD,MAElB3H,eAAAmH,MAKA,SAASQ,GACLP,gDAAmB,SAAUO,MAEjC3H,cAAAmH,MAKA,SAAQU,GACJlE,KAAK0D,WAAa,SAClBD,gDAAmB,QAASS,MAEhC7H,YAAAmH,MAKA,SAAMW,SAAY,EArGSzE,GCTzB0E,EAAW,mEAAmExG,MAAM,IAAkByG,EAAM,GAC9GC,EAAO,EAAGrG,EAAI,EAQX,SAASsG,EAAOC,GACnB,IAAIC,EAAU,GACd,GACIA,EAAUL,EAASI,EAZ6E,IAY7DC,EACnCD,EAAME,KAAKC,MAAMH,EAb+E,UAc3FA,EAAM,GACf,OAAOC,CACX,CAqBO,SAASG,IACZ,IAAMC,EAAMN,GAAQ,IAAIO,MACxB,OAAID,IAAQpC,GACD6B,EAAO,EAAG7B,EAAOoC,GACrBA,EAAM,IAAMN,EAAOD,IAC9B,CAIA,KAAOrG,EA9CiG,GA8CrFA,IACfoG,EAAID,EAASnG,IAAMA,ECzChB,SAASsG,EAAOpH,GACnB,IAAI4H,EAAM,GACV,IAAK,IAAI9G,KAAKd,EACNA,EAAI0E,eAAe5D,KACf8G,EAAI7G,SACJ6G,GAAO,KACXA,GAAOC,mBAAmB/G,GAAK,IAAM+G,mBAAmB7H,EAAIc,KAGpE,OAAO8G,CACX,CAOO,SAASzF,EAAO2F,GAGnB,IAFA,IAAIC,EAAM,GACNC,EAAQF,EAAGrH,MAAM,KACZK,EAAI,EAAGmH,EAAID,EAAMjH,OAAQD,EAAImH,EAAGnH,IAAK,CAC1C,IAAIoH,EAAOF,EAAMlH,GAAGL,MAAM,KAC1BsH,EAAII,mBAAmBD,EAAK,KAAOC,mBAAmBD,EAAK,IAE/D,OAAOH,CACX,CChCA,IAAI1B,GAAQ,EACZ,IACIA,EAAkC,oBAAnB+B,gBACX,oBAAqB,IAAIA,cAI7B,CAFJ,MAAOC,GAEH,CAEG,IAAMC,EAAUjC,ECPhB,SAASkC,EAAItD,GAChB,IAAMuD,EAAUvD,EAAKuD,QAErB,IACI,GAAI,oBAAuBJ,kBAAoBI,GAAWF,GACtD,OAAO,IAAIF,eAGnB,MAAOK,IACP,IAAKD,EACD,IACI,OAAO,IAAI5D,EAAW,CAAC,UAAU8D,OAAO,UAAUC,KAAK,OAAM,qBAEjE,MAAOF,IAEf,CCVA,SAASG,KACT,IAAMC,EAIK,MAHK,IAAIT,EAAe,CAC3BI,SAAS,IAEMM,aAEVC,cAAOvD,OAAA,WAOhB,WAAYP,GAAM,MAGd,GAHcW,WACdC,cAAMZ,IACD+D,SAAU,EACS,oBAAbC,SAA0B,CACjC,IAAMC,EAAQ,WAAaD,SAASE,SAChCC,EAAOH,SAASG,KAEfA,IACDA,EAAOF,EAAQ,MAAQ,MAE3BrD,EAAKwD,GACoB,oBAAbJ,UACJhE,EAAKqE,WAAaL,SAASK,UAC3BF,IAASnE,EAAKmE,KACtBvD,EAAK0D,GAAKtE,EAAKuE,SAAWN,EAK9B,IAAMO,EAAcxE,GAAQA,EAAKwE,YACa,OAA9C5D,EAAK/F,eAAiB+I,IAAYY,IA+LrC,OA9LArD,MAAAlH,WAAAwK,IACD,WACI,MAAO,aAEXxK,aAAAmH,MAMA,WACIxD,KAAK8G,UAETzK,YAAAmH,MAMA,SAAMW,GAAS,WACXnE,KAAK0D,WAAa,UAClB,IAAMqD,EAAQ,WACV5D,EAAKO,WAAa,SAClBS,KAEJ,GAAInE,KAAKmG,UAAYnG,KAAKoD,SAAU,CAChC,IAAI4D,EAAQ,EACRhH,KAAKmG,UACLa,IACAhH,KAAKG,KAAK,gBAAgB,aACpB6G,GAASD,QAGd/G,KAAKoD,WACN4D,IACAhH,KAAKG,KAAK,SAAS,aACb6G,GAASD,aAKnBA,OAGR1K,WAAAmH,MAKA,WACIxD,KAAKmG,SAAU,EACfnG,KAAKiH,SACLjH,KAAKiB,aAAa,WAEtB5E,aAAAmH,MAKA,SAAOhH,GAAM,YTpFK,SAAC0K,EAAgB5I,GAGnC,IAFA,IAAM6I,EAAiBD,EAAetJ,MAAM2B,GACtCuE,EAAU,GACP7F,EAAI,EAAGA,EAAIkJ,EAAejJ,OAAQD,IAAK,CAC5C,IAAMmJ,EAAgBhJ,EAAa+I,EAAelJ,GAAIK,GAEtD,GADAwF,EAAQ5D,KAAKkH,GACc,UAAvBA,EAAc7K,KACd,MAGR,OAAOuH,CACX,ESwFQuD,CAAc7K,EAAMwD,KAAKsD,OAAOhF,YAAYlC,SAd3B,SAAC4H,GAMd,GAJI,YAAcsD,EAAK5D,YAA8B,SAAhBM,EAAOzH,MACxC+K,EAAKC,SAGL,UAAYvD,EAAOzH,KAEnB,OADA+K,EAAKzD,QAAQ,CAAEhB,YAAa,oCACrB,EAGXyE,EAAKrD,SAASD,MAKd,WAAahE,KAAK0D,aAElB1D,KAAKmG,SAAU,EACfnG,KAAKiB,aAAa,gBACd,SAAWjB,KAAK0D,YAChB1D,KAAK8G,WAMjBzK,cAAAmH,MAKA,WAAU,WACAgE,EAAQ,WACVC,EAAK1D,MAAM,CAAC,CAAExH,KAAM,YAEpB,SAAWyD,KAAK0D,WAChB8D,IAKAxH,KAAKG,KAAK,OAAQqH,MAG1BnL,YAAAmH,MAMA,SAAMM,GAAS,WACX9D,KAAKoD,UAAW,ETxJF,SAACU,EAAS5G,GAE5B,IAAMgB,EAAS4F,EAAQ5F,OACjBiJ,EAAiB,IAAIpG,MAAM7C,GAC7BwJ,EAAQ,EACZ5D,EAAQ1H,SAAQ,SAAC4H,EAAQ/F,GAErBjB,EAAagH,GAAQ,GAAO,SAAA3F,GACxB8I,EAAelJ,GAAKI,IACdqJ,IAAUxJ,GACZhB,EAASiK,EAAerB,KAAKvG,SAI7C,CS2IQoI,CAAc7D,GAAS,SAACtH,GACpBoL,EAAKC,QAAQrL,GAAM,WACfoL,EAAKxE,UAAW,EAChBwE,EAAK3G,aAAa,kBAI9B5E,UAAAmH,MAKA,WACI,IAAIH,EAAQrD,KAAKqD,OAAS,GACpByE,EAAS9H,KAAKoC,KAAKuE,OAAS,QAAU,OACxCJ,EAAO,IAEP,IAAUvG,KAAKoC,KAAK2F,oBACpB1E,EAAMrD,KAAKoC,KAAK4F,gBAAkBpD,KAEjC5E,KAAK/C,gBAAmBoG,EAAM4E,MAC/B5E,EAAM6E,IAAM,GAGZlI,KAAKoC,KAAKmE,OACR,UAAYuB,GAAqC,MAA3BK,OAAOnI,KAAKoC,KAAKmE,OACpC,SAAWuB,GAAqC,KAA3BK,OAAOnI,KAAKoC,KAAKmE,SAC3CA,EAAO,IAAMvG,KAAKoC,KAAKmE,MAE3B,IAAM6B,EAAe7D,EAAOlB,GAE5B,OAAQyE,EACJ,QAF8C,IAArC9H,KAAKoC,KAAKqE,SAAS4B,QAAQ,KAG5B,IAAMrI,KAAKoC,KAAKqE,SAAW,IAAMzG,KAAKoC,KAAKqE,UACnDF,EACAvG,KAAKoC,KAAKkG,MACTF,EAAalK,OAAS,IAAMkK,EAAe,OAEpD/L,cAAAmH,MAMA,WAAmB,IAAXpB,yDAAO,GAEX,OADAmG,EAAcnG,EAAM,CAAEoE,GAAIxG,KAAKwG,GAAIE,GAAI1G,KAAK0G,IAAM1G,KAAKoC,MAChD,IAAIoG,GAAQxI,KAAKyI,MAAOrG,MAEnC/F,cAAAmH,MAOA,SAAQhH,EAAMuD,GAAI,WACR2I,EAAM1I,KAAK2I,QAAQ,CACrBC,OAAQ,OACRpM,KAAMA,IAEVkM,EAAI9I,GAAG,UAAWG,GAClB2I,EAAI9I,GAAG,SAAS,SAACiJ,EAAW/F,GACxBgG,EAAKC,QAAQ,iBAAkBF,EAAW/F,SAGlDzG,aAAAmH,MAKA,WAAS,WACCkF,EAAM1I,KAAK2I,UACjBD,EAAI9I,GAAG,OAAQI,KAAKgJ,OAAOzG,KAAKvC,OAChC0I,EAAI9I,GAAG,SAAS,SAACiJ,EAAW/F,GACxBmG,EAAKF,QAAQ,iBAAkBF,EAAW/F,MAE9C9C,KAAKkJ,QAAUR,OAClB,EA1NwBxF,GA4NhBsF,eAAO7F,OAAA,WAOhB,WAAY8F,EAAKrG,GAAM,MAQL,OARKW,UAEnBZ,IADAgH,gBAC4B/G,GAC5B+G,EAAK/G,KAAOA,EACZ+G,EAAKP,OAASxG,EAAKwG,QAAU,MAC7BO,EAAKV,IAAMA,EACXU,EAAKC,OAAQ,IAAUhH,EAAKgH,MAC5BD,EAAK3M,UAAO6M,IAAcjH,EAAK5F,KAAO4F,EAAK5F,KAAO,KAClD2M,EAAKlN,WA0HR,OAxHDsH,MAAAlH,aAAAmH,MAKA,WAAS,WACCpB,EAAOZ,EAAKxB,KAAKoC,KAAM,QAAS,MAAO,MAAO,aAAc,OAAQ,KAAM,UAAW,qBAAsB,aACjHA,EAAKuD,UAAY3F,KAAKoC,KAAKoE,GAC3BpE,EAAKkH,UAAYtJ,KAAKoC,KAAKsE,GAC3B,IAAM6C,EAAOvJ,KAAKuJ,IAAM,IAAIhE,EAAenD,GAC3C,IACImH,EAAIC,KAAKxJ,KAAK4I,OAAQ5I,KAAKyI,IAAKzI,KAAKoJ,OACrC,IACI,GAAIpJ,KAAKoC,KAAKqH,aAEV,IAAK,IAAIxL,KADTsL,EAAIG,uBAAyBH,EAAIG,uBAAsB,GACzC1J,KAAKoC,KAAKqH,aAChBzJ,KAAKoC,KAAKqH,aAAa5H,eAAe5D,IACtCsL,EAAII,iBAAiB1L,EAAG+B,KAAKoC,KAAKqH,aAAaxL,IAK/D,MAAO2H,IACP,GAAI,SAAW5F,KAAK4I,OAChB,IACIW,EAAII,iBAAiB,eAAgB,4BAEzC,MAAO/D,IAEX,IACI2D,EAAII,iBAAiB,SAAU,OAEnC,MAAO/D,IAEH,oBAAqB2D,IACrBA,EAAIK,gBAAkB5J,KAAKoC,KAAKwH,iBAEhC5J,KAAKoC,KAAKyH,iBACVN,EAAIO,QAAU9J,KAAKoC,KAAKyH,gBAE5BN,EAAIQ,mBAAqB,WACjB,IAAMR,EAAI7F,aAEV,MAAQ6F,EAAIS,QAAU,OAAST,EAAIS,OACnCC,EAAKC,SAKLD,EAAK3H,cAAa,WACd2H,EAAKlB,QAA8B,iBAAfQ,EAAIS,OAAsBT,EAAIS,OAAS,KAC5D,KAGXT,EAAIY,KAAKnK,KAAKxD,MAElB,MAAOoJ,GAOH,YAHA5F,KAAKsC,cAAa,WACd2H,EAAKlB,QAAQnD,KACd,GAGiB,oBAAbwE,WACPpK,KAAKqK,MAAQ7B,EAAQ8B,gBACrB9B,EAAQ+B,SAASvK,KAAKqK,OAASrK,SAGvC3D,cAAAmH,MAKA,SAAQgC,GACJxF,KAAKiB,aAAa,QAASuE,EAAKxF,KAAKuJ,KACrCvJ,KAAKwK,SAAQ,MAEjBnO,cAAAmH,MAKA,SAAQiH,GACJ,QAAI,IAAuBzK,KAAKuJ,KAAO,OAASvJ,KAAKuJ,IAArD,CAIA,GADAvJ,KAAKuJ,IAAIQ,mBAAqBhE,EAC1B0E,EACA,IACIzK,KAAKuJ,IAAImB,QAEb,MAAO9E,IAEa,oBAAbwE,iBACA5B,EAAQ+B,SAASvK,KAAKqK,OAEjCrK,KAAKuJ,IAAM,SAEflN,aAAAmH,MAKA,WACI,IAAMhH,EAAOwD,KAAKuJ,IAAIoB,aACT,OAATnO,IACAwD,KAAKiB,aAAa,OAAQzE,GAC1BwD,KAAKiB,aAAa,WAClBjB,KAAKwK,cAGbnO,YAAAmH,MAKA,WACIxD,KAAKwK,eACR,EAzIwB9K,GAkJ7B,GAPA8I,GAAQ8B,cAAgB,EACxB9B,GAAQ+B,SAAW,GAMK,oBAAbH,SAEP,GAA2B,mBAAhBQ,YAEPA,YAAY,WAAYC,SAEvB,GAAgC,mBAArBhL,iBAAiC,CAE7CA,iBADyB,eAAgBkC,EAAa,WAAa,SAChC8I,IAAe,GAG1D,SAASA,KACL,IAAK,IAAI5M,KAAKuK,GAAQ+B,SACd/B,GAAQ+B,SAAS1I,eAAe5D,IAChCuK,GAAQ+B,SAAStM,GAAGyM,OAGhC,CC7YO,IAAMI,GACqC,mBAAZC,SAAqD,mBAApBA,QAAQC,QAEhE,SAACtK,GAAE,OAAKqK,QAAQC,UAAUC,KAAKvK,IAG/B,SAACA,EAAI4B,GAAY,OAAKA,EAAa5B,EAAI,IAGzCwK,GAAYnJ,EAAWmJ,WAAanJ,EAAWoJ,aCHtDC,GAAqC,oBAAdC,WACI,iBAAtBA,UAAUC,SACmB,gBAApCD,UAAUC,QAAQC,cACTC,eAAE7I,OAAA,WAOX,WAAYP,GAAM,MAE0B,OAF1BW,WACdC,cAAMZ,IACDnF,gBAAkBmF,EAAKwE,cAkJ/B,OAjJArD,MAAAlH,WAAAwK,IACD,WACI,MAAO,eACVxK,aAAAmH,MACD,WACI,GAAKxD,KAAKyL,QAAV,CAIA,IAAMhD,EAAMzI,KAAKyI,MACXiD,EAAY1L,KAAKoC,KAAKsJ,UAEtBtJ,EAAOgJ,GACP,GACA5J,EAAKxB,KAAKoC,KAAM,QAAS,oBAAqB,MAAO,MAAO,aAAc,OAAQ,KAAM,UAAW,qBAAsB,eAAgB,kBAAmB,SAAU,aAAc,SAAU,uBAChMpC,KAAKoC,KAAKqH,eACVrH,EAAKuJ,QAAU3L,KAAKoC,KAAKqH,cAE7B,IACIzJ,KAAK4L,GACyBR,GAIpB,IAAIF,GAAUzC,EAAKiD,EAAWtJ,GAH9BsJ,EACI,IAAIR,GAAUzC,EAAKiD,GACnB,IAAIR,GAAUzC,GAGhC,MAAOjD,GACH,OAAOxF,KAAKiB,aAAa,QAASuE,GAEtCxF,KAAK4L,GAAGtN,WAAa0B,KAAKsD,OAAOhF,YDrCR,cCsCzB0B,KAAK6L,wBAETxP,wBAAAmH,MAKA,WAAoB,WAChBxD,KAAK4L,GAAGE,OAAS,WACT3I,EAAKf,KAAK2J,WACV5I,EAAKyI,GAAGI,QAAQC,QAEpB9I,EAAKoE,UAETvH,KAAK4L,GAAGM,QAAU,SAACC,GAAU,OAAKhJ,EAAKU,QAAQ,CAC3ChB,YAAa,8BACbC,QAASqJ,KAEbnM,KAAK4L,GAAGQ,UAAY,SAACC,GAAE,OAAKlJ,EAAK6F,OAAOqD,EAAG7P,OAC3CwD,KAAK4L,GAAGU,QAAU,SAAC1G,GAAC,OAAKzC,EAAK4F,QAAQ,kBAAmBnD,OAC5DvJ,YAAAmH,MACD,SAAMM,GAAS,WACX9D,KAAKoD,UAAW,EAGhB,IADA,eACSnF,GACL,IAAM+F,EAASF,EAAQ7F,GACjBsO,EAAatO,IAAM6F,EAAQ5F,OAAS,EAC1ClB,EAAagH,EAAQsD,EAAKrK,gBAAgB,SAACT,GAmBvC,IAGQ8K,EAAKsE,GAAGzB,KAAK3N,GAMrB,MAAOoJ,IAEH2G,GAGAzB,IAAS,WACLxD,EAAKlE,UAAW,EAChBkE,EAAKrG,aAAa,WACnBqG,EAAKhF,kBAvCXrE,EAAI,EAAGA,EAAI6F,EAAQ5F,OAAQD,IAAKuO,EAAhCvO,MA2CZ5B,cAAAmH,MACD,gBAC2B,IAAZxD,KAAK4L,KACZ5L,KAAK4L,GAAGpE,QACRxH,KAAK4L,GAAK,SAGlBvP,UAAAmH,MAKA,WACI,IAAIH,EAAQrD,KAAKqD,OAAS,GACpByE,EAAS9H,KAAKoC,KAAKuE,OAAS,MAAQ,KACtCJ,EAAO,GAEPvG,KAAKoC,KAAKmE,OACR,QAAUuB,GAAqC,MAA3BK,OAAOnI,KAAKoC,KAAKmE,OAClC,OAASuB,GAAqC,KAA3BK,OAAOnI,KAAKoC,KAAKmE,SACzCA,EAAO,IAAMvG,KAAKoC,KAAKmE,MAGvBvG,KAAKoC,KAAK2F,oBACV1E,EAAMrD,KAAKoC,KAAK4F,gBAAkBpD,KAGjC5E,KAAK/C,iBACNoG,EAAM6E,IAAM,GAEhB,IAAME,EAAe7D,EAAOlB,GAE5B,OAAQyE,EACJ,QAF8C,IAArC9H,KAAKoC,KAAKqE,SAAS4B,QAAQ,KAG5B,IAAMrI,KAAKoC,KAAKqE,SAAW,IAAMzG,KAAKoC,KAAKqE,UACnDF,EACAvG,KAAKoC,KAAKkG,MACTF,EAAalK,OAAS,IAAMkK,EAAe,OAEpD/L,YAAAmH,MAMA,WACI,QAAS0H,QACZ,EA3JmBhI,GCRXuJ,GAAa,CACtBC,UAAWlB,GACXrF,QAASD,GCePyG,GAAK,sPACLC,GAAQ,CACV,SAAU,WAAY,YAAa,WAAY,OAAQ,WAAY,OAAQ,OAAQ,WAAY,OAAQ,YAAa,OAAQ,QAAS,UAElI,SAASC,GAAM9H,GAClB,IAAM+H,EAAM/H,EAAKgI,EAAIhI,EAAIsD,QAAQ,KAAMzC,EAAIb,EAAIsD,QAAQ,MAC7C,GAAN0E,IAAiB,GAANnH,IACXb,EAAMA,EAAIrG,UAAU,EAAGqO,GAAKhI,EAAIrG,UAAUqO,EAAGnH,GAAGoH,QAAQ,KAAM,KAAOjI,EAAIrG,UAAUkH,EAAGb,EAAI7G,SAG9F,IADA,IAwBmBmF,EACb7G,EAzBFyQ,EAAIN,GAAGO,KAAKnI,GAAO,IAAK0D,EAAM,GAAIxK,EAAI,GACnCA,KACHwK,EAAImE,GAAM3O,IAAMgP,EAAEhP,IAAM,GAU5B,OARU,GAAN8O,IAAiB,GAANnH,IACX6C,EAAI0E,OAASL,EACbrE,EAAI2E,KAAO3E,EAAI2E,KAAK1O,UAAU,EAAG+J,EAAI2E,KAAKlP,OAAS,GAAG8O,QAAQ,KAAM,KACpEvE,EAAI4E,UAAY5E,EAAI4E,UAAUL,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAAIA,QAAQ,KAAM,KAC9EvE,EAAI6E,SAAU,GAElB7E,EAAI8E,UAIR,SAAmBpQ,EAAKmL,GACpB,IAAMkF,EAAO,WAAYC,EAAQnF,EAAK0E,QAAQQ,EAAM,KAAK5P,MAAM,KACvC,KAApB0K,EAAKtH,MAAM,EAAG,IAA6B,IAAhBsH,EAAKpK,QAChCuP,EAAM7M,OAAO,EAAG,GAEE,KAAlB0H,EAAKtH,OAAO,IACZyM,EAAM7M,OAAO6M,EAAMvP,OAAS,EAAG,GAEnC,OAAOuP,CACX,CAboBF,CAAU9E,EAAKA,EAAU,MACzCA,EAAIiF,UAaerK,EAbUoF,EAAW,MAclCjM,EAAO,GACb6G,EAAM2J,QAAQ,6BAA6B,SAAUW,EAAIC,EAAIC,GACrDD,IACApR,EAAKoR,GAAMC,MAGZrR,GAnBAiM,CACX,KCnCaqF,eAAMnL,OAAA,WAOf,WAAY8F,GAAgB,MAAXrG,yDAAO,GA2FR,OA3FUW,WACtBC,gBACK+K,YAAc,GACftF,GAAO,aAAoBA,KAC3BrG,EAAOqG,EACPA,EAAM,MAENA,GACAA,EAAMoE,GAAMpE,GACZrG,EAAKqE,SAAWgC,EAAI2E,KACpBhL,EAAKuE,OAA0B,UAAjB8B,EAAInC,UAAyC,QAAjBmC,EAAInC,SAC9ClE,EAAKmE,KAAOkC,EAAIlC,KACZkC,EAAIpF,QACJjB,EAAKiB,MAAQoF,EAAIpF,QAEhBjB,EAAKgL,OACVhL,EAAKqE,SAAWoG,GAAMzK,EAAKgL,MAAMA,MAErCjL,OAA4BC,GAC5BY,EAAK2D,OACD,MAAQvE,EAAKuE,OACPvE,EAAKuE,OACe,oBAAbP,UAA4B,WAAaA,SAASE,SAC/DlE,EAAKqE,WAAarE,EAAKmE,OAEvBnE,EAAKmE,KAAOvD,EAAK2D,OAAS,MAAQ,MAEtC3D,EAAKyD,SACDrE,EAAKqE,WACoB,oBAAbL,SAA2BA,SAASK,SAAW,aAC/DzD,EAAKuD,KACDnE,EAAKmE,OACoB,oBAAbH,UAA4BA,SAASG,KACvCH,SAASG,KACTvD,EAAK2D,OACD,MACA,MAClB3D,EAAKyJ,WAAarK,EAAKqK,YAAc,CAAC,UAAW,aACjDzJ,EAAK+K,YAAc,GACnB/K,EAAKgL,cAAgB,EACrBhL,EAAKZ,KAAOmG,EAAc,CACtBD,KAAM,aACN2F,OAAO,EACPrE,iBAAiB,EACjBsE,SAAS,EACTlG,eAAgB,IAChBmG,iBAAiB,EACjBC,kBAAkB,EAClBC,oBAAoB,EACpBC,kBAAmB,CACfC,UAAW,MAEfC,iBAAkB,GAClBC,qBAAqB,GACtBrM,GACHY,EAAKZ,KAAKkG,KACNtF,EAAKZ,KAAKkG,KAAK0E,QAAQ,MAAO,KACzBhK,EAAKZ,KAAKgM,iBAAmB,IAAM,IACb,iBAApBpL,EAAKZ,KAAKiB,QACjBL,EAAKZ,KAAKiB,MAAQ/D,EAAO0D,EAAKZ,KAAKiB,QAGvCL,EAAK0L,GAAK,KACV1L,EAAK2L,SAAW,KAChB3L,EAAK4L,aAAe,KACpB5L,EAAK6L,YAAc,KAEnB7L,EAAK8L,iBAAmB,KACQ,mBAArBjP,mBACHmD,EAAKZ,KAAKqM,sBAIVzL,EAAK+L,0BAA4B,WACzB/L,EAAKgM,YAELhM,EAAKgM,UAAUxO,qBACfwC,EAAKgM,UAAUxH,UAGvB3H,iBAAiB,eAAgBmD,EAAK+L,2BAA2B,IAE/C,cAAlB/L,EAAKyD,WACLzD,EAAKiM,qBAAuB,WACxBjM,EAAKa,QAAQ,kBAAmB,CAC5BhB,YAAa,6BAGrBhD,iBAAiB,UAAWmD,EAAKiM,sBAAsB,KAG/DjM,EAAKwG,SAsdR,OApdDjG,MAAAlH,sBAAAmH,MAOA,SAAgB0L,GACZ,IAAM7L,EAAQkF,EAAc,GAAIvI,KAAKoC,KAAKiB,OAE1CA,EAAM8L,IdtFU,EcwFhB9L,EAAM2L,UAAYE,EAEdlP,KAAK0O,KACLrL,EAAM4E,IAAMjI,KAAK0O,IACrB,IAAMtM,EAAOmG,EAAc,GAAIvI,KAAKoC,KAAKoM,iBAAiBU,GAAOlP,KAAKoC,KAAM,CACxEiB,MAAAA,EACAC,OAAQtD,KACRyG,SAAUzG,KAAKyG,SACfE,OAAQ3G,KAAK2G,OACbJ,KAAMvG,KAAKuG,OAEf,OAAO,IAAIkG,GAAWyC,GAAM9M,MAEhC/F,WAAAmH,MAKA,WAAO,IACCwL,SACJ,GAAIhP,KAAKoC,KAAK+L,iBACVL,EAAOsB,wBACmC,IAA1CpP,KAAKyM,WAAWpE,QAAQ,aACxB2G,EAAY,gBAEX,IAAI,IAAMhP,KAAKyM,WAAWvO,OAK3B,YAHA8B,KAAKsC,cAAa,WACda,EAAKlC,aAAa,QAAS,6BAC5B,GAIH+N,EAAYhP,KAAKyM,WAAW,GAEhCzM,KAAK0D,WAAa,UAElB,IACIsL,EAAYhP,KAAKqP,gBAAgBL,GAErC,MAAOpJ,GAGH,OAFA5F,KAAKyM,WAAW6C,aAChBtP,KAAKwJ,OAGTwF,EAAUxF,OACVxJ,KAAKuP,aAAaP,MAEtB3S,mBAAAmH,MAKA,SAAawL,GAAW,WAChBhP,KAAKgP,WACLhP,KAAKgP,UAAUxO,qBAGnBR,KAAKgP,UAAYA,EAEjBA,EACKpP,GAAG,QAASI,KAAKwP,QAAQjN,KAAKvC,OAC9BJ,GAAG,SAAUI,KAAKiE,SAAS1B,KAAKvC,OAChCJ,GAAG,QAASI,KAAK+I,QAAQxG,KAAKvC,OAC9BJ,GAAG,SAAS,SAACgD,GAAM,OAAK0E,EAAKzD,QAAQ,kBAAmBjB,SAEjEvG,YAAAmH,MAMA,SAAM0L,GAAM,WACJF,EAAYhP,KAAKqP,gBAAgBH,GACjCO,GAAS,EACb3B,EAAOsB,uBAAwB,EAC/B,IAAMM,EAAkB,WAChBD,IAEJT,EAAU7E,KAAK,CAAC,CAAE5N,KAAM,OAAQC,KAAM,WACtCwS,EAAU7O,KAAK,UAAU,SAACwP,GACtB,IAAIF,EAEJ,GAAI,SAAWE,EAAIpT,MAAQ,UAAYoT,EAAInT,KAAM,CAG7C,GAFAiL,EAAKmI,WAAY,EACjBnI,EAAKxG,aAAa,YAAa+N,IAC1BA,EACD,OACJlB,EAAOsB,sBAAwB,cAAgBJ,EAAUE,KACzDzH,EAAKuH,UAAUjI,OAAM,WACb0I,GAEA,WAAahI,EAAK/D,aAEtB8G,IACA/C,EAAK8H,aAAaP,GAClBA,EAAU7E,KAAK,CAAC,CAAE5N,KAAM,aACxBkL,EAAKxG,aAAa,UAAW+N,GAC7BA,EAAY,KACZvH,EAAKmI,WAAY,EACjBnI,EAAKoI,gBAGR,CACD,IAAMrK,EAAM,IAAIvC,MAAM,eAEtBuC,EAAIwJ,UAAYA,EAAUE,KAC1BzH,EAAKxG,aAAa,eAAgBuE,SAI9C,SAASsK,IACDL,IAGJA,GAAS,EACTjF,IACAwE,EAAUxH,QACVwH,EAAY,MAGhB,IAAM1C,EAAU,SAAC9G,GACb,IAAMuK,EAAQ,IAAI9M,MAAM,gBAAkBuC,GAE1CuK,EAAMf,UAAYA,EAAUE,KAC5BY,IACArI,EAAKxG,aAAa,eAAgB8O,IAEtC,SAASC,IACL1D,EAAQ,oBAGZ,SAASJ,IACLI,EAAQ,iBAGZ,SAAS2D,EAAUC,GACXlB,GAAakB,EAAGhB,OAASF,EAAUE,MACnCY,IAIR,IAAMtF,EAAU,WACZwE,EAAUzO,eAAe,OAAQmP,GACjCV,EAAUzO,eAAe,QAAS+L,GAClC0C,EAAUzO,eAAe,QAASyP,GAClCvI,EAAKrH,IAAI,QAAS8L,GAClBzE,EAAKrH,IAAI,YAAa6P,IAE1BjB,EAAU7O,KAAK,OAAQuP,GACvBV,EAAU7O,KAAK,QAASmM,GACxB0C,EAAU7O,KAAK,QAAS6P,GACxBhQ,KAAKG,KAAK,QAAS+L,GACnBlM,KAAKG,KAAK,YAAa8P,GACvBjB,EAAUxF,UAEdnN,aAAAmH,MAKA,WAOI,GANAxD,KAAK0D,WAAa,OAClBoK,EAAOsB,sBAAwB,cAAgBpP,KAAKgP,UAAUE,KAC9DlP,KAAKiB,aAAa,QAClBjB,KAAK6P,QAGD,SAAW7P,KAAK0D,YAAc1D,KAAKoC,KAAK8L,QAGxC,IAFA,IAAIjQ,EAAI,EACFmH,EAAIpF,KAAK2O,SAASzQ,OACjBD,EAAImH,EAAGnH,IACV+B,KAAKmQ,MAAMnQ,KAAK2O,SAAS1Q,OAIrC5B,eAAAmH,MAKA,SAASQ,GACL,GAAI,YAAchE,KAAK0D,YACnB,SAAW1D,KAAK0D,YAChB,YAAc1D,KAAK0D,WAInB,OAHA1D,KAAKiB,aAAa,SAAU+C,GAE5BhE,KAAKiB,aAAa,aACV+C,EAAOzH,MACX,IAAK,OACDyD,KAAKoQ,YAAYC,KAAKxD,MAAM7I,EAAOxH,OACnC,MACJ,IAAK,OACDwD,KAAKsQ,mBACLtQ,KAAKuQ,WAAW,QAChBvQ,KAAKiB,aAAa,QAClBjB,KAAKiB,aAAa,QAClB,MACJ,IAAK,QACD,IAAMuE,EAAM,IAAIvC,MAAM,gBAEtBuC,EAAIgL,KAAOxM,EAAOxH,KAClBwD,KAAK+I,QAAQvD,GACb,MACJ,IAAK,UACDxF,KAAKiB,aAAa,OAAQ+C,EAAOxH,MACjCwD,KAAKiB,aAAa,UAAW+C,EAAOxH,UAOpDH,kBAAAmH,MAMA,SAAYhH,GACRwD,KAAKiB,aAAa,YAAazE,GAC/BwD,KAAK0O,GAAKlS,EAAKyL,IACfjI,KAAKgP,UAAU3L,MAAM4E,IAAMzL,EAAKyL,IAChCjI,KAAK2O,SAAW3O,KAAKyQ,eAAejU,EAAKmS,UACzC3O,KAAK4O,aAAepS,EAAKoS,aACzB5O,KAAK6O,YAAcrS,EAAKqS,YACxB7O,KAAK0Q,WAAalU,EAAKkU,WACvB1Q,KAAKuH,SAED,WAAavH,KAAK0D,YAEtB1D,KAAKsQ,sBAETjU,uBAAAmH,MAKA,WAAmB,WACfxD,KAAKwC,eAAexC,KAAK8O,kBACzB9O,KAAK8O,iBAAmB9O,KAAKsC,cAAa,WACtCsF,EAAK/D,QAAQ,kBACd7D,KAAK4O,aAAe5O,KAAK6O,aACxB7O,KAAKoC,KAAK2J,WACV/L,KAAK8O,iBAAiB7C,WAG9B5P,cAAAmH,MAKA,WACIxD,KAAK+N,YAAYnN,OAAO,EAAGZ,KAAKgO,eAIhChO,KAAKgO,cAAgB,EACjB,IAAMhO,KAAK+N,YAAY7P,OACvB8B,KAAKiB,aAAa,SAGlBjB,KAAK6P,WAGbxT,YAAAmH,MAKA,WACI,GAAI,WAAaxD,KAAK0D,YAClB1D,KAAKgP,UAAU5L,WACdpD,KAAK4P,WACN5P,KAAK+N,YAAY7P,OAAQ,CACzB,IAAM4F,EAAU9D,KAAK2Q,qBACrB3Q,KAAKgP,UAAU7E,KAAKrG,GAGpB9D,KAAKgO,cAAgBlK,EAAQ5F,OAC7B8B,KAAKiB,aAAa,aAG1B5E,yBAAAmH,MAMA,WAII,KAH+BxD,KAAK0Q,YACR,YAAxB1Q,KAAKgP,UAAUE,MACflP,KAAK+N,YAAY7P,OAAS,GAE1B,OAAO8B,KAAK+N,YAGhB,IADA,IXrYmB5Q,EWqYfyT,EAAc,EACT3S,EAAI,EAAGA,EAAI+B,KAAK+N,YAAY7P,OAAQD,IAAK,CAC9C,IAAMzB,EAAOwD,KAAK+N,YAAY9P,GAAGzB,KAIjC,GAHIA,IACAoU,GXxYO,iBADIzT,EWyYeX,GXlY1C,SAAoBuI,GAEhB,IADA,IAAI8L,EAAI,EAAG3S,EAAS,EACXD,EAAI,EAAGmH,EAAIL,EAAI7G,OAAQD,EAAImH,EAAGnH,KACnC4S,EAAI9L,EAAI5G,WAAWF,IACX,IACJC,GAAU,EAEL2S,EAAI,KACT3S,GAAU,EAEL2S,EAAI,OAAUA,GAAK,MACxB3S,GAAU,GAGVD,IACAC,GAAU,GAGlB,OAAOA,CACX,CAxBe4S,CAAW3T,GAGfuH,KAAKqM,KAPQ,MAOF5T,EAAI6T,YAAc7T,EAAI8T,QWsY5BhT,EAAI,GAAK2S,EAAc5Q,KAAK0Q,WAC5B,OAAO1Q,KAAK+N,YAAY/M,MAAM,EAAG/C,GAErC2S,GAAe,EAEnB,OAAO5Q,KAAK+N,eAEhB1R,YAAAmH,MAQA,SAAMmM,EAAKuB,EAASnR,GAEhB,OADAC,KAAKuQ,WAAW,UAAWZ,EAAKuB,EAASnR,GAClCC,QACV3D,WAAAmH,MACD,SAAKmM,EAAKuB,EAASnR,GAEf,OADAC,KAAKuQ,WAAW,UAAWZ,EAAKuB,EAASnR,GAClCC,QAEX3D,iBAAAmH,MASA,SAAWjH,EAAMC,EAAM0U,EAASnR,GAS5B,GARI,mBAAsBvD,IACtBuD,EAAKvD,EACLA,OAAO6M,GAEP,mBAAsB6H,IACtBnR,EAAKmR,EACLA,EAAU,MAEV,YAAclR,KAAK0D,YAAc,WAAa1D,KAAK0D,WAAvD,EAGAwN,EAAUA,GAAW,IACbC,UAAW,IAAUD,EAAQC,SACrC,IAAMnN,EAAS,CACXzH,KAAMA,EACNC,KAAMA,EACN0U,QAASA,GAEblR,KAAKiB,aAAa,eAAgB+C,GAClChE,KAAK+N,YAAY7N,KAAK8D,GAClBjE,GACAC,KAAKG,KAAK,QAASJ,GACvBC,KAAK6P,YAETxT,YAAAmH,MAGA,WAAQ,WACEgE,EAAQ,WACVsB,EAAKjF,QAAQ,gBACbiF,EAAKkG,UAAUxH,SAEb4J,EAAkB,SAAlBA,IACFtI,EAAK1I,IAAI,UAAWgR,GACpBtI,EAAK1I,IAAI,eAAgBgR,GACzB5J,KAEE6J,EAAiB,WAEnBvI,EAAK3I,KAAK,UAAWiR,GACrBtI,EAAK3I,KAAK,eAAgBiR,IAqB9B,MAnBI,YAAcpR,KAAK0D,YAAc,SAAW1D,KAAK0D,aACjD1D,KAAK0D,WAAa,UACd1D,KAAK+N,YAAY7P,OACjB8B,KAAKG,KAAK,SAAS,WACX2I,EAAK8G,UACLyB,IAGA7J,OAIHxH,KAAK4P,UACVyB,IAGA7J,KAGDxH,QAEX3D,cAAAmH,MAKA,SAAQgC,GACJsI,EAAOsB,uBAAwB,EAC/BpP,KAAKiB,aAAa,QAASuE,GAC3BxF,KAAK6D,QAAQ,kBAAmB2B,MAEpCnJ,cAAAmH,MAKA,SAAQZ,EAAQC,GACR,YAAc7C,KAAK0D,YACnB,SAAW1D,KAAK0D,YAChB,YAAc1D,KAAK0D,aAEnB1D,KAAKwC,eAAexC,KAAK8O,kBAEzB9O,KAAKgP,UAAUxO,mBAAmB,SAElCR,KAAKgP,UAAUxH,QAEfxH,KAAKgP,UAAUxO,qBACoB,mBAAxBC,sBACPA,oBAAoB,eAAgBT,KAAK+O,2BAA2B,GACpEtO,oBAAoB,UAAWT,KAAKiP,sBAAsB,IAG9DjP,KAAK0D,WAAa,SAElB1D,KAAK0O,GAAK,KAEV1O,KAAKiB,aAAa,QAAS2B,EAAQC,GAGnC7C,KAAK+N,YAAc,GACnB/N,KAAKgO,cAAgB,MAG7B3R,qBAAAmH,MAMA,SAAemL,GAIX,IAHA,IAAM2C,EAAmB,GACrBrT,EAAI,EACFsT,EAAI5C,EAASzQ,OACZD,EAAIsT,EAAGtT,KACL+B,KAAKyM,WAAWpE,QAAQsG,EAAS1Q,KAClCqT,EAAiBpR,KAAKyO,EAAS1Q,IAEvC,OAAOqT,OACV,EAxjBuB5R,GA0jB5BoO,GAAOxH,SdliBiB,kBe7BRmC,EAAKrG,GAAI,OAAK,IAAI0L,GAAOrF,EAAKrG"} \ No newline at end of file diff --git a/package.json b/package.json index cd6cbd9e9..ff3d689e3 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "engine.io-client", "description": "Client for the realtime Engine", "license": "MIT", - "version": "6.2.3", + "version": "6.3.0", "main": "./build/cjs/index.js", "module": "./build/esm/index.js", "exports": { From c36883d243d6a2923e83ab464ab805a8a3d9b266 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Fri, 3 Feb 2023 09:22:36 +0100 Subject: [PATCH 13/21] refactor: use "import type" syntax For some reason, "import { type A }" does not work in some cases: > node_modules/engine.io-client/build/esm/socket.d.ts:2:15 - error TS1005: ',' expected. > 2 import { type Packet, type BinaryType, RawData } from "engine.io-parser"; References: https://www.typescriptlang.org/docs/handbook/modules.html#importing-types --- lib/socket.ts | 9 ++------- lib/transport.ts | 3 ++- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/lib/socket.ts b/lib/socket.ts index 586762c23..53ee0e11e 100644 --- a/lib/socket.ts +++ b/lib/socket.ts @@ -4,13 +4,8 @@ import { decode } from "./contrib/parseqs.js"; import { parse } from "./contrib/parseuri.js"; import debugModule from "debug"; // debug() import { Emitter } from "@socket.io/component-emitter"; -import { - protocol, - type Packet, - type BinaryType, - type PacketType, - RawData, -} from "engine.io-parser"; +import { protocol } from "engine.io-parser"; +import type { Packet, BinaryType, PacketType, RawData } from "engine.io-parser"; import { CloseDetails, Transport } from "./transport.js"; const debug = debugModule("engine.io-client:socket"); // debug() diff --git a/lib/transport.ts b/lib/transport.ts index a2c1da040..30c49caa1 100644 --- a/lib/transport.ts +++ b/lib/transport.ts @@ -1,4 +1,5 @@ -import { decodePacket, type Packet, type RawData } from "engine.io-parser"; +import { decodePacket } from "engine.io-parser"; +import type { Packet, RawData } from "engine.io-parser"; import { Emitter } from "@socket.io/component-emitter"; import { installTimerFunctions } from "./util.js"; import debugModule from "debug"; // debug() From 37d7a0aa791a4666ca405b11d0d8bdb199222e50 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Fri, 3 Feb 2023 11:58:36 +0100 Subject: [PATCH 14/21] fix(typings): do not expose browser-specific types Related: - https://github.com/socketio/socket.io-client/issues/1561 - https://github.com/socketio/engine.io-client/commit/b9252e207413a850db7e4f0f0ef7dd2ef0ed26da --- lib/transport.ts | 2 +- lib/transports/polling.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/transport.ts b/lib/transport.ts index 30c49caa1..2894f96f2 100644 --- a/lib/transport.ts +++ b/lib/transport.ts @@ -21,7 +21,7 @@ class TransportError extends Error { export interface CloseDetails { description: string; - context?: CloseEvent | XMLHttpRequest; + context?: unknown; // context should be typed as CloseEvent | XMLHttpRequest, but these types are not available on non-browser platforms } interface TransportReservedEvents { diff --git a/lib/transports/polling.ts b/lib/transports/polling.ts index 512ecf960..bdd7e442b 100644 --- a/lib/transports/polling.ts +++ b/lib/transports/polling.ts @@ -292,7 +292,7 @@ export class Polling extends Transport { interface RequestReservedEvents { success: () => void; data: (data: RawData) => void; - error: (err: number | Error, context: XMLHttpRequest) => void; + error: (err: number | Error, context: unknown) => void; // context should be typed as XMLHttpRequest, but this type is not available on non-browser platforms } export class Request extends Emitter<{}, {}, RequestReservedEvents> { From 828d447f574f8528818be1f0c35f7421a031858b Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sat, 4 Feb 2023 07:20:23 +0100 Subject: [PATCH 15/21] chore(release): 6.3.1 Diff: https://github.com/socketio/engine.io-client/compare/6.3.0...6.3.1 --- CHANGELOG.md | 59 +-- dist/engine.io.esm.min.js | 2 +- dist/engine.io.esm.min.js.map | 2 +- dist/engine.io.js | 707 ++++++++++++++++++++++++---------- dist/engine.io.js.map | 2 +- dist/engine.io.min.js | 4 +- dist/engine.io.min.js.map | 2 +- package.json | 2 +- 8 files changed, 554 insertions(+), 226 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fde09bb9..7cca0080d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,38 +2,51 @@ ## 2023 -- [6.3.0](#63O-2023-01-10) (2023-01-10) +- [6.3.1](#631-2023-02-04) (Feb 2023) +- [6.3.0](#63O-2023-01-10) (Jan 2023) ## 2022 -- [6.2.3](#623-2022-10-13) (2022-10-13) -- [6.2.2](#622-2022-05-02) (2022-05-02) -- [6.2.1](#621-2022-04-17) (2022-04-17) -- [6.2.0](#620-2022-04-17) (2022-04-17) +- [6.2.3](#623-2022-10-13) (Oct 2022) +- [6.2.2](#622-2022-05-02) (May 2022) +- [6.2.1](#621-2022-04-17) (Apr 2022) +- [6.2.0](#620-2022-04-17) (Apr 2022) ## 2021 -- [6.0.3](#603-2021-11-14) (2021-11-14) (from the [6.0.x](https://github.com/socketio/engine.io-client/tree/6.0.x) branch) -- [6.1.1](#611-2021-11-14) (2021-11-14) -- [6.1.0](#610-2021-11-08) (2021-11-08) -- [6.0.2](#602-2021-10-15) (2021-10-15) -- [6.0.1](#601-2021-10-14) (2021-10-14) -- [**6.0.0**](#600-2021-10-08) (2021-10-08) -- [5.2.0](#520-2021-08-29) (2021-08-29) -- [5.1.2](#512-2021-06-24) (2021-06-24) -- [5.1.1](#511-2021-05-11) (2021-05-11) -- [4.1.4](#414-2021-05-05) (2021-05-05) (from the [4.1.x](https://github.com/socketio/engine.io-client/tree/4.1.x) branch) -- [3.5.2](#352-2021-05-05) (2021-05-05) (from the [3.5.x](https://github.com/socketio/engine.io-client/tree/3.5.x) branch) -- [5.1.0](#510-2021-05-04) (2021-05-04) -- [5.0.1](#501-2021-03-31) (2021-03-31) -- [**5.0.0**](#500-2021-03-10) (2021-03-10) -- [3.5.1](#351-2021-03-02) (2021-03-02) (from the [3.5.x](https://github.com/socketio/engine.io-client/tree/3.5.x) branch) -- [4.1.2](#412-2021-02-25) (2021-02-25) -- [4.1.1](#411-2021-02-02) (2021-02-02) -- [4.1.0](#410-2021-01-14) (2021-01-14) +- [6.0.3](#603-2021-11-14) (Nov 2021) (from the [6.0.x](https://github.com/socketio/engine.io-client/tree/6.0.x) branch) +- [6.1.1](#611-2021-11-14) (Nov 2021) +- [6.1.0](#610-2021-11-08) (Nov 2021) +- [6.0.2](#602-2021-10-15) (Oct 2021) +- [6.0.1](#601-2021-10-14) (Oct 2021) +- [**6.0.0**](#600-2021-10-08) (Oct 2021) +- [5.2.0](#520-2021-08-29) (Aug 2021) +- [5.1.2](#512-2021-06-24) (Jun 2021) +- [5.1.1](#511-2021-05-11) (May 2021) +- [4.1.4](#414-2021-05-05) (May 2021) (from the [4.1.x](https://github.com/socketio/engine.io-client/tree/4.1.x) branch) +- [3.5.2](#352-2021-05-05) (May 2021) (from the [3.5.x](https://github.com/socketio/engine.io-client/tree/3.5.x) branch) +- [5.1.0](#510-2021-05-04) (May 2021) +- [5.0.1](#501-2021-03-31) (Mar 2021) +- [**5.0.0**](#500-2021-03-10) (Mar 2021) +- [3.5.1](#351-2021-03-02) (Mar 2021) (from the [3.5.x](https://github.com/socketio/engine.io-client/tree/3.5.x) branch) +- [4.1.2](#412-2021-02-25) (Feb 2021) +- [4.1.1](#411-2021-02-02) (Feb 2021) +- [4.1.0](#410-2021-01-14) (Jan 2021) # Release notes +## [6.3.1](https://github.com/socketio/engine.io-client/compare/6.3.0...6.3.1) (2023-02-04) + + +### Bug Fixes + +* **typings:** do not expose browser-specific types ([37d7a0a](https://github.com/socketio/engine.io-client/commit/37d7a0aa791a4666ca405b11d0d8bdb199222e50)) + +### Dependencies + +- [`ws@~8.11.0`](https://github.com/websockets/ws/releases/tag/8.11.0) (no change) + + ## [6.3.0](https://github.com/socketio/engine.io-client/compare/6.2.3...6.3.0) (2023-01-10) diff --git a/dist/engine.io.esm.min.js b/dist/engine.io.esm.min.js index 6c1380b7e..afd93cc51 100644 --- a/dist/engine.io.esm.min.js +++ b/dist/engine.io.esm.min.js @@ -1,5 +1,5 @@ /*! - * Engine.IO v6.3.0 + * Engine.IO v6.3.1 * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ diff --git a/dist/engine.io.esm.min.js.map b/dist/engine.io.esm.min.js.map index e4e957fb0..a3601fc79 100644 --- a/dist/engine.io.esm.min.js.map +++ b/dist/engine.io.esm.min.js.map @@ -1 +1 @@ -{"version":3,"file":"engine.io.esm.min.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/index.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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport const protocol = Socket.protocol;\nexport { Transport } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./transports/websocket-constructor.js\";\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","obj","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","TransportError","Error","constructor","reason","description","context","super","Transport","writable","query","socket","onError","open","readyState","doOpen","close","doClose","onClose","send","packets","write","onOpen","onData","packet","onPacket","details","pause","onPause","alphabet","map","prev","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Request","uri","method","async","undefined","xd","xscheme","xs","xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","transports","websocket","forceBase64","name","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","schema","secure","port","Number","timestampRequests","timestampParam","b64","encodedQuery","hostname","indexOf","path","polling","location","isSSL","protocol","poll","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","count","encodePayload","doWrite","sid","request","assign","req","xhrStatus","pollXhr","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","qs","qry","pairs","l","pair","decodeURIComponent","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","createTransport","EIO","priorWebsocketSuccess","shift","setTransport","onDrain","probe","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":";;;;;AAAA,MAAMA,EAAeC,OAAOC,OAAO,MACnCF,EAAmB,KAAI,IACvBA,EAAoB,MAAI,IACxBA,EAAmB,KAAI,IACvBA,EAAmB,KAAI,IACvBA,EAAsB,QAAI,IAC1BA,EAAsB,QAAI,IAC1BA,EAAmB,KAAI,IACvB,MAAMG,EAAuBF,OAAOC,OAAO,MAC3CD,OAAOG,KAAKJ,GAAcK,SAAQC,IAC9BH,EAAqBH,EAAaM,IAAQA,CAAG,IAEjD,MAAMC,EAAe,CAAEC,KAAM,QAASC,KAAM,gBCXtCC,EAAiC,mBAATC,MACT,oBAATA,MACqC,6BAAzCV,OAAOW,UAAUC,SAASC,KAAKH,MACjCI,EAA+C,mBAAhBC,YAO/BC,EAAe,EAAGT,OAAMC,QAAQS,EAAgBC,KAClD,OAAIT,GAAkBD,aAAgBE,KAC9BO,EACOC,EAASV,GAGTW,EAAmBX,EAAMU,GAG/BJ,IACJN,aAAgBO,cAfVK,EAegCZ,EAdN,mBAAvBO,YAAYM,OACpBN,YAAYM,OAAOD,GACnBA,GAAOA,EAAIE,kBAAkBP,cAa3BE,EACOC,EAASV,GAGTW,EAAmB,IAAIT,KAAK,CAACF,IAAQU,GAI7CA,EAASnB,EAAaQ,IAASC,GAAQ,KAxBnCY,KAwBuC,EAEhDD,EAAqB,CAACX,EAAMU,KAC9B,MAAMK,EAAa,IAAIC,WAKvB,OAJAD,EAAWE,OAAS,WAChB,MAAMC,EAAUH,EAAWI,OAAOC,MAAM,KAAK,GAC7CV,EAAS,IAAMQ,IAEZH,EAAWM,cAAcrB,EAAK,EC9BzC,IAHA,IAAIsB,EAAQ,mEAERC,EAA+B,oBAAfC,WAA6B,GAAK,IAAIA,WAAW,KAC5DC,EAAI,EAAGA,EAAIH,EAAMI,OAAQD,IAC9BF,EAAOD,EAAMK,WAAWF,IAAMA,ECPlC,MAAMnB,EAA+C,mBAAhBC,YAC/BqB,EAAe,CAACC,EAAeC,KACjC,GAA6B,iBAAlBD,EACP,MAAO,CACH9B,KAAM,UACNC,KAAM+B,EAAUF,EAAeC,IAGvC,MAAM/B,EAAO8B,EAAcG,OAAO,GAClC,GAAa,MAATjC,EACA,MAAO,CACHA,KAAM,UACNC,KAAMiC,EAAmBJ,EAAcK,UAAU,GAAIJ,IAI7D,OADmBpC,EAAqBK,GAIjC8B,EAAcH,OAAS,EACxB,CACE3B,KAAML,EAAqBK,GAC3BC,KAAM6B,EAAcK,UAAU,IAEhC,CACEnC,KAAML,EAAqBK,IARxBD,CASN,EAEHmC,EAAqB,CAACjC,EAAM8B,KAC9B,GAAIxB,EAAuB,CACvB,MAAM6B,EDLD,SAAUC,GACnB,IAA8DX,EAAUY,EAAUC,EAAUC,EAAUC,EAAlGC,EAA+B,IAAhBL,EAAOV,OAAegB,EAAMN,EAAOV,OAAWiB,EAAI,EACnC,MAA9BP,EAAOA,EAAOV,OAAS,KACvBe,IACkC,MAA9BL,EAAOA,EAAOV,OAAS,IACvBe,KAGR,IAAIG,EAAc,IAAIrC,YAAYkC,GAAeI,EAAQ,IAAIrB,WAAWoB,GACxE,IAAKnB,EAAI,EAAGA,EAAIiB,EAAKjB,GAAK,EACtBY,EAAWd,EAAOa,EAAOT,WAAWF,IACpCa,EAAWf,EAAOa,EAAOT,WAAWF,EAAI,IACxCc,EAAWhB,EAAOa,EAAOT,WAAWF,EAAI,IACxCe,EAAWjB,EAAOa,EAAOT,WAAWF,EAAI,IACxCoB,EAAMF,KAAQN,GAAY,EAAMC,GAAY,EAC5CO,EAAMF,MAAoB,GAAXL,IAAkB,EAAMC,GAAY,EACnDM,EAAMF,MAAoB,EAAXJ,IAAiB,EAAiB,GAAXC,EAE1C,OAAOI,CACX,CCdwBE,CAAO9C,GACvB,OAAO+B,EAAUI,EAASL,GAG1B,MAAO,CAAEM,QAAQ,EAAMpC,SAGzB+B,EAAY,CAAC/B,EAAM8B,IAEZ,SADDA,GAEO9B,aAAgBO,YAAc,IAAIL,KAAK,CAACF,IAGxCA,EC3Cb+C,EAAYC,OAAOC,aAAa,ICI/B,SAASC,EAAQtC,GACtB,GAAIA,EAAK,OAWX,SAAeA,GACb,IAAK,IAAIf,KAAOqD,EAAQ/C,UACtBS,EAAIf,GAAOqD,EAAQ/C,UAAUN,GAE/B,OAAOe,CACT,CAhBkBuC,CAAMvC,EACxB,CA0BAsC,EAAQ/C,UAAUiD,GAClBF,EAAQ/C,UAAUkD,iBAAmB,SAASC,EAAOC,GAInD,OAHAC,KAAKC,WAAaD,KAAKC,YAAc,IACpCD,KAAKC,WAAW,IAAMH,GAASE,KAAKC,WAAW,IAAMH,IAAU,IAC7DI,KAAKH,GACDC,IACT,EAYAN,EAAQ/C,UAAUwD,KAAO,SAASL,EAAOC,GACvC,SAASH,IACPI,KAAKI,IAAIN,EAAOF,GAChBG,EAAGM,MAAML,KAAMM,WAKjB,OAFAV,EAAGG,GAAKA,EACRC,KAAKJ,GAAGE,EAAOF,GACRI,IACT,EAYAN,EAAQ/C,UAAUyD,IAClBV,EAAQ/C,UAAU4D,eAClBb,EAAQ/C,UAAU6D,mBAClBd,EAAQ/C,UAAU8D,oBAAsB,SAASX,EAAOC,GAItD,GAHAC,KAAKC,WAAaD,KAAKC,YAAc,GAGjC,GAAKK,UAAUpC,OAEjB,OADA8B,KAAKC,WAAa,GACXD,KAIT,IAUIU,EAVAC,EAAYX,KAAKC,WAAW,IAAMH,GACtC,IAAKa,EAAW,OAAOX,KAGvB,GAAI,GAAKM,UAAUpC,OAEjB,cADO8B,KAAKC,WAAW,IAAMH,GACtBE,KAKT,IAAK,IAAI/B,EAAI,EAAGA,EAAI0C,EAAUzC,OAAQD,IAEpC,IADAyC,EAAKC,EAAU1C,MACJ8B,GAAMW,EAAGX,KAAOA,EAAI,CAC7BY,EAAUC,OAAO3C,EAAG,GACpB,MAUJ,OAJyB,IAArB0C,EAAUzC,eACL8B,KAAKC,WAAW,IAAMH,GAGxBE,IACT,EAUAN,EAAQ/C,UAAUkE,KAAO,SAASf,GAChCE,KAAKC,WAAaD,KAAKC,YAAc,GAKrC,IAHA,IAAIa,EAAO,IAAIC,MAAMT,UAAUpC,OAAS,GACpCyC,EAAYX,KAAKC,WAAW,IAAMH,GAE7B7B,EAAI,EAAGA,EAAIqC,UAAUpC,OAAQD,IACpC6C,EAAK7C,EAAI,GAAKqC,UAAUrC,GAG1B,GAAI0C,EAEG,CAAI1C,EAAI,EAAb,IAAK,IAAWiB,GADhByB,EAAYA,EAAUK,MAAM,IACI9C,OAAQD,EAAIiB,IAAOjB,EACjD0C,EAAU1C,GAAGoC,MAAML,KAAMc,EADK5C,CAKlC,OAAO8B,IACT,EAGAN,EAAQ/C,UAAUsE,aAAevB,EAAQ/C,UAAUkE,KAUnDnB,EAAQ/C,UAAUuE,UAAY,SAASpB,GAErC,OADAE,KAAKC,WAAaD,KAAKC,YAAc,GAC9BD,KAAKC,WAAW,IAAMH,IAAU,EACzC,EAUAJ,EAAQ/C,UAAUwE,aAAe,SAASrB,GACxC,QAAUE,KAAKkB,UAAUpB,GAAO5B,MAClC,ECxKO,MAAMkD,EACW,oBAATC,KACAA,KAEgB,oBAAXC,OACLA,OAGAC,SAAS,cAATA,GCPR,SAASC,EAAKpE,KAAQqE,GACzB,OAAOA,EAAKC,QAAO,CAACC,EAAKC,KACjBxE,EAAIyE,eAAeD,KACnBD,EAAIC,GAAKxE,EAAIwE,IAEVD,IACR,GACP,CAEA,MAAMG,EAAqBC,EAAWC,WAChCC,EAAuBF,EAAWG,aACjC,SAASC,EAAsB/E,EAAKgF,GACnCA,EAAKC,iBACLjF,EAAIkF,aAAeR,EAAmBS,KAAKR,GAC3C3E,EAAIoF,eAAiBP,EAAqBM,KAAKR,KAG/C3E,EAAIkF,aAAeP,EAAWC,WAAWO,KAAKR,GAC9C3E,EAAIoF,eAAiBT,EAAWG,aAAaK,KAAKR,GAE1D,CClBA,MAAMU,UAAuBC,MACzBC,YAAYC,EAAQC,EAAaC,GAC7BC,MAAMH,GACN5C,KAAK6C,YAAcA,EACnB7C,KAAK8C,QAAUA,EACf9C,KAAKzD,KAAO,kBAGb,MAAMyG,UAAkBtD,EAO3BiD,YAAYP,GACRW,QACA/C,KAAKiD,UAAW,EAChBd,EAAsBnC,KAAMoC,GAC5BpC,KAAKoC,KAAOA,EACZpC,KAAKkD,MAAQd,EAAKc,MAClBlD,KAAKmD,OAASf,EAAKe,OAWvBC,QAAQR,EAAQC,EAAaC,GAEzB,OADAC,MAAM9B,aAAa,QAAS,IAAIwB,EAAeG,EAAQC,EAAaC,IAC7D9C,KAKXqD,OAGI,OAFArD,KAAKsD,WAAa,UAClBtD,KAAKuD,SACEvD,KAKXwD,QAKI,MAJwB,YAApBxD,KAAKsD,YAAgD,SAApBtD,KAAKsD,aACtCtD,KAAKyD,UACLzD,KAAK0D,WAEF1D,KAOX2D,KAAKC,GACuB,SAApB5D,KAAKsD,YACLtD,KAAK6D,MAAMD,GAWnBE,SACI9D,KAAKsD,WAAa,OAClBtD,KAAKiD,UAAW,EAChBF,MAAM9B,aAAa,QAQvB8C,OAAOvH,GACH,MAAMwH,EAAS5F,EAAa5B,EAAMwD,KAAKmD,OAAO7E,YAC9C0B,KAAKiE,SAASD,GAOlBC,SAASD,GACLjB,MAAM9B,aAAa,SAAU+C,GAOjCN,QAAQQ,GACJlE,KAAKsD,WAAa,SAClBP,MAAM9B,aAAa,QAASiD,GAOhCC,MAAMC,KC9GV,MAAMC,EAAW,mEAAmEzG,MAAM,IAAkB0G,EAAM,GAClH,IAAqBC,EAAjBC,EAAO,EAAGvG,EAAI,EAQX,SAASwG,EAAOC,GACnB,IAAIC,EAAU,GACd,GACIA,EAAUN,EAASK,EAZ6E,IAY7DC,EACnCD,EAAME,KAAKC,MAAMH,EAb+E,UAc3FA,EAAM,GACf,OAAOC,CACX,CAqBO,SAASG,IACZ,MAAMC,EAAMN,GAAQ,IAAIO,MACxB,OAAID,IAAQR,GACDC,EAAO,EAAGD,EAAOQ,GACrBA,EAAM,IAAMN,EAAOD,IAC9B,CAIA,KAAOvG,EA9CiG,GA8CrFA,IACfqG,EAAID,EAASpG,IAAMA,ECzChB,SAASwG,EAAOrH,GACnB,IAAI6H,EAAM,GACV,IAAK,IAAIhH,KAAKb,EACNA,EAAIyE,eAAe5D,KACfgH,EAAI/G,SACJ+G,GAAO,KACXA,GAAOC,mBAAmBjH,GAAK,IAAMiH,mBAAmB9H,EAAIa,KAGpE,OAAOgH,CACX,CCjBA,IAAIE,GAAQ,EACZ,IACIA,EAAkC,oBAAnBC,gBACX,oBAAqB,IAAIA,cAKjC,CAHA,MAAOC,GAGP,CACO,MAAMC,EAAUH,ECPhB,SAASI,EAAInD,GAChB,MAAMoD,EAAUpD,EAAKoD,QAErB,IACI,GAAI,oBAAuBJ,kBAAoBI,GAAWF,GACtD,OAAO,IAAIF,eAGnB,MAAOK,IACP,IAAKD,EACD,IACI,OAAO,IAAIzD,EAAW,CAAC,UAAU2D,OAAO,UAAUC,KAAK,OAAM,qBAEjE,MAAOF,IAEf,CCVA,SAASG,KACT,MAAMC,EAIK,MAHK,IAAIT,EAAe,CAC3BI,SAAS,IAEMM,aA8NhB,MAAMC,UAAgBrG,EAOzBiD,YAAYqD,EAAK5D,GACbW,QACAZ,EAAsBnC,KAAMoC,GAC5BpC,KAAKoC,KAAOA,EACZpC,KAAKiG,OAAS7D,EAAK6D,QAAU,MAC7BjG,KAAKgG,IAAMA,EACXhG,KAAKkG,OAAQ,IAAU9D,EAAK8D,MAC5BlG,KAAKxD,UAAO2J,IAAc/D,EAAK5F,KAAO4F,EAAK5F,KAAO,KAClDwD,KAAK/D,SAOTA,SACI,MAAMmG,EAAOZ,EAAKxB,KAAKoC,KAAM,QAAS,MAAO,MAAO,aAAc,OAAQ,KAAM,UAAW,qBAAsB,aACjHA,EAAKoD,UAAYxF,KAAKoC,KAAKgE,GAC3BhE,EAAKiE,UAAYrG,KAAKoC,KAAKkE,GAC3B,MAAMC,EAAOvG,KAAKuG,IAAM,IAAInB,EAAehD,GAC3C,IACImE,EAAIlD,KAAKrD,KAAKiG,OAAQjG,KAAKgG,IAAKhG,KAAKkG,OACrC,IACI,GAAIlG,KAAKoC,KAAKoE,aAAc,CACxBD,EAAIE,uBAAyBF,EAAIE,uBAAsB,GACvD,IAAK,IAAIxI,KAAK+B,KAAKoC,KAAKoE,aAChBxG,KAAKoC,KAAKoE,aAAa3E,eAAe5D,IACtCsI,EAAIG,iBAAiBzI,EAAG+B,KAAKoC,KAAKoE,aAAavI,KAK/D,MAAOwH,IACP,GAAI,SAAWzF,KAAKiG,OAChB,IACIM,EAAIG,iBAAiB,eAAgB,4BAEzC,MAAOjB,IAEX,IACIc,EAAIG,iBAAiB,SAAU,OAEnC,MAAOjB,IAEH,oBAAqBc,IACrBA,EAAII,gBAAkB3G,KAAKoC,KAAKuE,iBAEhC3G,KAAKoC,KAAKwE,iBACVL,EAAIM,QAAU7G,KAAKoC,KAAKwE,gBAE5BL,EAAIO,mBAAqB,KACjB,IAAMP,EAAIjD,aAEV,MAAQiD,EAAIQ,QAAU,OAASR,EAAIQ,OACnC/G,KAAKgH,SAKLhH,KAAKsC,cAAa,KACdtC,KAAKoD,QAA8B,iBAAfmD,EAAIQ,OAAsBR,EAAIQ,OAAS,EAAE,GAC9D,KAGXR,EAAI5C,KAAK3D,KAAKxD,MAElB,MAAOiJ,GAOH,YAHAzF,KAAKsC,cAAa,KACdtC,KAAKoD,QAAQqC,EAAE,GAChB,GAGiB,oBAAbwB,WACPjH,KAAKkH,MAAQnB,EAAQoB,gBACrBpB,EAAQqB,SAASpH,KAAKkH,OAASlH,MAQvCoD,QAAQiC,GACJrF,KAAKiB,aAAa,QAASoE,EAAKrF,KAAKuG,KACrCvG,KAAKqH,SAAQ,GAOjBA,QAAQC,GACJ,QAAI,IAAuBtH,KAAKuG,KAAO,OAASvG,KAAKuG,IAArD,CAIA,GADAvG,KAAKuG,IAAIO,mBAAqBlB,EAC1B0B,EACA,IACItH,KAAKuG,IAAIgB,QAEb,MAAO9B,IAEa,oBAAbwB,iBACAlB,EAAQqB,SAASpH,KAAKkH,OAEjClH,KAAKuG,IAAM,MAOfS,SACI,MAAMxK,EAAOwD,KAAKuG,IAAIiB,aACT,OAAThL,IACAwD,KAAKiB,aAAa,OAAQzE,GAC1BwD,KAAKiB,aAAa,WAClBjB,KAAKqH,WAQbE,QACIvH,KAAKqH,WAUb,GAPAtB,EAAQoB,cAAgB,EACxBpB,EAAQqB,SAAW,GAMK,oBAAbH,SAEP,GAA2B,mBAAhBQ,YAEPA,YAAY,WAAYC,QAEvB,GAAgC,mBAArB7H,iBAAiC,CAE7CA,iBADyB,eAAgBkC,EAAa,WAAa,SAChC2F,GAAe,GAG1D,SAASA,IACL,IAAK,IAAIzJ,KAAK8H,EAAQqB,SACdrB,EAAQqB,SAASvF,eAAe5D,IAChC8H,EAAQqB,SAASnJ,GAAGsJ,OAGhC,CC7YY,MAACI,EACqC,mBAAZC,SAAqD,mBAApBA,QAAQC,QAE/DnH,GAAOkH,QAAQC,UAAUC,KAAKpH,GAG/B,CAACA,EAAI4B,IAAiBA,EAAa5B,EAAI,GAGzCqH,EAAYhG,EAAWgG,WAAahG,EAAWiG,aCHtDC,EAAqC,oBAAdC,WACI,iBAAtBA,UAAUC,SACmB,gBAApCD,UAAUC,QAAQC,cCPV,MAACC,EAAa,CACtBC,UDOG,cAAiBtF,EAOpBL,YAAYP,GACRW,MAAMX,GACNpC,KAAK/C,gBAAkBmF,EAAKmG,YAE5BC,WACA,MAAO,YAEXjF,SACI,IAAKvD,KAAKyI,QAEN,OAEJ,MAAMzC,EAAMhG,KAAKgG,MACX0C,EAAY1I,KAAKoC,KAAKsG,UAEtBtG,EAAO6F,EACP,GACAzG,EAAKxB,KAAKoC,KAAM,QAAS,oBAAqB,MAAO,MAAO,aAAc,OAAQ,KAAM,UAAW,qBAAsB,eAAgB,kBAAmB,SAAU,aAAc,SAAU,uBAChMpC,KAAKoC,KAAKoE,eACVpE,EAAKuG,QAAU3I,KAAKoC,KAAKoE,cAE7B,IACIxG,KAAK4I,GACyBX,EAIpB,IAAIF,EAAU/B,EAAK0C,EAAWtG,GAH9BsG,EACI,IAAIX,EAAU/B,EAAK0C,GACnB,IAAIX,EAAU/B,GAGhC,MAAOX,GACH,OAAOrF,KAAKiB,aAAa,QAASoE,GAEtCrF,KAAK4I,GAAGtK,WAAa0B,KAAKmD,OAAO7E,YDrCR,cCsCzB0B,KAAK6I,oBAOTA,oBACI7I,KAAK4I,GAAGE,OAAS,KACT9I,KAAKoC,KAAK2G,WACV/I,KAAK4I,GAAGI,QAAQC,QAEpBjJ,KAAK8D,QAAQ,EAEjB9D,KAAK4I,GAAGM,QAAWC,GAAenJ,KAAK0D,QAAQ,CAC3Cb,YAAa,8BACbC,QAASqG,IAEbnJ,KAAK4I,GAAGQ,UAAaC,GAAOrJ,KAAK+D,OAAOsF,EAAG7M,MAC3CwD,KAAK4I,GAAGU,QAAW7D,GAAMzF,KAAKoD,QAAQ,kBAAmBqC,GAE7D5B,MAAMD,GACF5D,KAAKiD,UAAW,EAGhB,IAAK,IAAIhF,EAAI,EAAGA,EAAI2F,EAAQ1F,OAAQD,IAAK,CACrC,MAAM+F,EAASJ,EAAQ3F,GACjBsL,EAAatL,IAAM2F,EAAQ1F,OAAS,EAC1ClB,EAAagH,EAAQhE,KAAK/C,gBAAiBT,IAmBvC,IAGQwD,KAAK4I,GAAGjF,KAAKnH,GAMrB,MAAOiJ,IAEH8D,GAGA5B,GAAS,KACL3H,KAAKiD,UAAW,EAChBjD,KAAKiB,aAAa,QAAQ,GAC3BjB,KAAKsC,kBAKxBmB,eAC2B,IAAZzD,KAAK4I,KACZ5I,KAAK4I,GAAGpF,QACRxD,KAAK4I,GAAK,MAQlB5C,MACI,IAAI9C,EAAQlD,KAAKkD,OAAS,GAC1B,MAAMsG,EAASxJ,KAAKoC,KAAKqH,OAAS,MAAQ,KAC1C,IAAIC,EAAO,GAEP1J,KAAKoC,KAAKsH,OACR,QAAUF,GAAqC,MAA3BG,OAAO3J,KAAKoC,KAAKsH,OAClC,OAASF,GAAqC,KAA3BG,OAAO3J,KAAKoC,KAAKsH,SACzCA,EAAO,IAAM1J,KAAKoC,KAAKsH,MAGvB1J,KAAKoC,KAAKwH,oBACV1G,EAAMlD,KAAKoC,KAAKyH,gBAAkB/E,KAGjC9E,KAAK/C,iBACNiG,EAAM4G,IAAM,GAEhB,MAAMC,EAAetF,EAAOvB,GAE5B,OAAQsG,EACJ,QAF8C,IAArCxJ,KAAKoC,KAAK4H,SAASC,QAAQ,KAG5B,IAAMjK,KAAKoC,KAAK4H,SAAW,IAAMhK,KAAKoC,KAAK4H,UACnDN,EACA1J,KAAKoC,KAAK8H,MACTH,EAAa7L,OAAS,IAAM6L,EAAe,IAQpDtB,QACI,QAASV,IChKboC,QHWG,cAAsBnH,EAOzBL,YAAYP,GAGR,GAFAW,MAAMX,GACNpC,KAAKmK,SAAU,EACS,oBAAbC,SAA0B,CACjC,MAAMC,EAAQ,WAAaD,SAASE,SACpC,IAAIZ,EAAOU,SAASV,KAEfA,IACDA,EAAOW,EAAQ,MAAQ,MAE3BrK,KAAKoG,GACoB,oBAAbgE,UACJhI,EAAK4H,WAAaI,SAASJ,UAC3BN,IAAStH,EAAKsH,KACtB1J,KAAKsG,GAAKlE,EAAKqH,SAAWY,EAK9B,MAAM9B,EAAcnG,GAAQA,EAAKmG,YACjCvI,KAAK/C,eAAiB4I,IAAY0C,EAElCC,WACA,MAAO,UAQXjF,SACIvD,KAAKuK,OAQTpG,MAAMC,GACFpE,KAAKsD,WAAa,UAClB,MAAMa,EAAQ,KACVnE,KAAKsD,WAAa,SAClBc,GAAS,EAEb,GAAIpE,KAAKmK,UAAYnK,KAAKiD,SAAU,CAChC,IAAIuH,EAAQ,EACRxK,KAAKmK,UACLK,IACAxK,KAAKG,KAAK,gBAAgB,aACpBqK,GAASrG,QAGdnE,KAAKiD,WACNuH,IACAxK,KAAKG,KAAK,SAAS,aACbqK,GAASrG,aAKnBA,IAQRoG,OACIvK,KAAKmK,SAAU,EACfnK,KAAKyK,SACLzK,KAAKiB,aAAa,QAOtB8C,OAAOvH,GTpFW,EAACkO,EAAgBpM,KACnC,MAAMqM,EAAiBD,EAAe9M,MAAM2B,GACtCqE,EAAU,GAChB,IAAK,IAAI3F,EAAI,EAAGA,EAAI0M,EAAezM,OAAQD,IAAK,CAC5C,MAAM2M,EAAgBxM,EAAauM,EAAe1M,GAAIK,GAEtD,GADAsF,EAAQ1D,KAAK0K,GACc,UAAvBA,EAAcrO,KACd,MAGR,OAAOqH,CAAO,ESyFViH,CAAcrO,EAAMwD,KAAKmD,OAAO7E,YAAYlC,SAd1B4H,IAMd,GAJI,YAAchE,KAAKsD,YAA8B,SAAhBU,EAAOzH,MACxCyD,KAAK8D,SAGL,UAAYE,EAAOzH,KAEnB,OADAyD,KAAK0D,QAAQ,CAAEb,YAAa,oCACrB,EAGX7C,KAAKiE,SAASD,EAAO,IAKrB,WAAahE,KAAKsD,aAElBtD,KAAKmK,SAAU,EACfnK,KAAKiB,aAAa,gBACd,SAAWjB,KAAKsD,YAChBtD,KAAKuK,QAWjB9G,UACI,MAAMD,EAAQ,KACVxD,KAAK6D,MAAM,CAAC,CAAEtH,KAAM,UAAW,EAE/B,SAAWyD,KAAKsD,WAChBE,IAKAxD,KAAKG,KAAK,OAAQqD,GAS1BK,MAAMD,GACF5D,KAAKiD,UAAW,ETxJF,EAACW,EAAS1G,KAE5B,MAAMgB,EAAS0F,EAAQ1F,OACjByM,EAAiB,IAAI5J,MAAM7C,GACjC,IAAI4M,EAAQ,EACZlH,EAAQxH,SAAQ,CAAC4H,EAAQ/F,KAErBjB,EAAagH,GAAQ,GAAO3F,IACxBsM,EAAe1M,GAAKI,IACdyM,IAAU5M,GACZhB,EAASyN,EAAehF,KAAKpG,MAEnC,GACJ,ES4IEwL,CAAcnH,GAAUpH,IACpBwD,KAAKgL,QAAQxO,GAAM,KACfwD,KAAKiD,UAAW,EAChBjD,KAAKiB,aAAa,QAAQ,GAC5B,IAQV+E,MACI,IAAI9C,EAAQlD,KAAKkD,OAAS,GAC1B,MAAMsG,EAASxJ,KAAKoC,KAAKqH,OAAS,QAAU,OAC5C,IAAIC,EAAO,IAEP,IAAU1J,KAAKoC,KAAKwH,oBACpB1G,EAAMlD,KAAKoC,KAAKyH,gBAAkB/E,KAEjC9E,KAAK/C,gBAAmBiG,EAAM+H,MAC/B/H,EAAM4G,IAAM,GAGZ9J,KAAKoC,KAAKsH,OACR,UAAYF,GAAqC,MAA3BG,OAAO3J,KAAKoC,KAAKsH,OACpC,SAAWF,GAAqC,KAA3BG,OAAO3J,KAAKoC,KAAKsH,SAC3CA,EAAO,IAAM1J,KAAKoC,KAAKsH,MAE3B,MAAMK,EAAetF,EAAOvB,GAE5B,OAAQsG,EACJ,QAF8C,IAArCxJ,KAAKoC,KAAK4H,SAASC,QAAQ,KAG5B,IAAMjK,KAAKoC,KAAK4H,SAAW,IAAMhK,KAAKoC,KAAK4H,UACnDN,EACA1J,KAAKoC,KAAK8H,MACTH,EAAa7L,OAAS,IAAM6L,EAAe,IAQpDmB,QAAQ9I,EAAO,IAEX,OADApG,OAAOmP,OAAO/I,EAAM,CAAEgE,GAAIpG,KAAKoG,GAAIE,GAAItG,KAAKsG,IAAMtG,KAAKoC,MAChD,IAAI2D,EAAQ/F,KAAKgG,MAAO5D,GASnC4I,QAAQxO,EAAMuD,GACV,MAAMqL,EAAMpL,KAAKkL,QAAQ,CACrBjF,OAAQ,OACRzJ,KAAMA,IAEV4O,EAAIxL,GAAG,UAAWG,GAClBqL,EAAIxL,GAAG,SAAS,CAACyL,EAAWvI,KACxB9C,KAAKoD,QAAQ,iBAAkBiI,EAAWvI,EAAQ,IAQ1D2H,SACI,MAAMW,EAAMpL,KAAKkL,UACjBE,EAAIxL,GAAG,OAAQI,KAAK+D,OAAOxB,KAAKvC,OAChCoL,EAAIxL,GAAG,SAAS,CAACyL,EAAWvI,KACxB9C,KAAKoD,QAAQ,iBAAkBiI,EAAWvI,EAAQ,IAEtD9C,KAAKsL,QAAUF,KIrNjBG,EAAK,sPACLC,EAAQ,CACV,SAAU,WAAY,YAAa,WAAY,OAAQ,WAAY,OAAQ,OAAQ,WAAY,OAAQ,YAAa,OAAQ,QAAS,UAElI,SAASC,EAAMxG,GAClB,MAAMyG,EAAMzG,EAAK0G,EAAI1G,EAAIgF,QAAQ,KAAMxE,EAAIR,EAAIgF,QAAQ,MAC7C,GAAN0B,IAAiB,GAANlG,IACXR,EAAMA,EAAIvG,UAAU,EAAGiN,GAAK1G,EAAIvG,UAAUiN,EAAGlG,GAAGmG,QAAQ,KAAM,KAAO3G,EAAIvG,UAAU+G,EAAGR,EAAI/G,SAE9F,IAAI2N,EAAIN,EAAGO,KAAK7G,GAAO,IAAKe,EAAM,GAAI/H,EAAI,GAC1C,KAAOA,KACH+H,EAAIwF,EAAMvN,IAAM4N,EAAE5N,IAAM,GAU5B,OARU,GAAN0N,IAAiB,GAANlG,IACXO,EAAI+F,OAASL,EACb1F,EAAIgG,KAAOhG,EAAIgG,KAAKtN,UAAU,EAAGsH,EAAIgG,KAAK9N,OAAS,GAAG0N,QAAQ,KAAM,KACpE5F,EAAIiG,UAAYjG,EAAIiG,UAAUL,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAAIA,QAAQ,KAAM,KAC9E5F,EAAIkG,SAAU,GAElBlG,EAAImG,UAIR,SAAmB/O,EAAK8M,GACpB,MAAMkC,EAAO,WAAYC,EAAQnC,EAAK0B,QAAQQ,EAAM,KAAKxO,MAAM,KACvC,KAApBsM,EAAKlJ,MAAM,EAAG,IAA6B,IAAhBkJ,EAAKhM,QAChCmO,EAAMzL,OAAO,EAAG,GAEE,KAAlBsJ,EAAKlJ,OAAO,IACZqL,EAAMzL,OAAOyL,EAAMnO,OAAS,EAAG,GAEnC,OAAOmO,CACX,CAboBF,CAAUnG,EAAKA,EAAU,MACzCA,EAAIsG,SAaR,SAAkBtG,EAAK9C,GACnB,MAAM1G,EAAO,GAMb,OALA0G,EAAM0I,QAAQ,6BAA6B,SAAUW,EAAIC,EAAIC,GACrDD,IACAhQ,EAAKgQ,GAAMC,MAGZjQ,CACX,CArBmB8P,CAAStG,EAAKA,EAAW,OACjCA,CACX,CCnCO,MAAM0G,UAAehN,EAOxBiD,YAAYqD,EAAK5D,EAAO,IACpBW,QACA/C,KAAK2M,YAAc,GACf3G,GAAO,iBAAoBA,IAC3B5D,EAAO4D,EACPA,EAAM,MAENA,GACAA,EAAMyF,EAAMzF,GACZ5D,EAAK4H,SAAWhE,EAAIgG,KACpB5J,EAAKqH,OAA0B,UAAjBzD,EAAIsE,UAAyC,QAAjBtE,EAAIsE,SAC9ClI,EAAKsH,KAAO1D,EAAI0D,KACZ1D,EAAI9C,QACJd,EAAKc,MAAQ8C,EAAI9C,QAEhBd,EAAK4J,OACV5J,EAAK4H,SAAWyB,EAAMrJ,EAAK4J,MAAMA,MAErC7J,EAAsBnC,KAAMoC,GAC5BpC,KAAKyJ,OACD,MAAQrH,EAAKqH,OACPrH,EAAKqH,OACe,oBAAbW,UAA4B,WAAaA,SAASE,SAC/DlI,EAAK4H,WAAa5H,EAAKsH,OAEvBtH,EAAKsH,KAAO1J,KAAKyJ,OAAS,MAAQ,MAEtCzJ,KAAKgK,SACD5H,EAAK4H,WACoB,oBAAbI,SAA2BA,SAASJ,SAAW,aAC/DhK,KAAK0J,KACDtH,EAAKsH,OACoB,oBAAbU,UAA4BA,SAASV,KACvCU,SAASV,KACT1J,KAAKyJ,OACD,MACA,MAClBzJ,KAAKqI,WAAajG,EAAKiG,YAAc,CAAC,UAAW,aACjDrI,KAAK2M,YAAc,GACnB3M,KAAK4M,cAAgB,EACrB5M,KAAKoC,KAAOpG,OAAOmP,OAAO,CACtBjB,KAAM,aACN2C,OAAO,EACPlG,iBAAiB,EACjBmG,SAAS,EACTjD,eAAgB,IAChBkD,iBAAiB,EACjBC,kBAAkB,EAClBC,oBAAoB,EACpBC,kBAAmB,CACfC,UAAW,MAEfC,iBAAkB,GAClBC,qBAAqB,GACtBjL,GACHpC,KAAKoC,KAAK8H,KACNlK,KAAKoC,KAAK8H,KAAK0B,QAAQ,MAAO,KACzB5L,KAAKoC,KAAK4K,iBAAmB,IAAM,IACb,iBAApBhN,KAAKoC,KAAKc,QACjBlD,KAAKoC,KAAKc,MR/Cf,SAAgBoK,GACnB,IAAIC,EAAM,GACNC,EAAQF,EAAG1P,MAAM,KACrB,IAAK,IAAIK,EAAI,EAAGwP,EAAID,EAAMtP,OAAQD,EAAIwP,EAAGxP,IAAK,CAC1C,IAAIyP,EAAOF,EAAMvP,GAAGL,MAAM,KAC1B2P,EAAII,mBAAmBD,EAAK,KAAOC,mBAAmBD,EAAK,IAE/D,OAAOH,CACX,CQuC8BjO,CAAOU,KAAKoC,KAAKc,QAGvClD,KAAK4N,GAAK,KACV5N,KAAK6N,SAAW,KAChB7N,KAAK8N,aAAe,KACpB9N,KAAK+N,YAAc,KAEnB/N,KAAKgO,iBAAmB,KACQ,mBAArBnO,mBACHG,KAAKoC,KAAKiL,sBAIVrN,KAAKiO,0BAA4B,KACzBjO,KAAKkO,YAELlO,KAAKkO,UAAU1N,qBACfR,KAAKkO,UAAU1K,UAGvB3D,iBAAiB,eAAgBG,KAAKiO,2BAA2B,IAE/C,cAAlBjO,KAAKgK,WACLhK,KAAKmO,qBAAuB,KACxBnO,KAAK0D,QAAQ,kBAAmB,CAC5Bb,YAAa,2BACf,EAENhD,iBAAiB,UAAWG,KAAKmO,sBAAsB,KAG/DnO,KAAKqD,OAST+K,gBAAgB5F,GACZ,MAAMtF,EAAQlH,OAAOmP,OAAO,GAAInL,KAAKoC,KAAKc,OAE1CA,EAAMmL,IdtFU,EcwFhBnL,EAAMgL,UAAY1F,EAEdxI,KAAK4N,KACL1K,EAAM+H,IAAMjL,KAAK4N,IACrB,MAAMxL,EAAOpG,OAAOmP,OAAO,GAAInL,KAAKoC,KAAKgL,iBAAiB5E,GAAOxI,KAAKoC,KAAM,CACxEc,QACAC,OAAQnD,KACRgK,SAAUhK,KAAKgK,SACfP,OAAQzJ,KAAKyJ,OACbC,KAAM1J,KAAK0J,OAEf,OAAO,IAAIrB,EAAWG,GAAMpG,GAOhCiB,OACI,IAAI6K,EACJ,GAAIlO,KAAKoC,KAAK2K,iBACVL,EAAO4B,wBACmC,IAA1CtO,KAAKqI,WAAW4B,QAAQ,aACxBiE,EAAY,gBAEX,IAAI,IAAMlO,KAAKqI,WAAWnK,OAK3B,YAHA8B,KAAKsC,cAAa,KACdtC,KAAKiB,aAAa,QAAS,0BAA0B,GACtD,GAIHiN,EAAYlO,KAAKqI,WAAW,GAEhCrI,KAAKsD,WAAa,UAElB,IACI4K,EAAYlO,KAAKoO,gBAAgBF,GAErC,MAAOzI,GAGH,OAFAzF,KAAKqI,WAAWkG,aAChBvO,KAAKqD,OAGT6K,EAAU7K,OACVrD,KAAKwO,aAAaN,GAOtBM,aAAaN,GACLlO,KAAKkO,WACLlO,KAAKkO,UAAU1N,qBAGnBR,KAAKkO,UAAYA,EAEjBA,EACKtO,GAAG,QAASI,KAAKyO,QAAQlM,KAAKvC,OAC9BJ,GAAG,SAAUI,KAAKiE,SAAS1B,KAAKvC,OAChCJ,GAAG,QAASI,KAAKoD,QAAQb,KAAKvC,OAC9BJ,GAAG,SAAUgD,GAAW5C,KAAK0D,QAAQ,kBAAmBd,KAQjE8L,MAAMlG,GACF,IAAI0F,EAAYlO,KAAKoO,gBAAgB5F,GACjCmG,GAAS,EACbjC,EAAO4B,uBAAwB,EAC/B,MAAMM,EAAkB,KAChBD,IAEJT,EAAUvK,KAAK,CAAC,CAAEpH,KAAM,OAAQC,KAAM,WACtC0R,EAAU/N,KAAK,UAAW0O,IACtB,IAAIF,EAEJ,GAAI,SAAWE,EAAItS,MAAQ,UAAYsS,EAAIrS,KAAM,CAG7C,GAFAwD,KAAK8O,WAAY,EACjB9O,KAAKiB,aAAa,YAAaiN,IAC1BA,EACD,OACJxB,EAAO4B,sBAAwB,cAAgBJ,EAAU1F,KACzDxI,KAAKkO,UAAU/J,OAAM,KACbwK,GAEA,WAAa3O,KAAKsD,aAEtB+D,IACArH,KAAKwO,aAAaN,GAClBA,EAAUvK,KAAK,CAAC,CAAEpH,KAAM,aACxByD,KAAKiB,aAAa,UAAWiN,GAC7BA,EAAY,KACZlO,KAAK8O,WAAY,EACjB9O,KAAK+O,QAAO,QAGf,CACD,MAAM1J,EAAM,IAAI3C,MAAM,eAEtB2C,EAAI6I,UAAYA,EAAU1F,KAC1BxI,KAAKiB,aAAa,eAAgBoE,OAExC,EAEN,SAAS2J,IACDL,IAGJA,GAAS,EACTtH,IACA6G,EAAU1K,QACV0K,EAAY,MAGhB,MAAM5E,EAAWjE,IACb,MAAM4J,EAAQ,IAAIvM,MAAM,gBAAkB2C,GAE1C4J,EAAMf,UAAYA,EAAU1F,KAC5BwG,IACAhP,KAAKiB,aAAa,eAAgBgO,EAAM,EAE5C,SAASC,IACL5F,EAAQ,oBAGZ,SAASJ,IACLI,EAAQ,iBAGZ,SAAS6F,EAAUC,GACXlB,GAAakB,EAAG5G,OAAS0F,EAAU1F,MACnCwG,IAIR,MAAM3H,EAAU,KACZ6G,EAAU3N,eAAe,OAAQqO,GACjCV,EAAU3N,eAAe,QAAS+I,GAClC4E,EAAU3N,eAAe,QAAS2O,GAClClP,KAAKI,IAAI,QAAS8I,GAClBlJ,KAAKI,IAAI,YAAa+O,EAAU,EAEpCjB,EAAU/N,KAAK,OAAQyO,GACvBV,EAAU/N,KAAK,QAASmJ,GACxB4E,EAAU/N,KAAK,QAAS+O,GACxBlP,KAAKG,KAAK,QAAS+I,GACnBlJ,KAAKG,KAAK,YAAagP,GACvBjB,EAAU7K,OAOdS,SAOI,GANA9D,KAAKsD,WAAa,OAClBoJ,EAAO4B,sBAAwB,cAAgBtO,KAAKkO,UAAU1F,KAC9DxI,KAAKiB,aAAa,QAClBjB,KAAK+O,QAGD,SAAW/O,KAAKsD,YAActD,KAAKoC,KAAK0K,QAAS,CACjD,IAAI7O,EAAI,EACR,MAAMwP,EAAIzN,KAAK6N,SAAS3P,OACxB,KAAOD,EAAIwP,EAAGxP,IACV+B,KAAK0O,MAAM1O,KAAK6N,SAAS5P,KASrCgG,SAASD,GACL,GAAI,YAAchE,KAAKsD,YACnB,SAAWtD,KAAKsD,YAChB,YAActD,KAAKsD,WAInB,OAHAtD,KAAKiB,aAAa,SAAU+C,GAE5BhE,KAAKiB,aAAa,aACV+C,EAAOzH,MACX,IAAK,OACDyD,KAAKqP,YAAYC,KAAK7D,MAAMzH,EAAOxH,OACnC,MACJ,IAAK,OACDwD,KAAKuP,mBACLvP,KAAKwP,WAAW,QAChBxP,KAAKiB,aAAa,QAClBjB,KAAKiB,aAAa,QAClB,MACJ,IAAK,QACD,MAAMoE,EAAM,IAAI3C,MAAM,gBAEtB2C,EAAIoK,KAAOzL,EAAOxH,KAClBwD,KAAKoD,QAAQiC,GACb,MACJ,IAAK,UACDrF,KAAKiB,aAAa,OAAQ+C,EAAOxH,MACjCwD,KAAKiB,aAAa,UAAW+C,EAAOxH,OAapD6S,YAAY7S,GACRwD,KAAKiB,aAAa,YAAazE,GAC/BwD,KAAK4N,GAAKpR,EAAKyO,IACfjL,KAAKkO,UAAUhL,MAAM+H,IAAMzO,EAAKyO,IAChCjL,KAAK6N,SAAW7N,KAAK0P,eAAelT,EAAKqR,UACzC7N,KAAK8N,aAAetR,EAAKsR,aACzB9N,KAAK+N,YAAcvR,EAAKuR,YACxB/N,KAAK2P,WAAanT,EAAKmT,WACvB3P,KAAK8D,SAED,WAAa9D,KAAKsD,YAEtBtD,KAAKuP,mBAOTA,mBACIvP,KAAKwC,eAAexC,KAAKgO,kBACzBhO,KAAKgO,iBAAmBhO,KAAKsC,cAAa,KACtCtC,KAAK0D,QAAQ,eAAe,GAC7B1D,KAAK8N,aAAe9N,KAAK+N,aACxB/N,KAAKoC,KAAK2G,WACV/I,KAAKgO,iBAAiB/E,QAQ9BwF,UACIzO,KAAK2M,YAAY/L,OAAO,EAAGZ,KAAK4M,eAIhC5M,KAAK4M,cAAgB,EACjB,IAAM5M,KAAK2M,YAAYzO,OACvB8B,KAAKiB,aAAa,SAGlBjB,KAAK+O,QAQbA,QACI,GAAI,WAAa/O,KAAKsD,YAClBtD,KAAKkO,UAAUjL,WACdjD,KAAK8O,WACN9O,KAAK2M,YAAYzO,OAAQ,CACzB,MAAM0F,EAAU5D,KAAK4P,qBACrB5P,KAAKkO,UAAUvK,KAAKC,GAGpB5D,KAAK4M,cAAgBhJ,EAAQ1F,OAC7B8B,KAAKiB,aAAa,UAS1B2O,qBAII,KAH+B5P,KAAK2P,YACR,YAAxB3P,KAAKkO,UAAU1F,MACfxI,KAAK2M,YAAYzO,OAAS,GAE1B,OAAO8B,KAAK2M,YAEhB,IAAIkD,EAAc,EAClB,IAAK,IAAI5R,EAAI,EAAGA,EAAI+B,KAAK2M,YAAYzO,OAAQD,IAAK,CAC9C,MAAMzB,EAAOwD,KAAK2M,YAAY1O,GAAGzB,KAIjC,GAHIA,IACAqT,GXxYO,iBADIzS,EWyYeZ,GXlY1C,SAAoByI,GAChB,IAAI6K,EAAI,EAAG5R,EAAS,EACpB,IAAK,IAAID,EAAI,EAAGwP,EAAIxI,EAAI/G,OAAQD,EAAIwP,EAAGxP,IACnC6R,EAAI7K,EAAI9G,WAAWF,GACf6R,EAAI,IACJ5R,GAAU,EAEL4R,EAAI,KACT5R,GAAU,EAEL4R,EAAI,OAAUA,GAAK,MACxB5R,GAAU,GAGVD,IACAC,GAAU,GAGlB,OAAOA,CACX,CAxBe6R,CAAW3S,GAGfwH,KAAKoL,KAPQ,MAOF5S,EAAI6S,YAAc7S,EAAI8S,QWsY5BjS,EAAI,GAAK4R,EAAc7P,KAAK2P,WAC5B,OAAO3P,KAAK2M,YAAY3L,MAAM,EAAG/C,GAErC4R,GAAe,EX9YpB,IAAoBzS,EWgZnB,OAAO4C,KAAK2M,YAUhB9I,MAAMgL,EAAKsB,EAASpQ,GAEhB,OADAC,KAAKwP,WAAW,UAAWX,EAAKsB,EAASpQ,GAClCC,KAEX2D,KAAKkL,EAAKsB,EAASpQ,GAEf,OADAC,KAAKwP,WAAW,UAAWX,EAAKsB,EAASpQ,GAClCC,KAWXwP,WAAWjT,EAAMC,EAAM2T,EAASpQ,GAS5B,GARI,mBAAsBvD,IACtBuD,EAAKvD,EACLA,OAAO2J,GAEP,mBAAsBgK,IACtBpQ,EAAKoQ,EACLA,EAAU,MAEV,YAAcnQ,KAAKsD,YAAc,WAAatD,KAAKsD,WACnD,QAEJ6M,EAAUA,GAAW,IACbC,UAAW,IAAUD,EAAQC,SACrC,MAAMpM,EAAS,CACXzH,KAAMA,EACNC,KAAMA,EACN2T,QAASA,GAEbnQ,KAAKiB,aAAa,eAAgB+C,GAClChE,KAAK2M,YAAYzM,KAAK8D,GAClBjE,GACAC,KAAKG,KAAK,QAASJ,GACvBC,KAAK+O,QAKTvL,QACI,MAAMA,EAAQ,KACVxD,KAAK0D,QAAQ,gBACb1D,KAAKkO,UAAU1K,OAAO,EAEpB6M,EAAkB,KACpBrQ,KAAKI,IAAI,UAAWiQ,GACpBrQ,KAAKI,IAAI,eAAgBiQ,GACzB7M,GAAO,EAEL8M,EAAiB,KAEnBtQ,KAAKG,KAAK,UAAWkQ,GACrBrQ,KAAKG,KAAK,eAAgBkQ,EAAgB,EAqB9C,MAnBI,YAAcrQ,KAAKsD,YAAc,SAAWtD,KAAKsD,aACjDtD,KAAKsD,WAAa,UACdtD,KAAK2M,YAAYzO,OACjB8B,KAAKG,KAAK,SAAS,KACXH,KAAK8O,UACLwB,IAGA9M,OAIHxD,KAAK8O,UACVwB,IAGA9M,KAGDxD,KAOXoD,QAAQiC,GACJqH,EAAO4B,uBAAwB,EAC/BtO,KAAKiB,aAAa,QAASoE,GAC3BrF,KAAK0D,QAAQ,kBAAmB2B,GAOpC3B,QAAQd,EAAQC,GACR,YAAc7C,KAAKsD,YACnB,SAAWtD,KAAKsD,YAChB,YAActD,KAAKsD,aAEnBtD,KAAKwC,eAAexC,KAAKgO,kBAEzBhO,KAAKkO,UAAU1N,mBAAmB,SAElCR,KAAKkO,UAAU1K,QAEfxD,KAAKkO,UAAU1N,qBACoB,mBAAxBC,sBACPA,oBAAoB,eAAgBT,KAAKiO,2BAA2B,GACpExN,oBAAoB,UAAWT,KAAKmO,sBAAsB,IAG9DnO,KAAKsD,WAAa,SAElBtD,KAAK4N,GAAK,KAEV5N,KAAKiB,aAAa,QAAS2B,EAAQC,GAGnC7C,KAAK2M,YAAc,GACnB3M,KAAK4M,cAAgB,GAS7B8C,eAAe7B,GACX,MAAM0C,EAAmB,GACzB,IAAItS,EAAI,EACR,MAAMuS,EAAI3C,EAAS3P,OACnB,KAAOD,EAAIuS,EAAGvS,KACL+B,KAAKqI,WAAW4B,QAAQ4D,EAAS5P,KAClCsS,EAAiBrQ,KAAK2N,EAAS5P,IAEvC,OAAOsS,GAGf7D,EAAOpC,SdliBiB,Ee5BZ,MAACA,EAAWoC,EAAOpC"} \ No newline at end of file +{"version":3,"file":"engine.io.esm.min.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/index.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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport { Socket };\nexport const protocol = Socket.protocol;\nexport { Transport } from \"./transport.js\";\nexport { transports } from \"./transports/index.js\";\nexport { installTimerFunctions } from \"./util.js\";\nexport { parse } from \"./contrib/parseuri.js\";\nexport { nextTick } from \"./transports/websocket-constructor.js\";\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","obj","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","TransportError","Error","constructor","reason","description","context","super","Transport","writable","query","socket","onError","open","readyState","doOpen","close","doClose","onClose","send","packets","write","onOpen","onData","packet","onPacket","details","pause","onPause","alphabet","map","prev","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Request","uri","method","async","undefined","xd","xscheme","xs","xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","transports","websocket","forceBase64","name","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","schema","secure","port","Number","timestampRequests","timestampParam","b64","encodedQuery","hostname","indexOf","path","polling","location","isSSL","protocol","poll","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","count","encodePayload","doWrite","sid","request","assign","req","xhrStatus","pollXhr","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","qs","qry","pairs","l","pair","decodeURIComponent","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","createTransport","EIO","priorWebsocketSuccess","shift","setTransport","onDrain","probe","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file diff --git a/dist/engine.io.js b/dist/engine.io.js index 2a88cb832..b46878191 100644 --- a/dist/engine.io.js +++ b/dist/engine.io.js @@ -1,5 +1,5 @@ /*! - * Engine.IO v6.3.0 + * Engine.IO v6.3.1 * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ @@ -12,52 +12,64 @@ function _typeof(obj) { "@babel/helpers - typeof"; - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _typeof(obj); + if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { + _typeof = function (obj) { + return typeof obj; + }; + } else { + _typeof = function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }; + } + + return _typeof(obj); } + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + Object.defineProperty(target, descriptor.key, descriptor); } } + function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); return Constructor; } + function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { + _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; + for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } + return target; }; + return _extends.apply(this, arguments); } + function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } + subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, @@ -65,38 +77,41 @@ configurable: true } }); - Object.defineProperty(subClass, "prototype", { - writable: false - }); if (superClass) _setPrototypeOf(subClass, superClass); } + function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } + function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; + return _setPrototypeOf(o, p); } + function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; + try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } + function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { - _construct = Reflect.construct.bind(); + _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; @@ -107,25 +122,34 @@ return instance; }; } + return _construct.apply(null, arguments); } + function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; } + function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; + _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; + if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } + if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); + _cache.set(Class, Wrapper); } + function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } + Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, @@ -136,75 +160,77 @@ }); return _setPrototypeOf(Wrapper, Class); }; + return _wrapNativeSuper(Class); } + function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } + return self; } + function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; - } else if (call !== void 0) { - throw new TypeError("Derived constructors may only return object or undefined"); } + return _assertThisInitialized(self); } + function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); + return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), - result; + result; + if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; + result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } + return _possibleConstructorReturn(this, result); }; } + function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } + return object; } - function _get() { + + function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { - _get = Reflect.get.bind(); + _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); + if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); + if (desc.get) { - return desc.get.call(arguments.length < 3 ? target : receiver); + return desc.get.call(receiver); } + return desc.value; }; } - return _get.apply(this, arguments); - } - function _toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) return input; - var prim = input[Symbol.toPrimitive]; - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - return (hint === "string" ? String : Number)(input); - } - function _toPropertyKey(arg) { - var key = _toPrimitive(arg, "string"); - return typeof key === "symbol" ? key : String(key); + + return _get(target, property, receiver || target); } var PACKET_TYPES = Object.create(null); // no Map = no polyfill + PACKET_TYPES["open"] = "0"; PACKET_TYPES["close"] = "1"; PACKET_TYPES["ping"] = "2"; @@ -222,14 +248,16 @@ }; var withNativeBlob = typeof Blob === "function" || typeof Blob !== "undefined" && Object.prototype.toString.call(Blob) === "[object BlobConstructor]"; - var withNativeArrayBuffer$1 = typeof ArrayBuffer === "function"; - // ArrayBuffer.isView method is not defined in IE10 + var withNativeArrayBuffer$1 = typeof ArrayBuffer === "function"; // ArrayBuffer.isView method is not defined in IE10 + var isView = function isView(obj) { return typeof ArrayBuffer.isView === "function" ? ArrayBuffer.isView(obj) : obj && obj.buffer instanceof ArrayBuffer; }; + var encodePacket = function encodePacket(_ref, supportsBinary, callback) { var type = _ref.type, - data = _ref.data; + data = _ref.data; + if (withNativeBlob && data instanceof Blob) { if (supportsBinary) { return callback(data); @@ -242,16 +270,20 @@ } else { return encodeBlobAsBase64(new Blob([data]), callback); } - } - // plain string + } // plain string + + return callback(PACKET_TYPES[type] + (data || "")); }; + var encodeBlobAsBase64 = function encodeBlobAsBase64(data, callback) { var fileReader = new FileReader(); + fileReader.onload = function () { var content = fileReader.result.split(",")[1]; callback("b" + content); }; + return fileReader.readAsDataURL(data); }; @@ -260,29 +292,35 @@ * Copyright (c) 2022 Niklas von Hertzen * Released under MIT License */ - var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - // Use a lookup table to find the index. + var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; // Use a lookup table to find the index. + var lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (var i$1 = 0; i$1 < chars.length; i$1++) { lookup[chars.charCodeAt(i$1)] = i$1; } + var decode$1 = function decode(base64) { var bufferLength = base64.length * 0.75, - len = base64.length, - i, - p = 0, - encoded1, - encoded2, - encoded3, - encoded4; + len = base64.length, + i, + p = 0, + encoded1, + encoded2, + encoded3, + encoded4; + if (base64[base64.length - 1] === '=') { bufferLength--; + if (base64[base64.length - 2] === '=') { bufferLength--; } } + var arraybuffer = new ArrayBuffer(bufferLength), - bytes = new Uint8Array(arraybuffer); + bytes = new Uint8Array(arraybuffer); + for (i = 0; i < len; i += 4) { encoded1 = lookup[base64.charCodeAt(i)]; encoded2 = lookup[base64.charCodeAt(i + 1)]; @@ -292,10 +330,12 @@ bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; } + return arraybuffer; }; var withNativeArrayBuffer = typeof ArrayBuffer === "function"; + var decodePacket = function decodePacket(encodedPacket, binaryType) { if (typeof encodedPacket !== "string") { return { @@ -303,17 +343,22 @@ data: mapBinary(encodedPacket, binaryType) }; } + var type = encodedPacket.charAt(0); + if (type === "b") { return { type: "message", data: decodeBase64Packet(encodedPacket.substring(1), binaryType) }; } + var packetType = PACKET_TYPES_REVERSE[type]; + if (!packetType) { return ERROR_PACKET; } + return encodedPacket.length > 1 ? { type: PACKET_TYPES_REVERSE[type], data: encodedPacket.substring(1) @@ -321,6 +366,7 @@ type: PACKET_TYPES_REVERSE[type] }; }; + var decodeBase64Packet = function decodeBase64Packet(data, binaryType) { if (withNativeArrayBuffer) { var decoded = decode$1(data); @@ -337,6 +383,7 @@ switch (binaryType) { case "blob": return data instanceof ArrayBuffer ? new Blob([data]) : data; + case "arraybuffer": default: return data; @@ -345,6 +392,7 @@ }; var SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text + var encodePayload = function encodePayload(packets, callback) { // some packets may be added to the array while encoding, so the initial length must be saved var length = packets.length; @@ -354,24 +402,30 @@ // force base64 encoding for binary packets encodePacket(packet, false, function (encodedPacket) { encodedPackets[i] = encodedPacket; + if (++count === length) { callback(encodedPackets.join(SEPARATOR)); } }); }); }; + var decodePayload = function decodePayload(encodedPayload, binaryType) { var encodedPackets = encodedPayload.split(SEPARATOR); var packets = []; + for (var i = 0; i < encodedPackets.length; i++) { var decodedPacket = decodePacket(encodedPackets[i], binaryType); packets.push(decodedPacket); + if (decodedPacket.type === "error") { break; } } + return packets; }; + var protocol = 4; /** @@ -379,11 +433,9 @@ * * @api public */ - function Emitter(obj) { if (obj) return mixin(obj); } - /** * Mixin the emitter properties. * @@ -396,9 +448,9 @@ for (var key in Emitter.prototype) { obj[key] = Emitter.prototype[key]; } + return obj; } - /** * Listen on the given `event` with `fn`. * @@ -408,12 +460,12 @@ * @api public */ + Emitter.prototype.on = Emitter.prototype.addEventListener = function (event, fn) { this._callbacks = this._callbacks || {}; (this._callbacks['$' + event] = this._callbacks['$' + event] || []).push(fn); return this; }; - /** * Adds an `event` listener that will be invoked a single * time then automatically removed. @@ -424,16 +476,17 @@ * @api public */ + Emitter.prototype.once = function (event, fn) { function on() { this.off(event, on); fn.apply(this, arguments); } + on.fn = fn; this.on(event, on); return this; }; - /** * Remove the given callback for `event` or all * registered callbacks. @@ -444,43 +497,44 @@ * @api public */ + Emitter.prototype.off = Emitter.prototype.removeListener = Emitter.prototype.removeAllListeners = Emitter.prototype.removeEventListener = function (event, fn) { - this._callbacks = this._callbacks || {}; + this._callbacks = this._callbacks || {}; // all - // all if (0 == arguments.length) { this._callbacks = {}; return this; - } + } // specific event + - // specific event var callbacks = this._callbacks['$' + event]; - if (!callbacks) return this; + if (!callbacks) return this; // remove all handlers - // remove all handlers if (1 == arguments.length) { delete this._callbacks['$' + event]; return this; - } + } // remove specific handler + - // remove specific handler var cb; + for (var i = 0; i < callbacks.length; i++) { cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { callbacks.splice(i, 1); break; } - } - - // Remove event specific arrays for event types that no + } // Remove event specific arrays for event types that no // one is subscribed for to avoid memory leak. + + if (callbacks.length === 0) { delete this._callbacks['$' + event]; } + return this; }; - /** * Emit `event` with the given args. * @@ -489,25 +543,29 @@ * @return {Emitter} */ + Emitter.prototype.emit = function (event) { this._callbacks = this._callbacks || {}; var args = new Array(arguments.length - 1), - callbacks = this._callbacks['$' + event]; + callbacks = this._callbacks['$' + event]; + for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } + if (callbacks) { callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { callbacks[i].apply(this, args); } } + return this; - }; + }; // alias used for reserved events (protected method) - // alias used for reserved events (protected method) - Emitter.prototype.emitReserved = Emitter.prototype.emit; + Emitter.prototype.emitReserved = Emitter.prototype.emit; /** * Return array of callbacks for `event`. * @@ -520,7 +578,6 @@ this._callbacks = this._callbacks || {}; return this._callbacks['$' + event] || []; }; - /** * Check if this emitter has `event` handlers. * @@ -529,6 +586,7 @@ * @api public */ + Emitter.prototype.hasListeners = function (event) { return !!this.listeners(event).length; }; @@ -547,14 +605,16 @@ for (var _len = arguments.length, attr = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { attr[_key - 1] = arguments[_key]; } + return attr.reduce(function (acc, k) { if (obj.hasOwnProperty(k)) { acc[k] = obj[k]; } + return acc; }, {}); - } - // Keep a reference to the real timeout functions so they can be used when overridden + } // Keep a reference to the real timeout functions so they can be used when overridden + var NATIVE_SET_TIMEOUT = globalThisShim.setTimeout; var NATIVE_CLEAR_TIMEOUT = globalThisShim.clearTimeout; function installTimerFunctions(obj, opts) { @@ -565,22 +625,26 @@ obj.setTimeoutFn = globalThisShim.setTimeout.bind(globalThisShim); obj.clearTimeoutFn = globalThisShim.clearTimeout.bind(globalThisShim); } - } - // base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64) - var BASE64_OVERHEAD = 1.33; - // we could also have used `new Blob([obj]).size`, but it isn't supported in IE9 + } // base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64) + + var BASE64_OVERHEAD = 1.33; // we could also have used `new Blob([obj]).size`, but it isn't supported in IE9 + function byteLength(obj) { if (typeof obj === "string") { return utf8Length(obj); - } - // arraybuffer or blob + } // arraybuffer or blob + + return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD); } + function utf8Length(str) { var c = 0, - length = 0; + length = 0; + for (var i = 0, l = str.length; i < l; i++) { c = str.charCodeAt(i); + if (c < 0x80) { length += 1; } else if (c < 0x800) { @@ -592,26 +656,35 @@ length += 4; } } + return length; } var TransportError = /*#__PURE__*/function (_Error) { _inherits(TransportError, _Error); + var _super = _createSuper(TransportError); + function TransportError(reason, description, context) { var _this; + _classCallCheck(this, TransportError); + _this = _super.call(this, reason); _this.description = description; _this.context = context; _this.type = "TransportError"; return _this; } - return _createClass(TransportError); + + return TransportError; }( /*#__PURE__*/_wrapNativeSuper(Error)); + var Transport = /*#__PURE__*/function (_Emitter) { _inherits(Transport, _Emitter); + var _super2 = _createSuper(Transport); + /** * Transport abstract constructor. * @@ -620,7 +693,9 @@ */ function Transport(opts) { var _this2; + _classCallCheck(this, Transport); + _this2 = _super2.call(this); _this2.writable = false; installTimerFunctions(_assertThisInitialized(_this2), opts); @@ -638,15 +713,19 @@ * @return {Transport} for chaining * @protected */ + + _createClass(Transport, [{ key: "onError", value: function onError(reason, description, context) { _get(_getPrototypeOf(Transport.prototype), "emitReserved", this).call(this, "error", new TransportError(reason, description, context)); + return this; } /** * Opens the transport. */ + }, { key: "open", value: function open() { @@ -657,6 +736,7 @@ /** * Closes the transport. */ + }, { key: "close", value: function close() { @@ -664,6 +744,7 @@ this.doClose(); this.onClose(); } + return this; } /** @@ -671,6 +752,7 @@ * * @param {Array} packets */ + }, { key: "send", value: function send(packets) { @@ -683,11 +765,13 @@ * * @protected */ + }, { key: "onOpen", value: function onOpen() { this.readyState = "open"; this.writable = true; + _get(_getPrototypeOf(Transport.prototype), "emitReserved", this).call(this, "open"); } /** @@ -696,6 +780,7 @@ * @param {String} data * @protected */ + }, { key: "onData", value: function onData(data) { @@ -707,6 +792,7 @@ * * @protected */ + }, { key: "onPacket", value: function onPacket(packet) { @@ -717,10 +803,12 @@ * * @protected */ + }, { key: "onClose", value: function onClose(details) { this.readyState = "closed"; + _get(_getPrototypeOf(Transport.prototype), "emitReserved", this).call(this, "close", details); } /** @@ -728,21 +816,23 @@ * * @param onPause */ + }, { key: "pause", value: function pause(onPause) {} }]); + return Transport; }(Emitter); // imported from https://github.com/unshiftio/yeast var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), - length = 64, - map = {}; + length = 64, + map = {}; var seed = 0, - i = 0, - prev; + i = 0, + prev; /** * Return a string representing the specified number. * @@ -750,12 +840,15 @@ * @returns {String} The string representation of the number. * @api public */ + function encode$1(num) { var encoded = ''; + do { encoded = alphabet[num % length] + encoded; num = Math.floor(num / length); } while (num > 0); + return encoded; } /** @@ -764,19 +857,21 @@ * @returns {String} A unique id. * @api public */ + function yeast() { var now = encode$1(+new Date()); if (now !== prev) return seed = 0, prev = now; return now + '.' + encode$1(seed++); - } - // + } // // Map each character to its index. // + for (; i < length; i++) { map[alphabet[i]] = i; } // imported from https://github.com/galkn/querystring + /** * Compiles a querystring * Returns string representation of the object @@ -786,12 +881,14 @@ */ function encode(obj) { var str = ''; + for (var i in obj) { if (obj.hasOwnProperty(i)) { if (str.length) str += '&'; str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]); } } + return str; } /** @@ -800,35 +897,40 @@ * @param {String} qs * @api private */ + function decode(qs) { var qry = {}; var pairs = qs.split('&'); + for (var i = 0, l = pairs.length; i < l; i++) { var pair = pairs[i].split('='); qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); } + return qry; } // imported from https://github.com/component/has-cors var value = false; + try { value = typeof XMLHttpRequest !== 'undefined' && 'withCredentials' in new XMLHttpRequest(); - } catch (err) { - // if XMLHttp support is disabled in IE then it will throw + } catch (err) {// if XMLHttp support is disabled in IE then it will throw // when trying to create } + var hasCORS = value; // browser shim for xmlhttprequest module function XHR(opts) { - var xdomain = opts.xdomain; - // XMLHttpRequest can be disabled on IE + var xdomain = opts.xdomain; // XMLHttpRequest can be disabled on IE + try { if ("undefined" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) { return new XMLHttpRequest(); } } catch (e) {} + if (!xdomain) { try { return new globalThisShim[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP"); @@ -837,15 +939,19 @@ } function empty() {} + var hasXHR2 = function () { var xhr = new XHR({ xdomain: false }); return null != xhr.responseType; }(); + var Polling = /*#__PURE__*/function (_Transport) { _inherits(Polling, _Transport); + var _super = _createSuper(Polling); + /** * XHR Polling constructor. * @@ -854,39 +960,42 @@ */ function Polling(opts) { var _this; + _classCallCheck(this, Polling); + _this = _super.call(this, opts); _this.polling = false; + if (typeof location !== "undefined") { var isSSL = "https:" === location.protocol; - var port = location.port; - // some user agents have empty `location.port` + var port = location.port; // some user agents have empty `location.port` + if (!port) { port = isSSL ? "443" : "80"; } + _this.xd = typeof location !== "undefined" && opts.hostname !== location.hostname || port !== opts.port; _this.xs = opts.secure !== isSSL; } /** * XHR supports binary */ + + var forceBase64 = opts && opts.forceBase64; _this.supportsBinary = hasXHR2 && !forceBase64; return _this; } + _createClass(Polling, [{ - key: "name", - get: function get() { - return "polling"; - } + key: "doOpen", + /** * Opens the socket (triggers polling). We write a PING message to determine * when the transport is open. * * @protected */ - }, { - key: "doOpen", value: function doOpen() { this.poll(); } @@ -896,23 +1005,29 @@ * @param {Function} onPause - callback upon buffers are flushed and transport is paused * @package */ + }, { key: "pause", value: function pause(onPause) { var _this2 = this; + this.readyState = "pausing"; + var pause = function pause() { _this2.readyState = "paused"; onPause(); }; + if (this.polling || !this.writable) { var total = 0; + if (this.polling) { total++; this.once("pollComplete", function () { --total || pause(); }); } + if (!this.writable) { total++; this.once("drain", function () { @@ -928,6 +1043,7 @@ * * @private */ + }, { key: "poll", value: function poll() { @@ -940,32 +1056,39 @@ * * @protected */ + }, { key: "onData", value: function onData(data) { var _this3 = this; + var callback = function callback(packet) { // if its the first message we consider the transport open if ("opening" === _this3.readyState && packet.type === "open") { _this3.onOpen(); - } - // if its a close packet, we close the ongoing requests + } // if its a close packet, we close the ongoing requests + + if ("close" === packet.type) { _this3.onClose({ description: "transport closed by the server" }); + return false; - } - // otherwise bypass onData and handle the message + } // otherwise bypass onData and handle the message + + _this3.onPacket(packet); - }; - // decode payload - decodePayload(data, this.socket.binaryType).forEach(callback); - // if an event did not trigger closing + }; // decode payload + + + decodePayload(data, this.socket.binaryType).forEach(callback); // if an event did not trigger closing + if ("closed" !== this.readyState) { // if we got data we're not polling this.polling = false; this.emitReserved("pollComplete"); + if ("open" === this.readyState) { this.poll(); } @@ -976,15 +1099,18 @@ * * @protected */ + }, { key: "doClose", value: function doClose() { var _this4 = this; + var close = function close() { _this4.write([{ type: "close" }]); }; + if ("open" === this.readyState) { close(); } else { @@ -999,14 +1125,17 @@ * @param {Array} packets - data packets * @protected */ + }, { key: "write", value: function write(packets) { var _this5 = this; + this.writable = false; encodePayload(packets, function (data) { _this5.doWrite(data, function () { _this5.writable = true; + _this5.emitReserved("drain"); }); }); @@ -1016,23 +1145,27 @@ * * @private */ + }, { key: "uri", value: function uri() { var query = this.query || {}; var schema = this.opts.secure ? "https" : "http"; - var port = ""; - // cache busting is forced + var port = ""; // cache busting is forced + if (false !== this.opts.timestampRequests) { query[this.opts.timestampParam] = yeast(); } + if (!this.supportsBinary && !query.sid) { query.b64 = 1; - } - // avoid port if default for schema + } // avoid port if default for schema + + if (this.opts.port && ("https" === schema && Number(this.opts.port) !== 443 || "http" === schema && Number(this.opts.port) !== 80)) { port = ":" + this.opts.port; } + var encodedQuery = encode(query); var ipv6 = this.opts.hostname.indexOf(":") !== -1; return schema + "://" + (ipv6 ? "[" + this.opts.hostname + "]" : this.opts.hostname) + port + this.opts.path + (encodedQuery.length ? "?" + encodedQuery : ""); @@ -1043,14 +1176,17 @@ * @param {String} method * @private */ + }, { key: "request", value: function request() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + _extends(opts, { xd: this.xd, xs: this.xs }, this.opts); + return new Request(this.uri(), opts); } /** @@ -1060,10 +1196,12 @@ * @param {Function} called upon flush. * @private */ + }, { key: "doWrite", value: function doWrite(data, fn) { var _this6 = this; + var req = this.request({ method: "POST", data: data @@ -1078,10 +1216,12 @@ * * @private */ + }, { key: "doPoll", value: function doPoll() { var _this7 = this; + var req = this.request(); req.on("data", this.onData.bind(this)); req.on("error", function (xhrStatus, context) { @@ -1089,12 +1229,20 @@ }); this.pollXhr = req; } + }, { + key: "name", + get: function get() { + return "polling"; + } }]); + return Polling; }(Transport); var Request = /*#__PURE__*/function (_Emitter) { _inherits(Request, _Emitter); + var _super2 = _createSuper(Request); + /** * Request constructor * @@ -1103,7 +1251,9 @@ */ function Request(uri, opts) { var _this8; + _classCallCheck(this, Request); + _this8 = _super2.call(this); installTimerFunctions(_assertThisInitialized(_this8), opts); _this8.opts = opts; @@ -1111,7 +1261,9 @@ _this8.uri = uri; _this8.async = false !== opts.async; _this8.data = undefined !== opts.data ? opts.data : null; + _this8.create(); + return _this8; } /** @@ -1119,19 +1271,25 @@ * * @private */ + + _createClass(Request, [{ key: "create", value: function create() { var _this9 = this; + var opts = pick(this.opts, "agent", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "autoUnref"); opts.xdomain = !!this.opts.xd; opts.xscheme = !!this.opts.xs; var xhr = this.xhr = new XHR(opts); + try { xhr.open(this.method, this.uri, this.async); + try { if (this.opts.extraHeaders) { xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true); + for (var i in this.opts.extraHeaders) { if (this.opts.extraHeaders.hasOwnProperty(i)) { xhr.setRequestHeader(i, this.opts.extraHeaders[i]); @@ -1139,23 +1297,29 @@ } } } catch (e) {} + if ("POST" === this.method) { try { xhr.setRequestHeader("Content-type", "text/plain;charset=UTF-8"); } catch (e) {} } + try { xhr.setRequestHeader("Accept", "*/*"); - } catch (e) {} - // ie6 check + } catch (e) {} // ie6 check + + if ("withCredentials" in xhr) { xhr.withCredentials = this.opts.withCredentials; } + if (this.opts.requestTimeout) { xhr.timeout = this.opts.requestTimeout; } + xhr.onreadystatechange = function () { if (4 !== xhr.readyState) return; + if (200 === xhr.status || 1223 === xhr.status) { _this9.onLoad(); } else { @@ -1166,6 +1330,7 @@ }, 0); } }; + xhr.send(this.data); } catch (e) { // Need to defer since .create() is called directly from the constructor @@ -1176,6 +1341,7 @@ }, 0); return; } + if (typeof document !== "undefined") { this.index = Request.requestsCount++; Request.requests[this.index] = this; @@ -1186,6 +1352,7 @@ * * @private */ + }, { key: "onError", value: function onError(err) { @@ -1197,21 +1364,26 @@ * * @private */ + }, { key: "cleanup", value: function cleanup(fromError) { if ("undefined" === typeof this.xhr || null === this.xhr) { return; } + this.xhr.onreadystatechange = empty; + if (fromError) { try { this.xhr.abort(); } catch (e) {} } + if (typeof document !== "undefined") { delete Request.requests[this.index]; } + this.xhr = null; } /** @@ -1219,10 +1391,12 @@ * * @private */ + }, { key: "onLoad", value: function onLoad() { var data = this.xhr.responseText; + if (data !== null) { this.emitReserved("data", data); this.emitReserved("success"); @@ -1234,12 +1408,14 @@ * * @package */ + }, { key: "abort", value: function abort() { this.cleanup(); } }]); + return Request; }(Emitter); Request.requestsCount = 0; @@ -1249,6 +1425,7 @@ * memory leaks (e.g. when using IE) and to ensure that no spurious error is * emitted. */ + if (typeof document !== "undefined") { // @ts-ignore if (typeof attachEvent === "function") { @@ -1259,6 +1436,7 @@ addEventListener(terminationEvent, unloadHandler, false); } } + function unloadHandler() { for (var i in Request.requests) { if (Request.requests.hasOwnProperty(i)) { @@ -1269,6 +1447,7 @@ var nextTick = function () { var isPromiseAvailable = typeof Promise === "function" && typeof Promise.resolve === "function"; + if (isPromiseAvailable) { return function (cb) { return Promise.resolve().then(cb); @@ -1283,11 +1462,12 @@ var usingBrowserWebSocket = true; var defaultBinaryType = "arraybuffer"; - // detect ReactNative environment var isReactNative = typeof navigator !== "undefined" && typeof navigator.product === "string" && navigator.product.toLowerCase() === "reactnative"; var WS = /*#__PURE__*/function (_Transport) { _inherits(WS, _Transport); + var _super = _createSuper(WS); + /** * WebSocket transport constructor. * @@ -1296,35 +1476,37 @@ */ function WS(opts) { var _this; + _classCallCheck(this, WS); + _this = _super.call(this, opts); _this.supportsBinary = !opts.forceBase64; return _this; } + _createClass(WS, [{ - key: "name", - get: function get() { - return "websocket"; - } - }, { key: "doOpen", value: function doOpen() { if (!this.check()) { // let probe timeout return; } + var uri = this.uri(); - var protocols = this.opts.protocols; - // React Native only supports the 'headers' option, and will print a warning if anything else is passed + var protocols = this.opts.protocols; // React Native only supports the 'headers' option, and will print a warning if anything else is passed + var opts = isReactNative ? {} : pick(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity"); + if (this.opts.extraHeaders) { opts.headers = this.opts.extraHeaders; } + try { this.ws = usingBrowserWebSocket && !isReactNative ? protocols ? new WebSocket(uri, protocols) : new WebSocket(uri) : new WebSocket(uri, protocols, opts); } catch (err) { return this.emitReserved("error", err); } + this.ws.binaryType = this.socket.binaryType || defaultBinaryType; this.addEventListeners(); } @@ -1333,25 +1515,31 @@ * * @private */ + }, { key: "addEventListeners", value: function addEventListeners() { var _this2 = this; + this.ws.onopen = function () { if (_this2.opts.autoUnref) { _this2.ws._socket.unref(); } + _this2.onOpen(); }; + this.ws.onclose = function (closeEvent) { return _this2.onClose({ description: "websocket connection closed", context: closeEvent }); }; + this.ws.onmessage = function (ev) { return _this2.onData(ev.data); }; + this.ws.onerror = function (e) { return _this2.onError("websocket error", e); }; @@ -1360,34 +1548,39 @@ key: "write", value: function write(packets) { var _this3 = this; - this.writable = false; - // encodePacket efficient as it uses WS framing + + this.writable = false; // encodePacket efficient as it uses WS framing // no need for encodePayload + var _loop = function _loop(i) { var packet = packets[i]; var lastPacket = i === packets.length - 1; encodePacket(packet, _this3.supportsBinary, function (data) { // always create a new object (GH-437) var opts = {}; - // Sometimes the websocket has already been closed but the browser didn't // have a chance of informing us about it yet, in that case send will // throw an error + + try { if (usingBrowserWebSocket) { // TypeError is thrown when passing the second argument on Safari _this3.ws.send(data); } } catch (e) {} + if (lastPacket) { // fake drain // defer to next tick to allow Socket to clear writeBuffer nextTick(function () { _this3.writable = true; + _this3.emitReserved("drain"); }, _this3.setTimeoutFn); } }); }; + for (var i = 0; i < packets.length; i++) { _loop(i); } @@ -1405,24 +1598,28 @@ * * @private */ + }, { key: "uri", value: function uri() { var query = this.query || {}; var schema = this.opts.secure ? "wss" : "ws"; - var port = ""; - // avoid port if default for schema + var port = ""; // avoid port if default for schema + if (this.opts.port && ("wss" === schema && Number(this.opts.port) !== 443 || "ws" === schema && Number(this.opts.port) !== 80)) { port = ":" + this.opts.port; - } - // append timestamp to URI + } // append timestamp to URI + + if (this.opts.timestampRequests) { query[this.opts.timestampParam] = yeast(); - } - // communicate binary support capabilities + } // communicate binary support capabilities + + if (!this.supportsBinary) { query.b64 = 1; } + var encodedQuery = encode(query); var ipv6 = this.opts.hostname.indexOf(":") !== -1; return schema + "://" + (ipv6 ? "[" + this.opts.hostname + "]" : this.opts.hostname) + port + this.opts.path + (encodedQuery.length ? "?" + encodedQuery : ""); @@ -1433,12 +1630,19 @@ * @return {Boolean} whether this transport is available. * @private */ + }, { key: "check", value: function check() { return !!WebSocket; } + }, { + key: "name", + get: function get() { + return "websocket"; + } }]); + return WS; }(Transport); @@ -1448,6 +1652,7 @@ }; // imported from https://github.com/galkn/parseuri + /** * Parses a URI * @@ -1470,38 +1675,48 @@ var parts = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor']; function parse(str) { var src = str, - b = str.indexOf('['), - e = str.indexOf(']'); + b = str.indexOf('['), + e = str.indexOf(']'); + if (b != -1 && e != -1) { str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length); } + var m = re.exec(str || ''), - uri = {}, - i = 14; + uri = {}, + i = 14; + while (i--) { uri[parts[i]] = m[i] || ''; } + if (b != -1 && e != -1) { uri.source = src; uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':'); uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':'); uri.ipv6uri = true; } + uri.pathNames = pathNames(uri, uri['path']); uri.queryKey = queryKey(uri, uri['query']); return uri; } + function pathNames(obj, path) { var regx = /\/{2,9}/g, - names = path.replace(regx, "/").split("/"); + names = path.replace(regx, "/").split("/"); + if (path.slice(0, 1) == '/' || path.length === 0) { names.splice(0, 1); } + if (path.slice(-1) == '/') { names.splice(names.length - 1, 1); } + return names; } + function queryKey(uri, query) { var data = {}; query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) { @@ -1514,7 +1729,9 @@ var Socket = /*#__PURE__*/function (_Emitter) { _inherits(Socket, _Emitter); + var _super = _createSuper(Socket); + /** * Socket constructor. * @@ -1523,14 +1740,19 @@ */ function Socket(uri) { var _this; + var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + _classCallCheck(this, Socket); + _this = _super.call(this); _this.writeBuffer = []; + if (uri && "object" === _typeof(uri)) { opts = uri; uri = null; } + if (uri) { uri = parse(uri); opts.hostname = uri.host; @@ -1540,12 +1762,15 @@ } else if (opts.host) { opts.hostname = parse(opts.host).host; } + installTimerFunctions(_assertThisInitialized(_this), opts); _this.secure = null != opts.secure ? opts.secure : typeof location !== "undefined" && "https:" === location.protocol; + if (opts.hostname && !opts.port) { // if no port is specified manually, use the protocol default opts.port = _this.secure ? "443" : "80"; } + _this.hostname = opts.hostname || (typeof location !== "undefined" ? location.hostname : "localhost"); _this.port = opts.port || (typeof location !== "undefined" && location.port ? location.port : _this.secure ? "443" : "80"); _this.transports = opts.transports || ["polling", "websocket"]; @@ -1567,16 +1792,19 @@ closeOnBeforeunload: true }, opts); _this.opts.path = _this.opts.path.replace(/\/$/, "") + (_this.opts.addTrailingSlash ? "/" : ""); + if (typeof _this.opts.query === "string") { _this.opts.query = decode(_this.opts.query); - } - // set on handshake + } // set on handshake + + _this.id = null; _this.upgrades = null; _this.pingInterval = null; - _this.pingTimeout = null; - // set on heartbeat + _this.pingTimeout = null; // set on heartbeat + _this.pingTimeoutTimer = null; + if (typeof addEventListener === "function") { if (_this.opts.closeOnBeforeunload) { // Firefox closes the connection when the "beforeunload" event is emitted but not Chrome. This event listener @@ -1586,21 +1814,27 @@ if (_this.transport) { // silently close the transport _this.transport.removeAllListeners(); + _this.transport.close(); } }; + addEventListener("beforeunload", _this.beforeunloadEventListener, false); } + if (_this.hostname !== "localhost") { _this.offlineEventListener = function () { _this.onClose("transport close", { description: "network connection lost" }); }; + addEventListener("offline", _this.offlineEventListener, false); } } + _this.open(); + return _this; } /** @@ -1610,16 +1844,20 @@ * @return {Transport} * @private */ + + _createClass(Socket, [{ key: "createTransport", value: function createTransport(name) { - var query = _extends({}, this.opts.query); - // append engine.io protocol identifier - query.EIO = protocol; - // transport name - query.transport = name; - // session id if we already have one + var query = _extends({}, this.opts.query); // append engine.io protocol identifier + + + query.EIO = protocol; // transport name + + query.transport = name; // session id if we already have one + if (this.id) query.sid = this.id; + var opts = _extends({}, this.opts.transportOptions[name], this.opts, { query: query, socket: this, @@ -1627,6 +1865,7 @@ secure: this.secure, port: this.port }); + return new transports[name](opts); } /** @@ -1634,11 +1873,14 @@ * * @private */ + }, { key: "open", value: function open() { var _this2 = this; + var transport; + if (this.opts.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf("websocket") !== -1) { transport = "websocket"; } else if (0 === this.transports.length) { @@ -1650,8 +1892,9 @@ } else { transport = this.transports[0]; } - this.readyState = "opening"; - // Retry with the next transport if the transport is disabled (jsonp: false) + + this.readyState = "opening"; // Retry with the next transport if the transport is disabled (jsonp: false) + try { transport = this.createTransport(transport); } catch (e) { @@ -1659,6 +1902,7 @@ this.open(); return; } + transport.open(); this.setTransport(transport); } @@ -1667,16 +1911,19 @@ * * @private */ + }, { key: "setTransport", value: function setTransport(transport) { var _this3 = this; + if (this.transport) { this.transport.removeAllListeners(); - } - // set up transport - this.transport = transport; - // set up transport listeners + } // set up transport + + + this.transport = transport; // set up transport listeners + transport.on("drain", this.onDrain.bind(this)).on("packet", this.onPacket.bind(this)).on("error", this.onError.bind(this)).on("close", function (reason) { return _this3.onClose("transport close", reason); }); @@ -1687,13 +1934,16 @@ * @param {String} name - transport name * @private */ + }, { key: "probe", value: function probe(name) { var _this4 = this; + var transport = this.createTransport(name); var failed = false; Socket.priorWebsocketSuccess = false; + var onTransportOpen = function onTransportOpen() { if (failed) return; transport.send([{ @@ -1702,69 +1952,89 @@ }]); transport.once("packet", function (msg) { if (failed) return; + if ("pong" === msg.type && "probe" === msg.data) { _this4.upgrading = true; + _this4.emitReserved("upgrading", transport); + if (!transport) return; Socket.priorWebsocketSuccess = "websocket" === transport.name; + _this4.transport.pause(function () { if (failed) return; if ("closed" === _this4.readyState) return; cleanup(); + _this4.setTransport(transport); + transport.send([{ type: "upgrade" }]); + _this4.emitReserved("upgrade", transport); + transport = null; _this4.upgrading = false; + _this4.flush(); }); } else { - var err = new Error("probe error"); - // @ts-ignore + var err = new Error("probe error"); // @ts-ignore + err.transport = transport.name; + _this4.emitReserved("upgradeError", err); } }); }; + function freezeTransport() { - if (failed) return; - // Any callback called by transport should be ignored since now + if (failed) return; // Any callback called by transport should be ignored since now + failed = true; cleanup(); transport.close(); transport = null; - } - // Handle any error that happens while probing + } // Handle any error that happens while probing + + var onerror = function onerror(err) { - var error = new Error("probe error: " + err); - // @ts-ignore + var error = new Error("probe error: " + err); // @ts-ignore + error.transport = transport.name; freezeTransport(); + _this4.emitReserved("upgradeError", error); }; + function onTransportClose() { onerror("transport closed"); - } - // When the socket is closed while we're probing + } // When the socket is closed while we're probing + + function onclose() { onerror("socket closed"); - } - // When the socket is upgraded while we're probing + } // When the socket is upgraded while we're probing + + function onupgrade(to) { if (transport && to.name !== transport.name) { freezeTransport(); } - } - // Remove all listeners on the transport and on self + } // Remove all listeners on the transport and on self + + var cleanup = function cleanup() { transport.removeListener("open", onTransportOpen); transport.removeListener("error", onerror); transport.removeListener("close", onTransportClose); + _this4.off("close", onclose); + _this4.off("upgrading", onupgrade); }; + transport.once("open", onTransportOpen); transport.once("error", onerror); transport.once("close", onTransportClose); @@ -1777,18 +2047,20 @@ * * @private */ + }, { key: "onOpen", value: function onOpen() { this.readyState = "open"; Socket.priorWebsocketSuccess = "websocket" === this.transport.name; this.emitReserved("open"); - this.flush(); - // we check for `readyState` in case an `open` + this.flush(); // we check for `readyState` in case an `open` // listener already closed the socket + if ("open" === this.readyState && this.opts.upgrade) { var i = 0; var l = this.upgrades.length; + for (; i < l; i++) { this.probe(this.upgrades[i]); } @@ -1799,29 +2071,34 @@ * * @private */ + }, { key: "onPacket", value: function onPacket(packet) { if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { - this.emitReserved("packet", packet); - // Socket is live - any packet counts + this.emitReserved("packet", packet); // Socket is live - any packet counts + this.emitReserved("heartbeat"); + switch (packet.type) { case "open": this.onHandshake(JSON.parse(packet.data)); break; + case "ping": this.resetPingTimeout(); this.sendPacket("pong"); this.emitReserved("ping"); this.emitReserved("pong"); break; + case "error": - var err = new Error("server error"); - // @ts-ignore + var err = new Error("server error"); // @ts-ignore + err.code = packet.data; this.onError(err); break; + case "message": this.emitReserved("data", packet.data); this.emitReserved("message", packet.data); @@ -1835,6 +2112,7 @@ * @param {Object} data - handshake obj * @private */ + }, { key: "onHandshake", value: function onHandshake(data) { @@ -1845,8 +2123,8 @@ this.pingInterval = data.pingInterval; this.pingTimeout = data.pingTimeout; this.maxPayload = data.maxPayload; - this.onOpen(); - // In case open handler closes socket + this.onOpen(); // In case open handler closes socket + if ("closed" === this.readyState) return; this.resetPingTimeout(); } @@ -1855,14 +2133,17 @@ * * @private */ + }, { key: "resetPingTimeout", value: function resetPingTimeout() { var _this5 = this; + this.clearTimeoutFn(this.pingTimeoutTimer); this.pingTimeoutTimer = this.setTimeoutFn(function () { _this5.onClose("ping timeout"); }, this.pingInterval + this.pingTimeout); + if (this.opts.autoUnref) { this.pingTimeoutTimer.unref(); } @@ -1872,14 +2153,16 @@ * * @private */ + }, { key: "onDrain", value: function onDrain() { - this.writeBuffer.splice(0, this.prevBufferLen); - // setting prevBufferLen = 0 is very important + this.writeBuffer.splice(0, this.prevBufferLen); // setting prevBufferLen = 0 is very important // for example, when upgrading, upgrade packet is sent over, // and a nonzero prevBufferLen could cause problems on `drain` + this.prevBufferLen = 0; + if (0 === this.writeBuffer.length) { this.emitReserved("drain"); } else { @@ -1891,14 +2174,15 @@ * * @private */ + }, { key: "flush", value: function flush() { if ("closed" !== this.readyState && this.transport.writable && !this.upgrading && this.writeBuffer.length) { var packets = this.getWritablePackets(); - this.transport.send(packets); - // keep track of current length of writeBuffer + this.transport.send(packets); // keep track of current length of writeBuffer // splice writeBuffer and callbackBuffer on `drain` + this.prevBufferLen = packets.length; this.emitReserved("flush"); } @@ -1909,22 +2193,29 @@ * * @private */ + }, { key: "getWritablePackets", value: function getWritablePackets() { var shouldCheckPayloadSize = this.maxPayload && this.transport.name === "polling" && this.writeBuffer.length > 1; + if (!shouldCheckPayloadSize) { return this.writeBuffer; } + var payloadSize = 1; // first packet type + for (var i = 0; i < this.writeBuffer.length; i++) { var data = this.writeBuffer[i].data; + if (data) { payloadSize += byteLength(data); } + if (i > 0 && payloadSize > this.maxPayload) { return this.writeBuffer.slice(0, i); } + payloadSize += 2; // separator + packet type } @@ -1938,6 +2229,7 @@ * @param {Function} callback function. * @return {Socket} for chaining. */ + }, { key: "write", value: function write(msg, options, fn) { @@ -1959,6 +2251,7 @@ * @param {Function} fn - callback function. * @private */ + }, { key: "sendPacket", value: function sendPacket(type, data, options, fn) { @@ -1966,13 +2259,16 @@ fn = data; data = undefined; } + if ("function" === typeof options) { fn = options; options = null; } + if ("closing" === this.readyState || "closed" === this.readyState) { return; } + options = options || {}; options.compress = false !== options.compress; var packet = { @@ -1988,26 +2284,36 @@ /** * Closes the connection. */ + }, { key: "close", value: function close() { var _this6 = this; + var close = function close() { _this6.onClose("forced close"); + _this6.transport.close(); }; + var cleanupAndClose = function cleanupAndClose() { _this6.off("upgrade", cleanupAndClose); + _this6.off("upgradeError", cleanupAndClose); + close(); }; + var waitForUpgrade = function waitForUpgrade() { // wait for upgrade to finish since we can't send packets while pausing a transport _this6.once("upgrade", cleanupAndClose); + _this6.once("upgradeError", cleanupAndClose); }; + if ("opening" === this.readyState || "open" === this.readyState) { this.readyState = "closing"; + if (this.writeBuffer.length) { this.once("drain", function () { if (_this6.upgrading) { @@ -2022,6 +2328,7 @@ close(); } } + return this; } /** @@ -2029,6 +2336,7 @@ * * @private */ + }, { key: "onError", value: function onError(err) { @@ -2041,30 +2349,33 @@ * * @private */ + }, { key: "onClose", value: function onClose(reason, description) { if ("opening" === this.readyState || "open" === this.readyState || "closing" === this.readyState) { // clear timers - this.clearTimeoutFn(this.pingTimeoutTimer); - // stop event from firing again for transport - this.transport.removeAllListeners("close"); - // ensure transport won't stay open - this.transport.close(); - // ignore further transport communication + this.clearTimeoutFn(this.pingTimeoutTimer); // stop event from firing again for transport + + this.transport.removeAllListeners("close"); // ensure transport won't stay open + + this.transport.close(); // ignore further transport communication + this.transport.removeAllListeners(); + if (typeof removeEventListener === "function") { removeEventListener("beforeunload", this.beforeunloadEventListener, false); removeEventListener("offline", this.offlineEventListener, false); - } - // set ready state - this.readyState = "closed"; - // clear session id - this.id = null; - // emit close event - this.emitReserved("close", reason, description); - // clean buffers after, so users can still + } // set ready state + + + this.readyState = "closed"; // clear session id + + this.id = null; // emit close event + + this.emitReserved("close", reason, description); // clean buffers after, so users can still // grab the buffers on `close` event + this.writeBuffer = []; this.prevBufferLen = 0; } @@ -2075,18 +2386,22 @@ * @param {Array} upgrades - server upgrades * @private */ + }, { key: "filterUpgrades", value: function filterUpgrades(upgrades) { var filteredUpgrades = []; var i = 0; var j = upgrades.length; + for (; i < j; i++) { if (~this.transports.indexOf(upgrades[i])) filteredUpgrades.push(upgrades[i]); } + return filteredUpgrades; } }]); + return Socket; }(Emitter); Socket.protocol = protocol; diff --git a/dist/engine.io.js.map b/dist/engine.io.js.map index 98cea7f96..d68214cff 100644 --- a/dist/engine.io.js.map +++ b/dist/engine.io.js.map @@ -1 +1 @@ -{"version":3,"file":"engine.io.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/browser-entrypoint.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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","isView","obj","buffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decode","base64","bufferLength","len","p","encoded1","encoded2","encoded3","encoded4","arraybuffer","bytes","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","packetType","decoded","SEPARATOR","String","fromCharCode","encodePayload","packets","encodedPackets","Array","count","packet","join","decodePayload","encodedPayload","decodedPacket","push","protocol","Emitter","mixin","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","emit","args","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","BASE64_OVERHEAD","byteLength","utf8Length","Math","ceil","size","str","c","l","TransportError","reason","description","context","Error","Transport","writable","query","socket","readyState","doOpen","doClose","onClose","write","onPacket","details","onPause","alphabet","map","seed","prev","encode","num","encoded","floor","yeast","now","Date","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","empty","hasXHR2","xhr","responseType","Polling","polling","location","isSSL","port","xd","hostname","xs","secure","forceBase64","poll","pause","total","doPoll","onOpen","close","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","ipv6","indexOf","path","Request","uri","req","request","method","xhrStatus","onError","onData","pollXhr","async","undefined","xscheme","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","terminationEvent","nextTick","isPromiseAvailable","Promise","resolve","then","WebSocket","MozWebSocket","usingBrowserWebSocket","defaultBinaryType","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","queryKey","regx","names","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","shouldCheckPayloadSize","payloadSize","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA,IAAMA,YAAY,GAAGC,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC,CAAC;EACzCF,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG;EAC1BA,YAAY,CAAC,OAAO,CAAC,GAAG,GAAG;EAC3BA,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG;EAC1BA,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG;EAC1BA,YAAY,CAAC,SAAS,CAAC,GAAG,GAAG;EAC7BA,YAAY,CAAC,SAAS,CAAC,GAAG,GAAG;EAC7BA,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG;EAC1B,IAAMG,oBAAoB,GAAGF,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC;EAChDD,MAAM,CAACG,IAAI,CAACJ,YAAY,CAAC,CAACK,OAAO,CAAC,UAAAC,GAAG,EAAI;IACrCH,oBAAoB,CAACH,YAAY,CAACM,GAAG,CAAC,CAAC,GAAGA,GAAG;EACjD,CAAC,CAAC;EACF,IAAMC,YAAY,GAAG;IAAEC,IAAI,EAAE,OAAO;IAAEC,IAAI,EAAE;EAAe,CAAC;;ECX5D,IAAMC,cAAc,GAAG,OAAOC,IAAI,KAAK,UAAU,IAC5C,OAAOA,IAAI,KAAK,WAAW,IACxBV,MAAM,CAACW,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACH,IAAI,CAAC,KAAK,0BAA2B;EAC5E,IAAMI,uBAAqB,GAAG,OAAOC,WAAW,KAAK,UAAU;EAC/D;EACA,IAAMC,MAAM,GAAG,SAATA,MAAM,CAAGC,GAAG,EAAI;IAClB,OAAO,OAAOF,WAAW,CAACC,MAAM,KAAK,UAAU,GACzCD,WAAW,CAACC,MAAM,CAACC,GAAG,CAAC,GACvBA,GAAG,IAAIA,GAAG,CAACC,MAAM,YAAYH,WAAW;EAClD,CAAC;EACD,IAAMI,YAAY,GAAG,SAAfA,YAAY,OAAoBC,cAAc,EAAEC,QAAQ,EAAK;IAAA,IAA3Cd,IAAI,QAAJA,IAAI;MAAEC,IAAI,QAAJA,IAAI;IAC9B,IAAIC,cAAc,IAAID,IAAI,YAAYE,IAAI,EAAE;MACxC,IAAIU,cAAc,EAAE;QAChB,OAAOC,QAAQ,CAACb,IAAI,CAAC;OACxB,MACI;QACD,OAAOc,kBAAkB,CAACd,IAAI,EAAEa,QAAQ,CAAC;;KAEhD,MACI,IAAIP,uBAAqB,KACzBN,IAAI,YAAYO,WAAW,IAAIC,MAAM,CAACR,IAAI,CAAC,CAAC,EAAE;MAC/C,IAAIY,cAAc,EAAE;QAChB,OAAOC,QAAQ,CAACb,IAAI,CAAC;OACxB,MACI;QACD,OAAOc,kBAAkB,CAAC,IAAIZ,IAAI,CAAC,CAACF,IAAI,CAAC,CAAC,EAAEa,QAAQ,CAAC;;;;IAI7D,OAAOA,QAAQ,CAACtB,YAAY,CAACQ,IAAI,CAAC,IAAIC,IAAI,IAAI,EAAE,CAAC,CAAC;EACtD,CAAC;EACD,IAAMc,kBAAkB,GAAG,SAArBA,kBAAkB,CAAId,IAAI,EAAEa,QAAQ,EAAK;IAC3C,IAAME,UAAU,GAAG,IAAIC,UAAU,EAAE;IACnCD,UAAU,CAACE,MAAM,GAAG,YAAY;MAC5B,IAAMC,OAAO,GAAGH,UAAU,CAACI,MAAM,CAACC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAC/CP,QAAQ,CAAC,GAAG,GAAGK,OAAO,CAAC;KAC1B;IACD,OAAOH,UAAU,CAACM,aAAa,CAACrB,IAAI,CAAC;EACzC,CAAC;;;;;;;ECvCD,IAAMsB,KAAK,GAAG,kEAAkE;EAEhF;EACA,IAAMC,MAAM,GAAG,OAAOC,UAAU,KAAK,WAAW,GAAG,EAAE,GAAG,IAAIA,UAAU,CAAC,GAAG,CAAC;EAC3E,KAAK,IAAIC,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGH,KAAK,CAACI,MAAM,EAAED,GAAC,EAAE,EAAE;IACnCF,MAAM,CAACD,KAAK,CAACK,UAAU,CAACF,GAAC,CAAC,CAAC,GAAGA,GAAC;;MAyBtBG,QAAM,GAAG,SAATA,MAAM,CAAIC,MAAc;IACjC,IAAIC,YAAY,GAAGD,MAAM,CAACH,MAAM,GAAG,IAAI;MACnCK,GAAG,GAAGF,MAAM,CAACH,MAAM;MACnBD,CAAC;MACDO,CAAC,GAAG,CAAC;MACLC,QAAQ;MACRC,QAAQ;MACRC,QAAQ;MACRC,QAAQ;IAEZ,IAAIP,MAAM,CAACA,MAAM,CAACH,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;MACnCI,YAAY,EAAE;MACd,IAAID,MAAM,CAACA,MAAM,CAACH,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;QACnCI,YAAY,EAAE;;;IAItB,IAAMO,WAAW,GAAG,IAAI9B,WAAW,CAACuB,YAAY,CAAC;MAC7CQ,KAAK,GAAG,IAAId,UAAU,CAACa,WAAW,CAAC;IAEvC,KAAKZ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGM,GAAG,EAAEN,CAAC,IAAI,CAAC,EAAE;MACzBQ,QAAQ,GAAGV,MAAM,CAACM,MAAM,CAACF,UAAU,CAACF,CAAC,CAAC,CAAC;MACvCS,QAAQ,GAAGX,MAAM,CAACM,MAAM,CAACF,UAAU,CAACF,CAAC,GAAG,CAAC,CAAC,CAAC;MAC3CU,QAAQ,GAAGZ,MAAM,CAACM,MAAM,CAACF,UAAU,CAACF,CAAC,GAAG,CAAC,CAAC,CAAC;MAC3CW,QAAQ,GAAGb,MAAM,CAACM,MAAM,CAACF,UAAU,CAACF,CAAC,GAAG,CAAC,CAAC,CAAC;MAE3Ca,KAAK,CAACN,CAAC,EAAE,CAAC,GAAIC,QAAQ,IAAI,CAAC,GAAKC,QAAQ,IAAI,CAAE;MAC9CI,KAAK,CAACN,CAAC,EAAE,CAAC,GAAI,CAACE,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAKC,QAAQ,IAAI,CAAE;MACrDG,KAAK,CAACN,CAAC,EAAE,CAAC,GAAI,CAACG,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAKC,QAAQ,GAAG,EAAG;;IAGxD,OAAOC,WAAW;EACtB;;EC5DA,IAAM/B,qBAAqB,GAAG,OAAOC,WAAW,KAAK,UAAU;EAC/D,IAAMgC,YAAY,GAAG,SAAfA,YAAY,CAAIC,aAAa,EAAEC,UAAU,EAAK;IAChD,IAAI,OAAOD,aAAa,KAAK,QAAQ,EAAE;MACnC,OAAO;QACHzC,IAAI,EAAE,SAAS;QACfC,IAAI,EAAE0C,SAAS,CAACF,aAAa,EAAEC,UAAU;OAC5C;;IAEL,IAAM1C,IAAI,GAAGyC,aAAa,CAACG,MAAM,CAAC,CAAC,CAAC;IACpC,IAAI5C,IAAI,KAAK,GAAG,EAAE;MACd,OAAO;QACHA,IAAI,EAAE,SAAS;QACfC,IAAI,EAAE4C,kBAAkB,CAACJ,aAAa,CAACK,SAAS,CAAC,CAAC,CAAC,EAAEJ,UAAU;OAClE;;IAEL,IAAMK,UAAU,GAAGpD,oBAAoB,CAACK,IAAI,CAAC;IAC7C,IAAI,CAAC+C,UAAU,EAAE;MACb,OAAOhD,YAAY;;IAEvB,OAAO0C,aAAa,CAACd,MAAM,GAAG,CAAC,GACzB;MACE3B,IAAI,EAAEL,oBAAoB,CAACK,IAAI,CAAC;MAChCC,IAAI,EAAEwC,aAAa,CAACK,SAAS,CAAC,CAAC;KAClC,GACC;MACE9C,IAAI,EAAEL,oBAAoB,CAACK,IAAI;KAClC;EACT,CAAC;EACD,IAAM6C,kBAAkB,GAAG,SAArBA,kBAAkB,CAAI5C,IAAI,EAAEyC,UAAU,EAAK;IAC7C,IAAInC,qBAAqB,EAAE;MACvB,IAAMyC,OAAO,GAAGnB,QAAM,CAAC5B,IAAI,CAAC;MAC5B,OAAO0C,SAAS,CAACK,OAAO,EAAEN,UAAU,CAAC;KACxC,MACI;MACD,OAAO;QAAEZ,MAAM,EAAE,IAAI;QAAE7B,IAAI,EAAJA;OAAM,CAAC;;EAEtC,CAAC;;EACD,IAAM0C,SAAS,GAAG,SAAZA,SAAS,CAAI1C,IAAI,EAAEyC,UAAU,EAAK;IACpC,QAAQA,UAAU;MACd,KAAK,MAAM;QACP,OAAOzC,IAAI,YAAYO,WAAW,GAAG,IAAIL,IAAI,CAAC,CAACF,IAAI,CAAC,CAAC,GAAGA,IAAI;MAChE,KAAK,aAAa;MAClB;QACI,OAAOA,IAAI;;;EAEvB,CAAC;;EC7CD,IAAMgD,SAAS,GAAGC,MAAM,CAACC,YAAY,CAAC,EAAE,CAAC,CAAC;EAC1C,IAAMC,aAAa,GAAG,SAAhBA,aAAa,CAAIC,OAAO,EAAEvC,QAAQ,EAAK;;IAEzC,IAAMa,MAAM,GAAG0B,OAAO,CAAC1B,MAAM;IAC7B,IAAM2B,cAAc,GAAG,IAAIC,KAAK,CAAC5B,MAAM,CAAC;IACxC,IAAI6B,KAAK,GAAG,CAAC;IACbH,OAAO,CAACxD,OAAO,CAAC,UAAC4D,MAAM,EAAE/B,CAAC,EAAK;;MAE3Bd,YAAY,CAAC6C,MAAM,EAAE,KAAK,EAAE,UAAAhB,aAAa,EAAI;QACzCa,cAAc,CAAC5B,CAAC,CAAC,GAAGe,aAAa;QACjC,IAAI,EAAEe,KAAK,KAAK7B,MAAM,EAAE;UACpBb,QAAQ,CAACwC,cAAc,CAACI,IAAI,CAACT,SAAS,CAAC,CAAC;;OAE/C,CAAC;KACL,CAAC;EACN,CAAC;EACD,IAAMU,aAAa,GAAG,SAAhBA,aAAa,CAAIC,cAAc,EAAElB,UAAU,EAAK;IAClD,IAAMY,cAAc,GAAGM,cAAc,CAACvC,KAAK,CAAC4B,SAAS,CAAC;IACtD,IAAMI,OAAO,GAAG,EAAE;IAClB,KAAK,IAAI3B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4B,cAAc,CAAC3B,MAAM,EAAED,CAAC,EAAE,EAAE;MAC5C,IAAMmC,aAAa,GAAGrB,YAAY,CAACc,cAAc,CAAC5B,CAAC,CAAC,EAAEgB,UAAU,CAAC;MACjEW,OAAO,CAACS,IAAI,CAACD,aAAa,CAAC;MAC3B,IAAIA,aAAa,CAAC7D,IAAI,KAAK,OAAO,EAAE;QAChC;;;IAGR,OAAOqD,OAAO;EAClB,CAAC;EACM,IAAMU,QAAQ,GAAG,CAAC;;EC9BzB;EACA;EACA;EACA;EACA;;EAEO,SAASC,OAAO,CAACtD,GAAG,EAAE;IAC3B,IAAIA,GAAG,EAAE,OAAOuD,KAAK,CAACvD,GAAG,CAAC;EAC5B;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA,SAASuD,KAAK,CAACvD,GAAG,EAAE;IAClB,KAAK,IAAIZ,GAAG,IAAIkE,OAAO,CAAC5D,SAAS,EAAE;MACjCM,GAAG,CAACZ,GAAG,CAAC,GAAGkE,OAAO,CAAC5D,SAAS,CAACN,GAAG,CAAC;;IAEnC,OAAOY,GAAG;EACZ;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAsD,OAAO,CAAC5D,SAAS,CAAC8D,EAAE,GACpBF,OAAO,CAAC5D,SAAS,CAAC+D,gBAAgB,GAAG,UAASC,KAAK,EAAEC,EAAE,EAAC;IACtD,IAAI,CAACC,UAAU,GAAG,IAAI,CAACA,UAAU,IAAI,EAAE;IACvC,CAAC,IAAI,CAACA,UAAU,CAAC,GAAG,GAAGF,KAAK,CAAC,GAAG,IAAI,CAACE,UAAU,CAAC,GAAG,GAAGF,KAAK,CAAC,IAAI,EAAE,EAC/DN,IAAI,CAACO,EAAE,CAAC;IACX,OAAO,IAAI;EACb,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAL,OAAO,CAAC5D,SAAS,CAACmE,IAAI,GAAG,UAASH,KAAK,EAAEC,EAAE,EAAC;IAC1C,SAASH,EAAE,GAAG;MACZ,IAAI,CAACM,GAAG,CAACJ,KAAK,EAAEF,EAAE,CAAC;MACnBG,EAAE,CAACI,KAAK,CAAC,IAAI,EAAEC,SAAS,CAAC;;IAG3BR,EAAE,CAACG,EAAE,GAAGA,EAAE;IACV,IAAI,CAACH,EAAE,CAACE,KAAK,EAAEF,EAAE,CAAC;IAClB,OAAO,IAAI;EACb,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAF,OAAO,CAAC5D,SAAS,CAACoE,GAAG,GACrBR,OAAO,CAAC5D,SAAS,CAACuE,cAAc,GAChCX,OAAO,CAAC5D,SAAS,CAACwE,kBAAkB,GACpCZ,OAAO,CAAC5D,SAAS,CAACyE,mBAAmB,GAAG,UAAST,KAAK,EAAEC,EAAE,EAAC;IACzD,IAAI,CAACC,UAAU,GAAG,IAAI,CAACA,UAAU,IAAI,EAAE;;;IAGvC,IAAI,CAAC,IAAII,SAAS,CAAC/C,MAAM,EAAE;MACzB,IAAI,CAAC2C,UAAU,GAAG,EAAE;MACpB,OAAO,IAAI;;;;IAIb,IAAIQ,SAAS,GAAG,IAAI,CAACR,UAAU,CAAC,GAAG,GAAGF,KAAK,CAAC;IAC5C,IAAI,CAACU,SAAS,EAAE,OAAO,IAAI;;;IAG3B,IAAI,CAAC,IAAIJ,SAAS,CAAC/C,MAAM,EAAE;MACzB,OAAO,IAAI,CAAC2C,UAAU,CAAC,GAAG,GAAGF,KAAK,CAAC;MACnC,OAAO,IAAI;;;;IAIb,IAAIW,EAAE;IACN,KAAK,IAAIrD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoD,SAAS,CAACnD,MAAM,EAAED,CAAC,EAAE,EAAE;MACzCqD,EAAE,GAAGD,SAAS,CAACpD,CAAC,CAAC;MACjB,IAAIqD,EAAE,KAAKV,EAAE,IAAIU,EAAE,CAACV,EAAE,KAAKA,EAAE,EAAE;QAC7BS,SAAS,CAACE,MAAM,CAACtD,CAAC,EAAE,CAAC,CAAC;QACtB;;;;;;IAMJ,IAAIoD,SAAS,CAACnD,MAAM,KAAK,CAAC,EAAE;MAC1B,OAAO,IAAI,CAAC2C,UAAU,CAAC,GAAG,GAAGF,KAAK,CAAC;;IAGrC,OAAO,IAAI;EACb,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAJ,OAAO,CAAC5D,SAAS,CAAC6E,IAAI,GAAG,UAASb,KAAK,EAAC;IACtC,IAAI,CAACE,UAAU,GAAG,IAAI,CAACA,UAAU,IAAI,EAAE;IAEvC,IAAIY,IAAI,GAAG,IAAI3B,KAAK,CAACmB,SAAS,CAAC/C,MAAM,GAAG,CAAC,CAAC;MACtCmD,SAAS,GAAG,IAAI,CAACR,UAAU,CAAC,GAAG,GAAGF,KAAK,CAAC;IAE5C,KAAK,IAAI1C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgD,SAAS,CAAC/C,MAAM,EAAED,CAAC,EAAE,EAAE;MACzCwD,IAAI,CAACxD,CAAC,GAAG,CAAC,CAAC,GAAGgD,SAAS,CAAChD,CAAC,CAAC;;IAG5B,IAAIoD,SAAS,EAAE;MACbA,SAAS,GAAGA,SAAS,CAACK,KAAK,CAAC,CAAC,CAAC;MAC9B,KAAK,IAAIzD,CAAC,GAAG,CAAC,EAAEM,GAAG,GAAG8C,SAAS,CAACnD,MAAM,EAAED,CAAC,GAAGM,GAAG,EAAE,EAAEN,CAAC,EAAE;QACpDoD,SAAS,CAACpD,CAAC,CAAC,CAAC+C,KAAK,CAAC,IAAI,EAAES,IAAI,CAAC;;;IAIlC,OAAO,IAAI;EACb,CAAC;;EAED;EACAlB,OAAO,CAAC5D,SAAS,CAACgF,YAAY,GAAGpB,OAAO,CAAC5D,SAAS,CAAC6E,IAAI;;EAEvD;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAjB,OAAO,CAAC5D,SAAS,CAACiF,SAAS,GAAG,UAASjB,KAAK,EAAC;IAC3C,IAAI,CAACE,UAAU,GAAG,IAAI,CAACA,UAAU,IAAI,EAAE;IACvC,OAAO,IAAI,CAACA,UAAU,CAAC,GAAG,GAAGF,KAAK,CAAC,IAAI,EAAE;EAC3C,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;;EAEAJ,OAAO,CAAC5D,SAAS,CAACkF,YAAY,GAAG,UAASlB,KAAK,EAAC;IAC9C,OAAO,CAAC,CAAE,IAAI,CAACiB,SAAS,CAACjB,KAAK,CAAC,CAACzC,MAAM;EACxC,CAAC;;ECxKM,IAAM4D,cAAc,GAAI,YAAM;IACjC,IAAI,OAAOC,IAAI,KAAK,WAAW,EAAE;MAC7B,OAAOA,IAAI;KACd,MACI,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;MACpC,OAAOA,MAAM;KAChB,MACI;MACD,OAAOC,QAAQ,CAAC,aAAa,CAAC,EAAE;;EAExC,CAAC,EAAG;;ECTG,SAASC,IAAI,CAACjF,GAAG,EAAW;IAAA,kCAANkF,IAAI;MAAJA,IAAI;;IAC7B,OAAOA,IAAI,CAACC,MAAM,CAAC,UAACC,GAAG,EAAEC,CAAC,EAAK;MAC3B,IAAIrF,GAAG,CAACsF,cAAc,CAACD,CAAC,CAAC,EAAE;QACvBD,GAAG,CAACC,CAAC,CAAC,GAAGrF,GAAG,CAACqF,CAAC,CAAC;;MAEnB,OAAOD,GAAG;KACb,EAAE,EAAE,CAAC;EACV;EACA;EACA,IAAMG,kBAAkB,GAAGC,cAAU,CAACC,UAAU;EAChD,IAAMC,oBAAoB,GAAGF,cAAU,CAACG,YAAY;EAC7C,SAASC,qBAAqB,CAAC5F,GAAG,EAAE6F,IAAI,EAAE;IAC7C,IAAIA,IAAI,CAACC,eAAe,EAAE;MACtB9F,GAAG,CAAC+F,YAAY,GAAGR,kBAAkB,CAACS,IAAI,CAACR,cAAU,CAAC;MACtDxF,GAAG,CAACiG,cAAc,GAAGP,oBAAoB,CAACM,IAAI,CAACR,cAAU,CAAC;KAC7D,MACI;MACDxF,GAAG,CAAC+F,YAAY,GAAGP,cAAU,CAACC,UAAU,CAACO,IAAI,CAACR,cAAU,CAAC;MACzDxF,GAAG,CAACiG,cAAc,GAAGT,cAAU,CAACG,YAAY,CAACK,IAAI,CAACR,cAAU,CAAC;;EAErE;EACA;EACA,IAAMU,eAAe,GAAG,IAAI;EAC5B;EACO,SAASC,UAAU,CAACnG,GAAG,EAAE;IAC5B,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE;MACzB,OAAOoG,UAAU,CAACpG,GAAG,CAAC;;;IAG1B,OAAOqG,IAAI,CAACC,IAAI,CAAC,CAACtG,GAAG,CAACmG,UAAU,IAAInG,GAAG,CAACuG,IAAI,IAAIL,eAAe,CAAC;EACpE;EACA,SAASE,UAAU,CAACI,GAAG,EAAE;IACrB,IAAIC,CAAC,GAAG,CAAC;MAAExF,MAAM,GAAG,CAAC;IACrB,KAAK,IAAID,CAAC,GAAG,CAAC,EAAE0F,CAAC,GAAGF,GAAG,CAACvF,MAAM,EAAED,CAAC,GAAG0F,CAAC,EAAE1F,CAAC,EAAE,EAAE;MACxCyF,CAAC,GAAGD,GAAG,CAACtF,UAAU,CAACF,CAAC,CAAC;MACrB,IAAIyF,CAAC,GAAG,IAAI,EAAE;QACVxF,MAAM,IAAI,CAAC;OACd,MACI,IAAIwF,CAAC,GAAG,KAAK,EAAE;QAChBxF,MAAM,IAAI,CAAC;OACd,MACI,IAAIwF,CAAC,GAAG,MAAM,IAAIA,CAAC,IAAI,MAAM,EAAE;QAChCxF,MAAM,IAAI,CAAC;OACd,MACI;QACDD,CAAC,EAAE;QACHC,MAAM,IAAI,CAAC;;;IAGnB,OAAOA,MAAM;EACjB;;ECjDkD,IAC5C0F,cAAc;IAAA;IAAA;IAChB,wBAAYC,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAE;MAAA;MAAA;MACtC,0BAAMF,MAAM;MACZ,MAAKC,WAAW,GAAGA,WAAW;MAC9B,MAAKC,OAAO,GAAGA,OAAO;MACtB,MAAKxH,IAAI,GAAG,gBAAgB;MAAC;;IAChC;EAAA,iCANwByH,KAAK;MAQrBC,SAAS;IAAA;IAAA;;EAEtB;EACA;EACA;EACA;EACA;IACI,mBAAYnB,IAAI,EAAE;MAAA;MAAA;MACd;MACA,OAAKoB,QAAQ,GAAG,KAAK;MACrBrB,qBAAqB,iCAAOC,IAAI,CAAC;MACjC,OAAKA,IAAI,GAAGA,IAAI;MAChB,OAAKqB,KAAK,GAAGrB,IAAI,CAACqB,KAAK;MACvB,OAAKC,MAAM,GAAGtB,IAAI,CAACsB,MAAM;MAAC;;;EAGlC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IARI;MAAA;MAAA,OASA,iBAAQP,MAAM,EAAEC,WAAW,EAAEC,OAAO,EAAE;QAClC,4EAAmB,OAAO,EAAE,IAAIH,cAAc,CAACC,MAAM,EAAEC,WAAW,EAAEC,OAAO,CAAC;QAC5E,OAAO,IAAI;;;EAGnB;EACA;;MAFI;MAAA,OAGA,gBAAO;QACH,IAAI,CAACM,UAAU,GAAG,SAAS;QAC3B,IAAI,CAACC,MAAM,EAAE;QACb,OAAO,IAAI;;;EAGnB;EACA;;MAFI;MAAA,OAGA,iBAAQ;QACJ,IAAI,IAAI,CAACD,UAAU,KAAK,SAAS,IAAI,IAAI,CAACA,UAAU,KAAK,MAAM,EAAE;UAC7D,IAAI,CAACE,OAAO,EAAE;UACd,IAAI,CAACC,OAAO,EAAE;;QAElB,OAAO,IAAI;;;EAGnB;EACA;EACA;EACA;;MAJI;MAAA,OAKA,cAAK5E,OAAO,EAAE;QACV,IAAI,IAAI,CAACyE,UAAU,KAAK,MAAM,EAAE;UAC5B,IAAI,CAACI,KAAK,CAAC7E,OAAO,CAAC;;;;EAO/B;EACA;EACA;EACA;;MAJI;MAAA,OAKA,kBAAS;QACL,IAAI,CAACyE,UAAU,GAAG,MAAM;QACxB,IAAI,CAACH,QAAQ,GAAG,IAAI;QACpB,4EAAmB,MAAM;;;EAGjC;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,gBAAO1H,IAAI,EAAE;QACT,IAAMwD,MAAM,GAAGjB,YAAY,CAACvC,IAAI,EAAE,IAAI,CAAC4H,MAAM,CAACnF,UAAU,CAAC;QACzD,IAAI,CAACyF,QAAQ,CAAC1E,MAAM,CAAC;;;EAG7B;EACA;EACA;EACA;;MAJI;MAAA,OAKA,kBAASA,MAAM,EAAE;QACb,4EAAmB,QAAQ,EAAEA,MAAM;;;EAG3C;EACA;EACA;EACA;;MAJI;MAAA,OAKA,iBAAQ2E,OAAO,EAAE;QACb,IAAI,CAACN,UAAU,GAAG,QAAQ;QAC1B,4EAAmB,OAAO,EAAEM,OAAO;;;EAG3C;EACA;EACA;EACA;;MAJI;MAAA,OAKA,eAAMC,OAAO,EAAE;;IAAG;EAAA,EArGSrE,OAAO;;ECXtC;;EAEA,IAAMsE,QAAQ,GAAG,kEAAkE,CAACjH,KAAK,CAAC,EAAE,CAAC;IAAEM,MAAM,GAAG,EAAE;IAAE4G,GAAG,GAAG,EAAE;EACpH,IAAIC,IAAI,GAAG,CAAC;IAAE9G,CAAC,GAAG,CAAC;IAAE+G,IAAI;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAASC,QAAM,CAACC,GAAG,EAAE;IACxB,IAAIC,OAAO,GAAG,EAAE;IAChB,GAAG;MACCA,OAAO,GAAGN,QAAQ,CAACK,GAAG,GAAGhH,MAAM,CAAC,GAAGiH,OAAO;MAC1CD,GAAG,GAAG5B,IAAI,CAAC8B,KAAK,CAACF,GAAG,GAAGhH,MAAM,CAAC;KACjC,QAAQgH,GAAG,GAAG,CAAC;IAChB,OAAOC,OAAO;EAClB;EAeA;EACA;EACA;EACA;EACA;EACA;EACO,SAASE,KAAK,GAAG;IACpB,IAAMC,GAAG,GAAGL,QAAM,CAAC,CAAC,IAAIM,IAAI,EAAE,CAAC;IAC/B,IAAID,GAAG,KAAKN,IAAI,EACZ,OAAOD,IAAI,GAAG,CAAC,EAAEC,IAAI,GAAGM,GAAG;IAC/B,OAAOA,GAAG,GAAG,GAAG,GAAGL,QAAM,CAACF,IAAI,EAAE,CAAC;EACrC;EACA;EACA;EACA;EACA,OAAO9G,CAAC,GAAGC,MAAM,EAAED,CAAC,EAAE;IAClB6G,GAAG,CAACD,QAAQ,CAAC5G,CAAC,CAAC,CAAC,GAAGA,CAAC;EAAC;;ECjDzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAASgH,MAAM,CAAChI,GAAG,EAAE;IACxB,IAAIwG,GAAG,GAAG,EAAE;IACZ,KAAK,IAAIxF,CAAC,IAAIhB,GAAG,EAAE;MACf,IAAIA,GAAG,CAACsF,cAAc,CAACtE,CAAC,CAAC,EAAE;QACvB,IAAIwF,GAAG,CAACvF,MAAM,EACVuF,GAAG,IAAI,GAAG;QACdA,GAAG,IAAI+B,kBAAkB,CAACvH,CAAC,CAAC,GAAG,GAAG,GAAGuH,kBAAkB,CAACvI,GAAG,CAACgB,CAAC,CAAC,CAAC;;;IAGvE,OAAOwF,GAAG;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAASrF,MAAM,CAACqH,EAAE,EAAE;IACvB,IAAIC,GAAG,GAAG,EAAE;IACZ,IAAIC,KAAK,GAAGF,EAAE,CAAC7H,KAAK,CAAC,GAAG,CAAC;IACzB,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAE0F,CAAC,GAAGgC,KAAK,CAACzH,MAAM,EAAED,CAAC,GAAG0F,CAAC,EAAE1F,CAAC,EAAE,EAAE;MAC1C,IAAI2H,IAAI,GAAGD,KAAK,CAAC1H,CAAC,CAAC,CAACL,KAAK,CAAC,GAAG,CAAC;MAC9B8H,GAAG,CAACG,kBAAkB,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGC,kBAAkB,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC;;IAElE,OAAOF,GAAG;EACd;;ECjCA;EACA,IAAII,KAAK,GAAG,KAAK;EACjB,IAAI;IACAA,KAAK,GAAG,OAAOC,cAAc,KAAK,WAAW,IACzC,iBAAiB,IAAI,IAAIA,cAAc,EAAE;EACjD,CAAC,CACD,OAAOC,GAAG,EAAE;;;EAER;EAEG,IAAMC,OAAO,GAAGH,KAAK;;ECV5B;EAGO,SAASI,GAAG,CAACpD,IAAI,EAAE;IACtB,IAAMqD,OAAO,GAAGrD,IAAI,CAACqD,OAAO;;IAE5B,IAAI;MACA,IAAI,WAAW,KAAK,OAAOJ,cAAc,KAAK,CAACI,OAAO,IAAIF,OAAO,CAAC,EAAE;QAChE,OAAO,IAAIF,cAAc,EAAE;;KAElC,CACD,OAAOK,CAAC,EAAE;IACV,IAAI,CAACD,OAAO,EAAE;MACV,IAAI;QACA,OAAO,IAAI1D,cAAU,CAAC,CAAC,QAAQ,CAAC,CAAC4D,MAAM,CAAC,QAAQ,CAAC,CAACpG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;OACpF,CACD,OAAOmG,CAAC,EAAE;;EAElB;;ECVA,SAASE,KAAK,GAAG;EACjB,IAAMC,OAAO,GAAI,YAAY;IACzB,IAAMC,GAAG,GAAG,IAAIT,GAAc,CAAC;MAC3BI,OAAO,EAAE;KACZ,CAAC;IACF,OAAO,IAAI,IAAIK,GAAG,CAACC,YAAY;EACnC,CAAC,EAAG;MACSC,OAAO;IAAA;IAAA;;EAEpB;EACA;EACA;EACA;EACA;IACI,iBAAY5D,IAAI,EAAE;MAAA;MAAA;MACd,0BAAMA,IAAI;MACV,MAAK6D,OAAO,GAAG,KAAK;MACpB,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;QACjC,IAAMC,KAAK,GAAG,QAAQ,KAAKD,QAAQ,CAACtG,QAAQ;QAC5C,IAAIwG,IAAI,GAAGF,QAAQ,CAACE,IAAI;;QAExB,IAAI,CAACA,IAAI,EAAE;UACPA,IAAI,GAAGD,KAAK,GAAG,KAAK,GAAG,IAAI;;QAE/B,MAAKE,EAAE,GACF,OAAOH,QAAQ,KAAK,WAAW,IAC5B9D,IAAI,CAACkE,QAAQ,KAAKJ,QAAQ,CAACI,QAAQ,IACnCF,IAAI,KAAKhE,IAAI,CAACgE,IAAI;QAC1B,MAAKG,EAAE,GAAGnE,IAAI,CAACoE,MAAM,KAAKL,KAAK;;;EAG3C;EACA;MACQ,IAAMM,WAAW,GAAGrE,IAAI,IAAIA,IAAI,CAACqE,WAAW;MAC5C,MAAK/J,cAAc,GAAGmJ,OAAO,IAAI,CAACY,WAAW;MAAC;;IACjD;MAAA;MAAA,KACD,eAAW;QACP,OAAO,SAAS;;;EAGxB;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,kBAAS;QACL,IAAI,CAACC,IAAI,EAAE;;;EAGnB;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,eAAMxC,OAAO,EAAE;QAAA;QACX,IAAI,CAACP,UAAU,GAAG,SAAS;QAC3B,IAAMgD,KAAK,GAAG,SAARA,KAAK,GAAS;UAChB,MAAI,CAAChD,UAAU,GAAG,QAAQ;UAC1BO,OAAO,EAAE;SACZ;QACD,IAAI,IAAI,CAAC+B,OAAO,IAAI,CAAC,IAAI,CAACzC,QAAQ,EAAE;UAChC,IAAIoD,KAAK,GAAG,CAAC;UACb,IAAI,IAAI,CAACX,OAAO,EAAE;YACdW,KAAK,EAAE;YACP,IAAI,CAACxG,IAAI,CAAC,cAAc,EAAE,YAAY;cAClC,EAAEwG,KAAK,IAAID,KAAK,EAAE;aACrB,CAAC;;UAEN,IAAI,CAAC,IAAI,CAACnD,QAAQ,EAAE;YAChBoD,KAAK,EAAE;YACP,IAAI,CAACxG,IAAI,CAAC,OAAO,EAAE,YAAY;cAC3B,EAAEwG,KAAK,IAAID,KAAK,EAAE;aACrB,CAAC;;SAET,MACI;UACDA,KAAK,EAAE;;;;EAInB;EACA;EACA;EACA;;MAJI;MAAA,OAKA,gBAAO;QACH,IAAI,CAACV,OAAO,GAAG,IAAI;QACnB,IAAI,CAACY,MAAM,EAAE;QACb,IAAI,CAAC5F,YAAY,CAAC,MAAM,CAAC;;;EAGjC;EACA;EACA;EACA;;MAJI;MAAA,OAKA,gBAAOnF,IAAI,EAAE;QAAA;QACT,IAAMa,QAAQ,GAAG,SAAXA,QAAQ,CAAI2C,MAAM,EAAK;;UAEzB,IAAI,SAAS,KAAK,MAAI,CAACqE,UAAU,IAAIrE,MAAM,CAACzD,IAAI,KAAK,MAAM,EAAE;YACzD,MAAI,CAACiL,MAAM,EAAE;;;UAGjB,IAAI,OAAO,KAAKxH,MAAM,CAACzD,IAAI,EAAE;YACzB,MAAI,CAACiI,OAAO,CAAC;cAAEV,WAAW,EAAE;aAAkC,CAAC;YAC/D,OAAO,KAAK;;;UAGhB,MAAI,CAACY,QAAQ,CAAC1E,MAAM,CAAC;SACxB;;QAEDE,aAAa,CAAC1D,IAAI,EAAE,IAAI,CAAC4H,MAAM,CAACnF,UAAU,CAAC,CAAC7C,OAAO,CAACiB,QAAQ,CAAC;;QAE7D,IAAI,QAAQ,KAAK,IAAI,CAACgH,UAAU,EAAE;;UAE9B,IAAI,CAACsC,OAAO,GAAG,KAAK;UACpB,IAAI,CAAChF,YAAY,CAAC,cAAc,CAAC;UACjC,IAAI,MAAM,KAAK,IAAI,CAAC0C,UAAU,EAAE;YAC5B,IAAI,CAAC+C,IAAI,EAAE;;;;;EAO3B;EACA;EACA;EACA;;MAJI;MAAA,OAKA,mBAAU;QAAA;QACN,IAAMK,KAAK,GAAG,SAARA,KAAK,GAAS;UAChB,MAAI,CAAChD,KAAK,CAAC,CAAC;YAAElI,IAAI,EAAE;WAAS,CAAC,CAAC;SAClC;QACD,IAAI,MAAM,KAAK,IAAI,CAAC8H,UAAU,EAAE;UAC5BoD,KAAK,EAAE;SACV,MACI;;;UAGD,IAAI,CAAC3G,IAAI,CAAC,MAAM,EAAE2G,KAAK,CAAC;;;;EAIpC;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,eAAM7H,OAAO,EAAE;QAAA;QACX,IAAI,CAACsE,QAAQ,GAAG,KAAK;QACrBvE,aAAa,CAACC,OAAO,EAAE,UAACpD,IAAI,EAAK;UAC7B,MAAI,CAACkL,OAAO,CAAClL,IAAI,EAAE,YAAM;YACrB,MAAI,CAAC0H,QAAQ,GAAG,IAAI;YACpB,MAAI,CAACvC,YAAY,CAAC,OAAO,CAAC;WAC7B,CAAC;SACL,CAAC;;;EAGV;EACA;EACA;EACA;;MAJI;MAAA,OAKA,eAAM;QACF,IAAIwC,KAAK,GAAG,IAAI,CAACA,KAAK,IAAI,EAAE;QAC5B,IAAMwD,MAAM,GAAG,IAAI,CAAC7E,IAAI,CAACoE,MAAM,GAAG,OAAO,GAAG,MAAM;QAClD,IAAIJ,IAAI,GAAG,EAAE;;QAEb,IAAI,KAAK,KAAK,IAAI,CAAChE,IAAI,CAAC8E,iBAAiB,EAAE;UACvCzD,KAAK,CAAC,IAAI,CAACrB,IAAI,CAAC+E,cAAc,CAAC,GAAGxC,KAAK,EAAE;;QAE7C,IAAI,CAAC,IAAI,CAACjI,cAAc,IAAI,CAAC+G,KAAK,CAAC2D,GAAG,EAAE;UACpC3D,KAAK,CAAC4D,GAAG,GAAG,CAAC;;;QAGjB,IAAI,IAAI,CAACjF,IAAI,CAACgE,IAAI,KACZ,OAAO,KAAKa,MAAM,IAAIK,MAAM,CAAC,IAAI,CAAClF,IAAI,CAACgE,IAAI,CAAC,KAAK,GAAG,IACjD,MAAM,KAAKa,MAAM,IAAIK,MAAM,CAAC,IAAI,CAAClF,IAAI,CAACgE,IAAI,CAAC,KAAK,EAAG,CAAC,EAAE;UAC3DA,IAAI,GAAG,GAAG,GAAG,IAAI,CAAChE,IAAI,CAACgE,IAAI;;QAE/B,IAAMmB,YAAY,GAAGhD,MAAM,CAACd,KAAK,CAAC;QAClC,IAAM+D,IAAI,GAAG,IAAI,CAACpF,IAAI,CAACkE,QAAQ,CAACmB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,OAAQR,MAAM,GACV,KAAK,IACJO,IAAI,GAAG,GAAG,GAAG,IAAI,CAACpF,IAAI,CAACkE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAClE,IAAI,CAACkE,QAAQ,CAAC,GAC5DF,IAAI,GACJ,IAAI,CAAChE,IAAI,CAACsF,IAAI,IACbH,YAAY,CAAC/J,MAAM,GAAG,GAAG,GAAG+J,YAAY,GAAG,EAAE,CAAC;;;EAG3D;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,mBAAmB;QAAA,IAAXnF,IAAI,uEAAG,EAAE;QACb,SAAcA,IAAI,EAAE;UAAEiE,EAAE,EAAE,IAAI,CAACA,EAAE;UAAEE,EAAE,EAAE,IAAI,CAACA;SAAI,EAAE,IAAI,CAACnE,IAAI,CAAC;QAC5D,OAAO,IAAIuF,OAAO,CAAC,IAAI,CAACC,GAAG,EAAE,EAAExF,IAAI,CAAC;;;EAG5C;EACA;EACA;EACA;EACA;EACA;;MANI;MAAA,OAOA,iBAAQtG,IAAI,EAAEoE,EAAE,EAAE;QAAA;QACd,IAAM2H,GAAG,GAAG,IAAI,CAACC,OAAO,CAAC;UACrBC,MAAM,EAAE,MAAM;UACdjM,IAAI,EAAEA;SACT,CAAC;QACF+L,GAAG,CAAC9H,EAAE,CAAC,SAAS,EAAEG,EAAE,CAAC;QACrB2H,GAAG,CAAC9H,EAAE,CAAC,OAAO,EAAE,UAACiI,SAAS,EAAE3E,OAAO,EAAK;UACpC,MAAI,CAAC4E,OAAO,CAAC,gBAAgB,EAAED,SAAS,EAAE3E,OAAO,CAAC;SACrD,CAAC;;;EAGV;EACA;EACA;EACA;;MAJI;MAAA,OAKA,kBAAS;QAAA;QACL,IAAMwE,GAAG,GAAG,IAAI,CAACC,OAAO,EAAE;QAC1BD,GAAG,CAAC9H,EAAE,CAAC,MAAM,EAAE,IAAI,CAACmI,MAAM,CAAC3F,IAAI,CAAC,IAAI,CAAC,CAAC;QACtCsF,GAAG,CAAC9H,EAAE,CAAC,OAAO,EAAE,UAACiI,SAAS,EAAE3E,OAAO,EAAK;UACpC,MAAI,CAAC4E,OAAO,CAAC,gBAAgB,EAAED,SAAS,EAAE3E,OAAO,CAAC;SACrD,CAAC;QACF,IAAI,CAAC8E,OAAO,GAAGN,GAAG;;;IACrB;EAAA,EA1NwBtE,SAAS;MA4NzBoE,OAAO;IAAA;IAAA;;EAEpB;EACA;EACA;EACA;EACA;IACI,iBAAYC,GAAG,EAAExF,IAAI,EAAE;MAAA;MAAA;MACnB;MACAD,qBAAqB,iCAAOC,IAAI,CAAC;MACjC,OAAKA,IAAI,GAAGA,IAAI;MAChB,OAAK2F,MAAM,GAAG3F,IAAI,CAAC2F,MAAM,IAAI,KAAK;MAClC,OAAKH,GAAG,GAAGA,GAAG;MACd,OAAKQ,KAAK,GAAG,KAAK,KAAKhG,IAAI,CAACgG,KAAK;MACjC,OAAKtM,IAAI,GAAGuM,SAAS,KAAKjG,IAAI,CAACtG,IAAI,GAAGsG,IAAI,CAACtG,IAAI,GAAG,IAAI;MACtD,OAAKP,MAAM,EAAE;MAAC;;;EAGtB;EACA;EACA;EACA;IAJI;MAAA;MAAA,OAKA,kBAAS;QAAA;QACL,IAAM6G,IAAI,GAAGZ,IAAI,CAAC,IAAI,CAACY,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,oBAAoB,EAAE,WAAW,CAAC;QAC7HA,IAAI,CAACqD,OAAO,GAAG,CAAC,CAAC,IAAI,CAACrD,IAAI,CAACiE,EAAE;QAC7BjE,IAAI,CAACkG,OAAO,GAAG,CAAC,CAAC,IAAI,CAAClG,IAAI,CAACmE,EAAE;QAC7B,IAAMT,GAAG,GAAI,IAAI,CAACA,GAAG,GAAG,IAAIT,GAAc,CAACjD,IAAI,CAAE;QACjD,IAAI;UACA0D,GAAG,CAACyC,IAAI,CAAC,IAAI,CAACR,MAAM,EAAE,IAAI,CAACH,GAAG,EAAE,IAAI,CAACQ,KAAK,CAAC;UAC3C,IAAI;YACA,IAAI,IAAI,CAAChG,IAAI,CAACoG,YAAY,EAAE;cACxB1C,GAAG,CAAC2C,qBAAqB,IAAI3C,GAAG,CAAC2C,qBAAqB,CAAC,IAAI,CAAC;cAC5D,KAAK,IAAIlL,CAAC,IAAI,IAAI,CAAC6E,IAAI,CAACoG,YAAY,EAAE;gBAClC,IAAI,IAAI,CAACpG,IAAI,CAACoG,YAAY,CAAC3G,cAAc,CAACtE,CAAC,CAAC,EAAE;kBAC1CuI,GAAG,CAAC4C,gBAAgB,CAACnL,CAAC,EAAE,IAAI,CAAC6E,IAAI,CAACoG,YAAY,CAACjL,CAAC,CAAC,CAAC;;;;WAIjE,CACD,OAAOmI,CAAC,EAAE;UACV,IAAI,MAAM,KAAK,IAAI,CAACqC,MAAM,EAAE;YACxB,IAAI;cACAjC,GAAG,CAAC4C,gBAAgB,CAAC,cAAc,EAAE,0BAA0B,CAAC;aACnE,CACD,OAAOhD,CAAC,EAAE;;UAEd,IAAI;YACAI,GAAG,CAAC4C,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC;WACxC,CACD,OAAOhD,CAAC,EAAE;;UAEV,IAAI,iBAAiB,IAAII,GAAG,EAAE;YAC1BA,GAAG,CAAC6C,eAAe,GAAG,IAAI,CAACvG,IAAI,CAACuG,eAAe;;UAEnD,IAAI,IAAI,CAACvG,IAAI,CAACwG,cAAc,EAAE;YAC1B9C,GAAG,CAAC+C,OAAO,GAAG,IAAI,CAACzG,IAAI,CAACwG,cAAc;;UAE1C9C,GAAG,CAACgD,kBAAkB,GAAG,YAAM;YAC3B,IAAI,CAAC,KAAKhD,GAAG,CAACnC,UAAU,EACpB;YACJ,IAAI,GAAG,KAAKmC,GAAG,CAACiD,MAAM,IAAI,IAAI,KAAKjD,GAAG,CAACiD,MAAM,EAAE;cAC3C,MAAI,CAACC,MAAM,EAAE;aAChB,MACI;;;cAGD,MAAI,CAAC1G,YAAY,CAAC,YAAM;gBACpB,MAAI,CAAC2F,OAAO,CAAC,OAAOnC,GAAG,CAACiD,MAAM,KAAK,QAAQ,GAAGjD,GAAG,CAACiD,MAAM,GAAG,CAAC,CAAC;eAChE,EAAE,CAAC,CAAC;;WAEZ;UACDjD,GAAG,CAACmD,IAAI,CAAC,IAAI,CAACnN,IAAI,CAAC;SACtB,CACD,OAAO4J,CAAC,EAAE;;;;UAIN,IAAI,CAACpD,YAAY,CAAC,YAAM;YACpB,MAAI,CAAC2F,OAAO,CAACvC,CAAC,CAAC;WAClB,EAAE,CAAC,CAAC;UACL;;QAEJ,IAAI,OAAOwD,QAAQ,KAAK,WAAW,EAAE;UACjC,IAAI,CAACC,KAAK,GAAGxB,OAAO,CAACyB,aAAa,EAAE;UACpCzB,OAAO,CAAC0B,QAAQ,CAAC,IAAI,CAACF,KAAK,CAAC,GAAG,IAAI;;;;EAI/C;EACA;EACA;EACA;;MAJI;MAAA,OAKA,iBAAQ7D,GAAG,EAAE;QACT,IAAI,CAACrE,YAAY,CAAC,OAAO,EAAEqE,GAAG,EAAE,IAAI,CAACQ,GAAG,CAAC;QACzC,IAAI,CAACwD,OAAO,CAAC,IAAI,CAAC;;;EAG1B;EACA;EACA;EACA;;MAJI;MAAA,OAKA,iBAAQC,SAAS,EAAE;QACf,IAAI,WAAW,KAAK,OAAO,IAAI,CAACzD,GAAG,IAAI,IAAI,KAAK,IAAI,CAACA,GAAG,EAAE;UACtD;;QAEJ,IAAI,CAACA,GAAG,CAACgD,kBAAkB,GAAGlD,KAAK;QACnC,IAAI2D,SAAS,EAAE;UACX,IAAI;YACA,IAAI,CAACzD,GAAG,CAAC0D,KAAK,EAAE;WACnB,CACD,OAAO9D,CAAC,EAAE;;QAEd,IAAI,OAAOwD,QAAQ,KAAK,WAAW,EAAE;UACjC,OAAOvB,OAAO,CAAC0B,QAAQ,CAAC,IAAI,CAACF,KAAK,CAAC;;QAEvC,IAAI,CAACrD,GAAG,GAAG,IAAI;;;EAGvB;EACA;EACA;EACA;;MAJI;MAAA,OAKA,kBAAS;QACL,IAAMhK,IAAI,GAAG,IAAI,CAACgK,GAAG,CAAC2D,YAAY;QAClC,IAAI3N,IAAI,KAAK,IAAI,EAAE;UACf,IAAI,CAACmF,YAAY,CAAC,MAAM,EAAEnF,IAAI,CAAC;UAC/B,IAAI,CAACmF,YAAY,CAAC,SAAS,CAAC;UAC5B,IAAI,CAACqI,OAAO,EAAE;;;;EAI1B;EACA;EACA;EACA;;MAJI;MAAA,OAKA,iBAAQ;QACJ,IAAI,CAACA,OAAO,EAAE;;;IACjB;EAAA,EAzIwBzJ,OAAO;EA2IpC8H,OAAO,CAACyB,aAAa,GAAG,CAAC;EACzBzB,OAAO,CAAC0B,QAAQ,GAAG,EAAE;EACrB;EACA;EACA;EACA;EACA;EACA,IAAI,OAAOH,QAAQ,KAAK,WAAW,EAAE;;IAEjC,IAAI,OAAOQ,WAAW,KAAK,UAAU,EAAE;;MAEnCA,WAAW,CAAC,UAAU,EAAEC,aAAa,CAAC;KACzC,MACI,IAAI,OAAO3J,gBAAgB,KAAK,UAAU,EAAE;MAC7C,IAAM4J,gBAAgB,GAAG,YAAY,IAAI7H,cAAU,GAAG,UAAU,GAAG,QAAQ;MAC3E/B,gBAAgB,CAAC4J,gBAAgB,EAAED,aAAa,EAAE,KAAK,CAAC;;EAEhE;EACA,SAASA,aAAa,GAAG;IACrB,KAAK,IAAIpM,CAAC,IAAIoK,OAAO,CAAC0B,QAAQ,EAAE;MAC5B,IAAI1B,OAAO,CAAC0B,QAAQ,CAACxH,cAAc,CAACtE,CAAC,CAAC,EAAE;QACpCoK,OAAO,CAAC0B,QAAQ,CAAC9L,CAAC,CAAC,CAACiM,KAAK,EAAE;;;EAGvC;;EC7YO,IAAMK,QAAQ,GAAI,YAAM;IAC3B,IAAMC,kBAAkB,GAAG,OAAOC,OAAO,KAAK,UAAU,IAAI,OAAOA,OAAO,CAACC,OAAO,KAAK,UAAU;IACjG,IAAIF,kBAAkB,EAAE;MACpB,OAAO,UAAClJ,EAAE;QAAA,OAAKmJ,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAACrJ,EAAE,CAAC;;KAC5C,MACI;MACD,OAAO,UAACA,EAAE,EAAE0B,YAAY;QAAA,OAAKA,YAAY,CAAC1B,EAAE,EAAE,CAAC,CAAC;;;EAExD,CAAC,EAAG;EACG,IAAMsJ,SAAS,GAAGnI,cAAU,CAACmI,SAAS,IAAInI,cAAU,CAACoI,YAAY;EACjE,IAAMC,qBAAqB,GAAG,IAAI;EAClC,IAAMC,iBAAiB,GAAG,aAAa;;ECN9C;EACA,IAAMC,aAAa,GAAG,OAAOC,SAAS,KAAK,WAAW,IAClD,OAAOA,SAAS,CAACC,OAAO,KAAK,QAAQ,IACrCD,SAAS,CAACC,OAAO,CAACC,WAAW,EAAE,KAAK,aAAa;MACxCC,EAAE;IAAA;IAAA;;EAEf;EACA;EACA;EACA;EACA;IACI,YAAYtI,IAAI,EAAE;MAAA;MAAA;MACd,0BAAMA,IAAI;MACV,MAAK1F,cAAc,GAAG,CAAC0F,IAAI,CAACqE,WAAW;MAAC;;IAC3C;MAAA;MAAA,KACD,eAAW;QACP,OAAO,WAAW;;;MACrB;MAAA,OACD,kBAAS;QACL,IAAI,CAAC,IAAI,CAACkE,KAAK,EAAE,EAAE;;UAEf;;QAEJ,IAAM/C,GAAG,GAAG,IAAI,CAACA,GAAG,EAAE;QACtB,IAAMgD,SAAS,GAAG,IAAI,CAACxI,IAAI,CAACwI,SAAS;;QAErC,IAAMxI,IAAI,GAAGkI,aAAa,GACpB,EAAE,GACF9I,IAAI,CAAC,IAAI,CAACY,IAAI,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,qBAAqB,CAAC;QAC1N,IAAI,IAAI,CAACA,IAAI,CAACoG,YAAY,EAAE;UACxBpG,IAAI,CAACyI,OAAO,GAAG,IAAI,CAACzI,IAAI,CAACoG,YAAY;;QAEzC,IAAI;UACA,IAAI,CAACsC,EAAE,GACHV,qBAAqB,IAAI,CAACE,aAAa,GACjCM,SAAS,GACL,IAAIV,SAAS,CAACtC,GAAG,EAAEgD,SAAS,CAAC,GAC7B,IAAIV,SAAS,CAACtC,GAAG,CAAC,GACtB,IAAIsC,SAAS,CAACtC,GAAG,EAAEgD,SAAS,EAAExI,IAAI,CAAC;SAChD,CACD,OAAOkD,GAAG,EAAE;UACR,OAAO,IAAI,CAACrE,YAAY,CAAC,OAAO,EAAEqE,GAAG,CAAC;;QAE1C,IAAI,CAACwF,EAAE,CAACvM,UAAU,GAAG,IAAI,CAACmF,MAAM,CAACnF,UAAU,IAAI8L,iBAAiB;QAChE,IAAI,CAACU,iBAAiB,EAAE;;;EAGhC;EACA;EACA;EACA;;MAJI;MAAA,OAKA,6BAAoB;QAAA;QAChB,IAAI,CAACD,EAAE,CAACE,MAAM,GAAG,YAAM;UACnB,IAAI,MAAI,CAAC5I,IAAI,CAAC6I,SAAS,EAAE;YACrB,MAAI,CAACH,EAAE,CAACI,OAAO,CAACC,KAAK,EAAE;;UAE3B,MAAI,CAACrE,MAAM,EAAE;SAChB;QACD,IAAI,CAACgE,EAAE,CAACM,OAAO,GAAG,UAACC,UAAU;UAAA,OAAK,MAAI,CAACvH,OAAO,CAAC;YAC3CV,WAAW,EAAE,6BAA6B;YAC1CC,OAAO,EAAEgI;WACZ,CAAC;;QACF,IAAI,CAACP,EAAE,CAACQ,SAAS,GAAG,UAACC,EAAE;UAAA,OAAK,MAAI,CAACrD,MAAM,CAACqD,EAAE,CAACzP,IAAI,CAAC;;QAChD,IAAI,CAACgP,EAAE,CAACU,OAAO,GAAG,UAAC9F,CAAC;UAAA,OAAK,MAAI,CAACuC,OAAO,CAAC,iBAAiB,EAAEvC,CAAC,CAAC;;;;MAC9D;MAAA,OACD,eAAMxG,OAAO,EAAE;QAAA;QACX,IAAI,CAACsE,QAAQ,GAAG,KAAK;;;QAErB,2BACSjG,CAAC;UACN,IAAM+B,MAAM,GAAGJ,OAAO,CAAC3B,CAAC,CAAC;UACzB,IAAMkO,UAAU,GAAGlO,CAAC,KAAK2B,OAAO,CAAC1B,MAAM,GAAG,CAAC;UAC3Cf,YAAY,CAAC6C,MAAM,EAAE,MAAI,CAAC5C,cAAc,EAAE,UAACZ,IAAI,EAAK;;YAEhD,IAAMsG,IAAI,GAAG,EAAE;;;;YAiBf,IAAI;cACA,IAAIgI,qBAAqB,EAAE;;gBAEvB,MAAI,CAACU,EAAE,CAAC7B,IAAI,CAACnN,IAAI,CAAC;;aAKzB,CACD,OAAO4J,CAAC,EAAE;YAEV,IAAI+F,UAAU,EAAE;;;cAGZ5B,QAAQ,CAAC,YAAM;gBACX,MAAI,CAACrG,QAAQ,GAAG,IAAI;gBACpB,MAAI,CAACvC,YAAY,CAAC,OAAO,CAAC;eAC7B,EAAE,MAAI,CAACqB,YAAY,CAAC;;WAE5B,CAAC;;QAzCN,KAAK,IAAI/E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2B,OAAO,CAAC1B,MAAM,EAAED,CAAC,EAAE,EAAE;UAAA,MAAhCA,CAAC;;;;MA2Cb;MAAA,OACD,mBAAU;QACN,IAAI,OAAO,IAAI,CAACuN,EAAE,KAAK,WAAW,EAAE;UAChC,IAAI,CAACA,EAAE,CAAC/D,KAAK,EAAE;UACf,IAAI,CAAC+D,EAAE,GAAG,IAAI;;;;EAI1B;EACA;EACA;EACA;;MAJI;MAAA,OAKA,eAAM;QACF,IAAIrH,KAAK,GAAG,IAAI,CAACA,KAAK,IAAI,EAAE;QAC5B,IAAMwD,MAAM,GAAG,IAAI,CAAC7E,IAAI,CAACoE,MAAM,GAAG,KAAK,GAAG,IAAI;QAC9C,IAAIJ,IAAI,GAAG,EAAE;;QAEb,IAAI,IAAI,CAAChE,IAAI,CAACgE,IAAI,KACZ,KAAK,KAAKa,MAAM,IAAIK,MAAM,CAAC,IAAI,CAAClF,IAAI,CAACgE,IAAI,CAAC,KAAK,GAAG,IAC/C,IAAI,KAAKa,MAAM,IAAIK,MAAM,CAAC,IAAI,CAAClF,IAAI,CAACgE,IAAI,CAAC,KAAK,EAAG,CAAC,EAAE;UACzDA,IAAI,GAAG,GAAG,GAAG,IAAI,CAAChE,IAAI,CAACgE,IAAI;;;QAG/B,IAAI,IAAI,CAAChE,IAAI,CAAC8E,iBAAiB,EAAE;UAC7BzD,KAAK,CAAC,IAAI,CAACrB,IAAI,CAAC+E,cAAc,CAAC,GAAGxC,KAAK,EAAE;;;QAG7C,IAAI,CAAC,IAAI,CAACjI,cAAc,EAAE;UACtB+G,KAAK,CAAC4D,GAAG,GAAG,CAAC;;QAEjB,IAAME,YAAY,GAAGhD,MAAM,CAACd,KAAK,CAAC;QAClC,IAAM+D,IAAI,GAAG,IAAI,CAACpF,IAAI,CAACkE,QAAQ,CAACmB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,OAAQR,MAAM,GACV,KAAK,IACJO,IAAI,GAAG,GAAG,GAAG,IAAI,CAACpF,IAAI,CAACkE,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAClE,IAAI,CAACkE,QAAQ,CAAC,GAC5DF,IAAI,GACJ,IAAI,CAAChE,IAAI,CAACsF,IAAI,IACbH,YAAY,CAAC/J,MAAM,GAAG,GAAG,GAAG+J,YAAY,GAAG,EAAE,CAAC;;;EAG3D;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,iBAAQ;QACJ,OAAO,CAAC,CAAC2C,SAAS;;;IACrB;EAAA,EA3JmB3G,SAAS;;ECR1B,IAAMmI,UAAU,GAAG;IACtBC,SAAS,EAAEjB,EAAE;IACbzE,OAAO,EAAED;EACb,CAAC;;ECLD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,IAAM4F,EAAE,GAAG,qPAAqP;EAChQ,IAAMC,KAAK,GAAG,CACV,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAChJ;EACM,SAASC,KAAK,CAAC/I,GAAG,EAAE;IACvB,IAAMgJ,GAAG,GAAGhJ,GAAG;MAAEiJ,CAAC,GAAGjJ,GAAG,CAAC0E,OAAO,CAAC,GAAG,CAAC;MAAE/B,CAAC,GAAG3C,GAAG,CAAC0E,OAAO,CAAC,GAAG,CAAC;IAC3D,IAAIuE,CAAC,IAAI,CAAC,CAAC,IAAItG,CAAC,IAAI,CAAC,CAAC,EAAE;MACpB3C,GAAG,GAAGA,GAAG,CAACpE,SAAS,CAAC,CAAC,EAAEqN,CAAC,CAAC,GAAGjJ,GAAG,CAACpE,SAAS,CAACqN,CAAC,EAAEtG,CAAC,CAAC,CAACuG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAGlJ,GAAG,CAACpE,SAAS,CAAC+G,CAAC,EAAE3C,GAAG,CAACvF,MAAM,CAAC;;IAErG,IAAI0O,CAAC,GAAGN,EAAE,CAACO,IAAI,CAACpJ,GAAG,IAAI,EAAE,CAAC;MAAE6E,GAAG,GAAG,EAAE;MAAErK,CAAC,GAAG,EAAE;IAC5C,OAAOA,CAAC,EAAE,EAAE;MACRqK,GAAG,CAACiE,KAAK,CAACtO,CAAC,CAAC,CAAC,GAAG2O,CAAC,CAAC3O,CAAC,CAAC,IAAI,EAAE;;IAE9B,IAAIyO,CAAC,IAAI,CAAC,CAAC,IAAItG,CAAC,IAAI,CAAC,CAAC,EAAE;MACpBkC,GAAG,CAACwE,MAAM,GAAGL,GAAG;MAChBnE,GAAG,CAACyE,IAAI,GAAGzE,GAAG,CAACyE,IAAI,CAAC1N,SAAS,CAAC,CAAC,EAAEiJ,GAAG,CAACyE,IAAI,CAAC7O,MAAM,GAAG,CAAC,CAAC,CAACyO,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;MACxErE,GAAG,CAAC0E,SAAS,GAAG1E,GAAG,CAAC0E,SAAS,CAACL,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;MAClFrE,GAAG,CAAC2E,OAAO,GAAG,IAAI;;IAEtB3E,GAAG,CAAC4E,SAAS,GAAGA,SAAS,CAAC5E,GAAG,EAAEA,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3CA,GAAG,CAAC6E,QAAQ,GAAGA,QAAQ,CAAC7E,GAAG,EAAEA,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAOA,GAAG;EACd;EACA,SAAS4E,SAAS,CAACjQ,GAAG,EAAEmL,IAAI,EAAE;IAC1B,IAAMgF,IAAI,GAAG,UAAU;MAAEC,KAAK,GAAGjF,IAAI,CAACuE,OAAO,CAACS,IAAI,EAAE,GAAG,CAAC,CAACxP,KAAK,CAAC,GAAG,CAAC;IACnE,IAAIwK,IAAI,CAAC1G,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI0G,IAAI,CAAClK,MAAM,KAAK,CAAC,EAAE;MAC9CmP,KAAK,CAAC9L,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;;IAEtB,IAAI6G,IAAI,CAAC1G,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;MACvB2L,KAAK,CAAC9L,MAAM,CAAC8L,KAAK,CAACnP,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;;IAErC,OAAOmP,KAAK;EAChB;EACA,SAASF,QAAQ,CAAC7E,GAAG,EAAEnE,KAAK,EAAE;IAC1B,IAAM3H,IAAI,GAAG,EAAE;IACf2H,KAAK,CAACwI,OAAO,CAAC,2BAA2B,EAAE,UAAUW,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAE;MAC7D,IAAID,EAAE,EAAE;QACJ/Q,IAAI,CAAC+Q,EAAE,CAAC,GAAGC,EAAE;;KAEpB,CAAC;IACF,OAAOhR,IAAI;EACf;;MCtDaiR,MAAM;IAAA;IAAA;;EAEnB;EACA;EACA;EACA;EACA;IACI,gBAAYnF,GAAG,EAAa;MAAA;MAAA,IAAXxF,IAAI,uEAAG,EAAE;MAAA;MACtB;MACA,MAAK4K,WAAW,GAAG,EAAE;MACrB,IAAIpF,GAAG,IAAI,QAAQ,aAAYA,GAAG,GAAE;QAChCxF,IAAI,GAAGwF,GAAG;QACVA,GAAG,GAAG,IAAI;;MAEd,IAAIA,GAAG,EAAE;QACLA,GAAG,GAAGkE,KAAK,CAAClE,GAAG,CAAC;QAChBxF,IAAI,CAACkE,QAAQ,GAAGsB,GAAG,CAACyE,IAAI;QACxBjK,IAAI,CAACoE,MAAM,GAAGoB,GAAG,CAAChI,QAAQ,KAAK,OAAO,IAAIgI,GAAG,CAAChI,QAAQ,KAAK,KAAK;QAChEwC,IAAI,CAACgE,IAAI,GAAGwB,GAAG,CAACxB,IAAI;QACpB,IAAIwB,GAAG,CAACnE,KAAK,EACTrB,IAAI,CAACqB,KAAK,GAAGmE,GAAG,CAACnE,KAAK;OAC7B,MACI,IAAIrB,IAAI,CAACiK,IAAI,EAAE;QAChBjK,IAAI,CAACkE,QAAQ,GAAGwF,KAAK,CAAC1J,IAAI,CAACiK,IAAI,CAAC,CAACA,IAAI;;MAEzClK,qBAAqB,gCAAOC,IAAI,CAAC;MACjC,MAAKoE,MAAM,GACP,IAAI,IAAIpE,IAAI,CAACoE,MAAM,GACbpE,IAAI,CAACoE,MAAM,GACX,OAAON,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAKA,QAAQ,CAACtG,QAAQ;MAC3E,IAAIwC,IAAI,CAACkE,QAAQ,IAAI,CAAClE,IAAI,CAACgE,IAAI,EAAE;;QAE7BhE,IAAI,CAACgE,IAAI,GAAG,MAAKI,MAAM,GAAG,KAAK,GAAG,IAAI;;MAE1C,MAAKF,QAAQ,GACTlE,IAAI,CAACkE,QAAQ,KACR,OAAOJ,QAAQ,KAAK,WAAW,GAAGA,QAAQ,CAACI,QAAQ,GAAG,WAAW,CAAC;MAC3E,MAAKF,IAAI,GACLhE,IAAI,CAACgE,IAAI,KACJ,OAAOF,QAAQ,KAAK,WAAW,IAAIA,QAAQ,CAACE,IAAI,GAC3CF,QAAQ,CAACE,IAAI,GACb,MAAKI,MAAM,GACP,KAAK,GACL,IAAI,CAAC;MACvB,MAAKkF,UAAU,GAAGtJ,IAAI,CAACsJ,UAAU,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;MAC7D,MAAKsB,WAAW,GAAG,EAAE;MACrB,MAAKC,aAAa,GAAG,CAAC;MACtB,MAAK7K,IAAI,GAAG,SAAc;QACtBsF,IAAI,EAAE,YAAY;QAClBwF,KAAK,EAAE,KAAK;QACZvE,eAAe,EAAE,KAAK;QACtBwE,OAAO,EAAE,IAAI;QACbhG,cAAc,EAAE,GAAG;QACnBiG,eAAe,EAAE,KAAK;QACtBC,gBAAgB,EAAE,IAAI;QACtBC,kBAAkB,EAAE,IAAI;QACxBC,iBAAiB,EAAE;UACfC,SAAS,EAAE;SACd;QACDC,gBAAgB,EAAE,EAAE;QACpBC,mBAAmB,EAAE;OACxB,EAAEtL,IAAI,CAAC;MACR,MAAKA,IAAI,CAACsF,IAAI,GACV,MAAKtF,IAAI,CAACsF,IAAI,CAACuE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAC5B,MAAK7J,IAAI,CAACiL,gBAAgB,GAAG,GAAG,GAAG,EAAE,CAAC;MAC/C,IAAI,OAAO,MAAKjL,IAAI,CAACqB,KAAK,KAAK,QAAQ,EAAE;QACrC,MAAKrB,IAAI,CAACqB,KAAK,GAAG/F,MAAM,CAAC,MAAK0E,IAAI,CAACqB,KAAK,CAAC;;;MAG7C,MAAKkK,EAAE,GAAG,IAAI;MACd,MAAKC,QAAQ,GAAG,IAAI;MACpB,MAAKC,YAAY,GAAG,IAAI;MACxB,MAAKC,WAAW,GAAG,IAAI;;MAEvB,MAAKC,gBAAgB,GAAG,IAAI;MAC5B,IAAI,OAAO/N,gBAAgB,KAAK,UAAU,EAAE;QACxC,IAAI,MAAKoC,IAAI,CAACsL,mBAAmB,EAAE;;;;UAI/B,MAAKM,yBAAyB,GAAG,YAAM;YACnC,IAAI,MAAKC,SAAS,EAAE;;cAEhB,MAAKA,SAAS,CAACxN,kBAAkB,EAAE;cACnC,MAAKwN,SAAS,CAAClH,KAAK,EAAE;;WAE7B;UACD/G,gBAAgB,CAAC,cAAc,EAAE,MAAKgO,yBAAyB,EAAE,KAAK,CAAC;;QAE3E,IAAI,MAAK1H,QAAQ,KAAK,WAAW,EAAE;UAC/B,MAAK4H,oBAAoB,GAAG,YAAM;YAC9B,MAAKpK,OAAO,CAAC,iBAAiB,EAAE;cAC5BV,WAAW,EAAE;aAChB,CAAC;WACL;UACDpD,gBAAgB,CAAC,SAAS,EAAE,MAAKkO,oBAAoB,EAAE,KAAK,CAAC;;;MAGrE,MAAK3F,IAAI,EAAE;MAAC;;;EAGpB;EACA;EACA;EACA;EACA;EACA;IANI;MAAA;MAAA,OAOA,yBAAgB4F,IAAI,EAAE;QAClB,IAAM1K,KAAK,GAAG,SAAc,EAAE,EAAE,IAAI,CAACrB,IAAI,CAACqB,KAAK,CAAC;;QAEhDA,KAAK,CAAC2K,GAAG,GAAGxO,QAAQ;;QAEpB6D,KAAK,CAACwK,SAAS,GAAGE,IAAI;;QAEtB,IAAI,IAAI,CAACR,EAAE,EACPlK,KAAK,CAAC2D,GAAG,GAAG,IAAI,CAACuG,EAAE;QACvB,IAAMvL,IAAI,GAAG,SAAc,EAAE,EAAE,IAAI,CAACA,IAAI,CAACqL,gBAAgB,CAACU,IAAI,CAAC,EAAE,IAAI,CAAC/L,IAAI,EAAE;UACxEqB,KAAK,EAALA,KAAK;UACLC,MAAM,EAAE,IAAI;UACZ4C,QAAQ,EAAE,IAAI,CAACA,QAAQ;UACvBE,MAAM,EAAE,IAAI,CAACA,MAAM;UACnBJ,IAAI,EAAE,IAAI,CAACA;SACd,CAAC;QACF,OAAO,IAAIsF,UAAU,CAACyC,IAAI,CAAC,CAAC/L,IAAI,CAAC;;;EAGzC;EACA;EACA;EACA;;MAJI;MAAA,OAKA,gBAAO;QAAA;QACH,IAAI6L,SAAS;QACb,IAAI,IAAI,CAAC7L,IAAI,CAACgL,eAAe,IACzBL,MAAM,CAACsB,qBAAqB,IAC5B,IAAI,CAAC3C,UAAU,CAACjE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;UAC7CwG,SAAS,GAAG,WAAW;SAC1B,MACI,IAAI,CAAC,KAAK,IAAI,CAACvC,UAAU,CAAClO,MAAM,EAAE;;UAEnC,IAAI,CAAC8E,YAAY,CAAC,YAAM;YACpB,MAAI,CAACrB,YAAY,CAAC,OAAO,EAAE,yBAAyB,CAAC;WACxD,EAAE,CAAC,CAAC;UACL;SACH,MACI;UACDgN,SAAS,GAAG,IAAI,CAACvC,UAAU,CAAC,CAAC,CAAC;;QAElC,IAAI,CAAC/H,UAAU,GAAG,SAAS;;QAE3B,IAAI;UACAsK,SAAS,GAAG,IAAI,CAACK,eAAe,CAACL,SAAS,CAAC;SAC9C,CACD,OAAOvI,CAAC,EAAE;UACN,IAAI,CAACgG,UAAU,CAAC6C,KAAK,EAAE;UACvB,IAAI,CAAChG,IAAI,EAAE;UACX;;QAEJ0F,SAAS,CAAC1F,IAAI,EAAE;QAChB,IAAI,CAACiG,YAAY,CAACP,SAAS,CAAC;;;EAGpC;EACA;EACA;EACA;;MAJI;MAAA,OAKA,sBAAaA,SAAS,EAAE;QAAA;QACpB,IAAI,IAAI,CAACA,SAAS,EAAE;UAChB,IAAI,CAACA,SAAS,CAACxN,kBAAkB,EAAE;;;QAGvC,IAAI,CAACwN,SAAS,GAAGA,SAAS;;QAE1BA,SAAS,CACJlO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC0O,OAAO,CAAClM,IAAI,CAAC,IAAI,CAAC,CAAC,CACpCxC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAACiE,QAAQ,CAACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CACtCxC,EAAE,CAAC,OAAO,EAAE,IAAI,CAACkI,OAAO,CAAC1F,IAAI,CAAC,IAAI,CAAC,CAAC,CACpCxC,EAAE,CAAC,OAAO,EAAE,UAACoD,MAAM;UAAA,OAAK,MAAI,CAACW,OAAO,CAAC,iBAAiB,EAAEX,MAAM,CAAC;UAAC;;;EAG7E;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,eAAMgL,IAAI,EAAE;QAAA;QACR,IAAIF,SAAS,GAAG,IAAI,CAACK,eAAe,CAACH,IAAI,CAAC;QAC1C,IAAIO,MAAM,GAAG,KAAK;QAClB3B,MAAM,CAACsB,qBAAqB,GAAG,KAAK;QACpC,IAAMM,eAAe,GAAG,SAAlBA,eAAe,GAAS;UAC1B,IAAID,MAAM,EACN;UACJT,SAAS,CAAChF,IAAI,CAAC,CAAC;YAAEpN,IAAI,EAAE,MAAM;YAAEC,IAAI,EAAE;WAAS,CAAC,CAAC;UACjDmS,SAAS,CAAC7N,IAAI,CAAC,QAAQ,EAAE,UAACwO,GAAG,EAAK;YAC9B,IAAIF,MAAM,EACN;YACJ,IAAI,MAAM,KAAKE,GAAG,CAAC/S,IAAI,IAAI,OAAO,KAAK+S,GAAG,CAAC9S,IAAI,EAAE;cAC7C,MAAI,CAAC+S,SAAS,GAAG,IAAI;cACrB,MAAI,CAAC5N,YAAY,CAAC,WAAW,EAAEgN,SAAS,CAAC;cACzC,IAAI,CAACA,SAAS,EACV;cACJlB,MAAM,CAACsB,qBAAqB,GAAG,WAAW,KAAKJ,SAAS,CAACE,IAAI;cAC7D,MAAI,CAACF,SAAS,CAACtH,KAAK,CAAC,YAAM;gBACvB,IAAI+H,MAAM,EACN;gBACJ,IAAI,QAAQ,KAAK,MAAI,CAAC/K,UAAU,EAC5B;gBACJ2F,OAAO,EAAE;gBACT,MAAI,CAACkF,YAAY,CAACP,SAAS,CAAC;gBAC5BA,SAAS,CAAChF,IAAI,CAAC,CAAC;kBAAEpN,IAAI,EAAE;iBAAW,CAAC,CAAC;gBACrC,MAAI,CAACoF,YAAY,CAAC,SAAS,EAAEgN,SAAS,CAAC;gBACvCA,SAAS,GAAG,IAAI;gBAChB,MAAI,CAACY,SAAS,GAAG,KAAK;gBACtB,MAAI,CAACC,KAAK,EAAE;eACf,CAAC;aACL,MACI;cACD,IAAMxJ,GAAG,GAAG,IAAIhC,KAAK,CAAC,aAAa,CAAC;;cAEpCgC,GAAG,CAAC2I,SAAS,GAAGA,SAAS,CAACE,IAAI;cAC9B,MAAI,CAAClN,YAAY,CAAC,cAAc,EAAEqE,GAAG,CAAC;;WAE7C,CAAC;SACL;QACD,SAASyJ,eAAe,GAAG;UACvB,IAAIL,MAAM,EACN;;UAEJA,MAAM,GAAG,IAAI;UACbpF,OAAO,EAAE;UACT2E,SAAS,CAAClH,KAAK,EAAE;UACjBkH,SAAS,GAAG,IAAI;;;QAGpB,IAAMzC,OAAO,GAAG,SAAVA,OAAO,CAAIlG,GAAG,EAAK;UACrB,IAAM0J,KAAK,GAAG,IAAI1L,KAAK,CAAC,eAAe,GAAGgC,GAAG,CAAC;;UAE9C0J,KAAK,CAACf,SAAS,GAAGA,SAAS,CAACE,IAAI;UAChCY,eAAe,EAAE;UACjB,MAAI,CAAC9N,YAAY,CAAC,cAAc,EAAE+N,KAAK,CAAC;SAC3C;QACD,SAASC,gBAAgB,GAAG;UACxBzD,OAAO,CAAC,kBAAkB,CAAC;;;QAG/B,SAASJ,OAAO,GAAG;UACfI,OAAO,CAAC,eAAe,CAAC;;;QAG5B,SAAS0D,SAAS,CAACC,EAAE,EAAE;UACnB,IAAIlB,SAAS,IAAIkB,EAAE,CAAChB,IAAI,KAAKF,SAAS,CAACE,IAAI,EAAE;YACzCY,eAAe,EAAE;;;;QAIzB,IAAMzF,OAAO,GAAG,SAAVA,OAAO,GAAS;UAClB2E,SAAS,CAACzN,cAAc,CAAC,MAAM,EAAEmO,eAAe,CAAC;UACjDV,SAAS,CAACzN,cAAc,CAAC,OAAO,EAAEgL,OAAO,CAAC;UAC1CyC,SAAS,CAACzN,cAAc,CAAC,OAAO,EAAEyO,gBAAgB,CAAC;UACnD,MAAI,CAAC5O,GAAG,CAAC,OAAO,EAAE+K,OAAO,CAAC;UAC1B,MAAI,CAAC/K,GAAG,CAAC,WAAW,EAAE6O,SAAS,CAAC;SACnC;QACDjB,SAAS,CAAC7N,IAAI,CAAC,MAAM,EAAEuO,eAAe,CAAC;QACvCV,SAAS,CAAC7N,IAAI,CAAC,OAAO,EAAEoL,OAAO,CAAC;QAChCyC,SAAS,CAAC7N,IAAI,CAAC,OAAO,EAAE6O,gBAAgB,CAAC;QACzC,IAAI,CAAC7O,IAAI,CAAC,OAAO,EAAEgL,OAAO,CAAC;QAC3B,IAAI,CAAChL,IAAI,CAAC,WAAW,EAAE8O,SAAS,CAAC;QACjCjB,SAAS,CAAC1F,IAAI,EAAE;;;EAGxB;EACA;EACA;EACA;;MAJI;MAAA,OAKA,kBAAS;QACL,IAAI,CAAC5E,UAAU,GAAG,MAAM;QACxBoJ,MAAM,CAACsB,qBAAqB,GAAG,WAAW,KAAK,IAAI,CAACJ,SAAS,CAACE,IAAI;QAClE,IAAI,CAAClN,YAAY,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC6N,KAAK,EAAE;;;QAGZ,IAAI,MAAM,KAAK,IAAI,CAACnL,UAAU,IAAI,IAAI,CAACvB,IAAI,CAAC+K,OAAO,EAAE;UACjD,IAAI5P,CAAC,GAAG,CAAC;UACT,IAAM0F,CAAC,GAAG,IAAI,CAAC2K,QAAQ,CAACpQ,MAAM;UAC9B,OAAOD,CAAC,GAAG0F,CAAC,EAAE1F,CAAC,EAAE,EAAE;YACf,IAAI,CAAC6R,KAAK,CAAC,IAAI,CAACxB,QAAQ,CAACrQ,CAAC,CAAC,CAAC;;;;;EAK5C;EACA;EACA;EACA;;MAJI;MAAA,OAKA,kBAAS+B,MAAM,EAAE;QACb,IAAI,SAAS,KAAK,IAAI,CAACqE,UAAU,IAC7B,MAAM,KAAK,IAAI,CAACA,UAAU,IAC1B,SAAS,KAAK,IAAI,CAACA,UAAU,EAAE;UAC/B,IAAI,CAAC1C,YAAY,CAAC,QAAQ,EAAE3B,MAAM,CAAC;;UAEnC,IAAI,CAAC2B,YAAY,CAAC,WAAW,CAAC;UAC9B,QAAQ3B,MAAM,CAACzD,IAAI;YACf,KAAK,MAAM;cACP,IAAI,CAACwT,WAAW,CAACC,IAAI,CAACxD,KAAK,CAACxM,MAAM,CAACxD,IAAI,CAAC,CAAC;cACzC;YACJ,KAAK,MAAM;cACP,IAAI,CAACyT,gBAAgB,EAAE;cACvB,IAAI,CAACC,UAAU,CAAC,MAAM,CAAC;cACvB,IAAI,CAACvO,YAAY,CAAC,MAAM,CAAC;cACzB,IAAI,CAACA,YAAY,CAAC,MAAM,CAAC;cACzB;YACJ,KAAK,OAAO;cACR,IAAMqE,GAAG,GAAG,IAAIhC,KAAK,CAAC,cAAc,CAAC;;cAErCgC,GAAG,CAACmK,IAAI,GAAGnQ,MAAM,CAACxD,IAAI;cACtB,IAAI,CAACmM,OAAO,CAAC3C,GAAG,CAAC;cACjB;YACJ,KAAK,SAAS;cACV,IAAI,CAACrE,YAAY,CAAC,MAAM,EAAE3B,MAAM,CAACxD,IAAI,CAAC;cACtC,IAAI,CAACmF,YAAY,CAAC,SAAS,EAAE3B,MAAM,CAACxD,IAAI,CAAC;cACzC;;;;;EAOpB;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,qBAAYA,IAAI,EAAE;QACd,IAAI,CAACmF,YAAY,CAAC,WAAW,EAAEnF,IAAI,CAAC;QACpC,IAAI,CAAC6R,EAAE,GAAG7R,IAAI,CAACsL,GAAG;QAClB,IAAI,CAAC6G,SAAS,CAACxK,KAAK,CAAC2D,GAAG,GAAGtL,IAAI,CAACsL,GAAG;QACnC,IAAI,CAACwG,QAAQ,GAAG,IAAI,CAAC8B,cAAc,CAAC5T,IAAI,CAAC8R,QAAQ,CAAC;QAClD,IAAI,CAACC,YAAY,GAAG/R,IAAI,CAAC+R,YAAY;QACrC,IAAI,CAACC,WAAW,GAAGhS,IAAI,CAACgS,WAAW;QACnC,IAAI,CAAC6B,UAAU,GAAG7T,IAAI,CAAC6T,UAAU;QACjC,IAAI,CAAC7I,MAAM,EAAE;;QAEb,IAAI,QAAQ,KAAK,IAAI,CAACnD,UAAU,EAC5B;QACJ,IAAI,CAAC4L,gBAAgB,EAAE;;;EAG/B;EACA;EACA;EACA;;MAJI;MAAA,OAKA,4BAAmB;QAAA;QACf,IAAI,CAAC/M,cAAc,CAAC,IAAI,CAACuL,gBAAgB,CAAC;QAC1C,IAAI,CAACA,gBAAgB,GAAG,IAAI,CAACzL,YAAY,CAAC,YAAM;UAC5C,MAAI,CAACwB,OAAO,CAAC,cAAc,CAAC;SAC/B,EAAE,IAAI,CAAC+J,YAAY,GAAG,IAAI,CAACC,WAAW,CAAC;QACxC,IAAI,IAAI,CAAC1L,IAAI,CAAC6I,SAAS,EAAE;UACrB,IAAI,CAAC8C,gBAAgB,CAAC5C,KAAK,EAAE;;;;EAIzC;EACA;EACA;EACA;;MAJI;MAAA,OAKA,mBAAU;QACN,IAAI,CAAC6B,WAAW,CAACnM,MAAM,CAAC,CAAC,EAAE,IAAI,CAACoM,aAAa,CAAC;;;;QAI9C,IAAI,CAACA,aAAa,GAAG,CAAC;QACtB,IAAI,CAAC,KAAK,IAAI,CAACD,WAAW,CAACxP,MAAM,EAAE;UAC/B,IAAI,CAACyD,YAAY,CAAC,OAAO,CAAC;SAC7B,MACI;UACD,IAAI,CAAC6N,KAAK,EAAE;;;;EAIxB;EACA;EACA;EACA;;MAJI;MAAA,OAKA,iBAAQ;QACJ,IAAI,QAAQ,KAAK,IAAI,CAACnL,UAAU,IAC5B,IAAI,CAACsK,SAAS,CAACzK,QAAQ,IACvB,CAAC,IAAI,CAACqL,SAAS,IACf,IAAI,CAAC7B,WAAW,CAACxP,MAAM,EAAE;UACzB,IAAM0B,OAAO,GAAG,IAAI,CAAC0Q,kBAAkB,EAAE;UACzC,IAAI,CAAC3B,SAAS,CAAChF,IAAI,CAAC/J,OAAO,CAAC;;;UAG5B,IAAI,CAAC+N,aAAa,GAAG/N,OAAO,CAAC1B,MAAM;UACnC,IAAI,CAACyD,YAAY,CAAC,OAAO,CAAC;;;;EAItC;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,8BAAqB;QACjB,IAAM4O,sBAAsB,GAAG,IAAI,CAACF,UAAU,IAC1C,IAAI,CAAC1B,SAAS,CAACE,IAAI,KAAK,SAAS,IACjC,IAAI,CAACnB,WAAW,CAACxP,MAAM,GAAG,CAAC;QAC/B,IAAI,CAACqS,sBAAsB,EAAE;UACzB,OAAO,IAAI,CAAC7C,WAAW;;QAE3B,IAAI8C,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,IAAIvS,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACyP,WAAW,CAACxP,MAAM,EAAED,CAAC,EAAE,EAAE;UAC9C,IAAMzB,IAAI,GAAG,IAAI,CAACkR,WAAW,CAACzP,CAAC,CAAC,CAACzB,IAAI;UACrC,IAAIA,IAAI,EAAE;YACNgU,WAAW,IAAIpN,UAAU,CAAC5G,IAAI,CAAC;;UAEnC,IAAIyB,CAAC,GAAG,CAAC,IAAIuS,WAAW,GAAG,IAAI,CAACH,UAAU,EAAE;YACxC,OAAO,IAAI,CAAC3C,WAAW,CAAChM,KAAK,CAAC,CAAC,EAAEzD,CAAC,CAAC;;UAEvCuS,WAAW,IAAI,CAAC,CAAC;;;QAErB,OAAO,IAAI,CAAC9C,WAAW;;;EAG/B;EACA;EACA;EACA;EACA;EACA;EACA;;MAPI;MAAA,OAQA,eAAM4B,GAAG,EAAEmB,OAAO,EAAE7P,EAAE,EAAE;QACpB,IAAI,CAACsP,UAAU,CAAC,SAAS,EAAEZ,GAAG,EAAEmB,OAAO,EAAE7P,EAAE,CAAC;QAC5C,OAAO,IAAI;;;MACd;MAAA,OACD,cAAK0O,GAAG,EAAEmB,OAAO,EAAE7P,EAAE,EAAE;QACnB,IAAI,CAACsP,UAAU,CAAC,SAAS,EAAEZ,GAAG,EAAEmB,OAAO,EAAE7P,EAAE,CAAC;QAC5C,OAAO,IAAI;;;EAGnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;MARI;MAAA,OASA,oBAAWrE,IAAI,EAAEC,IAAI,EAAEiU,OAAO,EAAE7P,EAAE,EAAE;QAChC,IAAI,UAAU,KAAK,OAAOpE,IAAI,EAAE;UAC5BoE,EAAE,GAAGpE,IAAI;UACTA,IAAI,GAAGuM,SAAS;;QAEpB,IAAI,UAAU,KAAK,OAAO0H,OAAO,EAAE;UAC/B7P,EAAE,GAAG6P,OAAO;UACZA,OAAO,GAAG,IAAI;;QAElB,IAAI,SAAS,KAAK,IAAI,CAACpM,UAAU,IAAI,QAAQ,KAAK,IAAI,CAACA,UAAU,EAAE;UAC/D;;QAEJoM,OAAO,GAAGA,OAAO,IAAI,EAAE;QACvBA,OAAO,CAACC,QAAQ,GAAG,KAAK,KAAKD,OAAO,CAACC,QAAQ;QAC7C,IAAM1Q,MAAM,GAAG;UACXzD,IAAI,EAAEA,IAAI;UACVC,IAAI,EAAEA,IAAI;UACViU,OAAO,EAAEA;SACZ;QACD,IAAI,CAAC9O,YAAY,CAAC,cAAc,EAAE3B,MAAM,CAAC;QACzC,IAAI,CAAC0N,WAAW,CAACrN,IAAI,CAACL,MAAM,CAAC;QAC7B,IAAIY,EAAE,EACF,IAAI,CAACE,IAAI,CAAC,OAAO,EAAEF,EAAE,CAAC;QAC1B,IAAI,CAAC4O,KAAK,EAAE;;;EAGpB;EACA;;MAFI;MAAA,OAGA,iBAAQ;QAAA;QACJ,IAAM/H,KAAK,GAAG,SAARA,KAAK,GAAS;UAChB,MAAI,CAACjD,OAAO,CAAC,cAAc,CAAC;UAC5B,MAAI,CAACmK,SAAS,CAAClH,KAAK,EAAE;SACzB;QACD,IAAMkJ,eAAe,GAAG,SAAlBA,eAAe,GAAS;UAC1B,MAAI,CAAC5P,GAAG,CAAC,SAAS,EAAE4P,eAAe,CAAC;UACpC,MAAI,CAAC5P,GAAG,CAAC,cAAc,EAAE4P,eAAe,CAAC;UACzClJ,KAAK,EAAE;SACV;QACD,IAAMmJ,cAAc,GAAG,SAAjBA,cAAc,GAAS;;UAEzB,MAAI,CAAC9P,IAAI,CAAC,SAAS,EAAE6P,eAAe,CAAC;UACrC,MAAI,CAAC7P,IAAI,CAAC,cAAc,EAAE6P,eAAe,CAAC;SAC7C;QACD,IAAI,SAAS,KAAK,IAAI,CAACtM,UAAU,IAAI,MAAM,KAAK,IAAI,CAACA,UAAU,EAAE;UAC7D,IAAI,CAACA,UAAU,GAAG,SAAS;UAC3B,IAAI,IAAI,CAACqJ,WAAW,CAACxP,MAAM,EAAE;YACzB,IAAI,CAAC4C,IAAI,CAAC,OAAO,EAAE,YAAM;cACrB,IAAI,MAAI,CAACyO,SAAS,EAAE;gBAChBqB,cAAc,EAAE;eACnB,MACI;gBACDnJ,KAAK,EAAE;;aAEd,CAAC;WACL,MACI,IAAI,IAAI,CAAC8H,SAAS,EAAE;YACrBqB,cAAc,EAAE;WACnB,MACI;YACDnJ,KAAK,EAAE;;;QAGf,OAAO,IAAI;;;EAGnB;EACA;EACA;EACA;;MAJI;MAAA,OAKA,iBAAQzB,GAAG,EAAE;QACTyH,MAAM,CAACsB,qBAAqB,GAAG,KAAK;QACpC,IAAI,CAACpN,YAAY,CAAC,OAAO,EAAEqE,GAAG,CAAC;QAC/B,IAAI,CAACxB,OAAO,CAAC,iBAAiB,EAAEwB,GAAG,CAAC;;;EAG5C;EACA;EACA;EACA;;MAJI;MAAA,OAKA,iBAAQnC,MAAM,EAAEC,WAAW,EAAE;QACzB,IAAI,SAAS,KAAK,IAAI,CAACO,UAAU,IAC7B,MAAM,KAAK,IAAI,CAACA,UAAU,IAC1B,SAAS,KAAK,IAAI,CAACA,UAAU,EAAE;;UAE/B,IAAI,CAACnB,cAAc,CAAC,IAAI,CAACuL,gBAAgB,CAAC;;UAE1C,IAAI,CAACE,SAAS,CAACxN,kBAAkB,CAAC,OAAO,CAAC;;UAE1C,IAAI,CAACwN,SAAS,CAAClH,KAAK,EAAE;;UAEtB,IAAI,CAACkH,SAAS,CAACxN,kBAAkB,EAAE;UACnC,IAAI,OAAOC,mBAAmB,KAAK,UAAU,EAAE;YAC3CA,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAACsN,yBAAyB,EAAE,KAAK,CAAC;YAC1EtN,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAACwN,oBAAoB,EAAE,KAAK,CAAC;;;UAGpE,IAAI,CAACvK,UAAU,GAAG,QAAQ;;UAE1B,IAAI,CAACgK,EAAE,GAAG,IAAI;;UAEd,IAAI,CAAC1M,YAAY,CAAC,OAAO,EAAEkC,MAAM,EAAEC,WAAW,CAAC;;;UAG/C,IAAI,CAAC4J,WAAW,GAAG,EAAE;UACrB,IAAI,CAACC,aAAa,GAAG,CAAC;;;;EAIlC;EACA;EACA;EACA;EACA;;MALI;MAAA,OAMA,wBAAeW,QAAQ,EAAE;QACrB,IAAMuC,gBAAgB,GAAG,EAAE;QAC3B,IAAI5S,CAAC,GAAG,CAAC;QACT,IAAM6S,CAAC,GAAGxC,QAAQ,CAACpQ,MAAM;QACzB,OAAOD,CAAC,GAAG6S,CAAC,EAAE7S,CAAC,EAAE,EAAE;UACf,IAAI,CAAC,IAAI,CAACmO,UAAU,CAACjE,OAAO,CAACmG,QAAQ,CAACrQ,CAAC,CAAC,CAAC,EACrC4S,gBAAgB,CAACxQ,IAAI,CAACiO,QAAQ,CAACrQ,CAAC,CAAC,CAAC;;QAE1C,OAAO4S,gBAAgB;;;IAC1B;EAAA,EAxjBuBtQ,OAAO;EA0jBnCkN,MAAM,CAACnN,QAAQ,GAAGA,QAAQ;;AC/jB1B,2BAAe,UAACgI,GAAG,EAAExF,IAAI;IAAA,OAAK,IAAI2K,MAAM,CAACnF,GAAG,EAAExF,IAAI,CAAC;EAAA;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"engine.io.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/transport.js","../build/esm/contrib/yeast.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/browser-entrypoint.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};\nexport default encodePacket;\n","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","isView","obj","buffer","encodePacket","supportsBinary","callback","encodeBlobAsBase64","fileReader","FileReader","onload","content","result","split","readAsDataURL","i","decode","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","packetType","length","decoded","base64","SEPARATOR","String","fromCharCode","encodePayload","packets","encodedPackets","Array","count","packet","join","decodePayload","encodedPayload","decodedPacket","push","protocol","Emitter","mixin","on","addEventListener","event","fn","_callbacks","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","callbacks","cb","splice","emit","args","slice","len","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","BASE64_OVERHEAD","byteLength","utf8Length","Math","ceil","size","str","c","l","charCodeAt","TransportError","reason","description","context","Error","Transport","writable","query","socket","readyState","doOpen","doClose","onClose","write","onPacket","details","onPause","alphabet","map","seed","prev","encode","num","encoded","floor","yeast","now","Date","encodeURIComponent","qs","qry","pairs","pair","decodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","empty","hasXHR2","xhr","responseType","Polling","polling","location","isSSL","port","xd","hostname","xs","secure","forceBase64","poll","pause","total","doPoll","onOpen","close","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","ipv6","indexOf","path","Request","uri","req","request","method","xhrStatus","onError","onData","pollXhr","async","undefined","xscheme","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","terminationEvent","nextTick","isPromiseAvailable","Promise","resolve","then","WebSocket","MozWebSocket","usingBrowserWebSocket","defaultBinaryType","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","queryKey","regx","names","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","shouldCheckPayloadSize","payloadSize","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file diff --git a/dist/engine.io.min.js b/dist/engine.io.min.js index ddd8df8aa..96efe594c 100644 --- a/dist/engine.io.min.js +++ b/dist/engine.io.min.js @@ -1,7 +1,7 @@ /*! - * Engine.IO v6.3.0 + * Engine.IO v6.3.1 * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).eio=t()}(this,(function(){"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var r=0;r1?{type:m[r],data:e.substring(1)}:{type:m[r]}:g},P=function(e,t){if(x){var r=function(e){var t,r,n,o,i,s=.75*e.length,a=e.length,u=0;"="===e[e.length-1]&&(s--,"="===e[e.length-2]&&s--);var c=new ArrayBuffer(s),p=new Uint8Array(c);for(t=0;t>4,p[u++]=(15&n)<<4|o>>2,p[u++]=(3&o)<<6|63&i;return c}(e);return B(r,t)}return{base64:!0,data:e}},B=function(e,t){return"blob"===t&&e instanceof ArrayBuffer?new Blob([e]):e},L=String.fromCharCode(30);function C(e){if(e)return function(e){for(var t in C.prototype)e[t]=C.prototype[t];return e}(e)}C.prototype.on=C.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},C.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},C.prototype.off=C.prototype.removeListener=C.prototype.removeAllListeners=C.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o1?t-1:0),n=1;n0);return t}function $(){var e=X(+new Date);return e!==H?(W=0,H=e):e+"."+X(W++)}for(;N<64;N++)I[M[N]]=N;function z(e){var t="";for(var r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}function V(e){for(var t={},r=e.split("&"),n=0,o=r.length;n0&&void 0!==arguments[0]?arguments[0]:{};return o(e,{xd:this.xd,xs:this.xs},this.opts),new ee(this.uri(),e)}},{key:"doWrite",value:function(e,t){var r=this,n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",(function(e,t){r.onError("xhr post error",e,t)}))}},{key:"doPoll",value:function(){var e=this,t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(function(t,r){e.onError("xhr poll error",t,r)})),this.pollXhr=t}}]),s}(D),ee=function(e){i(o,e);var r=f(o);function o(e,n){var i;return t(this,o),U(h(i=r.call(this)),n),i.opts=n,i.method=n.method||"GET",i.uri=e,i.async=!1!==n.async,i.data=void 0!==n.data?n.data:null,i.create(),i}return n(o,[{key:"create",value:function(){var e=this,t=j(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd,t.xscheme=!!this.opts.xs;var r=this.xhr=new K(t);try{r.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var n in r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(n)&&r.setRequestHeader(n,this.opts.extraHeaders[n])}catch(e){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{r.setRequestHeader("Accept","*/*")}catch(e){}"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=function(){4===r.readyState&&(200===r.status||1223===r.status?e.onLoad():e.setTimeoutFn((function(){e.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(t){return void this.setTimeoutFn((function(){e.onError(t)}),0)}"undefined"!=typeof document&&(this.index=o.requestsCount++,o.requests[this.index]=this)}},{key:"onError",value:function(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}},{key:"cleanup",value:function(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=Q,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete o.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}},{key:"abort",value:function(){this.cleanup()}}]),o}(C);if(ee.requestsCount=0,ee.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",te);else if("function"==typeof addEventListener){addEventListener("onpagehide"in q?"pagehide":"unload",te,!1)}function te(){for(var e in ee.requests)ee.requests.hasOwnProperty(e)&&ee.requests[e].abort()}var re="function"==typeof Promise&&"function"==typeof Promise.resolve?function(e){return Promise.resolve().then(e)}:function(e,t){return t(e,0)},ne=q.WebSocket||q.MozWebSocket,oe="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),ie=function(e){i(o,e);var r=f(o);function o(e){var n;return t(this,o),(n=r.call(this,e)).supportsBinary=!e.forceBase64,n}return n(o,[{key:"name",get:function(){return"websocket"}},{key:"doOpen",value:function(){if(this.check()){var e=this.uri(),t=this.opts.protocols,r=oe?{}:j(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=oe?new ne(e,t,r):t?new ne(e,t):new ne(e)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}}},{key:"addEventListeners",value:function(){var e=this;this.ws.onopen=function(){e.opts.autoUnref&&e.ws._socket.unref(),e.onOpen()},this.ws.onclose=function(t){return e.onClose({description:"websocket connection closed",context:t})},this.ws.onmessage=function(t){return e.onData(t.data)},this.ws.onerror=function(t){return e.onError("websocket error",t)}}},{key:"write",value:function(e){var t=this;this.writable=!1;for(var r=function(r){var n=e[r],o=r===e.length-1;w(n,t.supportsBinary,(function(e){try{t.ws.send(e)}catch(e){}o&&re((function(){t.writable=!0,t.emitReserved("drain")}),t.setTimeoutFn)}))},n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return t(this,a),(n=s.call(this)).writeBuffer=[],r&&"object"===e(r)&&(i=r,r=null),r?(r=ce(r),i.hostname=r.host,i.secure="https"===r.protocol||"wss"===r.protocol,i.port=r.port,r.query&&(i.query=r.query)):i.host&&(i.hostname=ce(i.host).host),U(h(n),i),n.secure=null!=i.secure?i.secure:"undefined"!=typeof location&&"https:"===location.protocol,i.hostname&&!i.port&&(i.port=n.secure?"443":"80"),n.hostname=i.hostname||("undefined"!=typeof location?location.hostname:"localhost"),n.port=i.port||("undefined"!=typeof location&&location.port?location.port:n.secure?"443":"80"),n.transports=i.transports||["polling","websocket"],n.writeBuffer=[],n.prevBufferLen=0,n.opts=o({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},i),n.opts.path=n.opts.path.replace(/\/$/,"")+(n.opts.addTrailingSlash?"/":""),"string"==typeof n.opts.query&&(n.opts.query=V(n.opts.query)),n.id=null,n.upgrades=null,n.pingInterval=null,n.pingTimeout=null,n.pingTimeoutTimer=null,"function"==typeof addEventListener&&(n.opts.closeOnBeforeunload&&(n.beforeunloadEventListener=function(){n.transport&&(n.transport.removeAllListeners(),n.transport.close())},addEventListener("beforeunload",n.beforeunloadEventListener,!1)),"localhost"!==n.hostname&&(n.offlineEventListener=function(){n.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",n.offlineEventListener,!1))),n.open(),n}return n(a,[{key:"createTransport",value:function(e){var t=o({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);var r=o({},this.opts.transportOptions[e],this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new se[e](r)}},{key:"open",value:function(){var e,t=this;if(this.opts.rememberUpgrade&&a.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((function(){t.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}},{key:"setTransport",value:function(e){var t=this;this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(e){return t.onClose("transport close",e)}))}},{key:"probe",value:function(e){var t=this,r=this.createTransport(e),n=!1;a.priorWebsocketSuccess=!1;var o=function(){n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",(function(e){if(!n)if("pong"===e.type&&"probe"===e.data){if(t.upgrading=!0,t.emitReserved("upgrading",r),!r)return;a.priorWebsocketSuccess="websocket"===r.name,t.transport.pause((function(){n||"closed"!==t.readyState&&(h(),t.setTransport(r),r.send([{type:"upgrade"}]),t.emitReserved("upgrade",r),r=null,t.upgrading=!1,t.flush())}))}else{var o=new Error("probe error");o.transport=r.name,t.emitReserved("upgradeError",o)}})))};function i(){n||(n=!0,h(),r.close(),r=null)}var s=function(e){var n=new Error("probe error: "+e);n.transport=r.name,i(),t.emitReserved("upgradeError",n)};function u(){s("transport closed")}function c(){s("socket closed")}function p(e){r&&e.name!==r.name&&i()}var h=function(){r.removeListener("open",o),r.removeListener("error",s),r.removeListener("close",u),t.off("close",c),t.off("upgrading",p)};r.once("open",o),r.once("error",s),r.once("close",u),this.once("close",c),this.once("upgrading",p),r.open()}},{key:"onOpen",value:function(){if(this.readyState="open",a.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade)for(var e=0,t=this.upgrades.length;e1))return this.writeBuffer;for(var e,t=1,r=0;r=57344?r+=3:(n++,r+=4);return r}(e):Math.ceil(1.33*(e.byteLength||e.size))),r>0&&t>this.maxPayload)return this.writeBuffer.slice(0,r);t+=2}return this.writeBuffer}},{key:"write",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"send",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"sendPacket",value:function(e,t,r,n){if("function"==typeof t&&(n=t,t=void 0),"function"==typeof r&&(n=r,r=null),"closing"!==this.readyState&&"closed"!==this.readyState){(r=r||{}).compress=!1!==r.compress;var o={type:e,data:t,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),n&&this.once("flush",n),this.flush()}}},{key:"close",value:function(){var e=this,t=function(){e.onClose("forced close"),e.transport.close()},r=function r(){e.off("upgrade",r),e.off("upgradeError",r),t()},n=function(){e.once("upgrade",r),e.once("upgradeError",r)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){e.upgrading?n():t()})):this.upgrading?n():t()),this}},{key:"onError",value:function(e){a.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}},{key:"onClose",value:function(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(e){for(var t=[],r=0,n=e.length;r1?{type:v[r],data:e.substring(1)}:{type:v[r]}:m},E=function(e,t){if(S){var r=function(e){var t,r,n,o,i,s=.75*e.length,a=e.length,u=0;"="===e[e.length-1]&&(s--,"="===e[e.length-2]&&s--);var c=new ArrayBuffer(s),p=new Uint8Array(c);for(t=0;t>4,p[u++]=(15&n)<<4|o>>2,p[u++]=(3&o)<<6|63&i;return c}(e);return B(r,t)}return{base64:!0,data:e}},B=function(e,t){return"blob"===t&&e instanceof ArrayBuffer?new Blob([e]):e},L=String.fromCharCode(30);function P(e){if(e)return function(e){for(var t in P.prototype)e[t]=P.prototype[t];return e}(e)}P.prototype.on=P.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},P.prototype.once=function(e,t){function r(){this.off(e,r),t.apply(this,arguments)}return r.fn=t,this.on(e,r),this},P.prototype.off=P.prototype.removeListener=P.prototype.removeAllListeners=P.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o1?t-1:0),n=1;n0);return t}function X(){var e=N(+new Date);return e!==U?(I=0,U=e):e+"."+N(I++)}for(;W<64;W++)M[D[W]]=W;function $(e){var t="";for(var r in e)e.hasOwnProperty(r)&&(t.length&&(t+="&"),t+=encodeURIComponent(r)+"="+encodeURIComponent(e[r]));return t}function z(e){for(var t={},r=e.split("&"),n=0,o=r.length;n0&&void 0!==arguments[0]?arguments[0]:{};return o(e,{xd:this.xd,xs:this.xs},this.opts),new Z(this.uri(),e)}},{key:"doWrite",value:function(e,t){var r=this,n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",(function(e,t){r.onError("xhr post error",e,t)}))}},{key:"doPoll",value:function(){var e=this,t=this.request();t.on("data",this.onData.bind(this)),t.on("error",(function(t,r){e.onError("xhr poll error",t,r)})),this.pollXhr=t}},{key:"name",get:function(){return"polling"}}]),s}(F),Z=function(e){i(o,e);var r=f(o);function o(e,n){var i;return t(this,o),_(h(i=r.call(this)),n),i.opts=n,i.method=n.method||"GET",i.uri=e,i.async=!1!==n.async,i.data=void 0!==n.data?n.data:null,i.create(),i}return n(o,[{key:"create",value:function(){var e=this,t=q(this.opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this.opts.xd,t.xscheme=!!this.opts.xs;var r=this.xhr=new J(t);try{r.open(this.method,this.uri,this.async);try{if(this.opts.extraHeaders)for(var n in r.setDisableHeaderCheck&&r.setDisableHeaderCheck(!0),this.opts.extraHeaders)this.opts.extraHeaders.hasOwnProperty(n)&&r.setRequestHeader(n,this.opts.extraHeaders[n])}catch(e){}if("POST"===this.method)try{r.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}try{r.setRequestHeader("Accept","*/*")}catch(e){}"withCredentials"in r&&(r.withCredentials=this.opts.withCredentials),this.opts.requestTimeout&&(r.timeout=this.opts.requestTimeout),r.onreadystatechange=function(){4===r.readyState&&(200===r.status||1223===r.status?e.onLoad():e.setTimeoutFn((function(){e.onError("number"==typeof r.status?r.status:0)}),0))},r.send(this.data)}catch(t){return void this.setTimeoutFn((function(){e.onError(t)}),0)}"undefined"!=typeof document&&(this.index=o.requestsCount++,o.requests[this.index]=this)}},{key:"onError",value:function(e){this.emitReserved("error",e,this.xhr),this.cleanup(!0)}},{key:"cleanup",value:function(e){if(void 0!==this.xhr&&null!==this.xhr){if(this.xhr.onreadystatechange=K,e)try{this.xhr.abort()}catch(e){}"undefined"!=typeof document&&delete o.requests[this.index],this.xhr=null}}},{key:"onLoad",value:function(){var e=this.xhr.responseText;null!==e&&(this.emitReserved("data",e),this.emitReserved("success"),this.cleanup())}},{key:"abort",value:function(){this.cleanup()}}]),o}(P);if(Z.requestsCount=0,Z.requests={},"undefined"!=typeof document)if("function"==typeof attachEvent)attachEvent("onunload",ee);else if("function"==typeof addEventListener){addEventListener("onpagehide"in C?"pagehide":"unload",ee,!1)}function ee(){for(var e in Z.requests)Z.requests.hasOwnProperty(e)&&Z.requests[e].abort()}var te="function"==typeof Promise&&"function"==typeof Promise.resolve?function(e){return Promise.resolve().then(e)}:function(e,t){return t(e,0)},re=C.WebSocket||C.MozWebSocket,ne="undefined"!=typeof navigator&&"string"==typeof navigator.product&&"reactnative"===navigator.product.toLowerCase(),oe=function(e){i(o,e);var r=f(o);function o(e){var n;return t(this,o),(n=r.call(this,e)).supportsBinary=!e.forceBase64,n}return n(o,[{key:"doOpen",value:function(){if(this.check()){var e=this.uri(),t=this.opts.protocols,r=ne?{}:q(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(r.headers=this.opts.extraHeaders);try{this.ws=ne?new re(e,t,r):t?new re(e,t):new re(e)}catch(e){return this.emitReserved("error",e)}this.ws.binaryType=this.socket.binaryType||"arraybuffer",this.addEventListeners()}}},{key:"addEventListeners",value:function(){var e=this;this.ws.onopen=function(){e.opts.autoUnref&&e.ws._socket.unref(),e.onOpen()},this.ws.onclose=function(t){return e.onClose({description:"websocket connection closed",context:t})},this.ws.onmessage=function(t){return e.onData(t.data)},this.ws.onerror=function(t){return e.onError("websocket error",t)}}},{key:"write",value:function(e){var t=this;this.writable=!1;for(var r=function(r){var n=e[r],o=r===e.length-1;k(n,t.supportsBinary,(function(e){try{t.ws.send(e)}catch(e){}o&&te((function(){t.writable=!0,t.emitReserved("drain")}),t.setTimeoutFn)}))},n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return t(this,a),(n=s.call(this)).writeBuffer=[],r&&"object"===e(r)&&(i=r,r=null),r?(r=ue(r),i.hostname=r.host,i.secure="https"===r.protocol||"wss"===r.protocol,i.port=r.port,r.query&&(i.query=r.query)):i.host&&(i.hostname=ue(i.host).host),_(h(n),i),n.secure=null!=i.secure?i.secure:"undefined"!=typeof location&&"https:"===location.protocol,i.hostname&&!i.port&&(i.port=n.secure?"443":"80"),n.hostname=i.hostname||("undefined"!=typeof location?location.hostname:"localhost"),n.port=i.port||("undefined"!=typeof location&&location.port?location.port:n.secure?"443":"80"),n.transports=i.transports||["polling","websocket"],n.writeBuffer=[],n.prevBufferLen=0,n.opts=o({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!0},i),n.opts.path=n.opts.path.replace(/\/$/,"")+(n.opts.addTrailingSlash?"/":""),"string"==typeof n.opts.query&&(n.opts.query=z(n.opts.query)),n.id=null,n.upgrades=null,n.pingInterval=null,n.pingTimeout=null,n.pingTimeoutTimer=null,"function"==typeof addEventListener&&(n.opts.closeOnBeforeunload&&(n.beforeunloadEventListener=function(){n.transport&&(n.transport.removeAllListeners(),n.transport.close())},addEventListener("beforeunload",n.beforeunloadEventListener,!1)),"localhost"!==n.hostname&&(n.offlineEventListener=function(){n.onClose("transport close",{description:"network connection lost"})},addEventListener("offline",n.offlineEventListener,!1))),n.open(),n}return n(a,[{key:"createTransport",value:function(e){var t=o({},this.opts.query);t.EIO=4,t.transport=e,this.id&&(t.sid=this.id);var r=o({},this.opts.transportOptions[e],this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port});return new ie[e](r)}},{key:"open",value:function(){var e,t=this;if(this.opts.rememberUpgrade&&a.priorWebsocketSuccess&&-1!==this.transports.indexOf("websocket"))e="websocket";else{if(0===this.transports.length)return void this.setTimeoutFn((function(){t.emitReserved("error","No transports available")}),0);e=this.transports[0]}this.readyState="opening";try{e=this.createTransport(e)}catch(e){return this.transports.shift(),void this.open()}e.open(),this.setTransport(e)}},{key:"setTransport",value:function(e){var t=this;this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this.onDrain.bind(this)).on("packet",this.onPacket.bind(this)).on("error",this.onError.bind(this)).on("close",(function(e){return t.onClose("transport close",e)}))}},{key:"probe",value:function(e){var t=this,r=this.createTransport(e),n=!1;a.priorWebsocketSuccess=!1;var o=function(){n||(r.send([{type:"ping",data:"probe"}]),r.once("packet",(function(e){if(!n)if("pong"===e.type&&"probe"===e.data){if(t.upgrading=!0,t.emitReserved("upgrading",r),!r)return;a.priorWebsocketSuccess="websocket"===r.name,t.transport.pause((function(){n||"closed"!==t.readyState&&(h(),t.setTransport(r),r.send([{type:"upgrade"}]),t.emitReserved("upgrade",r),r=null,t.upgrading=!1,t.flush())}))}else{var o=new Error("probe error");o.transport=r.name,t.emitReserved("upgradeError",o)}})))};function i(){n||(n=!0,h(),r.close(),r=null)}var s=function(e){var n=new Error("probe error: "+e);n.transport=r.name,i(),t.emitReserved("upgradeError",n)};function u(){s("transport closed")}function c(){s("socket closed")}function p(e){r&&e.name!==r.name&&i()}var h=function(){r.removeListener("open",o),r.removeListener("error",s),r.removeListener("close",u),t.off("close",c),t.off("upgrading",p)};r.once("open",o),r.once("error",s),r.once("close",u),this.once("close",c),this.once("upgrading",p),r.open()}},{key:"onOpen",value:function(){if(this.readyState="open",a.priorWebsocketSuccess="websocket"===this.transport.name,this.emitReserved("open"),this.flush(),"open"===this.readyState&&this.opts.upgrade)for(var e=0,t=this.upgrades.length;e1))return this.writeBuffer;for(var e,t=1,r=0;r=57344?r+=3:(n++,r+=4);return r}(e):Math.ceil(1.33*(e.byteLength||e.size))),r>0&&t>this.maxPayload)return this.writeBuffer.slice(0,r);t+=2}return this.writeBuffer}},{key:"write",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"send",value:function(e,t,r){return this.sendPacket("message",e,t,r),this}},{key:"sendPacket",value:function(e,t,r,n){if("function"==typeof t&&(n=t,t=void 0),"function"==typeof r&&(n=r,r=null),"closing"!==this.readyState&&"closed"!==this.readyState){(r=r||{}).compress=!1!==r.compress;var o={type:e,data:t,options:r};this.emitReserved("packetCreate",o),this.writeBuffer.push(o),n&&this.once("flush",n),this.flush()}}},{key:"close",value:function(){var e=this,t=function(){e.onClose("forced close"),e.transport.close()},r=function r(){e.off("upgrade",r),e.off("upgradeError",r),t()},n=function(){e.once("upgrade",r),e.once("upgradeError",r)};return"opening"!==this.readyState&&"open"!==this.readyState||(this.readyState="closing",this.writeBuffer.length?this.once("drain",(function(){e.upgrading?n():t()})):this.upgrading?n():t()),this}},{key:"onError",value:function(e){a.priorWebsocketSuccess=!1,this.emitReserved("error",e),this.onClose("transport error",e)}},{key:"onClose",value:function(e,t){"opening"!==this.readyState&&"open"!==this.readyState&&"closing"!==this.readyState||(this.clearTimeoutFn(this.pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),"function"==typeof removeEventListener&&(removeEventListener("beforeunload",this.beforeunloadEventListener,!1),removeEventListener("offline",this.offlineEventListener,!1)),this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this.prevBufferLen=0)}},{key:"filterUpgrades",value:function(e){for(var t=[],r=0,n=e.length;r {\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","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\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};\nexport default encodePacket;\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\n","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","obj","encodeBlobAsBase64","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","prev","TransportError","_inherits","reason","description","context","_classCallCheck","_this","Error","Transport","_this2","writable","query","socket","_createClass","value","_get","readyState","doOpen","doClose","onClose","packets","write","packet","onPacket","details","onPause","alphabet","map","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","qs","qry","pairs","l","pair","decodeURIComponent","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Polling","polling","location","isSSL","protocol","port","xd","hostname","xs","secure","forceBase64","get","poll","pause","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","_this3","onOpen","close","_this4","count","encodePayload","_this5","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","indexOf","path","_extends","Request","uri","req","request","method","xhrStatus","_this6","onError","onData","_this7","pollXhr","_this8","async","undefined","xscheme","xhr","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","_this9","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","_loop","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","writeBuffer","prevBufferLen","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"engine.io.min.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/@socket.io/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.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/index.mjs","../build/esm/globalThis.browser.js","../build/esm/util.js","../build/esm/contrib/yeast.js","../build/esm/transport.js","../build/esm/contrib/parseqs.js","../build/esm/contrib/has-cors.js","../build/esm/transports/xmlhttprequest.browser.js","../build/esm/transports/polling.js","../build/esm/transports/websocket-constructor.browser.js","../build/esm/transports/websocket.js","../build/esm/transports/index.js","../build/esm/contrib/parseuri.js","../build/esm/socket.js","../build/esm/browser-entrypoint.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","/*\n * base64-arraybuffer 1.0.1 \n * Copyright (c) 2022 Niklas von Hertzen \n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var 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};\nvar decode = function (base64) {\n var 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 var 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\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\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};\nexport default encodePacket;\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE } from \"./commons.js\";\nimport { decode } from \"@socket.io/base64-arraybuffer\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst 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 return data instanceof ArrayBuffer ? new Blob([data]) : data;\n case \"arraybuffer\":\n default:\n return data; // assuming the data is already an ArrayBuffer\n }\n};\nexport default decodePacket;\n","import encodePacket from \"./encodePacket.js\";\nimport decodePacket from \"./decodePacket.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 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 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})();\n","import { globalThisShim as globalThis } from \"./globalThis.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","// imported from https://github.com/unshiftio/yeast\n'use strict';\nconst alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split(''), length = 64, map = {};\nlet seed = 0, i = 0, prev;\n/**\n * Return a string representing the specified number.\n *\n * @param {Number} num The number to convert.\n * @returns {String} The string representation of the number.\n * @api public\n */\nexport function encode(num) {\n let encoded = '';\n do {\n encoded = alphabet[num % length] + encoded;\n num = Math.floor(num / length);\n } while (num > 0);\n return encoded;\n}\n/**\n * Return the integer value specified by the given string.\n *\n * @param {String} str The string to convert.\n * @returns {Number} The integer value represented by the string.\n * @api public\n */\nexport function decode(str) {\n let decoded = 0;\n for (i = 0; i < str.length; i++) {\n decoded = decoded * length + map[str.charAt(i)];\n }\n return decoded;\n}\n/**\n * Yeast: A tiny growing id generator.\n *\n * @returns {String} A unique id.\n * @api public\n */\nexport function yeast() {\n const now = encode(+new Date());\n if (now !== prev)\n return seed = 0, prev = now;\n return now + '.' + encode(seed++);\n}\n//\n// Map each character to its index.\n//\nfor (; i < length; i++)\n map[alphabet[i]] = i;\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nclass 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 }\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}\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","// 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","// browser shim for xmlhttprequest module\nimport { hasCORS } from \"../contrib/has-cors.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nexport function XHR(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 { yeast } from \"../contrib/yeast.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nimport { XHR as XMLHttpRequest } from \"./xmlhttprequest.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globalThis.js\";\nfunction empty() { }\nconst hasXHR2 = (function () {\n const xhr = new XMLHttpRequest({\n xdomain: false,\n });\n return null != xhr.responseType;\n})();\nexport class Polling extends Transport {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n this.polling = false;\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 this.xs = opts.secure !== isSSL;\n }\n /**\n * XHR supports binary\n */\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\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 let query = this.query || {};\n const schema = this.opts.secure ? \"https\" : \"http\";\n let port = \"\";\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"https\" === schema && Number(this.opts.port) !== 443) ||\n (\"http\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Creates a request.\n *\n * @param {String} method\n * @private\n */\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd, xs: this.xs }, this.opts);\n return new Request(this.uri(), opts);\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(uri, opts) {\n super();\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.method = opts.method || \"GET\";\n this.uri = uri;\n this.async = false !== opts.async;\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 const opts = pick(this.opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this.opts.xd;\n opts.xscheme = !!this.opts.xs;\n const xhr = (this.xhr = new XMLHttpRequest(opts));\n try {\n xhr.open(this.method, this.uri, this.async);\n try {\n if (this.opts.extraHeaders) {\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 // 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 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}\n","import { globalThisShim as globalThis } from \"../globalThis.js\";\nexport 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 WebSocket = globalThis.WebSocket || globalThis.MozWebSocket;\nexport const usingBrowserWebSocket = true;\nexport const defaultBinaryType = \"arraybuffer\";\n","import { Transport } from \"../transport.js\";\nimport { encode } from \"../contrib/parseqs.js\";\nimport { yeast } from \"../contrib/yeast.js\";\nimport { pick } from \"../util.js\";\nimport { defaultBinaryType, nextTick, usingBrowserWebSocket, WebSocket, } from \"./websocket-constructor.js\";\nimport { encodePacket } from \"engine.io-parser\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class WS extends Transport {\n /**\n * WebSocket transport constructor.\n *\n * @param {Object} opts - connection options\n * @protected\n */\n constructor(opts) {\n super(opts);\n this.supportsBinary = !opts.forceBase64;\n }\n get name() {\n return \"websocket\";\n }\n doOpen() {\n if (!this.check()) {\n // let probe timeout\n return;\n }\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 =\n usingBrowserWebSocket && !isReactNative\n ? protocols\n ? new WebSocket(uri, protocols)\n : new WebSocket(uri)\n : new WebSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType || defaultBinaryType;\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 // always create a new object (GH-437)\n const opts = {};\n if (!usingBrowserWebSocket) {\n if (packet.options) {\n opts.compress = packet.options.compress;\n }\n if (this.opts.perMessageDeflate) {\n const len = \n // @ts-ignore\n \"string\" === typeof data ? Buffer.byteLength(data) : data.length;\n if (len < this.opts.perMessageDeflate.threshold) {\n opts.compress = false;\n }\n }\n }\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 if (usingBrowserWebSocket) {\n // TypeError is thrown when passing the second argument on Safari\n this.ws.send(data);\n }\n else {\n this.ws.send(data, opts);\n }\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.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n let query = this.query || {};\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n let port = \"\";\n // avoid port if default for schema\n if (this.opts.port &&\n ((\"wss\" === schema && Number(this.opts.port) !== 443) ||\n (\"ws\" === schema && Number(this.opts.port) !== 80))) {\n port = \":\" + this.opts.port;\n }\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = yeast();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n const encodedQuery = encode(query);\n const ipv6 = this.opts.hostname.indexOf(\":\") !== -1;\n return (schema +\n \"://\" +\n (ipv6 ? \"[\" + this.opts.hostname + \"]\" : this.opts.hostname) +\n port +\n this.opts.path +\n (encodedQuery.length ? \"?\" + encodedQuery : \"\"));\n }\n /**\n * Feature detection for WebSocket.\n *\n * @return {Boolean} whether this transport is available.\n * @private\n */\n check() {\n return !!WebSocket;\n }\n}\n","import { Polling } from \"./polling.js\";\nimport { WS } from \"./websocket.js\";\nexport const transports = {\n websocket: WS,\n polling: Polling,\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 (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 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 } 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\";\nexport class Socket 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.writeBuffer = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n uri = parse(uri);\n opts.hostname = uri.host;\n opts.secure = uri.protocol === \"https\" || uri.protocol === \"wss\";\n opts.port = uri.port;\n if (uri.query)\n opts.query = uri.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 = opts.transports || [\"polling\", \"websocket\"];\n this.writeBuffer = [];\n this.prevBufferLen = 0;\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: true,\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 // set on handshake\n this.id = null;\n this.upgrades = null;\n this.pingInterval = null;\n this.pingTimeout = null;\n // set on heartbeat\n this.pingTimeoutTimer = null;\n if (typeof addEventListener === \"function\") {\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 addEventListener(\"offline\", this.offlineEventListener, false);\n }\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.transportOptions[name], this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n });\n return new transports[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n open() {\n let transport;\n if (this.opts.rememberUpgrade &&\n Socket.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1) {\n transport = \"websocket\";\n }\n else if (0 === this.transports.length) {\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 else {\n transport = this.transports[0];\n }\n this.readyState = \"opening\";\n // Retry with the next transport if the transport is disabled (jsonp: false)\n try {\n transport = this.createTransport(transport);\n }\n catch (e) {\n this.transports.shift();\n this.open();\n return;\n }\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 * 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 Socket.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 Socket.priorWebsocketSuccess = \"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 transport.open();\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n Socket.priorWebsocketSuccess = \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n // we check for `readyState` in case an `open`\n // listener already closed the socket\n if (\"open\" === this.readyState && this.opts.upgrade) {\n let i = 0;\n const l = this.upgrades.length;\n for (; i < l; i++) {\n this.probe(this.upgrades[i]);\n }\n }\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.resetPingTimeout();\n this.sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\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.upgrades = this.filterUpgrades(data.upgrades);\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 this.pingTimeoutTimer = this.setTimeoutFn(() => {\n this.onClose(\"ping timeout\");\n }, this.pingInterval + this.pingTimeout);\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 * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} 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 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 Socket.priorWebsocketSuccess = false;\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 (typeof removeEventListener === \"function\") {\n removeEventListener(\"beforeunload\", this.beforeunloadEventListener, false);\n removeEventListener(\"offline\", this.offlineEventListener, false);\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 /**\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 let i = 0;\n const j = upgrades.length;\n for (; i < j; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nSocket.protocol = protocol;\n","import { Socket } from \"./socket.js\";\nexport default (uri, opts) => new Socket(uri, opts);\n"],"names":["PACKET_TYPES","Object","create","PACKET_TYPES_REVERSE","keys","forEach","key","ERROR_PACKET","type","data","withNativeBlob","Blob","prototype","toString","call","withNativeArrayBuffer","ArrayBuffer","encodePacket","supportsBinary","callback","obj","encodeBlobAsBase64","isView","buffer","fileReader","FileReader","onload","content","result","split","readAsDataURL","chars","lookup","Uint8Array","i","length","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","Emitter","mixin","on","addEventListener","event","fn","_callbacks","this","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","slice","emitReserved","listeners","hasListeners","globalThisShim","self","window","Function","pick","attr","reduce","acc","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","setTimeoutFn","bind","clearTimeoutFn","prev","TransportError","reason","description","context","Error","Transport","writable","query","socket","readyState","doOpen","doClose","onClose","packets","write","packet","onPacket","details","onPause","alphabet","map","seed","encode","num","encoded","Math","floor","yeast","now","Date","str","encodeURIComponent","qs","qry","pairs","l","pair","decodeURIComponent","value","XMLHttpRequest","err","hasCORS","XHR","xdomain","e","concat","join","empty","hasXHR2","responseType","Polling","polling","location","isSSL","protocol","port","xd","hostname","xs","secure","forceBase64","poll","pause","_this2","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","_this3","onOpen","close","_this4","count","encodePayload","_this5","doWrite","schema","timestampRequests","timestampParam","sid","b64","Number","encodedQuery","indexOf","path","Request","uri","req","request","method","xhrStatus","_this6","onError","onData","_this7","pollXhr","async","undefined","xscheme","xhr","open","extraHeaders","setDisableHeaderCheck","setRequestHeader","withCredentials","requestTimeout","timeout","onreadystatechange","status","_this9","onLoad","send","document","index","requestsCount","requests","cleanup","fromError","abort","responseText","attachEvent","unloadHandler","nextTick","Promise","resolve","then","WebSocket","MozWebSocket","isReactNative","navigator","product","toLowerCase","WS","check","protocols","headers","ws","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","transports","websocket","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","Socket","writeBuffer","_this","prevBufferLen","_extends","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","transportOptions","closeOnBeforeunload","id","upgrades","pingInterval","pingTimeout","pingTimeoutTimer","beforeunloadEventListener","transport","offlineEventListener","name","EIO","priorWebsocketSuccess","createTransport","shift","setTransport","onDrain","failed","onTransportOpen","msg","upgrading","flush","freezeTransport","error","onTransportClose","onupgrade","to","probe","onHandshake","JSON","resetPingTimeout","sendPacket","code","filterUpgrades","maxPayload","getWritablePackets","payloadSize","c","utf8Length","ceil","byteLength","size","options","compress","cleanupAndClose","waitForUpgrade","filteredUpgrades","j"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index ff3d689e3..12123c238 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "engine.io-client", "description": "Client for the realtime Engine", "license": "MIT", - "version": "6.3.0", + "version": "6.3.1", "main": "./build/cjs/index.js", "module": "./build/esm/index.js", "exports": { From df3e2f948ae55f03230ea52e45a913b8f3767e02 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 07:24:48 +0100 Subject: [PATCH 16/21] chore: bump json5 from 1.0.1 to 1.0.2 (#701) Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2. - [Release notes](https://github.com/json5/json5/releases) - [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md) - [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2) --- updated-dependencies: - dependency-name: json5 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07c815ef7..4fb7b26cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7804,13 +7804,10 @@ "dev": true }, "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -7980,9 +7977,9 @@ } }, "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -19752,13 +19749,10 @@ "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "jsonfile": { "version": "1.1.1", @@ -19893,9 +19887,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" From d35992983d02471a766517b0a235a26bbf0d6d93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 07:25:16 +0100 Subject: [PATCH 17/21] chore: bump decode-uri-component from 0.2.0 to 0.2.2 (#698) Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2. - [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases) - [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2) --- updated-dependencies: - dependency-name: decode-uri-component dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4fb7b26cb..8c87c6703 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4022,9 +4022,9 @@ } }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, "engines": { "node": ">=0.10" @@ -16716,9 +16716,9 @@ "dev": true }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, "decompress-zip": { From e06891c93cc25a883d8734f8ccee2840fc809eaf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 07:26:38 +0100 Subject: [PATCH 18/21] chore: bump express from 4.17.1 to 4.17.3 (#697) Bumps [express](https://github.com/expressjs/express) from 4.17.1 to 4.17.3. - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/master/History.md) - [Commits](https://github.com/expressjs/express/compare/4.17.1...4.17.3) --- updated-dependencies: - dependency-name: express dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 490 ++++++++++++++++++++++++---------------------- 1 file changed, 259 insertions(+), 231 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c87c6703..ff89c272d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1745,13 +1745,13 @@ "dev": true }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -3691,17 +3691,37 @@ "dev": true }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -3721,9 +3741,9 @@ } }, "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { "node": ">= 0.6" @@ -4184,7 +4204,7 @@ "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -4218,7 +4238,7 @@ "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", "dev": true }, "node_modules/detect-file": { @@ -4417,15 +4437,6 @@ "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/engine.io/node_modules/ws": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", @@ -4640,7 +4651,7 @@ "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "engines": { "node": ">= 0.6" @@ -4817,17 +4828,17 @@ "dev": true }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "dev": true, "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -4841,13 +4852,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -4857,44 +4868,31 @@ "node": ">= 0.10.0" } }, - "node_modules/express-state": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/express-state/-/express-state-1.0.3.tgz", - "integrity": "sha1-tvNodDqV2KkbdoOt9ZPQKxV37AI=", - "dev": true, - "engines": { - "node": ">=0.8.x", - "npm": ">=1.2.10" - }, - "peerDependencies": { - "express": "3.x" - } - }, "node_modules/express/node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "dev": true, "dependencies": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" }, "engines": { "node": ">= 0.8" } }, "node_modules/express/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" @@ -4924,17 +4922,17 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/express/node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -4942,6 +4940,26 @@ "node": ">= 0.8" } }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -5476,9 +5494,9 @@ } }, "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "engines": { "node": ">= 0.6" @@ -5499,7 +5517,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "engines": { "node": ">= 0.6" @@ -6822,27 +6840,21 @@ } }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, "node_modules/http-proxy": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.11.2.tgz", @@ -8405,21 +8417,21 @@ } }, "node_modules/mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "mime-db": "1.43.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -8799,9 +8811,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" @@ -9698,12 +9710,12 @@ "dev": true }, "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "dependencies": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { @@ -9790,12 +9802,15 @@ } }, "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", "dev": true, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/querystring": { @@ -10379,9 +10394,9 @@ } }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "dependencies": { "debug": "2.6.9", @@ -10391,9 +10406,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -10414,13 +10429,13 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/sequence": { @@ -10443,15 +10458,15 @@ } }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" }, "engines": { "node": ">= 0.8.0" @@ -10497,9 +10512,9 @@ "dev": true }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "node_modules/sha.js": { @@ -11580,9 +11595,9 @@ } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "engines": { "node": ">=0.6" @@ -13195,6 +13210,19 @@ "node": ">= 0.8.0" } }, + "node_modules/zuul/node_modules/express-state": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/express-state/-/express-state-1.0.3.tgz", + "integrity": "sha512-oPpHbMYaNDxGYQrmUznwYY+NAB3IiwfyUtntumKuRBJp+pOBz4a3u7Hxyt2T+1akhB5TP8P9ABXjM1cR5LftnA==", + "dev": true, + "engines": { + "node": ">=0.8.x", + "npm": ">=1.2.10" + }, + "peerDependencies": { + "express": "3.x" + } + }, "node_modules/zuul/node_modules/express/node_modules/commander": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/commander/-/commander-1.3.2.tgz", @@ -14749,13 +14777,13 @@ "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -16431,12 +16459,20 @@ "dev": true }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "content-type": { @@ -16455,9 +16491,9 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "cookie-signature": { @@ -16847,7 +16883,7 @@ "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "deps-sort": { @@ -16875,7 +16911,7 @@ "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", "dev": true }, "detect-file": { @@ -17044,12 +17080,6 @@ "ws": "~8.2.3" }, "dependencies": { - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, "ws": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", @@ -17205,7 +17235,7 @@ "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, "eventemitter3": { @@ -17353,17 +17383,17 @@ "dev": true }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "dev": true, "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -17377,13 +17407,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -17391,27 +17421,27 @@ }, "dependencies": { "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "dev": true, "requires": { - "bytes": "3.1.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" } }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "debug": { @@ -17435,30 +17465,29 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, - "express-state": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/express-state/-/express-state-1.0.3.tgz", - "integrity": "sha1-tvNodDqV2KkbdoOt9ZPQKxV37AI=", - "dev": true, - "requires": {} - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -17907,9 +17936,9 @@ "dev": true }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fragment-cache": { @@ -17924,7 +17953,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, "from2": { @@ -18960,24 +18989,16 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "toidentifier": "1.0.1" } }, "http-proxy": { @@ -20260,18 +20281,18 @@ "dev": true }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "mime-db": "1.43.0" + "mime-db": "1.52.0" } }, "minimalistic-assert": { @@ -20603,9 +20624,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { @@ -21330,12 +21351,12 @@ "dev": true }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, @@ -21419,9 +21440,9 @@ "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", "dev": true }, "querystring": { @@ -21901,9 +21922,9 @@ "dev": true }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "requires": { "debug": "2.6.9", @@ -21913,9 +21934,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -21933,15 +21954,15 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } @@ -21962,15 +21983,15 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { @@ -22009,9 +22030,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "sha.js": { @@ -22924,9 +22945,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "touch": { @@ -24191,6 +24212,13 @@ } } }, + "express-state": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/express-state/-/express-state-1.0.3.tgz", + "integrity": "sha512-oPpHbMYaNDxGYQrmUznwYY+NAB3IiwfyUtntumKuRBJp+pOBz4a3u7Hxyt2T+1akhB5TP8P9ABXjM1cR5LftnA==", + "dev": true, + "requires": {} + }, "fresh": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz", From b59da3af0cb6d08b8c1f2f2dbae560c4bc681f80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 07:27:15 +0100 Subject: [PATCH 19/21] chore: bump loader-utils from 1.4.0 to 1.4.2 (#695) Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.2. - [Release notes](https://github.com/webpack/loader-utils/releases) - [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.2/CHANGELOG.md) - [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.2) --- updated-dependencies: - dependency-name: loader-utils dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index ff89c272d..c2aa29ef3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "engine.io-client", - "version": "6.2.3", + "version": "6.3.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "engine.io-client", - "version": "6.2.3", + "version": "6.3.1", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -7975,9 +7975,9 @@ } }, "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, "dependencies": { "big.js": "^5.2.2", @@ -19897,9 +19897,9 @@ "dev": true }, "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, "requires": { "big.js": "^5.2.2", From af1112a407be87e2ad3912ab228d13009590b5ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 07:29:35 +0100 Subject: [PATCH 20/21] chore: bump engine.io from 6.2.0-alpha.1 to 6.2.1 (#696) Bumps [engine.io](https://github.com/socketio/engine.io) from 6.2.0-alpha.1 to 6.2.1. - [Release notes](https://github.com/socketio/engine.io/releases) - [Changelog](https://github.com/socketio/engine.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/engine.io/commits/6.2.1) --- updated-dependencies: - dependency-name: engine.io dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2aa29ef3..0db648b05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4406,9 +4406,9 @@ } }, "node_modules/engine.io": { - "version": "6.2.0-alpha.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0-alpha.1.tgz", - "integrity": "sha512-QzCsRfSyZvOFVKJyXagEidLZNys2k+524FU06cXrWgIB6waevlnuidEA5DPNPpLPlsXk8Bf1SmENmRyBkJJQ2w==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", + "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -17063,9 +17063,9 @@ } }, "engine.io": { - "version": "6.2.0-alpha.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0-alpha.1.tgz", - "integrity": "sha512-QzCsRfSyZvOFVKJyXagEidLZNys2k+524FU06cXrWgIB6waevlnuidEA5DPNPpLPlsXk8Bf1SmENmRyBkJJQ2w==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", + "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", "dev": true, "requires": { "@types/cookie": "^0.4.1", From 89487d8a664b8e4c4071a842827feabc41deb666 Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Mon, 6 Feb 2023 17:10:22 +0100 Subject: [PATCH 21/21] chore(release): 6.4.0 Diff: https://github.com/socketio/engine.io-client/compare/6.3.1...6.4.0 --- CHANGELOG.md | 11 +++++++++++ dist/engine.io.esm.min.js | 2 +- dist/engine.io.js | 2 +- dist/engine.io.min.js | 2 +- package.json | 2 +- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cca0080d..66df6f971 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## 2023 +- [6.4.0](#640-2023-02-06) (Feb 2023) - [6.3.1](#631-2023-02-04) (Feb 2023) - [6.3.0](#63O-2023-01-10) (Jan 2023) @@ -35,6 +36,16 @@ # Release notes +## [6.4.0](https://github.com/socketio/engine.io-client/compare/6.3.1...6.4.0) (2023-02-06) + +The minor bump is due to changes on the server side. + +### Dependencies + +- [`ws@~8.11.0`](https://github.com/websockets/ws/releases/tag/8.11.0) (no change) + + + ## [6.3.1](https://github.com/socketio/engine.io-client/compare/6.3.0...6.3.1) (2023-02-04) diff --git a/dist/engine.io.esm.min.js b/dist/engine.io.esm.min.js index afd93cc51..d52d3966e 100644 --- a/dist/engine.io.esm.min.js +++ b/dist/engine.io.esm.min.js @@ -1,5 +1,5 @@ /*! - * Engine.IO v6.3.1 + * Engine.IO v6.4.0 * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ diff --git a/dist/engine.io.js b/dist/engine.io.js index b46878191..e08fc0aff 100644 --- a/dist/engine.io.js +++ b/dist/engine.io.js @@ -1,5 +1,5 @@ /*! - * Engine.IO v6.3.1 + * Engine.IO v6.4.0 * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ diff --git a/dist/engine.io.min.js b/dist/engine.io.min.js index 96efe594c..0cbd89d30 100644 --- a/dist/engine.io.min.js +++ b/dist/engine.io.min.js @@ -1,5 +1,5 @@ /*! - * Engine.IO v6.3.1 + * Engine.IO v6.4.0 * (c) 2014-2023 Guillermo Rauch * Released under the MIT License. */ diff --git a/package.json b/package.json index 12123c238..e7f424716 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "engine.io-client", "description": "Client for the realtime Engine", "license": "MIT", - "version": "6.3.1", + "version": "6.4.0", "main": "./build/cjs/index.js", "module": "./build/esm/index.js", "exports": {