bitmax-crm-widget 1.5.2 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","../node_modules/engine.io-parser/build/esm/index.js","../node_modules/@socket.io/component-emitter/lib/esm/index.js","../node_modules/engine.io-client/build/esm/globals.js","../node_modules/engine.io-client/build/esm/util.js","../node_modules/engine.io-client/build/esm/transport.js","../node_modules/engine.io-client/build/esm/contrib/parseqs.js","../node_modules/engine.io-client/build/esm/transports/polling.js","../node_modules/engine.io-client/build/esm/contrib/has-cors.js","../node_modules/engine.io-client/build/esm/transports/polling-xhr.js","../node_modules/engine.io-client/build/esm/transports/websocket.js","../node_modules/engine.io-client/build/esm/transports/index.js","../node_modules/engine.io-client/build/esm/transports/webtransport.js","../node_modules/engine.io-client/build/esm/contrib/parseuri.js","../node_modules/engine.io-client/build/esm/socket.js","../node_modules/socket.io-parser/build/esm/is-binary.js","../node_modules/socket.io-parser/build/esm/binary.js","../node_modules/socket.io-parser/build/esm/index.js","../node_modules/socket.io-client/build/esm/on.js","../node_modules/socket.io-client/build/esm/socket.js","../node_modules/socket.io-client/build/esm/contrib/backo2.js","../node_modules/socket.io-client/build/esm/manager.js","../node_modules/socket.io-client/build/esm/index.js","../node_modules/socket.io-client/build/esm/url.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/index.js","../src/components/TicketBoard.jsx","../node_modules/style-inject/dist/style-inject.es.js","../src/components/CameraCapture.jsx","../src/components/ChatWidget.jsx"],"sourcesContent":["const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach((key) => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data.arrayBuffer().then(toArray).then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, (encoded) => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexport { encodePacket };\n","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE, } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType),\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType),\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1),\n }\n : {\n type: PACKET_TYPES_REVERSE[type],\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET, } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, (encodedPacket) => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport function createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n encodePacketToBinary(packet, (encodedPacket) => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n },\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* State.READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* State.READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* State.READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* State.READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* State.READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* State.READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* State.READ_PAYLOAD */;\n }\n else if (state === 2 /* State.READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* State.READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* State.READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(ERROR_PACKET);\n break;\n }\n }\n },\n });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload, };\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","export const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\nexport const defaultBinaryType = \"arraybuffer\";\nexport function createCookieJar() { }\n","import { globalThisShim as globalThis } from \"./globals.node.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nexport function randomString() {\n return (Date.now().toString(36).substring(3) +\n Math.random().toString(36).substring(2, 5));\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nexport class TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port !== 443)) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = encode(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","import { Transport } from \"../transport.js\";\nimport { randomString } from \"../util.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nexport class Polling extends Transport {\n constructor() {\n super(...arguments);\n this._polling = false;\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this._poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this._polling || !this.writable) {\n let total = 0;\n if (this._polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n _poll() {\n this._polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this._polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this._poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n","import { Polling } from \"./polling.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globals.node.js\";\nimport { hasCORS } from \"../contrib/has-cors.js\";\nfunction empty() { }\nexport class BaseXHR extends Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(createRequest, uri, opts) {\n super();\n this.createRequest = createRequest;\n installTimerFunctions(this, opts);\n this._opts = opts;\n this._method = opts.method || \"GET\";\n this._uri = uri;\n this._data = undefined !== opts.data ? opts.data : null;\n this._create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n _create() {\n var _a;\n const opts = pick(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this._opts.xd;\n const xhr = (this._xhr = this.createRequest(opts));\n try {\n xhr.open(this._method, this._uri, true);\n try {\n if (this._opts.extraHeaders) {\n // @ts-ignore\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this._opts.extraHeaders) {\n if (this._opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this._method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this._opts.withCredentials;\n }\n if (this._opts.requestTimeout) {\n xhr.timeout = this._opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n // @ts-ignore\n xhr.getResponseHeader(\"set-cookie\"));\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this._onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this._data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this._onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this._index = Request.requestsCount++;\n Request.requests[this._index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n _onError(err) {\n this.emitReserved(\"error\", err, this._xhr);\n this._cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n _cleanup(fromError) {\n if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n return;\n }\n this._xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this._xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this._index];\n }\n this._xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n _onLoad() {\n const data = this._xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this._cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this._cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\nconst hasXHR2 = (function () {\n const xhr = newRequest({\n xdomain: false,\n });\n return xhr && xhr.responseType !== null;\n})();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nexport class XHR extends BaseXHR {\n constructor(opts) {\n super(opts);\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd }, this.opts);\n return new Request(newRequest, this.uri(), opts);\n }\n}\nfunction newRequest(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","import { Transport } from \"../transport.js\";\nimport { pick, randomString } from \"../util.js\";\nimport { encodePacket } from \"engine.io-parser\";\nimport { globalThisShim as globalThis, nextTick } from \"../globals.node.js\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class BaseWS extends Transport {\n get name() {\n return \"websocket\";\n }\n doOpen() {\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws = this.createSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, (data) => {\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n this.doWrite(packet, data);\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.onerror = () => { };\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nconst WebSocketCtor = globalThis.WebSocket || globalThis.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nexport class WS extends BaseWS {\n createSocket(uri, protocols, opts) {\n return !isReactNative\n ? protocols\n ? new WebSocketCtor(uri, protocols)\n : new WebSocketCtor(uri)\n : new WebSocketCtor(uri, protocols, opts);\n }\n doWrite(_packet, data) {\n this.ws.send(data);\n }\n}\n","import { XHR } from \"./polling-xhr.node.js\";\nimport { WS } from \"./websocket.node.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n websocket: WS,\n webtransport: WT,\n polling: XHR,\n};\n","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"../globals.node.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream, } from \"engine.io-parser\";\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nexport class WT extends Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n try {\n // @ts-ignore\n this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this._transport.closed\n .then(() => {\n this.onClose();\n })\n .catch((err) => {\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this._transport.ready.then(() => {\n this._transport.createBidirectionalStream().then((stream) => {\n const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = createPacketEncoderStream();\n encoderStream.readable.pipeTo(stream.writable);\n this._writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n return;\n }\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this._writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this._writer.write(packet).then(() => {\n if (lastPacket) {\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n if (str.length > 8000) {\n throw \"URI too long\";\n }\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","import { transports as DEFAULT_TRANSPORTS } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { createCookieJar, defaultBinaryType, nextTick, } from \"./globals.node.js\";\nconst withEventListeners = typeof addEventListener === \"function\" &&\n typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n // script, so we create one single event listener here which will forward the event to the socket instances\n addEventListener(\"offline\", () => {\n OFFLINE_EVENT_LISTENERS.forEach((listener) => listener());\n }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nexport class SocketWithoutUpgrade extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts) {\n super();\n this.binaryType = defaultBinaryType;\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n this._pingInterval = -1;\n this._pingTimeout = -1;\n this._maxPayload = -1;\n /**\n * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n */\n this._pingTimeoutTime = Infinity;\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n const parsedUri = parse(uri);\n opts.hostname = parsedUri.host;\n opts.secure =\n parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n opts.port = parsedUri.port;\n if (parsedUri.query)\n opts.query = parsedUri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = [];\n this._transportsByName = {};\n opts.transports.forEach((t) => {\n const transportName = t.prototype.name;\n this.transports.push(transportName);\n this._transportsByName[transportName] = t;\n });\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n if (withEventListeners) {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this._beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this._offlineEventListener = () => {\n this._onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n }\n }\n if (this.opts.withCredentials) {\n this._cookieJar = createCookieJar();\n }\n this._open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n return new this._transportsByName[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n _open() {\n if (this.transports.length === 0) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n const transportName = this.opts.rememberUpgrade &&\n SocketWithoutUpgrade.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ? \"websocket\"\n : this.transports[0];\n this.readyState = \"opening\";\n const transport = this.createTransport(transportName);\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this._onDrain.bind(this))\n .on(\"packet\", this._onPacket.bind(this))\n .on(\"error\", this._onError.bind(this))\n .on(\"close\", (reason) => this._onClose(\"transport close\", reason));\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n _onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this._sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n this._resetPingTimeout();\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this._onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this._pingInterval = data.pingInterval;\n this._pingTimeout = data.pingTimeout;\n this._maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this._resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n _resetPingTimeout() {\n this.clearTimeoutFn(this._pingTimeoutTimer);\n const delay = this._pingInterval + this._pingTimeout;\n this._pingTimeoutTime = Date.now() + delay;\n this._pingTimeoutTimer = this.setTimeoutFn(() => {\n this._onClose(\"ping timeout\");\n }, delay);\n if (this.opts.autoUnref) {\n this._pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n _onDrain() {\n this.writeBuffer.splice(0, this._prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this._prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this._getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this._prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n _getWritablePackets() {\n const shouldCheckPayloadSize = this._maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this._maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n *\n * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n * `write()` method then the message would not be buffered by the Socket.IO client.\n *\n * @return {boolean}\n * @private\n */\n /* private */ _hasPingExpired() {\n if (!this._pingTimeoutTime)\n return true;\n const hasExpired = Date.now() > this._pingTimeoutTime;\n if (hasExpired) {\n this._pingTimeoutTime = 0;\n nextTick(() => {\n this._onClose(\"ping timeout\");\n }, this.setTimeoutFn);\n }\n return hasExpired;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a message. Alias of {@link Socket#write}.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n send(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n _sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this._onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n _onError(err) {\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n if (this.opts.tryAllTransports &&\n this.transports.length > 1 &&\n this.readyState === \"opening\") {\n this.transports.shift();\n return this._open();\n }\n this.emitReserved(\"error\", err);\n this._onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n _onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this._pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (withEventListeners) {\n if (this._beforeunloadEventListener) {\n removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this._offlineEventListener) {\n const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n if (i !== -1) {\n OFFLINE_EVENT_LISTENERS.splice(i, 1);\n }\n }\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n }\n }\n}\nSocketWithoutUpgrade.protocol = protocol;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\nexport class SocketWithUpgrade extends SocketWithoutUpgrade {\n constructor() {\n super(...arguments);\n this._upgrades = [];\n }\n onOpen() {\n super.onOpen();\n if (\"open\" === this.readyState && this.opts.upgrade) {\n for (let i = 0; i < this._upgrades.length; i++) {\n this._probe(this._upgrades[i]);\n }\n }\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n _probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this._upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n onHandshake(data) {\n this._upgrades = this._filterUpgrades(data.upgrades);\n super.onHandshake(data);\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n _filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n for (let i = 0; i < upgrades.length; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nexport class Socket extends SocketWithUpgrade {\n constructor(uri, opts = {}) {\n const o = typeof uri === \"object\" ? uri : opts;\n if (!o.transports ||\n (o.transports && typeof o.transports[0] === \"string\")) {\n o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"])\n .map((transportName) => DEFAULT_TRANSPORTS[transportName])\n .filter((t) => !!t);\n }\n super(uri, o);\n }\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\",\n \"connect_error\",\n \"disconnect\",\n \"disconnecting\",\n \"newListener\",\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n /**\n * A map containing acknowledgement handlers.\n *\n * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n *\n * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n * - `const value = await socket.emitWithAck(\"test\")`\n *\n * From those that don't:\n *\n * - `socket.emit(\"test\", (value) => { ... });`\n *\n * In the first case, the handlers will be called with an error when:\n *\n * - the timeout is reached\n * - the socket gets disconnected\n *\n * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n * an acknowledgement from the server.\n *\n * @private\n */\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n var _a, _b, _c;\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n const discardPacket = this.flags.volatile && !isTransportWritable;\n if (discardPacket) {\n }\n else if (isConnected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n const fn = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, args);\n };\n fn.withError = true;\n this.acks[id] = fn;\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n return new Promise((resolve, reject) => {\n const fn = (arg1, arg2) => {\n return arg1 ? reject(arg1) : resolve(arg2);\n };\n fn.withError = true;\n args.push(fn);\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n // the packet has already been acknowledged\n return;\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n this._clearAcks();\n }\n /**\n * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n * the server.\n *\n * @private\n */\n _clearAcks() {\n Object.keys(this.acks).forEach((id) => {\n const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id);\n if (!isBuffered) {\n // note: handlers that do not accept an error as first argument are ignored here\n const ack = this.acks[id];\n delete this.acks[id];\n if (ack.withError) {\n ack.call(this, new Error(\"socket has been disconnected\"));\n }\n }\n });\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowledgement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (typeof ack !== \"function\") {\n return;\n }\n delete this.acks[packet.id];\n // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n if (ack.withError) {\n packet.data.unshift(null);\n }\n // @ts-ignore\n ack.apply(this, packet.data);\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n this._drainQueue(true);\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n if (!v) {\n this.skipReconnect = true;\n }\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), \n // @ts-ignore\n on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called when:\n *\n * - the low-level engine is closed\n * - the parser encountered a badly formatted packet\n * - all sockets are disconnected\n *\n * @private\n */\n onclose(reason, description) {\n var _a;\n this.cleanup();\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\nexport { Fetch, NodeXHR, XHR, NodeWebSocket, WebSocket, WebTransport, } from \"engine.io-client\";\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport axios from 'axios';\r\n\r\nconst TicketBoard = ({ \r\n apiKey, \r\n apiUrl, \r\n primaryColor = '#4F46E5',\r\n userData = null,\r\n theme = 'light',\r\n onClose \r\n}) => {\r\n const [activeTab, setActiveTab] = useState('create');\r\n const [tickets, setTickets] = useState([]);\r\n const [selectedTicket, setSelectedTicket] = useState(null);\r\n const [ticketMessages, setTicketMessages] = useState([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [replyText, setReplyText] = useState('');\r\n const [replyHtml, setReplyHtml] = useState('');\r\n const [attachments, setAttachments] = useState([]);\r\n const [fileWarning, setFileWarning] = useState(null);\r\n const [showAlert, setShowAlert] = useState(false);\r\n const [alertMessage, setAlertMessage] = useState('');\r\n const [alertType, setAlertType] = useState('success'); // 'success' or 'error'\r\n const [toasts, setToasts] = useState([]);\r\n const fileInputRef = useRef(null);\r\n const editorRef = useRef(null);\r\n \r\n // Create ticket form state\r\n const [formData, setFormData] = useState({\r\n subject: '',\r\n message: '',\r\n htmlMessage: '',\r\n priority: 'medium',\r\n category: 'general',\r\n attachments: []\r\n });\r\n\r\n const isDark = theme === 'dark' || (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n // File warning popup\r\n const showFileWarning = (message) => {\r\n setFileWarning(message);\r\n setTimeout(() => setFileWarning(null), 4000); // Auto hide after 4 seconds\r\n };\r\n\r\n // Custom alert function\r\n const showCustomAlert = (message, type = 'success') => {\r\n setAlertMessage(message);\r\n setAlertType(type);\r\n setShowAlert(true);\r\n setTimeout(() => {\r\n setShowAlert(false);\r\n setAlertMessage('');\r\n }, 4000);\r\n };\r\n\r\n const showToast = (message, type = 'success') => {\r\n const id = Date.now();\r\n const newToast = { id, message, type };\r\n setToasts(prev => [...prev, newToast]);\r\n \r\n setTimeout(() => {\r\n setToasts(prev => prev.filter(toast => toast.id !== id));\r\n }, 4000);\r\n };\r\n\r\n // Simple rich text toolbar functions\r\n const execCommand = (command, value = null) => {\r\n document.execCommand(command, false, value);\r\n editorRef.current?.focus();\r\n };\r\n\r\n const handleEditorInput = (e) => {\r\n const html = e.target.innerHTML;\r\n const text = e.target.innerText;\r\n setFormData(prev => ({ ...prev, htmlMessage: html, message: text }));\r\n };\r\n\r\n const handleReplyEditorInput = (e) => {\r\n const html = e.target.innerHTML;\r\n const text = e.target.innerText;\r\n setReplyHtml(html);\r\n setReplyText(text);\r\n };\r\n\r\n const handleFileSelect = (e, isReply = false) => {\r\n const files = Array.from(e.target.files);\r\n \r\n // Check total file limit first\r\n const currentAttachments = isReply ? attachments.length : formData.attachments.length;\r\n const totalFiles = currentAttachments + files.length;\r\n \r\n if (totalFiles > 10) {\r\n // Show centered popup warning\r\n showFileWarning(`You can only select up to 10 files total. You have ${currentAttachments} files already selected and are trying to add ${files.length} more.`);\r\n e.target.value = ''; // Clear the file input\r\n return;\r\n }\r\n \r\n const validFiles = files.filter(file => {\r\n // Allowed file types\r\n const allowedTypes = [\r\n // Images\r\n 'image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp', 'image/bmp', 'image/svg+xml',\r\n // PDFs\r\n 'application/pdf',\r\n // Word\r\n 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n // Excel\r\n 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-excel.sheet.macroEnabled.12', 'text/csv',\r\n // PowerPoint\r\n 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n // Text\r\n 'text/plain', 'text/rtf', 'application/rtf',\r\n // Archives\r\n 'application/zip', 'application/x-zip-compressed', 'application/x-rar-compressed', 'application/x-7z-compressed'\r\n ];\r\n \r\n const isUnder10MB = file.size <= 10 * 1024 * 1024;\r\n \r\n if (!isUnder10MB) {\r\n showFileWarning(`File \"${file.name}\" is too large. Maximum size is 10MB per file.`);\r\n return false;\r\n }\r\n \r\n if (!allowedTypes.includes(file.type)) {\r\n showFileWarning(`File \"${file.name}\" is not supported. Allowed: Images, PDF, Word, Excel, PowerPoint, Text files, Archives (ZIP, RAR, 7Z).`);\r\n return false;\r\n }\r\n \r\n return true;\r\n });\r\n\r\n if (isReply) {\r\n setAttachments(prev => [...prev, ...validFiles]);\r\n } else {\r\n setFormData(prev => ({ ...prev, attachments: [...prev.attachments, ...validFiles] }));\r\n }\r\n \r\n // Clear the file input after processing\r\n e.target.value = '';\r\n };\r\n\r\n const removeAttachment = (index, isReply = false) => {\r\n if (isReply) {\r\n setAttachments(prev => prev.filter((_, i) => i !== index));\r\n } else {\r\n setFormData(prev => ({ \r\n ...prev, \r\n attachments: prev.attachments.filter((_, i) => i !== index) \r\n }));\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (activeTab !== 'create' && !selectedTicket) {\r\n fetchTickets();\r\n }\r\n }, [activeTab]);\r\n\r\n useEffect(() => {\r\n if (selectedTicket) {\r\n setTicketMessages([]); // Clear previous messages\r\n fetchTicketMessages(selectedTicket.ticketId);\r\n } else {\r\n setTicketMessages([]);\r\n }\r\n }, [selectedTicket]);\r\n\r\n const fetchTickets = async () => {\r\n setIsLoading(true);\r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail'),\r\n name: localStorage.getItem('chatGuestName')\r\n };\r\n \r\n // Ensure we have a valid email\r\n if (!user.email) {\r\n console.error('No customer email available');\r\n showToast('Please provide your email to view tickets', 'error');\r\n setIsLoading(false);\r\n return;\r\n }\r\n \r\n const response = await axios.get(`${apiUrl}/api/v1/email-ticketing/tickets`, {\r\n headers: { 'x-api-key': apiKey },\r\n params: {\r\n status: 'all', // Show all tickets including closed ones\r\n customerEmail: user.email\r\n },\r\n timeout: 30000 // 30 second timeout\r\n });\r\n \r\n if (response.data.success) {\r\n setTickets(response.data.data.tickets || []);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching tickets:', error);\r\n showToast('Failed to load tickets', 'error');\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const fetchTicketMessages = async (ticketId) => {\r\n setIsLoading(true);\r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail') || 'guest@example.com',\r\n name: localStorage.getItem('chatGuestName') || 'Guest User'\r\n };\r\n\r\n console.log('Fetching messages for ticket:', ticketId, 'user:', user.email);\r\n const response = await axios.get(`${apiUrl}/api/v1/email-ticketing/tickets/${ticketId}/messages`, {\r\n headers: { 'x-api-key': apiKey },\r\n params: { customerEmail: user.email },\r\n timeout: 30000 // 30 second timeout\r\n });\r\n \r\n console.log('Messages response:', response.data);\r\n if (response.data.success) {\r\n setTicketMessages(response.data.messages || []);\r\n console.log('Set messages:', response.data.messages?.length || 0);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching messages:', error);\r\n setTicketMessages([]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleCreateTicket = async (e) => {\r\n e.preventDefault();\r\n setIsLoading(true);\r\n \r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail'),\r\n name: localStorage.getItem('chatGuestName') || 'Guest User'\r\n };\r\n\r\n // Check if user is logged in (has email)\r\n if (!user.email) {\r\n showToast('❌ You can\\'t raise ticket without login', 'error');\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n const customerEmail = user.email;\r\n \r\n // Store email in localStorage for future ticket fetching\r\n if (customerEmail && customerEmail !== 'guest@example.com') {\r\n localStorage.setItem('chatGuestEmail', customerEmail);\r\n }\r\n\r\n const formDataToSend = new FormData();\r\n formDataToSend.append('subject', formData.subject);\r\n formDataToSend.append('message', formData.message);\r\n formDataToSend.append('html', formData.htmlMessage);\r\n formDataToSend.append('priority', formData.priority);\r\n formDataToSend.append('category', formData.category);\r\n formDataToSend.append('customerEmail', customerEmail);\r\n formDataToSend.append('customerName', user.name);\r\n \r\n formData.attachments.forEach((file) => {\r\n formDataToSend.append('attachments', file);\r\n });\r\n\r\n const response = await axios.post(\r\n `${apiUrl}/api/v1/email-ticketing/tickets`,\r\n formDataToSend,\r\n {\r\n headers: { \r\n 'x-api-key': apiKey\r\n },\r\n timeout: 30000 // 30 second timeout\r\n }\r\n );\r\n\r\n console.log('Ticket creation response:', response.data);\r\n if (response.data.success) {\r\n showToast('✅ Ticket created successfully!', 'success');\r\n setFormData({ \r\n subject: '', \r\n message: '', \r\n htmlMessage: '',\r\n priority: 'medium', \r\n category: 'general',\r\n attachments: []\r\n });\r\n if (editorRef.current) editorRef.current.innerHTML = '';\r\n setActiveTab('myTickets');\r\n }\r\n } catch (error) {\r\n console.error('Error creating ticket:', error);\r\n if (error.code === 'ECONNABORTED') {\r\n showToast('⏱️ Server timeout. The server may be waking up. Please wait a moment and try again.', 'error');\r\n } else if (error.response) {\r\n showToast(`❌ Failed to create ticket: ${error.response.data?.message || 'Server error'}`, 'error');\r\n } else if (error.request) {\r\n showToast('❌ Cannot reach server. Please check your connection or try again later.', 'error');\r\n } else {\r\n showToast('❌ Failed to create ticket. Please try again.', 'error');\r\n }\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleSendReply = async (e) => {\r\n e.preventDefault();\r\n if (!replyText.trim() && attachments.length === 0) return;\r\n \r\n setIsLoading(true);\r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail'),\r\n name: localStorage.getItem('chatGuestName')\r\n };\r\n\r\n const formDataToSend = new FormData();\r\n formDataToSend.append('ticketId', selectedTicket.ticketId);\r\n formDataToSend.append('message', replyText);\r\n formDataToSend.append('html', replyHtml);\r\n formDataToSend.append('senderType', 'customer');\r\n formDataToSend.append('customerEmail', user.email);\r\n \r\n attachments.forEach((file) => {\r\n formDataToSend.append('attachments', file);\r\n });\r\n\r\n const response = await axios.post(\r\n `${apiUrl}/api/v1/email-ticketing/tickets/widget/reply`,\r\n formDataToSend,\r\n {\r\n headers: { \r\n 'x-api-key': apiKey\r\n },\r\n timeout: 30000 // 30 second timeout\r\n }\r\n );\r\n\r\n if (response.data.success) {\r\n showToast('✅ Reply sent successfully!', 'success');\r\n setReplyText('');\r\n setReplyHtml('');\r\n setAttachments([]);\r\n if (editorRef.current) editorRef.current.innerHTML = '';\r\n // Refresh messages to show the new reply immediately\r\n setTimeout(() => {\r\n fetchTicketMessages(selectedTicket.ticketId);\r\n }, 500);\r\n }\r\n } catch (error) {\r\n console.error('Error sending reply:', error);\r\n if (error.code === 'ECONNABORTED') {\r\n showToast('⏱️ Request timeout. Server may be starting up. Please try again in 30 seconds.', 'error');\r\n } else if (error.response) {\r\n showToast(`❌ Failed to send reply: ${error.response.data?.message || 'Server error'}`, 'error');\r\n } else if (error.request) {\r\n showToast('❌ Cannot reach server. Please check your connection.', 'error');\r\n } else {\r\n showToast('❌ Failed to send reply. Please try again.', 'error');\r\n }\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const formatDate = (date) => {\r\n return new Date(date).toLocaleDateString('en-US', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n };\r\n\r\n const getStatusColor = (status) => {\r\n switch (status) {\r\n case 'open': return '#10B981';\r\n case 'pending': return '#F59E0B';\r\n case 'closed': return '#6B7280';\r\n default: return '#6B7280';\r\n }\r\n };\r\n\r\n const getPriorityColor = (priority) => {\r\n switch (priority) {\r\n case 'high': return '#EF4444';\r\n case 'medium': return '#F59E0B';\r\n case 'low': return '#10B981';\r\n default: return '#6B7280';\r\n }\r\n };\r\n\r\n const getFileIcon = (contentType) => {\r\n if (contentType.startsWith('image/')) {\r\n return (\r\n <svg style={{ width: '20px', height: '20px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\r\n </svg>\r\n );\r\n }\r\n return (\r\n <svg style={{ width: '20px', height: '20px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\r\n </svg>\r\n );\r\n };\r\n\r\n // Force download via fetch + blob to bypass Cloudinary URL restrictions\r\n const forceDownloadViaBlob = async (url, filename = 'download') => {\r\n try {\r\n if (!url) return;\r\n const safeName = String(filename).replace(/\\s+/g, '_').replace(/[^a-zA-Z0-9._-]/g, '_');\r\n \r\n const response = await fetch(url);\r\n if (!response.ok) throw new Error('Download failed');\r\n const blob = await response.blob();\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = blobUrl;\r\n link.download = safeName;\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(blobUrl);\r\n } catch (e) {\r\n console.error('Blob download failed:', e);\r\n window.open(url, '_blank', 'noopener,noreferrer');\r\n }\r\n };\r\n\r\n const RichTextToolbar = ({ onCommand, showSendButton = false, onSend = null, isLoading = false, canSend = false }) => (\r\n <div style={{\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '8px',\r\n borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#F9FAFB'\r\n }}>\r\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\r\n <button type=\"button\" onClick={() => onCommand('bold')} style={toolbarButtonStyle} title=\"Bold\">\r\n <strong>B</strong>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('italic')} style={toolbarButtonStyle} title=\"Italic\">\r\n <em>I</em>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('underline')} style={toolbarButtonStyle} title=\"Underline\">\r\n <u>U</u>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('strikeThrough')} style={toolbarButtonStyle} title=\"Strikethrough\">\r\n <s>S</s>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('justifyLeft')} style={toolbarButtonStyle} title=\"Align Left\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('justifyCenter')} style={toolbarButtonStyle} title=\"Align Center\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('justifyRight')} style={toolbarButtonStyle} title=\"Align Right\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z\"/>\r\n </svg>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('insertUnorderedList')} style={toolbarButtonStyle} title=\"Bullet List\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('insertOrderedList')} style={toolbarButtonStyle} title=\"Numbered List\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z\"/>\r\n </svg>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('indent')} style={toolbarButtonStyle} title=\"Increase Indent\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('outdent')} style={toolbarButtonStyle} title=\"Decrease Indent\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M3 21h18v-2H3v2zM3 8l4 4 4-4H3zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\"/>\r\n </svg>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('insertHorizontalRule')} style={toolbarButtonStyle} title=\"Insert Line\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 12H4\" />\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => fileInputRef.current?.click()} style={toolbarButtonStyle} title=\"Attach File\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\" />\r\n </svg>\r\n </button>\r\n </div>\r\n \r\n {showSendButton && (\r\n <button\r\n type=\"button\"\r\n onClick={onSend}\r\n disabled={isLoading || !canSend}\r\n style={{\r\n padding: '6px 16px',\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n color: '#fff',\r\n backgroundColor: primaryColor,\r\n border: 'none',\r\n borderRadius: '6px',\r\n cursor: isLoading || !canSend ? 'not-allowed' : 'pointer',\r\n opacity: isLoading || !canSend ? 0.5 : 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n transition: 'all 0.2s'\r\n }}\r\n title={isLoading ? 'Sending...' : 'Send Reply'}\r\n >\r\n {isLoading ? (\r\n <>\r\n <svg style={{ width: '12px', height: '12px', animation: 'spin 1s linear infinite' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\r\n </svg>\r\n Sending...\r\n </>\r\n ) : (\r\n <>\r\n <svg style={{ width: '12px', height: '12px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\" />\r\n </svg>\r\n Send\r\n </>\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n );\r\n\r\n const toolbarButtonStyle = {\r\n background: 'none',\r\n border: 'none',\r\n padding: '6px 10px',\r\n borderRadius: '4px',\r\n cursor: 'pointer',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n fontSize: '14px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'background-color 0.2s',\r\n };\r\n\r\n return (\r\n <>\r\n <style>{`\r\n .ticket-message-content ul,\r\n .ticket-message-content ol {\r\n margin-left: 1.5rem;\r\n margin-top: 0.5rem;\r\n margin-bottom: 0.5rem;\r\n }\r\n .ticket-message-content ul {\r\n list-style-type: disc;\r\n }\r\n .ticket-message-content ol {\r\n list-style-type: decimal;\r\n }\r\n .ticket-message-content li {\r\n margin-bottom: 0.25rem;\r\n }\r\n .ticket-editor[contenteditable] {\r\n max-width: 100%;\r\n word-break: break-word;\r\n overflow-wrap: break-word;\r\n }\r\n .ticket-editor ul,\r\n .ticket-editor ol {\r\n margin-left: 1.5rem;\r\n margin-top: 0.5rem;\r\n margin-bottom: 0.5rem;\r\n }\r\n .ticket-editor ul {\r\n list-style-type: disc;\r\n }\r\n .ticket-editor ol {\r\n list-style-type: decimal;\r\n }\r\n .ticket-editor li {\r\n margin-bottom: 0.25rem;\r\n }\r\n .ticket-editor:empty:before {\r\n content: attr(placeholder);\r\n color: #9CA3AF;\r\n pointer-events: none;\r\n }\r\n @keyframes spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes modalAppear {\r\n from { \r\n transform: scale(0.9);\r\n opacity: 0;\r\n }\r\n to { \r\n transform: scale(1);\r\n opacity: 1;\r\n }\r\n }\r\n @keyframes slideInFromRight {\r\n from {\r\n transform: translateX(100%);\r\n opacity: 0;\r\n }\r\n to {\r\n transform: translateX(0);\r\n opacity: 1;\r\n }\r\n }\r\n @keyframes slideOutToRight {\r\n from {\r\n transform: translateX(0);\r\n opacity: 1;\r\n }\r\n to {\r\n transform: translateX(100%);\r\n opacity: 0;\r\n }\r\n }\r\n `}</style>\r\n <div style={{\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: isDark ? '#111827' : '#F9FAFB',\r\n zIndex: 999999,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden'\r\n }}>\r\n {/* Header */}\r\n <div style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n padding: '8px 16px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)'\r\n }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{\r\n width: '40px',\r\n height: '40px',\r\n borderRadius: '8px',\r\n backgroundColor: primaryColor,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <svg style={{ width: '20px', height: '20px', color: '#fff' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 5v2m0 4v2m0 4v2M5 5a2 2 0 00-2 2v3a2 2 0 110 4v3a2 2 0 002 2h14a2 2 0 002-2v-3a2 2 0 110-4V7a2 2 0 00-2-2H5z\" />\r\n </svg>\r\n </div>\r\n <div>\r\n <h1 style={{ margin: 0, fontSize: '20px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Support Tickets\r\n </h1>\r\n <p style={{ margin: '2px 0 0 0', fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Manage your support requests\r\n </p>\r\n </div>\r\n </div>\r\n <button onClick={onClose} style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '8px',\r\n borderRadius: '8px',\r\n display: 'flex',\r\n color: isDark ? '#9CA3AF' : '#6B7280'\r\n }}>\r\n <svg style={{ width: '24px', height: '24px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Main Content with Sidebar Layout */}\r\n <div style={{ flex: 1, display: 'flex', overflow: 'hidden' }}>\r\n {/* Left Sidebar Navigation */}\r\n <div style={{\r\n width: '200px',\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRight: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: '16px 0'\r\n }}>\r\n <button onClick={() => { setActiveTab('create'); setSelectedTicket(null); }} style={{\r\n padding: '12px 20px',\r\n border: 'none',\r\n backgroundColor: activeTab === 'create' ? `${primaryColor}15` : 'transparent',\r\n cursor: 'pointer',\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n color: activeTab === 'create' ? primaryColor : (isDark ? '#D1D5DB' : '#6B7280'),\r\n textAlign: 'left',\r\n borderLeft: activeTab === 'create' ? `3px solid ${primaryColor}` : '3px solid transparent',\r\n transition: 'all 0.2s'\r\n }}>\r\n Create Ticket\r\n </button>\r\n <button onClick={() => { setActiveTab('myTickets'); setSelectedTicket(null); }} style={{\r\n padding: '12px 20px',\r\n border: 'none',\r\n backgroundColor: activeTab === 'myTickets' ? `${primaryColor}15` : 'transparent',\r\n cursor: 'pointer',\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n color: activeTab === 'myTickets' ? primaryColor : (isDark ? '#D1D5DB' : '#6B7280'),\r\n textAlign: 'left',\r\n borderLeft: activeTab === 'myTickets' ? `3px solid ${primaryColor}` : '3px solid transparent',\r\n transition: 'all 0.2s'\r\n }}>\r\n My Tickets\r\n </button>\r\n </div>\r\n\r\n {/* Right Content Area */}\r\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\r\n {activeTab === 'create' && (\r\n <div style={{ flex: 1, overflow: 'auto', padding: '24px' }}>\r\n <div style={{ maxWidth: '800px', margin: '0 auto' }}>\r\n {/* Check if user is logged in */}\r\n {!(userData?.email || localStorage.getItem('chatGuestEmail')) ? (\r\n <div style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n padding: '48px 24px',\r\n textAlign: 'center',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB'\r\n }}>\r\n <div style={{\r\n width: '80px',\r\n height: '80px',\r\n margin: '0 auto 24px',\r\n borderRadius: '50%',\r\n backgroundColor: '#FEE2E2',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <svg style={{ width: '40px', height: '40px', color: '#EF4444' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\" />\r\n </svg>\r\n </div>\r\n <h2 style={{ \r\n margin: '0 0 12px 0', \r\n fontSize: '20px', \r\n fontWeight: 600, \r\n color: isDark ? '#F9FAFB' : '#111827' \r\n }}>\r\n Login Required\r\n </h2>\r\n <p style={{ \r\n margin: '0 0 24px 0', \r\n fontSize: '14px', \r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n lineHeight: '1.5'\r\n }}>\r\n You can't raise ticket without login. Please login to your account to create support tickets.\r\n </p>\r\n </div>\r\n ) : (\r\n <div style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n padding: '24px',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB'\r\n }}>\r\n <h2 style={{ margin: '0 0 16px 0', fontSize: '18px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Create New Support Ticket\r\n </h2>\r\n <form onSubmit={handleCreateTicket}>\r\n <div style={{ marginBottom: '16px' }}>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Subject *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"subject\"\r\n value={formData.subject}\r\n onChange={(e) => setFormData(prev => ({ ...prev, subject: e.target.value }))}\r\n required\r\n placeholder=\"Brief description of your issue\"\r\n style={{\r\n width: '100%',\r\n padding: '10px 12px',\r\n fontSize: '14px',\r\n borderRadius: '8px',\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n outline: 'none'\r\n }}\r\n />\r\n </div>\r\n\r\n <div style={{ marginBottom: '16px' }}>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Description *\r\n </label>\r\n <div style={{\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n borderRadius: '8px',\r\n overflow: 'hidden'\r\n }}>\r\n <RichTextToolbar onCommand={execCommand} />\r\n <div\r\n ref={editorRef}\r\n className=\"ticket-editor\"\r\n contentEditable\r\n onInput={handleEditorInput}\r\n placeholder=\"Provide detailed information about your issue...\"\r\n style={{\r\n minHeight: '150px',\r\n maxHeight: '300px',\r\n overflowY: 'auto',\r\n padding: '12px',\r\n fontSize: '14px',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n outline: 'none'\r\n }}\r\n />\r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n multiple\r\n accept=\"image/*,.pdf,.doc,.docx,.xls,.xlsx,.xlsm,.csv,.ppt,.pptx,.txt,.rtf,.zip,.rar,.7z\"\r\n onChange={(e) => handleFileSelect(e, false)}\r\n style={{ display: 'none' }}\r\n />\r\n {formData.attachments.length > 0 && (\r\n <div style={{\r\n padding: '8px 12px',\r\n borderTop: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n }}>\r\n {formData.attachments.map((file, i) => (\r\n <div key={i} style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px',\r\n padding: '4px 8px',\r\n borderRadius: '6px',\r\n backgroundColor: isDark ? '#374151' : '#F3F4F6',\r\n fontSize: '12px',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}>\r\n {getFileIcon(file.type)}\r\n <span>{file.name}</span>\r\n <button\r\n type=\"button\"\r\n onClick={() => removeAttachment(i, false)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '2px',\r\n color: '#EF4444'\r\n }}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '16px', marginBottom: '20px' }}>\r\n <div>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Priority\r\n </label>\r\n <select\r\n value={formData.priority}\r\n onChange={(e) => setFormData(prev => ({ ...prev, priority: e.target.value }))}\r\n style={{\r\n width: '100%',\r\n padding: '10px 12px',\r\n fontSize: '14px',\r\n borderRadius: '8px',\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}\r\n >\r\n <option value=\"low\">Low</option>\r\n <option value=\"medium\">Medium</option>\r\n <option value=\"high\">High</option>\r\n </select>\r\n </div>\r\n\r\n <div>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Category\r\n </label>\r\n <select\r\n value={formData.category}\r\n onChange={(e) => setFormData(prev => ({ ...prev, category: e.target.value }))}\r\n style={{\r\n width: '100%',\r\n padding: '10px 12px',\r\n fontSize: '14px',\r\n borderRadius: '8px',\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}\r\n >\r\n <option value=\"general\">General</option>\r\n <option value=\"technical\">Technical Issue</option>\r\n <option value=\"billing\">Billing</option>\r\n <option value=\"feature\">Feature Request</option>\r\n <option value=\"bug\">Bug Report</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || !formData.subject || !formData.message}\r\n style={{\r\n width: '100%',\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600,\r\n color: '#fff',\r\n backgroundColor: primaryColor,\r\n border: 'none',\r\n borderRadius: '8px',\r\n cursor: isLoading ? 'not-allowed' : 'pointer',\r\n opacity: isLoading || !formData.subject || !formData.message ? 0.5 : 1\r\n }}\r\n >\r\n {isLoading ? 'Creating Ticket...' : 'Submit Ticket'}\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* My Tickets View with Three Columns */}\r\n {activeTab === 'myTickets' && (\r\n <div style={{ flex: 1, display: 'flex', overflow: 'hidden' }}>\r\n {/* Left: Ticket List Sidebar - w-80 equivalent (320px) */}\r\n <div style={{\r\n width: '320px',\r\n borderRight: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#F9FAFB',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden'\r\n }}>\r\n <div style={{ padding: '16px', borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB', flexShrink: 0 }}>\r\n <h3 style={{ margin: 0, fontSize: '14px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n My Tickets\r\n </h3>\r\n </div>\r\n <div style={{ flex: 1, overflow: 'auto' }}>\r\n {isLoading ? (\r\n <div style={{ textAlign: 'center', padding: '40px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Loading tickets...\r\n </div>\r\n ) : tickets.length === 0 ? (\r\n <div style={{ textAlign: 'center', padding: '40px' }}>\r\n <p style={{ margin: 0, fontSize: '14px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n No tickets found\r\n </p>\r\n </div>\r\n ) : (\r\n <div style={{ padding: '8px' }}>\r\n {tickets.map((ticket) => {\r\n const hasUnread = ticket.hasUnreadMessages || (ticket.lastActivityAt && new Date(ticket.lastActivityAt) > new Date(ticket.lastViewedAt || 0));\r\n const isActive = selectedTicket && selectedTicket._id === ticket._id;\r\n \r\n return (\r\n <div\r\n key={ticket._id}\r\n onClick={() => setSelectedTicket(ticket)}\r\n style={{\r\n padding: '12px',\r\n marginBottom: '8px',\r\n borderRadius: '8px',\r\n cursor: 'pointer',\r\n backgroundColor: isActive \r\n ? (isDark ? '#374151' : '#fff')\r\n : (isDark ? '#1F2937' : '#fff'),\r\n border: isActive \r\n ? `2px solid ${primaryColor}` \r\n : hasUnread\r\n ? `2px solid ${primaryColor}40`\r\n : isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n transition: 'all 0.2s',\r\n position: 'relative'\r\n }}\r\n >\r\n {hasUnread && (\r\n <div style={{\r\n position: 'absolute',\r\n top: '8px',\r\n right: '8px',\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n backgroundColor: '#EF4444'\r\n }} />\r\n )}\r\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '4px' }}>\r\n <h4 style={{ \r\n margin: 0, \r\n fontSize: '13px', \r\n fontWeight: isActive ? 700 : 600, \r\n color: isDark ? '#F9FAFB' : '#111827',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n flex: 1\r\n }}>\r\n {ticket.subject}\r\n </h4>\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (selectedTicket && selectedTicket._id === ticket._id) {\r\n fetchTicketMessages(ticket.ticketId);\r\n } else {\r\n fetchTickets();\r\n }\r\n }}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n borderRadius: '4px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n display: 'flex',\r\n alignItems: 'center',\r\n opacity: 0.7,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.opacity = '1';\r\n e.target.style.backgroundColor = isDark ? '#374151' : '#F3F4F6';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.opacity = '0.7';\r\n e.target.style.backgroundColor = 'transparent';\r\n }}\r\n title=\"Refresh\"\r\n >\r\n <svg style={{ width: '14px', height: '14px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <p style={{ margin: '0 0 8px 0', fontSize: '11px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {ticket.ticketId}\r\n </p>\r\n <p style={{ margin: '0 0 6px 0', fontSize: '11px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {formatDate(ticket.createdAt)}\r\n </p>\r\n <div style={{ display: 'flex', gap: '4px', flexWrap: 'wrap' }}>\r\n <span style={{\r\n padding: '2px 6px',\r\n fontSize: '10px',\r\n fontWeight: 500,\r\n borderRadius: '4px',\r\n backgroundColor: `${getStatusColor(ticket.status)}20`,\r\n color: getStatusColor(ticket.status)\r\n }}>\r\n {ticket.status}\r\n </span>\r\n <span style={{\r\n padding: '2px 6px',\r\n fontSize: '10px',\r\n fontWeight: 500,\r\n borderRadius: '4px',\r\n backgroundColor: `${getPriorityColor(ticket.priority)}20`,\r\n color: getPriorityColor(ticket.priority)\r\n }}>\r\n {ticket.priority}\r\n </span>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Right: Ticket Detail or Empty State */}\r\n {!selectedTicket ? (\r\n <div style={{ \r\n flex: 1, \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n backgroundColor: isDark ? '#111827' : '#F9FAFB'\r\n }}>\r\n <div style={{ textAlign: 'center', padding: '40px' }}>\r\n <svg style={{ width: '64px', height: '64px', margin: '0 auto 16px', color: isDark ? '#374151' : '#D1D5DB' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\r\n </svg>\r\n <h3 style={{ margin: '0 0 8px 0', fontSize: '18px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Select a ticket\r\n </h3>\r\n <p style={{ margin: 0, fontSize: '14px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Choose a ticket from the list to view details\r\n </p>\r\n </div>\r\n </div>\r\n ) : (\r\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\r\n <div style={{\r\n padding: '8px 16px',\r\n borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#fff'\r\n }}>\r\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\r\n <div style={{ flex: 1 }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '2px' }}>\r\n <h2 style={{ margin: 0, fontSize: '18px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n {selectedTicket.subject}\r\n </h2>\r\n <span style={{\r\n padding: '2px 8px',\r\n fontSize: '11px',\r\n fontWeight: 500,\r\n borderRadius: '4px',\r\n backgroundColor: `${getStatusColor(selectedTicket.status)}20`,\r\n color: getStatusColor(selectedTicket.status)\r\n }}>\r\n {selectedTicket.status}\r\n </span>\r\n </div>\r\n <p style={{ margin: 0, fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {selectedTicket.ticketId}\r\n </p>\r\n </div>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\r\n <button\r\n onClick={() => fetchTicketMessages(selectedTicket.ticketId)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '8px',\r\n borderRadius: '6px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n display: 'flex',\r\n alignItems: 'center',\r\n opacity: 0.8,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.opacity = '1';\r\n e.target.style.backgroundColor = isDark ? '#374151' : '#F3F4F6';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.opacity = '0.8';\r\n e.target.style.backgroundColor = 'transparent';\r\n }}\r\n title=\"Refresh conversation\"\r\n >\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\r\n </svg>\r\n </button>\r\n <button\r\n onClick={() => setSelectedTicket(null)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '8px',\r\n borderRadius: '6px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n display: 'flex',\r\n alignItems: 'center',\r\n opacity: 0.8,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.opacity = '1';\r\n e.target.style.backgroundColor = isDark ? '#374151' : '#F3F4F6';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.opacity = '0.8';\r\n e.target.style.backgroundColor = 'transparent';\r\n }}\r\n title=\"Close\"\r\n >\r\n <svg style={{ width: '18px', height: '18px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style={{ flex: 1, overflow: 'auto', padding: '16px 24px' }}>\r\n {isLoading ? (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '40px 20px',\r\n color: isDark ? '#9CA3AF' : '#6B7280'\r\n }}>\r\n <div style={{\r\n width: '20px',\r\n height: '20px',\r\n border: `2px solid ${primaryColor}`,\r\n borderTop: '2px solid transparent',\r\n borderRadius: '50%',\r\n animation: 'spin 1s linear infinite',\r\n marginRight: '10px'\r\n }}></div>\r\n {replyText.trim() || attachments.length > 0 ? 'Sending reply...' : 'Loading conversation...'}\r\n </div>\r\n ) : ticketMessages.length === 0 ? (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '40px 20px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n textAlign: 'center'\r\n }}>\r\n No messages in this conversation yet.\r\n </div>\r\n ) : (\r\n ticketMessages.map((msg, idx) => (\r\n <div key={msg._id || idx} style={{ marginBottom: '16px', width: '100%' }}>\r\n <div style={{\r\n width: '100%',\r\n backgroundColor: msg.senderType === 'customer' \r\n ? (isDark ? '#1E3A8A20' : '#DBEAFE')\r\n : (isDark ? '#1F2937' : '#F3F4F6'),\r\n borderRadius: '8px',\r\n padding: '12px',\r\n border: isDark \r\n ? (msg.senderType === 'customer' ? '1px solid #1E40AF' : '1px solid #374151')\r\n : (msg.senderType === 'customer' ? '1px solid #93C5FD' : '1px solid #E5E7EB')\r\n }}>\r\n <div style={{\r\n fontSize: '12px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n marginBottom: '8px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n fontWeight: 500\r\n }}>\r\n <span>\r\n {msg.senderType === 'customer' \r\n ? (msg.senderName || 'You')\r\n : (msg.sender?.alias || msg.senderName || 'AGENT').toUpperCase()\r\n }\r\n </span>\r\n <span>{formatDate(msg.createdAt)}</span>\r\n </div>\r\n <div \r\n className=\"ticket-message-content\"\r\n style={{ \r\n color: isDark ? '#F9FAFB' : '#111827',\r\n fontSize: '14px',\r\n lineHeight: '1.5',\r\n wordBreak: 'break-word',\r\n overflowWrap: 'break-word',\r\n whiteSpace: 'pre-wrap'\r\n }}\r\n dangerouslySetInnerHTML={{ __html: msg.html || msg.message }}\r\n />\r\n {msg.attachments && msg.attachments.length > 0 && (\r\n <div style={{ marginTop: '12px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\r\n {msg.attachments.map((att, i) => {\r\n return (\r\n <div key={i} style={{\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n borderRadius: '8px',\r\n overflow: 'hidden'\r\n }}>\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: '8px 12px',\r\n backgroundColor: isDark ? '#111827' : '#F9FAFB'\r\n }}>\r\n <div style={{ \r\n display: 'flex', \r\n alignItems: 'center', \r\n gap: '8px',\r\n flex: 1,\r\n minWidth: 0\r\n }}>\r\n {getFileIcon(att.contentType)}\r\n <span style={{ \r\n fontSize: '12px',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap'\r\n }}>\r\n {att.filename}\r\n </span>\r\n {att.size && (\r\n <span style={{ \r\n color: isDark ? '#9CA3AF' : '#6B7280', \r\n fontSize: '12px',\r\n flexShrink: 0\r\n }}>\r\n ({(att.size / 1024).toFixed(1)} KB)\r\n </span>\r\n )}\r\n </div>\r\n <button\r\n onClick={async (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n try {\r\n const safeName = String(att.filename || 'download').replace(/\\s+/g, '_').replace(/[^a-zA-Z0-9._-]/g, '_');\r\n if (att.url && att.url.includes('cloudinary.com')) {\r\n const endpoint = `${apiUrl}/api/v1/email-ticketing/attachments/download?filename=${encodeURIComponent(safeName)}&url=${encodeURIComponent(att.url)}`;\r\n const link = document.createElement('a');\r\n link.href = endpoint;\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } else if (att.url) {\r\n const link = document.createElement('a');\r\n link.href = att.url;\r\n link.download = safeName;\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n } catch (err) {\r\n console.error('Download failed:', err);\r\n window.open(att.url, '_blank', 'noopener,noreferrer');\r\n }\r\n }}\r\n style={{\r\n marginLeft: '8px',\r\n padding: '4px 8px',\r\n fontSize: '12px',\r\n backgroundColor: primaryColor,\r\n color: '#fff',\r\n borderRadius: '4px',\r\n border: 'none',\r\n cursor: 'pointer',\r\n flexShrink: 0,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => e.target.style.backgroundColor = `${primaryColor}dd`}\r\n onMouseLeave={(e) => e.target.style.backgroundColor = primaryColor}\r\n >\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )))}\r\n </div>\r\n {selectedTicket.status !== 'closed' && (\r\n <div style={{\r\n borderTop: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n padding: '16px 24px'\r\n }}>\r\n <div style={{\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n borderRadius: '8px',\r\n overflow: 'hidden'\r\n }}>\r\n <RichTextToolbar \r\n onCommand={execCommand} \r\n showSendButton={true}\r\n onSend={(e) => {\r\n e.preventDefault();\r\n handleSendReply(e);\r\n }}\r\n isLoading={isLoading}\r\n canSend={replyText.trim() || attachments.length > 0}\r\n />\r\n <div\r\n ref={editorRef}\r\n className=\"ticket-editor\"\r\n contentEditable\r\n onInput={handleReplyEditorInput}\r\n placeholder=\"Type your reply...\"\r\n style={{\r\n minHeight: '100px',\r\n maxHeight: '200px',\r\n overflowY: 'auto',\r\n padding: '12px',\r\n fontSize: '14px',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n outline: 'none'\r\n }}\r\n />\r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n multiple\r\n accept=\"image/*,.pdf,.doc,.docx,.xls,.xlsx,.xlsm,.csv,.ppt,.pptx,.txt,.rtf,.zip,.rar,.7z\"\r\n onChange={(e) => handleFileSelect(e, true)}\r\n style={{ display: 'none' }}\r\n />\r\n {attachments.length > 0 && (\r\n <div style={{\r\n padding: '8px 12px',\r\n borderTop: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n }}>\r\n {attachments.map((file, i) => (\r\n <div key={i} style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px',\r\n padding: '4px 8px',\r\n borderRadius: '6px',\r\n backgroundColor: isDark ? '#374151' : '#F3F4F6',\r\n fontSize: '12px',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}>\r\n {getFileIcon(file.type)}\r\n <span>{file.name}</span>\r\n <button\r\n type=\"button\"\r\n onClick={() => removeAttachment(i, true)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '2px',\r\n color: '#EF4444'\r\n }}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* History View section removed - no longer accessible */}\r\n {false && (\r\n <div style={{ flex: 1, overflow: 'auto', padding: '24px' }}>\r\n <div style={{ maxWidth: '1200px', margin: '0 auto' }}>\r\n {isLoading ? (\r\n <div style={{ textAlign: 'center', padding: '40px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Loading tickets...\r\n </div>\r\n ) : tickets.length === 0 ? (\r\n <div style={{ textAlign: 'center', padding: '40px' }}>\r\n <p style={{ margin: 0, fontSize: '16px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n No tickets found\r\n </p>\r\n </div>\r\n ) : (\r\n <div style={{ display: 'grid', gap: '16px' }}>\r\n {tickets.map((ticket) => {\r\n const hasUnread = ticket.hasUnreadMessages || (ticket.lastActivityAt && new Date(ticket.lastActivityAt) > new Date(ticket.lastViewedAt || 0));\r\n \r\n return (\r\n <div\r\n key={ticket._id}\r\n style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n padding: '20px 24px',\r\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n border: hasUnread\r\n ? `2px solid ${primaryColor}40`\r\n : isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n transition: 'all 0.2s',\r\n position: 'relative'\r\n }}\r\n >\r\n {hasUnread && (\r\n <div style={{\r\n position: 'absolute',\r\n top: '12px',\r\n left: '12px',\r\n width: '10px',\r\n height: '10px',\r\n borderRadius: '50%',\r\n backgroundColor: '#EF4444',\r\n border: '2px solid #fff'\r\n }} />\r\n )}\r\n \r\n {/* Header Section */}\r\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', marginBottom: '12px', paddingLeft: hasUnread ? '16px' : '0' }}>\r\n <div style={{ flex: 1 }}>\r\n <h3 style={{ \r\n margin: '0 0 6px 0', \r\n fontSize: '18px', \r\n fontWeight: hasUnread ? 700 : 600, \r\n color: isDark ? '#F9FAFB' : '#111827',\r\n lineHeight: '1.4'\r\n }}>\r\n {ticket.subject}\r\n </h3>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '4px' }}>\r\n <span style={{ \r\n fontSize: '13px', \r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n fontWeight: 500\r\n }}>\r\n {ticket.ticketId}\r\n </span>\r\n <span style={{ color: isDark ? '#4B5563' : '#D1D5DB' }}>•</span>\r\n <span style={{ fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {formatDate(ticket.createdAt)}\r\n </span>\r\n </div>\r\n {ticket.assignedTo && (\r\n <p style={{ margin: '0', fontSize: '12px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Assigned to: <span style={{ fontWeight: 500 }}>{ticket.assignedTo.alias || ticket.assignedTo.name}</span>\r\n </p>\r\n )}\r\n </div>\r\n <div style={{ display: 'flex', gap: '6px', alignItems: 'center', flexShrink: 0, marginLeft: '16px' }}>\r\n <span style={{\r\n padding: '4px 8px',\r\n fontSize: '11px',\r\n fontWeight: 600,\r\n borderRadius: '4px',\r\n backgroundColor: `${getPriorityColor(ticket.priority)}15`,\r\n color: getPriorityColor(ticket.priority),\r\n border: `1px solid ${getPriorityColor(ticket.priority)}30`\r\n }}>\r\n {ticket.priority.toUpperCase()}\r\n </span>\r\n <span style={{\r\n padding: '4px 8px',\r\n fontSize: '11px',\r\n fontWeight: 600,\r\n borderRadius: '4px',\r\n backgroundColor: `${getStatusColor(ticket.status)}15`,\r\n color: getStatusColor(ticket.status),\r\n border: `1px solid ${getStatusColor(ticket.status)}30`\r\n }}>\r\n {ticket.status.toUpperCase()}\r\n </span>\r\n </div>\r\n </div>\r\n \r\n {/* Email Content Preview */}\r\n {ticket.message && (\r\n <div style={{\r\n backgroundColor: isDark ? '#111827' : '#F8FAFC',\r\n border: isDark ? '1px solid #374151' : '1px solid #E2E8F0',\r\n borderRadius: '8px',\r\n padding: '16px',\r\n marginBottom: '12px'\r\n }}>\r\n <div style={{\r\n fontSize: '12px',\r\n color: isDark ? '#9CA3AF' : '#64748B',\r\n fontWeight: 500,\r\n marginBottom: '8px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px'\r\n }}>\r\n <svg style={{ width: '14px', height: '14px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"/>\r\n </svg>\r\n Original Email Content\r\n </div>\r\n <div \r\n className=\"ticket-message-content\"\r\n style={{\r\n color: isDark ? '#E5E7EB' : '#334155',\r\n fontSize: '14px',\r\n lineHeight: '1.6',\r\n wordBreak: 'break-word',\r\n overflowWrap: 'break-word',\r\n maxHeight: '120px',\r\n overflow: 'hidden',\r\n position: 'relative'\r\n }}\r\n dangerouslySetInnerHTML={{ \r\n __html: (ticket.html || ticket.message || '').length > 300 \r\n ? (ticket.html || ticket.message || '').substring(0, 300) + '...'\r\n : (ticket.html || ticket.message || '')\r\n }}\r\n />\r\n {(ticket.html || ticket.message || '').length > 300 && (\r\n <div style={{\r\n position: 'absolute',\r\n bottom: '0',\r\n right: '0',\r\n background: `linear-gradient(to right, transparent, ${isDark ? '#111827' : '#F8FAFC'})`,\r\n padding: '0 8px',\r\n fontSize: '12px',\r\n color: primaryColor,\r\n fontWeight: 500\r\n }}>\r\n Read more...\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n \r\n {/* Attachments Preview */}\r\n {ticket.attachments && ticket.attachments.length > 0 && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '8px 12px',\r\n backgroundColor: isDark ? '#374151' : '#F1F5F9',\r\n borderRadius: '6px',\r\n marginBottom: '8px'\r\n }}>\r\n <svg style={{ width: '16px', height: '16px', color: isDark ? '#9CA3AF' : '#64748B' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/>\r\n </svg>\r\n <span style={{ fontSize: '12px', color: isDark ? '#D1D5DB' : '#475569', fontWeight: 500 }}>\r\n {ticket.attachments.length} attachment{ticket.attachments.length > 1 ? 's' : ''}\r\n </span>\r\n </div>\r\n )}\r\n \r\n {/* Action Button */}\r\n <button\r\n onClick={() => setSelectedTicket(ticket)}\r\n style={{\r\n width: '100%',\r\n padding: '10px 16px',\r\n fontSize: '13px',\r\n fontWeight: 600,\r\n color: primaryColor,\r\n backgroundColor: 'transparent',\r\n border: `1px solid ${primaryColor}40`,\r\n borderRadius: '6px',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '6px'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.backgroundColor = `${primaryColor}10`;\r\n e.target.style.borderColor = primaryColor;\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.backgroundColor = 'transparent';\r\n e.target.style.borderColor = `${primaryColor}40`;\r\n }}\r\n >\r\n <svg style={{ width: '14px', height: '14px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" />\r\n </svg>\r\n View Full Conversation\r\n </button>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n \r\n </div>\r\n {/* End of Right Content Area */}\r\n </div>\r\n {/* End of Main Content with Sidebar Layout */}\r\n\r\n {/* File Warning Popup - Keep for important file errors */}\r\n {fileWarning && (\r\n <div style={{\r\n position: 'fixed',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 10000,\r\n padding: '20px'\r\n }}>\r\n <div style={{\r\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\r\n color: isDark ? '#f9fafb' : '#111827',\r\n borderRadius: '16px',\r\n padding: '32px 40px',\r\n boxShadow: '0 20px 60px rgba(0, 0, 0, 0.3)',\r\n maxWidth: '500px',\r\n width: '100%',\r\n textAlign: 'center',\r\n border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',\r\n position: 'relative',\r\n transform: 'scale(1)',\r\n animation: 'modalAppear 0.3s ease-out'\r\n }}>\r\n <div style={{\r\n width: '64px',\r\n height: '64px',\r\n borderRadius: '50%',\r\n backgroundColor: '#fef2f2',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto 20px',\r\n border: '3px solid #fee2e2'\r\n }}>\r\n <svg style={{ width: '32px', height: '32px', color: '#ef4444' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\" />\r\n </svg>\r\n </div>\r\n <h3 style={{\r\n color: '#ef4444',\r\n fontSize: '20px',\r\n fontWeight: '700',\r\n marginBottom: '12px',\r\n margin: '0 0 12px 0'\r\n }}>\r\n File Upload Limit Exceeded\r\n </h3>\r\n <p style={{\r\n fontSize: '16px',\r\n lineHeight: '1.6',\r\n color: isDark ? '#d1d5db' : '#6b7280',\r\n marginBottom: '24px',\r\n margin: '0 0 24px 0'\r\n }}>\r\n {fileWarning}\r\n </p>\r\n <div style={{ display: 'flex', gap: '12px', justifyContent: 'center' }}>\r\n <button\r\n onClick={() => setFileWarning(null)}\r\n style={{\r\n padding: '12px 32px',\r\n backgroundColor: '#ef4444',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '8px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n boxShadow: '0 4px 12px rgba(239, 68, 68, 0.3)'\r\n }}\r\n onMouseOver={(e) => {\r\n e.target.style.backgroundColor = '#dc2626';\r\n e.target.style.transform = 'translateY(-1px)';\r\n e.target.style.boxShadow = '0 6px 16px rgba(239, 68, 68, 0.4)';\r\n }}\r\n onMouseOut={(e) => {\r\n e.target.style.backgroundColor = '#ef4444';\r\n e.target.style.transform = 'translateY(0)';\r\n e.target.style.boxShadow = '0 4px 12px rgba(239, 68, 68, 0.3)';\r\n }}\r\n >\r\n Understood\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toast Notifications - Bottom Right */}\r\n {toasts.length > 0 && (\r\n <div style={{\r\n position: 'fixed',\r\n bottom: '20px',\r\n right: '20px',\r\n zIndex: 10001,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n pointerEvents: 'none'\r\n }}>\r\n {toasts.map((toast) => (\r\n <div\r\n key={toast.id}\r\n style={{\r\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\r\n color: isDark ? '#f9fafb' : '#111827',\r\n padding: '16px 20px',\r\n borderRadius: '12px',\r\n boxShadow: '0 8px 25px rgba(0, 0, 0, 0.15)',\r\n border: `2px solid ${toast.type === 'success' ? '#10b981' : '#ef4444'}`,\r\n minWidth: '300px',\r\n maxWidth: '400px',\r\n animation: 'slideInFromRight 0.3s ease-out',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n pointerEvents: 'auto'\r\n }}\r\n >\r\n <div style={{\r\n width: '24px',\r\n height: '24px',\r\n borderRadius: '50%',\r\n backgroundColor: toast.type === 'success' ? '#10b981' : '#ef4444',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0\r\n }}>\r\n {toast.type === 'success' ? (\r\n <svg style={{ width: '14px', height: '14px', color: 'white' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n ) : (\r\n <svg style={{ width: '14px', height: '14px', color: 'white' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n )}\r\n </div>\r\n <div style={{\r\n flex: 1,\r\n fontSize: '14px',\r\n fontWeight: '500',\r\n lineHeight: '1.4'\r\n }}>\r\n {toast.message}\r\n </div>\r\n <button\r\n onClick={() => setToasts(prev => prev.filter(t => t.id !== toast.id))}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n borderRadius: '4px',\r\n color: isDark ? '#9ca3af' : '#6b7280',\r\n flexShrink: 0,\r\n opacity: 0.7,\r\n transition: 'opacity 0.2s'\r\n }}\r\n onMouseEnter={(e) => e.target.style.opacity = '1'}\r\n onMouseLeave={(e) => e.target.style.opacity = '0.7'}\r\n >\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n </div>\r\n {/* End of container */}\r\n </>\r\n );\r\n};\r\n\r\nexport default TicketBoard;\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport './CameraCapture.css';\r\n\r\n/**\r\n * 📸 Camera Capture Component - Redesigned for Better Mobile UX\r\n * \r\n * Features:\r\n * - Large, visible capture button\r\n * - Clear 3-step flow: Camera → Capture → Preview → Submit\r\n * - Mobile-first responsive design\r\n * - Retake functionality\r\n * - Better visual hierarchy\r\n * - No external dependencies\r\n */\r\nconst CameraCapture = ({ onCapture, onClose, requesterName = 'Agent' }) => {\r\n const [stream, setStream] = useState(null);\r\n const [capturedImage, setCapturedImage] = useState(null);\r\n const [cameraActive, setCameraActive] = useState(false);\r\n const [facingMode, setFacingMode] = useState('environment'); // Start with back camera\r\n const [error, setError] = useState(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const videoRef = useRef(null);\r\n const canvasRef = useRef(null);\r\n\r\n useEffect(() => {\r\n startCamera();\r\n return () => {\r\n stopCamera();\r\n };\r\n }, [facingMode]);\r\n\r\n const startCamera = async () => {\r\n try {\r\n setError(null);\r\n setIsLoading(true);\r\n const mediaStream = await navigator.mediaDevices.getUserMedia({\r\n video: { \r\n facingMode,\r\n width: { ideal: 1920 },\r\n height: { ideal: 1080 }\r\n },\r\n audio: false,\r\n });\r\n setStream(mediaStream);\r\n if (videoRef.current) {\r\n videoRef.current.srcObject = mediaStream;\r\n }\r\n setCameraActive(true);\r\n setIsLoading(false);\r\n } catch (err) {\r\n console.error('Camera access error:', err);\r\n setError('Camera access denied. Please allow camera permissions.');\r\n setCameraActive(false);\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const stopCamera = () => {\r\n if (stream) {\r\n stream.getTracks().forEach(track => track.stop());\r\n setStream(null);\r\n setCameraActive(false);\r\n }\r\n };\r\n\r\n const capturePhoto = () => {\r\n if (!videoRef.current || !canvasRef.current) return;\r\n\r\n const video = videoRef.current;\r\n const canvas = canvasRef.current;\r\n const context = canvas.getContext('2d');\r\n\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n\r\n const imageData = canvas.toDataURL('image/jpeg', 0.95);\r\n setCapturedImage(imageData);\r\n stopCamera();\r\n };\r\n\r\n const retakePhoto = () => {\r\n setCapturedImage(null);\r\n startCamera();\r\n };\r\n\r\n const sendPhoto = () => {\r\n if (capturedImage && onCapture) {\r\n onCapture(capturedImage);\r\n handleClose();\r\n }\r\n };\r\n\r\n const toggleCamera = () => {\r\n setFacingMode(prev => prev === 'user' ? 'environment' : 'user');\r\n };\r\n\r\n const handleClose = () => {\r\n stopCamera();\r\n if (onClose) {\r\n onClose();\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"camera-capture-wrapper\">\r\n {/* Header Banner */}\r\n <div className=\"camera-header-banner\">\r\n <div className=\"camera-header-content\">\r\n <div className=\"camera-icon-badge\">📸</div>\r\n <div className=\"camera-header-text\">\r\n <h3 className=\"camera-title\">Camera Capture</h3>\r\n <p className=\"camera-subtitle\">{requesterName} requested a photo</p>\r\n </div>\r\n </div>\r\n <button className=\"camera-close-button\" onClick={handleClose}>\r\n <span>✕</span>\r\n </button>\r\n </div>\r\n\r\n {/* Camera View Area */}\r\n <div className=\"camera-view-container\">\r\n {error ? (\r\n <div className=\"camera-error-state\">\r\n <div className=\"error-icon-large\">📷</div>\r\n <p className=\"error-message\">{error}</p>\r\n <button className=\"retry-button\" onClick={startCamera}>\r\n 🔄 Try Again\r\n </button>\r\n </div>\r\n ) : isLoading ? (\r\n <div className=\"camera-loading-state\">\r\n <div className=\"loading-spinner\"></div>\r\n <p>Loading camera...</p>\r\n </div>\r\n ) : capturedImage ? (\r\n // Preview Mode\r\n <div className=\"camera-preview-mode\">\r\n <div className=\"preview-image-wrapper\">\r\n <img src={capturedImage} alt=\"Captured\" className=\"preview-image\" />\r\n <div className=\"preview-badge\">Preview</div>\r\n </div>\r\n </div>\r\n ) : (\r\n // Live Camera Mode\r\n <div className=\"camera-live-mode\">\r\n <video\r\n ref={videoRef}\r\n autoPlay\r\n playsInline\r\n muted\r\n className=\"camera-video-feed\"\r\n />\r\n <div className=\"camera-overlay\">\r\n <div className=\"camera-frame\"></div>\r\n </div>\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Action Buttons */}\r\n <div className=\"camera-action-section\">\r\n {capturedImage ? (\r\n // Preview Mode Actions\r\n <div className=\"preview-actions\">\r\n <button className=\"action-button retake-button\" onClick={retakePhoto}>\r\n <span className=\"button-icon\">🔄</span>\r\n <span className=\"button-text\">Retake</span>\r\n </button>\r\n <button className=\"action-button submit-button\" onClick={sendPhoto}>\r\n <span className=\"button-icon\">✓</span>\r\n <span className=\"button-text\">Submit Photo</span>\r\n </button>\r\n </div>\r\n ) : (\r\n // Camera Mode Actions\r\n <div className=\"camera-actions\">\r\n <button \r\n className=\"flip-camera-button\" \r\n onClick={toggleCamera}\r\n disabled={!cameraActive}\r\n >\r\n <span className=\"flip-icon\">🔄</span>\r\n <span className=\"flip-text\">Flip</span>\r\n </button>\r\n \r\n <button \r\n className=\"capture-button-main\" \r\n onClick={capturePhoto}\r\n disabled={!cameraActive}\r\n >\r\n <div className=\"capture-button-inner\">\r\n <div className=\"capture-ring\"></div>\r\n <div className=\"capture-center\"></div>\r\n </div>\r\n </button>\r\n\r\n <div className=\"placeholder-space\"></div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Instruction Text */}\r\n {!capturedImage && !error && (\r\n <div className=\"camera-instructions\">\r\n <p>📸 Position and tap the button to capture</p>\r\n </div>\r\n )}\r\n \r\n {capturedImage && (\r\n <div className=\"camera-instructions success\">\r\n <p>✓ Photo captured! Review and submit or retake</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CameraCapture;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport io from 'socket.io-client';\r\nimport axios from 'axios';\r\nimport TicketBoard from './TicketBoard';\r\nimport CameraCapture from './CameraCapture';\r\nimport './styles.css';\r\n\r\nconst ChatCRMWidget = ({ \r\n apiKey, \r\n apiUrl = 'https://chat-crm-backend-7mzo.onrender.com',\r\n primaryColor = '#4F46E5',\r\n position = 'bottom-right',\r\n userData = null,\r\n welcomeMessage = '👋 Welcome! How can we help you today?',\r\n companyName = 'Support',\r\n autoOpen = false,\r\n showNotifications = true,\r\n playSound = false,\r\n theme = 'light',\r\n zIndex = 9999\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(autoOpen);\r\n const [messages, setMessages] = useState([]);\r\n const [input, setInput] = useState('');\r\n const [socket, setSocket] = useState(null);\r\n const [guestId, setGuestId] = useState(null);\r\n const [conversationId, setConversationId] = useState(null);\r\n const [isConnected, setIsConnected] = useState(false);\r\n const [isCreating, setIsCreating] = useState(false);\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [isTyping, setIsTyping] = useState(false);\r\n const [agentName, setAgentName] = useState('Support Agent');\r\n const [unreadCount, setUnreadCount] = useState(0);\r\n const [hasInitialized, setHasInitialized] = useState(false);\r\n const [queryStatus, setQueryStatus] = useState('active'); // active, resolved\r\n const [snapshotRequest, setSnapshotRequest] = useState(null);\r\n const [isCapturing, setIsCapturing] = useState(false);\r\n const [showCamera, setShowCamera] = useState(false);\r\n const [currentStream, setCurrentStream] = useState(null);\r\n const [capturedImage, setCapturedImage] = useState(null);\r\n const videoRef = useRef(null);\r\n const canvasRef = useRef(null);\r\n // Feedback states\r\n const [showFeedback, setShowFeedback] = useState(false);\r\n const [feedbackRating, setFeedbackRating] = useState(0);\r\n const [feedbackComment, setFeedbackComment] = useState('');\r\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\r\n const [isSubmittingFeedback, setIsSubmittingFeedback] = useState(false);\r\n // Help & Support menu states\r\n const [showMenu, setShowMenu] = useState(false);\r\n const [activeView, setActiveView] = useState(null); // 'query', 'ticket'\r\n const [photoRequests, setPhotoRequests] = useState([]); // Track photo requests\r\n // Prevent duplicate system banners like \"query resolved\" being added multiple times\r\n const hasShownResolvedRef = useRef(false);\r\n const messagesEndRef = useRef(null);\r\n const widgetRef = useRef(null);\r\n const buttonRef = useRef(null);\r\n const menuRef = useRef(null);\r\n\r\n // Close when clicking outside widget (button + window)\r\n useEffect(() => {\r\n const handleOutside = (e) => {\r\n if (!isOpen) return;\r\n const w = widgetRef.current;\r\n const b = buttonRef.current;\r\n const m = menuRef.current;\r\n if (w && !w.contains(e.target) && b && !b.contains(e.target) && (!m || !m.contains(e.target))) {\r\n setIsOpen(false);\r\n setShowMenu(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleOutside);\r\n document.addEventListener('touchstart', handleOutside);\r\n return () => {\r\n document.removeEventListener('mousedown', handleOutside);\r\n document.removeEventListener('touchstart', handleOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n // Auto-scroll to bottom\r\n const scrollToBottom = () => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n };\r\n\r\n useEffect(() => {\r\n scrollToBottom();\r\n }, [messages]);\r\n\r\n // Manage socket lifecycle on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (socket) {\r\n socket.disconnect();\r\n }\r\n };\r\n }, [socket]);\r\n\r\n // Auto-detect user information from website\r\n const detectUserInfo = () => {\r\n const detected = { name: null, email: null, phone: null };\r\n\r\n // Try to detect user name from various possible fields\r\n const nameSelectors = [\r\n // Common name field patterns\r\n '[name=\"firstName\"], [name=\"firstname\"], [name=\"FirstName\"], [name=\"FIRSTNAME\"]',\r\n '[name=\"lastName\"], [name=\"lastname\"], [name=\"LastName\"], [name=\"LASTNAME\"]',\r\n '[name=\"fullName\"], [name=\"fullname\"], [name=\"FullName\"], [name=\"FULLNAME\"]',\r\n '[name=\"userName\"], [name=\"username\"], [name=\"UserName\"], [name=\"USERNAME\"]',\r\n '[name=\"displayName\"], [name=\"display_name\"]',\r\n '[name=\"name\"], [name=\"Name\"], [name=\"NAME\"]',\r\n \r\n // ID-based selectors\r\n '#firstName, #firstname, #FirstName, #FIRSTNAME',\r\n '#lastName, #lastname, #LastName, #LASTNAME',\r\n '#fullName, #fullname, #FullName, #FULLNAME',\r\n '#userName, #username, #UserName, #USERNAME',\r\n '#displayName, #display_name',\r\n '#name, #Name, #NAME',\r\n \r\n // Class-based selectors\r\n '.firstName, .firstname, .FirstName, .FIRSTNAME',\r\n '.lastName, .lastname, .LastName, .LASTNAME',\r\n '.fullName, .fullname, .FullName, .FULLNAME',\r\n '.userName, .username, .UserName, .USERNAME',\r\n '.displayName, .display_name',\r\n '.name, .Name, .NAME',\r\n \r\n // Data attribute selectors\r\n '[data-name], [data-user-name], [data-full-name], [data-display-name]',\r\n \r\n // Common profile selectors\r\n '.profile-name, .user-name, .username, .full-name',\r\n '.header-name, .nav-name, .account-name',\r\n \r\n // Meta tags\r\n 'meta[name=\"user-name\"], meta[property=\"user:name\"]'\r\n ];\r\n\r\n // Try to detect email\r\n const emailSelectors = [\r\n '[name=\"email\"], [name=\"Email\"], [name=\"EMAIL\"]',\r\n '[type=\"email\"]',\r\n '#email, #Email, #EMAIL',\r\n '.email, .Email, .EMAIL',\r\n '[data-email]',\r\n 'meta[name=\"user-email\"], meta[property=\"user:email\"]'\r\n ];\r\n\r\n // Try to detect phone\r\n const phoneSelectors = [\r\n '[name=\"phone\"], [name=\"Phone\"], [name=\"PHONE\"]',\r\n '[name=\"phoneNumber\"], [name=\"phone_number\"]',\r\n '[type=\"tel\"]',\r\n '#phone, #Phone, #PHONE',\r\n '.phone, .Phone, .PHONE',\r\n '[data-phone]'\r\n ];\r\n\r\n // Helper function to get value from element\r\n const getValue = (element) => {\r\n if (!element) return null;\r\n \r\n // For meta tags\r\n if (element.tagName === 'META') {\r\n return element.getAttribute('content') || null;\r\n }\r\n \r\n // For form inputs\r\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {\r\n return element.value || element.getAttribute('value') || element.getAttribute('placeholder') || null;\r\n }\r\n \r\n // For data attributes\r\n const dataValue = element.getAttribute('data-name') || \r\n element.getAttribute('data-user-name') || \r\n element.getAttribute('data-full-name') ||\r\n element.getAttribute('data-display-name') ||\r\n element.getAttribute('data-email') ||\r\n element.getAttribute('data-phone');\r\n if (dataValue) return dataValue;\r\n \r\n // For regular elements with text content\r\n return element.textContent?.trim() || element.innerText?.trim() || null;\r\n };\r\n\r\n // Detect name\r\n let firstName = null, lastName = null, fullName = null;\r\n \r\n for (const selector of nameSelectors) {\r\n try {\r\n const elements = document.querySelectorAll(selector);\r\n for (const element of elements) {\r\n const value = getValue(element);\r\n if (value && value.length > 1 && value !== 'Guest User') {\r\n // Check if it's a firstName field\r\n if (selector.toLowerCase().includes('firstname') && !firstName) {\r\n firstName = value;\r\n }\r\n // Check if it's a lastName field \r\n else if (selector.toLowerCase().includes('lastname') && !lastName) {\r\n lastName = value;\r\n }\r\n // Check if it's a fullName field\r\n else if ((selector.toLowerCase().includes('fullname') || \r\n selector.toLowerCase().includes('username') ||\r\n selector.toLowerCase().includes('displayname') ||\r\n selector.toLowerCase().includes('name')) && !fullName) {\r\n fullName = value;\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // Continue on selector error\r\n }\r\n }\r\n\r\n // Construct name from detected parts\r\n if (firstName && lastName) {\r\n detected.name = `${firstName} ${lastName}`;\r\n } else if (firstName) {\r\n detected.name = firstName;\r\n } else if (lastName) {\r\n detected.name = lastName;\r\n } else if (fullName) {\r\n detected.name = fullName;\r\n }\r\n\r\n // Detect email\r\n for (const selector of emailSelectors) {\r\n try {\r\n const element = document.querySelector(selector);\r\n const value = getValue(element);\r\n if (value && value.includes('@')) {\r\n detected.email = value;\r\n break;\r\n }\r\n } catch (e) {\r\n // Continue on selector error\r\n }\r\n }\r\n\r\n // Detect phone\r\n for (const selector of phoneSelectors) {\r\n try {\r\n const element = document.querySelector(selector);\r\n const value = getValue(element);\r\n if (value && /[\\d\\+\\-\\(\\)\\s]{10,}/.test(value)) {\r\n detected.phone = value;\r\n break;\r\n }\r\n } catch (e) {\r\n // Continue on selector error\r\n }\r\n }\r\n\r\n return detected;\r\n };\r\n\r\n // Get user data (from prop, auto-detection, or localStorage)\r\n const getUserData = () => {\r\n if (userData) {\r\n return {\r\n name: userData.name || 'Guest User',\r\n email: userData.email || null,\r\n phone: userData.phone || null,\r\n userId: userData.userId || null,\r\n };\r\n }\r\n \r\n // Try auto-detection first\r\n const detected = detectUserInfo();\r\n \r\n // Use detected info or fallback to localStorage\r\n return {\r\n name: detected.name || localStorage.getItem('chatGuestName') || 'Guest User',\r\n email: detected.email || localStorage.getItem('chatGuestEmail') || null,\r\n phone: detected.phone || localStorage.getItem('chatGuestPhone') || null,\r\n userId: localStorage.getItem('chatUserId') || null,\r\n };\r\n };\r\n\r\n // Create conversation on demand (first send)\r\n const createConversation = async () => {\r\n const user = getUserData();\r\n setIsCreating(true);\r\n try {\r\n console.log('🚀 Creating new conversation for first message...');\r\n const response = await axios.post(`${apiUrl}/api/v1/webhook/guest-conversation`, {\r\n apiKey,\r\n guestName: user.name,\r\n guestEmail: user.email,\r\n guestPhone: user.phone,\r\n customUserId: user.userId,\r\n });\r\n if (response.data.success) {\r\n const { conversationId: newConvId, petitionId, queryId } = response.data;\r\n setGuestId(queryId);\r\n setConversationId(newConvId);\r\n setHasInitialized(true);\r\n localStorage.setItem('chatGuestId', queryId);\r\n localStorage.setItem('chatConversationId', newConvId);\r\n localStorage.setItem('chatPetitionId', petitionId);\r\n // Store user info for ticket system\r\n if (user.email) localStorage.setItem('chatGuestEmail', user.email);\r\n if (user.name) localStorage.setItem('chatGuestName', user.name);\r\n if (user.phone) localStorage.setItem('chatGuestPhone', user.phone);\r\n console.log('✅ Conversation created:', { petitionId, queryId });\r\n return { newConvId, petitionId };\r\n }\r\n throw new Error('Failed to create conversation');\r\n } catch (error) {\r\n console.error('❌ Create conversation error:', error);\r\n throw error;\r\n } finally {\r\n setIsCreating(false);\r\n }\r\n };\r\n\r\n // Connect socket on demand\r\n const connectSocket = async ({ convId, petitionId }) => {\r\n setIsConnecting(true);\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const newSocket = io(`${apiUrl}/widget`, {\r\n query: { conversationId: convId, petitionId, apiKey },\r\n transports: ['websocket', 'polling']\r\n });\r\n\r\n newSocket.on('connect', () => {\r\n setIsConnected(true);\r\n setIsConnecting(false);\r\n console.log('✅ Connected to Chat CRM Widget Namespace');\r\n resolve(newSocket);\r\n });\r\n\r\n newSocket.on('connect_error', (err) => {\r\n setIsConnecting(false);\r\n console.error('❌ Socket connect_error:', err?.message || err);\r\n });\r\n\r\n newSocket.on('error', (err) => {\r\n console.error('❌ Socket error:', err);\r\n });\r\n\r\n newSocket.on('disconnect', () => {\r\n setIsConnected(false);\r\n console.log('❌ Disconnected from Chat CRM');\r\n });\r\n\r\n newSocket.on('new-message', (data) => {\r\n console.log('📨 Received new-message:', data);\r\n const incomingMessage = {\r\n message: data.message || data.text || '',\r\n sender: data.sender || 'agent',\r\n senderName: data.senderName || 'Support Agent',\r\n timestamp: data.timestamp || new Date(),\r\n read: false,\r\n };\r\n setMessages((prev) => {\r\n const newMessages = [...prev, incomingMessage];\r\n \r\n // Auto-detect photo request\r\n if (incomingMessage.sender !== 'guest' && \r\n incomingMessage.message &&\r\n (incomingMessage.message.toLowerCase().includes('requested a photo') ||\r\n incomingMessage.message.toLowerCase().includes('send a photo') ||\r\n incomingMessage.message.toLowerCase().includes('send photo'))) {\r\n // Add to photo requests\r\n setPhotoRequests(prevReqs => {\r\n const newIndex = newMessages.length - 1;\r\n if (!prevReqs.includes(newIndex)) {\r\n return [...prevReqs, newIndex];\r\n }\r\n return prevReqs;\r\n });\r\n }\r\n \r\n return newMessages;\r\n });\r\n setAgentName((data.senderName || 'Support Agent').toUpperCase()); // Update agent name on each message\r\n setIsTyping(false);\r\n if (!isOpen && showNotifications) {\r\n setUnreadCount(prev => prev + 1);\r\n if (playSound) playNotificationSound();\r\n }\r\n });\r\n\r\n newSocket.on('query-accepted', (data) => {\r\n console.log('✅ Query accepted by agent:', data);\r\n const agentName = (data.agentName || 'Support Agent').toUpperCase();\r\n setAgentName(agentName);\r\n setQueryStatus('active');\r\n setMessages((prev) => [...prev, {\r\n message: `${agentName} has accepted your query and will assist you now.`,\r\n sender: 'system',\r\n timestamp: new Date(),\r\n read: true\r\n }]);\r\n });\r\n\r\n newSocket.on('query-transferred', (data) => {\r\n console.log('🔄 Query transferred:', data);\r\n const toAgentName = (data.toAgentName || 'Support Agent').toUpperCase();\r\n setAgentName(toAgentName);\r\n setMessages((prev) => [...prev, {\r\n message: `Your query has been escalated and will be assisted shortly.`,\r\n sender: 'system',\r\n timestamp: new Date(),\r\n read: true\r\n }]);\r\n });\r\n\r\n newSocket.on('query-resolved', (data) => {\r\n console.log('✅ Query resolved:', data);\r\n setQueryStatus('resolved');\r\n // Only add the resolved system message once per query\r\n if (!hasShownResolvedRef.current) {\r\n hasShownResolvedRef.current = true;\r\n setMessages((prev) => [...prev, {\r\n message: '✅ This query has been resolved by the agent.',\r\n sender: 'system',\r\n timestamp: new Date(),\r\n read: true\r\n }]);\r\n } else {\r\n console.log('🔁 Skipping duplicate resolved system message');\r\n }\r\n });\r\n\r\n // Request customer feedback after resolution\r\n newSocket.on('request-feedback', (data) => {\r\n console.log('📝 Feedback requested:', data);\r\n setShowFeedback(true);\r\n });\r\n\r\n // Agent requests camera snapshot\r\n newSocket.on('request-camera-snapshot', (data) => {\r\n console.log('📸 Snapshot request received:', data);\r\n try {\r\n const lp = localStorage.getItem('chatPetitionId');\r\n console.log('📸 Checking petitionId match:', { received: data?.petitionId, stored: lp });\r\n if (data?.petitionId && lp && data.petitionId === lp) {\r\n console.log('✅ PetitionId match - showing camera');\r\n setSnapshotRequest({ requesterName: data.requesterName || data.requester?.name || 'Agent', at: Date.now() });\r\n } else {\r\n console.log('❌ PetitionId mismatch or missing');\r\n }\r\n } catch (err) {\r\n console.error('Snapshot request error:', err);\r\n }\r\n });\r\n\r\n newSocket.on('query-reopened', (data) => {\r\n console.log('🔄 Query reopened:', data);\r\n setQueryStatus('active');\r\n // Allow resolved banner to show again after a reopen\r\n hasShownResolvedRef.current = false;\r\n });\r\n\r\n // Agent typing indicator with auto-clear\r\n let typingTimeout;\r\n newSocket.on('agent-typing', (data) => {\r\n if (data.isTyping) {\r\n setIsTyping(true);\r\n setAgentName(data.agentName || 'Support Agent');\r\n \r\n // Clear existing timeout\r\n if (typingTimeout) clearTimeout(typingTimeout);\r\n \r\n // Auto-clear after 3 seconds of no updates\r\n typingTimeout = setTimeout(() => {\r\n setIsTyping(false);\r\n }, 3000);\r\n } else {\r\n setIsTyping(false);\r\n if (typingTimeout) clearTimeout(typingTimeout);\r\n }\r\n });\r\n\r\n setSocket(newSocket);\r\n } catch (e) {\r\n setIsConnecting(false);\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.value;\r\n setInput(value);\r\n\r\n // Emit typing indicator\r\n if (value.trim() && socket && localStorage.getItem('chatPetitionId')) {\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n const user = getUserData();\r\n socket.emit('customer-typing', {\r\n petitionId,\r\n userName: user.name || 'Customer',\r\n isTyping: true\r\n });\r\n }\r\n };\r\n\r\n const sendMessage = async () => {\r\n if (!input.trim() || queryStatus === 'resolved') return;\r\n\r\n // Stop typing indicator\r\n if (socket && localStorage.getItem('chatPetitionId')) {\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n socket.emit('customer-typing', {\r\n petitionId,\r\n isTyping: false\r\n });\r\n }\r\n\r\n const user = getUserData();\r\n const text = input.trim();\r\n\r\n // Optimistic UI update - Add unique ID to track our own messages\r\n const tempId = Date.now();\r\n setMessages((prev) => [...prev, { \r\n message: text, \r\n sender: 'guest', \r\n senderName: user.name || 'Guest User',\r\n read: true, \r\n timestamp: new Date(),\r\n tempId // Mark as our own message\r\n }]);\r\n setInput('');\r\n\r\n try {\r\n // Ensure we have a conversation and a connected socket\r\n let petitionId = localStorage.getItem('chatPetitionId');\r\n let convId = conversationId || localStorage.getItem('chatConversationId');\r\n\r\n if (!petitionId || !convId) {\r\n const created = await createConversation();\r\n convId = created.newConvId;\r\n petitionId = created.petitionId;\r\n }\r\n\r\n let activeSocket = socket;\r\n if (!activeSocket || !isConnected) {\r\n // Ensure any stale socket is fully disconnected to avoid duplicate listeners\r\n try { socket && socket.disconnect(); } catch (e) { /* noop */ }\r\n activeSocket = await connectSocket({ convId, petitionId });\r\n }\r\n\r\n const messageData = {\r\n conversationId: convId,\r\n petitionId,\r\n message: text,\r\n senderName: user.name || 'Guest User',\r\n senderType: 'Customer',\r\n timestamp: new Date()\r\n };\r\n\r\n console.log('📤 Sending message:', messageData);\r\n activeSocket.emit('widget-message', messageData);\r\n } catch (error) {\r\n console.error('❌ Send message error:', error);\r\n // Remove the optimistic message on error\r\n setMessages((prev) => prev.filter(m => m.tempId !== tempId));\r\n alert('Failed to send message. Please try again.');\r\n }\r\n };\r\n\r\n const startNewQuery = () => {\r\n // Clear current conversation\r\n localStorage.removeItem('chatGuestId');\r\n localStorage.removeItem('chatConversationId');\r\n localStorage.removeItem('chatPetitionId');\r\n \r\n // Disconnect socket\r\n if (socket) {\r\n socket.disconnect();\r\n }\r\n \r\n // Reset state\r\n setSocket(null);\r\n setGuestId(null);\r\n setConversationId(null);\r\n setIsConnected(false);\r\n setHasInitialized(false);\r\n setQueryStatus('active');\r\n hasShownResolvedRef.current = false; // reset banner control for the next query\r\n setMessages([]);\r\n setInput('');\r\n // Reset feedback\r\n setShowFeedback(false);\r\n setFeedbackRating(0);\r\n setFeedbackComment('');\r\n setFeedbackSubmitted(false);\r\n \r\n console.log('🆕 Starting new query...');\r\n };\r\n\r\n const submitFeedback = () => {\r\n if (!feedbackRating || feedbackSubmitted || isSubmittingFeedback) return;\r\n \r\n setIsSubmittingFeedback(true);\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n \r\n if (socket && petitionId) {\r\n socket.emit('submit-feedback', {\r\n petitionId,\r\n rating: feedbackRating,\r\n comment: feedbackComment.trim()\r\n });\r\n\r\n console.log('📤 Feedback submitted:', { rating: feedbackRating, comment: feedbackComment });\r\n \r\n setFeedbackSubmitted(true);\r\n setIsSubmittingFeedback(false);\r\n \r\n // Hide feedback form after 2 seconds\r\n setTimeout(() => {\r\n setShowFeedback(false);\r\n }, 2000);\r\n } else {\r\n setIsSubmittingFeedback(false);\r\n }\r\n };\r\n\r\n const handleKeyPress = (e) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n sendMessage();\r\n }\r\n };\r\n\r\n const handleOpenToggle = () => {\r\n setIsOpen(prev => {\r\n const next = !prev;\r\n if (next) {\r\n setUnreadCount(0);\r\n setShowMenu(true);\r\n setActiveView(null);\r\n } else {\r\n setShowMenu(false);\r\n setActiveView(null);\r\n }\r\n return next;\r\n });\r\n };\r\n\r\n const handleMenuSelect = (view) => {\r\n // Check if user is trying to raise ticket without being logged in\r\n if (view === 'ticket') {\r\n const userEmail = userData?.email || localStorage.getItem('chatGuestEmail');\r\n if (!userEmail) {\r\n // Don't open ticket board, user will see message there\r\n setActiveView(view);\r\n setShowMenu(false);\r\n return;\r\n }\r\n }\r\n setActiveView(view);\r\n setShowMenu(false);\r\n };\r\n\r\n const playNotificationSound = () => {\r\n // Simple notification sound using Web Audio API\r\n const audioContext = new (window.AudioContext || window.webkitAudioContext)();\r\n const oscillator = audioContext.createOscillator();\r\n const gainNode = audioContext.createGain();\r\n \r\n oscillator.connect(gainNode);\r\n gainNode.connect(audioContext.destination);\r\n \r\n oscillator.frequency.value = 800;\r\n oscillator.type = 'sine';\r\n gainNode.gain.value = 0.1;\r\n \r\n oscillator.start();\r\n setTimeout(() => oscillator.stop(), 200);\r\n };\r\n\r\n const formatTime = (date) => {\r\n return new Date(date).toLocaleTimeString('en-US', { \r\n hour: '2-digit', \r\n minute: '2-digit' \r\n });\r\n };\r\n\r\n // Camera Management Functions\r\n const initializeCamera = async () => {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' } });\r\n setCurrentStream(stream);\r\n if (videoRef.current) {\r\n videoRef.current.srcObject = stream;\r\n videoRef.current.play();\r\n }\r\n } catch (err) {\r\n console.error('Camera access error:', err);\r\n alert('Camera access denied. Please allow camera permissions.');\r\n closeCameraInterface();\r\n }\r\n };\r\n\r\n const capturePhoto = () => {\r\n if (!videoRef.current || !canvasRef.current) return;\r\n const video = videoRef.current;\r\n const canvas = canvasRef.current;\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext('2d');\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n const imageData = canvas.toDataURL('image/png');\r\n setCapturedImage(imageData);\r\n // Stop the stream after capture\r\n if (currentStream) {\r\n currentStream.getTracks().forEach(track => track.stop());\r\n setCurrentStream(null);\r\n }\r\n };\r\n\r\n const retakePhoto = async () => {\r\n setCapturedImage(null);\r\n await initializeCamera();\r\n };\r\n\r\n const submitPhoto = async () => {\r\n if (!capturedImage) return;\r\n setIsCapturing(true);\r\n try {\r\n const blob = await fetch(capturedImage).then(r => r.blob());\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n const form = new FormData();\r\n const filename = `snapshot-${petitionId}-${Date.now()}.png`;\r\n form.append('screenshot', blob, filename);\r\n form.append('petitionId', petitionId);\r\n form.append('apiKey', apiKey);\r\n form.append('metadata', JSON.stringify({ source: 'widget', requesterName: snapshotRequest?.requesterName }));\r\n\r\n const uploadRes = await axios.post(`${apiUrl}/api/v1/webhook/upload-snapshot`, form, { \r\n headers: { 'Content-Type': 'multipart/form-data' } \r\n });\r\n const imageUrl = uploadRes?.data?.data?.imageUrl;\r\n\r\n if (imageUrl) {\r\n const ts = new Date();\r\n setMessages(prev => [...prev, { \r\n message: `📸 Screenshot: ${imageUrl}`, \r\n sender: 'guest', \r\n senderName: 'You', \r\n timestamp: ts, \r\n read: true \r\n }]);\r\n await axios.post(`${apiUrl}/api/v1/webhook/send-message`, {\r\n apiKey,\r\n petitionId,\r\n message: `📸 Screenshot: ${imageUrl}`,\r\n senderName: 'Guest User'\r\n });\r\n }\r\n closeCameraInterface();\r\n } catch (err) {\r\n console.error('Widget capture error:', err);\r\n alert('Failed to upload photo. Please try again.');\r\n } finally {\r\n setIsCapturing(false);\r\n }\r\n };\r\n\r\n const closeCameraInterface = () => {\r\n if (currentStream) {\r\n currentStream.getTracks().forEach(track => track.stop());\r\n setCurrentStream(null);\r\n }\r\n setShowCamera(false);\r\n setCapturedImage(null);\r\n setSnapshotRequest(null);\r\n };\r\n\r\n // Handle snapshot request from agent\r\n useEffect(() => {\r\n console.log('📸 Snapshot useEffect triggered:', { snapshotRequest, showCamera });\r\n if (snapshotRequest && !showCamera) {\r\n console.log('📸 Setting showCamera to true and initializing camera');\r\n setShowCamera(true);\r\n setTimeout(() => {\r\n console.log('📸 Calling initializeCamera');\r\n initializeCamera();\r\n }, 100);\r\n }\r\n }, [snapshotRequest, showCamera]);\r\n\r\n // Ensure camera starts when video element is ready\r\n useEffect(() => {\r\n console.log('📸 Video ref useEffect:', { showCamera, hasVideoRef: !!videoRef.current, currentStream, capturedImage });\r\n if (showCamera && videoRef.current && !currentStream && !capturedImage) {\r\n console.log('📸 Reinitializing camera from video ref useEffect');\r\n initializeCamera();\r\n }\r\n }, [showCamera, videoRef.current]);\r\n\r\n // Position classes\r\n const getPositionClasses = () => {\r\n const positions = {\r\n 'bottom-right': 'crm-bottom-6 crm-right-6',\r\n 'bottom-left': 'crm-bottom-6 crm-left-6',\r\n 'top-right': 'crm-top-6 crm-right-6',\r\n 'top-left': 'crm-top-6 crm-left-6',\r\n };\r\n return positions[position] || positions['bottom-right'];\r\n };\r\n\r\n const isDark = theme === 'dark' || (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n return (\r\n <div className=\"crm-widget-container\" style={{ zIndex }}>\r\n {/* Floating Help & Support Button */}\r\n <button\r\n ref={buttonRef}\r\n onClick={handleOpenToggle}\r\n className={`crm-chat-button ${getPositionClasses()}`}\r\n style={{ background: `linear-gradient(135deg, ${primaryColor} 0%, #6366f1 100%)` }}\r\n aria-label={isOpen ? 'Close help' : 'Help & Support'}\r\n title=\"Help & Support\"\r\n >\r\n {isOpen && !showMenu ? (\r\n <svg className=\"crm-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n ) : (\r\n <svg className=\"crm-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M18 3a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-5l-5 3v-3H6a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h12z\"/>\r\n <circle cx=\"9\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\r\n <circle cx=\"12\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\r\n <circle cx=\"15\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 14c.5.5 1.5 1 3 1s2.5-.5 3-1\"/>\r\n </svg>\r\n )}\r\n \r\n {/* Notification badge */}\r\n {!isOpen && unreadCount > 0 && (\r\n <span className=\"crm-badge\">\r\n {unreadCount}\r\n </span>\r\n )}\r\n </button>\r\n\r\n {/* Help & Support Menu */}\r\n {isOpen && showMenu && (\r\n <div \r\n ref={menuRef}\r\n className={`crm-menu-popup ${getPositionClasses()} ${isDark ? 'crm-dark' : ''}`}\r\n style={{ \r\n position: 'fixed',\r\n bottom: position.includes('bottom') ? '90px' : 'auto',\r\n top: position.includes('top') ? '90px' : 'auto',\r\n right: position.includes('right') ? '24px' : 'auto',\r\n left: position.includes('left') ? '24px' : 'auto',\r\n width: '280px',\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n boxShadow: '0 10px 40px rgba(0,0,0,0.15)',\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n overflow: 'hidden',\r\n zIndex: zIndex + 1\r\n }}\r\n >\r\n <div style={{ padding: '16px', borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB' }}>\r\n <h3 style={{ margin: 0, fontSize: '16px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Help & Support\r\n </h3>\r\n <p style={{ margin: '4px 0 0 0', fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n How can we assist you today?\r\n </p>\r\n </div>\r\n \r\n <div style={{ padding: '8px' }}>\r\n {/* Query Option */}\r\n <button\r\n onClick={() => handleMenuSelect('query')}\r\n className=\"crm-menu-option\"\r\n style={{\r\n width: '100%',\r\n padding: '12px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n border: 'none',\r\n borderRadius: '8px',\r\n backgroundColor: 'transparent',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n textAlign: 'left'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = isDark ? '#374151' : '#F3F4F6'}\r\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\r\n >\r\n <div style={{ \r\n width: '40px', \r\n height: '40px', \r\n borderRadius: '8px', \r\n backgroundColor: primaryColor, \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n flexShrink: 0\r\n }}>\r\n <svg style={{ width: '20px', height: '20px', color: '#fff' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\r\n </svg>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p style={{ margin: 0, fontSize: '14px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Start Query\r\n </p>\r\n <p style={{ margin: '2px 0 0 0', fontSize: '12px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Chat with our support team\r\n </p>\r\n </div>\r\n <svg style={{ width: '16px', height: '16px', color: isDark ? '#9CA3AF' : '#6B7280' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n\r\n {/* Raise Ticket Option */}\r\n <button\r\n onClick={() => handleMenuSelect('ticket')}\r\n className=\"crm-menu-option\"\r\n style={{\r\n width: '100%',\r\n padding: '12px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n border: 'none',\r\n borderRadius: '8px',\r\n backgroundColor: 'transparent',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n textAlign: 'left',\r\n marginTop: '4px'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = isDark ? '#374151' : '#F3F4F6'}\r\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\r\n >\r\n <div style={{ \r\n width: '40px', \r\n height: '40px', \r\n borderRadius: '8px', \r\n backgroundColor: '#10B981', \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n flexShrink: 0\r\n }}>\r\n <svg style={{ width: '20px', height: '20px', color: '#fff' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 5v2m0 4v2m0 4v2M5 5a2 2 0 00-2 2v3a2 2 0 110 4v3a2 2 0 002 2h14a2 2 0 002-2v-3a2 2 0 110-4V7a2 2 0 00-2-2H5z\" />\r\n </svg>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p style={{ margin: 0, fontSize: '14px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Raise Ticket\r\n </p>\r\n <p style={{ margin: '2px 0 0 0', fontSize: '12px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Submit a support ticket\r\n </p>\r\n </div>\r\n <svg style={{ width: '16px', height: '16px', color: isDark ? '#9CA3AF' : '#6B7280' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Query Chat Window */}\r\n {isOpen && activeView === 'query' && (\r\n <div ref={widgetRef} className={`crm-chat-window ${getPositionClasses()} ${isDark ? 'crm-dark' : ''}`} style={{ position: 'relative' }}>\r\n \r\n {/* Header */}\r\n <div className=\"crm-header\" style={{ backgroundColor: primaryColor }}>\r\n <div className=\"crm-header-content\">\r\n <button \r\n onClick={() => { setActiveView(null); setShowMenu(true); }} \r\n className=\"crm-back-btn\"\r\n title=\"Back to Menu\"\r\n style={{ \r\n background: 'none', \r\n border: 'none', \r\n color: '#fff', \r\n cursor: 'pointer', \r\n padding: '4px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginRight: '8px'\r\n }}\r\n >\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\r\n </svg>\r\n </button>\r\n <div className=\"crm-avatar\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={primaryColor} strokeWidth=\"2\">\r\n <path d=\"M12 2a4 4 0 0 1 4 4v2a4 4 0 0 1-8 0V6a4 4 0 0 1 4-4z\"/>\r\n <path d=\"M12 14v8\"/>\r\n <path d=\"M8 22h8\"/>\r\n <path d=\"M8 14c-2 0-3 1-3 3v1c0 2 1 3 3 3h8c2 0 3-1 3-3v-1c0-2-1-3-3-3H8z\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h3 className=\"crm-title\">{companyName}</h3>\r\n <div className=\"crm-status\">\r\n <div className={`crm-status-dot ${isConnected ? 'crm-online' : 'crm-offline'}`} />\r\n <span>\r\n {queryStatus === 'resolved' ? (\r\n <span style={{ color: '#10B981' }}>✓ Resolved</span>\r\n ) : agentName !== 'Support Agent' ? (\r\n <span>💬 {agentName}</span>\r\n ) : (\r\n isConnected ? 'Online' : (isConnecting ? 'Connecting…' : 'Ready')\r\n )}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\r\n <button \r\n onClick={startNewQuery} \r\n className=\"crm-new-query-btn\"\r\n title=\"Start New Query\"\r\n >\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\r\n </svg>\r\n </button>\r\n <button onClick={() => { setIsOpen(false); setShowMenu(false); setActiveView(null); }} className=\"crm-close-btn\">\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Camera Interface Inside Widget - Positioned to overlay entire widget */}\r\n {showCamera && (\r\n <div style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n background: isDark ? '#1F2937' : '#fff',\r\n zIndex: 9999,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: '16px',\r\n overflow: 'auto'\r\n }}>\r\n <div style={{\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n marginBottom: '12px'\r\n }}>\r\n <h3 style={{ \r\n margin: 0, \r\n fontSize: '16px', \r\n fontWeight: 600,\r\n color: isDark ? '#E5E7EB' : '#111827'\r\n }}>\r\n 📸 Camera Capture\r\n </h3>\r\n <button \r\n onClick={closeCameraInterface}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n fontSize: '24px',\r\n cursor: 'pointer',\r\n padding: '0',\r\n color: isDark ? '#9CA3AF' : '#6B7280'\r\n }}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n \r\n <p style={{\r\n fontSize: '14px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n marginBottom: '12px'\r\n }}>\r\n {snapshotRequest?.requesterName || 'Agent'} requested a photo\r\n </p>\r\n\r\n <div style={{\r\n width: '100%',\r\n height: '300px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n background: '#000',\r\n borderRadius: '8px',\r\n overflow: 'hidden',\r\n marginBottom: '12px',\r\n position: 'relative'\r\n }}>\r\n {!capturedImage ? (\r\n <>\r\n <video\r\n ref={videoRef}\r\n autoPlay\r\n playsInline\r\n muted\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n display: currentStream ? 'block' : 'none'\r\n }}\r\n />\r\n {!currentStream && (\r\n <div style={{\r\n position: 'absolute',\r\n color: '#fff',\r\n textAlign: 'center'\r\n }}>\r\n <div style={{ fontSize: '14px', marginBottom: '8px' }}>Initializing camera...</div>\r\n <div style={{ fontSize: '24px' }}>📹</div>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <img\r\n src={capturedImage}\r\n alt=\"Captured\"\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain'\r\n }}\r\n />\r\n )}\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n </div>\r\n\r\n <div style={{\r\n display: 'flex',\r\n gap: '8px',\r\n justifyContent: 'center'\r\n }}>\r\n {!capturedImage ? (\r\n <button\r\n onClick={capturePhoto}\r\n className=\"crm-send-btn\"\r\n style={{\r\n backgroundColor: primaryColor,\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600\r\n }}\r\n >\r\n 📸 Capture\r\n </button>\r\n ) : (\r\n <>\r\n <button\r\n onClick={retakePhoto}\r\n className=\"crm-close-btn\"\r\n style={{\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600\r\n }}\r\n >\r\n 🔄 Retake\r\n </button>\r\n <button\r\n onClick={submitPhoto}\r\n className=\"crm-send-btn\"\r\n style={{\r\n backgroundColor: primaryColor,\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600\r\n }}\r\n disabled={isCapturing}\r\n >\r\n {isCapturing ? '⏳ Uploading...' : '✅ Submit'}\r\n </button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Messages Container */}\r\n <div className=\"crm-messages\">\r\n {/* Welcome Message - Always show until first message */}\r\n {!hasInitialized && messages.length === 0 && (\r\n <div className=\"crm-welcome-message\">\r\n <p>{welcomeMessage}</p>\r\n <p style={{ fontSize: '0.875rem', marginTop: '8px', opacity: 0.7 }}>\r\n 👋 Start typing to begin your conversation\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Messages */}\r\n {messages.map((msg, idx) => (\r\n <React.Fragment key={idx}>\r\n <div\r\n className={`crm-message ${\r\n msg.sender === 'guest' ? 'crm-message-guest' : \r\n msg.sender === 'system' ? 'crm-message-system' : \r\n 'crm-message-agent'\r\n }`}\r\n >\r\n <div\r\n className=\"crm-message-bubble\"\r\n style={\r\n msg.sender === 'guest' ? { backgroundColor: primaryColor } : \r\n msg.sender === 'system' ? { backgroundColor: '#F3F4F6', color: '#374151', border: '1px solid #E5E7EB' } :\r\n {}\r\n }\r\n >\r\n {msg.sender === 'agent' && (\r\n <p className=\"crm-agent-name\">{(msg.senderName || agentName).toUpperCase()}</p>\r\n )}\r\n {(() => {\r\n const text = String(msg.message || '');\r\n const match = text.match(/https?:[^\\s]+\\.(?:png|jpg|jpeg|gif|webp)/i);\r\n if (match) {\r\n const url = match[0];\r\n const caption = text.replace(url, '').trim();\r\n return (\r\n <div>\r\n {caption && <p className=\"crm-message-text\" style={{ opacity: 0.85 }}>{caption}</p>}\r\n <img src={url} alt=\"snapshot\" style={{ maxWidth: '240px', maxHeight: '180px', borderRadius: '8px', border: '1px solid #E5E7EB', display: 'block' }} />\r\n </div>\r\n );\r\n }\r\n return <p className=\"crm-message-text\">{text}</p>;\r\n })()}\r\n <p className=\"crm-message-time\">{formatTime(msg.timestamp)}</p>\r\n </div>\r\n </div>\r\n \r\n {/* Camera Capture for Photo Requests */}\r\n {msg.sender !== 'guest' && \r\n msg.message &&\r\n (msg.message.toLowerCase().includes('requested a photo') ||\r\n msg.message.toLowerCase().includes('send a photo') ||\r\n msg.message.toLowerCase().includes('send photo')) &&\r\n photoRequests.includes(idx) && (\r\n <div style={{ width: '100%', position: 'relative', zIndex: 1 }}>\r\n <CameraCapture\r\n onCapture={async (base64Image) => {\r\n try {\r\n // Send photo as message\r\n const photoMsg = {\r\n message: '📸 Photo sent',\r\n sender: 'guest',\r\n timestamp: Date.now()\r\n };\r\n \r\n setMessages(prev => [...prev, photoMsg]);\r\n \r\n // Emit to socket\r\n if (socket) {\r\n socket.emit('chatMessage', {\r\n conversationId,\r\n message: '📸 Photo sent',\r\n image: base64Image\r\n });\r\n }\r\n \r\n // Remove from photo requests\r\n setPhotoRequests(prev => prev.filter(id => id !== idx));\r\n } catch (error) {\r\n console.error('Failed to send photo:', error);\r\n }\r\n }}\r\n onClose={() => {\r\n setPhotoRequests(prev => prev.filter(id => id !== idx));\r\n }}\r\n requesterName={msg.senderName || agentName}\r\n />\r\n </div>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n\r\n {/* Typing Indicator */}\r\n {isTyping && (\r\n <div className=\"crm-message crm-message-agent\">\r\n <div className=\"crm-message-bubble\">\r\n <div className=\"crm-typing-indicator\">\r\n <div className=\"crm-typing-dot\"></div>\r\n <div className=\"crm-typing-dot\"></div>\r\n <div className=\"crm-typing-dot\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n {/* Feedback Form */}\r\n {showFeedback && !feedbackSubmitted && (\r\n <div className=\"crm-message crm-message-system\">\r\n <div className=\"crm-feedback-form\" style={{ backgroundColor: '#F9FAFB', padding: '16px', borderRadius: '12px', border: '1px solid #E5E7EB' }}>\r\n <p style={{ fontWeight: '600', marginBottom: '12px', color: '#111827' }}>⭐ Rate Your Experience</p>\r\n <div style={{ display: 'flex', gap: '8px', marginBottom: '12px', justifyContent: 'center' }}>\r\n {[1, 2, 3, 4, 5].map((star) => (\r\n <button\r\n key={star}\r\n onClick={() => setFeedbackRating(star)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n fontSize: '32px',\r\n padding: '0',\r\n transition: 'transform 0.2s',\r\n filter: feedbackRating >= star ? 'none' : 'grayscale(100%)'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.transform = 'scale(1.2)'}\r\n onMouseLeave={(e) => e.currentTarget.style.transform = 'scale(1)'}\r\n >\r\n {feedbackRating >= star ? '⭐' : '☆'}\r\n </button>\r\n ))}\r\n </div>\r\n <textarea\r\n value={feedbackComment}\r\n onChange={(e) => setFeedbackComment(e.target.value)}\r\n placeholder=\"Share your thoughts (optional)...\"\r\n rows=\"3\"\r\n style={{\r\n width: '100%',\r\n padding: '8px 12px',\r\n border: '1px solid #D1D5DB',\r\n borderRadius: '8px',\r\n fontSize: '14px',\r\n fontFamily: 'inherit',\r\n resize: 'none',\r\n marginBottom: '12px'\r\n }}\r\n />\r\n <button\r\n onClick={submitFeedback}\r\n disabled={!feedbackRating || isSubmittingFeedback}\r\n style={{\r\n width: '100%',\r\n padding: '10px',\r\n backgroundColor: feedbackRating ? primaryColor : '#D1D5DB',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '8px',\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n cursor: feedbackRating ? 'pointer' : 'not-allowed',\r\n transition: 'all 0.2s'\r\n }}\r\n >\r\n {isSubmittingFeedback ? 'Submitting...' : 'Submit Feedback'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Feedback Submitted Message */}\r\n {feedbackSubmitted && (\r\n <div className=\"crm-message crm-message-system\">\r\n <div className=\"crm-message-bubble\" style={{ backgroundColor: '#D1FAE5', color: '#065F46', border: '1px solid #A7F3D0' }}>\r\n <p className=\"crm-message-text\">✅ Thank you for your feedback!</p>\r\n </div>\r\n </div>\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n {/* Input Area */}\r\n <div className=\"crm-input-container\">\r\n {queryStatus === 'resolved' ? (\r\n <button\r\n onClick={startNewQuery}\r\n className=\"crm-send-btn\"\r\n style={{\r\n backgroundColor: primaryColor,\r\n width: '100%',\r\n padding: '12px',\r\n fontSize: '14px',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '8px',\r\n border: 'none',\r\n borderRadius: '8px',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s'\r\n }}\r\n >\r\n <svg style={{ width: '18px', height: '18px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\r\n </svg>\r\n New Query\r\n </button>\r\n ) : (\r\n <div className=\"crm-input-wrapper\">\r\n <textarea\r\n value={input}\r\n onChange={handleInputChange}\r\n onKeyPress={handleKeyPress}\r\n placeholder=\"Type your message...\"\r\n rows=\"1\"\r\n className=\"crm-input\"\r\n />\r\n <button\r\n onClick={sendMessage}\r\n disabled={!input.trim() || isCreating}\r\n className=\"crm-send-btn\"\r\n style={{ backgroundColor: primaryColor }}\r\n >\r\n {isCreating ? (\r\n <svg className=\"crm-icon-sm crm-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\r\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\r\n </svg>\r\n ) : (\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\" />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n )}\r\n {queryStatus !== 'resolved' && (\r\n <p className=\"crm-input-hint\">\r\n {!hasInitialized ? 'Send your first message to start conversation' : 'Press Enter to send • Shift+Enter for new line'}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Ticket Board Full Page Overlay */}\r\n {activeView === 'ticket' && (\r\n <TicketBoard\r\n apiKey={apiKey}\r\n apiUrl={apiUrl}\r\n primaryColor={primaryColor}\r\n userData={getUserData()}\r\n theme={theme}\r\n onClose={() => {\r\n setActiveView(null);\r\n setShowMenu(true);\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatCRMWidget;\r\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","toArray","Uint8Array","byteOffset","byteLength","TEXT_ENCODER","chars","lookup","i","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","length","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","createPacketEncoderStream","TransformStream","transform","packet","controller","arrayBuffer","then","encoded","TextEncoder","encode","encodePacketToBinary","payloadLength","header","DataView","setUint8","view","setUint16","setBigUint64","BigInt","enqueue","TEXT_DECODER","totalLength","chunks","reduce","acc","chunk","concatChunks","size","shift","j","slice","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","emitReserved","listeners","hasListeners","nextTick","Promise","resolve","setTimeoutFn","globalThisShim","self","window","Function","pick","attr","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","bind","clearTimeoutFn","str","c","l","utf8Length","Math","ceil","randomString","Date","now","random","TransportError","Error","constructor","reason","description","context","super","Transport","writable","query","socket","forceBase64","onError","open","readyState","doOpen","close","doClose","onClose","send","packets","write","onOpen","onData","onPacket","details","pause","onPause","createUri","schema","_hostname","_port","path","_query","hostname","indexOf","port","secure","Number","encodedQuery","encodeURIComponent","Polling","_polling","name","_poll","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","count","join","encodePayload","doWrite","uri","timestampRequests","timestampParam","sid","b64","value","XMLHttpRequest","err","hasCORS","empty","BaseXHR","location","isSSL","protocol","xd","req","request","method","xhrStatus","pollXhr","Request","createRequest","_opts","_method","_uri","_data","undefined","_create","_a","xdomain","xhr","_xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","e","cookieJar","addCookies","withCredentials","requestTimeout","timeout","onreadystatechange","parseCookies","getResponseHeader","status","_onLoad","_onError","document","_index","requestsCount","requests","_cleanup","fromError","abort","responseText","attachEvent","unloadHandler","hasXHR2","newRequest","responseType","concat","isReactNative","navigator","product","toLowerCase","BaseWS","protocols","headers","ws","createSocket","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","WebSocketCtor","WebSocket","MozWebSocket","transports","websocket","_packet","webtransport","_transport","WebTransport","transportOptions","closed","catch","ready","createBidirectionalStream","stream","decoderStream","maxPayload","TextDecoder","state","expectedLength","isBinary","headerArray","getUint16","n","getUint32","pow","createPacketDecoderStream","MAX_SAFE_INTEGER","reader","readable","pipeThrough","getReader","encoderStream","pipeTo","_writer","getWriter","read","done","polling","assign","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","withEventListeners","OFFLINE_EVENT_LISTENERS","listener","SocketWithoutUpgrade","writeBuffer","_prevBufferLen","_pingInterval","_pingTimeout","_maxPayload","_pingTimeoutTime","Infinity","parsedUri","_transportsByName","t","transportName","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","closeOnBeforeunload","qs","qry","pairs","pair","decodeURIComponent","_beforeunloadEventListener","transport","_offlineEventListener","_onClose","_cookieJar","createCookieJar","_open","createTransport","EIO","id","priorWebsocketSuccess","setTransport","_onDrain","_onPacket","flush","onHandshake","JSON","_sendPacket","_resetPingTimeout","code","pingInterval","pingTimeout","_pingTimeoutTimer","delay","upgrading","_getWritablePackets","payloadSize","_hasPingExpired","hasExpired","msg","options","compress","cleanupAndClose","waitForUpgrade","tryAllTransports","SocketWithUpgrade","_upgrades","_probe","failed","onTransportOpen","cleanup","freezeTransport","error","onTransportClose","onupgrade","to","_filterUpgrades","upgrades","filteredUpgrades","o","map","DEFAULT_TRANSPORTS","filter","withNativeFile","File","hasBinary","toJSON","isArray","deconstructPacket","buffers","packetData","pack","_deconstructPacket","attachments","placeholder","_placeholder","num","newData","reconstructPacket","_reconstructPacket","RESERVED_EVENTS","PacketType","isObject","Decoder","reviver","add","reconstructor","decodeString","isBinaryEvent","BINARY_EVENT","BINARY_ACK","EVENT","ACK","BinaryReconstructor","takeBinaryData","start","buf","nsp","next","payload","tryParse","substr","isPayloadValid","CONNECT","DISCONNECT","CONNECT_ERROR","destroy","finishedReconstruction","reconPack","binData","replacer","encodeAsString","encodeAsBinary","stringify","deconstruction","unshift","freeze","connect","connect_error","disconnect","disconnecting","newListener","Socket","io","connected","recovered","receiveBuffer","sendBuffer","_queue","_queueSeq","ids","acks","flags","auth","_autoConnect","disconnected","subEvents","subs","onpacket","active","_readyState","_b","_c","retries","fromQueue","volatile","_addToQueue","ack","pop","_registerAckCallback","isTransportWritable","engine","isConnected","notifyOutgoingListeners","ackTimeout","timer","withError","emitWithAck","reject","arg1","arg2","tryCount","pending","responseArgs","_drainQueue","force","_sendConnectPacket","_pid","pid","offset","_lastOffset","_clearAcks","some","onconnect","onevent","onack","ondisconnect","message","emitEvent","_anyListeners","sent","emitBuffered","subDestroy","onAny","prependAny","offAny","listenersAny","onAnyOutgoing","_anyOutgoingListeners","prependAnyOutgoing","offAnyOutgoing","listenersAnyOutgoing","Backoff","ms","min","max","factor","jitter","attempts","duration","rand","deviation","floor","reset","setMin","setMax","setJitter","Manager","nsps","reconnection","reconnectionAttempts","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","_parser","parser","encoder","Encoder","decoder","autoConnect","v","_reconnection","skipReconnect","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","_reconnecting","reconnect","Engine","openSubDestroy","errorSub","onping","ondata","ondecoded","_destroy","_close","onreconnect","attempt","cache","parsed","loc","test","href","url","sameNamespace","forceNew","multiplex","thisArg","getPrototypeOf","iterator","toStringTag","Symbol","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isString","isNumber","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","getOwnPropertyNames","findKey","_key","_global","global","isContextDefined","isTypedArray","TypedArray","isHTMLForm","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","ret","defineProperties","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","token","asap","queueMicrotask","process","utils$1","isFormData","kind","FormData","append","isArrayBufferView","isBoolean","isEmptyObject","isStream","pipe","merge","caseless","skipUndefined","assignValue","targetKey","extend","a","trim","stripBOM","inherits","superConstructor","props","defineProperty","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","position","lastIndex","arr","forEachEntry","_iterator","matchAll","regExp","matches","hasOwnProp","freezeMethods","enumerable","set","toObjectSet","arrayOrString","delimiter","define","toCamelCase","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","isIterable","AxiosError","config","response","captureStackTrace","utils","number","fileName","lineNumber","columnNumber","from","customProps","axiosError","errCode","cause","configurable","isVisitable","removeBrackets","renderKey","dots","predicates","toFormData","formData","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","convertValue","toISOString","Buffer","isFlatArray","el","index","exposedHelpers","build","charMap","match","AxiosURLSearchParams","params","_pairs","buildURL","_encode","serialize","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","clear","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","parseReviver","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","parseHeaders","dest","entry","get","tokens","tokensRE","parseTokens","has","matcher","deleted","deleteHeader","normalize","format","normalized","w","char","formatHeader","targets","asStrings","getSetCookie","first","computed","accessor","accessors","defineAccessor","accessorName","methodName","arg3","buildAccessors","transformData","fns","AxiosHeaders","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","mapped","headerValue","progressEventReducer","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","timestamps","firstSampleTS","head","tail","chunkLength","startedAt","bytesCount","passed","round","speedometer","lastArgs","timestamp","invoke","throttle","loaded","lengthComputable","progressBytes","rate","progress","estimated","progressEventDecorator","throttled","asyncDecorator","isURLSameOrigin","isMSIE","URL","userAgent","cookies","expires","domain","sameSite","cookie","toUTCString","RegExp","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","isAbsoluteURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","includes","xsrfValue","xhrAdapter","_config","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","onloadend","responseHeaders","getAllResponseHeaders","statusText","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","upload","cancel","subscribe","aborted","parseProtocol","composeSignals","signals","Boolean","AbortController","streamChunk","chunkSize","end","pos","readStream","async","asyncIterator","trackStream","onProgress","onFinish","iterable","readBytes","_onFinish","ReadableStream","pull","loadedBytes","return","highWaterMark","globalFetchAPI","Response","factory","fetch","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","_request","getBodyLength","fetchOptions","_fetch","composedSignal","toAbortSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","resolvedOptions","credentials","isStreamResponse","responseContentLength","responseData","seedCache","Map","getFetch","seeds","seed","knownAdapters","http","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapters","getAdapter","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios$1","instanceConfig","interceptors","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","Axios","generateHTTPMethod","isForm","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","WebServerIsDown","ConnectionTimedOut","OriginIsUnreachable","TimeoutOccurred","SslHandshakeFailed","InvalidSslCertificate","axios","createInstance","defaultConfig","instance","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","Cancel","all","promises","spread","isAxiosError","formToJSON","default","TicketBoard","_ref","apiKey","apiUrl","_ref$primaryColor","primaryColor","_ref$userData","userData","_ref$theme","theme","_useState2","_slicedToArray","useState","activeTab","setActiveTab","_useState4","tickets","setTickets","_useState6","selectedTicket","setSelectedTicket","_useState8","ticketMessages","setTicketMessages","_useState0","isLoading","setIsLoading","_useState10","replyText","setReplyText","_useState12","replyHtml","setReplyHtml","_useState14","setAttachments","_useState16","fileWarning","setFileWarning","_useState18","_useState20","_useState22","_useState24","toasts","setToasts","fileInputRef","useRef","editorRef","_useState26","subject","htmlMessage","priority","category","setFormData","isDark","matchMedia","showFileWarning","showToast","newToast","prev","_toConsumableArray","toast","execCommand","command","_editorRef$current","current","focus","handleFileSelect","isReply","files","currentAttachments","validFiles","file","_objectSpread","removeAttachment","_","useEffect","fetchTickets","fetchTicketMessages","ticketId","_ref2","_asyncToGenerator","_regenerator","_callee","user","_t","_context","email","localStorage","getItem","customerEmail","success","f","_ref3","_callee2","_response$data$messag","_t2","_context2","log","messages","_x","handleCreateTicket","_ref4","_callee3","formDataToSend","_error$response$data","_t3","_context3","preventDefault","setItem","post","innerHTML","_x2","handleSendReply","_ref5","_callee4","_error$response$data2","_t4","_context4","_x3","formatDate","date","toLocaleDateString","year","month","day","hour","minute","getStatusColor","getPriorityColor","getFileIcon","startsWith","React","createElement","style","width","height","fill","stroke","viewBox","strokeLinecap","strokeLinejoin","strokeWidth","d","RichTextToolbar","_ref7","onCommand","_ref7$showSendButton","showSendButton","_ref7$onSend","onSend","_ref7$isLoading","_ref7$canSend","canSend","display","justifyContent","alignItems","padding","borderBottom","backgroundColor","gap","onClick","toolbarButtonStyle","title","margin","_fileInputRef$current","click","disabled","fontSize","fontWeight","color","border","borderRadius","cursor","opacity","transition","Fragment","animation","background","inset","zIndex","flexDirection","overflow","boxShadow","flex","borderRight","textAlign","borderLeft","maxWidth","onSubmit","marginBottom","onChange","required","outline","ref","className","contentEditable","onInput","html","text","innerText","minHeight","maxHeight","overflowY","multiple","accept","borderTop","flexWrap","gridTemplateColumns","lineHeight","flexShrink","ticket","hasUnread","hasUnreadMessages","lastActivityAt","lastViewedAt","isActive","_id","top","right","textOverflow","whiteSpace","stopPropagation","onMouseEnter","onMouseLeave","createdAt","marginRight","idx","_msg$sender","senderType","senderName","sender","alias","wordBreak","overflowWrap","dangerouslySetInnerHTML","__html","marginTop","att","minWidth","filename","toFixed","_ref8","_callee6","safeName","endpoint","link","_link","_context6","rel","appendChild","removeChild","download","_x5","marginLeft","left","bottom","onMouseOver","onMouseOut","pointerEvents","styleInject","css","insertAt","getElementsByTagName","firstChild","insertBefore","styleSheet","cssText","createTextNode","CameraCapture","onCapture","_ref$requesterName","requesterName","setStream","capturedImage","setCapturedImage","cameraActive","setCameraActive","facingMode","setFacingMode","setError","videoRef","canvasRef","startCamera","stopCamera","mediaStream","mediaDevices","getUserMedia","video","ideal","audio","srcObject","getTracks","track","stop","handleClose","alt","autoPlay","playsInline","muted","canvas","getContext","videoWidth","videoHeight","drawImage","imageData","toDataURL","_ref$apiUrl","_ref$position","_ref$welcomeMessage","welcomeMessage","_ref$companyName","companyName","_ref$autoOpen","autoOpen","_ref$showNotification","showNotifications","_ref$playSound","playSound","_ref$zIndex","isOpen","setIsOpen","setMessages","input","setInput","setSocket","setGuestId","conversationId","setConversationId","setIsConnected","isCreating","setIsCreating","isConnecting","setIsConnecting","isTyping","setIsTyping","agentName","setAgentName","unreadCount","setUnreadCount","hasInitialized","setHasInitialized","queryStatus","setQueryStatus","_useState28","snapshotRequest","setSnapshotRequest","_useState30","isCapturing","setIsCapturing","_useState32","showCamera","setShowCamera","_useState34","currentStream","setCurrentStream","_useState36","_useState38","showFeedback","setShowFeedback","_useState40","feedbackRating","setFeedbackRating","_useState42","feedbackComment","setFeedbackComment","_useState44","feedbackSubmitted","setFeedbackSubmitted","_useState46","isSubmittingFeedback","setIsSubmittingFeedback","_useState48","showMenu","setShowMenu","_useState50","activeView","setActiveView","_useState52","photoRequests","setPhotoRequests","hasShownResolvedRef","messagesEndRef","widgetRef","buttonRef","menuRef","handleOutside","contains","_messagesEndRef$curre","scrollIntoView","behavior","getUserData","phone","userId","detected","getValue","element","_element$textContent","_element$innerText","tagName","getAttribute","textContent","firstName","lastName","fullName","_i","_nameSelectors","selector","_step","_createForOfIteratorHelper","querySelectorAll","s","_i2","_emailSelectors","querySelector","_i3","_phoneSelectors","detectUserInfo","createConversation","_response$data","newConvId","petitionId","queryId","guestName","guestEmail","guestPhone","customUserId","connectSocket","convId","typingTimeout","newSocket","incomingMessage","newMessages","prevReqs","newIndex","playNotificationSound","toAgentName","_data$requester","lp","received","stored","requester","at","sendMessage","tempId","_petitionId","created","activeSocket","messageData","alert","startNewQuery","removeItem","handleMenuSelect","audioContext","AudioContext","webkitAudioContext","oscillator","createOscillator","gainNode","createGain","destination","frequency","gain","initializeCamera","_ref6","play","closeCameraInterface","retakePhoto","_callee5","_context5","submitPhoto","_uploadRes$data","blob","form","uploadRes","imageUrl","ts","r","hasVideoRef","getPositionClasses","positions","cx","cy","currentTarget","objectFit","caption","toLocaleTimeString","_ref9","_callee7","base64Image","photoMsg","_context7","image","star","rows","fontFamily","resize","rating","comment","userName","onKeyPress","shiftKey"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/engine.io-parser/build/esm/commons.js","../node_modules/engine.io-parser/build/esm/encodePacket.browser.js","../node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js","../node_modules/engine.io-parser/build/esm/decodePacket.browser.js","../node_modules/engine.io-parser/build/esm/index.js","../node_modules/@socket.io/component-emitter/lib/esm/index.js","../node_modules/engine.io-client/build/esm/globals.js","../node_modules/engine.io-client/build/esm/util.js","../node_modules/engine.io-client/build/esm/transport.js","../node_modules/engine.io-client/build/esm/contrib/parseqs.js","../node_modules/engine.io-client/build/esm/transports/polling.js","../node_modules/engine.io-client/build/esm/contrib/has-cors.js","../node_modules/engine.io-client/build/esm/transports/polling-xhr.js","../node_modules/engine.io-client/build/esm/transports/websocket.js","../node_modules/engine.io-client/build/esm/transports/index.js","../node_modules/engine.io-client/build/esm/transports/webtransport.js","../node_modules/engine.io-client/build/esm/contrib/parseuri.js","../node_modules/engine.io-client/build/esm/socket.js","../node_modules/socket.io-parser/build/esm/is-binary.js","../node_modules/socket.io-parser/build/esm/binary.js","../node_modules/socket.io-parser/build/esm/index.js","../node_modules/socket.io-client/build/esm/on.js","../node_modules/socket.io-client/build/esm/socket.js","../node_modules/socket.io-client/build/esm/contrib/backo2.js","../node_modules/socket.io-client/build/esm/manager.js","../node_modules/socket.io-client/build/esm/index.js","../node_modules/socket.io-client/build/esm/url.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/index.js","../src/components/TicketBoard.jsx","../node_modules/style-inject/dist/style-inject.es.js","../src/components/CameraCapture.jsx","../src/components/ChatWidget.jsx"],"sourcesContent":["const PACKET_TYPES = Object.create(null); // no Map = no polyfill\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nObject.keys(PACKET_TYPES).forEach((key) => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexport { PACKET_TYPES, PACKET_TYPES_REVERSE, ERROR_PACKET };\n","import { PACKET_TYPES } from \"./commons.js\";\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(PACKET_TYPES[type] + (data || \"\"));\n};\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nexport function encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data.arrayBuffer().then(toArray).then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, (encoded) => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\nexport { encodePacket };\n","// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nexport const encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexport const decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n","import { ERROR_PACKET, PACKET_TYPES_REVERSE, } from \"./commons.js\";\nimport { decode } from \"./contrib/base64-arraybuffer.js\";\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nexport const decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType),\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType),\n };\n }\n const packetType = PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1),\n }\n : {\n type: PACKET_TYPES_REVERSE[type],\n };\n};\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = decode(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n","import { encodePacket, encodePacketToBinary } from \"./encodePacket.js\";\nimport { decodePacket } from \"./decodePacket.js\";\nimport { ERROR_PACKET, } from \"./commons.js\";\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n encodePacket(packet, false, (encodedPacket) => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = decodePacket(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexport function createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n encodePacketToBinary(packet, (encodedPacket) => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n },\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nexport function createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* State.READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* State.READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* State.READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* State.READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* State.READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* State.READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* State.READ_PAYLOAD */;\n }\n else if (state === 2 /* State.READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* State.READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue(decodePacket(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* State.READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(ERROR_PACKET);\n break;\n }\n }\n },\n });\n}\nexport const protocol = 4;\nexport { encodePacket, encodePayload, decodePacket, decodePayload, };\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","export const nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexport const globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\nexport const defaultBinaryType = \"arraybuffer\";\nexport function createCookieJar() { }\n","import { globalThisShim as globalThis } from \"./globals.node.js\";\nexport function pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globalThis.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globalThis.clearTimeout;\nexport function installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globalThis);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globalThis);\n }\n else {\n obj.setTimeoutFn = globalThis.setTimeout.bind(globalThis);\n obj.clearTimeoutFn = globalThis.clearTimeout.bind(globalThis);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nexport function byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nexport function randomString() {\n return (Date.now().toString(36).substring(3) +\n Math.random().toString(36).substring(2, 5));\n}\n","import { decodePacket } from \"engine.io-parser\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions } from \"./util.js\";\nimport { encode } from \"./contrib/parseqs.js\";\nexport class TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexport class Transport extends Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n installTimerFunctions(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = decodePacket(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port) !== 443) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = encode(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\n","// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nexport function encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nexport function decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","import { Transport } from \"../transport.js\";\nimport { randomString } from \"../util.js\";\nimport { encodePayload, decodePayload } from \"engine.io-parser\";\nexport class Polling extends Transport {\n constructor() {\n super(...arguments);\n this._polling = false;\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this._poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n this.readyState = \"paused\";\n onPause();\n };\n if (this._polling || !this.writable) {\n let total = 0;\n if (this._polling) {\n total++;\n this.once(\"pollComplete\", function () {\n --total || pause();\n });\n }\n if (!this.writable) {\n total++;\n this.once(\"drain\", function () {\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n _poll() {\n this._polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n decodePayload(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this._polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this._poll();\n }\n else {\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n encodePayload(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\n","// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexport const hasCORS = value;\n","import { Polling } from \"./polling.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { installTimerFunctions, pick } from \"../util.js\";\nimport { globalThisShim as globalThis } from \"../globals.node.js\";\nimport { hasCORS } from \"../contrib/has-cors.js\";\nfunction empty() { }\nexport class BaseXHR extends Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexport class Request extends Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(createRequest, uri, opts) {\n super();\n this.createRequest = createRequest;\n installTimerFunctions(this, opts);\n this._opts = opts;\n this._method = opts.method || \"GET\";\n this._uri = uri;\n this._data = undefined !== opts.data ? opts.data : null;\n this._create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n _create() {\n var _a;\n const opts = pick(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this._opts.xd;\n const xhr = (this._xhr = this.createRequest(opts));\n try {\n xhr.open(this._method, this._uri, true);\n try {\n if (this._opts.extraHeaders) {\n // @ts-ignore\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this._opts.extraHeaders) {\n if (this._opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this._method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this._opts.withCredentials;\n }\n if (this._opts.requestTimeout) {\n xhr.timeout = this._opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n // @ts-ignore\n xhr.getResponseHeader(\"set-cookie\"));\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this._onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n xhr.send(this._data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this._onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this._index = Request.requestsCount++;\n Request.requests[this._index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n _onError(err) {\n this.emitReserved(\"error\", err, this._xhr);\n this._cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n _cleanup(fromError) {\n if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n return;\n }\n this._xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this._xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this._index];\n }\n this._xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n _onLoad() {\n const data = this._xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this._cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this._cleanup();\n }\n}\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globalThis ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\nconst hasXHR2 = (function () {\n const xhr = newRequest({\n xdomain: false,\n });\n return xhr && xhr.responseType !== null;\n})();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nexport class XHR extends BaseXHR {\n constructor(opts) {\n super(opts);\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd }, this.opts);\n return new Request(newRequest, this.uri(), opts);\n }\n}\nfunction newRequest(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globalThis[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","import { Transport } from \"../transport.js\";\nimport { pick, randomString } from \"../util.js\";\nimport { encodePacket } from \"engine.io-parser\";\nimport { globalThisShim as globalThis, nextTick } from \"../globals.node.js\";\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nexport class BaseWS extends Transport {\n get name() {\n return \"websocket\";\n }\n doOpen() {\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : pick(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws = this.createSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n encodePacket(packet, this.supportsBinary, (data) => {\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n this.doWrite(packet, data);\n }\n catch (e) {\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.onerror = () => { };\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = randomString();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nconst WebSocketCtor = globalThis.WebSocket || globalThis.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nexport class WS extends BaseWS {\n createSocket(uri, protocols, opts) {\n return !isReactNative\n ? protocols\n ? new WebSocketCtor(uri, protocols)\n : new WebSocketCtor(uri)\n : new WebSocketCtor(uri, protocols, opts);\n }\n doWrite(_packet, data) {\n this.ws.send(data);\n }\n}\n","import { XHR } from \"./polling-xhr.node.js\";\nimport { WS } from \"./websocket.node.js\";\nimport { WT } from \"./webtransport.js\";\nexport const transports = {\n websocket: WS,\n webtransport: WT,\n polling: XHR,\n};\n","import { Transport } from \"../transport.js\";\nimport { nextTick } from \"../globals.node.js\";\nimport { createPacketDecoderStream, createPacketEncoderStream, } from \"engine.io-parser\";\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nexport class WT extends Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n try {\n // @ts-ignore\n this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this._transport.closed\n .then(() => {\n this.onClose();\n })\n .catch((err) => {\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this._transport.ready.then(() => {\n this._transport.createBidirectionalStream().then((stream) => {\n const decoderStream = createPacketDecoderStream(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = createPacketEncoderStream();\n encoderStream.readable.pipeTo(stream.writable);\n this._writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n return;\n }\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this._writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this._writer.write(packet).then(() => {\n if (lastPacket) {\n nextTick(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\n","// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan <stevenlevithan.com> (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nexport function parse(str) {\n if (str.length > 8000) {\n throw \"URI too long\";\n }\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","import { transports as DEFAULT_TRANSPORTS } from \"./transports/index.js\";\nimport { installTimerFunctions, byteLength } from \"./util.js\";\nimport { decode } from \"./contrib/parseqs.js\";\nimport { parse } from \"./contrib/parseuri.js\";\nimport { Emitter } from \"@socket.io/component-emitter\";\nimport { protocol } from \"engine.io-parser\";\nimport { createCookieJar, defaultBinaryType, nextTick, } from \"./globals.node.js\";\nconst withEventListeners = typeof addEventListener === \"function\" &&\n typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n // script, so we create one single event listener here which will forward the event to the socket instances\n addEventListener(\"offline\", () => {\n OFFLINE_EVENT_LISTENERS.forEach((listener) => listener());\n }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nexport class SocketWithoutUpgrade extends Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts) {\n super();\n this.binaryType = defaultBinaryType;\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n this._pingInterval = -1;\n this._pingTimeout = -1;\n this._maxPayload = -1;\n /**\n * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n */\n this._pingTimeoutTime = Infinity;\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n const parsedUri = parse(uri);\n opts.hostname = parsedUri.host;\n opts.secure =\n parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n opts.port = parsedUri.port;\n if (parsedUri.query)\n opts.query = parsedUri.query;\n }\n else if (opts.host) {\n opts.hostname = parse(opts.host).host;\n }\n installTimerFunctions(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = [];\n this._transportsByName = {};\n opts.transports.forEach((t) => {\n const transportName = t.prototype.name;\n this.transports.push(transportName);\n this._transportsByName[transportName] = t;\n });\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = decode(this.opts.query);\n }\n if (withEventListeners) {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this._beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n this._offlineEventListener = () => {\n this._onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n }\n }\n if (this.opts.withCredentials) {\n this._cookieJar = createCookieJar();\n }\n this._open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n return new this._transportsByName[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n _open() {\n if (this.transports.length === 0) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n const transportName = this.opts.rememberUpgrade &&\n SocketWithoutUpgrade.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ? \"websocket\"\n : this.transports[0];\n this.readyState = \"opening\";\n const transport = this.createTransport(transportName);\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n if (this.transport) {\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this._onDrain.bind(this))\n .on(\"packet\", this._onPacket.bind(this))\n .on(\"error\", this._onError.bind(this))\n .on(\"close\", (reason) => this._onClose(\"transport close\", reason));\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n this.readyState = \"open\";\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n _onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this._sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n this._resetPingTimeout();\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this._onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this._pingInterval = data.pingInterval;\n this._pingTimeout = data.pingTimeout;\n this._maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this._resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n _resetPingTimeout() {\n this.clearTimeoutFn(this._pingTimeoutTimer);\n const delay = this._pingInterval + this._pingTimeout;\n this._pingTimeoutTime = Date.now() + delay;\n this._pingTimeoutTimer = this.setTimeoutFn(() => {\n this._onClose(\"ping timeout\");\n }, delay);\n if (this.opts.autoUnref) {\n this._pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n _onDrain() {\n this.writeBuffer.splice(0, this._prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this._prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this._getWritablePackets();\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this._prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n _getWritablePackets() {\n const shouldCheckPayloadSize = this._maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += byteLength(data);\n }\n if (i > 0 && payloadSize > this._maxPayload) {\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n return this.writeBuffer;\n }\n /**\n * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n *\n * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n * `write()` method then the message would not be buffered by the Socket.IO client.\n *\n * @return {boolean}\n * @private\n */\n /* private */ _hasPingExpired() {\n if (!this._pingTimeoutTime)\n return true;\n const hasExpired = Date.now() > this._pingTimeoutTime;\n if (hasExpired) {\n this._pingTimeoutTime = 0;\n nextTick(() => {\n this._onClose(\"ping timeout\");\n }, this.setTimeoutFn);\n }\n return hasExpired;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a message. Alias of {@link Socket#write}.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n send(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n _sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this._onClose(\"forced close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n _onError(err) {\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n if (this.opts.tryAllTransports &&\n this.transports.length > 1 &&\n this.readyState === \"opening\") {\n this.transports.shift();\n return this._open();\n }\n this.emitReserved(\"error\", err);\n this._onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n _onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n // clear timers\n this.clearTimeoutFn(this._pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (withEventListeners) {\n if (this._beforeunloadEventListener) {\n removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this._offlineEventListener) {\n const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n if (i !== -1) {\n OFFLINE_EVENT_LISTENERS.splice(i, 1);\n }\n }\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n }\n }\n}\nSocketWithoutUpgrade.protocol = protocol;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\nexport class SocketWithUpgrade extends SocketWithoutUpgrade {\n constructor() {\n super(...arguments);\n this._upgrades = [];\n }\n onOpen() {\n super.onOpen();\n if (\"open\" === this.readyState && this.opts.upgrade) {\n for (let i = 0; i < this._upgrades.length; i++) {\n this._probe(this._upgrades[i]);\n }\n }\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n _probe(name) {\n let transport = this.createTransport(name);\n let failed = false;\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === transport.name;\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this._upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n onHandshake(data) {\n this._upgrades = this._filterUpgrades(data.upgrades);\n super.onHandshake(data);\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n _filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n for (let i = 0; i < upgrades.length; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nexport class Socket extends SocketWithUpgrade {\n constructor(uri, opts = {}) {\n const o = typeof uri === \"object\" ? uri : opts;\n if (!o.transports ||\n (o.transports && typeof o.transports[0] === \"string\")) {\n o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"])\n .map((transportName) => DEFAULT_TRANSPORTS[transportName])\n .filter((t) => !!t);\n }\n super(uri, o);\n }\n}\n","const withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nexport function isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexport function hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\n","import { isBinary } from \"./is-binary.js\";\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nexport function deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (isBinary(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nexport function reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","import { Emitter } from \"@socket.io/component-emitter\";\nimport { deconstructPacket, reconstructPacket } from \"./binary.js\";\nimport { isBinary, hasBinary } from \"./is-binary.js\";\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\", // used on the client side\n \"connect_error\", // used on the client side\n \"disconnect\", // used on both sides\n \"disconnecting\", // used on the server side\n \"newListener\", // used by the Node.js EventEmitter\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexport const protocol = 5;\nexport var PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType || (PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nexport class Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if (hasBinary(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = deconstructPacket(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nexport class Decoder extends Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if (isBinary(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = reconstructPacket(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\nfunction isNamespaceValid(nsp) {\n return typeof nsp === \"string\";\n}\n// see https://caniuse.com/mdn-javascript_builtins_number_isinteger\nconst isInteger = Number.isInteger ||\n function (value) {\n return (typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value);\n };\nfunction isAckIdValid(id) {\n return id === undefined || isInteger(id);\n}\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\nfunction isDataValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return payload === undefined || isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n return Array.isArray(payload);\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n default:\n return false;\n }\n}\nexport function isPacketValid(packet) {\n return (isNamespaceValid(packet.nsp) &&\n isAckIdValid(packet.id) &&\n isDataValid(packet.type, packet.data));\n}\n","export function on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","import { PacketType } from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nexport class Socket extends Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n /**\n * A map containing acknowledgement handlers.\n *\n * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n *\n * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n * - `const value = await socket.emitWithAck(\"test\")`\n *\n * From those that don't:\n *\n * - `socket.emit(\"test\", (value) => { ... });`\n *\n * In the first case, the handlers will be called with an error when:\n *\n * - the timeout is reached\n * - the socket gets disconnected\n *\n * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n * an acknowledgement from the server.\n *\n * @private\n */\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n on(io, \"open\", this.onopen.bind(this)),\n on(io, \"packet\", this.onpacket.bind(this)),\n on(io, \"error\", this.onerror.bind(this)),\n on(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n var _a, _b, _c;\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n const discardPacket = this.flags.volatile && !isTransportWritable;\n if (discardPacket) {\n }\n else if (isConnected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n this.sendBuffer.splice(i, 1);\n }\n }\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n const fn = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, args);\n };\n fn.withError = true;\n this.acks[id] = fn;\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n return new Promise((resolve, reject) => {\n const fn = (arg1, arg2) => {\n return arg1 ? reject(arg1) : resolve(arg2);\n };\n fn.withError = true;\n args.push(fn);\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n this._clearAcks();\n }\n /**\n * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n * the server.\n *\n * @private\n */\n _clearAcks() {\n Object.keys(this.acks).forEach((id) => {\n const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id);\n if (!isBuffered) {\n // note: handlers that do not accept an error as first argument are ignored here\n const ack = this.acks[id];\n delete this.acks[id];\n if (ack.withError) {\n ack.call(this, new Error(\"socket has been disconnected\"));\n }\n }\n });\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n if (null != packet.id) {\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n self.packet({\n type: PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowledgement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (typeof ack !== \"function\") {\n return;\n }\n delete this.acks[packet.id];\n // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n if (ack.withError) {\n packet.data.unshift(null);\n }\n // @ts-ignore\n ack.apply(this, packet.data);\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this._drainQueue(true);\n this.emitReserved(\"connect\");\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n this.packet({ type: PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\n","/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nexport function Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n if (!v) {\n this.skipReconnect = true;\n }\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = on(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), \n // @ts-ignore\n on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called when:\n *\n * - the low-level engine is closed\n * - the parser encountered a badly formatted packet\n * - all sockets are disconnected\n *\n * @private\n */\n onclose(reason, description) {\n var _a;\n this.cleanup();\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n","import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\nexport { Fetch, NodeXHR, XHR, NodeWebSocket, WebSocket, WebTransport, } from \"engine.io-client\";\n","import { parse } from \"engine.io-client\";\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nexport function url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n obj = parse(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport axios from 'axios';\r\n\r\nconst TicketBoard = ({ \r\n apiKey, \r\n apiUrl, \r\n primaryColor = '#4F46E5',\r\n userData = null,\r\n theme = 'light',\r\n onClose \r\n}) => {\r\n const [activeTab, setActiveTab] = useState('create');\r\n const [tickets, setTickets] = useState([]);\r\n const [selectedTicket, setSelectedTicket] = useState(null);\r\n const [ticketMessages, setTicketMessages] = useState([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [replyText, setReplyText] = useState('');\r\n const [replyHtml, setReplyHtml] = useState('');\r\n const [attachments, setAttachments] = useState([]);\r\n const [fileWarning, setFileWarning] = useState(null);\r\n const [showAlert, setShowAlert] = useState(false);\r\n const [alertMessage, setAlertMessage] = useState('');\r\n const [alertType, setAlertType] = useState('success'); // 'success' or 'error'\r\n const [toasts, setToasts] = useState([]);\r\n const fileInputRef = useRef(null);\r\n const editorRef = useRef(null);\r\n \r\n // Create ticket form state\r\n const [formData, setFormData] = useState({\r\n subject: '',\r\n message: '',\r\n htmlMessage: '',\r\n priority: 'medium',\r\n category: 'general',\r\n attachments: []\r\n });\r\n\r\n const isDark = theme === 'dark' || (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n // File warning popup\r\n const showFileWarning = (message) => {\r\n setFileWarning(message);\r\n setTimeout(() => setFileWarning(null), 4000); // Auto hide after 4 seconds\r\n };\r\n\r\n // Custom alert function\r\n const showCustomAlert = (message, type = 'success') => {\r\n setAlertMessage(message);\r\n setAlertType(type);\r\n setShowAlert(true);\r\n setTimeout(() => {\r\n setShowAlert(false);\r\n setAlertMessage('');\r\n }, 4000);\r\n };\r\n\r\n const showToast = (message, type = 'success') => {\r\n const id = Date.now();\r\n const newToast = { id, message, type };\r\n setToasts(prev => [...prev, newToast]);\r\n \r\n setTimeout(() => {\r\n setToasts(prev => prev.filter(toast => toast.id !== id));\r\n }, 4000);\r\n };\r\n\r\n // Simple rich text toolbar functions\r\n const execCommand = (command, value = null) => {\r\n document.execCommand(command, false, value);\r\n editorRef.current?.focus();\r\n };\r\n\r\n const handleEditorInput = (e) => {\r\n const html = e.target.innerHTML;\r\n const text = e.target.innerText;\r\n setFormData(prev => ({ ...prev, htmlMessage: html, message: text }));\r\n };\r\n\r\n const handleReplyEditorInput = (e) => {\r\n const html = e.target.innerHTML;\r\n const text = e.target.innerText;\r\n setReplyHtml(html);\r\n setReplyText(text);\r\n };\r\n\r\n const handleFileSelect = (e, isReply = false) => {\r\n const files = Array.from(e.target.files);\r\n \r\n // Check total file limit first\r\n const currentAttachments = isReply ? attachments.length : formData.attachments.length;\r\n const totalFiles = currentAttachments + files.length;\r\n \r\n if (totalFiles > 10) {\r\n // Show centered popup warning\r\n showFileWarning(`You can only select up to 10 files total. You have ${currentAttachments} files already selected and are trying to add ${files.length} more.`);\r\n e.target.value = ''; // Clear the file input\r\n return;\r\n }\r\n \r\n const validFiles = files.filter(file => {\r\n // Allowed file types\r\n const allowedTypes = [\r\n // Images\r\n 'image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp', 'image/bmp', 'image/svg+xml',\r\n // PDFs\r\n 'application/pdf',\r\n // Word\r\n 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n // Excel\r\n 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-excel.sheet.macroEnabled.12', 'text/csv',\r\n // PowerPoint\r\n 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n // Text\r\n 'text/plain', 'text/rtf', 'application/rtf',\r\n // Archives\r\n 'application/zip', 'application/x-zip-compressed', 'application/x-rar-compressed', 'application/x-7z-compressed'\r\n ];\r\n \r\n const isUnder10MB = file.size <= 10 * 1024 * 1024;\r\n \r\n if (!isUnder10MB) {\r\n showFileWarning(`File \"${file.name}\" is too large. Maximum size is 10MB per file.`);\r\n return false;\r\n }\r\n \r\n if (!allowedTypes.includes(file.type)) {\r\n showFileWarning(`File \"${file.name}\" is not supported. Allowed: Images, PDF, Word, Excel, PowerPoint, Text files, Archives (ZIP, RAR, 7Z).`);\r\n return false;\r\n }\r\n \r\n return true;\r\n });\r\n\r\n if (isReply) {\r\n setAttachments(prev => [...prev, ...validFiles]);\r\n } else {\r\n setFormData(prev => ({ ...prev, attachments: [...prev.attachments, ...validFiles] }));\r\n }\r\n \r\n // Clear the file input after processing\r\n e.target.value = '';\r\n };\r\n\r\n const removeAttachment = (index, isReply = false) => {\r\n if (isReply) {\r\n setAttachments(prev => prev.filter((_, i) => i !== index));\r\n } else {\r\n setFormData(prev => ({ \r\n ...prev, \r\n attachments: prev.attachments.filter((_, i) => i !== index) \r\n }));\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (activeTab !== 'create' && !selectedTicket) {\r\n fetchTickets();\r\n }\r\n }, [activeTab]);\r\n\r\n useEffect(() => {\r\n if (selectedTicket) {\r\n setTicketMessages([]); // Clear previous messages\r\n fetchTicketMessages(selectedTicket.ticketId);\r\n } else {\r\n setTicketMessages([]);\r\n }\r\n }, [selectedTicket]);\r\n\r\n const fetchTickets = async () => {\r\n setIsLoading(true);\r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail'),\r\n name: localStorage.getItem('chatGuestName')\r\n };\r\n \r\n // Ensure we have a valid email\r\n if (!user.email) {\r\n console.error('No customer email available');\r\n showToast('Please provide your email to view tickets', 'error');\r\n setIsLoading(false);\r\n return;\r\n }\r\n \r\n const response = await axios.get(`${apiUrl}/api/v1/email-ticketing/tickets`, {\r\n headers: { 'x-api-key': apiKey },\r\n params: {\r\n status: 'all', // Show all tickets including closed ones\r\n customerEmail: user.email\r\n },\r\n timeout: 30000 // 30 second timeout\r\n });\r\n \r\n if (response.data.success) {\r\n setTickets(response.data.data.tickets || []);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching tickets:', error);\r\n showToast('Failed to load tickets', 'error');\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const fetchTicketMessages = async (ticketId) => {\r\n setIsLoading(true);\r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail') || 'guest@example.com',\r\n name: localStorage.getItem('chatGuestName') || 'Guest User'\r\n };\r\n\r\n console.log('Fetching messages for ticket:', ticketId, 'user:', user.email);\r\n const response = await axios.get(`${apiUrl}/api/v1/email-ticketing/tickets/${ticketId}/messages`, {\r\n headers: { 'x-api-key': apiKey },\r\n params: { customerEmail: user.email },\r\n timeout: 30000 // 30 second timeout\r\n });\r\n \r\n console.log('Messages response:', response.data);\r\n if (response.data.success) {\r\n setTicketMessages(response.data.messages || []);\r\n console.log('Set messages:', response.data.messages?.length || 0);\r\n }\r\n } catch (error) {\r\n console.error('Error fetching messages:', error);\r\n setTicketMessages([]);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleCreateTicket = async (e) => {\r\n e.preventDefault();\r\n setIsLoading(true);\r\n \r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail'),\r\n name: localStorage.getItem('chatGuestName') || 'Guest User'\r\n };\r\n\r\n // Check if user is logged in (has email)\r\n if (!user.email) {\r\n showToast('❌ You can\\'t raise ticket without login', 'error');\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n const customerEmail = user.email;\r\n \r\n // Store email in localStorage for future ticket fetching\r\n if (customerEmail && customerEmail !== 'guest@example.com') {\r\n localStorage.setItem('chatGuestEmail', customerEmail);\r\n }\r\n\r\n const formDataToSend = new FormData();\r\n formDataToSend.append('subject', formData.subject);\r\n formDataToSend.append('message', formData.message);\r\n formDataToSend.append('html', formData.htmlMessage);\r\n formDataToSend.append('priority', formData.priority);\r\n formDataToSend.append('category', formData.category);\r\n formDataToSend.append('customerEmail', customerEmail);\r\n formDataToSend.append('customerName', user.name);\r\n \r\n formData.attachments.forEach((file) => {\r\n formDataToSend.append('attachments', file);\r\n });\r\n\r\n const response = await axios.post(\r\n `${apiUrl}/api/v1/email-ticketing/tickets`,\r\n formDataToSend,\r\n {\r\n headers: { \r\n 'x-api-key': apiKey\r\n },\r\n timeout: 30000 // 30 second timeout\r\n }\r\n );\r\n\r\n console.log('Ticket creation response:', response.data);\r\n if (response.data.success) {\r\n showToast('✅ Ticket created successfully!', 'success');\r\n setFormData({ \r\n subject: '', \r\n message: '', \r\n htmlMessage: '',\r\n priority: 'medium', \r\n category: 'general',\r\n attachments: []\r\n });\r\n if (editorRef.current) editorRef.current.innerHTML = '';\r\n setActiveTab('myTickets');\r\n }\r\n } catch (error) {\r\n console.error('Error creating ticket:', error);\r\n if (error.code === 'ECONNABORTED') {\r\n showToast('⏱️ Server timeout. The server may be waking up. Please wait a moment and try again.', 'error');\r\n } else if (error.response) {\r\n showToast(`❌ Failed to create ticket: ${error.response.data?.message || 'Server error'}`, 'error');\r\n } else if (error.request) {\r\n showToast('❌ Cannot reach server. Please check your connection or try again later.', 'error');\r\n } else {\r\n showToast('❌ Failed to create ticket. Please try again.', 'error');\r\n }\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleSendReply = async (e) => {\r\n e.preventDefault();\r\n if (!replyText.trim() && attachments.length === 0) return;\r\n \r\n setIsLoading(true);\r\n try {\r\n const user = userData || {\r\n email: localStorage.getItem('chatGuestEmail'),\r\n name: localStorage.getItem('chatGuestName')\r\n };\r\n\r\n const formDataToSend = new FormData();\r\n formDataToSend.append('ticketId', selectedTicket.ticketId);\r\n formDataToSend.append('message', replyText);\r\n formDataToSend.append('html', replyHtml);\r\n formDataToSend.append('senderType', 'customer');\r\n formDataToSend.append('customerEmail', user.email);\r\n \r\n attachments.forEach((file) => {\r\n formDataToSend.append('attachments', file);\r\n });\r\n\r\n const response = await axios.post(\r\n `${apiUrl}/api/v1/email-ticketing/tickets/widget/reply`,\r\n formDataToSend,\r\n {\r\n headers: { \r\n 'x-api-key': apiKey\r\n },\r\n timeout: 30000 // 30 second timeout\r\n }\r\n );\r\n\r\n if (response.data.success) {\r\n showToast('✅ Reply sent successfully!', 'success');\r\n setReplyText('');\r\n setReplyHtml('');\r\n setAttachments([]);\r\n if (editorRef.current) editorRef.current.innerHTML = '';\r\n // Refresh messages to show the new reply immediately\r\n setTimeout(() => {\r\n fetchTicketMessages(selectedTicket.ticketId);\r\n }, 500);\r\n }\r\n } catch (error) {\r\n console.error('Error sending reply:', error);\r\n if (error.code === 'ECONNABORTED') {\r\n showToast('⏱️ Request timeout. Server may be starting up. Please try again in 30 seconds.', 'error');\r\n } else if (error.response) {\r\n showToast(`❌ Failed to send reply: ${error.response.data?.message || 'Server error'}`, 'error');\r\n } else if (error.request) {\r\n showToast('❌ Cannot reach server. Please check your connection.', 'error');\r\n } else {\r\n showToast('❌ Failed to send reply. Please try again.', 'error');\r\n }\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const formatDate = (date) => {\r\n return new Date(date).toLocaleDateString('en-US', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n });\r\n };\r\n\r\n const getStatusColor = (status) => {\r\n switch (status) {\r\n case 'open': return '#10B981';\r\n case 'pending': return '#F59E0B';\r\n case 'closed': return '#6B7280';\r\n default: return '#6B7280';\r\n }\r\n };\r\n\r\n const getPriorityColor = (priority) => {\r\n switch (priority) {\r\n case 'high': return '#EF4444';\r\n case 'medium': return '#F59E0B';\r\n case 'low': return '#10B981';\r\n default: return '#6B7280';\r\n }\r\n };\r\n\r\n const getFileIcon = (contentType) => {\r\n if (contentType.startsWith('image/')) {\r\n return (\r\n <svg style={{ width: '20px', height: '20px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z\" />\r\n </svg>\r\n );\r\n }\r\n return (\r\n <svg style={{ width: '20px', height: '20px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\r\n </svg>\r\n );\r\n };\r\n\r\n // Force download via fetch + blob to bypass Cloudinary URL restrictions\r\n const forceDownloadViaBlob = async (url, filename = 'download') => {\r\n try {\r\n if (!url) return;\r\n const safeName = String(filename).replace(/\\s+/g, '_').replace(/[^a-zA-Z0-9._-]/g, '_');\r\n \r\n const response = await fetch(url);\r\n if (!response.ok) throw new Error('Download failed');\r\n const blob = await response.blob();\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = blobUrl;\r\n link.download = safeName;\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n window.URL.revokeObjectURL(blobUrl);\r\n } catch (e) {\r\n console.error('Blob download failed:', e);\r\n window.open(url, '_blank', 'noopener,noreferrer');\r\n }\r\n };\r\n\r\n const RichTextToolbar = ({ onCommand, showSendButton = false, onSend = null, isLoading = false, canSend = false }) => (\r\n <div style={{\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '8px',\r\n borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#F9FAFB'\r\n }}>\r\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\r\n <button type=\"button\" onClick={() => onCommand('bold')} style={toolbarButtonStyle} title=\"Bold\">\r\n <strong>B</strong>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('italic')} style={toolbarButtonStyle} title=\"Italic\">\r\n <em>I</em>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('underline')} style={toolbarButtonStyle} title=\"Underline\">\r\n <u>U</u>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('strikeThrough')} style={toolbarButtonStyle} title=\"Strikethrough\">\r\n <s>S</s>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('justifyLeft')} style={toolbarButtonStyle} title=\"Align Left\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('justifyCenter')} style={toolbarButtonStyle} title=\"Align Center\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('justifyRight')} style={toolbarButtonStyle} title=\"Align Right\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z\"/>\r\n </svg>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('insertUnorderedList')} style={toolbarButtonStyle} title=\"Bullet List\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('insertOrderedList')} style={toolbarButtonStyle} title=\"Numbered List\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z\"/>\r\n </svg>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('indent')} style={toolbarButtonStyle} title=\"Increase Indent\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\"/>\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => onCommand('outdent')} style={toolbarButtonStyle} title=\"Decrease Indent\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M3 21h18v-2H3v2zM3 8l4 4 4-4H3zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\"/>\r\n </svg>\r\n </button>\r\n \r\n <div style={{ width: '1px', backgroundColor: isDark ? '#374151' : '#E5E7EB', height: '20px', margin: '0 4px' }} />\r\n \r\n <button type=\"button\" onClick={() => onCommand('insertHorizontalRule')} style={toolbarButtonStyle} title=\"Insert Line\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 12H4\" />\r\n </svg>\r\n </button>\r\n <button type=\"button\" onClick={() => fileInputRef.current?.click()} style={toolbarButtonStyle} title=\"Attach File\">\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\" />\r\n </svg>\r\n </button>\r\n </div>\r\n \r\n {showSendButton && (\r\n <button\r\n type=\"button\"\r\n onClick={onSend}\r\n disabled={isLoading || !canSend}\r\n style={{\r\n padding: '6px 16px',\r\n fontSize: '12px',\r\n fontWeight: 600,\r\n color: '#fff',\r\n backgroundColor: primaryColor,\r\n border: 'none',\r\n borderRadius: '6px',\r\n cursor: isLoading || !canSend ? 'not-allowed' : 'pointer',\r\n opacity: isLoading || !canSend ? 0.5 : 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '4px',\r\n transition: 'all 0.2s'\r\n }}\r\n title={isLoading ? 'Sending...' : 'Send Reply'}\r\n >\r\n {isLoading ? (\r\n <>\r\n <svg style={{ width: '12px', height: '12px', animation: 'spin 1s linear infinite' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\r\n </svg>\r\n Sending...\r\n </>\r\n ) : (\r\n <>\r\n <svg style={{ width: '12px', height: '12px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\" />\r\n </svg>\r\n Send\r\n </>\r\n )}\r\n </button>\r\n )}\r\n </div>\r\n );\r\n\r\n const toolbarButtonStyle = {\r\n background: 'none',\r\n border: 'none',\r\n padding: '6px 10px',\r\n borderRadius: '4px',\r\n cursor: 'pointer',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n fontSize: '14px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n transition: 'background-color 0.2s',\r\n };\r\n\r\n return (\r\n <>\r\n <style>{`\r\n .ticket-message-content ul,\r\n .ticket-message-content ol {\r\n margin-left: 1.5rem;\r\n margin-top: 0.5rem;\r\n margin-bottom: 0.5rem;\r\n }\r\n .ticket-message-content ul {\r\n list-style-type: disc;\r\n }\r\n .ticket-message-content ol {\r\n list-style-type: decimal;\r\n }\r\n .ticket-message-content li {\r\n margin-bottom: 0.25rem;\r\n }\r\n .ticket-editor[contenteditable] {\r\n max-width: 100%;\r\n word-break: break-word;\r\n overflow-wrap: break-word;\r\n }\r\n .ticket-editor ul,\r\n .ticket-editor ol {\r\n margin-left: 1.5rem;\r\n margin-top: 0.5rem;\r\n margin-bottom: 0.5rem;\r\n }\r\n .ticket-editor ul {\r\n list-style-type: disc;\r\n }\r\n .ticket-editor ol {\r\n list-style-type: decimal;\r\n }\r\n .ticket-editor li {\r\n margin-bottom: 0.25rem;\r\n }\r\n .ticket-editor:empty:before {\r\n content: attr(placeholder);\r\n color: #9CA3AF;\r\n pointer-events: none;\r\n }\r\n @keyframes spin {\r\n from { transform: rotate(0deg); }\r\n to { transform: rotate(360deg); }\r\n }\r\n @keyframes modalAppear {\r\n from { \r\n transform: scale(0.9);\r\n opacity: 0;\r\n }\r\n to { \r\n transform: scale(1);\r\n opacity: 1;\r\n }\r\n }\r\n @keyframes slideInFromRight {\r\n from {\r\n transform: translateX(100%);\r\n opacity: 0;\r\n }\r\n to {\r\n transform: translateX(0);\r\n opacity: 1;\r\n }\r\n }\r\n @keyframes slideOutToRight {\r\n from {\r\n transform: translateX(0);\r\n opacity: 1;\r\n }\r\n to {\r\n transform: translateX(100%);\r\n opacity: 0;\r\n }\r\n }\r\n `}</style>\r\n <div style={{\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: isDark ? '#111827' : '#F9FAFB',\r\n zIndex: 999999,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden'\r\n }}>\r\n {/* Header */}\r\n <div style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n padding: '8px 16px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)'\r\n }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\r\n <div style={{\r\n width: '40px',\r\n height: '40px',\r\n borderRadius: '8px',\r\n backgroundColor: primaryColor,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <svg style={{ width: '20px', height: '20px', color: '#fff' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 5v2m0 4v2m0 4v2M5 5a2 2 0 00-2 2v3a2 2 0 110 4v3a2 2 0 002 2h14a2 2 0 002-2v-3a2 2 0 110-4V7a2 2 0 00-2-2H5z\" />\r\n </svg>\r\n </div>\r\n <div>\r\n <h1 style={{ margin: 0, fontSize: '20px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Support Tickets\r\n </h1>\r\n <p style={{ margin: '2px 0 0 0', fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Manage your support requests\r\n </p>\r\n </div>\r\n </div>\r\n <button onClick={onClose} style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '8px',\r\n borderRadius: '8px',\r\n display: 'flex',\r\n color: isDark ? '#9CA3AF' : '#6B7280'\r\n }}>\r\n <svg style={{ width: '24px', height: '24px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* Main Content with Sidebar Layout */}\r\n <div style={{ flex: 1, display: 'flex', overflow: 'hidden' }}>\r\n {/* Left Sidebar Navigation */}\r\n <div style={{\r\n width: '200px',\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRight: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: '16px 0'\r\n }}>\r\n <button onClick={() => { setActiveTab('create'); setSelectedTicket(null); }} style={{\r\n padding: '12px 20px',\r\n border: 'none',\r\n backgroundColor: activeTab === 'create' ? `${primaryColor}15` : 'transparent',\r\n cursor: 'pointer',\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n color: activeTab === 'create' ? primaryColor : (isDark ? '#D1D5DB' : '#6B7280'),\r\n textAlign: 'left',\r\n borderLeft: activeTab === 'create' ? `3px solid ${primaryColor}` : '3px solid transparent',\r\n transition: 'all 0.2s'\r\n }}>\r\n Create Ticket\r\n </button>\r\n <button onClick={() => { setActiveTab('myTickets'); setSelectedTicket(null); }} style={{\r\n padding: '12px 20px',\r\n border: 'none',\r\n backgroundColor: activeTab === 'myTickets' ? `${primaryColor}15` : 'transparent',\r\n cursor: 'pointer',\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n color: activeTab === 'myTickets' ? primaryColor : (isDark ? '#D1D5DB' : '#6B7280'),\r\n textAlign: 'left',\r\n borderLeft: activeTab === 'myTickets' ? `3px solid ${primaryColor}` : '3px solid transparent',\r\n transition: 'all 0.2s'\r\n }}>\r\n My Tickets\r\n </button>\r\n </div>\r\n\r\n {/* Right Content Area */}\r\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\r\n {activeTab === 'create' && (\r\n <div style={{ flex: 1, overflow: 'auto', padding: '24px' }}>\r\n <div style={{ maxWidth: '800px', margin: '0 auto' }}>\r\n {/* Check if user is logged in */}\r\n {!(userData?.email || localStorage.getItem('chatGuestEmail')) ? (\r\n <div style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n padding: '48px 24px',\r\n textAlign: 'center',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB'\r\n }}>\r\n <div style={{\r\n width: '80px',\r\n height: '80px',\r\n margin: '0 auto 24px',\r\n borderRadius: '50%',\r\n backgroundColor: '#FEE2E2',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center'\r\n }}>\r\n <svg style={{ width: '40px', height: '40px', color: '#EF4444' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\" />\r\n </svg>\r\n </div>\r\n <h2 style={{ \r\n margin: '0 0 12px 0', \r\n fontSize: '20px', \r\n fontWeight: 600, \r\n color: isDark ? '#F9FAFB' : '#111827' \r\n }}>\r\n Login Required\r\n </h2>\r\n <p style={{ \r\n margin: '0 0 24px 0', \r\n fontSize: '14px', \r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n lineHeight: '1.5'\r\n }}>\r\n You can't raise ticket without login. Please login to your account to create support tickets.\r\n </p>\r\n </div>\r\n ) : (\r\n <div style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n padding: '24px',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB'\r\n }}>\r\n <h2 style={{ margin: '0 0 16px 0', fontSize: '18px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Create New Support Ticket\r\n </h2>\r\n <form onSubmit={handleCreateTicket}>\r\n <div style={{ marginBottom: '16px' }}>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Subject *\r\n </label>\r\n <input\r\n type=\"text\"\r\n name=\"subject\"\r\n value={formData.subject}\r\n onChange={(e) => setFormData(prev => ({ ...prev, subject: e.target.value }))}\r\n required\r\n placeholder=\"Brief description of your issue\"\r\n style={{\r\n width: '100%',\r\n padding: '10px 12px',\r\n fontSize: '14px',\r\n borderRadius: '8px',\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n outline: 'none'\r\n }}\r\n />\r\n </div>\r\n\r\n <div style={{ marginBottom: '16px' }}>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Description *\r\n </label>\r\n <div style={{\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n borderRadius: '8px',\r\n overflow: 'hidden'\r\n }}>\r\n <RichTextToolbar onCommand={execCommand} />\r\n <div\r\n ref={editorRef}\r\n className=\"ticket-editor\"\r\n contentEditable\r\n onInput={handleEditorInput}\r\n placeholder=\"Provide detailed information about your issue...\"\r\n style={{\r\n minHeight: '150px',\r\n maxHeight: '300px',\r\n overflowY: 'auto',\r\n padding: '12px',\r\n fontSize: '14px',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n outline: 'none'\r\n }}\r\n />\r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n multiple\r\n accept=\"image/*,.pdf,.doc,.docx,.xls,.xlsx,.xlsm,.csv,.ppt,.pptx,.txt,.rtf,.zip,.rar,.7z\"\r\n onChange={(e) => handleFileSelect(e, false)}\r\n style={{ display: 'none' }}\r\n />\r\n {formData.attachments.length > 0 && (\r\n <div style={{\r\n padding: '8px 12px',\r\n borderTop: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n }}>\r\n {formData.attachments.map((file, i) => (\r\n <div key={i} style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px',\r\n padding: '4px 8px',\r\n borderRadius: '6px',\r\n backgroundColor: isDark ? '#374151' : '#F3F4F6',\r\n fontSize: '12px',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}>\r\n {getFileIcon(file.type)}\r\n <span>{file.name}</span>\r\n <button\r\n type=\"button\"\r\n onClick={() => removeAttachment(i, false)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '2px',\r\n color: '#EF4444'\r\n }}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '16px', marginBottom: '20px' }}>\r\n <div>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Priority\r\n </label>\r\n <select\r\n value={formData.priority}\r\n onChange={(e) => setFormData(prev => ({ ...prev, priority: e.target.value }))}\r\n style={{\r\n width: '100%',\r\n padding: '10px 12px',\r\n fontSize: '14px',\r\n borderRadius: '8px',\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}\r\n >\r\n <option value=\"low\">Low</option>\r\n <option value=\"medium\">Medium</option>\r\n <option value=\"high\">High</option>\r\n </select>\r\n </div>\r\n\r\n <div>\r\n <label style={{ display: 'block', marginBottom: '6px', fontSize: '14px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Category\r\n </label>\r\n <select\r\n value={formData.category}\r\n onChange={(e) => setFormData(prev => ({ ...prev, category: e.target.value }))}\r\n style={{\r\n width: '100%',\r\n padding: '10px 12px',\r\n fontSize: '14px',\r\n borderRadius: '8px',\r\n border: isDark ? '1px solid #374151' : '1px solid #D1D5DB',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}\r\n >\r\n <option value=\"general\">General</option>\r\n <option value=\"technical\">Technical Issue</option>\r\n <option value=\"billing\">Billing</option>\r\n <option value=\"feature\">Feature Request</option>\r\n <option value=\"bug\">Bug Report</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || !formData.subject || !formData.message}\r\n style={{\r\n width: '100%',\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600,\r\n color: '#fff',\r\n backgroundColor: primaryColor,\r\n border: 'none',\r\n borderRadius: '8px',\r\n cursor: isLoading ? 'not-allowed' : 'pointer',\r\n opacity: isLoading || !formData.subject || !formData.message ? 0.5 : 1\r\n }}\r\n >\r\n {isLoading ? 'Creating Ticket...' : 'Submit Ticket'}\r\n </button>\r\n </form>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* My Tickets View with Three Columns */}\r\n {activeTab === 'myTickets' && (\r\n <div style={{ flex: 1, display: 'flex', overflow: 'hidden' }}>\r\n {/* Left: Ticket List Sidebar - w-80 equivalent (320px) */}\r\n <div style={{\r\n width: '320px',\r\n borderRight: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#F9FAFB',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n overflow: 'hidden'\r\n }}>\r\n <div style={{ padding: '16px', borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB', flexShrink: 0 }}>\r\n <h3 style={{ margin: 0, fontSize: '14px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n My Tickets\r\n </h3>\r\n </div>\r\n <div style={{ flex: 1, overflow: 'auto' }}>\r\n {isLoading ? (\r\n <div style={{ textAlign: 'center', padding: '40px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Loading tickets...\r\n </div>\r\n ) : tickets.length === 0 ? (\r\n <div style={{ textAlign: 'center', padding: '40px' }}>\r\n <p style={{ margin: 0, fontSize: '14px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n No tickets found\r\n </p>\r\n </div>\r\n ) : (\r\n <div style={{ padding: '8px' }}>\r\n {tickets.map((ticket) => {\r\n const hasUnread = ticket.hasUnreadMessages || (ticket.lastActivityAt && new Date(ticket.lastActivityAt) > new Date(ticket.lastViewedAt || 0));\r\n const isActive = selectedTicket && selectedTicket._id === ticket._id;\r\n \r\n return (\r\n <div\r\n key={ticket._id}\r\n onClick={() => setSelectedTicket(ticket)}\r\n style={{\r\n padding: '12px',\r\n marginBottom: '8px',\r\n borderRadius: '8px',\r\n cursor: 'pointer',\r\n backgroundColor: isActive \r\n ? (isDark ? '#374151' : '#fff')\r\n : (isDark ? '#1F2937' : '#fff'),\r\n border: isActive \r\n ? `2px solid ${primaryColor}` \r\n : hasUnread\r\n ? `2px solid ${primaryColor}40`\r\n : isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n transition: 'all 0.2s',\r\n position: 'relative'\r\n }}\r\n >\r\n {hasUnread && (\r\n <div style={{\r\n position: 'absolute',\r\n top: '8px',\r\n right: '8px',\r\n width: '8px',\r\n height: '8px',\r\n borderRadius: '50%',\r\n backgroundColor: '#EF4444'\r\n }} />\r\n )}\r\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '4px' }}>\r\n <h4 style={{ \r\n margin: 0, \r\n fontSize: '13px', \r\n fontWeight: isActive ? 700 : 600, \r\n color: isDark ? '#F9FAFB' : '#111827',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n flex: 1\r\n }}>\r\n {ticket.subject}\r\n </h4>\r\n <button\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n if (selectedTicket && selectedTicket._id === ticket._id) {\r\n fetchTicketMessages(ticket.ticketId);\r\n } else {\r\n fetchTickets();\r\n }\r\n }}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n borderRadius: '4px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n display: 'flex',\r\n alignItems: 'center',\r\n opacity: 0.7,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.opacity = '1';\r\n e.target.style.backgroundColor = isDark ? '#374151' : '#F3F4F6';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.opacity = '0.7';\r\n e.target.style.backgroundColor = 'transparent';\r\n }}\r\n title=\"Refresh\"\r\n >\r\n <svg style={{ width: '14px', height: '14px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <p style={{ margin: '0 0 8px 0', fontSize: '11px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {ticket.ticketId}\r\n </p>\r\n <p style={{ margin: '0 0 6px 0', fontSize: '11px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {formatDate(ticket.createdAt)}\r\n </p>\r\n <div style={{ display: 'flex', gap: '4px', flexWrap: 'wrap' }}>\r\n <span style={{\r\n padding: '2px 6px',\r\n fontSize: '10px',\r\n fontWeight: 500,\r\n borderRadius: '4px',\r\n backgroundColor: `${getStatusColor(ticket.status)}20`,\r\n color: getStatusColor(ticket.status)\r\n }}>\r\n {ticket.status}\r\n </span>\r\n <span style={{\r\n padding: '2px 6px',\r\n fontSize: '10px',\r\n fontWeight: 500,\r\n borderRadius: '4px',\r\n backgroundColor: `${getPriorityColor(ticket.priority)}20`,\r\n color: getPriorityColor(ticket.priority)\r\n }}>\r\n {ticket.priority}\r\n </span>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {/* Right: Ticket Detail or Empty State */}\r\n {!selectedTicket ? (\r\n <div style={{ \r\n flex: 1, \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n backgroundColor: isDark ? '#111827' : '#F9FAFB'\r\n }}>\r\n <div style={{ textAlign: 'center', padding: '40px' }}>\r\n <svg style={{ width: '64px', height: '64px', margin: '0 auto 16px', color: isDark ? '#374151' : '#D1D5DB' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\" />\r\n </svg>\r\n <h3 style={{ margin: '0 0 8px 0', fontSize: '18px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Select a ticket\r\n </h3>\r\n <p style={{ margin: 0, fontSize: '14px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Choose a ticket from the list to view details\r\n </p>\r\n </div>\r\n </div>\r\n ) : (\r\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', overflow: 'hidden' }}>\r\n <div style={{\r\n padding: '8px 16px',\r\n borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#fff'\r\n }}>\r\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\r\n <div style={{ flex: 1 }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '2px' }}>\r\n <h2 style={{ margin: 0, fontSize: '18px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n {selectedTicket.subject}\r\n </h2>\r\n <span style={{\r\n padding: '2px 8px',\r\n fontSize: '11px',\r\n fontWeight: 500,\r\n borderRadius: '4px',\r\n backgroundColor: `${getStatusColor(selectedTicket.status)}20`,\r\n color: getStatusColor(selectedTicket.status)\r\n }}>\r\n {selectedTicket.status}\r\n </span>\r\n </div>\r\n <p style={{ margin: 0, fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {selectedTicket.ticketId}\r\n </p>\r\n </div>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\r\n <button\r\n onClick={() => fetchTicketMessages(selectedTicket.ticketId)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '8px',\r\n borderRadius: '6px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n display: 'flex',\r\n alignItems: 'center',\r\n opacity: 0.8,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.opacity = '1';\r\n e.target.style.backgroundColor = isDark ? '#374151' : '#F3F4F6';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.opacity = '0.8';\r\n e.target.style.backgroundColor = 'transparent';\r\n }}\r\n title=\"Refresh conversation\"\r\n >\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\" />\r\n </svg>\r\n </button>\r\n <button\r\n onClick={() => setSelectedTicket(null)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '8px',\r\n borderRadius: '6px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n display: 'flex',\r\n alignItems: 'center',\r\n opacity: 0.8,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.opacity = '1';\r\n e.target.style.backgroundColor = isDark ? '#374151' : '#F3F4F6';\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.opacity = '0.8';\r\n e.target.style.backgroundColor = 'transparent';\r\n }}\r\n title=\"Close\"\r\n >\r\n <svg style={{ width: '18px', height: '18px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div style={{ flex: 1, overflow: 'auto', padding: '16px 24px' }}>\r\n {isLoading ? (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '40px 20px',\r\n color: isDark ? '#9CA3AF' : '#6B7280'\r\n }}>\r\n <div style={{\r\n width: '20px',\r\n height: '20px',\r\n border: `2px solid ${primaryColor}`,\r\n borderTop: '2px solid transparent',\r\n borderRadius: '50%',\r\n animation: 'spin 1s linear infinite',\r\n marginRight: '10px'\r\n }}></div>\r\n {replyText.trim() || attachments.length > 0 ? 'Sending reply...' : 'Loading conversation...'}\r\n </div>\r\n ) : ticketMessages.length === 0 ? (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '40px 20px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n textAlign: 'center'\r\n }}>\r\n No messages in this conversation yet.\r\n </div>\r\n ) : (\r\n ticketMessages.map((msg, idx) => (\r\n <div key={msg._id || idx} style={{ marginBottom: '16px', width: '100%' }}>\r\n <div style={{\r\n width: '100%',\r\n backgroundColor: msg.senderType === 'customer' \r\n ? (isDark ? '#1E3A8A20' : '#DBEAFE')\r\n : (isDark ? '#1F2937' : '#F3F4F6'),\r\n borderRadius: '8px',\r\n padding: '12px',\r\n border: isDark \r\n ? (msg.senderType === 'customer' ? '1px solid #1E40AF' : '1px solid #374151')\r\n : (msg.senderType === 'customer' ? '1px solid #93C5FD' : '1px solid #E5E7EB')\r\n }}>\r\n <div style={{\r\n fontSize: '12px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n marginBottom: '8px',\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n fontWeight: 500\r\n }}>\r\n <span>\r\n {msg.senderType === 'customer' \r\n ? (msg.senderName || 'You')\r\n : (msg.sender?.alias || msg.senderName || 'AGENT').toUpperCase()\r\n }\r\n </span>\r\n <span>{formatDate(msg.createdAt)}</span>\r\n </div>\r\n <div \r\n className=\"ticket-message-content\"\r\n style={{ \r\n color: isDark ? '#F9FAFB' : '#111827',\r\n fontSize: '14px',\r\n lineHeight: '1.5',\r\n wordBreak: 'break-word',\r\n overflowWrap: 'break-word',\r\n whiteSpace: 'pre-wrap'\r\n }}\r\n dangerouslySetInnerHTML={{ __html: msg.html || msg.message }}\r\n />\r\n {msg.attachments && msg.attachments.length > 0 && (\r\n <div style={{ marginTop: '12px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\r\n {msg.attachments.map((att, i) => {\r\n return (\r\n <div key={i} style={{\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n borderRadius: '8px',\r\n overflow: 'hidden'\r\n }}>\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n padding: '8px 12px',\r\n backgroundColor: isDark ? '#111827' : '#F9FAFB'\r\n }}>\r\n <div style={{ \r\n display: 'flex', \r\n alignItems: 'center', \r\n gap: '8px',\r\n flex: 1,\r\n minWidth: 0\r\n }}>\r\n {getFileIcon(att.contentType)}\r\n <span style={{ \r\n fontSize: '12px',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap'\r\n }}>\r\n {att.filename}\r\n </span>\r\n {att.size && (\r\n <span style={{ \r\n color: isDark ? '#9CA3AF' : '#6B7280', \r\n fontSize: '12px',\r\n flexShrink: 0\r\n }}>\r\n ({(att.size / 1024).toFixed(1)} KB)\r\n </span>\r\n )}\r\n </div>\r\n <button\r\n onClick={async (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n try {\r\n const safeName = String(att.filename || 'download').replace(/\\s+/g, '_').replace(/[^a-zA-Z0-9._-]/g, '_');\r\n if (att.url && att.url.includes('cloudinary.com')) {\r\n const endpoint = `${apiUrl}/api/v1/email-ticketing/attachments/download?filename=${encodeURIComponent(safeName)}&url=${encodeURIComponent(att.url)}`;\r\n const link = document.createElement('a');\r\n link.href = endpoint;\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n } else if (att.url) {\r\n const link = document.createElement('a');\r\n link.href = att.url;\r\n link.download = safeName;\r\n link.rel = 'noopener';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n } catch (err) {\r\n console.error('Download failed:', err);\r\n window.open(att.url, '_blank', 'noopener,noreferrer');\r\n }\r\n }}\r\n style={{\r\n marginLeft: '8px',\r\n padding: '4px 8px',\r\n fontSize: '12px',\r\n backgroundColor: primaryColor,\r\n color: '#fff',\r\n borderRadius: '4px',\r\n border: 'none',\r\n cursor: 'pointer',\r\n flexShrink: 0,\r\n transition: 'all 0.2s'\r\n }}\r\n onMouseEnter={(e) => e.target.style.backgroundColor = `${primaryColor}dd`}\r\n onMouseLeave={(e) => e.target.style.backgroundColor = primaryColor}\r\n >\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )))}\r\n </div>\r\n {selectedTicket.status !== 'closed' && (\r\n <div style={{\r\n borderTop: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n padding: '16px 24px'\r\n }}>\r\n <div style={{\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n borderRadius: '8px',\r\n overflow: 'hidden'\r\n }}>\r\n <RichTextToolbar \r\n onCommand={execCommand} \r\n showSendButton={true}\r\n onSend={(e) => {\r\n e.preventDefault();\r\n handleSendReply(e);\r\n }}\r\n isLoading={isLoading}\r\n canSend={replyText.trim() || attachments.length > 0}\r\n />\r\n <div\r\n ref={editorRef}\r\n className=\"ticket-editor\"\r\n contentEditable\r\n onInput={handleReplyEditorInput}\r\n placeholder=\"Type your reply...\"\r\n style={{\r\n minHeight: '100px',\r\n maxHeight: '200px',\r\n overflowY: 'auto',\r\n padding: '12px',\r\n fontSize: '14px',\r\n color: isDark ? '#F9FAFB' : '#111827',\r\n backgroundColor: isDark ? '#111827' : '#fff',\r\n outline: 'none'\r\n }}\r\n />\r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n multiple\r\n accept=\"image/*,.pdf,.doc,.docx,.xls,.xlsx,.xlsm,.csv,.ppt,.pptx,.txt,.rtf,.zip,.rar,.7z\"\r\n onChange={(e) => handleFileSelect(e, true)}\r\n style={{ display: 'none' }}\r\n />\r\n {attachments.length > 0 && (\r\n <div style={{\r\n padding: '8px 12px',\r\n borderTop: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n }}>\r\n {attachments.map((file, i) => (\r\n <div key={i} style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px',\r\n padding: '4px 8px',\r\n borderRadius: '6px',\r\n backgroundColor: isDark ? '#374151' : '#F3F4F6',\r\n fontSize: '12px',\r\n color: isDark ? '#F9FAFB' : '#111827'\r\n }}>\r\n {getFileIcon(file.type)}\r\n <span>{file.name}</span>\r\n <button\r\n type=\"button\"\r\n onClick={() => removeAttachment(i, true)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '2px',\r\n color: '#EF4444'\r\n }}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* History View section removed - no longer accessible */}\r\n {false && (\r\n <div style={{ flex: 1, overflow: 'auto', padding: '24px' }}>\r\n <div style={{ maxWidth: '1200px', margin: '0 auto' }}>\r\n {isLoading ? (\r\n <div style={{ textAlign: 'center', padding: '40px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Loading tickets...\r\n </div>\r\n ) : tickets.length === 0 ? (\r\n <div style={{ textAlign: 'center', padding: '40px' }}>\r\n <p style={{ margin: 0, fontSize: '16px', fontWeight: 500, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n No tickets found\r\n </p>\r\n </div>\r\n ) : (\r\n <div style={{ display: 'grid', gap: '16px' }}>\r\n {tickets.map((ticket) => {\r\n const hasUnread = ticket.hasUnreadMessages || (ticket.lastActivityAt && new Date(ticket.lastActivityAt) > new Date(ticket.lastViewedAt || 0));\r\n \r\n return (\r\n <div\r\n key={ticket._id}\r\n style={{\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n padding: '20px 24px',\r\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\r\n border: hasUnread\r\n ? `2px solid ${primaryColor}40`\r\n : isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n transition: 'all 0.2s',\r\n position: 'relative'\r\n }}\r\n >\r\n {hasUnread && (\r\n <div style={{\r\n position: 'absolute',\r\n top: '12px',\r\n left: '12px',\r\n width: '10px',\r\n height: '10px',\r\n borderRadius: '50%',\r\n backgroundColor: '#EF4444',\r\n border: '2px solid #fff'\r\n }} />\r\n )}\r\n \r\n {/* Header Section */}\r\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', marginBottom: '12px', paddingLeft: hasUnread ? '16px' : '0' }}>\r\n <div style={{ flex: 1 }}>\r\n <h3 style={{ \r\n margin: '0 0 6px 0', \r\n fontSize: '18px', \r\n fontWeight: hasUnread ? 700 : 600, \r\n color: isDark ? '#F9FAFB' : '#111827',\r\n lineHeight: '1.4'\r\n }}>\r\n {ticket.subject}\r\n </h3>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginBottom: '4px' }}>\r\n <span style={{ \r\n fontSize: '13px', \r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n fontWeight: 500\r\n }}>\r\n {ticket.ticketId}\r\n </span>\r\n <span style={{ color: isDark ? '#4B5563' : '#D1D5DB' }}>•</span>\r\n <span style={{ fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n {formatDate(ticket.createdAt)}\r\n </span>\r\n </div>\r\n {ticket.assignedTo && (\r\n <p style={{ margin: '0', fontSize: '12px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Assigned to: <span style={{ fontWeight: 500 }}>{ticket.assignedTo.alias || ticket.assignedTo.name}</span>\r\n </p>\r\n )}\r\n </div>\r\n <div style={{ display: 'flex', gap: '6px', alignItems: 'center', flexShrink: 0, marginLeft: '16px' }}>\r\n <span style={{\r\n padding: '4px 8px',\r\n fontSize: '11px',\r\n fontWeight: 600,\r\n borderRadius: '4px',\r\n backgroundColor: `${getPriorityColor(ticket.priority)}15`,\r\n color: getPriorityColor(ticket.priority),\r\n border: `1px solid ${getPriorityColor(ticket.priority)}30`\r\n }}>\r\n {ticket.priority.toUpperCase()}\r\n </span>\r\n <span style={{\r\n padding: '4px 8px',\r\n fontSize: '11px',\r\n fontWeight: 600,\r\n borderRadius: '4px',\r\n backgroundColor: `${getStatusColor(ticket.status)}15`,\r\n color: getStatusColor(ticket.status),\r\n border: `1px solid ${getStatusColor(ticket.status)}30`\r\n }}>\r\n {ticket.status.toUpperCase()}\r\n </span>\r\n </div>\r\n </div>\r\n \r\n {/* Email Content Preview */}\r\n {ticket.message && (\r\n <div style={{\r\n backgroundColor: isDark ? '#111827' : '#F8FAFC',\r\n border: isDark ? '1px solid #374151' : '1px solid #E2E8F0',\r\n borderRadius: '8px',\r\n padding: '16px',\r\n marginBottom: '12px'\r\n }}>\r\n <div style={{\r\n fontSize: '12px',\r\n color: isDark ? '#9CA3AF' : '#64748B',\r\n fontWeight: 500,\r\n marginBottom: '8px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '6px'\r\n }}>\r\n <svg style={{ width: '14px', height: '14px' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"/>\r\n </svg>\r\n Original Email Content\r\n </div>\r\n <div \r\n className=\"ticket-message-content\"\r\n style={{\r\n color: isDark ? '#E5E7EB' : '#334155',\r\n fontSize: '14px',\r\n lineHeight: '1.6',\r\n wordBreak: 'break-word',\r\n overflowWrap: 'break-word',\r\n maxHeight: '120px',\r\n overflow: 'hidden',\r\n position: 'relative'\r\n }}\r\n dangerouslySetInnerHTML={{ \r\n __html: (ticket.html || ticket.message || '').length > 300 \r\n ? (ticket.html || ticket.message || '').substring(0, 300) + '...'\r\n : (ticket.html || ticket.message || '')\r\n }}\r\n />\r\n {(ticket.html || ticket.message || '').length > 300 && (\r\n <div style={{\r\n position: 'absolute',\r\n bottom: '0',\r\n right: '0',\r\n background: `linear-gradient(to right, transparent, ${isDark ? '#111827' : '#F8FAFC'})`,\r\n padding: '0 8px',\r\n fontSize: '12px',\r\n color: primaryColor,\r\n fontWeight: 500\r\n }}>\r\n Read more...\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n \r\n {/* Attachments Preview */}\r\n {ticket.attachments && ticket.attachments.length > 0 && (\r\n <div style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n padding: '8px 12px',\r\n backgroundColor: isDark ? '#374151' : '#F1F5F9',\r\n borderRadius: '6px',\r\n marginBottom: '8px'\r\n }}>\r\n <svg style={{ width: '16px', height: '16px', color: isDark ? '#9CA3AF' : '#64748B' }} fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/>\r\n </svg>\r\n <span style={{ fontSize: '12px', color: isDark ? '#D1D5DB' : '#475569', fontWeight: 500 }}>\r\n {ticket.attachments.length} attachment{ticket.attachments.length > 1 ? 's' : ''}\r\n </span>\r\n </div>\r\n )}\r\n \r\n {/* Action Button */}\r\n <button\r\n onClick={() => setSelectedTicket(ticket)}\r\n style={{\r\n width: '100%',\r\n padding: '10px 16px',\r\n fontSize: '13px',\r\n fontWeight: 600,\r\n color: primaryColor,\r\n backgroundColor: 'transparent',\r\n border: `1px solid ${primaryColor}40`,\r\n borderRadius: '6px',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '6px'\r\n }}\r\n onMouseEnter={(e) => {\r\n e.target.style.backgroundColor = `${primaryColor}10`;\r\n e.target.style.borderColor = primaryColor;\r\n }}\r\n onMouseLeave={(e) => {\r\n e.target.style.backgroundColor = 'transparent';\r\n e.target.style.borderColor = `${primaryColor}40`;\r\n }}\r\n >\r\n <svg style={{ width: '14px', height: '14px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z\" />\r\n </svg>\r\n View Full Conversation\r\n </button>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n \r\n </div>\r\n {/* End of Right Content Area */}\r\n </div>\r\n {/* End of Main Content with Sidebar Layout */}\r\n\r\n {/* File Warning Popup - Keep for important file errors */}\r\n {fileWarning && (\r\n <div style={{\r\n position: 'fixed',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 10000,\r\n padding: '20px'\r\n }}>\r\n <div style={{\r\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\r\n color: isDark ? '#f9fafb' : '#111827',\r\n borderRadius: '16px',\r\n padding: '32px 40px',\r\n boxShadow: '0 20px 60px rgba(0, 0, 0, 0.3)',\r\n maxWidth: '500px',\r\n width: '100%',\r\n textAlign: 'center',\r\n border: isDark ? '1px solid #374151' : '1px solid #e5e7eb',\r\n position: 'relative',\r\n transform: 'scale(1)',\r\n animation: 'modalAppear 0.3s ease-out'\r\n }}>\r\n <div style={{\r\n width: '64px',\r\n height: '64px',\r\n borderRadius: '50%',\r\n backgroundColor: '#fef2f2',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto 20px',\r\n border: '3px solid #fee2e2'\r\n }}>\r\n <svg style={{ width: '32px', height: '32px', color: '#ef4444' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z\" />\r\n </svg>\r\n </div>\r\n <h3 style={{\r\n color: '#ef4444',\r\n fontSize: '20px',\r\n fontWeight: '700',\r\n marginBottom: '12px',\r\n margin: '0 0 12px 0'\r\n }}>\r\n File Upload Limit Exceeded\r\n </h3>\r\n <p style={{\r\n fontSize: '16px',\r\n lineHeight: '1.6',\r\n color: isDark ? '#d1d5db' : '#6b7280',\r\n marginBottom: '24px',\r\n margin: '0 0 24px 0'\r\n }}>\r\n {fileWarning}\r\n </p>\r\n <div style={{ display: 'flex', gap: '12px', justifyContent: 'center' }}>\r\n <button\r\n onClick={() => setFileWarning(null)}\r\n style={{\r\n padding: '12px 32px',\r\n backgroundColor: '#ef4444',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '8px',\r\n fontSize: '16px',\r\n fontWeight: '600',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n boxShadow: '0 4px 12px rgba(239, 68, 68, 0.3)'\r\n }}\r\n onMouseOver={(e) => {\r\n e.target.style.backgroundColor = '#dc2626';\r\n e.target.style.transform = 'translateY(-1px)';\r\n e.target.style.boxShadow = '0 6px 16px rgba(239, 68, 68, 0.4)';\r\n }}\r\n onMouseOut={(e) => {\r\n e.target.style.backgroundColor = '#ef4444';\r\n e.target.style.transform = 'translateY(0)';\r\n e.target.style.boxShadow = '0 4px 12px rgba(239, 68, 68, 0.3)';\r\n }}\r\n >\r\n Understood\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Toast Notifications - Bottom Right */}\r\n {toasts.length > 0 && (\r\n <div style={{\r\n position: 'fixed',\r\n bottom: '20px',\r\n right: '20px',\r\n zIndex: 10001,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '12px',\r\n pointerEvents: 'none'\r\n }}>\r\n {toasts.map((toast) => (\r\n <div\r\n key={toast.id}\r\n style={{\r\n backgroundColor: isDark ? '#1f2937' : '#ffffff',\r\n color: isDark ? '#f9fafb' : '#111827',\r\n padding: '16px 20px',\r\n borderRadius: '12px',\r\n boxShadow: '0 8px 25px rgba(0, 0, 0, 0.15)',\r\n border: `2px solid ${toast.type === 'success' ? '#10b981' : '#ef4444'}`,\r\n minWidth: '300px',\r\n maxWidth: '400px',\r\n animation: 'slideInFromRight 0.3s ease-out',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n pointerEvents: 'auto'\r\n }}\r\n >\r\n <div style={{\r\n width: '24px',\r\n height: '24px',\r\n borderRadius: '50%',\r\n backgroundColor: toast.type === 'success' ? '#10b981' : '#ef4444',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0\r\n }}>\r\n {toast.type === 'success' ? (\r\n <svg style={{ width: '14px', height: '14px', color: 'white' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\r\n </svg>\r\n ) : (\r\n <svg style={{ width: '14px', height: '14px', color: 'white' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n )}\r\n </div>\r\n <div style={{\r\n flex: 1,\r\n fontSize: '14px',\r\n fontWeight: '500',\r\n lineHeight: '1.4'\r\n }}>\r\n {toast.message}\r\n </div>\r\n <button\r\n onClick={() => setToasts(prev => prev.filter(t => t.id !== toast.id))}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n borderRadius: '4px',\r\n color: isDark ? '#9ca3af' : '#6b7280',\r\n flexShrink: 0,\r\n opacity: 0.7,\r\n transition: 'opacity 0.2s'\r\n }}\r\n onMouseEnter={(e) => e.target.style.opacity = '1'}\r\n onMouseLeave={(e) => e.target.style.opacity = '0.7'}\r\n >\r\n <svg style={{ width: '16px', height: '16px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n\r\n </div>\r\n {/* End of container */}\r\n </>\r\n );\r\n};\r\n\r\nexport default TicketBoard;\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport './CameraCapture.css';\r\n\r\n/**\r\n * 📸 Camera Capture Component - Redesigned for Better Mobile UX\r\n * \r\n * Features:\r\n * - Large, visible capture button\r\n * - Clear 3-step flow: Camera → Capture → Preview → Submit\r\n * - Mobile-first responsive design\r\n * - Retake functionality\r\n * - Better visual hierarchy\r\n * - No external dependencies\r\n */\r\nconst CameraCapture = ({ onCapture, onClose, requesterName = 'Agent' }) => {\r\n const [stream, setStream] = useState(null);\r\n const [capturedImage, setCapturedImage] = useState(null);\r\n const [cameraActive, setCameraActive] = useState(false);\r\n const [facingMode, setFacingMode] = useState('environment'); // Start with back camera\r\n const [error, setError] = useState(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const videoRef = useRef(null);\r\n const canvasRef = useRef(null);\r\n\r\n useEffect(() => {\r\n startCamera();\r\n return () => {\r\n stopCamera();\r\n };\r\n }, [facingMode]);\r\n\r\n const startCamera = async () => {\r\n try {\r\n setError(null);\r\n setIsLoading(true);\r\n const mediaStream = await navigator.mediaDevices.getUserMedia({\r\n video: { \r\n facingMode,\r\n width: { ideal: 1920 },\r\n height: { ideal: 1080 }\r\n },\r\n audio: false,\r\n });\r\n setStream(mediaStream);\r\n if (videoRef.current) {\r\n videoRef.current.srcObject = mediaStream;\r\n }\r\n setCameraActive(true);\r\n setIsLoading(false);\r\n } catch (err) {\r\n console.error('Camera access error:', err);\r\n setError('Camera access denied. Please allow camera permissions.');\r\n setCameraActive(false);\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const stopCamera = () => {\r\n if (stream) {\r\n stream.getTracks().forEach(track => track.stop());\r\n setStream(null);\r\n setCameraActive(false);\r\n }\r\n };\r\n\r\n const capturePhoto = () => {\r\n if (!videoRef.current || !canvasRef.current) return;\r\n\r\n const video = videoRef.current;\r\n const canvas = canvasRef.current;\r\n const context = canvas.getContext('2d');\r\n\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n\r\n const imageData = canvas.toDataURL('image/jpeg', 0.95);\r\n setCapturedImage(imageData);\r\n stopCamera();\r\n };\r\n\r\n const retakePhoto = () => {\r\n setCapturedImage(null);\r\n startCamera();\r\n };\r\n\r\n const sendPhoto = () => {\r\n if (capturedImage && onCapture) {\r\n onCapture(capturedImage);\r\n handleClose();\r\n }\r\n };\r\n\r\n const toggleCamera = () => {\r\n setFacingMode(prev => prev === 'user' ? 'environment' : 'user');\r\n };\r\n\r\n const handleClose = () => {\r\n stopCamera();\r\n if (onClose) {\r\n onClose();\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"camera-capture-wrapper\">\r\n {/* Header Banner */}\r\n <div className=\"camera-header-banner\">\r\n <div className=\"camera-header-content\">\r\n <div className=\"camera-icon-badge\">📸</div>\r\n <div className=\"camera-header-text\">\r\n <h3 className=\"camera-title\">Camera Capture</h3>\r\n <p className=\"camera-subtitle\">{requesterName} requested a photo</p>\r\n </div>\r\n </div>\r\n <button className=\"camera-close-button\" onClick={handleClose}>\r\n <span>✕</span>\r\n </button>\r\n </div>\r\n\r\n {/* Camera View Area */}\r\n <div className=\"camera-view-container\">\r\n {error ? (\r\n <div className=\"camera-error-state\">\r\n <div className=\"error-icon-large\">📷</div>\r\n <p className=\"error-message\">{error}</p>\r\n <button className=\"retry-button\" onClick={startCamera}>\r\n 🔄 Try Again\r\n </button>\r\n </div>\r\n ) : isLoading ? (\r\n <div className=\"camera-loading-state\">\r\n <div className=\"loading-spinner\"></div>\r\n <p>Loading camera...</p>\r\n </div>\r\n ) : capturedImage ? (\r\n // Preview Mode\r\n <div className=\"camera-preview-mode\">\r\n <div className=\"preview-image-wrapper\">\r\n <img src={capturedImage} alt=\"Captured\" className=\"preview-image\" />\r\n <div className=\"preview-badge\">Preview</div>\r\n </div>\r\n </div>\r\n ) : (\r\n // Live Camera Mode\r\n <div className=\"camera-live-mode\">\r\n <video\r\n ref={videoRef}\r\n autoPlay\r\n playsInline\r\n muted\r\n className=\"camera-video-feed\"\r\n />\r\n <div className=\"camera-overlay\">\r\n <div className=\"camera-frame\"></div>\r\n </div>\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Action Buttons */}\r\n <div className=\"camera-action-section\">\r\n {capturedImage ? (\r\n // Preview Mode Actions\r\n <div className=\"preview-actions\">\r\n <button className=\"action-button retake-button\" onClick={retakePhoto}>\r\n <span className=\"button-icon\">🔄</span>\r\n <span className=\"button-text\">Retake</span>\r\n </button>\r\n <button className=\"action-button submit-button\" onClick={sendPhoto}>\r\n <span className=\"button-icon\">✓</span>\r\n <span className=\"button-text\">Submit Photo</span>\r\n </button>\r\n </div>\r\n ) : (\r\n // Camera Mode Actions\r\n <div className=\"camera-actions\">\r\n <button \r\n className=\"flip-camera-button\" \r\n onClick={toggleCamera}\r\n disabled={!cameraActive}\r\n >\r\n <span className=\"flip-icon\">🔄</span>\r\n <span className=\"flip-text\">Flip</span>\r\n </button>\r\n \r\n <button \r\n className=\"capture-button-main\" \r\n onClick={capturePhoto}\r\n disabled={!cameraActive}\r\n >\r\n <div className=\"capture-button-inner\">\r\n <div className=\"capture-ring\"></div>\r\n <div className=\"capture-center\"></div>\r\n </div>\r\n </button>\r\n\r\n <div className=\"placeholder-space\"></div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Instruction Text */}\r\n {!capturedImage && !error && (\r\n <div className=\"camera-instructions\">\r\n <p>📸 Position and tap the button to capture</p>\r\n </div>\r\n )}\r\n \r\n {capturedImage && (\r\n <div className=\"camera-instructions success\">\r\n <p>✓ Photo captured! Review and submit or retake</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default CameraCapture;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport io from 'socket.io-client';\r\nimport axios from 'axios';\r\nimport TicketBoard from './TicketBoard';\r\nimport CameraCapture from './CameraCapture';\r\nimport './styles.css';\r\n\r\nconst ChatCRMWidget = ({ \r\n apiKey, \r\n apiUrl = 'https://chat-crm-backend-7mzo.onrender.com',\r\n primaryColor = '#4F46E5',\r\n position = 'bottom-right',\r\n userData = null,\r\n welcomeMessage = '👋 Welcome! How can we help you today?',\r\n companyName = 'Support',\r\n autoOpen = false,\r\n showNotifications = true,\r\n playSound = false,\r\n theme = 'light',\r\n zIndex = 9999\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(autoOpen);\r\n const [messages, setMessages] = useState([]);\r\n const [input, setInput] = useState('');\r\n const [socket, setSocket] = useState(null);\r\n const [guestId, setGuestId] = useState(null);\r\n const [conversationId, setConversationId] = useState(null);\r\n const [isConnected, setIsConnected] = useState(false);\r\n const [isCreating, setIsCreating] = useState(false);\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [isTyping, setIsTyping] = useState(false);\r\n const [agentName, setAgentName] = useState('Support Agent');\r\n const [unreadCount, setUnreadCount] = useState(0);\r\n const [hasInitialized, setHasInitialized] = useState(false);\r\n const [queryStatus, setQueryStatus] = useState('active'); // active, resolved\r\n const [snapshotRequest, setSnapshotRequest] = useState(null);\r\n const [isCapturing, setIsCapturing] = useState(false);\r\n const [showCamera, setShowCamera] = useState(false);\r\n const [currentStream, setCurrentStream] = useState(null);\r\n const [capturedImage, setCapturedImage] = useState(null);\r\n const videoRef = useRef(null);\r\n const canvasRef = useRef(null);\r\n // Feedback states\r\n const [showFeedback, setShowFeedback] = useState(false);\r\n const [feedbackRating, setFeedbackRating] = useState(0);\r\n const [feedbackComment, setFeedbackComment] = useState('');\r\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\r\n const [isSubmittingFeedback, setIsSubmittingFeedback] = useState(false);\r\n // Help & Support menu states\r\n const [showMenu, setShowMenu] = useState(false);\r\n const [activeView, setActiveView] = useState(null); // 'query', 'ticket'\r\n const [photoRequests, setPhotoRequests] = useState([]); // Track photo requests\r\n // Prevent duplicate system banners like \"query resolved\" being added multiple times\r\n const hasShownResolvedRef = useRef(false);\r\n const messagesEndRef = useRef(null);\r\n const widgetRef = useRef(null);\r\n const buttonRef = useRef(null);\r\n const menuRef = useRef(null);\r\n\r\n // Close when clicking outside widget (button + window)\r\n useEffect(() => {\r\n const handleOutside = (e) => {\r\n if (!isOpen) return;\r\n const w = widgetRef.current;\r\n const b = buttonRef.current;\r\n const m = menuRef.current;\r\n if (w && !w.contains(e.target) && b && !b.contains(e.target) && (!m || !m.contains(e.target))) {\r\n setIsOpen(false);\r\n setShowMenu(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleOutside);\r\n document.addEventListener('touchstart', handleOutside);\r\n return () => {\r\n document.removeEventListener('mousedown', handleOutside);\r\n document.removeEventListener('touchstart', handleOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n // Auto-scroll to bottom\r\n const scrollToBottom = () => {\r\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n };\r\n\r\n useEffect(() => {\r\n scrollToBottom();\r\n }, [messages]);\r\n\r\n // Manage socket lifecycle on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (socket) {\r\n socket.disconnect();\r\n }\r\n };\r\n }, [socket]);\r\n\r\n // Auto-detect user information from website\r\n const detectUserInfo = () => {\r\n const detected = { name: null, email: null, phone: null };\r\n\r\n // Try to detect user name from various possible fields\r\n const nameSelectors = [\r\n // Common name field patterns\r\n '[name=\"firstName\"], [name=\"firstname\"], [name=\"FirstName\"], [name=\"FIRSTNAME\"]',\r\n '[name=\"lastName\"], [name=\"lastname\"], [name=\"LastName\"], [name=\"LASTNAME\"]',\r\n '[name=\"fullName\"], [name=\"fullname\"], [name=\"FullName\"], [name=\"FULLNAME\"]',\r\n '[name=\"userName\"], [name=\"username\"], [name=\"UserName\"], [name=\"USERNAME\"]',\r\n '[name=\"displayName\"], [name=\"display_name\"]',\r\n '[name=\"name\"], [name=\"Name\"], [name=\"NAME\"]',\r\n \r\n // ID-based selectors\r\n '#firstName, #firstname, #FirstName, #FIRSTNAME',\r\n '#lastName, #lastname, #LastName, #LASTNAME',\r\n '#fullName, #fullname, #FullName, #FULLNAME',\r\n '#userName, #username, #UserName, #USERNAME',\r\n '#displayName, #display_name',\r\n '#name, #Name, #NAME',\r\n \r\n // Class-based selectors\r\n '.firstName, .firstname, .FirstName, .FIRSTNAME',\r\n '.lastName, .lastname, .LastName, .LASTNAME',\r\n '.fullName, .fullname, .FullName, .FULLNAME',\r\n '.userName, .username, .UserName, .USERNAME',\r\n '.displayName, .display_name',\r\n '.name, .Name, .NAME',\r\n \r\n // Data attribute selectors\r\n '[data-name], [data-user-name], [data-full-name], [data-display-name]',\r\n \r\n // Common profile selectors\r\n '.profile-name, .user-name, .username, .full-name',\r\n '.header-name, .nav-name, .account-name',\r\n \r\n // Meta tags\r\n 'meta[name=\"user-name\"], meta[property=\"user:name\"]'\r\n ];\r\n\r\n // Try to detect email\r\n const emailSelectors = [\r\n '[name=\"email\"], [name=\"Email\"], [name=\"EMAIL\"]',\r\n '[type=\"email\"]',\r\n '#email, #Email, #EMAIL',\r\n '.email, .Email, .EMAIL',\r\n '[data-email]',\r\n 'meta[name=\"user-email\"], meta[property=\"user:email\"]'\r\n ];\r\n\r\n // Try to detect phone\r\n const phoneSelectors = [\r\n '[name=\"phone\"], [name=\"Phone\"], [name=\"PHONE\"]',\r\n '[name=\"phoneNumber\"], [name=\"phone_number\"]',\r\n '[type=\"tel\"]',\r\n '#phone, #Phone, #PHONE',\r\n '.phone, .Phone, .PHONE',\r\n '[data-phone]'\r\n ];\r\n\r\n // Helper function to get value from element\r\n const getValue = (element) => {\r\n if (!element) return null;\r\n \r\n // For meta tags\r\n if (element.tagName === 'META') {\r\n return element.getAttribute('content') || null;\r\n }\r\n \r\n // For form inputs\r\n if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {\r\n return element.value || element.getAttribute('value') || element.getAttribute('placeholder') || null;\r\n }\r\n \r\n // For data attributes\r\n const dataValue = element.getAttribute('data-name') || \r\n element.getAttribute('data-user-name') || \r\n element.getAttribute('data-full-name') ||\r\n element.getAttribute('data-display-name') ||\r\n element.getAttribute('data-email') ||\r\n element.getAttribute('data-phone');\r\n if (dataValue) return dataValue;\r\n \r\n // For regular elements with text content\r\n return element.textContent?.trim() || element.innerText?.trim() || null;\r\n };\r\n\r\n // Detect name\r\n let firstName = null, lastName = null, fullName = null;\r\n \r\n for (const selector of nameSelectors) {\r\n try {\r\n const elements = document.querySelectorAll(selector);\r\n for (const element of elements) {\r\n const value = getValue(element);\r\n if (value && value.length > 1 && value !== 'Guest User') {\r\n // Check if it's a firstName field\r\n if (selector.toLowerCase().includes('firstname') && !firstName) {\r\n firstName = value;\r\n }\r\n // Check if it's a lastName field \r\n else if (selector.toLowerCase().includes('lastname') && !lastName) {\r\n lastName = value;\r\n }\r\n // Check if it's a fullName field\r\n else if ((selector.toLowerCase().includes('fullname') || \r\n selector.toLowerCase().includes('username') ||\r\n selector.toLowerCase().includes('displayname') ||\r\n selector.toLowerCase().includes('name')) && !fullName) {\r\n fullName = value;\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // Continue on selector error\r\n }\r\n }\r\n\r\n // Construct name from detected parts\r\n if (firstName && lastName) {\r\n detected.name = `${firstName} ${lastName}`;\r\n } else if (firstName) {\r\n detected.name = firstName;\r\n } else if (lastName) {\r\n detected.name = lastName;\r\n } else if (fullName) {\r\n detected.name = fullName;\r\n }\r\n\r\n // Detect email\r\n for (const selector of emailSelectors) {\r\n try {\r\n const element = document.querySelector(selector);\r\n const value = getValue(element);\r\n if (value && value.includes('@')) {\r\n detected.email = value;\r\n break;\r\n }\r\n } catch (e) {\r\n // Continue on selector error\r\n }\r\n }\r\n\r\n // Detect phone\r\n for (const selector of phoneSelectors) {\r\n try {\r\n const element = document.querySelector(selector);\r\n const value = getValue(element);\r\n if (value && /[\\d\\+\\-\\(\\)\\s]{10,}/.test(value)) {\r\n detected.phone = value;\r\n break;\r\n }\r\n } catch (e) {\r\n // Continue on selector error\r\n }\r\n }\r\n\r\n return detected;\r\n };\r\n\r\n // Get user data (from prop, auto-detection, or localStorage)\r\n const getUserData = () => {\r\n if (userData) {\r\n return {\r\n name: userData.name || 'Guest User',\r\n email: userData.email || null,\r\n phone: userData.phone || null,\r\n userId: userData.userId || null,\r\n };\r\n }\r\n \r\n // Try auto-detection first\r\n const detected = detectUserInfo();\r\n \r\n // Use detected info or fallback to localStorage\r\n return {\r\n name: detected.name || localStorage.getItem('chatGuestName') || 'Guest User',\r\n email: detected.email || localStorage.getItem('chatGuestEmail') || null,\r\n phone: detected.phone || localStorage.getItem('chatGuestPhone') || null,\r\n userId: localStorage.getItem('chatUserId') || null,\r\n };\r\n };\r\n\r\n // Create conversation on demand (first send)\r\n const createConversation = async () => {\r\n const user = getUserData();\r\n setIsCreating(true);\r\n try {\r\n console.log('🚀 Creating new conversation for first message...');\r\n const response = await axios.post(`${apiUrl}/api/v1/webhook/guest-conversation`, {\r\n apiKey,\r\n guestName: user.name,\r\n guestEmail: user.email,\r\n guestPhone: user.phone,\r\n customUserId: user.userId,\r\n });\r\n if (response.data.success) {\r\n const { conversationId: newConvId, petitionId, queryId } = response.data;\r\n setGuestId(queryId);\r\n setConversationId(newConvId);\r\n setHasInitialized(true);\r\n localStorage.setItem('chatGuestId', queryId);\r\n localStorage.setItem('chatConversationId', newConvId);\r\n localStorage.setItem('chatPetitionId', petitionId);\r\n // Store user info for ticket system\r\n if (user.email) localStorage.setItem('chatGuestEmail', user.email);\r\n if (user.name) localStorage.setItem('chatGuestName', user.name);\r\n if (user.phone) localStorage.setItem('chatGuestPhone', user.phone);\r\n console.log('✅ Conversation created:', { petitionId, queryId });\r\n return { newConvId, petitionId };\r\n }\r\n throw new Error('Failed to create conversation');\r\n } catch (error) {\r\n console.error('❌ Create conversation error:', error);\r\n throw error;\r\n } finally {\r\n setIsCreating(false);\r\n }\r\n };\r\n\r\n // Connect socket on demand\r\n const connectSocket = async ({ convId, petitionId }) => {\r\n setIsConnecting(true);\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const newSocket = io(`${apiUrl}/widget`, {\r\n query: { conversationId: convId, petitionId, apiKey },\r\n transports: ['websocket', 'polling']\r\n });\r\n\r\n newSocket.on('connect', () => {\r\n setIsConnected(true);\r\n setIsConnecting(false);\r\n console.log('✅ Connected to Chat CRM Widget Namespace');\r\n resolve(newSocket);\r\n });\r\n\r\n newSocket.on('connect_error', (err) => {\r\n setIsConnecting(false);\r\n console.error('❌ Socket connect_error:', err?.message || err);\r\n });\r\n\r\n newSocket.on('error', (err) => {\r\n console.error('❌ Socket error:', err);\r\n });\r\n\r\n newSocket.on('disconnect', () => {\r\n setIsConnected(false);\r\n console.log('❌ Disconnected from Chat CRM');\r\n });\r\n\r\n newSocket.on('new-message', (data) => {\r\n console.log('📨 Received new-message:', data);\r\n const incomingMessage = {\r\n message: data.message || data.text || '',\r\n sender: data.sender || 'agent',\r\n senderName: data.senderName || 'Support Agent',\r\n timestamp: data.timestamp || new Date(),\r\n read: false,\r\n };\r\n setMessages((prev) => {\r\n const newMessages = [...prev, incomingMessage];\r\n \r\n // Auto-detect photo request\r\n if (incomingMessage.sender !== 'guest' && \r\n incomingMessage.message &&\r\n (incomingMessage.message.toLowerCase().includes('requested a photo') ||\r\n incomingMessage.message.toLowerCase().includes('send a photo') ||\r\n incomingMessage.message.toLowerCase().includes('send photo'))) {\r\n // Add to photo requests\r\n setPhotoRequests(prevReqs => {\r\n const newIndex = newMessages.length - 1;\r\n if (!prevReqs.includes(newIndex)) {\r\n return [...prevReqs, newIndex];\r\n }\r\n return prevReqs;\r\n });\r\n }\r\n \r\n return newMessages;\r\n });\r\n setAgentName((data.senderName || 'Support Agent').toUpperCase()); // Update agent name on each message\r\n setIsTyping(false);\r\n if (!isOpen && showNotifications) {\r\n setUnreadCount(prev => prev + 1);\r\n if (playSound) playNotificationSound();\r\n }\r\n });\r\n\r\n newSocket.on('query-accepted', (data) => {\r\n console.log('✅ Query accepted by agent:', data);\r\n const agentName = (data.agentName || 'Support Agent').toUpperCase();\r\n setAgentName(agentName);\r\n setQueryStatus('active');\r\n setMessages((prev) => [...prev, {\r\n message: `${agentName} has accepted your query and will assist you now.`,\r\n sender: 'system',\r\n timestamp: new Date(),\r\n read: true\r\n }]);\r\n });\r\n\r\n newSocket.on('query-transferred', (data) => {\r\n console.log('🔄 Query transferred:', data);\r\n const toAgentName = (data.toAgentName || 'Support Agent').toUpperCase();\r\n setAgentName(toAgentName);\r\n setMessages((prev) => [...prev, {\r\n message: `Your query has been escalated and will be assisted shortly.`,\r\n sender: 'system',\r\n timestamp: new Date(),\r\n read: true\r\n }]);\r\n });\r\n\r\n newSocket.on('query-resolved', (data) => {\r\n console.log('✅ Query resolved:', data);\r\n setQueryStatus('resolved');\r\n // Only add the resolved system message once per query\r\n if (!hasShownResolvedRef.current) {\r\n hasShownResolvedRef.current = true;\r\n setMessages((prev) => [...prev, {\r\n message: '✅ This query has been resolved by the agent.',\r\n sender: 'system',\r\n timestamp: new Date(),\r\n read: true\r\n }]);\r\n } else {\r\n console.log('🔁 Skipping duplicate resolved system message');\r\n }\r\n });\r\n\r\n // Request customer feedback after resolution\r\n newSocket.on('request-feedback', (data) => {\r\n console.log('📝 Feedback requested:', data);\r\n setShowFeedback(true);\r\n });\r\n\r\n // Agent requests camera snapshot\r\n newSocket.on('request-camera-snapshot', (data) => {\r\n console.log('📸 Snapshot request received:', data);\r\n try {\r\n const lp = localStorage.getItem('chatPetitionId');\r\n console.log('📸 Checking petitionId match:', { received: data?.petitionId, stored: lp });\r\n if (data?.petitionId && lp && data.petitionId === lp) {\r\n console.log('✅ PetitionId match - showing camera');\r\n setSnapshotRequest({ requesterName: data.requesterName || data.requester?.name || 'Agent', at: Date.now() });\r\n } else {\r\n console.log('❌ PetitionId mismatch or missing');\r\n }\r\n } catch (err) {\r\n console.error('Snapshot request error:', err);\r\n }\r\n });\r\n\r\n newSocket.on('query-reopened', (data) => {\r\n console.log('🔄 Query reopened:', data);\r\n setQueryStatus('active');\r\n // Allow resolved banner to show again after a reopen\r\n hasShownResolvedRef.current = false;\r\n });\r\n\r\n // Agent typing indicator with auto-clear\r\n let typingTimeout;\r\n newSocket.on('agent-typing', (data) => {\r\n if (data.isTyping) {\r\n setIsTyping(true);\r\n setAgentName(data.agentName || 'Support Agent');\r\n \r\n // Clear existing timeout\r\n if (typingTimeout) clearTimeout(typingTimeout);\r\n \r\n // Auto-clear after 3 seconds of no updates\r\n typingTimeout = setTimeout(() => {\r\n setIsTyping(false);\r\n }, 3000);\r\n } else {\r\n setIsTyping(false);\r\n if (typingTimeout) clearTimeout(typingTimeout);\r\n }\r\n });\r\n\r\n setSocket(newSocket);\r\n } catch (e) {\r\n setIsConnecting(false);\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n const handleInputChange = (e) => {\r\n const value = e.target.value;\r\n setInput(value);\r\n\r\n // Emit typing indicator\r\n if (value.trim() && socket && localStorage.getItem('chatPetitionId')) {\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n const user = getUserData();\r\n socket.emit('customer-typing', {\r\n petitionId,\r\n userName: user.name || 'Customer',\r\n isTyping: true\r\n });\r\n }\r\n };\r\n\r\n const sendMessage = async () => {\r\n if (!input.trim() || queryStatus === 'resolved') return;\r\n\r\n // Stop typing indicator\r\n if (socket && localStorage.getItem('chatPetitionId')) {\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n socket.emit('customer-typing', {\r\n petitionId,\r\n isTyping: false\r\n });\r\n }\r\n\r\n const user = getUserData();\r\n const text = input.trim();\r\n\r\n // Optimistic UI update - Add unique ID to track our own messages\r\n const tempId = Date.now();\r\n setMessages((prev) => [...prev, { \r\n message: text, \r\n sender: 'guest', \r\n senderName: user.name || 'Guest User',\r\n read: true, \r\n timestamp: new Date(),\r\n tempId // Mark as our own message\r\n }]);\r\n setInput('');\r\n\r\n try {\r\n // Ensure we have a conversation and a connected socket\r\n let petitionId = localStorage.getItem('chatPetitionId');\r\n let convId = conversationId || localStorage.getItem('chatConversationId');\r\n\r\n if (!petitionId || !convId) {\r\n const created = await createConversation();\r\n convId = created.newConvId;\r\n petitionId = created.petitionId;\r\n }\r\n\r\n let activeSocket = socket;\r\n if (!activeSocket || !isConnected) {\r\n // Ensure any stale socket is fully disconnected to avoid duplicate listeners\r\n try { socket && socket.disconnect(); } catch (e) { /* noop */ }\r\n activeSocket = await connectSocket({ convId, petitionId });\r\n }\r\n\r\n const messageData = {\r\n conversationId: convId,\r\n petitionId,\r\n message: text,\r\n senderName: user.name || 'Guest User',\r\n senderType: 'Customer',\r\n timestamp: new Date()\r\n };\r\n\r\n console.log('📤 Sending message:', messageData);\r\n activeSocket.emit('widget-message', messageData);\r\n } catch (error) {\r\n console.error('❌ Send message error:', error);\r\n // Remove the optimistic message on error\r\n setMessages((prev) => prev.filter(m => m.tempId !== tempId));\r\n alert('Failed to send message. Please try again.');\r\n }\r\n };\r\n\r\n const startNewQuery = () => {\r\n // Clear current conversation\r\n localStorage.removeItem('chatGuestId');\r\n localStorage.removeItem('chatConversationId');\r\n localStorage.removeItem('chatPetitionId');\r\n \r\n // Disconnect socket\r\n if (socket) {\r\n socket.disconnect();\r\n }\r\n \r\n // Reset state\r\n setSocket(null);\r\n setGuestId(null);\r\n setConversationId(null);\r\n setIsConnected(false);\r\n setHasInitialized(false);\r\n setQueryStatus('active');\r\n hasShownResolvedRef.current = false; // reset banner control for the next query\r\n setMessages([]);\r\n setInput('');\r\n // Reset feedback\r\n setShowFeedback(false);\r\n setFeedbackRating(0);\r\n setFeedbackComment('');\r\n setFeedbackSubmitted(false);\r\n \r\n console.log('🆕 Starting new query...');\r\n };\r\n\r\n const submitFeedback = () => {\r\n if (!feedbackRating || feedbackSubmitted || isSubmittingFeedback) return;\r\n \r\n setIsSubmittingFeedback(true);\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n \r\n if (socket && petitionId) {\r\n socket.emit('submit-feedback', {\r\n petitionId,\r\n rating: feedbackRating,\r\n comment: feedbackComment.trim()\r\n });\r\n\r\n console.log('📤 Feedback submitted:', { rating: feedbackRating, comment: feedbackComment });\r\n \r\n setFeedbackSubmitted(true);\r\n setIsSubmittingFeedback(false);\r\n \r\n // Hide feedback form after 2 seconds\r\n setTimeout(() => {\r\n setShowFeedback(false);\r\n }, 2000);\r\n } else {\r\n setIsSubmittingFeedback(false);\r\n }\r\n };\r\n\r\n const handleKeyPress = (e) => {\r\n if (e.key === 'Enter' && !e.shiftKey) {\r\n e.preventDefault();\r\n sendMessage();\r\n }\r\n };\r\n\r\n const handleOpenToggle = () => {\r\n setIsOpen(prev => {\r\n const next = !prev;\r\n if (next) {\r\n setUnreadCount(0);\r\n setShowMenu(true);\r\n setActiveView(null);\r\n } else {\r\n setShowMenu(false);\r\n setActiveView(null);\r\n }\r\n return next;\r\n });\r\n };\r\n\r\n const handleMenuSelect = (view) => {\r\n // Check if user is trying to raise ticket without being logged in\r\n if (view === 'ticket') {\r\n const userEmail = userData?.email || localStorage.getItem('chatGuestEmail');\r\n if (!userEmail) {\r\n // Don't open ticket board, user will see message there\r\n setActiveView(view);\r\n setShowMenu(false);\r\n return;\r\n }\r\n }\r\n setActiveView(view);\r\n setShowMenu(false);\r\n };\r\n\r\n const playNotificationSound = () => {\r\n // Simple notification sound using Web Audio API\r\n const audioContext = new (window.AudioContext || window.webkitAudioContext)();\r\n const oscillator = audioContext.createOscillator();\r\n const gainNode = audioContext.createGain();\r\n \r\n oscillator.connect(gainNode);\r\n gainNode.connect(audioContext.destination);\r\n \r\n oscillator.frequency.value = 800;\r\n oscillator.type = 'sine';\r\n gainNode.gain.value = 0.1;\r\n \r\n oscillator.start();\r\n setTimeout(() => oscillator.stop(), 200);\r\n };\r\n\r\n const formatTime = (date) => {\r\n return new Date(date).toLocaleTimeString('en-US', { \r\n hour: '2-digit', \r\n minute: '2-digit' \r\n });\r\n };\r\n\r\n // Camera Management Functions\r\n const initializeCamera = async () => {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' } });\r\n setCurrentStream(stream);\r\n if (videoRef.current) {\r\n videoRef.current.srcObject = stream;\r\n videoRef.current.play();\r\n }\r\n } catch (err) {\r\n console.error('Camera access error:', err);\r\n alert('Camera access denied. Please allow camera permissions.');\r\n closeCameraInterface();\r\n }\r\n };\r\n\r\n const capturePhoto = () => {\r\n if (!videoRef.current || !canvasRef.current) return;\r\n const video = videoRef.current;\r\n const canvas = canvasRef.current;\r\n canvas.width = video.videoWidth || 640;\r\n canvas.height = video.videoHeight || 480;\r\n const ctx = canvas.getContext('2d');\r\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n const imageData = canvas.toDataURL('image/png');\r\n setCapturedImage(imageData);\r\n // Stop the stream after capture\r\n if (currentStream) {\r\n currentStream.getTracks().forEach(track => track.stop());\r\n setCurrentStream(null);\r\n }\r\n };\r\n\r\n const retakePhoto = async () => {\r\n setCapturedImage(null);\r\n await initializeCamera();\r\n };\r\n\r\n const submitPhoto = async () => {\r\n if (!capturedImage) return;\r\n setIsCapturing(true);\r\n try {\r\n const blob = await fetch(capturedImage).then(r => r.blob());\r\n const petitionId = localStorage.getItem('chatPetitionId');\r\n const form = new FormData();\r\n const filename = `snapshot-${petitionId}-${Date.now()}.png`;\r\n form.append('screenshot', blob, filename);\r\n form.append('petitionId', petitionId);\r\n form.append('apiKey', apiKey);\r\n form.append('metadata', JSON.stringify({ source: 'widget', requesterName: snapshotRequest?.requesterName }));\r\n\r\n const uploadRes = await axios.post(`${apiUrl}/api/v1/webhook/upload-snapshot`, form, { \r\n headers: { 'Content-Type': 'multipart/form-data' } \r\n });\r\n const imageUrl = uploadRes?.data?.data?.imageUrl;\r\n\r\n if (imageUrl) {\r\n const ts = new Date();\r\n setMessages(prev => [...prev, { \r\n message: `📸 Screenshot: ${imageUrl}`, \r\n sender: 'guest', \r\n senderName: 'You', \r\n timestamp: ts, \r\n read: true \r\n }]);\r\n await axios.post(`${apiUrl}/api/v1/webhook/send-message`, {\r\n apiKey,\r\n petitionId,\r\n message: `📸 Screenshot: ${imageUrl}`,\r\n senderName: 'Guest User'\r\n });\r\n }\r\n closeCameraInterface();\r\n } catch (err) {\r\n console.error('Widget capture error:', err);\r\n alert('Failed to upload photo. Please try again.');\r\n } finally {\r\n setIsCapturing(false);\r\n }\r\n };\r\n\r\n const closeCameraInterface = () => {\r\n if (currentStream) {\r\n currentStream.getTracks().forEach(track => track.stop());\r\n setCurrentStream(null);\r\n }\r\n setShowCamera(false);\r\n setCapturedImage(null);\r\n setSnapshotRequest(null);\r\n };\r\n\r\n // Handle snapshot request from agent\r\n useEffect(() => {\r\n console.log('📸 Snapshot useEffect triggered:', { snapshotRequest, showCamera });\r\n if (snapshotRequest && !showCamera) {\r\n console.log('📸 Setting showCamera to true and initializing camera');\r\n setShowCamera(true);\r\n setTimeout(() => {\r\n console.log('📸 Calling initializeCamera');\r\n initializeCamera();\r\n }, 100);\r\n }\r\n }, [snapshotRequest, showCamera]);\r\n\r\n // Ensure camera starts when video element is ready\r\n useEffect(() => {\r\n console.log('📸 Video ref useEffect:', { showCamera, hasVideoRef: !!videoRef.current, currentStream, capturedImage });\r\n if (showCamera && videoRef.current && !currentStream && !capturedImage) {\r\n console.log('📸 Reinitializing camera from video ref useEffect');\r\n initializeCamera();\r\n }\r\n }, [showCamera, videoRef.current]);\r\n\r\n // Position classes\r\n const getPositionClasses = () => {\r\n const positions = {\r\n 'bottom-right': 'crm-bottom-6 crm-right-6',\r\n 'bottom-left': 'crm-bottom-6 crm-left-6',\r\n 'top-right': 'crm-top-6 crm-right-6',\r\n 'top-left': 'crm-top-6 crm-left-6',\r\n };\r\n return positions[position] || positions['bottom-right'];\r\n };\r\n\r\n const isDark = theme === 'dark' || (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n return (\r\n <div className=\"crm-widget-container\" style={{ zIndex }}>\r\n {/* Floating Help & Support Button */}\r\n <button\r\n ref={buttonRef}\r\n onClick={handleOpenToggle}\r\n className={`crm-chat-button ${getPositionClasses()}`}\r\n style={{ background: `linear-gradient(135deg, ${primaryColor} 0%, #6366f1 100%)` }}\r\n aria-label={isOpen ? 'Close help' : 'Help & Support'}\r\n title=\"Help & Support\"\r\n >\r\n {isOpen && !showMenu ? (\r\n <svg className=\"crm-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n ) : (\r\n <svg className=\"crm-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M18 3a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3h-5l-5 3v-3H6a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h12z\"/>\r\n <circle cx=\"9\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\r\n <circle cx=\"12\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\r\n <circle cx=\"15\" cy=\"10\" r=\"1\" fill=\"currentColor\"/>\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 14c.5.5 1.5 1 3 1s2.5-.5 3-1\"/>\r\n </svg>\r\n )}\r\n \r\n {/* Notification badge */}\r\n {!isOpen && unreadCount > 0 && (\r\n <span className=\"crm-badge\">\r\n {unreadCount}\r\n </span>\r\n )}\r\n </button>\r\n\r\n {/* Help & Support Menu */}\r\n {isOpen && showMenu && (\r\n <div \r\n ref={menuRef}\r\n className={`crm-menu-popup ${getPositionClasses()} ${isDark ? 'crm-dark' : ''}`}\r\n style={{ \r\n position: 'fixed',\r\n bottom: position.includes('bottom') ? '90px' : 'auto',\r\n top: position.includes('top') ? '90px' : 'auto',\r\n right: position.includes('right') ? '24px' : 'auto',\r\n left: position.includes('left') ? '24px' : 'auto',\r\n width: '280px',\r\n backgroundColor: isDark ? '#1F2937' : '#fff',\r\n borderRadius: '12px',\r\n boxShadow: '0 10px 40px rgba(0,0,0,0.15)',\r\n border: isDark ? '1px solid #374151' : '1px solid #E5E7EB',\r\n overflow: 'hidden',\r\n zIndex: zIndex + 1\r\n }}\r\n >\r\n <div style={{ padding: '16px', borderBottom: isDark ? '1px solid #374151' : '1px solid #E5E7EB' }}>\r\n <h3 style={{ margin: 0, fontSize: '16px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Help & Support\r\n </h3>\r\n <p style={{ margin: '4px 0 0 0', fontSize: '13px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n How can we assist you today?\r\n </p>\r\n </div>\r\n \r\n <div style={{ padding: '8px' }}>\r\n {/* Query Option */}\r\n <button\r\n onClick={() => handleMenuSelect('query')}\r\n className=\"crm-menu-option\"\r\n style={{\r\n width: '100%',\r\n padding: '12px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n border: 'none',\r\n borderRadius: '8px',\r\n backgroundColor: 'transparent',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n textAlign: 'left'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = isDark ? '#374151' : '#F3F4F6'}\r\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\r\n >\r\n <div style={{ \r\n width: '40px', \r\n height: '40px', \r\n borderRadius: '8px', \r\n backgroundColor: primaryColor, \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n flexShrink: 0\r\n }}>\r\n <svg style={{ width: '20px', height: '20px', color: '#fff' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\" />\r\n </svg>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p style={{ margin: 0, fontSize: '14px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Start Query\r\n </p>\r\n <p style={{ margin: '2px 0 0 0', fontSize: '12px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Chat with our support team\r\n </p>\r\n </div>\r\n <svg style={{ width: '16px', height: '16px', color: isDark ? '#9CA3AF' : '#6B7280' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n\r\n {/* Raise Ticket Option */}\r\n <button\r\n onClick={() => handleMenuSelect('ticket')}\r\n className=\"crm-menu-option\"\r\n style={{\r\n width: '100%',\r\n padding: '12px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '12px',\r\n border: 'none',\r\n borderRadius: '8px',\r\n backgroundColor: 'transparent',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n textAlign: 'left',\r\n marginTop: '4px'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.backgroundColor = isDark ? '#374151' : '#F3F4F6'}\r\n onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\r\n >\r\n <div style={{ \r\n width: '40px', \r\n height: '40px', \r\n borderRadius: '8px', \r\n backgroundColor: '#10B981', \r\n display: 'flex', \r\n alignItems: 'center', \r\n justifyContent: 'center',\r\n flexShrink: 0\r\n }}>\r\n <svg style={{ width: '20px', height: '20px', color: '#fff' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 5v2m0 4v2m0 4v2M5 5a2 2 0 00-2 2v3a2 2 0 110 4v3a2 2 0 002 2h14a2 2 0 002-2v-3a2 2 0 110-4V7a2 2 0 00-2-2H5z\" />\r\n </svg>\r\n </div>\r\n <div style={{ flex: 1 }}>\r\n <p style={{ margin: 0, fontSize: '14px', fontWeight: 600, color: isDark ? '#F9FAFB' : '#111827' }}>\r\n Raise Ticket\r\n </p>\r\n <p style={{ margin: '2px 0 0 0', fontSize: '12px', color: isDark ? '#9CA3AF' : '#6B7280' }}>\r\n Submit a support ticket\r\n </p>\r\n </div>\r\n <svg style={{ width: '16px', height: '16px', color: isDark ? '#9CA3AF' : '#6B7280' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Query Chat Window */}\r\n {isOpen && activeView === 'query' && (\r\n <div ref={widgetRef} className={`crm-chat-window ${getPositionClasses()} ${isDark ? 'crm-dark' : ''}`} style={{ position: 'relative' }}>\r\n \r\n {/* Header */}\r\n <div className=\"crm-header\" style={{ backgroundColor: primaryColor }}>\r\n <div className=\"crm-header-content\">\r\n <button \r\n onClick={() => { setActiveView(null); setShowMenu(true); }} \r\n className=\"crm-back-btn\"\r\n title=\"Back to Menu\"\r\n style={{ \r\n background: 'none', \r\n border: 'none', \r\n color: '#fff', \r\n cursor: 'pointer', \r\n padding: '4px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n marginRight: '8px'\r\n }}\r\n >\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\r\n </svg>\r\n </button>\r\n <div className=\"crm-avatar\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={primaryColor} strokeWidth=\"2\">\r\n <path d=\"M12 2a4 4 0 0 1 4 4v2a4 4 0 0 1-8 0V6a4 4 0 0 1 4-4z\"/>\r\n <path d=\"M12 14v8\"/>\r\n <path d=\"M8 22h8\"/>\r\n <path d=\"M8 14c-2 0-3 1-3 3v1c0 2 1 3 3 3h8c2 0 3-1 3-3v-1c0-2-1-3-3-3H8z\"/>\r\n </svg>\r\n </div>\r\n <div>\r\n <h3 className=\"crm-title\">{companyName}</h3>\r\n <div className=\"crm-status\">\r\n <div className={`crm-status-dot ${isConnected ? 'crm-online' : 'crm-offline'}`} />\r\n <span>\r\n {queryStatus === 'resolved' ? (\r\n <span style={{ color: '#10B981' }}>✓ Resolved</span>\r\n ) : agentName !== 'Support Agent' ? (\r\n <span>💬 {agentName}</span>\r\n ) : (\r\n isConnected ? 'Online' : (isConnecting ? 'Connecting…' : 'Ready')\r\n )}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\r\n <button \r\n onClick={startNewQuery} \r\n className=\"crm-new-query-btn\"\r\n title=\"Start New Query\"\r\n >\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\r\n </svg>\r\n </button>\r\n <button onClick={() => { setIsOpen(false); setShowMenu(false); setActiveView(null); }} className=\"crm-close-btn\">\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Camera Interface Inside Widget - Positioned to overlay entire widget */}\r\n {showCamera && (\r\n <div style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n background: isDark ? '#1F2937' : '#fff',\r\n zIndex: 9999,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: '16px',\r\n overflow: 'auto'\r\n }}>\r\n <div style={{\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n marginBottom: '12px'\r\n }}>\r\n <h3 style={{ \r\n margin: 0, \r\n fontSize: '16px', \r\n fontWeight: 600,\r\n color: isDark ? '#E5E7EB' : '#111827'\r\n }}>\r\n 📸 Camera Capture\r\n </h3>\r\n <button \r\n onClick={closeCameraInterface}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n fontSize: '24px',\r\n cursor: 'pointer',\r\n padding: '0',\r\n color: isDark ? '#9CA3AF' : '#6B7280'\r\n }}\r\n >\r\n ×\r\n </button>\r\n </div>\r\n \r\n <p style={{\r\n fontSize: '14px',\r\n color: isDark ? '#9CA3AF' : '#6B7280',\r\n marginBottom: '12px'\r\n }}>\r\n {snapshotRequest?.requesterName || 'Agent'} requested a photo\r\n </p>\r\n\r\n <div style={{\r\n width: '100%',\r\n height: '300px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n background: '#000',\r\n borderRadius: '8px',\r\n overflow: 'hidden',\r\n marginBottom: '12px',\r\n position: 'relative'\r\n }}>\r\n {!capturedImage ? (\r\n <>\r\n <video\r\n ref={videoRef}\r\n autoPlay\r\n playsInline\r\n muted\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n display: currentStream ? 'block' : 'none'\r\n }}\r\n />\r\n {!currentStream && (\r\n <div style={{\r\n position: 'absolute',\r\n color: '#fff',\r\n textAlign: 'center'\r\n }}>\r\n <div style={{ fontSize: '14px', marginBottom: '8px' }}>Initializing camera...</div>\r\n <div style={{ fontSize: '24px' }}>📹</div>\r\n </div>\r\n )}\r\n </>\r\n ) : (\r\n <img\r\n src={capturedImage}\r\n alt=\"Captured\"\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain'\r\n }}\r\n />\r\n )}\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n </div>\r\n\r\n <div style={{\r\n display: 'flex',\r\n gap: '8px',\r\n justifyContent: 'center'\r\n }}>\r\n {!capturedImage ? (\r\n <button\r\n onClick={capturePhoto}\r\n className=\"crm-send-btn\"\r\n style={{\r\n backgroundColor: primaryColor,\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600\r\n }}\r\n >\r\n 📸 Capture\r\n </button>\r\n ) : (\r\n <>\r\n <button\r\n onClick={retakePhoto}\r\n className=\"crm-close-btn\"\r\n style={{\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600\r\n }}\r\n >\r\n 🔄 Retake\r\n </button>\r\n <button\r\n onClick={submitPhoto}\r\n className=\"crm-send-btn\"\r\n style={{\r\n backgroundColor: primaryColor,\r\n padding: '12px 24px',\r\n fontSize: '14px',\r\n fontWeight: 600\r\n }}\r\n disabled={isCapturing}\r\n >\r\n {isCapturing ? '⏳ Uploading...' : '✅ Submit'}\r\n </button>\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Messages Container */}\r\n <div className=\"crm-messages\">\r\n {/* Welcome Message - Always show until first message */}\r\n {!hasInitialized && messages.length === 0 && (\r\n <div className=\"crm-welcome-message\">\r\n <p>{welcomeMessage}</p>\r\n <p style={{ fontSize: '0.875rem', marginTop: '8px', opacity: 0.7 }}>\r\n 👋 Start typing to begin your conversation\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* Messages */}\r\n {messages.map((msg, idx) => (\r\n <div\r\n key={idx}\r\n className={`crm-message ${\r\n msg.sender === 'guest' ? 'crm-message-guest' : \r\n msg.sender === 'system' ? 'crm-message-system' : \r\n 'crm-message-agent'\r\n }`}\r\n >\r\n <div\r\n className=\"crm-message-bubble\"\r\n style={\r\n msg.sender === 'guest' ? { backgroundColor: primaryColor } : \r\n msg.sender === 'system' ? { backgroundColor: '#F3F4F6', color: '#374151', border: '1px solid #E5E7EB' } :\r\n {}\r\n }\r\n >\r\n {msg.sender === 'agent' && (\r\n <p className=\"crm-agent-name\">{(msg.senderName || agentName).toUpperCase()}</p>\r\n )}\r\n {(() => {\r\n const text = String(msg.message || '');\r\n const match = text.match(/https?:[^\\s]+\\.(?:png|jpg|jpeg|gif|webp)/i);\r\n if (match) {\r\n const url = match[0];\r\n const caption = text.replace(url, '').trim();\r\n return (\r\n <div>\r\n {caption && <p className=\"crm-message-text\" style={{ opacity: 0.85 }}>{caption}</p>}\r\n <img src={url} alt=\"snapshot\" style={{ maxWidth: '240px', maxHeight: '180px', borderRadius: '8px', border: '1px solid #E5E7EB', display: 'block' }} />\r\n </div>\r\n );\r\n }\r\n return <p className=\"crm-message-text\">{text}</p>;\r\n })()}\r\n <p className=\"crm-message-time\">{formatTime(msg.timestamp)}</p>\r\n </div>\r\n </div>\r\n ))}\r\n\r\n {/* Typing Indicator */}\r\n {isTyping && (\r\n <div className=\"crm-message crm-message-agent\">\r\n <div className=\"crm-message-bubble\">\r\n <div className=\"crm-typing-indicator\">\r\n <div className=\"crm-typing-dot\"></div>\r\n <div className=\"crm-typing-dot\"></div>\r\n <div className=\"crm-typing-dot\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n {/* Feedback Form */}\r\n {showFeedback && !feedbackSubmitted && (\r\n <div className=\"crm-message crm-message-system\">\r\n <div className=\"crm-feedback-form\" style={{ backgroundColor: '#F9FAFB', padding: '16px', borderRadius: '12px', border: '1px solid #E5E7EB' }}>\r\n <p style={{ fontWeight: '600', marginBottom: '12px', color: '#111827' }}>⭐ Rate Your Experience</p>\r\n <div style={{ display: 'flex', gap: '8px', marginBottom: '12px', justifyContent: 'center' }}>\r\n {[1, 2, 3, 4, 5].map((star) => (\r\n <button\r\n key={star}\r\n onClick={() => setFeedbackRating(star)}\r\n style={{\r\n background: 'none',\r\n border: 'none',\r\n cursor: 'pointer',\r\n fontSize: '32px',\r\n padding: '0',\r\n transition: 'transform 0.2s',\r\n filter: feedbackRating >= star ? 'none' : 'grayscale(100%)'\r\n }}\r\n onMouseEnter={(e) => e.currentTarget.style.transform = 'scale(1.2)'}\r\n onMouseLeave={(e) => e.currentTarget.style.transform = 'scale(1)'}\r\n >\r\n {feedbackRating >= star ? '⭐' : '☆'}\r\n </button>\r\n ))}\r\n </div>\r\n <textarea\r\n value={feedbackComment}\r\n onChange={(e) => setFeedbackComment(e.target.value)}\r\n placeholder=\"Share your thoughts (optional)...\"\r\n rows=\"3\"\r\n style={{\r\n width: '100%',\r\n padding: '8px 12px',\r\n border: '1px solid #D1D5DB',\r\n borderRadius: '8px',\r\n fontSize: '14px',\r\n fontFamily: 'inherit',\r\n resize: 'none',\r\n marginBottom: '12px'\r\n }}\r\n />\r\n <button\r\n onClick={submitFeedback}\r\n disabled={!feedbackRating || isSubmittingFeedback}\r\n style={{\r\n width: '100%',\r\n padding: '10px',\r\n backgroundColor: feedbackRating ? primaryColor : '#D1D5DB',\r\n color: 'white',\r\n border: 'none',\r\n borderRadius: '8px',\r\n fontSize: '14px',\r\n fontWeight: '600',\r\n cursor: feedbackRating ? 'pointer' : 'not-allowed',\r\n transition: 'all 0.2s'\r\n }}\r\n >\r\n {isSubmittingFeedback ? 'Submitting...' : 'Submit Feedback'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Feedback Submitted Message */}\r\n {feedbackSubmitted && (\r\n <div className=\"crm-message crm-message-system\">\r\n <div className=\"crm-message-bubble\" style={{ backgroundColor: '#D1FAE5', color: '#065F46', border: '1px solid #A7F3D0' }}>\r\n <p className=\"crm-message-text\">✅ Thank you for your feedback!</p>\r\n </div>\r\n </div>\r\n )}\r\n <div ref={messagesEndRef} />\r\n </div>\r\n\r\n {/* Input Area */}\r\n <div className=\"crm-input-container\">\r\n {queryStatus === 'resolved' ? (\r\n <button\r\n onClick={startNewQuery}\r\n className=\"crm-send-btn\"\r\n style={{\r\n backgroundColor: primaryColor,\r\n width: '100%',\r\n padding: '12px',\r\n fontSize: '14px',\r\n fontWeight: 600,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '8px',\r\n border: 'none',\r\n borderRadius: '8px',\r\n cursor: 'pointer',\r\n transition: 'all 0.2s'\r\n }}\r\n >\r\n <svg style={{ width: '18px', height: '18px' }} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\r\n </svg>\r\n New Query\r\n </button>\r\n ) : (\r\n <div className=\"crm-input-wrapper\">\r\n <textarea\r\n value={input}\r\n onChange={handleInputChange}\r\n onKeyPress={handleKeyPress}\r\n placeholder=\"Type your message...\"\r\n rows=\"1\"\r\n className=\"crm-input\"\r\n />\r\n <button\r\n onClick={sendMessage}\r\n disabled={!input.trim() || isCreating}\r\n className=\"crm-send-btn\"\r\n style={{ backgroundColor: primaryColor }}\r\n >\r\n {isCreating ? (\r\n <svg className=\"crm-icon-sm crm-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\r\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\r\n </svg>\r\n ) : (\r\n <svg className=\"crm-icon-sm\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 19l9 2-9-18-9 18 9-2zm0 0v-8\" />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n )}\r\n {queryStatus !== 'resolved' && (\r\n <p className=\"crm-input-hint\">\r\n {!hasInitialized ? 'Send your first message to start conversation' : 'Press Enter to send • Shift+Enter for new line'}\r\n </p>\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Ticket Board Full Page Overlay */}\r\n {activeView === 'ticket' && (\r\n <TicketBoard\r\n apiKey={apiKey}\r\n apiUrl={apiUrl}\r\n primaryColor={primaryColor}\r\n userData={getUserData()}\r\n theme={theme}\r\n onClose={() => {\r\n setActiveView(null);\r\n setShowMenu(true);\r\n }}\r\n />\r\n )}\r\n\r\n {/* Camera Capture Overlay - Outside Chat */}\r\n {photoRequests.length > 0 && (\r\n <div style={{\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.75)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 100000,\r\n padding: '16px'\r\n }}>\r\n <div style={{ \r\n width: '100%', \r\n maxWidth: '500px',\r\n maxHeight: '90vh',\r\n overflow: 'auto'\r\n }}>\r\n <CameraCapture\r\n onCapture={async (base64Image) => {\r\n try {\r\n // Send photo as message\r\n const photoMsg = {\r\n message: '📸 Photo sent',\r\n sender: 'guest',\r\n timestamp: Date.now()\r\n };\r\n \r\n setMessages(prev => [...prev, photoMsg]);\r\n \r\n // Emit to socket\r\n if (socket) {\r\n socket.emit('chatMessage', {\r\n conversationId,\r\n message: '📸 Photo sent',\r\n image: base64Image\r\n });\r\n }\r\n \r\n // Remove from photo requests\r\n setPhotoRequests([]);\r\n } catch (error) {\r\n console.error('Failed to send photo:', error);\r\n }\r\n }}\r\n onClose={() => {\r\n setPhotoRequests([]);\r\n }}\r\n requesterName={messages.find((_, idx) => photoRequests.includes(idx))?.senderName || agentName}\r\n />\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ChatCRMWidget;\r\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","toArray","Uint8Array","byteOffset","byteLength","TEXT_ENCODER","chars","lookup","i","charCodeAt","decodePacket","encodedPacket","binaryType","mapBinary","charAt","decodeBase64Packet","substring","length","decoded","base64","encoded1","encoded2","encoded3","encoded4","bufferLength","len","p","arraybuffer","bytes","decode","SEPARATOR","String","fromCharCode","createPacketEncoderStream","TransformStream","transform","packet","controller","arrayBuffer","then","encoded","TextEncoder","encode","encodePacketToBinary","payloadLength","header","DataView","setUint8","view","setUint16","setBigUint64","BigInt","enqueue","TEXT_DECODER","totalLength","chunks","reduce","acc","chunk","concatChunks","size","shift","j","slice","Emitter","mixin","on","addEventListener","event","fn","this","_callbacks","push","once","off","apply","arguments","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","args","Array","emitReserved","listeners","hasListeners","nextTick","Promise","resolve","setTimeoutFn","globalThisShim","self","window","Function","pick","attr","k","hasOwnProperty","NATIVE_SET_TIMEOUT","globalThis","setTimeout","NATIVE_CLEAR_TIMEOUT","clearTimeout","installTimerFunctions","opts","useNativeTimers","bind","clearTimeoutFn","str","c","l","utf8Length","Math","ceil","randomString","Date","now","random","TransportError","Error","constructor","reason","description","context","super","Transport","writable","query","socket","forceBase64","onError","open","readyState","doOpen","close","doClose","onClose","send","packets","write","onOpen","onData","onPacket","details","pause","onPause","createUri","schema","_hostname","_port","path","_query","hostname","indexOf","port","secure","Number","encodedQuery","encodeURIComponent","Polling","_polling","name","_poll","total","doPoll","encodedPayload","encodedPackets","decodedPacket","decodePayload","count","join","encodePayload","doWrite","uri","timestampRequests","timestampParam","sid","b64","value","XMLHttpRequest","err","hasCORS","empty","BaseXHR","location","isSSL","protocol","xd","req","request","method","xhrStatus","pollXhr","Request","createRequest","_opts","_method","_uri","_data","undefined","_create","_a","xdomain","xhr","_xhr","extraHeaders","setDisableHeaderCheck","setRequestHeader","e","cookieJar","addCookies","withCredentials","requestTimeout","timeout","onreadystatechange","parseCookies","getResponseHeader","status","_onLoad","_onError","document","_index","requestsCount","requests","_cleanup","fromError","abort","responseText","attachEvent","unloadHandler","hasXHR2","newRequest","responseType","concat","isReactNative","navigator","product","toLowerCase","BaseWS","protocols","headers","ws","createSocket","addEventListeners","onopen","autoUnref","_socket","unref","onclose","closeEvent","onmessage","ev","onerror","lastPacket","WebSocketCtor","WebSocket","MozWebSocket","transports","websocket","_packet","webtransport","_transport","WebTransport","transportOptions","closed","catch","ready","createBidirectionalStream","stream","decoderStream","maxPayload","TextDecoder","state","expectedLength","isBinary","headerArray","getUint16","n","getUint32","pow","createPacketDecoderStream","MAX_SAFE_INTEGER","reader","readable","pipeThrough","getReader","encoderStream","pipeTo","_writer","getWriter","read","done","polling","assign","re","parts","parse","src","b","replace","m","exec","source","host","authority","ipv6uri","pathNames","regx","names","queryKey","$0","$1","$2","withEventListeners","OFFLINE_EVENT_LISTENERS","listener","SocketWithoutUpgrade","writeBuffer","_prevBufferLen","_pingInterval","_pingTimeout","_maxPayload","_pingTimeoutTime","Infinity","parsedUri","_transportsByName","t","transportName","agent","upgrade","rememberUpgrade","addTrailingSlash","rejectUnauthorized","perMessageDeflate","threshold","closeOnBeforeunload","qs","qry","pairs","pair","decodeURIComponent","_beforeunloadEventListener","transport","_offlineEventListener","_onClose","_cookieJar","createCookieJar","_open","createTransport","EIO","id","priorWebsocketSuccess","setTransport","_onDrain","_onPacket","flush","onHandshake","JSON","_sendPacket","_resetPingTimeout","code","pingInterval","pingTimeout","_pingTimeoutTimer","delay","upgrading","_getWritablePackets","payloadSize","_hasPingExpired","hasExpired","msg","options","compress","cleanupAndClose","waitForUpgrade","tryAllTransports","SocketWithUpgrade","_upgrades","_probe","failed","onTransportOpen","cleanup","freezeTransport","error","onTransportClose","onupgrade","to","_filterUpgrades","upgrades","filteredUpgrades","o","map","DEFAULT_TRANSPORTS","filter","withNativeFile","File","hasBinary","toJSON","isArray","deconstructPacket","buffers","packetData","pack","_deconstructPacket","attachments","placeholder","_placeholder","num","newData","reconstructPacket","_reconstructPacket","RESERVED_EVENTS","PacketType","Decoder","reviver","add","reconstructor","decodeString","isBinaryEvent","BINARY_EVENT","BINARY_ACK","EVENT","ACK","BinaryReconstructor","takeBinaryData","start","buf","nsp","next","payload","tryParse","substr","isPayloadValid","CONNECT","isObject","DISCONNECT","CONNECT_ERROR","destroy","finishedReconstruction","reconPack","binData","isInteger","isFinite","floor","replacer","encodeAsString","encodeAsBinary","stringify","deconstruction","unshift","isDataValid","freeze","connect","connect_error","disconnect","disconnecting","newListener","Socket","io","connected","recovered","receiveBuffer","sendBuffer","_queue","_queueSeq","ids","acks","flags","auth","_autoConnect","disconnected","subEvents","subs","onpacket","active","_readyState","_b","_c","retries","fromQueue","volatile","_addToQueue","ack","pop","_registerAckCallback","isTransportWritable","engine","isConnected","notifyOutgoingListeners","ackTimeout","timer","withError","emitWithAck","reject","arg1","arg2","tryCount","pending","responseArgs","_drainQueue","force","_sendConnectPacket","_pid","pid","offset","_lastOffset","_clearAcks","some","onconnect","onevent","onack","ondisconnect","message","emitEvent","_anyListeners","sent","emitBuffered","subDestroy","onAny","prependAny","offAny","listenersAny","onAnyOutgoing","_anyOutgoingListeners","prependAnyOutgoing","offAnyOutgoing","listenersAnyOutgoing","Backoff","ms","min","max","factor","jitter","attempts","duration","rand","deviation","reset","setMin","setMax","setJitter","Manager","nsps","reconnection","reconnectionAttempts","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","_parser","parser","encoder","Encoder","decoder","autoConnect","v","_reconnection","skipReconnect","_reconnectionAttempts","_reconnectionDelay","_randomizationFactor","_reconnectionDelayMax","_timeout","maybeReconnectOnOpen","_reconnecting","reconnect","Engine","openSubDestroy","errorSub","onping","ondata","ondecoded","_destroy","_close","onreconnect","attempt","cache","parsed","loc","test","href","url","sameNamespace","forceNew","multiplex","thisArg","getPrototypeOf","iterator","toStringTag","Symbol","kindOf","thing","kindOfTest","typeOfTest","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isString","isNumber","isPlainObject","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","getOwnPropertyNames","findKey","_key","_global","global","isContextDefined","isTypedArray","TypedArray","isHTMLForm","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","ret","defineProperties","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","token","asap","queueMicrotask","process","utils$1","isFormData","kind","FormData","append","isArrayBufferView","isBoolean","isEmptyObject","isStream","pipe","merge","caseless","skipUndefined","assignValue","targetKey","extend","a","trim","stripBOM","inherits","superConstructor","props","defineProperty","toFlatObject","sourceObj","destObj","propFilter","merged","endsWith","searchString","position","lastIndex","arr","forEachEntry","_iterator","matchAll","regExp","matches","hasOwnProp","freezeMethods","enumerable","set","toObjectSet","arrayOrString","delimiter","define","toCamelCase","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","isIterable","AxiosError","config","response","captureStackTrace","utils","number","fileName","lineNumber","columnNumber","from","customProps","axiosError","errCode","cause","configurable","isVisitable","removeBrackets","renderKey","dots","predicates","toFormData","formData","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","convertValue","toISOString","Buffer","isFlatArray","el","index","exposedHelpers","build","charMap","match","AxiosURLSearchParams","params","_pairs","buildURL","_encode","serialize","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","clear","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","hasBrowserEnv","_navigator","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","parseReviver","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","ignoreDuplicateOf","$internals","normalizeHeader","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders$1","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","line","parseHeaders","dest","entry","get","tokens","tokensRE","parseTokens","has","matcher","deleted","deleteHeader","normalize","format","normalized","w","char","formatHeader","targets","asStrings","getSetCookie","first","computed","accessor","accessors","defineAccessor","accessorName","methodName","arg3","buildAccessors","transformData","fns","AxiosHeaders","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","mapped","headerValue","progressEventReducer","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","timestamps","firstSampleTS","head","tail","chunkLength","startedAt","bytesCount","passed","round","speedometer","lastArgs","timestamp","invoke","throttle","loaded","lengthComputable","progressBytes","rate","progress","estimated","progressEventDecorator","throttled","asyncDecorator","isURLSameOrigin","isMSIE","URL","userAgent","cookies","expires","domain","sameSite","cookie","toUTCString","RegExp","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","isAbsoluteURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","includes","xsrfValue","xhrAdapter","_config","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","onloadend","responseHeaders","getAllResponseHeaders","statusText","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","upload","cancel","subscribe","aborted","parseProtocol","composeSignals","signals","Boolean","AbortController","streamChunk","chunkSize","end","pos","readStream","async","asyncIterator","trackStream","onProgress","onFinish","iterable","readBytes","_onFinish","ReadableStream","pull","loadedBytes","return","highWaterMark","globalFetchAPI","Response","factory","fetch","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","_request","getBodyLength","fetchOptions","_fetch","composedSignal","toAbortSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","resolvedOptions","credentials","isStreamResponse","responseContentLength","responseData","seedCache","Map","getFetch","seeds","seed","knownAdapters","http","fetchAdapter.getFetch","renderReason","isResolvedHandle","adapters","getAdapter","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios$1","instanceConfig","interceptors","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","Axios","generateHTTPMethod","isForm","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","WebServerIsDown","ConnectionTimedOut","OriginIsUnreachable","TimeoutOccurred","SslHandshakeFailed","InvalidSslCertificate","axios","createInstance","defaultConfig","instance","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","Cancel","all","promises","spread","isAxiosError","formToJSON","default","TicketBoard","_ref","apiKey","apiUrl","_ref$primaryColor","primaryColor","_ref$userData","userData","_ref$theme","theme","_useState2","_slicedToArray","useState","activeTab","setActiveTab","_useState4","tickets","setTickets","_useState6","selectedTicket","setSelectedTicket","_useState8","ticketMessages","setTicketMessages","_useState0","isLoading","setIsLoading","_useState10","replyText","setReplyText","_useState12","replyHtml","setReplyHtml","_useState14","setAttachments","_useState16","fileWarning","setFileWarning","_useState18","_useState20","_useState22","_useState24","toasts","setToasts","fileInputRef","useRef","editorRef","_useState26","subject","htmlMessage","priority","category","setFormData","isDark","matchMedia","showFileWarning","showToast","newToast","prev","_toConsumableArray","toast","execCommand","command","_editorRef$current","current","focus","handleFileSelect","isReply","files","currentAttachments","validFiles","file","_objectSpread","removeAttachment","_","useEffect","fetchTickets","fetchTicketMessages","ticketId","_ref2","_asyncToGenerator","_regenerator","_callee","user","_t","_context","email","localStorage","getItem","customerEmail","success","f","_ref3","_callee2","_response$data$messag","_t2","_context2","log","messages","_x","handleCreateTicket","_ref4","_callee3","formDataToSend","_error$response$data","_t3","_context3","preventDefault","setItem","post","innerHTML","_x2","handleSendReply","_ref5","_callee4","_error$response$data2","_t4","_context4","_x3","formatDate","date","toLocaleDateString","year","month","day","hour","minute","getStatusColor","getPriorityColor","getFileIcon","startsWith","React","createElement","style","width","height","fill","stroke","viewBox","strokeLinecap","strokeLinejoin","strokeWidth","d","RichTextToolbar","_ref7","onCommand","_ref7$showSendButton","showSendButton","_ref7$onSend","onSend","_ref7$isLoading","_ref7$canSend","canSend","display","justifyContent","alignItems","padding","borderBottom","backgroundColor","gap","onClick","toolbarButtonStyle","title","margin","_fileInputRef$current","click","disabled","fontSize","fontWeight","color","border","borderRadius","cursor","opacity","transition","Fragment","animation","background","inset","zIndex","flexDirection","overflow","boxShadow","flex","borderRight","textAlign","borderLeft","maxWidth","onSubmit","marginBottom","onChange","required","outline","ref","className","contentEditable","onInput","html","text","innerText","minHeight","maxHeight","overflowY","multiple","accept","borderTop","flexWrap","gridTemplateColumns","lineHeight","flexShrink","ticket","hasUnread","hasUnreadMessages","lastActivityAt","lastViewedAt","isActive","_id","top","right","textOverflow","whiteSpace","stopPropagation","onMouseEnter","onMouseLeave","createdAt","marginRight","idx","_msg$sender","senderType","senderName","sender","alias","wordBreak","overflowWrap","dangerouslySetInnerHTML","__html","marginTop","att","minWidth","filename","toFixed","_ref8","_callee6","safeName","endpoint","link","_link","_context6","rel","appendChild","removeChild","download","_x5","marginLeft","left","bottom","onMouseOver","onMouseOut","pointerEvents","styleInject","css","insertAt","getElementsByTagName","firstChild","insertBefore","styleSheet","cssText","createTextNode","CameraCapture","onCapture","_ref$requesterName","requesterName","setStream","capturedImage","setCapturedImage","cameraActive","setCameraActive","facingMode","setFacingMode","setError","videoRef","canvasRef","startCamera","stopCamera","mediaStream","mediaDevices","getUserMedia","video","ideal","audio","srcObject","getTracks","track","stop","handleClose","alt","autoPlay","playsInline","muted","canvas","getContext","videoWidth","videoHeight","drawImage","imageData","toDataURL","_messages$find","_ref$apiUrl","_ref$position","_ref$welcomeMessage","welcomeMessage","_ref$companyName","companyName","_ref$autoOpen","autoOpen","_ref$showNotification","showNotifications","_ref$playSound","playSound","_ref$zIndex","isOpen","setIsOpen","setMessages","input","setInput","setSocket","setGuestId","conversationId","setConversationId","setIsConnected","isCreating","setIsCreating","isConnecting","setIsConnecting","isTyping","setIsTyping","agentName","setAgentName","unreadCount","setUnreadCount","hasInitialized","setHasInitialized","queryStatus","setQueryStatus","_useState28","snapshotRequest","setSnapshotRequest","_useState30","isCapturing","setIsCapturing","_useState32","showCamera","setShowCamera","_useState34","currentStream","setCurrentStream","_useState36","_useState38","showFeedback","setShowFeedback","_useState40","feedbackRating","setFeedbackRating","_useState42","feedbackComment","setFeedbackComment","_useState44","feedbackSubmitted","setFeedbackSubmitted","_useState46","isSubmittingFeedback","setIsSubmittingFeedback","_useState48","showMenu","setShowMenu","_useState50","activeView","setActiveView","_useState52","photoRequests","setPhotoRequests","hasShownResolvedRef","messagesEndRef","widgetRef","buttonRef","menuRef","handleOutside","contains","_messagesEndRef$curre","scrollIntoView","behavior","getUserData","phone","userId","detected","getValue","element","_element$textContent","_element$innerText","tagName","getAttribute","textContent","firstName","lastName","fullName","_i","_nameSelectors","selector","_step","_createForOfIteratorHelper","querySelectorAll","s","_i2","_emailSelectors","querySelector","_i3","_phoneSelectors","detectUserInfo","createConversation","_response$data","newConvId","petitionId","queryId","guestName","guestEmail","guestPhone","customUserId","connectSocket","convId","typingTimeout","newSocket","incomingMessage","newMessages","prevReqs","newIndex","playNotificationSound","toAgentName","_data$requester","lp","received","stored","requester","at","sendMessage","tempId","_petitionId","created","activeSocket","messageData","alert","startNewQuery","removeItem","handleMenuSelect","audioContext","AudioContext","webkitAudioContext","oscillator","createOscillator","gainNode","createGain","destination","frequency","gain","initializeCamera","_ref6","play","closeCameraInterface","retakePhoto","_callee5","_context5","submitPhoto","_uploadRes$data","blob","form","uploadRes","imageUrl","ts","r","hasVideoRef","getPositionClasses","positions","cx","cy","currentTarget","objectFit","caption","toLocaleTimeString","star","rows","fontFamily","resize","rating","comment","userName","onKeyPress","shiftKey","_ref9","_callee7","base64Image","photoMsg","_context7","image","find"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,78]}