@ermis-network/ermis-chat-sdk 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/delayed-stream/lib/delayed_stream.js","../../../node_modules/combined-stream/lib/combined_stream.js","../src/shims/empty.ts","../../../node_modules/mime-types/node_modules/mime-db/db.json","../../../node_modules/mime-types/node_modules/mime-db/index.js","../../../node_modules/mime-types/index.js","../../../node_modules/asynckit/lib/defer.js","../../../node_modules/asynckit/lib/async.js","../../../node_modules/asynckit/lib/abort.js","../../../node_modules/asynckit/lib/iterate.js","../../../node_modules/asynckit/lib/state.js","../../../node_modules/asynckit/lib/terminator.js","../../../node_modules/asynckit/parallel.js","../../../node_modules/asynckit/serialOrdered.js","../../../node_modules/asynckit/serial.js","../../../node_modules/asynckit/index.js","../../../node_modules/es-object-atoms/index.js","../../../node_modules/es-errors/index.js","../../../node_modules/es-errors/eval.js","../../../node_modules/es-errors/range.js","../../../node_modules/es-errors/ref.js","../../../node_modules/es-errors/syntax.js","../../../node_modules/es-errors/type.js","../../../node_modules/es-errors/uri.js","../../../node_modules/math-intrinsics/abs.js","../../../node_modules/math-intrinsics/floor.js","../../../node_modules/math-intrinsics/max.js","../../../node_modules/math-intrinsics/min.js","../../../node_modules/math-intrinsics/pow.js","../../../node_modules/math-intrinsics/round.js","../../../node_modules/math-intrinsics/isNaN.js","../../../node_modules/math-intrinsics/sign.js","../../../node_modules/gopd/gOPD.js","../../../node_modules/gopd/index.js","../../../node_modules/es-define-property/index.js","../../../node_modules/has-symbols/shams.js","../../../node_modules/has-symbols/index.js","../../../node_modules/get-proto/Reflect.getPrototypeOf.js","../../../node_modules/get-proto/Object.getPrototypeOf.js","../../../node_modules/function-bind/implementation.js","../../../node_modules/function-bind/index.js","../../../node_modules/call-bind-apply-helpers/functionCall.js","../../../node_modules/call-bind-apply-helpers/functionApply.js","../../../node_modules/call-bind-apply-helpers/reflectApply.js","../../../node_modules/call-bind-apply-helpers/actualApply.js","../../../node_modules/call-bind-apply-helpers/index.js","../../../node_modules/dunder-proto/get.js","../../../node_modules/get-proto/index.js","../../../node_modules/hasown/index.js","../../../node_modules/get-intrinsic/index.js","../../../node_modules/has-tostringtag/shams.js","../../../node_modules/es-set-tostringtag/index.js","../../../node_modules/form-data/lib/populate.js","../../../node_modules/form-data/lib/form_data.js","../../../node_modules/proxy-from-env/index.js","../../../node_modules/ms/index.js","../../../node_modules/debug/src/common.js","../../../node_modules/debug/src/browser.js","../../../node_modules/has-flag/index.js","../../../node_modules/supports-color/index.js","../../../node_modules/debug/src/node.js","../../../node_modules/debug/src/index.js","../../../node_modules/follow-redirects/debug.js","../../../node_modules/follow-redirects/index.js","../../../node_modules/ws/lib/constants.js","../../../node_modules/ws/lib/buffer-util.js","../../../node_modules/ws/lib/limiter.js","../../../node_modules/ws/lib/permessage-deflate.js","../../../node_modules/ws/lib/validation.js","../../../node_modules/ws/lib/receiver.js","../../../node_modules/ws/lib/sender.js","../../../node_modules/ws/lib/event-target.js","../../../node_modules/ws/lib/extension.js","../../../node_modules/ws/lib/websocket.js","../../../node_modules/ws/lib/stream.js","../../../node_modules/ws/lib/websocket-server.js","../../../node_modules/ws/index.js","../../../node_modules/isomorphic-ws/node.js","../../../node_modules/event-source-polyfill/src/eventsource.js","../src/index.ts","../../../node_modules/axios/lib/helpers/bind.js","../../../node_modules/axios/lib/utils.js","../../../node_modules/axios/lib/core/AxiosError.js","../../../node_modules/axios/lib/platform/node/classes/FormData.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/node/index.js","../../../node_modules/axios/lib/platform/node/classes/URLSearchParams.js","../../../node_modules/axios/lib/platform/common/utils.js","../../../node_modules/axios/lib/platform/index.js","../../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../../node_modules/axios/lib/helpers/formDataToJSON.js","../../../node_modules/axios/lib/defaults/index.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/isAbsoluteURL.js","../../../node_modules/axios/lib/helpers/combineURLs.js","../../../node_modules/axios/lib/core/buildFullPath.js","../../../node_modules/axios/lib/adapters/http.js","../../../node_modules/axios/lib/env/data.js","../../../node_modules/axios/lib/helpers/parseProtocol.js","../../../node_modules/axios/lib/helpers/fromDataURI.js","../../../node_modules/axios/lib/helpers/AxiosTransformStream.js","../../../node_modules/axios/lib/helpers/formDataToStream.js","../../../node_modules/axios/lib/helpers/readBlob.js","../../../node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js","../../../node_modules/axios/lib/helpers/callbackify.js","../../../node_modules/axios/lib/helpers/speedometer.js","../../../node_modules/axios/lib/helpers/throttle.js","../../../node_modules/axios/lib/helpers/progressEventReducer.js","../../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../../node_modules/axios/lib/helpers/cookies.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/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/core/dispatchRequest.js","../../../node_modules/axios/lib/helpers/validator.js","../../../node_modules/axios/lib/core/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/lib/helpers/HttpStatusCode.js","../../../node_modules/axios/lib/axios.js","../../../node_modules/axios/index.js","../src/client.ts","../src/utils.ts","../src/channel_state.ts","../src/attachment_utils.ts","../src/channel.ts","../src/client_state.ts","../src/connection.ts","../src/token_manager.ts","../src/errors.ts","../src/types.ts","../src/events.ts","../src/wasm/ermis_call_node_wasm.js","../src/media_stream_sender.ts","../src/hevc_decoder_config.ts","../src/media_stream_receiver.ts","../src/ermis_call_node.ts","../src/auth.ts","../src/system_message.ts","../src/signal_message.ts"],"sourcesContent":["var Stream = require('stream').Stream;\nvar util = require('util');\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n","var util = require('util');\nvar Stream = require('stream').Stream;\nvar DelayedStream = require('delayed-stream');\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n","export default null;\n","{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/3gpphalforms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/ace+cbor\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/activity+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamcontrol+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-updatestreamparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/at+jwt\": {\n \"source\": \"iana\"\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomdeleted\"]\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atsc-dwd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dwd\"]\n },\n \"application/atsc-dynamic-event-message\": {\n \"source\": \"iana\"\n },\n \"application/atsc-held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"held\"]\n },\n \"application/atsc-rdt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/atsc-rsat+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsat\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xcs\"]\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/captive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdfx\"]\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/city+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clr\": {\n \"source\": \"iana\"\n },\n \"application/clue+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cpl\"]\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cwt\": {\n \"source\": \"iana\"\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpd\"]\n },\n \"application/dash-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpp\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/dns+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dns-message\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dbk\"]\n },\n \"application/dots+cbor\": {\n \"source\": \"iana\"\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es\",\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/elm+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/elm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.cap+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"emotionml\"]\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/expect-ct-report+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/express\": {\n \"source\": \"iana\",\n \"extensions\": [\"exp\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fdt\"]\n },\n \"application/fhir+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/flexfec\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geopackage+sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/gltf-buffer\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"its\"]\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jscalendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lgr\"]\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/lpf+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpf\"]\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mipc\": {\n \"source\": \"iana\"\n },\n \"application/missing-blocks+cbor-seq\": {\n \"source\": \"iana\"\n },\n \"application/mmt-aei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"maei\"]\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musd\"]\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/multipart-core\": {\n \"source\": \"iana\"\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\",\n \"extensions\": [\"nq\"]\n },\n \"application/n-triples\": {\n \"source\": \"iana\",\n \"extensions\": [\"nt\"]\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\",\n \"charset\": \"US-ASCII\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/node\": {\n \"source\": \"iana\",\n \"extensions\": [\"cjs\"]\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/oauth-authz-req+jwt\": {\n \"source\": \"iana\"\n },\n \"application/oblivious-dns-message\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/opc-nodeset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/oscore\": {\n \"source\": \"iana\"\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p21\": {\n \"source\": \"iana\"\n },\n \"application/p21+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"relo\"]\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pem-certificate-chain\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\"]\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"provx\"]\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.cyn\": {\n \"source\": \"iana\",\n \"charset\": \"7-BIT\"\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"pskcxml\"]\n },\n \"application/pvd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\",\"owl\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rapd\"]\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sls\"]\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rusd\"]\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sarif-external-properties+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sbe\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/secevent+jwt\": {\n \"source\": \"iana\"\n },\n \"application/senml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"senmlx\"]\n },\n \"application/senml-etch+cbor\": {\n \"source\": \"iana\"\n },\n \"application/senml-etch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/senml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sensml+cbor\": {\n \"source\": \"iana\"\n },\n \"application/sensml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sensml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sensmlx\"]\n },\n \"application/sensml-exi\": {\n \"source\": \"iana\"\n },\n \"application/sep+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\",\n \"extensions\": [\"siv\",\"sieve\"]\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/sipc\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"srx\"]\n },\n \"application/spdx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ssml\"]\n },\n \"application/stix+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/swid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"swidtag\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/taxii+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/td+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/tetra_isi\": {\n \"source\": \"iana\"\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tlsrpt+gzip\": {\n \"source\": \"iana\"\n },\n \"application/tlsrpt+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/token-introspection+jwt\": {\n \"source\": \"iana\"\n },\n \"application/toml\": {\n \"compressible\": true,\n \"extensions\": [\"toml\"]\n },\n \"application/trickle-ice-sdpfrag\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\",\n \"extensions\": [\"trig\"]\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttml\"]\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/tzif\": {\n \"source\": \"iana\"\n },\n \"application/tzif-leap\": {\n \"source\": \"iana\"\n },\n \"application/ubjson\": {\n \"compressible\": false,\n \"extensions\": [\"ubj\"]\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rsheet\"]\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"td\"]\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"1km\"]\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.5gnas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.gtpc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.interworking-data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.lpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mc-signalling-ear\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-payload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-signalling\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcdata-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcdata-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-ue-init-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcptt-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-command+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-affiliation-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-location-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-mbms-usage-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-service-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-transmission-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-ue-config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mcvideo-user-profile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ngap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pfcp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.s1ap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.afplinedata-pagedef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.cmoca-cmresource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-charset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codedfont\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.foca-codepage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-cmtable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-formdef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-mediummap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-objectcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-overlay\": {\n \"source\": \"iana\"\n },\n \"application/vnd.afpc.modca-pagesegment\": {\n \"source\": \"iana\"\n },\n \"application/vnd.age\": {\n \"source\": \"iana\",\n \"extensions\": [\"age\"]\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.android.ota\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.arrow.file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.arrow.stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.aplextor.warrp+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.keynote\": {\n \"source\": \"iana\",\n \"extensions\": [\"key\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.numbers\": {\n \"source\": \"iana\",\n \"extensions\": [\"numbers\"]\n },\n \"application/vnd.apple.pages\": {\n \"source\": \"iana\",\n \"extensions\": [\"pages\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artisan+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmml\"]\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.banana-accounting\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.error\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.bpf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bpf3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.byu.uapi+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.ciedi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csl\"]\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.cryptii.pipe+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.crypto-shade-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cryptomator.vault\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cyclonedx+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cyclonedx+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.d3m-dataset\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d3m-problem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dbf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dbf\"]\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbisl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eclipse.ditto+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eu.kasparian.car+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.exstream-empower+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.exstream-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.familysearch.gedcom+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ficlab.flb+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujifilm.fb.docuworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.binder\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujifilm.fb.jfi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.futoin+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.gentics.grd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.slides\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hl7cda+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hl7v2+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.iso11783-10+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las\": {\n \"source\": \"iana\"\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.laszip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.leap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.logipipe.circuit+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.loom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\",\n \"extensions\": [\"mvt\"]\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxar.archive.3tz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.nacamar.ybrid+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nebumind.line\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nimn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ac\"]\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oci.image.manifest.v1+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"obgx\"]\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osm\"]\n },\n \"application/vnd.opentimestamps.ots\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.patientecommsdoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.psfs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\",\n \"extensions\": [\"rar\"]\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.resilient.logic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.seis+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shade-save-file\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.shootproof+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shopkick+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.shp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.shx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.snesdev-page-table\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"fo\"]\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sycle+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.syft+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"ddf\"]\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.think-cell.ppttc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.veritone.aion+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.veryant.thin\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ves.encrypted\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.dpp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wif\"]\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-iwork-keynote-sffkey\": {\n \"extensions\": [\"key\"]\n },\n \"application/x-iwork-numbers-sffnumbers\": {\n \"extensions\": [\"numbers\"]\n },\n \"application/x-iwork-pages-sffpages\": {\n \"extensions\": [\"pages\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-keepass2\": {\n \"extensions\": [\"kdbx\"]\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-pki-message\": {\n \"source\": \"iana\"\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-x509-ca-ra-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-x509-next-ca-cert\": {\n \"source\": \"iana\"\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xav\"]\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xca\"]\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xel\"]\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xns\"]\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/xliff+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xlf\"]\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xsl\",\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"application/zstd\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/aac\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\",\n \"extensions\": [\"amr\"]\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/flexfec\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/mhas\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxmf\"]\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\",\"opus\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/scip\": {\n \"source\": \"iana\"\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sofa\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp\": {\n \"source\": \"iana\"\n },\n \"audio/tetra_acelp_bb\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/tsvcis\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/usac\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dts.uhd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\",\n \"extensions\": [\"exr\"]\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/avci\": {\n \"source\": \"iana\",\n \"extensions\": [\"avci\"]\n },\n \"image/avcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"avcs\"]\n },\n \"image/avif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"avif\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\",\n \"extensions\": [\"drle\"]\n },\n \"image/emf\": {\n \"source\": \"iana\",\n \"extensions\": [\"emf\"]\n },\n \"image/fits\": {\n \"source\": \"iana\",\n \"extensions\": [\"fits\"]\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/heic\": {\n \"source\": \"iana\",\n \"extensions\": [\"heic\"]\n },\n \"image/heic-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heics\"]\n },\n \"image/heif\": {\n \"source\": \"iana\",\n \"extensions\": [\"heif\"]\n },\n \"image/heif-sequence\": {\n \"source\": \"iana\",\n \"extensions\": [\"heifs\"]\n },\n \"image/hej2k\": {\n \"source\": \"iana\",\n \"extensions\": [\"hej2\"]\n },\n \"image/hsj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"hsj2\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\",\n \"extensions\": [\"jls\"]\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jph\": {\n \"source\": \"iana\",\n \"extensions\": [\"jph\"]\n },\n \"image/jphc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jhc\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/jxr\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxr\"]\n },\n \"image/jxra\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxra\"]\n },\n \"image/jxrs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxrs\"]\n },\n \"image/jxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxs\"]\n },\n \"image/jxsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsc\"]\n },\n \"image/jxsi\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxsi\"]\n },\n \"image/jxss\": {\n \"source\": \"iana\",\n \"extensions\": [\"jxss\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/ktx2\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx2\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\",\n \"extensions\": [\"pti\"]\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\",\n \"extensions\": [\"t38\"]\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tif\",\"tiff\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfx\"]\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\",\n \"extensions\": [\"azv\"]\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-dds\": {\n \"compressible\": true,\n \"extensions\": [\"dds\"]\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.pco.b16\": {\n \"source\": \"iana\",\n \"extensions\": [\"b16\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tap\"]\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtf\"]\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcx\"]\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmf\"]\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\",\n \"extensions\": [\"3mf\"]\n },\n \"model/e57\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/mtl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mtl\"]\n },\n \"model/obj\": {\n \"source\": \"iana\",\n \"extensions\": [\"obj\"]\n },\n \"model/step\": {\n \"source\": \"iana\"\n },\n \"model/step+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"stpx\"]\n },\n \"model/step+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpz\"]\n },\n \"model/step-xml+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"stpxz\"]\n },\n \"model/stl\": {\n \"source\": \"iana\",\n \"extensions\": [\"stl\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\",\n \"extensions\": [\"ogex\"]\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_b\"]\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\",\n \"extensions\": [\"x_t\"]\n },\n \"model/vnd.pytha.pyox\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.sap.vds\": {\n \"source\": \"iana\",\n \"extensions\": [\"vds\"]\n },\n \"model/vnd.usdz+zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"usdz\"]\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\",\n \"extensions\": [\"bsp\"]\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3db\"]\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\",\n \"extensions\": [\"x3dv\"]\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\"\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/cql\": {\n \"source\": \"iana\"\n },\n \"text/cql-expression\": {\n \"source\": \"iana\"\n },\n \"text/cql-identifier\": {\n \"source\": \"iana\"\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fhirpath\": {\n \"source\": \"iana\"\n },\n \"text/flexfec\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/gff3\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"compressible\": true,\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mdx\": {\n \"compressible\": true,\n \"extensions\": [\"mdx\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shaclc\": {\n \"source\": \"iana\"\n },\n \"text/shex\": {\n \"source\": \"iana\",\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/spdx\": {\n \"source\": \"iana\",\n \"extensions\": [\"spdx\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.familysearch.gedcom\": {\n \"source\": \"iana\",\n \"extensions\": [\"ged\"]\n },\n \"text/vnd.ficlab.flt\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.gml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.hans\": {\n \"source\": \"iana\"\n },\n \"text/vnd.hgl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.senx.warpscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sosi\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"compressible\": true,\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/av1\": {\n \"source\": \"iana\"\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/ffv1\": {\n \"source\": \"iana\"\n },\n \"video/flexfec\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\",\n \"extensions\": [\"m4s\"]\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/jxsv\": {\n \"source\": \"iana\"\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/scip\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vc2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/vp9\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n","var defer = require('./defer.js');\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n","// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n","var async = require('./async.js')\n , abort = require('./abort.js')\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n","// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n","var abort = require('./abort.js')\n , async = require('./async.js')\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n","var iterate = require('./lib/iterate.js')\n , initState = require('./lib/state.js')\n , terminator = require('./lib/terminator.js')\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n","var serialOrdered = require('./serialOrdered.js');\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n","module.exports =\n{\n parallel : require('./parallel.js'),\n serial : require('./serial.js'),\n serialOrdered : require('./serialOrdered.js')\n};\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Object;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","'use strict';\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n","'use strict';\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n","'use strict';\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n","'use strict';\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n","'use strict';\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n","'use strict';\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n","'use strict';\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nvar $isNaN = require('./isNaN');\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n","'use strict';\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n","'use strict';\n\n/** @type {import('.')} */\nvar $gOPD = require('./gOPD');\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n","'use strict';\n\nvar $Object = require('es-object-atoms');\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n","'use strict';\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n","'use strict';\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n","'use strict';\n\nvar bind = require('function-bind');\n\nvar $apply = require('./functionApply');\nvar $call = require('./functionCall');\nvar $reflectApply = require('./reflectApply');\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n","'use strict';\n\nvar bind = require('function-bind');\nvar $TypeError = require('es-errors/type');\n\nvar $call = require('./functionCall');\nvar $actualApply = require('./actualApply');\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n","'use strict';\n\nvar callBind = require('call-bind-apply-helpers');\nvar gOPD = require('gopd');\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n","'use strict';\n\nvar reflectGetProto = require('./Reflect.getPrototypeOf');\nvar originalGetProto = require('./Object.getPrototypeOf');\n\nvar getDunderProto = require('dunder-proto/get');\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar undefined;\n\nvar $Object = require('es-object-atoms');\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar abs = require('math-intrinsics/abs');\nvar floor = require('math-intrinsics/floor');\nvar max = require('math-intrinsics/max');\nvar min = require('math-intrinsics/min');\nvar pow = require('math-intrinsics/pow');\nvar round = require('math-intrinsics/round');\nvar sign = require('math-intrinsics/sign');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = require('gopd');\nvar $defineProperty = require('es-define-property');\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = require('get-proto');\nvar $ObjectGPO = require('get-proto/Object.getPrototypeOf');\nvar $ReflectGPO = require('get-proto/Reflect.getPrototypeOf');\n\nvar $apply = require('call-bind-apply-helpers/functionApply');\nvar $call = require('call-bind-apply-helpers/functionCall');\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar hasOwn = require('hasown');\nvar $TypeError = require('es-errors/type');\n\nvar toStringTag = hasToStringTag ? Symbol.toStringTag : null;\n\n/** @type {import('.')} */\nmodule.exports = function setToStringTag(object, value) {\n\tvar overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;\n\tvar nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;\n\tif (\n\t\t(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')\n\t\t|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')\n\t) {\n\t\tthrow new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');\n\t}\n\tif (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(object, toStringTag, {\n\t\t\t\tconfigurable: !nonConfigurable,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: value,\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tobject[toStringTag] = value; // eslint-disable-line no-param-reassign\n\t\t}\n\t}\n};\n","'use strict';\n\n// populates missing values\nmodule.exports = function (dst, src) {\n Object.keys(src).forEach(function (prop) {\n dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign\n });\n\n return dst;\n};\n","'use strict';\n\nvar CombinedStream = require('combined-stream');\nvar util = require('util');\nvar path = require('path');\nvar http = require('http');\nvar https = require('https');\nvar parseUrl = require('url').parse;\nvar fs = require('fs');\nvar Stream = require('stream').Stream;\nvar crypto = require('crypto');\nvar mime = require('mime-types');\nvar asynckit = require('asynckit');\nvar setToStringTag = require('es-set-tostringtag');\nvar hasOwn = require('hasown');\nvar populate = require('./populate.js');\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {}; // eslint-disable-line no-param-reassign\n for (var option in options) { // eslint-disable-line no-restricted-syntax\n this[option] = options[option];\n }\n}\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function (field, value, options) {\n options = options || {}; // eslint-disable-line no-param-reassign\n\n // allow filename as single option\n if (typeof options === 'string') {\n options = { filename: options }; // eslint-disable-line no-param-reassign\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value === 'number' || value == null) {\n value = String(value); // eslint-disable-line no-param-reassign\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (Array.isArray(value)) {\n /*\n * Please convert your array into string\n * the way web server expects it\n */\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function (header, value, options) {\n var valueLength = 0;\n\n /*\n * used w/ getLengthSync(), when length is known.\n * e.g. for streaming directly from a remote server,\n * w/ a known file a size, and not wanting to wait for\n * incoming file to finish to get its size.\n */\n if (options.knownLength != null) {\n valueLength += Number(options.knownLength);\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function (value, callback) {\n if (hasOwn(value, 'fd')) {\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function (err, stat) {\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n var fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (hasOwn(value, 'httpVersion')) {\n callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return\n\n // or request stream http://github.com/mikeal/request\n } else if (hasOwn(value, 'httpModule')) {\n // wait till response come back\n value.on('response', function (response) {\n value.pause();\n callback(null, Number(response.headers['content-length']));\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream'); // eslint-disable-line callback-return\n }\n};\n\nFormData.prototype._multiPartHeader = function (field, value, options) {\n /*\n * custom header specified (as string)?\n * it becomes responsible for boundary\n * (e.g. to handle extra CRLFs on .NET servers)\n */\n if (typeof options.header === 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header === 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) { // eslint-disable-line no-restricted-syntax\n if (hasOwn(headers, prop)) {\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return\n var filename;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || (value && (value.name || value.path))) {\n /*\n * custom filename take precedence\n * formidable and the browser add a name property\n * fs- and request- streams have path property\n */\n filename = path.basename(options.filename || (value && (value.name || value.path)));\n } else if (value && value.readable && hasOwn(value, 'httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n return 'filename=\"' + filename + '\"';\n }\n};\n\nFormData.prototype._getContentType = function (value, options) {\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && value && typeof value === 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function () {\n return function (next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = this._streams.length === 0;\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function () {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function (userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) { // eslint-disable-line no-restricted-syntax\n if (hasOwn(userHeaders, header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function (boundary) {\n if (typeof boundary !== 'string') {\n throw new TypeError('FormData boundary must be a string');\n }\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function () {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function () {\n var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n // Add content to the buffer.\n if (Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);\n } else {\n dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) {\n dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]);\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);\n};\n\nFormData.prototype._generateBoundary = function () {\n // This generates a 50 character boundary similar to those used by Firefox.\n\n // They are optimized for boyer-moore parsing.\n this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex');\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually and add it as knownLength option\nFormData.prototype.getLengthSync = function () {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n /*\n * Some async length retrievers are present\n * therefore synchronous length calculation is false.\n * Please use getLength(callback) to get proper length\n */\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function () {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function (cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function (length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function (params, cb) {\n var request;\n var options;\n var defaults = { method: 'post' };\n\n // parse provided url if it's string or treat it as options object\n if (typeof params === 'string') {\n params = parseUrl(params); // eslint-disable-line no-param-reassign\n /* eslint sort-keys: 0 */\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n } else { // use custom params\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol === 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol === 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function (err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce); // eslint-disable-line no-invalid-this\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function (err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\nsetToStringTag(FormData, 'FormData');\n\n// Public API\nmodule.exports = FormData;\n","'use strict';\n\nvar parseUrl = require('url').parse;\n\nvar DEFAULT_PORTS = {\n ftp: 21,\n gopher: 70,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443,\n};\n\nvar stringEndsWith = String.prototype.endsWith || function(s) {\n return s.length <= this.length &&\n this.indexOf(s, this.length - s.length) !== -1;\n};\n\n/**\n * @param {string|object} url - The URL, or the result from url.parse.\n * @return {string} The URL of the proxy that should handle the request to the\n * given URL. If no proxy is set, this will be an empty string.\n */\nfunction getProxyForUrl(url) {\n var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {};\n var proto = parsedUrl.protocol;\n var hostname = parsedUrl.host;\n var port = parsedUrl.port;\n if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n return ''; // Don't proxy URLs without a valid scheme or host.\n }\n\n proto = proto.split(':', 1)[0];\n // Stripping ports in this way instead of using parsedUrl.hostname to make\n // sure that the brackets around IPv6 addresses are kept.\n hostname = hostname.replace(/:\\d*$/, '');\n port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n if (!shouldProxy(hostname, port)) {\n return ''; // Don't proxy URLs that match NO_PROXY.\n }\n\n var proxy =\n getEnv('npm_config_' + proto + '_proxy') ||\n getEnv(proto + '_proxy') ||\n getEnv('npm_config_proxy') ||\n getEnv('all_proxy');\n if (proxy && proxy.indexOf('://') === -1) {\n // Missing scheme in proxy, default to the requested URL's scheme.\n proxy = proto + '://' + proxy;\n }\n return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n var NO_PROXY =\n (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase();\n if (!NO_PROXY) {\n return true; // Always proxy if NO_PROXY is not set.\n }\n if (NO_PROXY === '*') {\n return false; // Never proxy if wildcard is set.\n }\n\n return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n if (!proxy) {\n return true; // Skip zero-length hosts.\n }\n var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n if (parsedProxyPort && parsedProxyPort !== port) {\n return true; // Skip if ports don't match.\n }\n\n if (!/^[.*]/.test(parsedProxyHostname)) {\n // No wildcards, so stop proxying if there is an exact match.\n return hostname !== parsedProxyHostname;\n }\n\n if (parsedProxyHostname.charAt(0) === '*') {\n // Remove leading wildcard.\n parsedProxyHostname = parsedProxyHostname.slice(1);\n }\n // Stop proxying if the hostname ends with the no_proxy host.\n return !stringEndsWith.call(hostname, parsedProxyHostname);\n });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n\nexports.getProxyForUrl = getProxyForUrl;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet flagForceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tflagForceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m') ||\n\t\t\thasFlag('color=full') ||\n\t\t\thasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream, options = {}) {\n\tconst level = supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options\n\t});\n\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel({isTTY: tty.isatty(1)}),\n\tstderr: getSupportLevel({isTTY: tty.isatty(2)})\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n","var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n var looksLikeNode = typeof process !== \"undefined\";\n var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n var looksLikeV8 = isFunction(Error.captureStackTrace);\n if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL(\"\"));\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230§5.3.1: When making a request directly to an origin server, […]\n // a client MUST send only the absolute path […] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, […]\n // a client MUST send the target URI in absolute-form […].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n // istanbul ignore else\n if (request === self._currentRequest) {\n // Report any write errors\n // istanbul ignore if\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n // istanbul ignore else\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231§6.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231§6.4: Automatic redirection needs to done with\n // care for methods not known to be safe, […]\n // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource […]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) […]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n // istanbul ignore else\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n // istanbul ignore next\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n // istanbul ignore else\n if (isFunction(Error.captureStackTrace)) {\n Error.captureStackTrace(this, this.constructor);\n }\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n","'use strict';\n\nmodule.exports = {\n BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n EMPTY_BUFFER: Buffer.alloc(0),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) return target.slice(0, offset);\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n const length = buffer.length;\n for (let i = 0; i < length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.byteLength === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = Buffer.from(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\ntry {\n const bufferUtil = require('bufferutil');\n const bu = bufferUtil.BufferUtil || bufferUtil;\n\n module.exports = {\n concat,\n mask(source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bu.mask(source, mask, output, offset, length);\n },\n toArrayBuffer,\n toBuffer,\n unmask(buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bu.unmask(buffer, mask);\n }\n };\n} catch (e) /* istanbul ignore next */ {\n module.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n };\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode, NOOP } = require('./constants');\n\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {Buffer} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {Buffer} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n //\n // An `'error'` event is emitted, only on Node.js < 10.0.0, if the\n // `zlib.DeflateRaw` instance is closed while data is being processed.\n // This can happen if `PerMessageDeflate#cleanup()` is called at the wrong\n // time due to an abnormal WebSocket closure.\n //\n this._deflate.on('error', NOOP);\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) data = data.slice(0, data.length - 4);\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\ntry {\n let isValidUTF8 = require('utf-8-validate');\n\n /* istanbul ignore if */\n if (typeof isValidUTF8 === 'object') {\n isValidUTF8 = isValidUTF8.Validation.isValidUTF8; // utf-8-validate@<3.0.0\n }\n\n module.exports = {\n isValidStatusCode,\n isValidUTF8(buf) {\n return buf.length < 150 ? _isValidUTF8(buf) : isValidUTF8(buf);\n }\n };\n} catch (e) /* istanbul ignore next */ {\n module.exports = {\n isValidStatusCode,\n isValidUTF8: _isValidUTF8\n };\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {String} [binaryType=nodebuffer] The type for binary data\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Boolean} [isServer=false] Specifies whether to operate in client or\n * server mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(binaryType, extensions, isServer, maxPayload) {\n super();\n\n this._binaryType = binaryType || BINARY_TYPES[0];\n this[kWebSocket] = undefined;\n this._extensions = extensions || {};\n this._isServer = !!isServer;\n this._maxPayload = maxPayload | 0;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._state = GET_INFO;\n this._loop = false;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = buf.slice(n);\n return buf.slice(0, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = buf.slice(n);\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n let err;\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n err = this.getInfo();\n break;\n case GET_PAYLOAD_LENGTH_16:\n err = this.getPayloadLength16();\n break;\n case GET_PAYLOAD_LENGTH_64:\n err = this.getPayloadLength64();\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n err = this.getData(cb);\n break;\n default:\n // `INFLATING`\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n cb(err);\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getInfo() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (!this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n this._loop = false;\n return error(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n }\n\n if (compressed) {\n this._loop = false;\n return error(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n }\n\n if (this._payloadLength > 0x7d) {\n this._loop = false;\n return error(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n }\n } else {\n this._loop = false;\n return error(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n }\n } else if (this._masked) {\n this._loop = false;\n return error(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength16() {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n return this.haveLength();\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n getPayloadLength64() {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n this._loop = false;\n return error(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n return this.haveLength();\n }\n\n /**\n * Payload length has been read.\n *\n * @return {(RangeError|undefined)} A possible error\n * @private\n */\n haveLength() {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n this._loop = false;\n return error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n if (this._masked) unmask(data, this._mask);\n }\n\n if (this._opcode > 0x07) return this.controlMessage(data);\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its lenght is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n return this.dataMessage();\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n return cb(\n error(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n )\n );\n }\n\n this._fragments.push(buf);\n }\n\n const er = this.dataMessage();\n if (er) return cb(er);\n\n this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @return {(Error|undefined)} A possible error\n * @private\n */\n dataMessage() {\n if (this._fin) {\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else {\n data = fragments;\n }\n\n this.emit('message', data);\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!isValidUTF8(buf)) {\n this._loop = false;\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('message', buf.toString());\n }\n }\n\n this._state = GET_INFO;\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data) {\n if (this._opcode === 0x08) {\n this._loop = false;\n\n if (data.length === 0) {\n this.emit('conclude', 1005, '');\n this.end();\n } else if (data.length === 1) {\n return error(\n RangeError,\n 'invalid payload length 1',\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n return error(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n }\n\n const buf = data.slice(2);\n\n if (!isValidUTF8(buf)) {\n return error(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n }\n\n this.emit('conclude', code, buf.toString());\n this.end();\n }\n } else if (this._opcode === 0x09) {\n this.emit('ping', data);\n } else {\n this.emit('pong', data);\n }\n\n this._state = GET_INFO;\n }\n}\n\nmodule.exports = Receiver;\n\n/**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\nfunction error(ErrorCtor, message, prefix, statusCode, errorCode) {\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, error);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls$\" }] */\n\n'use strict';\n\nconst net = require('net');\nconst tls = require('tls');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER } = require('./constants');\nconst { isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst mask = Buffer.alloc(4);\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {(net.Socket|tls.Socket)} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n */\n constructor(socket, extensions) {\n this._extensions = extensions || {};\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._deflating = false;\n this._queue = [];\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {Buffer} data The data to frame\n * @param {Object} options Options object\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {Buffer[]} The framed data as a list of `Buffer` instances\n * @public\n */\n static frame(data, options) {\n const merge = options.mask && options.readOnly;\n let offset = options.mask ? 6 : 2;\n let payloadLength = data.length;\n\n if (data.length >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (data.length > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? data.length + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(data.length, 2);\n } else if (payloadLength === 127) {\n target.writeUInt32BE(0, 2);\n target.writeUInt32BE(data.length, 6);\n }\n\n if (!options.mask) return [target, data];\n\n randomFillSync(mask, 0, 4);\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (merge) {\n applyMask(data, mask, target, offset, data.length);\n return [target];\n }\n\n applyMask(data, mask, data, 0, data.length);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {String} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || data === '') {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n buf.write(data, 2);\n }\n\n if (this._deflating) {\n this.enqueue([this.doClose, buf, mask, cb]);\n } else {\n this.doClose(buf, mask, cb);\n }\n }\n\n /**\n * Frames and sends a close message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @private\n */\n doClose(data, mask, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x08,\n mask,\n readOnly: false\n }),\n cb\n );\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n const buf = toBuffer(data);\n\n if (buf.length > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n if (this._deflating) {\n this.enqueue([this.doPing, buf, mask, toBuffer.readOnly, cb]);\n } else {\n this.doPing(buf, mask, toBuffer.readOnly, cb);\n }\n }\n\n /**\n * Frames and sends a ping message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified\n * @param {Function} [cb] Callback\n * @private\n */\n doPing(data, mask, readOnly, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x09,\n mask,\n readOnly\n }),\n cb\n );\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n const buf = toBuffer(data);\n\n if (buf.length > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n if (this._deflating) {\n this.enqueue([this.doPong, buf, mask, toBuffer.readOnly, cb]);\n } else {\n this.doPong(buf, mask, toBuffer.readOnly, cb);\n }\n }\n\n /**\n * Frames and sends a pong message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Boolean} [readOnly=false] Specifies whether `data` can be modified\n * @param {Function} [cb] Callback\n * @private\n */\n doPong(data, mask, readOnly, cb) {\n this.sendFrame(\n Sender.frame(data, {\n fin: true,\n rsv1: false,\n opcode: 0x0a,\n mask,\n readOnly\n }),\n cb\n );\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const buf = toBuffer(data);\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (rsv1 && perMessageDeflate) {\n rsv1 = buf.length >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n if (perMessageDeflate) {\n const opts = {\n fin: options.fin,\n rsv1,\n opcode,\n mask: options.mask,\n readOnly: toBuffer.readOnly\n };\n\n if (this._deflating) {\n this.enqueue([this.dispatch, buf, this._compress, opts, cb]);\n } else {\n this.dispatch(buf, this._compress, opts, cb);\n }\n } else {\n this.sendFrame(\n Sender.frame(buf, {\n fin: options.fin,\n rsv1: false,\n opcode,\n mask: options.mask,\n readOnly: toBuffer.readOnly\n }),\n cb\n );\n }\n }\n\n /**\n * Dispatches a data message.\n *\n * @param {Buffer} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += data.length;\n this._deflating = true;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < this._queue.length; i++) {\n const callback = this._queue[i][4];\n\n if (typeof callback === 'function') callback(err);\n }\n\n return;\n }\n\n this._bufferedBytes -= data.length;\n this._deflating = false;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (!this._deflating && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[1].length;\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[1].length;\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {Buffer[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n","'use strict';\n\n/**\n * Class representing an event.\n *\n * @private\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @param {Object} target A reference to the target to which the event was\n * dispatched\n */\n constructor(type, target) {\n this.target = target;\n this.type = type;\n }\n}\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n * @private\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The received data\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(data, target) {\n super('message', target);\n\n this.data = data;\n }\n}\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n * @private\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {Number} code The status code explaining why the connection is being\n * closed\n * @param {String} reason A human-readable string explaining why the\n * connection is closing\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(code, reason, target) {\n super('close', target);\n\n this.wasClean = target._closeFrameReceived && target._closeFrameSent;\n this.reason = reason;\n this.code = code;\n }\n}\n\n/**\n * Class representing an open event.\n *\n * @extends Event\n * @private\n */\nclass OpenEvent extends Event {\n /**\n * Create a new `OpenEvent`.\n *\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(target) {\n super('open', target);\n }\n}\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n * @private\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {Object} error The error that generated this event\n * @param {WebSocket} target A reference to the target to which the event was\n * dispatched\n */\n constructor(error, target) {\n super('error', target);\n\n this.message = error.message;\n this.error = error;\n }\n}\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {Function} listener The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean`` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, listener, options) {\n if (typeof listener !== 'function') return;\n\n function onMessage(data) {\n listener.call(this, new MessageEvent(data, this));\n }\n\n function onClose(code, message) {\n listener.call(this, new CloseEvent(code, message, this));\n }\n\n function onError(error) {\n listener.call(this, new ErrorEvent(error, this));\n }\n\n function onOpen() {\n listener.call(this, new OpenEvent(this));\n }\n\n const method = options && options.once ? 'once' : 'on';\n\n if (type === 'message') {\n onMessage._listener = listener;\n this[method](type, onMessage);\n } else if (type === 'close') {\n onClose._listener = listener;\n this[method](type, onClose);\n } else if (type === 'error') {\n onError._listener = listener;\n this[method](type, onError);\n } else if (type === 'open') {\n onOpen._listener = listener;\n this[method](type, onOpen);\n } else {\n this[method](type, listener);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {Function} listener The listener to remove\n * @public\n */\n removeEventListener(type, listener) {\n const listeners = this.listeners(type);\n\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i] === listener || listeners[i]._listener === listener) {\n this.removeListener(type, listeners[i]);\n }\n }\n }\n};\n\nmodule.exports = EventTarget;\n","'use strict';\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n\n if (header === undefined || header === '') return offers;\n\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 /* ' ' */ || code === 0x09 /* '\\t' */) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Readable$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n GUID,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst { addEventListener, removeEventListener } = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst protocolVersions = [8, 13];\nconst closeTimeout = 30 * 1000;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = '';\n this._closeTimer = null;\n this._extensions = {};\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (Array.isArray(protocols)) {\n protocols = protocols.join(', ');\n } else if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = undefined;\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._isServer = true;\n }\n }\n\n /**\n * This deviates from the WHATWG interface since ws doesn't support the\n * required default \"blob\" type (instead we define a custom \"nodebuffer\"\n * type).\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onclose(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onerror(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onopen(listener) {}\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return undefined;\n }\n\n /* istanbul ignore next */\n set onmessage(listener) {}\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Number} [maxPayload=0] The maximum allowed message size\n * @private\n */\n setSocket(socket, head, maxPayload) {\n const receiver = new Receiver(\n this.binaryType,\n this._extensions,\n this._isServer,\n maxPayload\n );\n\n this._sender = new Sender(socket, this._extensions);\n this._receiver = receiver;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n socket.setTimeout(0);\n socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {String} [data] A string explaining why the connection is closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n //\n // Specify a timeout for the closing handshake to complete.\n //\n this._closeTimer = setTimeout(\n this._socket.destroy.bind(this._socket),\n closeTimeout\n );\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n return abortHandshake(this, this._req, msg);\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n const listeners = this.listeners(method);\n for (let i = 0; i < listeners.length; i++) {\n if (listeners[i]._listener) return listeners[i]._listener;\n }\n\n return undefined;\n },\n set(listener) {\n const listeners = this.listeners(method);\n for (let i = 0; i < listeners.length; i++) {\n //\n // Remove only the listeners added via `addEventListener`.\n //\n if (listeners[i]._listener) this.removeListener(method, listeners[i]);\n }\n this.addEventListener(method, listener);\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {String} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n createConnection: undefined,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: undefined,\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n websocket._url = address.href;\n } else {\n parsedUrl = new URL(address);\n websocket._url = address;\n }\n\n const isUnixSocket = parsedUrl.protocol === 'ws+unix:';\n\n if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) {\n const err = new Error(`Invalid URL: ${websocket.url}`);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const isSecure =\n parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:';\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const get = isSecure ? https.get : http.get;\n let perMessageDeflate;\n\n opts.createConnection = isSecure ? tlsConnect : netConnect;\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket',\n ...opts.headers\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols) {\n opts.headers['Sec-WebSocket-Protocol'] = protocols;\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isUnixSocket) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalUnixSocket = isUnixSocket;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isUnixSocket\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else {\n const isSameHost = isUnixSocket\n ? websocket._originalUnixSocket\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalUnixSocket\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n }\n\n let req = (websocket._req = get(opts));\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req.aborted) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (err) {\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the `upgrade`\n // event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const upgrade = res.headers.upgrade;\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n const protList = (protocols || '').split(/, */);\n let protError;\n\n if (!protocols && serverProt) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (protocols && !serverProt) {\n protError = 'Server sent no subprotocol';\n } else if (serverProt && !protList.includes(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (extensionNames.length) {\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message =\n 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n }\n\n websocket.setSocket(socket, head, opts.maxPayload);\n });\n}\n\n/**\n * Emit the `'error'` and `'close'` event.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n stream.once('abort', websocket.emitClose.bind(websocket));\n websocket.emit('error', err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n cb(err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {String} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n this[kWebSocket]._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n websocket.emit('error', err);\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message\n * @private\n */\nfunction receiverOnMessage(data) {\n this[kWebSocket].emit('message', data);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n websocket.pong(data, !websocket._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The listener of the `net.Socket` `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n let chunk;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written and `readable.read()`\n // will return `null`. If instead, the socket is paused, any possible buffered\n // data will be read as a single chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n (chunk = websocket._socket.read()) !== null\n ) {\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the `net.Socket` `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the `net.Socket` `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the `net.Socket` `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","'use strict';\n\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let resumeOnReceiverDrain = true;\n let terminateOnDestroy = true;\n\n function receiverOnDrain() {\n if (resumeOnReceiverDrain) ws._socket.resume();\n }\n\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n ws._receiver.removeAllListeners('drain');\n ws._receiver.on('drain', receiverOnDrain);\n });\n } else {\n ws._receiver.removeAllListeners('drain');\n ws._receiver.on('drain', receiverOnDrain);\n }\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg) {\n if (!duplex.push(msg)) {\n resumeOnReceiverDrain = false;\n ws._socket.pause();\n }\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (\n (ws.readyState === ws.OPEN || ws.readyState === ws.CLOSING) &&\n !resumeOnReceiverDrain\n ) {\n resumeOnReceiverDrain = true;\n if (!ws._receiver._writableState.needDrain) ws._socket.resume();\n }\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^net|tls|https$\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst https = require('https');\nconst net = require('net');\nconst tls = require('tls');\nconst { createHash } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst WebSocket = require('./websocket');\nconst { format, parse } = require('./extension');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n maxPayload: 100 * 1024 * 1024,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) this.clients = new Set();\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Close the server.\n *\n * @param {Function} [cb] Callback\n * @public\n */\n close(cb) {\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSED) {\n process.nextTick(emitClose, this);\n return;\n }\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n //\n // Terminate all associated clients.\n //\n if (this.clients) {\n for (const client of this.clients) client.terminate();\n }\n\n const server = this._server;\n\n if (server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // Close the http server if it was internally created.\n //\n if (this.options.port != null) {\n server.close(emitClose.bind(undefined, this));\n return;\n }\n }\n\n process.nextTick(emitClose, this);\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key =\n req.headers['sec-websocket-key'] !== undefined\n ? req.headers['sec-websocket-key'].trim()\n : false;\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n const extensions = {};\n\n if (\n req.method !== 'GET' ||\n upgrade === undefined ||\n upgrade.toLowerCase() !== 'websocket' ||\n !key ||\n !keyRegex.test(key) ||\n (version !== 8 && version !== 13) ||\n !this.shouldHandle(req)\n ) {\n return abortHandshake(socket, 400);\n }\n\n if (this.options.perMessageDeflate) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = parse(req.headers['sec-websocket-extensions']);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n return abortHandshake(socket, 400);\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(key, extensions, req, socket, head, cb);\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(key, extensions, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Object} extensions The accepted extensions\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(key, extensions, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new WebSocket(null);\n let protocol = req.headers['sec-websocket-protocol'];\n\n if (protocol) {\n protocol = protocol.split(',').map(trim);\n\n //\n // Optionally call external protocol selection handler.\n //\n if (this.options.handleProtocols) {\n protocol = this.options.handleProtocols(protocol, req);\n } else {\n protocol = protocol[0];\n }\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, this.options.maxPayload);\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => this.clients.delete(ws));\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle premature socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n if (socket.writable) {\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.write(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n }\n\n socket.removeListener('error', socketOnError);\n socket.destroy();\n}\n\n/**\n * Remove whitespace characters from both ends of a string.\n *\n * @param {String} str The string\n * @return {String} A new string representing `str` stripped of whitespace\n * characters from both its beginning and end\n * @private\n */\nfunction trim(str) {\n return str.trim();\n}\n","'use strict';\n\nconst WebSocket = require('./lib/websocket');\n\nWebSocket.createWebSocketStream = require('./lib/stream');\nWebSocket.Server = require('./lib/websocket-server');\nWebSocket.Receiver = require('./lib/receiver');\nWebSocket.Sender = require('./lib/sender');\n\nmodule.exports = WebSocket;\n","\"use strict\";\n\nmodule.exports = require('ws');","/** @license\r\n * eventsource.js\r\n * Available under MIT License (MIT)\r\n * https://github.com/Yaffle/EventSource/\r\n */\r\n\r\n/*jslint indent: 2, vars: true, plusplus: true */\r\n/*global setTimeout, clearTimeout */\r\n\r\n(function (global) {\r\n \"use strict\";\r\n\r\n var setTimeout = global.setTimeout;\r\n var clearTimeout = global.clearTimeout;\r\n var XMLHttpRequest = global.XMLHttpRequest;\r\n var XDomainRequest = global.XDomainRequest;\r\n var ActiveXObject = global.ActiveXObject;\r\n var NativeEventSource = global.EventSource;\r\n\r\n var document = global.document;\r\n var Promise = global.Promise;\r\n var fetch = global.fetch;\r\n var Response = global.Response;\r\n var TextDecoder = global.TextDecoder;\r\n var TextEncoder = global.TextEncoder;\r\n var AbortController = global.AbortController;\r\n\r\n if (typeof window !== \"undefined\" && typeof document !== \"undefined\" && !(\"readyState\" in document) && document.body == null) { // Firefox 2\r\n document.readyState = \"loading\";\r\n window.addEventListener(\"load\", function (event) {\r\n document.readyState = \"complete\";\r\n }, false);\r\n }\r\n\r\n if (XMLHttpRequest == null && ActiveXObject != null) { // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest_in_IE6\r\n XMLHttpRequest = function () {\r\n return new ActiveXObject(\"Microsoft.XMLHTTP\");\r\n };\r\n }\r\n\r\n if (Object.create == undefined) {\r\n Object.create = function (C) {\r\n function F(){}\r\n F.prototype = C;\r\n return new F();\r\n };\r\n }\r\n\r\n if (!Date.now) {\r\n Date.now = function now() {\r\n return new Date().getTime();\r\n };\r\n }\r\n\r\n // see #118 (Promise#finally with polyfilled Promise)\r\n // see #123 (data URLs crash Edge)\r\n // see #125 (CSP violations)\r\n // see pull/#138\r\n // => No way to polyfill Promise#finally\r\n\r\n if (AbortController == undefined) {\r\n var originalFetch2 = fetch;\r\n fetch = function (url, options) {\r\n var signal = options.signal;\r\n return originalFetch2(url, {headers: options.headers, credentials: options.credentials, cache: options.cache}).then(function (response) {\r\n var reader = response.body.getReader();\r\n signal._reader = reader;\r\n if (signal._aborted) {\r\n signal._reader.cancel();\r\n }\r\n return {\r\n status: response.status,\r\n statusText: response.statusText,\r\n headers: response.headers,\r\n body: {\r\n getReader: function () {\r\n return reader;\r\n }\r\n }\r\n };\r\n });\r\n };\r\n AbortController = function () {\r\n this.signal = {\r\n _reader: null,\r\n _aborted: false\r\n };\r\n this.abort = function () {\r\n if (this.signal._reader != null) {\r\n this.signal._reader.cancel();\r\n }\r\n this.signal._aborted = true;\r\n };\r\n };\r\n }\r\n\r\n function TextDecoderPolyfill() {\r\n this.bitsNeeded = 0;\r\n this.codePoint = 0;\r\n }\r\n\r\n TextDecoderPolyfill.prototype.decode = function (octets) {\r\n function valid(codePoint, shift, octetsCount) {\r\n if (octetsCount === 1) {\r\n return codePoint >= 0x0080 >> shift && codePoint << shift <= 0x07FF;\r\n }\r\n if (octetsCount === 2) {\r\n return codePoint >= 0x0800 >> shift && codePoint << shift <= 0xD7FF || codePoint >= 0xE000 >> shift && codePoint << shift <= 0xFFFF;\r\n }\r\n if (octetsCount === 3) {\r\n return codePoint >= 0x010000 >> shift && codePoint << shift <= 0x10FFFF;\r\n }\r\n throw new Error();\r\n }\r\n function octetsCount(bitsNeeded, codePoint) {\r\n if (bitsNeeded === 6 * 1) {\r\n return codePoint >> 6 > 15 ? 3 : codePoint > 31 ? 2 : 1;\r\n }\r\n if (bitsNeeded === 6 * 2) {\r\n return codePoint > 15 ? 3 : 2;\r\n }\r\n if (bitsNeeded === 6 * 3) {\r\n return 3;\r\n }\r\n throw new Error();\r\n }\r\n var REPLACER = 0xFFFD;\r\n var string = \"\";\r\n var bitsNeeded = this.bitsNeeded;\r\n var codePoint = this.codePoint;\r\n for (var i = 0; i < octets.length; i += 1) {\r\n var octet = octets[i];\r\n if (bitsNeeded !== 0) {\r\n if (octet < 128 || octet > 191 || !valid(codePoint << 6 | octet & 63, bitsNeeded - 6, octetsCount(bitsNeeded, codePoint))) {\r\n bitsNeeded = 0;\r\n codePoint = REPLACER;\r\n string += String.fromCharCode(codePoint);\r\n }\r\n }\r\n if (bitsNeeded === 0) {\r\n if (octet >= 0 && octet <= 127) {\r\n bitsNeeded = 0;\r\n codePoint = octet;\r\n } else if (octet >= 192 && octet <= 223) {\r\n bitsNeeded = 6 * 1;\r\n codePoint = octet & 31;\r\n } else if (octet >= 224 && octet <= 239) {\r\n bitsNeeded = 6 * 2;\r\n codePoint = octet & 15;\r\n } else if (octet >= 240 && octet <= 247) {\r\n bitsNeeded = 6 * 3;\r\n codePoint = octet & 7;\r\n } else {\r\n bitsNeeded = 0;\r\n codePoint = REPLACER;\r\n }\r\n if (bitsNeeded !== 0 && !valid(codePoint, bitsNeeded, octetsCount(bitsNeeded, codePoint))) {\r\n bitsNeeded = 0;\r\n codePoint = REPLACER;\r\n }\r\n } else {\r\n bitsNeeded -= 6;\r\n codePoint = codePoint << 6 | octet & 63;\r\n }\r\n if (bitsNeeded === 0) {\r\n if (codePoint <= 0xFFFF) {\r\n string += String.fromCharCode(codePoint);\r\n } else {\r\n string += String.fromCharCode(0xD800 + (codePoint - 0xFFFF - 1 >> 10));\r\n string += String.fromCharCode(0xDC00 + (codePoint - 0xFFFF - 1 & 0x3FF));\r\n }\r\n }\r\n }\r\n this.bitsNeeded = bitsNeeded;\r\n this.codePoint = codePoint;\r\n return string;\r\n };\r\n\r\n // Firefox < 38 throws an error with stream option\r\n var supportsStreamOption = function () {\r\n try {\r\n return new TextDecoder().decode(new TextEncoder().encode(\"test\"), {stream: true}) === \"test\";\r\n } catch (error) {\r\n console.debug(\"TextDecoder does not support streaming option. Using polyfill instead: \" + error);\r\n }\r\n return false;\r\n };\r\n\r\n // IE, Edge\r\n if (TextDecoder == undefined || TextEncoder == undefined || !supportsStreamOption()) {\r\n TextDecoder = TextDecoderPolyfill;\r\n }\r\n\r\n var k = function () {\r\n };\r\n\r\n function XHRWrapper(xhr) {\r\n this.withCredentials = false;\r\n this.readyState = 0;\r\n this.status = 0;\r\n this.statusText = \"\";\r\n this.responseText = \"\";\r\n this.onprogress = k;\r\n this.onload = k;\r\n this.onerror = k;\r\n this.onreadystatechange = k;\r\n this._contentType = \"\";\r\n this._xhr = xhr;\r\n this._sendTimeout = 0;\r\n this._abort = k;\r\n }\r\n\r\n XHRWrapper.prototype.open = function (method, url) {\r\n this._abort(true);\r\n\r\n var that = this;\r\n var xhr = this._xhr;\r\n var state = 1;\r\n var timeout = 0;\r\n\r\n this._abort = function (silent) {\r\n if (that._sendTimeout !== 0) {\r\n clearTimeout(that._sendTimeout);\r\n that._sendTimeout = 0;\r\n }\r\n if (state === 1 || state === 2 || state === 3) {\r\n state = 4;\r\n xhr.onload = k;\r\n xhr.onerror = k;\r\n xhr.onabort = k;\r\n xhr.onprogress = k;\r\n xhr.onreadystatechange = k;\r\n // IE 8 - 9: XDomainRequest#abort() does not fire any event\r\n // Opera < 10: XMLHttpRequest#abort() does not fire any event\r\n xhr.abort();\r\n if (timeout !== 0) {\r\n clearTimeout(timeout);\r\n timeout = 0;\r\n }\r\n if (!silent) {\r\n that.readyState = 4;\r\n that.onabort(null);\r\n that.onreadystatechange();\r\n }\r\n }\r\n state = 0;\r\n };\r\n\r\n var onStart = function () {\r\n if (state === 1) {\r\n //state = 2;\r\n var status = 0;\r\n var statusText = \"\";\r\n var contentType = undefined;\r\n if (!(\"contentType\" in xhr)) {\r\n try {\r\n status = xhr.status;\r\n statusText = xhr.statusText;\r\n contentType = xhr.getResponseHeader(\"Content-Type\");\r\n } catch (error) {\r\n // IE < 10 throws exception for `xhr.status` when xhr.readyState === 2 || xhr.readyState === 3\r\n // Opera < 11 throws exception for `xhr.status` when xhr.readyState === 2\r\n // https://bugs.webkit.org/show_bug.cgi?id=29121\r\n status = 0;\r\n statusText = \"\";\r\n contentType = undefined;\r\n // Firefox < 14, Chrome ?, Safari ?\r\n // https://bugs.webkit.org/show_bug.cgi?id=29658\r\n // https://bugs.webkit.org/show_bug.cgi?id=77854\r\n }\r\n } else {\r\n status = 200;\r\n statusText = \"OK\";\r\n contentType = xhr.contentType;\r\n }\r\n if (status !== 0) {\r\n state = 2;\r\n that.readyState = 2;\r\n that.status = status;\r\n that.statusText = statusText;\r\n that._contentType = contentType;\r\n that.onreadystatechange();\r\n }\r\n }\r\n };\r\n var onProgress = function () {\r\n onStart();\r\n if (state === 2 || state === 3) {\r\n state = 3;\r\n var responseText = \"\";\r\n try {\r\n responseText = xhr.responseText;\r\n } catch (error) {\r\n // IE 8 - 9 with XMLHttpRequest\r\n }\r\n that.readyState = 3;\r\n that.responseText = responseText;\r\n that.onprogress();\r\n }\r\n };\r\n var onFinish = function (type, event) {\r\n if (event == null || event.preventDefault == null) {\r\n event = {\r\n preventDefault: k\r\n };\r\n }\r\n // Firefox 52 fires \"readystatechange\" (xhr.readyState === 4) without final \"readystatechange\" (xhr.readyState === 3)\r\n // IE 8 fires \"onload\" without \"onprogress\"\r\n onProgress();\r\n if (state === 1 || state === 2 || state === 3) {\r\n state = 4;\r\n if (timeout !== 0) {\r\n clearTimeout(timeout);\r\n timeout = 0;\r\n }\r\n that.readyState = 4;\r\n if (type === \"load\") {\r\n that.onload(event);\r\n } else if (type === \"error\") {\r\n that.onerror(event);\r\n } else if (type === \"abort\") {\r\n that.onabort(event);\r\n } else {\r\n throw new TypeError();\r\n }\r\n that.onreadystatechange();\r\n }\r\n };\r\n var onReadyStateChange = function (event) {\r\n if (xhr != undefined) { // Opera 12\r\n if (xhr.readyState === 4) {\r\n if (!(\"onload\" in xhr) || !(\"onerror\" in xhr) || !(\"onabort\" in xhr)) {\r\n onFinish(xhr.responseText === \"\" ? \"error\" : \"load\", event);\r\n }\r\n } else if (xhr.readyState === 3) {\r\n if (!(\"onprogress\" in xhr)) { // testing XMLHttpRequest#responseText too many times is too slow in IE 11\r\n // and in Firefox 3.6\r\n onProgress();\r\n }\r\n } else if (xhr.readyState === 2) {\r\n onStart();\r\n }\r\n }\r\n };\r\n var onTimeout = function () {\r\n timeout = setTimeout(function () {\r\n onTimeout();\r\n }, 500);\r\n if (xhr.readyState === 3) {\r\n onProgress();\r\n }\r\n };\r\n\r\n // XDomainRequest#abort removes onprogress, onerror, onload\r\n if (\"onload\" in xhr) {\r\n xhr.onload = function (event) {\r\n onFinish(\"load\", event);\r\n };\r\n }\r\n if (\"onerror\" in xhr) {\r\n xhr.onerror = function (event) {\r\n onFinish(\"error\", event);\r\n };\r\n }\r\n // improper fix to match Firefox behaviour, but it is better than just ignore abort\r\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=768596\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=880200\r\n // https://code.google.com/p/chromium/issues/detail?id=153570\r\n // IE 8 fires \"onload\" without \"onprogress\r\n if (\"onabort\" in xhr) {\r\n xhr.onabort = function (event) {\r\n onFinish(\"abort\", event);\r\n };\r\n }\r\n\r\n if (\"onprogress\" in xhr) {\r\n xhr.onprogress = onProgress;\r\n }\r\n\r\n // IE 8 - 9 (XMLHTTPRequest)\r\n // Opera < 12\r\n // Firefox < 3.5\r\n // Firefox 3.5 - 3.6 - ? < 9.0\r\n // onprogress is not fired sometimes or delayed\r\n // see also #64 (significant lag in IE 11)\r\n if (\"onreadystatechange\" in xhr) {\r\n xhr.onreadystatechange = function (event) {\r\n onReadyStateChange(event);\r\n };\r\n }\r\n\r\n if (\"contentType\" in xhr || !(\"ontimeout\" in XMLHttpRequest.prototype)) {\r\n url += (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"padding=true\";\r\n }\r\n xhr.open(method, url, true);\r\n\r\n if (\"readyState\" in xhr) {\r\n // workaround for Opera 12 issue with \"progress\" events\r\n // #91 (XMLHttpRequest onprogress not fired for streaming response in Edge 14-15-?)\r\n timeout = setTimeout(function () {\r\n onTimeout();\r\n }, 0);\r\n }\r\n };\r\n XHRWrapper.prototype.abort = function () {\r\n this._abort(false);\r\n };\r\n XHRWrapper.prototype.getResponseHeader = function (name) {\r\n return this._contentType;\r\n };\r\n XHRWrapper.prototype.setRequestHeader = function (name, value) {\r\n var xhr = this._xhr;\r\n if (\"setRequestHeader\" in xhr) {\r\n xhr.setRequestHeader(name, value);\r\n }\r\n };\r\n XHRWrapper.prototype.getAllResponseHeaders = function () {\r\n // XMLHttpRequest#getAllResponseHeaders returns null for CORS requests in Firefox 3.6.28\r\n return this._xhr.getAllResponseHeaders != undefined ? this._xhr.getAllResponseHeaders() || \"\" : \"\";\r\n };\r\n XHRWrapper.prototype.send = function () {\r\n // loading indicator in Safari < ? (6), Chrome < 14, Firefox\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=736723\r\n if ((!(\"ontimeout\" in XMLHttpRequest.prototype) || (!(\"sendAsBinary\" in XMLHttpRequest.prototype) && !(\"mozAnon\" in XMLHttpRequest.prototype))) &&\r\n document != undefined &&\r\n document.readyState != undefined &&\r\n document.readyState !== \"complete\") {\r\n var that = this;\r\n that._sendTimeout = setTimeout(function () {\r\n that._sendTimeout = 0;\r\n that.send();\r\n }, 4);\r\n return;\r\n }\r\n\r\n var xhr = this._xhr;\r\n // withCredentials should be set after \"open\" for Safari and Chrome (< 19 ?)\r\n if (\"withCredentials\" in xhr) {\r\n xhr.withCredentials = this.withCredentials;\r\n }\r\n try {\r\n // xhr.send(); throws \"Not enough arguments\" in Firefox 3.0\r\n xhr.send(undefined);\r\n } catch (error1) {\r\n // Safari 5.1.7, Opera 12\r\n throw error1;\r\n }\r\n };\r\n\r\n function toLowerCase(name) {\r\n return name.replace(/[A-Z]/g, function (c) {\r\n return String.fromCharCode(c.charCodeAt(0) + 0x20);\r\n });\r\n }\r\n\r\n function HeadersPolyfill(all) {\r\n // Get headers: implemented according to mozilla's example code: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders#Example\r\n var map = Object.create(null);\r\n var array = all.split(\"\\r\\n\");\r\n for (var i = 0; i < array.length; i += 1) {\r\n var line = array[i];\r\n var parts = line.split(\": \");\r\n var name = parts.shift();\r\n var value = parts.join(\": \");\r\n map[toLowerCase(name)] = value;\r\n }\r\n this._map = map;\r\n }\r\n HeadersPolyfill.prototype.get = function (name) {\r\n return this._map[toLowerCase(name)];\r\n };\r\n\r\n if (XMLHttpRequest != null && XMLHttpRequest.HEADERS_RECEIVED == null) { // IE < 9, Firefox 3.6\r\n XMLHttpRequest.HEADERS_RECEIVED = 2;\r\n }\r\n\r\n function XHRTransport() {\r\n }\r\n\r\n XHRTransport.prototype.open = function (xhr, onStartCallback, onProgressCallback, onFinishCallback, url, withCredentials, headers) {\r\n xhr.open(\"GET\", url);\r\n var offset = 0;\r\n xhr.onprogress = function () {\r\n var responseText = xhr.responseText;\r\n var chunk = responseText.slice(offset);\r\n offset += chunk.length;\r\n onProgressCallback(chunk);\r\n };\r\n xhr.onerror = function (event) {\r\n event.preventDefault();\r\n onFinishCallback(new Error(\"NetworkError\"));\r\n };\r\n xhr.onload = function () {\r\n onFinishCallback(null);\r\n };\r\n xhr.onabort = function () {\r\n onFinishCallback(null);\r\n };\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {\r\n var status = xhr.status;\r\n var statusText = xhr.statusText;\r\n var contentType = xhr.getResponseHeader(\"Content-Type\");\r\n var headers = xhr.getAllResponseHeaders();\r\n onStartCallback(status, statusText, contentType, new HeadersPolyfill(headers));\r\n }\r\n };\r\n xhr.withCredentials = withCredentials;\r\n for (var name in headers) {\r\n if (Object.prototype.hasOwnProperty.call(headers, name)) {\r\n xhr.setRequestHeader(name, headers[name]);\r\n }\r\n }\r\n xhr.send();\r\n return xhr;\r\n };\r\n\r\n function HeadersWrapper(headers) {\r\n this._headers = headers;\r\n }\r\n HeadersWrapper.prototype.get = function (name) {\r\n return this._headers.get(name);\r\n };\r\n\r\n function FetchTransport() {\r\n }\r\n\r\n FetchTransport.prototype.open = function (xhr, onStartCallback, onProgressCallback, onFinishCallback, url, withCredentials, headers) {\r\n var reader = null;\r\n var controller = new AbortController();\r\n var signal = controller.signal;\r\n var textDecoder = new TextDecoder();\r\n fetch(url, {\r\n headers: headers,\r\n credentials: withCredentials ? \"include\" : \"same-origin\",\r\n signal: signal,\r\n cache: \"no-store\"\r\n }).then(function (response) {\r\n reader = response.body.getReader();\r\n onStartCallback(response.status, response.statusText, response.headers.get(\"Content-Type\"), new HeadersWrapper(response.headers));\r\n // see https://github.com/promises-aplus/promises-spec/issues/179\r\n return new Promise(function (resolve, reject) {\r\n var readNextChunk = function () {\r\n reader.read().then(function (result) {\r\n if (result.done) {\r\n //Note: bytes in textDecoder are ignored\r\n resolve(undefined);\r\n } else {\r\n var chunk = textDecoder.decode(result.value, {stream: true});\r\n onProgressCallback(chunk);\r\n readNextChunk();\r\n }\r\n })[\"catch\"](function (error) {\r\n reject(error);\r\n });\r\n };\r\n readNextChunk();\r\n });\r\n })[\"catch\"](function (error) {\r\n if (error.name === \"AbortError\") {\r\n return undefined;\r\n } else {\r\n return error;\r\n }\r\n }).then(function (error) {\r\n onFinishCallback(error);\r\n });\r\n return {\r\n abort: function () {\r\n if (reader != null) {\r\n reader.cancel(); // https://bugzilla.mozilla.org/show_bug.cgi?id=1583815\r\n }\r\n controller.abort();\r\n }\r\n };\r\n };\r\n\r\n function EventTarget() {\r\n this._listeners = Object.create(null);\r\n }\r\n\r\n function throwError(e) {\r\n setTimeout(function () {\r\n throw e;\r\n }, 0);\r\n }\r\n\r\n EventTarget.prototype.dispatchEvent = function (event) {\r\n event.target = this;\r\n var typeListeners = this._listeners[event.type];\r\n if (typeListeners != undefined) {\r\n var length = typeListeners.length;\r\n for (var i = 0; i < length; i += 1) {\r\n var listener = typeListeners[i];\r\n try {\r\n if (typeof listener.handleEvent === \"function\") {\r\n listener.handleEvent(event);\r\n } else {\r\n listener.call(this, event);\r\n }\r\n } catch (e) {\r\n throwError(e);\r\n }\r\n }\r\n }\r\n };\r\n EventTarget.prototype.addEventListener = function (type, listener) {\r\n type = String(type);\r\n var listeners = this._listeners;\r\n var typeListeners = listeners[type];\r\n if (typeListeners == undefined) {\r\n typeListeners = [];\r\n listeners[type] = typeListeners;\r\n }\r\n var found = false;\r\n for (var i = 0; i < typeListeners.length; i += 1) {\r\n if (typeListeners[i] === listener) {\r\n found = true;\r\n }\r\n }\r\n if (!found) {\r\n typeListeners.push(listener);\r\n }\r\n };\r\n EventTarget.prototype.removeEventListener = function (type, listener) {\r\n type = String(type);\r\n var listeners = this._listeners;\r\n var typeListeners = listeners[type];\r\n if (typeListeners != undefined) {\r\n var filtered = [];\r\n for (var i = 0; i < typeListeners.length; i += 1) {\r\n if (typeListeners[i] !== listener) {\r\n filtered.push(typeListeners[i]);\r\n }\r\n }\r\n if (filtered.length === 0) {\r\n delete listeners[type];\r\n } else {\r\n listeners[type] = filtered;\r\n }\r\n }\r\n };\r\n\r\n function Event(type) {\r\n this.type = type;\r\n this.target = undefined;\r\n }\r\n\r\n function MessageEvent(type, options) {\r\n Event.call(this, type);\r\n this.data = options.data;\r\n this.lastEventId = options.lastEventId;\r\n }\r\n\r\n MessageEvent.prototype = Object.create(Event.prototype);\r\n\r\n function ConnectionEvent(type, options) {\r\n Event.call(this, type);\r\n this.status = options.status;\r\n this.statusText = options.statusText;\r\n this.headers = options.headers;\r\n }\r\n\r\n ConnectionEvent.prototype = Object.create(Event.prototype);\r\n\r\n function ErrorEvent(type, options) {\r\n Event.call(this, type);\r\n this.error = options.error;\r\n }\r\n\r\n ErrorEvent.prototype = Object.create(Event.prototype);\r\n\r\n var WAITING = -1;\r\n var CONNECTING = 0;\r\n var OPEN = 1;\r\n var CLOSED = 2;\r\n\r\n var AFTER_CR = -1;\r\n var FIELD_START = 0;\r\n var FIELD = 1;\r\n var VALUE_START = 2;\r\n var VALUE = 3;\r\n\r\n var contentTypeRegExp = /^text\\/event\\-stream(;.*)?$/i;\r\n\r\n var MINIMUM_DURATION = 1000;\r\n var MAXIMUM_DURATION = 18000000;\r\n\r\n var parseDuration = function (value, def) {\r\n var n = value == null ? def : parseInt(value, 10);\r\n if (n !== n) {\r\n n = def;\r\n }\r\n return clampDuration(n);\r\n };\r\n var clampDuration = function (n) {\r\n return Math.min(Math.max(n, MINIMUM_DURATION), MAXIMUM_DURATION);\r\n };\r\n\r\n var fire = function (that, f, event) {\r\n try {\r\n if (typeof f === \"function\") {\r\n f.call(that, event);\r\n }\r\n } catch (e) {\r\n throwError(e);\r\n }\r\n };\r\n\r\n function EventSourcePolyfill(url, options) {\r\n EventTarget.call(this);\r\n options = options || {};\r\n\r\n this.onopen = undefined;\r\n this.onmessage = undefined;\r\n this.onerror = undefined;\r\n\r\n this.url = undefined;\r\n this.readyState = undefined;\r\n this.withCredentials = undefined;\r\n this.headers = undefined;\r\n\r\n this._close = undefined;\r\n\r\n start(this, url, options);\r\n }\r\n\r\n function getBestXHRTransport() {\r\n return (XMLHttpRequest != undefined && (\"withCredentials\" in XMLHttpRequest.prototype)) || XDomainRequest == undefined\r\n ? new XMLHttpRequest()\r\n : new XDomainRequest();\r\n }\r\n\r\n var isFetchSupported = fetch != undefined && Response != undefined && \"body\" in Response.prototype;\r\n\r\n function start(es, url, options) {\r\n url = String(url);\r\n var withCredentials = Boolean(options.withCredentials);\r\n var lastEventIdQueryParameterName = options.lastEventIdQueryParameterName || \"lastEventId\";\r\n\r\n var initialRetry = clampDuration(1000);\r\n var heartbeatTimeout = parseDuration(options.heartbeatTimeout, 45000);\r\n\r\n var lastEventId = \"\";\r\n var retry = initialRetry;\r\n var wasActivity = false;\r\n var textLength = 0;\r\n var headers = options.headers || {};\r\n var TransportOption = options.Transport;\r\n var xhr = isFetchSupported && TransportOption == undefined ? undefined : new XHRWrapper(TransportOption != undefined ? new TransportOption() : getBestXHRTransport());\r\n var transport = TransportOption != null && typeof TransportOption !== \"string\" ? new TransportOption() : (xhr == undefined ? new FetchTransport() : new XHRTransport());\r\n var abortController = undefined;\r\n var timeout = 0;\r\n var currentState = WAITING;\r\n var dataBuffer = \"\";\r\n var lastEventIdBuffer = \"\";\r\n var eventTypeBuffer = \"\";\r\n\r\n var textBuffer = \"\";\r\n var state = FIELD_START;\r\n var fieldStart = 0;\r\n var valueStart = 0;\r\n\r\n var onStart = function (status, statusText, contentType, headers) {\r\n if (currentState === CONNECTING) {\r\n if (status === 200 && contentType != undefined && contentTypeRegExp.test(contentType)) {\r\n currentState = OPEN;\r\n wasActivity = Date.now();\r\n retry = initialRetry;\r\n es.readyState = OPEN;\r\n var event = new ConnectionEvent(\"open\", {\r\n status: status,\r\n statusText: statusText,\r\n headers: headers\r\n });\r\n es.dispatchEvent(event);\r\n fire(es, es.onopen, event);\r\n } else {\r\n var message = \"\";\r\n if (status !== 200) {\r\n if (statusText) {\r\n statusText = statusText.replace(/\\s+/g, \" \");\r\n }\r\n message = \"EventSource's response has a status \" + status + \" \" + statusText + \" that is not 200. Aborting the connection.\";\r\n } else {\r\n message = \"EventSource's response has a Content-Type specifying an unsupported type: \" + (contentType == undefined ? \"-\" : contentType.replace(/\\s+/g, \" \")) + \". Aborting the connection.\";\r\n }\r\n close();\r\n var event = new ConnectionEvent(\"error\", {\r\n status: status,\r\n statusText: statusText,\r\n headers: headers\r\n });\r\n es.dispatchEvent(event);\r\n fire(es, es.onerror, event);\r\n console.error(message);\r\n }\r\n }\r\n };\r\n\r\n var onProgress = function (textChunk) {\r\n if (currentState === OPEN) {\r\n var n = -1;\r\n for (var i = 0; i < textChunk.length; i += 1) {\r\n var c = textChunk.charCodeAt(i);\r\n if (c === \"\\n\".charCodeAt(0) || c === \"\\r\".charCodeAt(0)) {\r\n n = i;\r\n }\r\n }\r\n var chunk = (n !== -1 ? textBuffer : \"\") + textChunk.slice(0, n + 1);\r\n textBuffer = (n === -1 ? textBuffer : \"\") + textChunk.slice(n + 1);\r\n if (textChunk !== \"\") {\r\n wasActivity = Date.now();\r\n textLength += textChunk.length;\r\n }\r\n for (var position = 0; position < chunk.length; position += 1) {\r\n var c = chunk.charCodeAt(position);\r\n if (state === AFTER_CR && c === \"\\n\".charCodeAt(0)) {\r\n state = FIELD_START;\r\n } else {\r\n if (state === AFTER_CR) {\r\n state = FIELD_START;\r\n }\r\n if (c === \"\\r\".charCodeAt(0) || c === \"\\n\".charCodeAt(0)) {\r\n if (state !== FIELD_START) {\r\n if (state === FIELD) {\r\n valueStart = position + 1;\r\n }\r\n var field = chunk.slice(fieldStart, valueStart - 1);\r\n var value = chunk.slice(valueStart + (valueStart < position && chunk.charCodeAt(valueStart) === \" \".charCodeAt(0) ? 1 : 0), position);\r\n if (field === \"data\") {\r\n dataBuffer += \"\\n\";\r\n dataBuffer += value;\r\n } else if (field === \"id\") {\r\n lastEventIdBuffer = value;\r\n } else if (field === \"event\") {\r\n eventTypeBuffer = value;\r\n } else if (field === \"retry\") {\r\n initialRetry = parseDuration(value, initialRetry);\r\n retry = initialRetry;\r\n } else if (field === \"heartbeatTimeout\") {\r\n heartbeatTimeout = parseDuration(value, heartbeatTimeout);\r\n if (timeout !== 0) {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(function () {\r\n onTimeout();\r\n }, heartbeatTimeout);\r\n }\r\n }\r\n }\r\n if (state === FIELD_START) {\r\n if (dataBuffer !== \"\") {\r\n lastEventId = lastEventIdBuffer;\r\n if (eventTypeBuffer === \"\") {\r\n eventTypeBuffer = \"message\";\r\n }\r\n var event = new MessageEvent(eventTypeBuffer, {\r\n data: dataBuffer.slice(1),\r\n lastEventId: lastEventIdBuffer\r\n });\r\n es.dispatchEvent(event);\r\n if (eventTypeBuffer === \"open\") {\r\n fire(es, es.onopen, event);\r\n } else if (eventTypeBuffer === \"message\") {\r\n fire(es, es.onmessage, event);\r\n } else if (eventTypeBuffer === \"error\") {\r\n fire(es, es.onerror, event);\r\n }\r\n if (currentState === CLOSED) {\r\n return;\r\n }\r\n }\r\n dataBuffer = \"\";\r\n eventTypeBuffer = \"\";\r\n }\r\n state = c === \"\\r\".charCodeAt(0) ? AFTER_CR : FIELD_START;\r\n } else {\r\n if (state === FIELD_START) {\r\n fieldStart = position;\r\n state = FIELD;\r\n }\r\n if (state === FIELD) {\r\n if (c === \":\".charCodeAt(0)) {\r\n valueStart = position + 1;\r\n state = VALUE_START;\r\n }\r\n } else if (state === VALUE_START) {\r\n state = VALUE;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n var onFinish = function (error) {\r\n if (currentState === OPEN || currentState === CONNECTING) {\r\n currentState = WAITING;\r\n if (timeout !== 0) {\r\n clearTimeout(timeout);\r\n timeout = 0;\r\n }\r\n timeout = setTimeout(function () {\r\n onTimeout();\r\n }, retry);\r\n retry = clampDuration(Math.min(initialRetry * 16, retry * 2));\r\n\r\n es.readyState = CONNECTING;\r\n var event = new ErrorEvent(\"error\", {error: error});\r\n es.dispatchEvent(event);\r\n fire(es, es.onerror, event);\r\n if (error != undefined) {\r\n console.error(error);\r\n }\r\n }\r\n };\r\n\r\n var close = function () {\r\n currentState = CLOSED;\r\n if (abortController != undefined) {\r\n abortController.abort();\r\n abortController = undefined;\r\n }\r\n if (timeout !== 0) {\r\n clearTimeout(timeout);\r\n timeout = 0;\r\n }\r\n es.readyState = CLOSED;\r\n };\r\n\r\n var onTimeout = function () {\r\n timeout = 0;\r\n\r\n if (currentState !== WAITING) {\r\n if (!wasActivity && abortController != undefined) {\r\n onFinish(new Error(\"No activity within \" + heartbeatTimeout + \" milliseconds.\" + \" \" + (currentState === CONNECTING ? \"No response received.\" : textLength + \" chars received.\") + \" \" + \"Reconnecting.\"));\r\n if (abortController != undefined) {\r\n abortController.abort();\r\n abortController = undefined;\r\n }\r\n } else {\r\n var nextHeartbeat = Math.max((wasActivity || Date.now()) + heartbeatTimeout - Date.now(), 1);\r\n wasActivity = false;\r\n timeout = setTimeout(function () {\r\n onTimeout();\r\n }, nextHeartbeat);\r\n }\r\n return;\r\n }\r\n\r\n wasActivity = false;\r\n textLength = 0;\r\n timeout = setTimeout(function () {\r\n onTimeout();\r\n }, heartbeatTimeout);\r\n\r\n currentState = CONNECTING;\r\n dataBuffer = \"\";\r\n eventTypeBuffer = \"\";\r\n lastEventIdBuffer = lastEventId;\r\n textBuffer = \"\";\r\n fieldStart = 0;\r\n valueStart = 0;\r\n state = FIELD_START;\r\n\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=428916\r\n // Request header field Last-Event-ID is not allowed by Access-Control-Allow-Headers.\r\n var requestURL = url;\r\n if (url.slice(0, 5) !== \"data:\" && url.slice(0, 5) !== \"blob:\") {\r\n if (lastEventId !== \"\") {\r\n // Remove the lastEventId parameter if it's already part of the request URL.\r\n var i = url.indexOf(\"?\");\r\n requestURL = i === -1 ? url : url.slice(0, i + 1) + url.slice(i + 1).replace(/(?:^|&)([^=&]*)(?:=[^&]*)?/g, function (p, paramName) {\r\n return paramName === lastEventIdQueryParameterName ? '' : p;\r\n });\r\n // Append the current lastEventId to the request URL.\r\n requestURL += (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + lastEventIdQueryParameterName +\"=\" + encodeURIComponent(lastEventId);\r\n }\r\n }\r\n var withCredentials = es.withCredentials;\r\n var requestHeaders = {};\r\n requestHeaders[\"Accept\"] = \"text/event-stream\";\r\n var headers = es.headers;\r\n if (headers != undefined) {\r\n for (var name in headers) {\r\n if (Object.prototype.hasOwnProperty.call(headers, name)) {\r\n requestHeaders[name] = headers[name];\r\n }\r\n }\r\n }\r\n try {\r\n abortController = transport.open(xhr, onStart, onProgress, onFinish, requestURL, withCredentials, requestHeaders);\r\n } catch (error) {\r\n close();\r\n throw error;\r\n }\r\n };\r\n\r\n es.url = url;\r\n es.readyState = CONNECTING;\r\n es.withCredentials = withCredentials;\r\n es.headers = headers;\r\n es._close = close;\r\n\r\n onTimeout();\r\n }\r\n\r\n EventSourcePolyfill.prototype = Object.create(EventTarget.prototype);\r\n EventSourcePolyfill.prototype.CONNECTING = CONNECTING;\r\n EventSourcePolyfill.prototype.OPEN = OPEN;\r\n EventSourcePolyfill.prototype.CLOSED = CLOSED;\r\n EventSourcePolyfill.prototype.close = function () {\r\n this._close();\r\n };\r\n\r\n EventSourcePolyfill.CONNECTING = CONNECTING;\r\n EventSourcePolyfill.OPEN = OPEN;\r\n EventSourcePolyfill.CLOSED = CLOSED;\r\n EventSourcePolyfill.prototype.withCredentials = undefined;\r\n\r\n var R = NativeEventSource\r\n if (XMLHttpRequest != undefined && (NativeEventSource == undefined || !(\"withCredentials\" in NativeEventSource.prototype))) {\r\n // Why replace a native EventSource ?\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=444328\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=831392\r\n // https://code.google.com/p/chromium/issues/detail?id=260144\r\n // https://code.google.com/p/chromium/issues/detail?id=225654\r\n // ...\r\n R = EventSourcePolyfill;\r\n }\r\n\r\n (function (factory) {\r\n if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n var v = factory(exports);\r\n if (v !== undefined) module.exports = v;\r\n }\r\n else if (typeof define === \"function\" && define.amd) {\r\n define([\"exports\"], factory);\r\n }\r\n else {\r\n factory(global);\r\n }\r\n })(function (exports) {\r\n exports.EventSourcePolyfill = EventSourcePolyfill;\r\n exports.NativeEventSource = NativeEventSource;\r\n exports.EventSource = R;\r\n });\r\n}(typeof globalThis === 'undefined' ? (typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : this) : globalThis));\r\n","export * from './client';\nexport * from './client_state';\nexport * from './channel';\nexport * from './channel_state';\nexport * from './connection';\nexport * from './events';\nexport * from './token_manager';\nexport * from './types';\nexport * from './ermis_call_node';\nexport * from './auth';\nexport { chatCodes, logChatPromiseExecution, formatMessage, createForwardMessagePayload } from './utils';\nexport { parseSystemMessage } from './system_message';\nexport { parseSignalMessage } from './signal_message';\nexport { normalizeFileName, getAttachmentCategory, isVideoFile, isHeicFile, buildAttachmentPayload } from './attachment_utils';\nexport type { VoiceRecordingMeta } from './attachment_utils';\n","'use strict';\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 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 // 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 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} = 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 {\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 * 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 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 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 AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","import FormData from 'form-data';\n\nexport default FormData;\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 replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\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 {Boolean} `true` if the interceptor was removed, `false` otherwise\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 crypto from 'crypto';\nimport URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n const randomValues = new Uint32Array(size);\n crypto.randomFillSync(randomValues);\n for (let i = 0; i < size; i++) {\n str += alphabet[randomValues[i] % length];\n }\n\n return str;\n}\n\n\nexport default {\n isNode: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob: typeof Blob !== 'undefined' && Blob || null\n },\n ALPHABET,\n generateString,\n protocols: [ 'http', 'https', 'file', 'data' ]\n};\n","'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\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';\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(), Object.assign({\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","'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);\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';\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","'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 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\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from './../helpers/buildURL.js';\nimport proxyFromEnv from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport {VERSION} from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport {EventEmitter} from 'events';\nimport formDataToStream from \"../helpers/formDataToStream.js\";\nimport readBlob from \"../helpers/readBlob.js\";\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from \"../helpers/callbackify.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\n\nconst zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n};\n\nconst brotliOptions = {\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n}\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst {http: httpFollow, https: httpsFollow} = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map(protocol => {\n return protocol + ':';\n});\n\nconst flushOnFinish = (stream, [throttled, flush]) => {\n stream\n .on('end', flush)\n .on('error', flush);\n\n return throttled;\n}\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object<string, any>} options - The options object that was passed to the request.\n *\n * @returns {Object<string, any>}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n if (options.beforeRedirects.proxy) {\n options.beforeRedirects.proxy(options);\n }\n if (options.beforeRedirects.config) {\n options.beforeRedirects.config(options, responseDetails);\n }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n let proxy = configProxy;\n if (!proxy && proxy !== false) {\n const proxyUrl = proxyFromEnv.getProxyForUrl(location);\n if (proxyUrl) {\n proxy = new URL(proxyUrl);\n }\n }\n if (proxy) {\n // Basic proxy authorization\n if (proxy.username) {\n proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n }\n\n if (proxy.auth) {\n // Support proxy auth object form\n if (proxy.auth.username || proxy.auth.password) {\n proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n }\n const base64 = Buffer\n .from(proxy.auth, 'utf8')\n .toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n const proxyHost = proxy.hostname || proxy.host;\n options.hostname = proxyHost;\n // Replace 'host' since options is not a URL object\n options.host = proxyHost;\n options.port = proxy.port;\n options.path = location;\n if (proxy.protocol) {\n options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n }\n }\n\n options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n // Configure proxy for redirected request, passing the original config proxy to apply\n // the exact same logic as if the redirected request was performed by axios directly.\n setProxy(redirectOptions, configProxy, redirectOptions.href);\n };\n}\n\nconst isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n return new Promise((resolve, reject) => {\n let onDone;\n let isDone;\n\n const done = (value, isRejected) => {\n if (isDone) return;\n isDone = true;\n onDone && onDone(value, isRejected);\n }\n\n const _resolve = (value) => {\n done(value);\n resolve(value);\n };\n\n const _reject = (reason) => {\n done(reason, true);\n reject(reason);\n }\n\n asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n })\n};\n\nconst resolveFamily = ({address, family}) => {\n if (!utils.isString(address)) {\n throw TypeError('address must be a string');\n }\n return ({\n address,\n family: family || (address.indexOf('.') < 0 ? 6 : 4)\n });\n}\n\nconst buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family});\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported && function httpAdapter(config) {\n return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n let {data, lookup, family} = config;\n const {responseType, responseEncoding} = config;\n const method = config.method.toUpperCase();\n let isDone;\n let rejected = false;\n let req;\n\n if (lookup) {\n const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]);\n // hotfix to support opt.all option which is required for node 20.x\n lookup = (hostname, opt, cb) => {\n _lookup(hostname, opt, (err, arg0, arg1) => {\n if (err) {\n return cb(err);\n }\n\n const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n\n opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n });\n }\n }\n\n // temporary internal emitter until the AxiosRequest class will be implemented\n const emitter = new EventEmitter();\n\n const onFinished = () => {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(abort);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', abort);\n }\n\n emitter.removeAllListeners();\n }\n\n onDone((value, isRejected) => {\n isDone = true;\n if (isRejected) {\n rejected = true;\n onFinished();\n }\n });\n\n function abort(reason) {\n emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason);\n }\n\n emitter.once('abort', reject);\n\n if (config.cancelToken || config.signal) {\n config.cancelToken && config.cancelToken.subscribe(abort);\n if (config.signal) {\n config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n }\n }\n\n // Parse url\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined);\n const protocol = parsed.protocol || supportedProtocols[0];\n\n if (protocol === 'data:') {\n let convertedData;\n\n if (method !== 'GET') {\n return settle(resolve, reject, {\n status: 405,\n statusText: 'method not allowed',\n headers: {},\n config\n });\n }\n\n try {\n convertedData = fromDataURI(config.url, responseType === 'blob', {\n Blob: config.env && config.env.Blob\n });\n } catch (err) {\n throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n }\n\n if (responseType === 'text') {\n convertedData = convertedData.toString(responseEncoding);\n\n if (!responseEncoding || responseEncoding === 'utf8') {\n convertedData = utils.stripBOM(convertedData);\n }\n } else if (responseType === 'stream') {\n convertedData = stream.Readable.from(convertedData);\n }\n\n return settle(resolve, reject, {\n data: convertedData,\n status: 200,\n statusText: 'OK',\n headers: new AxiosHeaders(),\n config\n });\n }\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new AxiosError(\n 'Unsupported protocol ' + protocol,\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n const headers = AxiosHeaders.from(config.headers).normalize();\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n // User-Agent is specified; handle case where no UA header is desired\n // Only set header if it hasn't been set in config\n headers.set('User-Agent', 'axios/' + VERSION, false);\n\n const {onUploadProgress, onDownloadProgress} = config;\n const maxRate = config.maxRate;\n let maxUploadRate = undefined;\n let maxDownloadRate = undefined;\n\n // support for spec compliant FormData objects\n if (utils.isSpecCompliantForm(data)) {\n const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n data = formDataToStream(data, (formHeaders) => {\n headers.set(formHeaders);\n }, {\n tag: `axios-${VERSION}-boundary`,\n boundary: userBoundary && userBoundary[1] || undefined\n });\n // support for https://www.npmjs.com/package/form-data api\n } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n headers.set(data.getHeaders());\n\n if (!headers.hasContentLength()) {\n try {\n const knownLength = await util.promisify(data.getLength).call(data);\n Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n /*eslint no-empty:0*/\n } catch (e) {\n }\n }\n } else if (utils.isBlob(data) || utils.isFile(data)) {\n data.size && headers.setContentType(data.type || 'application/octet-stream');\n headers.setContentLength(data.size || 0);\n data = stream.Readable.from(readBlob(data));\n } else if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new AxiosError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers.setContentLength(data.length, false);\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new AxiosError(\n 'Request body larger than maxBodyLength limit',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n }\n\n const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n if (utils.isArray(maxRate)) {\n maxUploadRate = maxRate[0];\n maxDownloadRate = maxRate[1];\n } else {\n maxUploadRate = maxDownloadRate = maxRate;\n }\n\n if (data && (onUploadProgress || maxUploadRate)) {\n if (!utils.isStream(data)) {\n data = stream.Readable.from(data, {objectMode: false});\n }\n\n data = stream.pipeline([data, new AxiosTransformStream({\n maxRate: utils.toFiniteNumber(maxUploadRate)\n })], utils.noop);\n\n onUploadProgress && data.on('progress', flushOnFinish(\n data,\n progressEventDecorator(\n contentLength,\n progressEventReducer(asyncDecorator(onUploadProgress), false, 3)\n )\n ));\n }\n\n // HTTP basic authentication\n let auth = undefined;\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n if (!auth && parsed.username) {\n const urlUsername = parsed.username;\n const urlPassword = parsed.password;\n auth = urlUsername + ':' + urlPassword;\n }\n\n auth && headers.delete('authorization');\n\n let path;\n\n try {\n path = buildURL(\n parsed.pathname + parsed.search,\n config.params,\n config.paramsSerializer\n ).replace(/^\\?/, '');\n } catch (err) {\n const customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n return reject(customErr);\n }\n\n headers.set(\n 'Accept-Encoding',\n 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false\n );\n\n const options = {\n path,\n method: method,\n headers: headers.toJSON(),\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth,\n protocol,\n family,\n beforeRedirect: dispatchBeforeRedirect,\n beforeRedirects: {}\n };\n\n // cacheable-lookup integration hotfix\n !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname.startsWith(\"[\") ? parsed.hostname.slice(1, -1) : parsed.hostname;\n options.port = parsed.port;\n setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n let transport;\n const isHttpsRequest = isHttps.test(options.protocol);\n options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsRequest ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirects.config = config.beforeRedirect;\n }\n transport = isHttpsRequest ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n } else {\n // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n options.maxBodyLength = Infinity;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n req = transport.request(options, function handleResponse(res) {\n if (req.destroyed) return;\n\n const streams = [res];\n\n const responseLength = +res.headers['content-length'];\n\n if (onDownloadProgress || maxDownloadRate) {\n const transformStream = new AxiosTransformStream({\n maxRate: utils.toFiniteNumber(maxDownloadRate)\n });\n\n onDownloadProgress && transformStream.on('progress', flushOnFinish(\n transformStream,\n progressEventDecorator(\n responseLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true, 3)\n )\n ));\n\n streams.push(transformStream);\n }\n\n // decompress the response body transparently if required\n let responseStream = res;\n\n // return the last request in case of redirects\n const lastRequest = res.req || req;\n\n // if decompress disabled we should not decompress\n if (config.decompress !== false && res.headers['content-encoding']) {\n // if no content, but headers still say that it is encoded,\n // remove the header not confuse downstream operations\n if (method === 'HEAD' || res.statusCode === 204) {\n delete res.headers['content-encoding'];\n }\n\n switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'x-gzip':\n case 'compress':\n case 'x-compress':\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'deflate':\n streams.push(new ZlibHeaderTransformStream());\n\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'br':\n if (isBrotliSupported) {\n streams.push(zlib.createBrotliDecompress(brotliOptions));\n delete res.headers['content-encoding'];\n }\n }\n }\n\n responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n const offListeners = stream.finished(responseStream, () => {\n offListeners();\n onFinished();\n });\n\n const response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: new AxiosHeaders(res.headers),\n config,\n request: lastRequest\n };\n\n if (responseType === 'stream') {\n response.data = responseStream;\n settle(resolve, reject, response);\n } else {\n const responseBuffer = [];\n let totalResponseBytes = 0;\n\n responseStream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destroy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n responseStream.destroy();\n reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n responseStream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n\n const err = new AxiosError(\n 'stream has been aborted',\n AxiosError.ERR_BAD_RESPONSE,\n config,\n lastRequest\n );\n responseStream.destroy(err);\n reject(err);\n });\n\n responseStream.on('error', function handleStreamError(err) {\n if (req.destroyed) return;\n reject(AxiosError.from(err, null, config, lastRequest));\n });\n\n responseStream.on('end', function handleStreamEnd() {\n try {\n let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (responseType !== 'arraybuffer') {\n responseData = responseData.toString(responseEncoding);\n if (!responseEncoding || responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n return reject(AxiosError.from(err, null, config, response.request, response));\n }\n settle(resolve, reject, response);\n });\n }\n\n emitter.once('abort', err => {\n if (!responseStream.destroyed) {\n responseStream.emit('error', err);\n responseStream.destroy();\n }\n });\n });\n\n emitter.once('abort', err => {\n reject(err);\n req.destroy(err);\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n // @todo remove\n // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;\n reject(AxiosError.from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n const timeout = parseInt(config.timeout, 10);\n\n if (Number.isNaN(timeout)) {\n reject(new AxiosError(\n 'error trying to parse `config.timeout` to int',\n AxiosError.ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devouring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n if (isDone) return;\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 req\n ));\n abort();\n });\n }\n\n\n // Send the request\n if (utils.isStream(data)) {\n let ended = false;\n let errored = false;\n\n data.on('end', () => {\n ended = true;\n });\n\n data.once('error', err => {\n errored = true;\n req.destroy(err);\n });\n\n data.on('close', () => {\n if (!ended && !errored) {\n abort(new CanceledError('Request stream has been aborted', config, req));\n }\n });\n\n data.pipe(req);\n } else {\n req.end(data);\n }\n });\n}\n\nexport const __setProxy = setProxy;\n","export const VERSION = \"1.10.0\";","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n const _Blob = options && options.Blob || platform.classes.Blob;\n const protocol = parseProtocol(uri);\n\n if (asBlob === undefined && _Blob) {\n asBlob = true;\n }\n\n if (protocol === 'data') {\n uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n const match = DATA_URL_PATTERN.exec(uri);\n\n if (!match) {\n throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n }\n\n const mime = match[1];\n const isBase64 = match[2];\n const body = match[3];\n const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n if (asBlob) {\n if (!_Blob) {\n throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n }\n\n return new _Blob([buffer], {type: mime});\n }\n\n return buffer;\n }\n\n throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n","'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform{\n constructor(options) {\n options = utils.toFlatObject(options, {\n maxRate: 0,\n chunkSize: 64 * 1024,\n minChunkSize: 100,\n timeWindow: 500,\n ticksRate: 2,\n samplesCount: 15\n }, null, (prop, source) => {\n return !utils.isUndefined(source[prop]);\n });\n\n super({\n readableHighWaterMark: options.chunkSize\n });\n\n const internals = this[kInternals] = {\n timeWindow: options.timeWindow,\n chunkSize: options.chunkSize,\n maxRate: options.maxRate,\n minChunkSize: options.minChunkSize,\n bytesSeen: 0,\n isCaptured: false,\n notifiedBytesLoaded: 0,\n ts: Date.now(),\n bytes: 0,\n onReadCallback: null\n };\n\n this.on('newListener', event => {\n if (event === 'progress') {\n if (!internals.isCaptured) {\n internals.isCaptured = true;\n }\n }\n });\n }\n\n _read(size) {\n const internals = this[kInternals];\n\n if (internals.onReadCallback) {\n internals.onReadCallback();\n }\n\n return super._read(size);\n }\n\n _transform(chunk, encoding, callback) {\n const internals = this[kInternals];\n const maxRate = internals.maxRate;\n\n const readableHighWaterMark = this.readableHighWaterMark;\n\n const timeWindow = internals.timeWindow;\n\n const divider = 1000 / timeWindow;\n const bytesThreshold = (maxRate / divider);\n const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n\n const pushChunk = (_chunk, _callback) => {\n const bytes = Buffer.byteLength(_chunk);\n internals.bytesSeen += bytes;\n internals.bytes += bytes;\n\n internals.isCaptured && this.emit('progress', internals.bytesSeen);\n\n if (this.push(_chunk)) {\n process.nextTick(_callback);\n } else {\n internals.onReadCallback = () => {\n internals.onReadCallback = null;\n process.nextTick(_callback);\n };\n }\n }\n\n const transformChunk = (_chunk, _callback) => {\n const chunkSize = Buffer.byteLength(_chunk);\n let chunkRemainder = null;\n let maxChunkSize = readableHighWaterMark;\n let bytesLeft;\n let passed = 0;\n\n if (maxRate) {\n const now = Date.now();\n\n if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {\n internals.ts = now;\n bytesLeft = bytesThreshold - internals.bytes;\n internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n passed = 0;\n }\n\n bytesLeft = bytesThreshold - internals.bytes;\n }\n\n if (maxRate) {\n if (bytesLeft <= 0) {\n // next time window\n return setTimeout(() => {\n _callback(null, _chunk);\n }, timeWindow - passed);\n }\n\n if (bytesLeft < maxChunkSize) {\n maxChunkSize = bytesLeft;\n }\n }\n\n if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {\n chunkRemainder = _chunk.subarray(maxChunkSize);\n _chunk = _chunk.subarray(0, maxChunkSize);\n }\n\n pushChunk(_chunk, chunkRemainder ? () => {\n process.nextTick(_callback, null, chunkRemainder);\n } : _callback);\n };\n\n transformChunk(chunk, function transformNextChunk(err, _chunk) {\n if (err) {\n return callback(err);\n }\n\n if (_chunk) {\n transformChunk(_chunk, transformNextChunk);\n } else {\n callback(null);\n }\n });\n }\n}\n\nexport default AxiosTransformStream;\n","import util from 'util';\nimport {Readable} from 'stream';\nimport utils from \"../utils.js\";\nimport readBlob from \"./readBlob.js\";\nimport platform from \"../platform/index.js\";\n\nconst BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util.TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n constructor(name, value) {\n const {escapeName} = this.constructor;\n const isStringValue = utils.isString(value);\n\n let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n }${CRLF}`;\n\n if (isStringValue) {\n value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n } else {\n headers += `Content-Type: ${value.type || \"application/octet-stream\"}${CRLF}`\n }\n\n this.headers = textEncoder.encode(headers + CRLF);\n\n this.contentLength = isStringValue ? value.byteLength : value.size;\n\n this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n this.name = name;\n this.value = value;\n }\n\n async *encode(){\n yield this.headers;\n\n const {value} = this;\n\n if(utils.isTypedArray(value)) {\n yield value;\n } else {\n yield* readBlob(value);\n }\n\n yield CRLF_BYTES;\n }\n\n static escapeName(name) {\n return String(name).replace(/[\\r\\n\"]/g, (match) => ({\n '\\r' : '%0D',\n '\\n' : '%0A',\n '\"' : '%22',\n }[match]));\n }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n const {\n tag = 'form-data-boundary',\n size = 25,\n boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET)\n } = options || {};\n\n if(!utils.isFormData(form)) {\n throw TypeError('FormData instance required');\n }\n\n if (boundary.length < 1 || boundary.length > 70) {\n throw Error('boundary must be 10-70 characters long')\n }\n\n const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF);\n let contentLength = footerBytes.byteLength;\n\n const parts = Array.from(form.entries()).map(([name, value]) => {\n const part = new FormDataPart(name, value);\n contentLength += part.size;\n return part;\n });\n\n contentLength += boundaryBytes.byteLength * parts.length;\n\n contentLength = utils.toFiniteNumber(contentLength);\n\n const computedHeaders = {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`\n }\n\n if (Number.isFinite(contentLength)) {\n computedHeaders['Content-Length'] = contentLength;\n }\n\n headersHandler && headersHandler(computedHeaders);\n\n return Readable.from((async function *() {\n for(const part of parts) {\n yield boundaryBytes;\n yield* part.encode();\n }\n\n yield footerBytes;\n })());\n};\n\nexport default formDataToStream;\n","const {asyncIterator} = Symbol;\n\nconst readBlob = async function* (blob) {\n if (blob.stream) {\n yield* blob.stream()\n } else if (blob.arrayBuffer) {\n yield await blob.arrayBuffer()\n } else if (blob[asyncIterator]) {\n yield* blob[asyncIterator]();\n } else {\n yield blob;\n }\n}\n\nexport default readBlob;\n","\"use strict\";\n\nimport stream from \"stream\";\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n __transform(chunk, encoding, callback) {\n this.push(chunk);\n callback();\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk.length !== 0) {\n this._transform = this.__transform;\n\n // Add Default Compression headers if no zlib headers are present\n if (chunk[0] !== 120) { // Hex: 78\n const header = Buffer.alloc(2);\n header[0] = 120; // Hex: 78\n header[1] = 156; // Hex: 9C \n this.push(header, encoding);\n }\n }\n\n this.__transform(chunk, encoding, callback);\n }\n}\n\nexport default ZlibHeaderTransformStream;\n","import utils from \"../utils.js\";\n\nconst callbackify = (fn, reducer) => {\n return utils.isAsyncFn(fn) ? function (...args) {\n const cb = args.pop();\n fn.apply(this, args).then((value) => {\n try {\n reducer ? cb(null, ...reducer(value)) : cb(null, value);\n } catch (err) {\n cb(err);\n }\n }, cb);\n } : fn;\n}\n\nexport default callbackify;\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.apply(null, 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 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","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) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : 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 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(Object.assign({}, 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 let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\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() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\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","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 isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = 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\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst 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\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (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 responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\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 = \"credentials\" in Request.prototype;\n request = new Request(url, {\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 let response = await fetch(request, fetchOptions);\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\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\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\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\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) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\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 adapters: knownAdapters\n}\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);\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","'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.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, 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 i = 0;\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","'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","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};\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","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","/* eslint no-unused-vars: \"off\" */\n/* global process */\n\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport https from 'https';\nimport WebSocket from 'isomorphic-ws';\n\nimport { Channel } from './channel';\nimport { ClientState } from './client_state';\nimport { StableWSConnection } from './connection';\n\nimport { TokenManager } from './token_manager';\n\nimport { isErrorResponse } from './errors';\nimport { EventSourcePolyfill } from 'event-source-polyfill';\nimport {\n addFileToFormData,\n axiosParamsSerializer,\n enrichWithUserInfo,\n ensureMembersUserInfoLoaded,\n getDirectChannelImage,\n getDirectChannelName,\n getLatestCreatedAt,\n isFunction,\n randomId,\n} from './utils';\n\nimport {\n APIErrorResponse,\n APIResponse,\n ChannelAPIResponse,\n ChannelData,\n ChannelFilters,\n ChannelSort,\n ChannelStateOptions,\n ConnectAPIResponse,\n DefaultGenerics,\n ErrorFromResponse,\n Event,\n EventHandler,\n ExtendableGenerics,\n Logger,\n QueryChannelsAPIResponse,\n SendFileAPIResponse,\n ErmisChatOptions,\n UserResponse,\n ContactResponse,\n UsersResponse,\n ContactResult,\n Contact,\n} from './types';\n\nfunction isString(x: unknown): x is string {\n return typeof x === 'string' || x instanceof String;\n}\nexport class ErmisChat<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> {\n private static _instance?: unknown | ErmisChat; // type is undefined|ErmisChat, unknown is due to TS limitations with statics\n\n activeChannels: {\n [key: string]: Channel<ErmisChatGenerics>;\n };\n axiosInstance: AxiosInstance;\n baseURL?: string;\n userBaseURL?: string;\n browser: boolean;\n cleaningIntervalRef?: NodeJS.Timeout;\n clientID?: string;\n apiKey: string;\n projectId: string;\n listeners: Record<string, Array<(event: Event<ErmisChatGenerics>) => void>>;\n logger: Logger;\n recoverStateOnReconnect?: boolean;\n node: boolean;\n options: ErmisChatOptions;\n setUserPromise: ConnectAPIResponse<ErmisChatGenerics> | null;\n state: ClientState<ErmisChatGenerics>;\n tokenManager: TokenManager<ErmisChatGenerics>;\n user?: UserResponse<ErmisChatGenerics>;\n userAgent?: string;\n userID?: string;\n wsBaseURL?: string;\n wsConnection: StableWSConnection<ErmisChatGenerics> | null;\n wsPromise: ConnectAPIResponse<ErmisChatGenerics> | null;\n consecutiveFailures: number;\n defaultWSTimeout: number;\n\n private eventSource: EventSourcePolyfill | null = null;\n\n constructor(apiKey: string, projectId: string, baseURL: string, options?: ErmisChatOptions) {\n this.apiKey = apiKey;\n this.projectId = projectId;\n this.listeners = {};\n this.state = new ClientState<ErmisChatGenerics>();\n\n const inputOptions = options || {};\n\n this.browser = typeof inputOptions.browser !== 'undefined' ? inputOptions.browser : typeof window !== 'undefined';\n this.node = !this.browser;\n\n this.options = {\n withCredentials: false,\n warmUp: false,\n recoverStateOnReconnect: true,\n ...inputOptions,\n };\n\n if (this.node && !this.options.httpsAgent) {\n this.options.httpsAgent = new https.Agent({\n keepAlive: true,\n keepAliveMsecs: 3000,\n });\n }\n\n this.axiosInstance = axios.create(this.options);\n\n this.setBaseURL(baseURL);\n\n // WS connection is initialized when setUser is called\n this.wsConnection = null;\n this.wsPromise = null;\n this.setUserPromise = null;\n // keeps a reference to all the channels that are in use\n this.activeChannels = {};\n\n this.tokenManager = new TokenManager();\n this.consecutiveFailures = 0;\n this.defaultWSTimeout = 15000;\n\n this.axiosInstance.defaults.paramsSerializer = axiosParamsSerializer;\n\n this.logger = isFunction(inputOptions.logger) ? inputOptions.logger : () => null;\n this.recoverStateOnReconnect = this.options.recoverStateOnReconnect;\n }\n\n public static getInstance<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics>(\n key: string,\n projectId: string,\n baseURL: string,\n options?: ErmisChatOptions,\n ): ErmisChat<ErmisChatGenerics> {\n if (!ErmisChat._instance) {\n ErmisChat._instance = new ErmisChat<ErmisChatGenerics>(key, projectId, baseURL, options);\n }\n\n return ErmisChat._instance as ErmisChat<ErmisChatGenerics>;\n }\n\n async refreshNewToken(refresh_token: string) {\n return await this.post<APIResponse>(this.userBaseURL + '/refresh_token', { refresh_token });\n }\n\n getAuthType() {\n return 'jwt';\n }\n\n setBaseURL(baseURL: string) {\n this.baseURL = baseURL;\n this.userBaseURL = this.options.userBaseURL || baseURL + '/uss/v1';\n this.wsBaseURL = this.baseURL.replace('http', 'ws').replace(':3030', ':8800');\n }\n\n async getExternalAuthToken(user: UserResponse<ErmisChatGenerics>, token: string | null) {\n const params: any = { apikey: this.apiKey, name: user.name };\n if (user.avatar) {\n params.avatar = user.avatar;\n }\n const url = this.userBaseURL + '/get_token/external_auth';\n const query = new URLSearchParams(params).toString();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (token) {\n const tokenStr = typeof token === 'string' && token.startsWith('Bearer ') ? token : `Bearer ${token}`;\n headers['Authorization'] = tokenStr;\n }\n const response = await fetch(`${url}?${query}`, {\n method: 'GET',\n headers,\n });\n if (!response.ok) {\n let errorMsg = '';\n try {\n const errorData = await response.json();\n errorMsg = errorData.message || JSON.stringify(errorData);\n } catch {\n errorMsg = await response.text();\n }\n throw new Error(errorMsg);\n }\n return await response.json();\n }\n\n connectUser = async (\n user: UserResponse<ErmisChatGenerics>,\n userTokenOrProvider: string | null,\n extenal_auth?: boolean, // pass true if you are using external auth\n ) => {\n this.logger('info', 'client:connectUser() - started', {\n tags: ['connection', 'client'],\n });\n if (!user.id) {\n throw new Error('The \"id\" field on the user is missing');\n }\n\n // If external auth is enabled, get the token from the server\n if (extenal_auth) {\n const external_auth_token = await this.getExternalAuthToken(user, userTokenOrProvider);\n\n userTokenOrProvider = external_auth_token.token;\n user.id = external_auth_token.user_id;\n }\n\n /**\n * Calling connectUser multiple times is potentially the result of a bad integration, however,\n * If the user id remains the same we don't throw error\n */\n if (this.userID === user.id && this.setUserPromise) {\n console.warn(\n 'Consecutive calls to connectUser is detected, ideally you should only call this function once in your app.',\n );\n return this.setUserPromise;\n }\n\n if (this.userID) {\n throw new Error(\n 'Use client.disconnect() before trying to connect as a different user. connectUser was called twice.',\n );\n }\n\n if (this.node && !this.options.allowServerSideConnect) {\n console.warn(\n 'Please do not use connectUser server side. connectUser impacts MAU and concurrent connection usage and thus your bill. If you have a valid use-case, add \"allowServerSideConnect: true\" to the client options to disable this warning.',\n );\n }\n\n // we generate the client id client side\n this.userID = user.id;\n\n const setTokenPromise = this._setToken(user, userTokenOrProvider);\n this._setUser(user);\n this.state.updateUser({ id: user.id, name: user?.name || user.id, avatar: user?.avatar || '' });\n\n const wsPromise = this.openConnection();\n\n this.setUserPromise = Promise.all([setTokenPromise, wsPromise]).then(\n (result) => result[1], // We only return connection promise;\n );\n\n try {\n const result = await this.setUserPromise;\n // Call SSE after successful connect\n await this.connectToSSE();\n return result;\n } catch (err) {\n this.disconnectUser();\n throw err;\n }\n };\n\n setUser = this.connectUser;\n\n _setToken = (user: UserResponse<ErmisChatGenerics>, userTokenOrProvider: string | null) =>\n this.tokenManager.setTokenOrProvider(userTokenOrProvider, user);\n\n _setUser(user: UserResponse<ErmisChatGenerics>) {\n this.user = { ...user };\n this.userID = user.id;\n }\n\n closeConnection = async (timeout?: number) => {\n if (this.cleaningIntervalRef != null) {\n clearInterval(this.cleaningIntervalRef);\n this.cleaningIntervalRef = undefined;\n }\n\n await this.wsConnection?.disconnect(timeout);\n return Promise.resolve();\n };\n\n openConnection = async () => {\n if (!this.userID) {\n throw Error('User is not set on client, use client.connectUser instead');\n }\n\n if (this.wsConnection?.isConnecting && this.wsPromise) {\n this.logger('info', 'client:openConnection() - connection already in progress', {\n tags: ['connection', 'client'],\n });\n return this.wsPromise;\n }\n\n if (this.wsConnection?.isHealthy) {\n this.logger('info', 'client:openConnection() - openConnection called twice, healthy connection already exists', {\n tags: ['connection', 'client'],\n });\n\n return Promise.resolve();\n }\n\n this.clientID = `${this.userID}--${randomId()}`;\n this.wsPromise = this.connect();\n this._startCleaning();\n return this.wsPromise;\n };\n\n _setupConnection = this.openConnection;\n\n disconnectUser = async (timeout?: number) => {\n this.logger('info', 'client:disconnect() - Disconnecting the client', {\n tags: ['connection', 'client'],\n });\n\n // remove the user specific fields\n delete this.user;\n delete this.userID;\n\n const closePromise = this.closeConnection(timeout);\n\n for (const channel of Object.values(this.activeChannels)) {\n channel._disconnect();\n }\n // ensure we no longer return inactive channels\n this.activeChannels = {};\n // reset client state\n this.state = new ClientState();\n // reset token manager\n setTimeout(this.tokenManager.reset); // delay reseting to use token for disconnect calls\n\n // close the WS connection\n return closePromise;\n };\n\n disconnect = this.disconnectUser;\n\n on(callback: EventHandler<ErmisChatGenerics>): { unsubscribe: () => void };\n on(eventType: string, callback: EventHandler<ErmisChatGenerics>): { unsubscribe: () => void };\n on(\n callbackOrString: EventHandler<ErmisChatGenerics> | string,\n callbackOrNothing?: EventHandler<ErmisChatGenerics>,\n ): { unsubscribe: () => void } {\n const key = callbackOrNothing ? (callbackOrString as string) : 'all';\n const callback = callbackOrNothing ? callbackOrNothing : (callbackOrString as EventHandler<ErmisChatGenerics>);\n if (!(key in this.listeners)) {\n this.listeners[key] = [];\n }\n this.logger('info', `Attaching listener for ${key} event`, {\n tags: ['event', 'client'],\n });\n this.listeners[key].push(callback);\n return {\n unsubscribe: () => {\n this.logger('info', `Removing listener for ${key} event`, {\n tags: ['event', 'client'],\n });\n this.listeners[key] = this.listeners[key].filter((el) => el !== callback);\n },\n };\n }\n\n off(callback: EventHandler<ErmisChatGenerics>): void;\n off(eventType: string, callback: EventHandler<ErmisChatGenerics>): void;\n off(callbackOrString: EventHandler<ErmisChatGenerics> | string, callbackOrNothing?: EventHandler<ErmisChatGenerics>) {\n const key = callbackOrNothing ? (callbackOrString as string) : 'all';\n const callback = callbackOrNothing ? callbackOrNothing : (callbackOrString as EventHandler<ErmisChatGenerics>);\n if (!(key in this.listeners)) {\n this.listeners[key] = [];\n }\n\n this.logger('info', `Removing listener for ${key} event`, {\n tags: ['event', 'client'],\n });\n this.listeners[key] = this.listeners[key].filter((value) => value !== callback);\n }\n\n _logApiRequest(\n type: string,\n url: string,\n data: unknown,\n config: AxiosRequestConfig & {\n config?: AxiosRequestConfig & { maxBodyLength?: number };\n },\n ) {\n this.logger(\n 'info',\n `client: ${type} - Request - ${url}- ${JSON.stringify(data)} - ${JSON.stringify(config.params)}`,\n {\n tags: ['api', 'api_request', 'client'],\n url,\n payload: data,\n config,\n },\n );\n }\n\n _logApiResponse<T>(type: string, url: string, response: AxiosResponse<T>) {\n this.logger('info', `client:${type} - Response - url: ${url} > status ${response.status}`, {\n tags: ['api', 'api_response', 'client'],\n url,\n response,\n });\n }\n\n _logApiError(type: string, url: string, error: unknown, options: unknown) {\n this.logger(\n 'error',\n `client:${type} - Error: ${JSON.stringify(error)} - url: ${url} - options: ${JSON.stringify(options)}`,\n {\n tags: ['api', 'api_response', 'client'],\n url,\n error,\n },\n );\n }\n\n doAxiosRequest = async <T>(\n type: string,\n url: string,\n data?: unknown,\n options: AxiosRequestConfig & {\n config?: AxiosRequestConfig & { maxBodyLength?: number };\n } = {},\n ): Promise<T> => {\n await this.tokenManager.tokenReady();\n\n const requestConfig = this._enrichAxiosOptions(options);\n\n try {\n let response: AxiosResponse<T>;\n this._logApiRequest(type, url, data, requestConfig);\n switch (type) {\n case 'get':\n response = await this.axiosInstance.get(url, requestConfig);\n break;\n case 'delete':\n response = await this.axiosInstance.delete(url, requestConfig);\n break;\n case 'post':\n response = await this.axiosInstance.post(url, data, requestConfig);\n break;\n case 'postForm':\n response = await this.axiosInstance.postForm(url, data, requestConfig);\n break;\n case 'put':\n response = await this.axiosInstance.put(url, data, requestConfig);\n break;\n case 'patch':\n response = await this.axiosInstance.patch(url, data, requestConfig);\n break;\n case 'options':\n response = await this.axiosInstance.options(url, requestConfig);\n break;\n default:\n throw new Error('Invalid request type');\n }\n this._logApiResponse<T>(type, url, response);\n this.consecutiveFailures = 0;\n return this.handleResponse(response);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any /**TODO: generalize error types */) {\n e.client_request_id = requestConfig.headers?.['x-client-request-id'];\n this._logApiError(type, url, e, options);\n this.consecutiveFailures += 1;\n if (e.response) {\n return this.handleResponse(e.response);\n } else {\n throw e as AxiosError<APIErrorResponse>;\n }\n }\n };\n\n get<T>(url: string, params?: AxiosRequestConfig['params']) {\n return this.doAxiosRequest<T>('get', url, null, { params });\n }\n\n put<T>(url: string, data?: unknown) {\n return this.doAxiosRequest<T>('put', url, data);\n }\n\n post<T>(url: string, data?: unknown, params?: AxiosRequestConfig['params']) {\n return this.doAxiosRequest<T>('post', url, data, { params });\n }\n\n patch<T>(url: string, data?: unknown) {\n return this.doAxiosRequest<T>('patch', url, data);\n }\n\n delete<T>(url: string, params?: AxiosRequestConfig['params']) {\n return this.doAxiosRequest<T>('delete', url, null, { params });\n }\n\n sendFile(\n url: string,\n uri: string | NodeJS.ReadableStream | Buffer | File,\n name?: string,\n contentType?: string,\n user?: UserResponse<ErmisChatGenerics>,\n ) {\n const data = addFileToFormData(uri, name, contentType || 'multipart/form-data');\n if (user != null) data.append('user', JSON.stringify(user));\n\n return this.doAxiosRequest<SendFileAPIResponse>('postForm', url, data, {\n headers: data.getHeaders ? data.getHeaders() : {}, // node vs browser\n config: {\n timeout: 0,\n maxContentLength: Infinity,\n maxBodyLength: Infinity,\n },\n });\n }\n\n errorFromResponse(response: AxiosResponse<APIErrorResponse>): ErrorFromResponse<APIErrorResponse> {\n let err: ErrorFromResponse<APIErrorResponse>;\n err = new ErrorFromResponse(`ErmisChat error HTTP code: ${response.status}`);\n if (response.data && response.data.code) {\n err = new Error(`ErmisChat error code ${response.data.code}: ${response.data.message}`);\n err.code = response.data.code;\n }\n err.response = response;\n err.status = response.status;\n return err;\n }\n\n handleResponse<T>(response: AxiosResponse<T>) {\n const data = response.data;\n if (isErrorResponse(response)) {\n throw this.errorFromResponse(response);\n }\n return data;\n }\n\n dispatchEvent = (event: Event<ErmisChatGenerics>) => {\n if (!event.received_at) event.received_at = new Date();\n\n // If the event is channel.created, handle it asynchronously\n if (event.type === 'channel.created') {\n this._handleChannelCreatedEvent(event).then(() => {\n this._afterDispatchEvent(event);\n });\n } else {\n const postListenerCallbacks = this._handleClientEvent(event);\n\n // channel event handlers\n const cid = event.cid;\n const channel = cid ? this.activeChannels[cid] : undefined;\n if (channel) {\n channel._handleChannelEvent(event);\n }\n\n this._callClientListeners(event);\n\n if (channel) {\n channel._callChannelListeners(event);\n }\n\n postListenerCallbacks.forEach((c) => c());\n }\n };\n\n _afterDispatchEvent(event: Event<ErmisChatGenerics>) {\n const postListenerCallbacks = this._handleClientEvent(event);\n\n const cid = event.cid;\n const channel = cid ? this.activeChannels[cid] : undefined;\n if (channel) {\n channel._handleChannelEvent(event);\n }\n\n this._callClientListeners(event);\n\n if (channel) {\n channel._callChannelListeners(event);\n }\n\n postListenerCallbacks.forEach((c) => c());\n }\n\n private async _handleChannelCreatedEvent(event: Event<ErmisChatGenerics>) {\n const members = event.channel?.members || [];\n // Ensure all members' user info are loaded in state.users\n await ensureMembersUserInfoLoaded(this, members);\n\n // Get the latest users after updating\n const updatedUsers = Object.values(this.state.users);\n\n const enrichedMembers = enrichWithUserInfo(members, updatedUsers);\n const channelName =\n event.channel_type === 'messaging'\n ? getDirectChannelName(enrichedMembers, this.userID || '')\n : event.channel?.name;\n const channel = {\n ...event.channel,\n members: enrichedMembers,\n name: channelName,\n };\n const channelState: any = {\n channel,\n members: enrichedMembers,\n messages: [],\n pinned_messages: [],\n };\n const c = this.channel(event.channel_type || '', event.channel_id || '');\n c.data = channel;\n c._initializeState(channelState, 'latest');\n }\n\n handleEvent = (messageEvent: WebSocket.MessageEvent) => {\n // dispatch the event to the channel listeners\n const jsonString = messageEvent.data as string;\n const event = JSON.parse(jsonString) as Event<ErmisChatGenerics>;\n this.dispatchEvent(event);\n };\n\n _updateMemberWatcherReferences = (user: UserResponse<ErmisChatGenerics>) => {\n const refMap = this.state.userChannelReferences[user.id] || {};\n for (const channelID in refMap) {\n const channel = this.activeChannels[channelID];\n if (channel?.state) {\n if (channel.state.members[user.id]) {\n channel.state.members[user.id].user = user;\n }\n if (channel.state.watchers[user.id]) {\n channel.state.watchers[user.id] = user;\n }\n if (channel.state.read[user.id]) {\n channel.state.read[user.id].user = user;\n }\n }\n }\n };\n\n _updateUserReferences = this._updateMemberWatcherReferences;\n\n _updateUserMessageReferences = (user: UserResponse<ErmisChatGenerics>) => {\n const refMap = this.state.userChannelReferences[user.id] || {};\n\n for (const channelID in refMap) {\n const channel = this.activeChannels[channelID];\n\n if (!channel) continue;\n\n const state = channel.state;\n\n /** update the messages from this user. */\n state?.updateUserMessages(user);\n }\n };\n\n _deleteUserMessageReference = (user: UserResponse<ErmisChatGenerics>, hardDelete = false) => {\n const refMap = this.state.userChannelReferences[user.id] || {};\n\n for (const channelID in refMap) {\n const channel = this.activeChannels[channelID];\n const state = channel.state;\n\n /** deleted the messages from this user. */\n state?.deleteUserMessages(user, hardDelete);\n }\n };\n\n _handleClientEvent(event: Event<ErmisChatGenerics>) {\n const client = this;\n const postListenerCallbacks = [];\n this.logger('info', `client:_handleClientEvent - Received event of type { ${event.type} }`, {\n tags: ['event', 'client'],\n event,\n });\n\n if (event.type === 'health.check' && event.me) {\n }\n\n if ((event.type === 'channel.deleted' || event.type === 'notification.channel_deleted') && event.cid) {\n client.state.deleteAllChannelReference(event.cid);\n this.activeChannels[event.cid]?._disconnect();\n\n postListenerCallbacks.push(() => {\n if (!event.cid) return;\n\n delete this.activeChannels[event.cid];\n });\n\n for (const channel of Object.values(this.activeChannels)) {\n if (channel.type === 'team' && channel.state.topics?.some((t) => t.cid === event.cid)) {\n // Remove the topic with matching cid from the topics array\n channel.state.topics = channel.state.topics.filter((t) => t.cid !== event.cid);\n }\n }\n }\n if (event.type === 'notification.invite_rejected') {\n if (event.member?.user_id === this.userID && event.cid) {\n client.state.deleteAllChannelReference(event.cid);\n this.activeChannels[event.cid]?._disconnect();\n\n postListenerCallbacks.push(() => {\n if (!event.cid) return;\n\n delete this.activeChannels[event.cid];\n });\n }\n }\n if (event.type === 'notification.invite_accepted') {\n //TODO handle channel list and invited channels here\n }\n\n if (event.type === 'member.added') {\n if (event.member?.user_id === this.userID) {\n const c = this.channel(event.channel_type || '', event.channel_id || '');\n // Gọi watch để lấy đầy đủ thông tin channel từ server\n c.watch().catch((err) => {\n this.logger('error', 'Failed to watch channel after member.added', { err, event });\n });\n }\n }\n\n if (event.type === 'connection.recovered') {\n postListenerCallbacks.push(() => {\n // Auto-resend offline failed messages\n Object.values(this.activeChannels).forEach((channel) => {\n if (!channel.state?.messages) return;\n const offlineFailedMsgs = channel.state.messages.filter(\n (m) =>\n m.status === 'failed_offline' &&\n m.user?.id === this.userID &&\n (!m.attachments || m.attachments.length === 0),\n );\n offlineFailedMsgs.forEach((msg) => {\n if (msg.id) {\n channel.retryMessage(msg.id).catch((err) => {\n this.logger('error', `Failed to auto-resend offline message ${msg.id}`, {\n tags: ['offline', 'retry'],\n err,\n });\n });\n }\n });\n });\n });\n }\n\n return postListenerCallbacks;\n }\n\n _callClientListeners = (event: Event<ErmisChatGenerics>) => {\n const client = this;\n // gather and call the listeners\n const listeners: Array<(event: Event<ErmisChatGenerics>) => void> = [];\n if (client.listeners.all) {\n listeners.push(...client.listeners.all);\n }\n if (client.listeners[event.type]) {\n listeners.push(...client.listeners[event.type]);\n }\n\n // call the event and send it to the listeners\n for (const listener of listeners) {\n listener(event);\n }\n };\n\n recoverState = async () => {\n this.logger('info', 'client:recoverState() - Start of recoverState', {\n tags: ['connection'],\n });\n\n const cids = Object.keys(this.activeChannels);\n if (cids.length && this.recoverStateOnReconnect) {\n this.logger('info', `client:recoverState() - Start the querying of ${cids.length} channels`, {\n tags: ['connection', 'client'],\n });\n\n const filter: ChannelFilters = {\n type: ['messaging', 'team'],\n };\n const sort: [] = [];\n const options = {\n message_limit: 25,\n };\n\n await this.queryChannels(filter, sort, options);\n\n this.logger('info', 'client:recoverState() - Querying channels finished', { tags: ['connection', 'client'] });\n this.dispatchEvent({\n type: 'connection.recovered',\n } as Event<ErmisChatGenerics>);\n } else {\n this.dispatchEvent({\n type: 'connection.recovered',\n } as Event<ErmisChatGenerics>);\n }\n\n this.wsPromise = Promise.resolve();\n this.setUserPromise = Promise.resolve();\n };\n\n async connect() {\n if (!this.userID || !this.user) {\n throw Error('Call connectUser before starting the connection');\n }\n if (!this.wsBaseURL) {\n throw Error('Websocket base url not set');\n }\n if (!this.clientID) {\n throw Error('clientID is not set');\n }\n\n // if (!this.wsConnection && (this.options.warmUp || this.options.enableInsights)) {\n // this._sayHi();\n // }\n // The StableWSConnection handles all the reconnection logic.\n if (this.options.wsConnection && this.node) {\n // Intentionally avoiding adding ts generics on wsConnection in options since its only useful for unit test purpose.\n (this.options.wsConnection as unknown as StableWSConnection<ErmisChatGenerics>).setClient(this);\n this.wsConnection = this.options.wsConnection as unknown as StableWSConnection<ErmisChatGenerics>;\n } else {\n this.wsConnection = new StableWSConnection<ErmisChatGenerics>({\n client: this,\n });\n }\n\n try {\n return await this.wsConnection.connect(this.defaultWSTimeout);\n } catch (err: any) {\n throw err;\n }\n }\n public async connectToSSE(onCallBack?: (data: any) => void): Promise<void> {\n if (this.eventSource) {\n this.logger('info', 'client:connectToSSE() - SSE connection already established', {});\n return;\n }\n let token = this._getToken();\n\n if (!token?.startsWith('Bearer ')) {\n token = `Bearer ${token}`;\n }\n const headers = {\n method: 'GET',\n Authorization: token,\n };\n this.eventSource = new EventSourcePolyfill(this.userBaseURL + '/sse/subscribe', {\n headers,\n heartbeatTimeout: 60000,\n });\n this.eventSource.onopen = () => {\n this.logger('info', 'client:connectToSSE() - SSE connection established', {});\n };\n this.eventSource.onmessage = (event) => {\n const data = JSON.parse(event.data);\n\n this.logger('info', `client:connectToSSE() - SSE message received event : ${JSON.stringify(data)}`, { event });\n\n if (data.type === 'AccountUserChainProjects') {\n let user: UserResponse = {\n name: data.name,\n id: data.id,\n avatar: data.avatar,\n about_me: data.about_me,\n project_id: data.project_id,\n };\n\n if (this.user?.id === user.id) {\n this.user = { ...this.user, ...user };\n }\n\n this.state.updateUser(user);\n\n const userInfo = {\n id: user.id,\n name: user.name ? user.name : user.id,\n avatar: user?.avatar || '',\n };\n\n this._updateMemberWatcherReferences(userInfo);\n this._updateUserMessageReferences(userInfo);\n\n Object.values(this.activeChannels).forEach((channel) => {\n if (channel.data?.type === 'messaging' && Object.keys(channel.state.members).length === 2) {\n const otherMember = Object.values(channel.state.members).find((member) => member.user?.id !== this.userID);\n if (otherMember && otherMember.user?.id === user.id) {\n // Cập nhật tên và avatar channel theo user vừa đổi thông tin\n channel.data.name = user.name || user.id;\n channel.data.image = user.avatar || '';\n }\n }\n });\n\n if (onCallBack) {\n onCallBack(data);\n }\n }\n };\n this.eventSource.onerror = (event: any) => {\n this.logger('error', `client:connectToSSE() - SSE connection error : ${JSON.stringify(event.data)} `, { event });\n if (event.status === 401) {\n this.logger('error', 'client:connectToSSE() - Unauthorized (401). Aborting the connection.', {});\n this.disconnectFromSSE();\n } else if (\n this.eventSource?.readyState === EventSourcePolyfill.CLOSED ||\n this.eventSource?.readyState === EventSourcePolyfill.CONNECTING\n ) {\n this.eventSource.close();\n setTimeout(() => {\n this.logger('info', 'client:connectToSSE() - Reconnecting to SSE', {});\n this.connectToSSE(onCallBack);\n }, 3000);\n }\n };\n }\n public async disconnectFromSSE(): Promise<void> {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n this.logger('info', 'client:disconnectFromSSE() - SSE connection closed', {});\n } else {\n this.logger('info', 'client:disconnectFromSSE() - SSE connection already closed', {});\n }\n }\n\n async queryUsers(page_size?: string, page?: number): Promise<UsersResponse> {\n const defaultOptions = {\n presence: false,\n };\n\n // Make sure we wait for the connect promise if there is a pending one\n await this.wsPromise;\n\n let project_id = this.projectId;\n // Return a list of users\n const data = await this.get<UsersResponse>(this.userBaseURL + '/users', {\n project_id,\n page,\n page_size,\n });\n\n this.state.updateUsers(data.data);\n\n return data;\n }\n\n async queryUser(user_id: string): Promise<UserResponse<ErmisChatGenerics>> {\n const project_id = this.projectId;\n\n const userResponse = await this.get<UserResponse<ErmisChatGenerics>>(this.userBaseURL + '/users/' + user_id, {\n project_id,\n });\n\n this.state.updateUser(userResponse);\n return userResponse;\n }\n\n async getBatchUsers(users: string[], page?: number, page_size?: number) {\n let project_id = this.projectId;\n\n const usersRepsonse = await this.post<UsersResponse>(\n this.userBaseURL + '/users/batch?page=1&page_size=10000',\n { users, project_id },\n { page, page_size },\n );\n\n this.state.updateUsers(usersRepsonse.data);\n\n return usersRepsonse.data || [];\n }\n\n async searchUsers(page: number, page_size: number, name?: string): Promise<UsersResponse> {\n let project_id = this.projectId;\n\n const usersResponse = await this.post<UsersResponse>(this.userBaseURL + '/users/search', undefined, {\n page,\n page_size,\n name,\n project_id,\n });\n\n // this.state.updateUsers(usersResponse.data);\n\n return usersResponse;\n }\n\n async queryContacts(): Promise<ContactResult> {\n let project_id = this.projectId;\n const contactResponse = await this.post<ContactResponse>(this.baseURL + '/contacts/list', { project_id });\n const userIds = contactResponse.project_id_user_ids[project_id];\n const contact_users: UserResponse<ErmisChatGenerics>[] = [];\n const block_users: UserResponse<ErmisChatGenerics>[] = [];\n\n userIds.forEach((contact: Contact) => {\n const userID = contact.other_id;\n const state_user = this.state.users[userID];\n const user = state_user ? state_user : { id: userID };\n switch (contact.relation_status) {\n case 'blocked':\n block_users.push(user);\n break;\n case 'normal':\n contact_users.push(user);\n break;\n default:\n }\n });\n\n return {\n contact_users,\n block_users,\n };\n }\n\n _updateProjectID(project_id: string) {\n this.projectId = project_id;\n }\n\n async uploadFile(file: File) {\n const formData = new FormData();\n formData.append('avatar', file);\n let response = await this.post<{ avatar: string }>(this.userBaseURL + '/users/upload', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n if (this.user) {\n this.user.avatar = response.avatar;\n const new_user = { ...this.user, avatar: response.avatar };\n this.state.updateUser(new_user);\n }\n\n return response;\n }\n async updateProfile(name: string, about_me: string) {\n let body = {\n name,\n about_me,\n };\n let response = await this.patch<UserResponse<ErmisChatGenerics>>(this.userBaseURL + '/users/update', body);\n this.user = response;\n this.state.updateUser(response);\n return response;\n }\n\n async queryChannels(\n filterConditions: ChannelFilters,\n sort: ChannelSort = [],\n options: { message_limit?: number } = {},\n stateOptions: ChannelStateOptions = {},\n ) {\n // Make sure we wait for the connect promise if there is a pending one\n await this.wsPromise;\n\n let project_id = this.projectId;\n\n // Return a list of channels\n const payload = {\n filter_conditions: { ...filterConditions, project_id },\n sort,\n ...options,\n };\n\n const data = await this.post<QueryChannelsAPIResponse<ErmisChatGenerics>>(this.baseURL + '/channels', payload);\n\n // Sort channels by latest message created_at (including topics if present)\n data.channels.sort((a, b) => {\n // Get latest message created_at in channel a\n let aLatest = getLatestCreatedAt(a.messages);\n\n // If channel a has topics, check messages in topics\n if (a.channel.type === 'team' && Array.isArray(a.topics)) {\n for (const topic of a.topics) {\n aLatest = Math.max(aLatest, getLatestCreatedAt(topic.messages));\n }\n }\n\n // Get latest message created_at in channel b\n let bLatest = getLatestCreatedAt(b.messages);\n\n // If channel b has topics, check messages in topics\n if (b.channel.type === 'team' && Array.isArray(b.topics)) {\n for (const topic of b.topics) {\n bLatest = Math.max(bLatest, getLatestCreatedAt(topic.messages));\n }\n }\n\n // Descending order (newest first)\n return bLatest - aLatest;\n });\n\n const memberIds =\n Array.from(\n new Set(data.channels.flatMap((c) => (c.channel.members || []).map((member: any) => member.user.id))),\n ) || [];\n\n const membersInfo = filterConditions.parent_cid\n ? Object.values(this.state.users)\n : await this.getBatchUsers(memberIds);\n data.channels.forEach((c) => {\n c.channel.members = enrichWithUserInfo(c.channel.members, membersInfo);\n c.messages = enrichWithUserInfo(c.messages, membersInfo);\n c.read = enrichWithUserInfo(c.read || [], membersInfo);\n c.channel.name =\n c.channel.type === 'messaging' ? getDirectChannelName(c.channel.members, this.userID || '') : c.channel.name;\n c.channel.image =\n c.channel.type === 'messaging' ? getDirectChannelImage(c.channel.members, this.userID || '') : c.channel.image;\n\n if (c.channel.type === 'team' && Array.isArray(c.topics)) {\n c.topics.sort((a, b) => {\n const aLatest = getLatestCreatedAt(a.messages);\n const bLatest = getLatestCreatedAt(b.messages);\n return bLatest - aLatest;\n });\n }\n\n if (c.pinned_messages) {\n c.pinned_messages = enrichWithUserInfo(c.pinned_messages || [], membersInfo);\n }\n });\n\n const { channels, userIds } = this.hydrateChannels(data.channels, stateOptions);\n\n // if (userIds.length > 0) {\n // await this.getBatchUsers(userIds);\n // }\n\n console.log('---channels---', channels);\n\n return channels;\n }\n\n hydrateChannels(\n channelsFromApi: ChannelAPIResponse<ErmisChatGenerics>[] = [],\n stateOptions: ChannelStateOptions = {},\n ) {\n const { skipInitialization, offlineMode = false } = stateOptions;\n\n const channels: Channel<ErmisChatGenerics>[] = [];\n const userIds: string[] = [];\n for (const channelState of channelsFromApi) {\n const c = this.channel(channelState.channel.type, channelState.channel.id);\n c.data = { ...channelState.channel, is_pinned: channelState.is_pinned || false };\n c.offlineMode = offlineMode;\n c.initialized = !offlineMode;\n\n if (skipInitialization === undefined) {\n c._initializeState(channelState, 'latest', (id) => {\n if (!userIds.includes(id)) {\n userIds.push(id);\n }\n });\n } else if (!skipInitialization.includes(channelState.channel.id)) {\n c.state.clearMessages();\n c._initializeState(channelState, 'latest', (id) => {\n if (!userIds.includes(id)) {\n userIds.push(id);\n }\n });\n }\n\n channels.push(c);\n }\n\n // const sortedChannels = channels.sort((a: any, b: any) => {\n // const aTime = a.state.last_message_at\n // ? new Date(a.state.last_message_at).getTime()\n // : a.data.created_at\n // ? new Date(a.data.created_at).getTime()\n // : 0;\n // const bTime = b.state.last_message_at\n // ? new Date(b.state.last_message_at).getTime()\n // : b.data.created_at\n // ? new Date(b.data.created_at).getTime()\n // : 0;\n // return bTime - aTime; // Descending order\n // });\n\n // ensure we have the users for all the channels we just added\n\n return { channels, userIds };\n }\n\n async searchPublicChannel(search_term: string, offset = 0, limit = 25) {\n let project_id = this.projectId;\n\n return await this.post<APIResponse>(this.baseURL + `/channels/public/search`, {\n project_id,\n search_term,\n limit: limit,\n offset: offset,\n });\n }\n\n async pinChannel(channelType: string, channelId: string) {\n return await this.post<APIResponse>(this.baseURL + `/channels/${channelType}/${channelId}/pin`);\n }\n\n async unpinChannel(channelType: string, channelId: string) {\n return await this.post<APIResponse>(this.baseURL + `/channels/${channelType}/${channelId}/unpin`);\n }\n\n channel(\n channelType: string,\n channelID: string,\n custom: ChannelData<ErmisChatGenerics> = {} as ChannelData<ErmisChatGenerics>,\n ) {\n if (!this.userID) {\n throw Error('Call connectUser before creating a channel');\n }\n\n if (~channelType.indexOf(':')) {\n throw Error(`Invalid channel group ${channelType}, can't contain the : character`);\n }\n\n return this.getChannelById(channelType, channelID, custom);\n }\n\n getChannelById = (channelType: string, channelID: string, custom: ChannelData<ErmisChatGenerics>) => {\n const cid = `${channelType}:${channelID}`;\n if (cid in this.activeChannels && !this.activeChannels[cid].disconnected) {\n const channel = this.activeChannels[cid];\n if (Object.keys(custom).length > 0) {\n channel.data = custom;\n channel._data = custom;\n }\n return channel;\n }\n const channel = new Channel<ErmisChatGenerics>(this, channelType, channelID, custom);\n this.activeChannels[channel.cid] = channel;\n\n return channel;\n };\n\n getChannel = (channelType: string, custom: ChannelData<ErmisChatGenerics>) => {\n const uuid = randomId();\n const id = `${this.projectId}:${uuid}`;\n // only allow 1 channel object per cid\n const cid = `${channelType}:${id}`;\n if (cid in this.activeChannels && !this.activeChannels[cid].disconnected) {\n const channel = this.activeChannels[cid];\n if (Object.keys(custom).length > 0) {\n channel.data = custom;\n channel._data = custom;\n }\n return channel;\n }\n const channel = new Channel<ErmisChatGenerics>(this, channelType, id, custom);\n this.activeChannels[channel.cid] = channel;\n\n return channel;\n };\n\n _normalizeExpiration(timeoutOrExpirationDate?: null | number | string | Date) {\n let pinExpires: null | string = null;\n if (typeof timeoutOrExpirationDate === 'number') {\n const now = new Date();\n now.setSeconds(now.getSeconds() + timeoutOrExpirationDate);\n pinExpires = now.toISOString();\n } else if (isString(timeoutOrExpirationDate)) {\n pinExpires = timeoutOrExpirationDate;\n } else if (timeoutOrExpirationDate instanceof Date) {\n pinExpires = timeoutOrExpirationDate.toISOString();\n }\n return pinExpires;\n }\n\n getUserAgent() {\n return (\n this.userAgent || `ermis-chat-sdk-javascript-client-${this.node ? 'node' : 'browser'}-${process.env.PKG_VERSION}`\n );\n }\n\n setUserAgent(userAgent: string) {\n this.userAgent = userAgent;\n }\n\n _enrichAxiosOptions(\n options: AxiosRequestConfig & { config?: AxiosRequestConfig } = {\n params: {},\n headers: {},\n config: {},\n },\n ): AxiosRequestConfig {\n let token = this._getToken();\n\n if (!token?.startsWith('Bearer ')) {\n token = `Bearer ${token}`;\n }\n\n const authorization = token ? { Authorization: token } : undefined;\n\n if (!options.headers?.['x-client-request-id']) {\n options.headers = {\n ...options.headers,\n 'x-client-request-id': randomId(),\n };\n }\n const {\n params: axiosRequestConfigParams,\n headers: axiosRequestConfigHeaders,\n ...axiosRequestConfigRest\n } = this.options.axiosRequestConfig || {};\n\n let user_service_params = {\n ...options.params,\n ...(axiosRequestConfigParams || {}),\n };\n\n return {\n params: user_service_params,\n headers: {\n ...authorization,\n 'stream-auth-type': this.getAuthType(),\n 'X-Stream-Client': this.getUserAgent(),\n ...options.headers,\n ...(axiosRequestConfigHeaders || {}),\n },\n\n ...options.config,\n ...(axiosRequestConfigRest || {}),\n };\n }\n\n _getToken() {\n if (!this.tokenManager) return null;\n\n return this.tokenManager.getToken();\n }\n\n _startCleaning() {\n const that = this;\n if (this.cleaningIntervalRef != null) {\n return;\n }\n this.cleaningIntervalRef = setInterval(() => {\n // call clean on the channel, used for calling the stop.typing event etc.\n for (const channel of Object.values(that.activeChannels)) {\n channel.clean();\n }\n }, 500);\n }\n\n _buildWSPayload = (client_request_id?: string) => {\n return JSON.stringify({\n user_id: this.userID,\n user_details: this.user,\n client_request_id,\n });\n };\n}\n","import FormData from 'form-data';\nimport { ExtendableGenerics, DefaultGenerics, MessageResponse, FormatMessageResponse, ForwardMessage } from './types';\nimport { AxiosRequestConfig } from 'axios';\nimport { ErmisChat } from './client';\n\n/**\n * logChatPromiseExecution - utility function for logging the execution of a promise..\n * use this when you want to run the promise and handle errors by logging a warning\n *\n * @param {Promise<T>} promise The promise you want to run and log\n * @param {string} name A descriptive name of what the promise does for log output\n *\n */\nexport function logChatPromiseExecution<T>(promise: Promise<T>, name: string) {\n promise.then().catch((error) => {\n console.warn(`failed to do ${name}, ran into error: `, error);\n });\n}\n\nexport const sleep = (m: number): Promise<void> => new Promise((r) => setTimeout(r, m));\n\nexport function isFunction<T>(value: Function | T): value is Function {\n return (\n value &&\n (Object.prototype.toString.call(value) === '[object Function]' ||\n 'function' === typeof value ||\n value instanceof Function)\n );\n}\n\nexport const chatCodes = {\n TOKEN_EXPIRED: 40,\n WS_CLOSED_SUCCESS: 1000,\n};\n\nfunction isReadableStream(obj: unknown): obj is NodeJS.ReadStream {\n return (\n obj !== null &&\n typeof obj === 'object' &&\n ((obj as NodeJS.ReadStream).readable || typeof (obj as NodeJS.ReadStream)._read === 'function')\n );\n}\n\nfunction isBuffer(obj: unknown): obj is Buffer {\n return (\n obj != null &&\n (obj as Buffer).constructor != null &&\n // @ts-expect-error\n typeof obj.constructor.isBuffer === 'function' &&\n // @ts-expect-error\n obj.constructor.isBuffer(obj)\n );\n}\n\nfunction isFileWebAPI(uri: unknown): uri is File {\n return typeof window !== 'undefined' && 'File' in window && uri instanceof File;\n}\n\nfunction isBlobWebAPI(uri: unknown): uri is Blob {\n return typeof window !== 'undefined' && 'Blob' in window && uri instanceof Blob;\n}\n\nexport function addFileToFormData(\n uri: string | NodeJS.ReadableStream | Buffer | File,\n name?: string,\n contentType?: string,\n) {\n const data = new FormData();\n\n if (isReadableStream(uri) || isBuffer(uri) || isFileWebAPI(uri) || isBlobWebAPI(uri)) {\n if (name) data.append('file', uri, name);\n else data.append('file', uri);\n } else {\n data.append('file', {\n uri,\n name: name || (uri as string).split('/').reverse()[0],\n contentType: contentType || undefined,\n type: contentType || undefined,\n });\n }\n\n return data;\n}\n\n\n/**\n * retryInterval - A retry interval which increases acc to number of failures\n *\n * @return {number} Duration to wait in milliseconds\n */\nexport function retryInterval(numberOfFailures: number) {\n // try to reconnect in 0.25-25 seconds (random to spread out the load from failures)\n const max = Math.min(500 + numberOfFailures * 2000, 25000);\n const min = Math.min(Math.max(250, (numberOfFailures - 1) * 2000), 25000);\n return Math.floor(Math.random() * (max - min) + min);\n}\n\nexport function randomId() {\n return generateUUIDv4();\n}\n\nfunction hex(bytes: Uint8Array): string {\n let s = '';\n for (let i = 0; i < bytes.length; i++) {\n s += bytes[i].toString(16).padStart(2, '0');\n }\n return s;\n}\n\n// https://tools.ietf.org/html/rfc4122\nexport function generateUUIDv4() {\n const bytes = getRandomBytes(16);\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version\n bytes[8] = (bytes[8] & 0xbf) | 0x80; // variant\n\n return (\n hex(bytes.subarray(0, 4)) +\n '-' +\n hex(bytes.subarray(4, 6)) +\n '-' +\n hex(bytes.subarray(6, 8)) +\n '-' +\n hex(bytes.subarray(8, 10)) +\n '-' +\n hex(bytes.subarray(10, 16))\n );\n}\n\nfunction getRandomValuesWithMathRandom(bytes: Uint8Array): void {\n const max = Math.pow(2, (8 * bytes.byteLength) / bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = Math.random() * max;\n }\n}\ndeclare const msCrypto: Crypto;\n\nconst getRandomValues = (() => {\n if (typeof crypto !== 'undefined' && typeof crypto?.getRandomValues !== 'undefined') {\n return crypto.getRandomValues.bind(crypto);\n } else if (typeof msCrypto !== 'undefined') {\n return msCrypto.getRandomValues.bind(msCrypto);\n } else {\n return getRandomValuesWithMathRandom;\n }\n})();\n\nfunction getRandomBytes(length: number): Uint8Array {\n const bytes = new Uint8Array(length);\n getRandomValues(bytes);\n return bytes;\n}\n\n\n\n\n\n/**\n * listenForConnectionChanges - Adds an event listener fired on browser going online or offline\n */\nexport function addConnectionEventListeners(cb: (e: Event) => void) {\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener('offline', cb);\n window.addEventListener('online', cb);\n }\n}\n\nexport function removeConnectionEventListeners(cb: (e: Event) => void) {\n if (typeof window !== 'undefined' && window.removeEventListener) {\n window.removeEventListener('offline', cb);\n window.removeEventListener('online', cb);\n }\n}\n\nexport const axiosParamsSerializer: AxiosRequestConfig['paramsSerializer'] = (params) => {\n const newParams = [];\n for (const k in params) {\n // Ermis backend doesn't treat \"undefined\" value same as value not being present.\n // So, we need to skip the undefined values.\n if (params[k] === undefined) continue;\n\n if (Array.isArray(params[k]) || typeof params[k] === 'object') {\n newParams.push(`${k}=${encodeURIComponent(JSON.stringify(params[k]))}`);\n } else {\n newParams.push(`${k}=${encodeURIComponent(params[k])}`);\n }\n }\n\n return newParams.join('&');\n};\n\n/**\n * formatMessage - Takes the message object. Parses the dates, sets __html\n * and sets the status to received if missing. Returns a message object\n *\n * @param {MessageResponse<ErmisChatGenerics>} message a message object\n *\n */\nexport function formatMessage<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics>(\n message: MessageResponse<ErmisChatGenerics>,\n): FormatMessageResponse<ErmisChatGenerics> {\n return {\n ...message,\n /**\n * @deprecated please use `html`\n */\n __html: message.html,\n // parse the date..\n pinned_at: message.pinned_at ? new Date(message.pinned_at) : null,\n created_at: message.created_at ? new Date(message.created_at) : new Date(),\n updated_at: message.updated_at ? new Date(message.updated_at) : new Date(),\n status: message.status || 'received',\n };\n}\n\nexport function addToMessageList<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics>(\n messages: Array<FormatMessageResponse<ErmisChatGenerics>>,\n message: FormatMessageResponse<ErmisChatGenerics>,\n timestampChanged = false,\n sortBy: 'pinned_at' | 'created_at' = 'created_at',\n addIfDoesNotExist = true,\n) {\n const addMessageToList = addIfDoesNotExist || timestampChanged;\n let messageArr = messages;\n\n // if created_at has changed, message should be filtered and re-inserted in correct order\n // slow op but usually this only happens for a message inserted to state before actual response with correct timestamp\n if (timestampChanged) {\n messageArr = messageArr.filter((msg) => !(msg.id && message.id === msg.id));\n }\n\n // Get array length after filtering\n const messageArrayLength = messageArr.length;\n\n // for empty list just concat and return unless it's an update or deletion\n if (messageArrayLength === 0 && addMessageToList) {\n return messageArr.concat(message);\n } else if (messageArrayLength === 0) {\n return [...messageArr];\n }\n\n if (sortBy === 'pinned_at') {\n return messageArr.concat(message);\n }\n\n const messageTime = (message[sortBy] as Date).getTime();\n const messageIsNewest = (messageArr[messageArrayLength - 1][sortBy] as Date).getTime() < messageTime;\n\n // if message is newer than last item in the list concat and return unless it's an update or deletion\n if (messageIsNewest && addMessageToList) {\n return messageArr.concat(message);\n } else if (messageIsNewest) {\n return [...messageArr];\n }\n\n // find the closest index to push the new message\n let left = 0;\n let middle = 0;\n let right = messageArrayLength - 1;\n while (left <= right) {\n middle = Math.floor((right + left) / 2);\n if ((messageArr[middle][sortBy] as Date).getTime() <= messageTime) left = middle + 1;\n else right = middle - 1;\n }\n\n // message already exists and not filtered due to timestampChanged, update and return\n if (!timestampChanged && message.id) {\n if (messageArr[left] && message.id === messageArr[left].id) {\n messageArr[left] = message;\n return [...messageArr];\n }\n\n if (messageArr[left - 1] && message.id === messageArr[left - 1].id) {\n messageArr[left - 1] = message;\n return [...messageArr];\n }\n }\n\n // Do not add updated or deleted messages to the list if they do not already exist\n // or have a timestamp change.\n if (addMessageToList) {\n messageArr.splice(left, 0, message);\n }\n\n // Remove duplicate messages by ID\n const map = new Map();\n const uniqueMessages = [];\n\n for (const msg of messageArr) {\n if (!map.has(msg.id)) {\n map.set(msg.id, true);\n uniqueMessages.push(msg);\n }\n }\n return uniqueMessages;\n}\n\nexport const enrichWithUserInfo = (items: any[], users: any[]) => {\n if (items.length === 0) return [];\n\n if (users.length === 0) {\n return items.map((item) => {\n item.user = { id: item.user?.id, name: item.user?.id, avatar: '' };\n return item;\n });\n }\n\n return items.map((item) => {\n const userId = item.user?.id;\n const lastestReactionMsg = item?.latest_reactions;\n const quotedMsg = item?.quoted_message;\n const user = users.find((u) => u.id === userId);\n if (user) {\n item.user = { id: user.id, name: user.name || user.id, avatar: user.avatar || '' };\n }\n\n if (lastestReactionMsg) {\n item.latest_reactions = lastestReactionMsg.map((reaction: any) => {\n const reactionUser = users.find((u) => u.id === reaction.user_id);\n return {\n ...reaction,\n user: {\n id: reactionUser?.id || reaction.user_id,\n name: reactionUser?.name || reaction.user_id,\n avatar: reactionUser?.avatar || '',\n },\n };\n });\n }\n\n if (quotedMsg) {\n const quotedUser = users.find((u) => u.id === quotedMsg.user?.id);\n item.quoted_message.user = {\n id: quotedUser?.id || quotedMsg.user?.id,\n name: quotedUser?.name || quotedMsg.user?.id,\n avatar: quotedUser?.avatar || '',\n };\n }\n\n return item;\n });\n};\n\nexport const getUserInfo = (id: string, users: any[]) => {\n if (users.length === 0) {\n return {\n id,\n name: id,\n avatar: '',\n };\n }\n\n const user = users.find((u) => u.id === id);\n return {\n id,\n name: user?.name || id,\n avatar: user?.avatar || '',\n };\n};\n\nexport const getDirectChannelName = (members: any[], currentUserId: string) => {\n if (members.length === 0) {\n return 'Empty channel';\n }\n\n const otherMember = members.find((member) => member.user.id !== currentUserId);\n if (otherMember) {\n return otherMember.user.name || otherMember.user.id;\n }\n return 'Empty channel';\n};\n\nexport const getDirectChannelImage = (members: any[], currentUserId: string) => {\n if (members.length === 0) {\n return '';\n }\n\n const otherMember = members.find((member) => member.user.id !== currentUserId);\n if (otherMember) {\n return otherMember.user.avatar || '';\n }\n return '';\n};\n\n/**\n * Ensure all members' user info are loaded in state.users.\n * @param client ErmisChat client instance\n * @param members Array of channel members (each member must have user?.id)\n */\nexport async function ensureMembersUserInfoLoaded<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics>(\n client: ErmisChat<ErmisChatGenerics>,\n members: any[],\n) {\n // Get all memberIds\n const memberIds = (members || []).map((m: any) => m.user?.id).filter((id: string | undefined) => !!id);\n\n // Filter out ids that do not exist in users\n const users = client.state.users;\n const missingUserIds = memberIds.filter((id: string) => !users[id]);\n\n // If there are users missing, fetch and update them into state\n if (missingUserIds.length > 0) {\n await client.getBatchUsers(missingUserIds);\n }\n}\n\nexport const getLatestCreatedAt = (messages: any[] = []) =>\n messages.length > 0 ? Math.max(...messages.map((msg) => new Date(msg.created_at).getTime())) : 0;\n\nexport const createPacketWithHeader = (\n data: ArrayBuffer | null,\n timestamp: number | null,\n type: string,\n configMsg: any,\n): Uint8Array => {\n let HEADER_SIZE: number;\n let payload: Uint8Array;\n\n // Config messages\n if (['videoConfig', 'audioConfig', 'transciverState'].includes(type) && configMsg) {\n HEADER_SIZE = 1;\n const jsonString = JSON.stringify(configMsg);\n const encoder = new TextEncoder();\n payload = encoder.encode(jsonString);\n } else if (type === 'connected') {\n HEADER_SIZE = 1;\n payload = new Uint8Array(0);\n } else {\n // Data packets\n // HEADER_SIZE = 5;\n HEADER_SIZE = 9;\n payload = new Uint8Array(data!);\n }\n\n const packet = new Uint8Array(HEADER_SIZE + payload.byteLength);\n\n let typeCode: number = 0;\n switch (type) {\n case 'videoConfig':\n typeCode = 0;\n break;\n case 'audioConfig':\n typeCode = 1;\n break;\n case 'video-key':\n typeCode = 2;\n break;\n case 'video-delta':\n typeCode = 3;\n break;\n case 'audio':\n typeCode = 4;\n break;\n case 'connected':\n typeCode = 6;\n break;\n case 'transciverState':\n typeCode = 7;\n break;\n }\n\n // Byte 0: Type code\n packet[0] = typeCode;\n\n // Byte 1-8: Timestamp\n if (timestamp !== null) {\n const view = new DataView(packet.buffer);\n // view.setUint32(1, timestamp, false); // Little-endian = false (Big-endian)\n view.setBigUint64(1, BigInt(timestamp), false);\n }\n\n packet.set(payload, HEADER_SIZE);\n\n return packet;\n};\n\nexport const base64Encode = (arrayBuffer: ArrayBuffer): string => {\n let binary = '';\n const bytes = new Uint8Array(arrayBuffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n};\n\nexport const replaceCodecNumber = (input: string): string => {\n const map: Record<string, string> = {\n '2048': '123',\n '4096': '153',\n '8192': '156',\n '16384': '183',\n '32768': '186',\n };\n\n // Regex để tìm các key\n const regex = /2048|4096|8192|16384|32768/g;\n\n // Kiểm tra: Nếu input KHÔNG match bất kỳ số nào trong regex\n // thì trả về chuỗi mặc định\n if (!input.match(regex)) {\n return 'hev1.1.6.L123.B0';\n }\n\n // Nếu có match, thực hiện thay thế\n return input.replace(regex, (match) => map[match]);\n};\n\nexport const createForwardMessagePayload = <ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics>(\n message: FormatMessageResponse<ErmisChatGenerics>,\n targetCid: string,\n activeCid: string,\n): ForwardMessage<ErmisChatGenerics> => {\n const forwardPayload: ForwardMessage<ErmisChatGenerics> = {\n cid: targetCid,\n forward_cid: activeCid,\n forward_message_id: message.id as string,\n };\n\n if (\n message.sticker_url &&\n (!message.text || message.text === '') &&\n (!message.attachments || (Array.isArray(message.attachments) && message.attachments.length === 0))\n ) {\n forwardPayload.sticker_url = message.sticker_url as string;\n forwardPayload.text = message.text;\n } else {\n forwardPayload.text = message.text || '';\n if (message.attachments && message.attachments.length > 0) {\n forwardPayload.attachments = message.attachments.filter((item: any) => item.type !== 'linkPreview');\n }\n }\n\n return forwardPayload;\n};\n","import { Channel } from './channel';\nimport {\n ChannelMemberResponse,\n ChannelMembership,\n FormatMessageResponse,\n Event,\n ExtendableGenerics,\n DefaultGenerics,\n MessageSetType,\n MessageResponse,\n ReactionResponse,\n UserResponse,\n} from './types';\nimport { addToMessageList } from './utils';\n\ntype ChannelReadStatus<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = Record<\n string,\n {\n last_read: Date;\n unread_messages: number;\n user: UserResponse<ErmisChatGenerics>;\n last_read_message_id?: string;\n last_send?: string;\n }\n>;\n\n/**\n * ChannelState - A container class for the channel state.\n */\nexport class ChannelState<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> {\n _channel: Channel<ErmisChatGenerics>;\n watcher_count: number;\n typing: Record<string, Event<ErmisChatGenerics>>;\n read: ChannelReadStatus<ErmisChatGenerics>;\n pinnedMessages: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>;\n watchers: Record<string, UserResponse<ErmisChatGenerics>>;\n members: Record<string, ChannelMemberResponse<ErmisChatGenerics>>;\n unreadCount: number;\n membership: ChannelMembership<ErmisChatGenerics>;\n last_message_at: Date | null;\n isUpToDate: boolean;\n messageSets: {\n isCurrent: boolean;\n isLatest: boolean;\n messages: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>;\n }[] = [];\n topics?: Channel<ErmisChatGenerics>[] = [];\n constructor(channel: Channel<ErmisChatGenerics>) {\n this._channel = channel;\n this.watcher_count = 0;\n this.typing = {};\n this.read = {};\n this.initMessages();\n this.pinnedMessages = [];\n this.watchers = {};\n this.members = {};\n this.membership = {};\n this.unreadCount = 0;\n this.isUpToDate = true;\n this.last_message_at = channel?.state?.last_message_at != null ? new Date(channel.state.last_message_at) : null;\n }\n\n get messages() {\n return this.messageSets.find((s) => s.isCurrent)?.messages || [];\n }\n\n set messages(messages: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>) {\n const index = this.messageSets.findIndex((s) => s.isCurrent);\n this.messageSets[index].messages = messages;\n }\n\n get latestMessages() {\n return this.messageSets.find((s) => s.isLatest)?.messages || [];\n }\n\n set latestMessages(messages: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>) {\n const index = this.messageSets.findIndex((s) => s.isLatest);\n this.messageSets[index].messages = messages;\n }\n\n addMessageSorted(\n newMessage: MessageResponse<ErmisChatGenerics>,\n timestampChanged = false,\n addIfDoesNotExist = true,\n messageSetToAddToIfDoesNotExist: MessageSetType = 'latest',\n ) {\n return this.addMessagesSorted(\n [newMessage],\n timestampChanged,\n false,\n addIfDoesNotExist,\n messageSetToAddToIfDoesNotExist,\n );\n }\n\n formatMessage(message: MessageResponse<ErmisChatGenerics>): FormatMessageResponse<ErmisChatGenerics> {\n return {\n ...message,\n /**\n * @deprecated please use `html`\n */\n __html: message.html,\n // parse the date..\n pinned_at: message.pinned_at ? new Date(message.pinned_at) : null,\n created_at: message.created_at ? new Date(message.created_at) : new Date(),\n updated_at: message.updated_at ? new Date(message.updated_at) : null,\n status: message.status || 'received',\n };\n }\n\n addMessagesSorted(\n newMessages: MessageResponse<ErmisChatGenerics>[],\n timestampChanged = false,\n initializing = false,\n addIfDoesNotExist = true,\n messageSetToAddToIfDoesNotExist: MessageSetType = 'current',\n ) {\n const { messagesToAdd, targetMessageSetIndex } = this.findTargetMessageSet(\n newMessages,\n addIfDoesNotExist,\n messageSetToAddToIfDoesNotExist,\n );\n\n for (let i = 0; i < messagesToAdd.length; i += 1) {\n // If message is already formatted we can skip the tasks below\n // This will be true for messages that are already present at the state -> this happens when we perform merging of message sets\n // This will be also true for message previews used by some SDKs\n const isMessageFormatted = messagesToAdd[i].created_at instanceof Date;\n let message: ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>;\n if (isMessageFormatted) {\n message = messagesToAdd[i] as ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>;\n } else {\n message = this.formatMessage(messagesToAdd[i] as MessageResponse<ErmisChatGenerics>);\n\n if (message.user && this._channel?.cid) {\n /**\n * Store the reference to user for this channel, so that when we have to\n * handle updates to user, we can use the reference map, to determine which\n * channels need to be updated with updated user object.\n */\n this._channel.getClient().state.updateUserReference(message.user, this._channel.cid);\n }\n\n if (!this.last_message_at) {\n this.last_message_at = new Date(message.created_at.getTime());\n }\n\n if (message.created_at.getTime() > this.last_message_at.getTime()) {\n this.last_message_at = new Date(message.created_at.getTime());\n }\n }\n\n // Cross-reference with pinnedMessages to ensure `pinned` and `pinned_at` are accurate\n if (!message.pinned) {\n const pinnedMatch = this.pinnedMessages.find((pm) => pm.id === message.id);\n if (pinnedMatch) {\n message.pinned = true;\n message.pinned_at = pinnedMatch.pinned_at || new Date();\n }\n }\n\n // update or append the messages...\n const parentID = message.parent_id;\n\n // add to the given message set\n if (!parentID && targetMessageSetIndex !== -1) {\n this.messageSets[targetMessageSetIndex].messages = this._addToMessageList(\n this.messageSets[targetMessageSetIndex].messages,\n message,\n timestampChanged,\n 'created_at',\n addIfDoesNotExist,\n );\n }\n }\n\n return {\n messageSet: this.messageSets[targetMessageSetIndex],\n };\n }\n\n addPinnedMessages(pinnedMessages: MessageResponse<ErmisChatGenerics>[]) {\n for (let i = 0; i < pinnedMessages.length; i += 1) {\n this.addPinnedMessage(pinnedMessages[i]);\n }\n // Sort by pinned_at descending (newest pin first)\n this.pinnedMessages.sort((a, b) => {\n const timeA = a.pinned_at ? new Date(a.pinned_at).getTime() : 0;\n const timeB = b.pinned_at ? new Date(b.pinned_at).getTime() : 0;\n return timeB - timeA;\n });\n }\n\n addPinnedMessage(pinnedMessage: MessageResponse<ErmisChatGenerics>) {\n const formatted = this.formatMessage(pinnedMessage);\n // Remove existing entry if present (to avoid duplicates)\n this.pinnedMessages = this.pinnedMessages.filter((msg) => msg.id !== formatted.id);\n // Add to the beginning of the list (newest pin first)\n this.pinnedMessages = [formatted, ...this.pinnedMessages];\n }\n\n removePinnedMessage(message: MessageResponse<ErmisChatGenerics>) {\n const { result } = this.removeMessageFromArray(this.pinnedMessages, message);\n this.pinnedMessages = result;\n }\n\n addReaction(\n reaction: ReactionResponse<ErmisChatGenerics>,\n message?: MessageResponse<ErmisChatGenerics>,\n enforce_unique?: boolean,\n ) {\n if (!message) return;\n const messageWithReaction = message;\n this._updateMessage(message, (msg) => {\n messageWithReaction.own_reactions = this._addOwnReactionToMessage(msg.own_reactions, reaction, enforce_unique);\n return this.formatMessage(messageWithReaction);\n });\n return messageWithReaction;\n }\n\n _addOwnReactionToMessage(\n ownReactions: ReactionResponse<ErmisChatGenerics>[] | null | undefined,\n reaction: ReactionResponse<ErmisChatGenerics>,\n enforce_unique?: boolean,\n ) {\n if (enforce_unique) {\n ownReactions = [];\n } else {\n ownReactions = this._removeOwnReactionFromMessage(ownReactions, reaction);\n }\n\n ownReactions = ownReactions || [];\n if (this._channel.getClient().userID === reaction.user_id) {\n ownReactions.push(reaction);\n }\n\n return ownReactions;\n }\n\n _removeOwnReactionFromMessage(\n ownReactions: ReactionResponse<ErmisChatGenerics>[] | null | undefined,\n reaction: ReactionResponse<ErmisChatGenerics>,\n ) {\n if (ownReactions) {\n return ownReactions.filter((item) => item.user_id !== reaction.user_id || item.type !== reaction.type);\n }\n return ownReactions;\n }\n\n removeReaction(reaction: ReactionResponse<ErmisChatGenerics>, message?: MessageResponse<ErmisChatGenerics>) {\n if (!message) return;\n const messageWithReaction = message;\n this._updateMessage(message, (msg) => {\n messageWithReaction.own_reactions = this._removeOwnReactionFromMessage(msg.own_reactions, reaction);\n return this.formatMessage(messageWithReaction);\n });\n return messageWithReaction;\n }\n\n removeQuotedMessageReferences(message: MessageResponse<ErmisChatGenerics>) {\n const parseMessage = (m: ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>) =>\n ({\n ...m,\n created_at: m.created_at.toISOString(),\n pinned_at: m.pinned_at?.toISOString(),\n updated_at: m.updated_at?.toISOString(),\n } as unknown as MessageResponse<ErmisChatGenerics>);\n\n this.messageSets.forEach((set) => {\n const updatedMessages = set.messages\n .filter((msg) => msg.quoted_message_id === message.id)\n .map(parseMessage)\n .map((msg) => ({ ...msg, quoted_message: { ...message, attachments: [] } }));\n\n this.addMessagesSorted(updatedMessages, true);\n });\n }\n\n _updateMessage(\n message: {\n id?: string;\n parent_id?: string;\n pinned?: boolean;\n },\n updateFunc: (\n msg: ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>,\n ) => ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>,\n ) {\n const { parent_id, pinned } = message;\n\n if (!parent_id) {\n const messageSetIndex = this.findMessageSetIndex(message);\n if (messageSetIndex !== -1) {\n const msgIndex = this.messageSets[messageSetIndex].messages.findIndex((msg) => msg.id === message.id);\n if (msgIndex !== -1) {\n this.messageSets[messageSetIndex].messages[msgIndex] = updateFunc(\n this.messageSets[messageSetIndex].messages[msgIndex],\n );\n }\n }\n }\n\n if (pinned) {\n const msgIndex = this.pinnedMessages.findIndex((msg) => msg.id === message.id);\n if (msgIndex !== -1) {\n this.pinnedMessages[msgIndex] = updateFunc(this.pinnedMessages[msgIndex]);\n }\n }\n }\n\n setIsUpToDate = (isUpToDate: boolean) => {\n this.isUpToDate = isUpToDate;\n };\n\n /**\n * Update the status of a message by ID (used for optimistic UI).\n */\n updateMessageStatus(messageId: string, status: string) {\n this._updateMessage({ id: messageId }, (msg) => ({\n ...msg,\n status,\n }));\n }\n\n _addToMessageList(\n messages: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>,\n message: ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>,\n timestampChanged = false,\n sortBy: 'pinned_at' | 'created_at' = 'created_at',\n addIfDoesNotExist = true,\n ) {\n return addToMessageList(messages, message, timestampChanged, sortBy, addIfDoesNotExist);\n }\n\n removeMessage(messageToRemove: { id: string; messageSetIndex?: number; parent_id?: string }) {\n let isRemoved = false;\n const messageSetIndex = messageToRemove.messageSetIndex ?? this.findMessageSetIndex(messageToRemove);\n if (messageSetIndex !== -1) {\n const { removed, result: messages } = this.removeMessageFromArray(\n this.messageSets[messageSetIndex].messages,\n messageToRemove,\n );\n this.messageSets[messageSetIndex].messages = messages;\n isRemoved = removed;\n }\n\n return isRemoved;\n }\n\n removeMessageFromArray = (\n msgArray: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>,\n msg: { id: string; parent_id?: string },\n ) => {\n const result = msgArray.filter((message) => !(!!message.id && !!msg.id && message.id === msg.id));\n\n return { removed: result.length < msgArray.length, result };\n };\n\n updateUserMessages = (user: UserResponse<ErmisChatGenerics>) => {\n const _updateUserMessages = (\n messages: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>,\n user: UserResponse<ErmisChatGenerics>,\n ) => {\n for (let i = 0; i < messages.length; i++) {\n const m = messages[i];\n const latestReactions = m?.latest_reactions || [];\n if (m.user?.id === user.id) {\n messages[i] = {\n ...m,\n user: m.user?.id === user.id ? user : m.user,\n };\n }\n\n if (latestReactions && latestReactions.some((r) => r.user?.id === user.id)) {\n messages[i] = {\n ...m,\n latest_reactions: latestReactions.map((r) => (r.user?.id === user.id ? { ...r, user } : r)),\n };\n }\n }\n };\n\n this.messageSets.forEach((set) => _updateUserMessages(set.messages, user));\n\n _updateUserMessages(this.pinnedMessages, user);\n };\n\n deleteUserMessages = (user: UserResponse<ErmisChatGenerics>, hardDelete = false) => {\n const _deleteUserMessages = (\n messages: Array<ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>>,\n user: UserResponse<ErmisChatGenerics>,\n hardDelete = false,\n ) => {\n for (let i = 0; i < messages.length; i++) {\n const m = messages[i];\n if (m.user?.id !== user.id) {\n continue;\n }\n\n if (hardDelete) {\n /**\n * In case of hard delete, we need to strip down all text, html,\n * attachments and all the custom properties on message\n */\n messages[i] = {\n cid: m.cid,\n created_at: m.created_at,\n deleted_at: new Date().toISOString(),\n id: m.id,\n latest_reactions: [],\n mentioned_users: [],\n own_reactions: [],\n parent_id: m.parent_id,\n reply_count: m.reply_count,\n status: m.status,\n type: 'deleted',\n updated_at: m.updated_at,\n user: m.user,\n } as unknown as ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>;\n } else {\n messages[i] = {\n ...m,\n type: 'deleted',\n deleted_at: new Date().toISOString(),\n };\n }\n }\n };\n\n this.messageSets.forEach((set) => _deleteUserMessages(set.messages, user, hardDelete));\n\n _deleteUserMessages(this.pinnedMessages, user, hardDelete);\n };\n\n filterErrorMessages() {\n const filteredMessages = this.latestMessages.filter((message) => message.type !== 'error');\n\n this.latestMessages = filteredMessages;\n }\n\n clean() {\n const now = new Date();\n // prevent old users from showing up as typing\n for (const [userID, lastEvent] of Object.entries(this.typing)) {\n const receivedAt =\n typeof lastEvent.received_at === 'string'\n ? new Date(lastEvent.received_at)\n : lastEvent.received_at || new Date();\n if (now.getTime() - receivedAt.getTime() > 7000) {\n delete this.typing[userID];\n this._channel.getClient().dispatchEvent({\n cid: this._channel.cid,\n type: 'typing.stop',\n user: { id: userID },\n } as Event<ErmisChatGenerics>);\n }\n }\n }\n\n clearMessages() {\n this.initMessages();\n this.pinnedMessages = [];\n }\n\n initMessages() {\n this.messageSets = [{ messages: [], isLatest: true, isCurrent: true }];\n }\n\n async loadMessageIntoState(messageId: string | 'latest', parentMessageId?: string, limit = 25) {\n let messageSetIndex: number;\n let switchedToMessageSet = false;\n const messageIdToFind = parentMessageId || messageId;\n if (messageId === 'latest') {\n if (this.messages === this.latestMessages) {\n return;\n }\n messageSetIndex = this.messageSets.findIndex((s) => s.isLatest);\n } else {\n messageSetIndex = this.findMessageSetIndex({ id: messageIdToFind });\n }\n if (messageSetIndex !== -1) {\n this.switchToMessageSet(messageSetIndex);\n switchedToMessageSet = true;\n }\n if (!switchedToMessageSet) {\n await this._channel.query({ messages: { id_around: messageIdToFind, limit } }, 'new');\n }\n\n messageSetIndex = this.findMessageSetIndex({ id: messageIdToFind });\n if (messageSetIndex !== -1) {\n this.switchToMessageSet(messageSetIndex);\n }\n }\n\n findMessage(messageId: string, parentMessageId?: string) {\n const messageSetIndex = this.findMessageSetIndex({ id: messageId });\n if (messageSetIndex === -1) {\n return undefined;\n }\n return this.messageSets[messageSetIndex].messages.find((m) => m.id === messageId);\n }\n\n private switchToMessageSet(index: number) {\n const currentMessages = this.messageSets.find((s) => s.isCurrent);\n if (!currentMessages) {\n return;\n }\n currentMessages.isCurrent = false;\n this.messageSets[index].isCurrent = true;\n }\n\n private areMessageSetsOverlap(messages1: Array<{ id: string }>, messages2: Array<{ id: string }>) {\n return messages1.some((m1) => messages2.find((m2) => m1.id === m2.id));\n }\n\n private findMessageSetIndex(message: { id?: string }) {\n return this.messageSets.findIndex((set) => !!set.messages.find((m) => m.id === message.id));\n }\n\n private findTargetMessageSet(\n newMessages: MessageResponse<ErmisChatGenerics>[],\n addIfDoesNotExist = true,\n messageSetToAddToIfDoesNotExist: MessageSetType = 'current',\n ) {\n let messagesToAdd: (\n | MessageResponse<ErmisChatGenerics>\n | ReturnType<ChannelState<ErmisChatGenerics>['formatMessage']>\n )[] = newMessages;\n let targetMessageSetIndex!: number;\n if (addIfDoesNotExist) {\n const overlappingMessageSetIndices = this.messageSets\n .map((_, i) => i)\n .filter((i) => this.areMessageSetsOverlap(this.messageSets[i].messages, newMessages));\n switch (messageSetToAddToIfDoesNotExist) {\n case 'new':\n if (overlappingMessageSetIndices.length > 0) {\n targetMessageSetIndex = overlappingMessageSetIndices[0];\n } else if (newMessages.some((m) => !m.parent_id)) {\n this.messageSets.push({ messages: [], isCurrent: false, isLatest: false });\n targetMessageSetIndex = this.messageSets.length - 1;\n }\n break;\n case 'current':\n targetMessageSetIndex = this.messageSets.findIndex((s) => s.isCurrent);\n break;\n case 'latest':\n targetMessageSetIndex = this.messageSets.findIndex((s) => s.isLatest);\n break;\n default:\n targetMessageSetIndex = -1;\n }\n // when merging the target set will be the first one from the overlapping message sets\n const mergeTargetMessageSetIndex = overlappingMessageSetIndices.splice(0, 1)[0];\n const mergeSourceMessageSetIndices = [...overlappingMessageSetIndices];\n if (mergeTargetMessageSetIndex !== undefined && mergeTargetMessageSetIndex !== targetMessageSetIndex) {\n mergeSourceMessageSetIndices.push(targetMessageSetIndex);\n }\n // merge message sets\n if (mergeSourceMessageSetIndices.length > 0) {\n const target = this.messageSets[mergeTargetMessageSetIndex];\n const sources = this.messageSets.filter((_, i) => mergeSourceMessageSetIndices.indexOf(i) !== -1);\n sources.forEach((messageSet) => {\n target.isLatest = target.isLatest || messageSet.isLatest;\n target.isCurrent = target.isCurrent || messageSet.isCurrent;\n messagesToAdd = [...messagesToAdd, ...messageSet.messages];\n });\n sources.forEach((s) => this.messageSets.splice(this.messageSets.indexOf(s), 1));\n const overlappingMessageSetIndex = this.messageSets.findIndex((s) =>\n this.areMessageSetsOverlap(s.messages, newMessages),\n );\n targetMessageSetIndex = overlappingMessageSetIndex;\n }\n } else {\n // assumes that all new messages belong to the same set\n targetMessageSetIndex = this.findMessageSetIndex(newMessages[0]);\n }\n\n return { targetMessageSetIndex, messagesToAdd };\n }\n}\n","import type { Attachment } from './types';\n\n/**\n * Normalize a file name for upload:\n * - Remove Vietnamese diacritics\n * - Replace đ/Đ with d/D\n * - Replace spaces with underscores\n * - Preserve extension\n */\nexport function normalizeFileName(name: string): string {\n const dotIndex = name.lastIndexOf('.');\n const baseName = dotIndex > 0 ? name.slice(0, dotIndex) : name;\n const extension = dotIndex > 0 ? name.slice(dotIndex) : '';\n\n const normalized = baseName\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') // strip diacritics\n .replace(/đ/g, 'd')\n .replace(/Đ/g, 'D')\n .replace(/\\s+/g, '_');\n\n return normalized + extension;\n}\n\n/**\n * Check if a MIME type or file extension is HEIC/HEIF.\n */\nexport function isHeicFile(file: File): boolean {\n const mime = file.type.toLowerCase();\n const ext = file.name.toLowerCase().split('.').pop() || '';\n return (\n mime === 'image/heic' ||\n mime === 'image/heif' ||\n ext === 'heic' ||\n ext === 'heif'\n );\n}\n\n/**\n * Categorize a file by MIME type.\n * HEIC/HEIF files are treated as 'file' (not 'image') since browsers can't render them.\n */\nexport function getAttachmentCategory(\n mimeType: string,\n fileName?: string,\n): 'image' | 'video' | 'audio' | 'file' {\n const mime = mimeType.toLowerCase();\n const ext = (fileName || '').toLowerCase().split('.').pop() || '';\n\n // HEIC/HEIF → file (not image)\n if (mime === 'image/heic' || mime === 'image/heif' || ext === 'heic' || ext === 'heif') {\n return 'file';\n }\n\n if (mime.startsWith('image/')) return 'image';\n if (mime.startsWith('video/')) return 'video';\n if (mime.startsWith('audio/')) return 'audio';\n return 'file';\n}\n\n/**\n * Check if a file is a video type that supports thumbnail extraction.\n */\nexport function isVideoFile(file: File): boolean {\n return (\n file.type === 'video/mp4' ||\n file.type === 'video/webm' ||\n file.type === 'video/quicktime'\n );\n}\n\n/**\n * Metadata for voice recording attachments.\n */\nexport type VoiceRecordingMeta = {\n waveform_data: number[];\n duration: number;\n};\n\n/**\n * Build a normalized attachment payload from an uploaded file.\n *\n * @param file - Original file object\n * @param uploadedUrl - URL returned by the upload API\n * @param thumbUrl - Optional thumbnail URL (for video)\n * @param voiceMeta - Optional voice recording metadata\n */\nexport function buildAttachmentPayload(\n file: File,\n uploadedUrl: string,\n thumbUrl?: string,\n voiceMeta?: VoiceRecordingMeta,\n): Attachment {\n const title = normalizeFileName(file.name);\n const mimeType = file.type || '';\n const category = getAttachmentCategory(mimeType, file.name);\n\n if (voiceMeta) {\n return {\n type: 'voiceRecording',\n asset_url: uploadedUrl,\n title,\n file_size: file.size,\n mime_type: mimeType,\n waveform_data: voiceMeta.waveform_data,\n duration: voiceMeta.duration,\n };\n }\n\n switch (category) {\n case 'image':\n return {\n type: 'image',\n image_url: uploadedUrl,\n title,\n file_size: file.size,\n mime_type: mimeType,\n };\n\n case 'video':\n return {\n type: 'video',\n asset_url: uploadedUrl,\n title,\n file_size: file.size,\n mime_type: mimeType,\n thumb_url: thumbUrl || '',\n };\n\n case 'audio':\n return {\n type: 'file',\n asset_url: uploadedUrl,\n title,\n file_size: file.size,\n mime_type: mimeType,\n };\n\n default:\n return {\n type: 'file',\n asset_url: uploadedUrl,\n title,\n file_size: file.size,\n mime_type: mimeType || '',\n };\n }\n}\n","import { ChannelState } from './channel_state';\nimport { normalizeFileName, isVideoFile, buildAttachmentPayload } from './attachment_utils';\nimport type { VoiceRecordingMeta } from './attachment_utils';\nimport {\n enrichWithUserInfo,\n ensureMembersUserInfoLoaded,\n getDirectChannelImage,\n getDirectChannelName,\n getUserInfo,\n logChatPromiseExecution,\n randomId,\n} from './utils';\nimport { ErmisChat } from './client';\nimport {\n APIResponse,\n Attachment,\n ChannelAPIResponse,\n ChannelData,\n ChannelQueryOptions,\n ChannelResponse,\n DefaultGenerics,\n Event,\n EventHandler,\n EventTypes,\n ExtendableGenerics,\n FormatMessageResponse,\n Message,\n MessageResponse,\n MessageSetType,\n ReactionAPIResponse,\n SendMessageAPIResponse,\n UpdateChannelAPIResponse,\n UserResponse,\n QueryChannelAPIResponse,\n AttachmentResponse,\n PollMessage,\n EditMessage,\n ForwardMessage,\n} from './types';\nexport class Channel<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> {\n _client: ErmisChat<ErmisChatGenerics>;\n type: string;\n id: string | undefined;\n data: ChannelData<ErmisChatGenerics> | ChannelResponse<ErmisChatGenerics> | undefined;\n _data: ChannelData<ErmisChatGenerics> | ChannelResponse<ErmisChatGenerics>;\n cid: string;\n listeners: { [key: string]: (string | EventHandler<ErmisChatGenerics>)[] };\n state: ChannelState<ErmisChatGenerics>;\n initialized: boolean;\n offlineMode: boolean;\n lastKeyStroke?: Date;\n lastTypingEvent: Date | null;\n isTyping: boolean;\n disconnected: boolean;\n\n constructor(\n client: ErmisChat<ErmisChatGenerics>,\n type: string,\n id: string | undefined,\n data: ChannelData<ErmisChatGenerics>,\n ) {\n const validTypeRe = /^[\\w_-]+$/;\n const validIDRe = /^[\\w!:_-]+$/;\n\n if (!validTypeRe.test(type)) {\n throw new Error(`Invalid chat type ${type}, letters, numbers and \"_-\" are allowed`);\n }\n if (typeof id === 'string' && !validIDRe.test(id)) {\n throw new Error(`Invalid chat id ${id}, letters, numbers and \"!-_\" are allowed`);\n }\n\n this._client = client;\n this.type = type;\n this.id = id;\n this.data = data;\n this._data = { ...data };\n this.cid = `${type}:${id}`;\n this.listeners = {};\n this.state = new ChannelState<ErmisChatGenerics>(this);\n this.initialized = false;\n this.offlineMode = false;\n this.lastTypingEvent = null;\n this.isTyping = false;\n this.disconnected = false;\n }\n\n getClient(): ErmisChat<ErmisChatGenerics> {\n return this._client;\n }\n\n async sendMessage(message: Message<ErmisChatGenerics>) {\n // 1. Generate ID upfront\n if (!message.id) {\n message = { ...message, id: randomId() };\n }\n const messageId = message.id!;\n\n // 2. Build optimistic (fake) message and push into state immediately\n const optimisticMessage = {\n ...message,\n id: messageId,\n status: 'sending',\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n user: this.getClient().user,\n user_id: this.getClient().userID,\n type: 'regular',\n } as unknown as MessageResponse<ErmisChatGenerics>;\n\n this.state.addMessageSorted(optimisticMessage);\n\n // 3. Call API — don't update status on success (WS message.new will handle it)\n try {\n return await this.getClient().post<SendMessageAPIResponse<ErmisChatGenerics>>(\n this._channelURL() + '/message',\n { message: { ...message } },\n );\n } catch (error: any) {\n // 4. On error: check if it's an offline/network error\n const isOfflineError = !error.response || error.code === 'ERR_NETWORK' || error.isWSFailure || !this.getClient().wsConnection?.isHealthy;\n const statusToSet = isOfflineError ? 'failed_offline' : 'error';\n this.state.updateMessageStatus(messageId, statusToSet);\n throw error;\n }\n }\n\n async retryMessage(messageId: string) {\n const stateMsg = this.state.messages.find((m) => m.id === messageId);\n if (!stateMsg) throw new Error(`Message ${messageId} not found in state`);\n\n this.state.updateMessageStatus(messageId, 'sending');\n\n const messagePayload: any = {\n id: stateMsg.id,\n text: stateMsg.text,\n attachments: stateMsg.attachments,\n mentioned_users: stateMsg.mentioned_users,\n parent_id: stateMsg.parent_id,\n quoted_message_id: stateMsg.quoted_message_id,\n sticker_url: (stateMsg as any).sticker_url,\n };\n\n if (stateMsg.show_in_channel !== undefined) {\n messagePayload.show_in_channel = stateMsg.show_in_channel;\n }\n\n try {\n return await this.getClient().post<SendMessageAPIResponse<ErmisChatGenerics>>(\n this._channelURL() + '/message',\n { message: messagePayload },\n );\n } catch (error: any) {\n const isOfflineError = !error.response || error.code === 'ERR_NETWORK' || error.isWSFailure || !this.getClient().wsConnection?.isHealthy;\n this.state.updateMessageStatus(messageId, isOfflineError ? 'failed_offline' : 'error');\n throw error;\n }\n }\n\n async createPoll(pollMessage: PollMessage) {\n const id = randomId();\n pollMessage = { ...pollMessage, id };\n\n return await this.getClient().post<SendMessageAPIResponse<ErmisChatGenerics>>(this._channelURL() + '/message', {\n message: { ...pollMessage },\n });\n }\n\n async votePoll(messageID: string, pollChoice: string) {\n if (!messageID) {\n throw Error(`Message id is missing`);\n }\n return await this.getClient().post<APIResponse>(\n this.getClient().baseURL + `/messages/${this.type}/${this.id}/${messageID}/poll/${pollChoice}`,\n );\n }\n\n async forwardMessage(message: ForwardMessage<ErmisChatGenerics>, channel: { type: string; channelID: string }) {\n if (!message.id) {\n message = { ...message, id: randomId() };\n }\n\n return await this.getClient().post<SendMessageAPIResponse<ErmisChatGenerics>>(\n `${this.getClient().baseURL}/channels/${channel.type}/${channel.channelID}` + '/message',\n {\n message: { ...message },\n },\n );\n }\n\n async pinMessage(messageID: string) {\n return await this.getClient().post(this.getClient().baseURL + `/messages/${this.type}/${this.id}/${messageID}/pin`);\n }\n\n async unpinMessage(messageID: string) {\n return await this.getClient().post(\n this.getClient().baseURL + `/messages/${this.type}/${this.id}/${messageID}/unpin`,\n );\n }\n\n async editMessage(oldMessageID: string, message: EditMessage) {\n return await this.getClient().post(this.getClient().baseURL + `/messages/${this.type}/${this.id}/${oldMessageID}`, {\n message,\n });\n }\n\n sendFile(\n uri: string | NodeJS.ReadableStream | Buffer | File,\n name?: string,\n contentType?: string,\n user?: UserResponse<ErmisChatGenerics>,\n ) {\n return this.getClient().sendFile(`${this._channelURL()}/file`, uri, name, contentType, user);\n }\n /**\n * Pre-process files (normalize names), upload them in parallel,\n * generate video thumbnails, and build attachment payloads.\n *\n * @param files - Array of File objects to upload\n * @param options - Optional voice recording metadata\n * @returns `attachments` ready for sendMessage, and `failedFiles` for error display\n */\n async uploadAndPrepareAttachments(\n files: File[],\n options?: {\n /** Map from file index → voice recording metadata */\n voiceMetadata?: Map<number, VoiceRecordingMeta>;\n },\n ): Promise<{\n attachments: Attachment[];\n failedFiles: Array<{ file: File; error: Error }>;\n }> {\n const failedFiles: Array<{ file: File; error: Error }> = [];\n\n // 1. Pre-process: normalize file names\n const processedFiles = files.map((file) => {\n const newName = normalizeFileName(file.name);\n if (newName !== file.name) {\n return new File([file], newName, { type: file.type, lastModified: file.lastModified });\n }\n return file;\n });\n\n // 2. Upload all files in parallel\n const uploadResults = await Promise.allSettled(\n processedFiles.map((file) =>\n this.sendFile(file, file.name, file.type),\n ),\n );\n\n // 3. For successful video uploads, generate and upload thumbnails\n const thumbUrls = new Map<number, string>();\n const thumbPromises: Promise<void>[] = [];\n\n for (let i = 0; i < processedFiles.length; i++) {\n const result = uploadResults[i];\n if (result.status === 'fulfilled' && isVideoFile(processedFiles[i])) {\n thumbPromises.push(\n (async () => {\n try {\n const thumbBlob = await this.getThumbBlobVideo(files[i]);\n if (thumbBlob) {\n const thumbFile = new File(\n [thumbBlob],\n `thumb_${processedFiles[i].name}.jpg`,\n { type: 'image/jpeg' },\n );\n const thumbResp = await this.sendFile(thumbFile, thumbFile.name, 'image/jpeg');\n thumbUrls.set(i, thumbResp.file);\n }\n } catch {\n // Thumbnail failure is non-critical\n }\n })(),\n );\n }\n }\n\n await Promise.allSettled(thumbPromises);\n\n // 4. Build attachment payloads from successful uploads\n const attachments: Attachment[] = [];\n for (let i = 0; i < processedFiles.length; i++) {\n const result = uploadResults[i];\n if (result.status === 'fulfilled') {\n const uploadedUrl = result.value.file;\n const thumbUrl = thumbUrls.get(i);\n const voiceMeta = options?.voiceMetadata?.get(i);\n attachments.push(\n buildAttachmentPayload(processedFiles[i], uploadedUrl, thumbUrl, voiceMeta),\n );\n } else {\n failedFiles.push({\n file: files[i],\n error: result.reason instanceof Error ? result.reason : new Error(String(result.reason)),\n });\n }\n }\n\n return { attachments, failedFiles };\n }\n\n async sendEvent(event: Event<ErmisChatGenerics>) {\n // this._checkInitialized();\n return await this.getClient().post(this._channelURL() + '/event', {\n event,\n });\n }\n\n async sendReaction(messageID: string, reactionType: string) {\n if (!messageID) {\n throw Error(`Message id is missing`);\n }\n return await this.getClient().post<ReactionAPIResponse<ErmisChatGenerics>>(\n this.getClient().baseURL + `/messages/${this.type}/${this.id}/${messageID}/reaction/${reactionType}`,\n );\n }\n\n deleteReaction(messageID: string, reactionType: string) {\n // this._checkInitialized();\n if (!reactionType || !messageID) {\n throw Error('Deleting a reaction requires specifying both the message and reaction type');\n }\n\n const url = this.getClient().baseURL + `/messages/${this.type}/${this.id}/${messageID}/reaction/${reactionType}`;\n //provided when server side request\n // if (user_id) {\n // return this.getClient().delete<ReactionAPIResponse<ErmisChatGenerics>>(url, { user_id });\n // }\n\n return this.getClient().delete<ReactionAPIResponse<ErmisChatGenerics>>(url, {});\n }\n\n async update(\n channelData: Partial<ChannelData<ErmisChatGenerics>> | Partial<ChannelResponse<ErmisChatGenerics>> = {},\n updateMessage?: Message<ErmisChatGenerics>,\n ) {\n // Strip out reserved names that will result in API errors.\n const reserved = [\n 'config',\n 'cid',\n 'created_by',\n 'id',\n 'member_count',\n 'type',\n 'created_at',\n 'updated_at',\n 'last_message_at',\n 'own_capabilities',\n ];\n reserved.forEach((key) => {\n delete channelData[key];\n });\n\n return await this._update({\n message: updateMessage,\n data: channelData,\n });\n }\n\n async delete() {\n return await this.getClient().delete(this._channelURL());\n }\n\n async truncate() {\n return await this.getClient().delete(this._channelURL() + '/truncate');\n }\n\n async blockUser() {\n return await this.getClient().post(this._channelURL(), { action: 'block' });\n }\n\n async unblockUser() {\n return await this.getClient().post(this._channelURL(), { action: 'unblock' });\n }\n\n async acceptInvite(action: string) {\n // const url = this.getClient().baseURL + `/invites/${this.type}/${this.id}/accept`;\n const channel_id = this.id;\n\n const url = this.getClient().userBaseURL + `/token_gate/join_channel/${this.type}`;\n return this.getClient().post<APIResponse>(url, {}, { channel_id, action });\n }\n\n async rejectInvite() {\n const url = this.getClient().baseURL + `/invites/${this.type}/${this.id}/reject`;\n return this.getClient().post<APIResponse>(url);\n }\n\n async skipInvite() {\n const url = this.getClient().baseURL + `/invites/${this.type}/${this.id}/skip`;\n return this.getClient().post<APIResponse>(url);\n }\n\n async addMembers(members: string[]) {\n return await this._update({ add_members: members });\n }\n\n async addModerators(members: string[]) {\n return await this._update({ promote_members: members });\n }\n\n async banMembers(members: string[]) {\n return await this._update({ ban_members: members });\n }\n\n async unbanMembers(members: string[]) {\n return await this._update({ unban_members: members });\n }\n\n async updateCapabilities(capabilities: string[]) {\n return await this._update({ capabilities });\n }\n\n /**\n * Set slow mode (message cooldown) for the channel.\n * Only applicable to team channels. Prevents members from sending\n * messages faster than the specified cooldown interval.\n *\n * @param cooldown - Cooldown duration in milliseconds.\n * Allowed values: 0 (off), 10000 (10s), 30000 (30s),\n * 60000 (1min), 300000 (5min), 900000 (15min), 3600000 (1h).\n */\n async setSlowMode(cooldown: 0 | 10000 | 30000 | 60000 | 300000 | 900000 | 3600000) {\n const allowedValues = [0, 10000, 30000, 60000, 300000, 900000, 3600000];\n if (!allowedValues.includes(cooldown)) {\n throw new Error(\n `Invalid cooldown value: ${cooldown}. Allowed values are: ${allowedValues.join(', ')} (milliseconds).`,\n );\n }\n return await this.update({ member_message_cooldown: cooldown } as any);\n }\n\n async queryAttachmentMessages() {\n const response = await this.getClient().post<AttachmentResponse<ErmisChatGenerics>>(\n this.getClient().baseURL + `/channels/${this.type}/${this.id}/attachment`,\n {\n attachment_types: ['image', 'video', 'file', 'voiceRecording', 'linkPreview'],\n },\n );\n\n // Sort newest first\n if (response.attachments) {\n response.attachments.sort(\n (a: any, b: any) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime(),\n );\n }\n\n return response;\n }\n\n async searchMessage(search_term: string, offset: number) {\n const response: any = await this.getClient().post(this.getClient().baseURL + `/channels/search`, {\n cid: this.cid,\n search_term,\n offset,\n limit: 25,\n });\n\n if (!response || response?.search_result?.messages.length === 0) {\n return null;\n }\n\n return {\n ...response?.search_result,\n messages: response?.search_result?.messages.map((message: any) => {\n const user = getUserInfo(message.user_id, Object.values(this.getClient().state.users)) || message.user;\n return { ...message, user };\n }),\n };\n }\n\n async removeMembers(members: string[]) {\n return await this._update({ remove_members: members });\n }\n\n async demoteModerators(members: string[]) {\n return await this._update({ demote_members: members });\n }\n\n async _update(payload: Object) {\n const data = await this.getClient().post<UpdateChannelAPIResponse<ErmisChatGenerics>>(this._channelURL(), payload);\n this.data = { ...this.data, ...data.channel };\n return data;\n }\n\n _processTopics(topicsFromApi: any, users: any[]) {\n const topics = topicsFromApi.map((topic: any) => {\n // Enrich topic members with user info\n if (topic.channel && topic.channel.members) {\n topic.channel.members = enrichWithUserInfo(topic.channel.members, users);\n }\n // Enrich topic messages with user info\n if (topic.messages) {\n topic.messages = enrichWithUserInfo(topic.messages, users);\n }\n // Enrich topic pinned messages with user info\n if (topic.pinned_messages) {\n topic.pinned_messages = enrichWithUserInfo(topic.pinned_messages, users);\n }\n // Enrich topic read with user info\n if (topic.read) {\n topic.read = enrichWithUserInfo(topic.read, users);\n }\n return topic;\n });\n\n const { channels } = this.getClient().hydrateChannels(topics, {});\n\n // Store topics in channel state\n this.state.topics = channels;\n }\n\n async muteNotification(duration: number | null) {\n return await this.getClient().post<AttachmentResponse<ErmisChatGenerics>>(\n this.getClient().baseURL + `/channels/${this.type}/${this.id}/muted`,\n { mute: true, duration },\n );\n }\n\n async unMuteNotification() {\n return await this.getClient().post<AttachmentResponse<ErmisChatGenerics>>(\n this.getClient().baseURL + `/channels/${this.type}/${this.id}/muted`,\n { mute: false },\n );\n }\n\n async keystroke(parent_id?: string, options?: { user_id: string }) {\n const now = new Date();\n const diff = this.lastTypingEvent && now.getTime() - this.lastTypingEvent.getTime();\n this.lastKeyStroke = now;\n this.isTyping = true;\n // send a typing.start every 2 seconds\n if (diff === null || diff > 2000) {\n this.lastTypingEvent = new Date();\n await this.sendEvent({\n type: 'typing.start',\n parent_id,\n ...(options || {}),\n } as Event<ErmisChatGenerics>);\n }\n }\n\n async stopTyping(parent_id?: string, options?: { user_id: string }) {\n if (!this.isTyping) return;\n this.lastTypingEvent = null;\n this.isTyping = false;\n await this.sendEvent({\n type: 'typing.stop',\n parent_id,\n ...(options || {}),\n } as Event<ErmisChatGenerics>);\n }\n\n _isTypingIndicatorsEnabled(): boolean {\n return true;\n }\n\n lastMessage() {\n let min = this.state.latestMessages.length - 5;\n if (min < 0) {\n min = 0;\n }\n const max = this.state.latestMessages.length + 1;\n const messageSlice = this.state.latestMessages.slice(min, max);\n\n // sort by pk desc\n messageSlice.sort((a, b) => b.created_at.getTime() - a.created_at.getTime());\n\n return messageSlice[0];\n }\n\n async markRead() {\n return await this.getClient().post(this._channelURL() + '/read');\n }\n\n clean() {\n if (this.lastKeyStroke) {\n const now = new Date();\n const diff = now.getTime() - this.lastKeyStroke.getTime();\n if (diff > 1000 && this.isTyping) {\n logChatPromiseExecution(this.stopTyping(), 'stop typing event');\n }\n }\n\n this.state.clean();\n }\n\n async watch(options?: ChannelQueryOptions) {\n // Make sure we wait for the connect promise if there is a pending one\n await this.getClient().wsPromise;\n\n const combined = { ...options };\n const state = await this.query(combined, 'latest');\n this.initialized = true;\n // Ensure all members' user info are loaded in state.users\n await ensureMembersUserInfoLoaded(this.getClient(), state.channel.members);\n\n // Get the latest users after updating\n const users = Object.values(this.getClient().state.users);\n state.channel.members = enrichWithUserInfo(state.channel.members, users);\n state.channel.name =\n state.channel.type === 'messaging'\n ? getDirectChannelName(state.channel.members, this.getClient().userID || '')\n : state.channel.name;\n state.channel.image =\n state.channel.type === 'messaging'\n ? getDirectChannelImage(state.channel.members, this.getClient().userID || '')\n : state.channel.image;\n state.messages = enrichWithUserInfo(state.messages, users);\n state.pinned_messages = state.pinned_messages ? enrichWithUserInfo(state.pinned_messages, users) : [];\n state.read = enrichWithUserInfo(state.read || [], users);\n\n // Process topics for team channels (already handled in query, but ensuring consistency)\n if (this.type === 'team' && state.channel.topics_enabled) {\n const payload = {\n filter_conditions: { type: ['topic'], parent_cid: this.cid, project_id: this.getClient().projectId },\n sort: [],\n message_limit: 25,\n };\n const topicsFromApi: any = await this.getClient().post<QueryChannelAPIResponse<ErmisChatGenerics>>(\n this.getClient().baseURL + '/channels',\n payload,\n );\n\n this._processTopics(topicsFromApi.channels || [], users);\n }\n\n this.data = state.channel;\n\n this._client.logger('info', `channel:watch() - started watching channel ${this.cid}`, {\n tags: ['channel'],\n channel: this,\n });\n return state;\n }\n\n lastRead() {\n const { userID } = this.getClient();\n if (userID) {\n return this.state.read[userID] ? this.state.read[userID].last_read : null;\n }\n }\n // TODO: KhoaKheu Add mute Users later, confict here\n _countMessageAsUnread(message: FormatMessageResponse<ErmisChatGenerics> | MessageResponse<ErmisChatGenerics>) {\n if (message.parent_id && !message.show_in_channel) return false;\n if (message.user?.id === this.getClient().userID) return false;\n if (message.type === 'system') return false;\n\n // Return false if channel doesn't allow read events.\n if (Array.isArray(this.data?.own_capabilities) && !this.data?.own_capabilities.includes('read-events'))\n return false;\n\n return true;\n }\n\n countUnread(lastRead?: Date | null) {\n if (!lastRead) return this.state.unreadCount;\n\n let count = 0;\n for (let i = 0; i < this.state.latestMessages.length; i += 1) {\n const message = this.state.latestMessages[i];\n if (message.created_at > lastRead && this._countMessageAsUnread(message)) {\n count++;\n }\n }\n return count;\n }\n\n getUnreadMemberCount() {\n if (!this.state.read) return [];\n\n return Object.values(this.state.read);\n }\n\n getCapabilitiesMember() {\n if (!this.data) return [];\n\n return this.data.member_capabilities;\n }\n\n create = async () => {\n if (this.type === 'messaging') {\n return await this.createDirectChannel('latest');\n } else {\n return await this.query({}, 'latest');\n }\n };\n\n async createTopic(data: any) {\n const project_id = this._client.projectId;\n const uuid = randomId();\n const topicID = `${project_id}:${uuid}`;\n\n const queryURL = `${this.getClient().baseURL}/channels/topic/${topicID}`;\n const payload: any = {\n project_id,\n parent_cid: this.cid,\n data: { ...data },\n };\n\n const state = await this.getClient().post<QueryChannelAPIResponse<ErmisChatGenerics>>(queryURL + '/query', payload);\n\n return state;\n }\n\n async query(options: ChannelQueryOptions, messageSetToAddToIfDoesNotExist: MessageSetType = 'current') {\n // Make sure we wait for the connect promise if there is a pending one\n await this.getClient().wsPromise;\n\n let project_id = this._client.projectId;\n let update_options = { ...options, project_id };\n\n let queryURL = `${this.getClient().baseURL}/channels/${this.type}`;\n if (this.id) {\n queryURL += `/${this.id}`;\n } else {\n if (this.type === 'team') {\n const uuid = randomId();\n this.id = `${project_id}:${uuid}`;\n queryURL += `/${this.id}`;\n }\n }\n\n const payload: any = {\n state: true,\n ...update_options,\n };\n\n if (this._data && Object.keys(this._data).length > 0) {\n payload.data = this._data;\n }\n\n const state = await this.getClient().post<QueryChannelAPIResponse<ErmisChatGenerics>>(queryURL + '/query', payload);\n // Ensure all members' user info are loaded in state.users\n await ensureMembersUserInfoLoaded(this.getClient(), state.channel.members);\n const users = Object.values(this.getClient().state.users);\n state.channel.members = enrichWithUserInfo(state.channel.members, users);\n state.channel.name =\n state.channel.type === 'messaging'\n ? getDirectChannelName(state.channel.members, this.getClient().userID || '')\n : state.channel.name;\n state.channel.image =\n state.channel.type === 'messaging'\n ? getDirectChannelImage(state.channel.members, this.getClient().userID || '')\n : state.channel.image;\n state.messages = enrichWithUserInfo(state.messages, users);\n state.pinned_messages = state.pinned_messages ? enrichWithUserInfo(state.pinned_messages, users) : [];\n state.read = enrichWithUserInfo(state.read || [], users);\n state.channel.is_pinned = state.is_pinned || false;\n\n // Process topics for team channels\n // if (this.type === 'team' && state.channel.topics_enabled && state.topics) {\n // this._processTopics(state.topics, users);\n // }\n\n // update the channel id if it was missing\n\n if (!this.id) {\n this.id = state.channel.id;\n this.cid = state.channel.cid;\n\n // set the channel as active...\n const membersStr = state.channel.members\n .map((member) => member.user_id || member.user?.id)\n .sort()\n .join(',');\n const tempChannelCid = `${this.type}:!members-${membersStr}`;\n\n if (tempChannelCid in this.getClient().activeChannels) {\n // This gets set in `client.channel()` function, when channel is created\n // using members, not id.\n delete this.getClient().activeChannels[tempChannelCid];\n }\n\n if (!(this.cid in this.getClient().activeChannels)) {\n this.getClient().activeChannels[this.cid] = this;\n }\n }\n\n // add any messages to our channel state\n const { messageSet } = this._initializeState(state, messageSetToAddToIfDoesNotExist);\n\n const areCapabilitiesChanged =\n [...(state.channel.own_capabilities || [])].sort().join() !==\n [...(Array.isArray(this.data?.own_capabilities) ? (this.data?.own_capabilities as string[]) : [])].sort().join();\n this.data = state.channel;\n this.offlineMode = false;\n\n if (areCapabilitiesChanged) {\n this.getClient().dispatchEvent({\n type: 'capabilities.changed',\n cid: this.cid,\n own_capabilities: state.channel.own_capabilities,\n });\n }\n\n return state;\n }\n\n async createDirectChannel(messageSetToAddToIfDoesNotExist: MessageSetType = 'current') {\n // Make sure we wait for the connect promise if there is a pending one\n await this.getClient().wsPromise;\n\n const project_id = this._client.projectId;\n\n const queryURL = `${this.getClient().baseURL}/channels/${this.type}`;\n\n const payload: any = {\n project_id,\n };\n\n if (this._data && Object.keys(this._data).length > 0) {\n payload.data = this._data;\n }\n\n const state = await this.getClient().post<QueryChannelAPIResponse<ErmisChatGenerics>>(queryURL + '/query', payload);\n\n const users = Object.values(this.getClient().state.users);\n state.channel.members = enrichWithUserInfo(state.channel.members, users);\n state.channel.name =\n state.channel.type === 'messaging'\n ? getDirectChannelName(state.channel.members, this.getClient().userID || '')\n : state.channel.name;\n state.messages = enrichWithUserInfo(state.messages, users);\n state.pinned_messages = state.pinned_messages ? enrichWithUserInfo(state.pinned_messages, users) : [];\n state.read = enrichWithUserInfo(state.read || [], users);\n\n // add any messages to our channel state\n const { messageSet } = this._initializeState(state, messageSetToAddToIfDoesNotExist);\n\n const areCapabilitiesChanged =\n [...(state.channel.own_capabilities || [])].sort().join() !==\n [...(Array.isArray(this.data?.own_capabilities) ? (this.data?.own_capabilities as string[]) : [])].sort().join();\n this.data = state.channel;\n this.offlineMode = false;\n\n if (areCapabilitiesChanged) {\n this.getClient().dispatchEvent({\n type: 'capabilities.changed',\n cid: state.channel.cid,\n own_capabilities: state.channel.own_capabilities,\n });\n }\n\n return state;\n }\n\n async queryMessagesLessThanId(message_id: string, limit: number = 25) {\n await this.getClient().wsPromise;\n\n let project_id = this._client.projectId;\n let queryURL = `${this.getClient().baseURL}/channels/${this.type}/${this.id}`;\n\n const state = await this.getClient().post<QueryChannelAPIResponse<ErmisChatGenerics>>(queryURL + '/query', {\n // data: this._data,\n state: true,\n project_id,\n messages: { limit, id_lt: message_id },\n });\n\n const users = Object.values(this.getClient().state.users);\n state.messages = enrichWithUserInfo(state.messages, users);\n if (state.messages && state.messages.length > 0) {\n for (const msg of state.messages) {\n if (!msg.pinned) {\n const pm = this.state.pinnedMessages?.find((p) => p.id === msg.id);\n if (pm) {\n msg.pinned = true;\n const pmDate = pm.pinned_at || new Date();\n msg.pinned_at = typeof pmDate === 'string' ? pmDate : pmDate.toISOString();\n }\n }\n }\n this.state.addMessagesSorted(state.messages, false, true, true, 'current');\n }\n return state.messages;\n }\n\n async queryMessagesGreaterThanId(message_id: string, limit: number = 25) {\n await this.getClient().wsPromise;\n\n let project_id = this._client.projectId;\n let queryURL = `${this.getClient().baseURL}/channels/${this.type}/${this.id}`;\n\n const state = await this.getClient().post<QueryChannelAPIResponse<ErmisChatGenerics>>(queryURL + '/query', {\n // data: this._data,\n state: true,\n project_id,\n messages: { limit, id_gt: message_id },\n });\n\n const users = Object.values(this.getClient().state.users);\n state.messages = enrichWithUserInfo(state.messages, users);\n if (state.messages && state.messages.length > 0) {\n for (const msg of state.messages) {\n if (!msg.pinned) {\n const pm = this.state.pinnedMessages?.find((p) => p.id === msg.id);\n if (pm) {\n msg.pinned = true;\n const pmDate = pm.pinned_at || new Date();\n msg.pinned_at = typeof pmDate === 'string' ? pmDate : pmDate.toISOString();\n }\n }\n }\n this.state.addMessagesSorted(state.messages, false, true, true, 'current');\n }\n return state.messages;\n }\n\n async queryMessagesAroundId(message_id: string, limit: number = 25) {\n await this.getClient().wsPromise;\n\n let project_id = this._client.projectId;\n let queryURL = `${this.getClient().baseURL}/channels/${this.type}/${this.id}`;\n\n const state = await this.getClient().post<QueryChannelAPIResponse<ErmisChatGenerics>>(queryURL + '/query', {\n // data: this._data,\n state: true,\n project_id,\n messages: { limit, id_around: message_id },\n });\n\n const users = Object.values(this.getClient().state.users);\n state.messages = enrichWithUserInfo(state.messages, users);\n if (state.messages && state.messages.length > 0) {\n for (const msg of state.messages) {\n if (!msg.pinned) {\n const pm = this.state.pinnedMessages?.find((p) => p.id === msg.id);\n if (pm) {\n msg.pinned = true;\n const pmDate = pm.pinned_at || new Date();\n msg.pinned_at = typeof pmDate === 'string' ? pmDate : pmDate.toISOString();\n }\n }\n }\n this.state.addMessagesSorted(state.messages, false, true, true, 'current');\n }\n return state.messages;\n }\n\n async deleteMessage(messageId: string) {\n return await this.getClient().delete<APIResponse & { message: MessageResponse<ErmisChatGenerics> }>(\n this.getClient().baseURL + `/messages/${this.type}/${this.id}/${messageId}`,\n );\n }\n\n async deleteMessageForMe(messageId: string) {\n return await this.getClient().delete<APIResponse & { message: MessageResponse<ErmisChatGenerics> }>(\n this.getClient().baseURL + `/messages/${this.type}/${this.id}/${messageId}`,\n { for_me: true },\n );\n }\n\n async getThumbBlobVideo(file: File): Promise<Blob | null> {\n return new Promise((resolve) => {\n const seekTo = 0.1;\n const videoPlayer = document.createElement('video');\n videoPlayer.src = URL.createObjectURL(file);\n videoPlayer.crossOrigin = 'anonymous'; // Tránh lỗi CORS nếu cần\n videoPlayer.load();\n\n videoPlayer.addEventListener('error', () => {\n console.error('Error when loading video file.');\n resolve(null);\n });\n\n videoPlayer.addEventListener('loadedmetadata', () => {\n if (videoPlayer.duration < seekTo) {\n console.error('Video is too short.');\n resolve(null);\n return;\n }\n\n setTimeout(() => {\n videoPlayer.currentTime = seekTo;\n }, 200);\n });\n\n videoPlayer.addEventListener('seeked', () => {\n try {\n const canvas = document.createElement('canvas');\n canvas.width = videoPlayer.videoWidth;\n canvas.height = videoPlayer.videoHeight;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n console.error('Failed to create canvas context.');\n resolve(null);\n return;\n }\n\n ctx.drawImage(videoPlayer, 0, 0, canvas.width, canvas.height);\n\n ctx.canvas.toBlob(\n (blob) => {\n if (!blob) {\n console.error('Failed to generate thumbnail.');\n resolve(null);\n return;\n }\n resolve(blob);\n URL.revokeObjectURL(videoPlayer.src); // Giải phóng bộ nhớ\n },\n 'image/jpeg',\n 0.75,\n );\n } catch (error) {\n console.error('Error while extracting thumbnail:', error);\n resolve(null);\n }\n });\n });\n }\n\n async enableTopics() {\n return await this.getClient().post(this.getClient().baseURL + `/channels/${this.type}/${this.id}/topics/enable`, {\n project_id: this.getClient().projectId,\n messages: { limit: 25 },\n });\n }\n\n async disableTopics() {\n return await this.getClient().post(this.getClient().baseURL + `/channels/${this.type}/${this.id}/topics/disable`, {\n project_id: this.getClient().projectId,\n });\n }\n\n async closeTopic(topicCID: string) {\n return await this.getClient().post(this.getClient().baseURL + `/channels/${this.type}/${this.id}/topics/close`, {\n project_id: this.getClient().projectId,\n topic_cid: topicCID,\n });\n }\n\n async reopenTopic(topicCID: string) {\n return await this.getClient().post(this.getClient().baseURL + `/channels/${this.type}/${this.id}/topics/reopen`, {\n project_id: this.getClient().projectId,\n topic_cid: topicCID,\n });\n }\n\n async editTopic(topicCID: string, data: any) {\n const response: any = await this.getClient().post(\n this.getClient().baseURL + `/channels/${this.type}/${this.id}/topics`,\n {\n project_id: this.getClient().projectId,\n topic_cid: topicCID,\n data,\n },\n );\n\n if (response) {\n const activeTopic = this.getClient().activeChannels[topicCID];\n\n if (activeTopic) {\n activeTopic.data = response.channel;\n return activeTopic.data;\n } else {\n return response.channel;\n }\n }\n }\n\n on(eventType: EventTypes, callback: EventHandler<ErmisChatGenerics>): { unsubscribe: () => void };\n on(callback: EventHandler<ErmisChatGenerics>): { unsubscribe: () => void };\n on(\n callbackOrString: EventHandler<ErmisChatGenerics> | EventTypes,\n callbackOrNothing?: EventHandler<ErmisChatGenerics>,\n ): { unsubscribe: () => void } {\n const key = callbackOrNothing ? (callbackOrString as string) : 'all';\n const callback = callbackOrNothing ? callbackOrNothing : callbackOrString;\n if (!(key in this.listeners)) {\n this.listeners[key] = [];\n }\n this._client.logger('info', `Attaching listener for ${key} event on channel ${this.cid}`, {\n tags: ['event', 'channel'],\n channel: this,\n });\n\n this.listeners[key].push(callback);\n\n return {\n unsubscribe: () => {\n this._client.logger('info', `Removing listener for ${key} event from channel ${this.cid}`, {\n tags: ['event', 'channel'],\n channel: this,\n });\n\n this.listeners[key] = this.listeners[key].filter((el) => el !== callback);\n },\n };\n }\n\n off(eventType: EventTypes, callback: EventHandler<ErmisChatGenerics>): void;\n off(callback: EventHandler<ErmisChatGenerics>): void;\n off(\n callbackOrString: EventHandler<ErmisChatGenerics> | EventTypes,\n callbackOrNothing?: EventHandler<ErmisChatGenerics>,\n ): void {\n const key = callbackOrNothing ? (callbackOrString as string) : 'all';\n const callback = callbackOrNothing ? callbackOrNothing : callbackOrString;\n if (!(key in this.listeners)) {\n this.listeners[key] = [];\n }\n\n this._client.logger('info', `Removing listener for ${key} event from channel ${this.cid}`, {\n tags: ['event', 'channel'],\n channel: this,\n });\n this.listeners[key] = this.listeners[key].filter((value) => value !== callback);\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n async _handleChannelEvent(event: Event<ErmisChatGenerics>) {\n const channel = this;\n this._client.logger(\n 'info',\n `channel:_handleChannelEvent - Received event of type { ${event.type} } on ${this.cid}`,\n {\n tags: ['event', 'channel'],\n channel: this,\n },\n );\n\n const channelState = channel.state;\n const users = Object.values(this.getClient().state.users);\n switch (event.type) {\n case 'typing.start':\n if (event.user?.id) {\n const user = getUserInfo(event.user.id || '', users);\n event.user = user;\n channelState.typing[event.user.id] = event;\n }\n break;\n case 'typing.stop':\n if (event.user?.id) {\n delete channelState.typing[event.user.id];\n }\n break;\n case 'message.read':\n if (event.user?.id && event.created_at) {\n const user = getUserInfo(event.user.id || '', users);\n event.user = user;\n channelState.read[event.user.id] = {\n last_read: new Date(event.created_at),\n last_read_message_id: event.last_read_message_id,\n user,\n unread_messages: 0,\n };\n\n if (event.user?.id === this.getClient().user?.id) {\n channelState.unreadCount = 0;\n }\n }\n break;\n case 'user.watching.start':\n if (event.user?.id) {\n channelState.watchers[event.user.id] = event.user;\n }\n break;\n case 'user.watching.stop':\n if (event.user?.id) {\n delete channelState.watchers[event.user.id];\n }\n break;\n case 'message.deleted':\n if (event.message) {\n this._extendEventWithOwnReactions(event);\n //! NOTE: check lai o day\n channelState.removeMessage(event.message);\n channelState.addMessageSorted(event.message, false, false);\n // if (event.hard_delete) channelState.removeMessage(event.message);\n // else channelState.addMessageSorted(event.message, false, false);\n\n channelState.removeQuotedMessageReferences(event.message);\n\n // if (event.message.pinned) {\n // channelState.removePinnedMessage(event.message);\n // }\n\n if ([...channelState.pinnedMessages].some((msg) => msg.id === event.message?.id)) {\n channelState.removePinnedMessage(event.message);\n }\n\n for (const userId in channelState.read) {\n if (userId !== event.user?.id && event.message.id === channelState.read[userId].last_read_message_id) {\n // Clear last_read_message_id if the deleted message is the last_read_message_id\n channelState.read[userId] = { ...channelState.read[userId], last_read_message_id: undefined };\n }\n }\n }\n break;\n case 'message.deleted_for_me':\n if (event.message) {\n channelState.removeMessage(event.message);\n channelState.removeQuotedMessageReferences(event.message);\n\n if ([...channelState.pinnedMessages].some((msg) => msg.id === event.message?.id)) {\n channelState.removePinnedMessage(event.message);\n }\n }\n break;\n case 'message.new':\n if (event.message) {\n /* if message belongs to current user, always assume timestamp is changed to filter it out and add again to avoid duplication */\n const ownMessage = event.user?.id === this.getClient().user?.id;\n const isThreadMessage = !!event.message.parent_id;\n\n const existUser = users.find((user) => user.id === event.user?.id);\n if (!existUser) {\n if (event.user?.id) {\n const resUser = await this.getClient().queryUser(event.user.id);\n users.push(resUser);\n }\n }\n\n const userInfo = getUserInfo(event.user?.id || '', users);\n event.message.user = userInfo;\n if (event.message?.quoted_message) {\n const quotedUser = getUserInfo(event.message.quoted_message.user?.id || '', users);\n event.message.quoted_message.user = quotedUser;\n }\n event.user = userInfo;\n\n if (this.state.isUpToDate || isThreadMessage) {\n channelState.addMessageSorted(event.message, ownMessage);\n }\n // if (event.message.pinned) {\n // channelState.addPinnedMessage(event.message);\n // }\n\n // do not increase the unread count - the back-end does not increase the count neither in the following cases:\n // 1. the message is mine\n // 2. the message is a thread reply from any user\n const preventUnreadCountUpdate = ownMessage || isThreadMessage;\n if (preventUnreadCountUpdate) break;\n\n if (event.user?.id) {\n for (const userId in channelState.read) {\n if (userId === event.user.id) {\n channelState.read[event.user.id] = {\n last_read: new Date(event.created_at as string),\n user: event.user,\n unread_messages: 0,\n };\n } else {\n channelState.read[userId].unread_messages += 1;\n }\n }\n }\n\n if (this._countMessageAsUnread(event.message)) {\n channelState.unreadCount = channelState.unreadCount + 1;\n }\n }\n break;\n case 'message.updated':\n if (event.message) {\n const userEvent = getUserInfo(event.user?.id || '', users);\n const userMsg = getUserInfo(event.message.user?.id || '', users);\n event.user = userEvent;\n event.message.user = userMsg;\n\n if (event.message?.quoted_message) {\n const quotedUser = getUserInfo(event.message.quoted_message.user?.id || '', users);\n event.message.quoted_message.user = quotedUser;\n }\n\n if (event.message?.latest_reactions) {\n event.message.latest_reactions = enrichWithUserInfo(event.message.latest_reactions || [], users);\n }\n\n this._extendEventWithOwnReactions(event);\n channelState.addMessageSorted(event.message, false, false);\n if (event.message.pinned) {\n channelState.addPinnedMessage(event.message);\n } else {\n channelState.removePinnedMessage(event.message);\n }\n }\n break;\n case 'message.pinned':\n if (event.message) {\n const user = getUserInfo(event.message.user?.id || '', users);\n event.message.user = user;\n channelState.addPinnedMessage(event.message);\n channelState.addMessageSorted(event.message, false, false);\n }\n break;\n case 'message.unpinned':\n if (event.message) {\n const user = getUserInfo(event.message.user?.id || '', users);\n event.message.user = user;\n channelState.removePinnedMessage(event.message);\n channelState.addMessageSorted(event.message, false, false);\n }\n break;\n case 'channel.truncate':\n if (event.channel?.created_at) {\n const truncatedAt = +new Date(event.channel.created_at);\n\n channelState.messageSets.forEach((messageSet, messageSetIndex) => {\n messageSet.messages.forEach(({ created_at: createdAt, id }) => {\n if (truncatedAt > +createdAt) channelState.removeMessage({ id, messageSetIndex });\n });\n });\n\n channelState.pinnedMessages.forEach(({ id, created_at: createdAt }) => {\n if (truncatedAt > +createdAt)\n channelState.removePinnedMessage({ id } as MessageResponse<ErmisChatGenerics>);\n });\n } else {\n channelState.clearMessages();\n }\n\n channelState.unreadCount = 0;\n // system messages don't increment unread counts\n if (event.message) {\n channelState.addMessageSorted(event.message);\n if (event.message.pinned) {\n channelState.addPinnedMessage(event.message);\n }\n }\n break;\n case 'member.added':\n if (event.member?.user_id) {\n const user = getUserInfo(event.member.user_id, users);\n event.member.user = user;\n\n channelState.members[event.member.user_id] = event.member;\n\n if (event.member.user?.id === this.getClient().user?.id) {\n channelState.membership = event.member;\n }\n }\n break;\n case 'member.updated':\n if (event.member?.user_id) {\n const user = getUserInfo(event.member.user_id, users);\n event.member.user = user;\n channelState.members[event.member.user_id] = event.member;\n channelState.membership = event.member;\n }\n break;\n case 'member.removed':\n if (event.member?.user_id) {\n delete channelState.members[event.member.user_id];\n } else if (event.user?.id) {\n // fallback just in case some legacy payload uses event.user for the removed user\n delete channelState.members[event.user.id];\n }\n break;\n case 'channel.updated':\n if (event.channel) {\n channel.data = {\n ...channel.data,\n ...event.channel,\n own_capabilities: event.channel?.own_capabilities ?? channel.data?.own_capabilities,\n };\n }\n break;\n case 'pollchoice.new':\n if (event.message) {\n const user = getUserInfo(event.message.user?.id || '', users);\n event.message.user = user;\n channelState.addMessageSorted(event.message, false, false);\n }\n break;\n case 'reaction.new':\n if (event.message && event.reaction) {\n const userMsg = getUserInfo(event.message.user?.id || '', users);\n const userReaction = getUserInfo(event.reaction.user?.id || '', users);\n event.message.user = userMsg;\n event.message.latest_reactions = enrichWithUserInfo(event.message.latest_reactions || [], users);\n event.reaction.user = userReaction;\n if (event.message?.quoted_message) {\n const quotedUser = getUserInfo(event.message.quoted_message.user?.id || '', users);\n event.message.quoted_message.user = quotedUser;\n }\n event.message = channelState.addReaction(event.reaction, event.message);\n }\n break;\n case 'reaction.deleted':\n event.user = getUserInfo(event.user?.id || '', users);\n if (event.message) {\n if (event.message?.quoted_message) {\n const quotedUser = getUserInfo(event.message.quoted_message.user?.id || '', users);\n event.message.quoted_message.user = quotedUser;\n }\n event.message.user = getUserInfo(event.message.user?.id || '', users);\n event.message.latest_reactions?.map((item) => {\n item.user = getUserInfo(item.user?.id || '', users);\n return item;\n });\n }\n\n if (event.reaction) {\n event.reaction.user = getUserInfo(event.reaction.user?.id || '', users);\n event.message = channelState.removeReaction(event.reaction, event.message);\n }\n break;\n case 'member.joined':\n case 'notification.invite_accepted':\n if (event.member?.user_id) {\n const existUser = users.find((user) => user.id === event.member?.user_id);\n\n if (!existUser) {\n const resUser = await this.getClient().queryUser(event.member?.user_id);\n users.push(resUser);\n }\n\n const user = getUserInfo(event.member.user_id, users);\n event.member.user = user;\n\n if (event.member.user_id === this.getClient().user?.id) {\n channelState.membership = event.member;\n this.state.membership = event.member;\n }\n\n channelState.members[event.member.user_id] = event.member;\n channel.data = {\n ...channel.data,\n member_count: Number(channel.data?.member_count) + 1,\n members: channel.data?.members ? [...channel.data.members, event.member] : [event.member],\n } as ChannelAPIResponse<ErmisChatGenerics>['channel'];\n this.offlineMode = true;\n this.initialized = true;\n }\n break;\n case 'notification.invite_rejected':\n if (event.member?.user_id) {\n delete channelState.members[event.member.user_id];\n\n // channel.data = {\n // ...channel.data,\n // member_count: Number(channel.data?.member_count) - 1,\n // members: channel.data?.members?.filter((m: any) => m.user_id !== event.member?.user_id) || [],\n // } as ChannelAPIResponse<ErmisChatGenerics>['channel'];\n }\n break;\n case 'notification.invite_messaging_skipped':\n if (event.member?.user_id) {\n const user = getUserInfo(event.member.user_id, users);\n event.member.user = user;\n\n if (event.member.user_id === this.getClient().user?.id) {\n channelState.membership = event.member;\n this.state.membership = event.member;\n }\n\n channelState.members[event.member.user_id] = event.member;\n\n // this.offlineMode = true;\n // this.initialized = true;\n }\n break;\n case 'member.promoted':\n case 'member.demoted':\n case 'member.banned':\n case 'member.unbanned':\n case 'member.blocked':\n case 'member.unblocked':\n if (event.member?.user_id) {\n const user = getUserInfo(event.member.user_id, users);\n event.member.user = user;\n channelState.members[event.member.user_id] = event.member;\n if (event.member.user_id === this.getClient().user?.id) {\n channelState.membership = event.member;\n this.state.membership = event.member;\n }\n }\n break;\n case 'channel.pinned':\n if (channel.data) {\n channel.data.is_pinned = true;\n }\n break;\n case 'channel.unpinned':\n if (channel.data) {\n channel.data.is_pinned = false;\n }\n break;\n case 'channel.topic.disabled':\n if (channel.data) {\n channel.data.topics_enabled = false;\n }\n event.user = getUserInfo(event.user?.id || '', users);\n break;\n case 'channel.topic.enabled':\n if (channel.data) {\n channel.data.topics_enabled = true;\n }\n event.user = getUserInfo(event.user?.id || '', users);\n break;\n case 'channel.topic.created':\n const members = event.channel?.members || [];\n const enrichedMembers = enrichWithUserInfo(members, users);\n\n const topicState: any = {\n channel: event.channel,\n members: enrichedMembers,\n messages: [],\n pinned_messages: [],\n };\n const topic = this.getClient().channel(event.channel_type || '', event.channel_id || '');\n topic.data = event.channel;\n topic._initializeState(topicState, 'latest');\n channelState.topics?.unshift(topic);\n break;\n case 'channel.topic.closed':\n if (channel.data) {\n channel.data.is_closed_topic = true;\n }\n event.user = getUserInfo(event.user?.id || '', users);\n break;\n case 'channel.topic.reopen':\n if (channel.data) {\n channel.data.is_closed_topic = false;\n }\n event.user = getUserInfo(event.user?.id || '', users);\n break;\n case 'channel.topic.updated':\n if (channel.data) {\n channel.data.name = event.channel?.name;\n channel.data.image = event.channel?.image;\n channel.data.description = event.channel?.description;\n }\n\n event.user = getUserInfo(event.user?.id || '', users);\n break;\n default:\n }\n\n // any event can send over the online count\n if (event.watcher_count !== undefined) {\n channel.state.watcher_count = event.watcher_count;\n }\n }\n\n _callChannelListeners = (event: Event<ErmisChatGenerics>) => {\n const channel = this;\n // gather and call the listeners\n const listeners = [];\n if (channel.listeners.all) {\n listeners.push(...channel.listeners.all);\n }\n if (channel.listeners[event.type]) {\n listeners.push(...channel.listeners[event.type]);\n }\n\n // call the event and send it to the listeners\n for (const listener of listeners) {\n if (typeof listener !== 'string') {\n listener(event);\n }\n }\n };\n\n _channelURL = () => {\n if (!this.id) {\n throw new Error('channel id is not defined');\n }\n return `${this.getClient().baseURL}/channels/${this.type}/${this.id}`;\n };\n\n _checkInitialized() {\n if (!this.initialized && !this.offlineMode) {\n throw Error(\n `Channel ${this.cid} hasn't been initialized yet. Make sure to call .watch() and wait for it to resolve`,\n );\n }\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity\n _initializeState(\n state: ChannelAPIResponse<ErmisChatGenerics>,\n messageSetToAddToIfDoesNotExist: MessageSetType = 'latest',\n updateUserIds?: (id: string) => void,\n ) {\n const { state: clientState, user, userID } = this.getClient();\n // add the Users\n if (state.channel.members) {\n for (const member of state.channel.members) {\n if (member.user) {\n if (updateUserIds) {\n updateUserIds(member.user.id);\n }\n clientState.updateUserReference(member.user, this.cid);\n }\n }\n }\n\n this.state.membership = state.membership || {};\n\n // Remove duplicate messages by ID\n const map = new Map();\n const uniqueMessages = [];\n\n if (!state.messages) {\n state.messages = [];\n }\n for (const msg of state.messages) {\n if (!map.has(msg.id)) {\n map.set(msg.id, true);\n uniqueMessages.push(msg);\n }\n }\n\n if (this.state.pinnedMessages) {\n this.state.pinnedMessages = [];\n }\n this.state.addPinnedMessages(state.pinned_messages || []);\n\n const messages = uniqueMessages || [];\n if (!this.state.messages) {\n this.state.initMessages();\n }\n const { messageSet } = this.state.addMessagesSorted(messages, false, true, true, messageSetToAddToIfDoesNotExist);\n\n if (state.watcher_count !== undefined) {\n this.state.watcher_count = state.watcher_count;\n }\n // NOTE: we don't send the watchers with the channel data anymore\n // // convert the arrays into objects for easier syncing...\n if (state.watchers) {\n for (const watcher of state.watchers) {\n if (watcher) {\n clientState.updateUserReference(watcher, this.cid);\n this.state.watchers[watcher.id] = watcher;\n }\n }\n }\n\n // initialize read state to last message or current time if the channel is empty\n // if the user is a member, this value will be overwritten later on otherwise this ensures\n // that everything up to this point is not marked as unread\n if (userID != null) {\n const last_read = this.state.last_message_at || new Date();\n if (user) {\n this.state.read[user.id] = {\n user,\n last_read,\n unread_messages: 0,\n };\n }\n }\n\n // apply read state if part of the state\n if (state.read) {\n for (const read of state.read) {\n this.state.read[read.user.id] = {\n last_read: new Date(read.last_read),\n last_read_message_id: read.last_read_message_id,\n unread_messages: read.unread_messages ?? 0,\n user: read.user,\n last_send: read.last_send,\n };\n\n if (read.user.id === user?.id) {\n this.state.unreadCount = this.state.read[read.user.id].unread_messages;\n }\n }\n }\n\n if (state.channel.members) {\n this.state.members = state.channel.members.reduce((acc, member) => {\n if (member.user) {\n acc[member.user.id] = member;\n }\n return acc;\n }, {} as ChannelState<ErmisChatGenerics>['members']);\n }\n\n // Process topics for team channels\n if (state.channel.type === 'team' && state.channel.topics_enabled && state.topics) {\n const users = Object.values(this.getClient().state.users);\n this._processTopics(state.topics, users);\n }\n\n return {\n messageSet,\n };\n }\n\n _extendEventWithOwnReactions(event: Event<ErmisChatGenerics>) {\n if (!event.message) {\n return;\n }\n const message = this.state.findMessage(event.message.id, event.message.parent_id);\n if (message) {\n event.message.own_reactions = message.own_reactions;\n }\n }\n\n _disconnect() {\n this._client.logger('info', `channel:disconnect() - Disconnecting the channel ${this.cid}`, {\n tags: ['connection', 'channel'],\n channel: this,\n });\n\n this.disconnected = true;\n this.state.setIsUpToDate(false);\n }\n}\n","import { UserResponse, ExtendableGenerics, DefaultGenerics } from './types';\n\n/**\n * ClientState - A container class for the client state.\n */\nexport class ClientState<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> {\n users: {\n [key: string]: UserResponse<ErmisChatGenerics>;\n };\n userChannelReferences: { [key: string]: { [key: string]: boolean } };\n constructor() {\n // show the status for a certain user...\n // ie online, offline etc\n this.users = {};\n // store which channels contain references to the specified user...\n this.userChannelReferences = {};\n }\n\n updateUsers(users: UserResponse<ErmisChatGenerics>[]) {\n for (const user of users) {\n this.updateUser(user);\n }\n }\n\n updateUser(user?: UserResponse<ErmisChatGenerics>) {\n if (user != null) {\n if (this.users[user.id]) {\n // Update existing user's fields, because the user is updated from 2 diffferent servers\n const updatedUser = { ...this.users[user.id], ...user };\n this.users[user.id] = updatedUser;\n } else {\n // Add new user\n this.users[user.id] = user;\n }\n }\n }\n\n updateUserReference(user: UserResponse<ErmisChatGenerics>, channelID: string) {\n if (user == null) {\n return;\n }\n // dont update user here\n // this.updateUser(user);\n if (!this.userChannelReferences[user.id]) {\n this.userChannelReferences[user.id] = {};\n }\n this.userChannelReferences[user.id][channelID] = true;\n }\n\n deleteAllChannelReference(channelID: string) {\n for (const userID in this.userChannelReferences) {\n delete this.userChannelReferences[userID][channelID];\n }\n }\n}\n","import WebSocket from 'isomorphic-ws';\nimport {\n chatCodes,\n sleep,\n retryInterval,\n randomId,\n removeConnectionEventListeners,\n addConnectionEventListeners,\n} from './utils';\n\nimport { ConnectAPIResponse, ConnectionOpen, ExtendableGenerics, DefaultGenerics, UR, LogLevel } from './types';\nimport { ErmisChat } from './client';\n\n// Type guards to check WebSocket error type\nconst isCloseEvent = (res: WebSocket.CloseEvent | WebSocket.Data | WebSocket.ErrorEvent): res is WebSocket.CloseEvent =>\n (res as WebSocket.CloseEvent).code !== undefined;\n\nconst isErrorEvent = (res: WebSocket.CloseEvent | WebSocket.Data | WebSocket.ErrorEvent): res is WebSocket.ErrorEvent =>\n (res as WebSocket.ErrorEvent).error !== undefined;\n\n/**\n * StableWSConnection - A WS connection that reconnects upon failure.\n * - the browser will sometimes report that you're online or offline\n * - the WS connection can break and fail (there is a 30s health check)\n * - sometimes your WS connection will seem to work while the user is in fact offline\n * - to speed up online/offline detection you can use the window.addEventListener('offline');\n *\n * There are 4 ways in which a connection can become unhealthy:\n * - websocket.onerror is called\n * - websocket.onclose is called\n * - the health check fails and no event is received for ~40 seconds\n * - the browser indicates the connection is now offline\n *\n * There are 2 assumptions we make about the server:\n * - state can be recovered by querying the channel again\n * - if the servers fails to publish a message to the client, the WS connection is destroyed\n */\nexport class StableWSConnection<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> {\n // global from constructor\n client: ErmisChat<ErmisChatGenerics>;\n\n // local vars\n\n connectionOpen?: ConnectAPIResponse<ErmisChatGenerics>;\n consecutiveFailures: number;\n pingInterval: number;\n healthCheckTimeoutRef?: NodeJS.Timeout;\n isConnecting: boolean;\n isDisconnected: boolean;\n isHealthy: boolean;\n isResolved?: boolean;\n lastEvent: Date | null;\n connectionCheckTimeout: number;\n connectionCheckTimeoutRef?: NodeJS.Timeout;\n rejectPromise?: (\n reason?: Error & { code?: string | number; isWSFailure?: boolean; StatusCode?: string | number },\n ) => void;\n requestID: string | undefined;\n resolvePromise?: (value: ConnectionOpen<ErmisChatGenerics>) => void;\n totalFailures: number;\n ws?: WebSocket;\n wsID: number;\n\n constructor({ client }: { client: ErmisChat<ErmisChatGenerics> }) {\n /** ErmisChat client */\n this.client = client;\n /** consecutive failures influence the duration of the timeout */\n this.consecutiveFailures = 0;\n /** keep track of the total number of failures */\n this.totalFailures = 0;\n /** We only make 1 attempt to reconnect at the same time.. */\n this.isConnecting = false;\n /** To avoid reconnect if client is disconnected */\n this.isDisconnected = false;\n /** Boolean that indicates if the connection promise is resolved */\n this.isResolved = false;\n /** Boolean that indicates if we have a working connection to the server */\n this.isHealthy = false;\n /** Incremented when a new WS connection is made */\n this.wsID = 1;\n /** Store the last event time for health checks */\n this.lastEvent = null;\n /** Send a health check message every 25 seconds */\n this.pingInterval = 25 * 1000;\n this.connectionCheckTimeout = this.pingInterval + 10 * 1000;\n\n addConnectionEventListeners(this.onlineStatusChanged);\n }\n\n _log(msg: string, extra: UR = {}, level: LogLevel = 'info') {\n this.client.logger(level, 'connection:' + msg, { tags: ['connection'], ...extra });\n }\n\n setClient(client: ErmisChat<ErmisChatGenerics>) {\n this.client = client;\n }\n\n async connect(timeout = 15000) {\n if (this.isConnecting) {\n throw Error(`You've called connect twice, can only attempt 1 connection at the time`);\n }\n\n this.isDisconnected = false;\n\n try {\n const healthCheck = await this._connect();\n this.consecutiveFailures = 0;\n\n this._log(`connect() - Established ws connection with healthcheck: ${healthCheck}`);\n } catch (error: any) {\n this.isHealthy = false;\n this.consecutiveFailures += 1;\n\n if (error.code === chatCodes.TOKEN_EXPIRED) {\n this._log('connect() - WS failure due to expired token');\n } else if (!error.isWSFailure) {\n // API rejected the connection and we should not retry\n throw new Error(\n JSON.stringify({\n code: error.code,\n StatusCode: error.StatusCode,\n message: error.message,\n isWSFailure: error.isWSFailure,\n }),\n );\n }\n }\n\n return await this._waitForHealthy(timeout);\n }\n\n /**\n * _waitForHealthy polls the promise connection to see if its resolved until it times out\n * the default 15s timeout allows between 2~3 tries\n * @param timeout duration(ms)\n */\n async _waitForHealthy(timeout = 15000) {\n return Promise.race([\n (async () => {\n const interval = 50; // ms\n for (let i = 0; i <= timeout; i += interval) {\n try {\n return await this.connectionOpen;\n } catch (error: any) {\n if (i === timeout) {\n throw new Error(\n JSON.stringify({\n code: error.code,\n StatusCode: error.StatusCode,\n message: error.message,\n isWSFailure: error.isWSFailure,\n }),\n );\n }\n await sleep(interval);\n }\n }\n })(),\n (async () => {\n await sleep(timeout);\n this.isConnecting = false;\n throw new Error(\n JSON.stringify({\n code: '',\n StatusCode: '',\n message: 'initial WS connection could not be established',\n isWSFailure: true,\n }),\n );\n })(),\n ]);\n }\n\n /**\n * Builds and returns the url for websocket.\n * @private\n * @returns url string\n */\n _buildUrl = () => {\n const qs = encodeURIComponent(this.client._buildWSPayload(this.requestID));\n const token = this.client.tokenManager.getToken();\n\n let rawURL = `${this.client.wsBaseURL}/connect?json=${qs}&api_key=${\n this.client.apiKey\n }&authorization=${token}&stream-auth-type=${this.client.getAuthType()}&X-Stream-Client=${this.client.getUserAgent()}`;\n rawURL = encodeURI(rawURL);\n return rawURL;\n };\n\n /**\n * disconnect - Disconnect the connection and doesn't recover...\n *\n */\n disconnect(timeout?: number) {\n this._log(`disconnect() - Closing the websocket connection for wsID ${this.wsID}`);\n\n this.wsID += 1;\n this.isConnecting = false;\n this.isDisconnected = true;\n\n // start by removing all the listeners\n if (this.healthCheckTimeoutRef) {\n clearInterval(this.healthCheckTimeoutRef);\n }\n if (this.connectionCheckTimeoutRef) {\n clearInterval(this.connectionCheckTimeoutRef);\n }\n\n removeConnectionEventListeners(this.onlineStatusChanged);\n\n this.isHealthy = false;\n\n // remove ws handlers...\n if (this.ws && this.ws.removeAllListeners) {\n this.ws.removeAllListeners();\n }\n\n let isClosedPromise: Promise<void>;\n // and finally close...\n // Assigning to local here because we will remove it from this before the\n // promise resolves.\n const { ws } = this;\n if (ws && ws.close && ws.readyState === ws.OPEN) {\n isClosedPromise = new Promise((resolve) => {\n const onclose = (event: WebSocket.CloseEvent) => {\n this._log(`disconnect() - resolving isClosedPromise ${event ? 'with' : 'without'} close frame`, { event });\n resolve();\n };\n\n ws.onclose = onclose;\n // In case we don't receive close frame websocket server in time,\n // lets not wait for more than 1 seconds.\n setTimeout(onclose, timeout != null ? timeout : 1000);\n });\n\n this._log(`disconnect() - Manually closed connection by calling client.disconnect()`);\n\n ws.close(chatCodes.WS_CLOSED_SUCCESS, 'Manually closed connection by calling client.disconnect()');\n } else {\n this._log(`disconnect() - ws connection doesn't exist or it is already closed.`);\n isClosedPromise = Promise.resolve();\n }\n\n delete this.ws;\n\n return isClosedPromise;\n }\n\n async _connect() {\n if (this.isConnecting) return; // simply ignore _connect if it's currently trying to connect\n this.isConnecting = true;\n this.requestID = randomId();\n\n let isTokenReady = false;\n try {\n this._log(`_connect() - waiting for token`);\n await this.client.tokenManager.tokenReady();\n isTokenReady = true;\n } catch (e) {\n // token provider has failed before, so try again\n }\n\n try {\n this._setupConnectionPromise();\n const wsURL = this._buildUrl();\n this._log(`_connect() - Connecting to ${wsURL}`, { wsURL, requestID: this.requestID });\n this.ws = new WebSocket(wsURL);\n this.ws.onopen = this.onopen.bind(this, this.wsID);\n this.ws.onclose = this.onclose.bind(this, this.wsID);\n this.ws.onerror = this.onerror.bind(this, this.wsID);\n this.ws.onmessage = this.onmessage.bind(this, this.wsID);\n const response = await this.connectionOpen;\n this.isConnecting = false;\n\n if (response) {\n return response;\n }\n } catch (err: any) {\n this.isConnecting = false;\n this._log(`_connect() - Error - `, err);\n\n throw err;\n }\n }\n\n /**\n * _reconnect - Retry the connection to WS endpoint\n *\n * @param {{ interval?: number; refreshToken?: boolean }} options Following options are available\n *\n * - `interval`\t{int}\t\t\tnumber of ms that function should wait before reconnecting\n * - `refreshToken` {boolean}\treload/refresh user token be refreshed before attempting reconnection.\n */\n async _reconnect(options: { interval?: number; refreshToken?: boolean } = {}): Promise<void> {\n this._log('_reconnect() - Initiating the reconnect');\n\n // only allow 1 connection at the time\n if (this.isConnecting || this.isHealthy) {\n this._log('_reconnect() - Abort (1) since already connecting or healthy');\n return;\n }\n\n // reconnect in case of on error or on close\n // also reconnect if the health check cycle fails\n let interval = options.interval;\n if (!interval) {\n interval = retryInterval(this.consecutiveFailures);\n }\n // reconnect, or try again after a little while...\n await sleep(interval);\n\n // Check once again if by some other call to _reconnect is active or connection is\n // already restored, then no need to proceed.\n if (this.isConnecting || this.isHealthy) {\n this._log('_reconnect() - Abort (2) since already connecting or healthy');\n return;\n }\n\n if (this.isDisconnected) {\n this._log('_reconnect() - Abort (3) since disconnect() is called');\n return;\n }\n\n this._log('_reconnect() - Destroying current WS connection');\n\n // cleanup the old connection\n this._destroyCurrentWSConnection();\n\n try {\n await this._connect();\n this._log('_reconnect() - Waiting for recoverCallBack');\n await this.client.recoverState();\n this._log('_reconnect() - Finished recoverCallBack');\n\n this.consecutiveFailures = 0;\n } catch (error: any) {\n this.isHealthy = false;\n this.consecutiveFailures += 1;\n\n // reconnect on WS failures, don't reconnect if there is a code bug\n if (error.isWSFailure) {\n this._log('_reconnect() - WS failure, so going to try to reconnect');\n\n this._reconnect();\n }\n }\n this._log('_reconnect() - == END ==');\n }\n\n /**\n * onlineStatusChanged - this function is called when the browser connects or disconnects from the internet.\n *\n * @param {Event} event Event with type online or offline\n *\n */\n onlineStatusChanged = (event: Event) => {\n if (event.type === 'offline') {\n // mark the connection as down\n this._log('onlineStatusChanged() - Status changing to offline');\n this._setHealth(false);\n } else if (event.type === 'online') {\n // retry right now...\n // We check this.isHealthy, not sure if it's always\n // smart to create a new WS connection if the old one is still up and running.\n // it's possible we didn't miss any messages, so this process is just expensive and not needed.\n this._log(`onlineStatusChanged() - Status changing to online. isHealthy: ${this.isHealthy}`);\n if (!this.isHealthy) {\n this._reconnect({ interval: 10 });\n }\n }\n };\n\n onopen = (wsID: number) => {\n if (this.wsID !== wsID) return;\n\n this._log('onopen() - onopen callback', { wsID });\n };\n\n onmessage = (wsID: number, event: WebSocket.MessageEvent) => {\n if (this.wsID !== wsID) return;\n\n this._log('onmessage() - onmessage callback', { event, wsID });\n const data = typeof event.data === 'string' ? JSON.parse(event.data) : null;\n\n // we wait till the first message before we consider the connection open..\n // the reason for this is that auth errors and similar errors trigger a ws.onopen and immediately\n // after that a ws.onclose..\n if (!this.isResolved && data) {\n this.isResolved = true;\n if (data.error) {\n this.rejectPromise?.(this._errorFromWSEvent(data, false));\n return;\n }\n\n this.resolvePromise?.(data);\n this._setHealth(true);\n }\n\n // trigger the event..\n this.lastEvent = new Date();\n\n if (data && data.type === 'health.check') {\n this.scheduleNextPing();\n }\n\n this.client.handleEvent(event);\n this.scheduleConnectionCheck();\n };\n\n onclose = (wsID: number, event: WebSocket.CloseEvent) => {\n if (this.wsID !== wsID) return;\n\n this._log('onclose() - onclose callback - ' + event.code, { event, wsID });\n\n if (event.code === chatCodes.WS_CLOSED_SUCCESS) {\n // this is a permanent error raised by stream..\n // usually caused by invalid auth details\n const error = new Error(`WS connection reject with error ${event.reason}`) as Error & WebSocket.CloseEvent;\n\n error.reason = event.reason;\n error.code = event.code;\n error.wasClean = event.wasClean;\n error.target = event.target;\n\n this.rejectPromise?.(error);\n this._log(`onclose() - WS connection reject with error ${event.reason}`, { event });\n } else {\n this.consecutiveFailures += 1;\n this.totalFailures += 1;\n this._setHealth(false);\n this.isConnecting = false;\n\n this.rejectPromise?.(this._errorFromWSEvent(event));\n\n this._log(`onclose() - WS connection closed. Calling reconnect ...`, { event });\n\n // reconnect if its an abnormal failure\n this._reconnect();\n }\n };\n\n onerror = (wsID: number, event: WebSocket.ErrorEvent) => {\n if (this.wsID !== wsID) return;\n\n this.consecutiveFailures += 1;\n this.totalFailures += 1;\n this._setHealth(false);\n this.isConnecting = false;\n\n this.rejectPromise?.(this._errorFromWSEvent(event));\n this._log(`onerror() - WS connection resulted into error`, { event });\n\n this._reconnect();\n };\n\n /**\n * _setHealth - Sets the connection to healthy or unhealthy.\n * Broadcasts an event in case the connection status changed.\n *\n * @param {boolean} healthy boolean indicating if the connection is healthy or not\n *\n */\n _setHealth = (healthy: boolean) => {\n if (healthy === this.isHealthy) return;\n\n this.isHealthy = healthy;\n\n if (this.isHealthy) {\n this.client.dispatchEvent({ type: 'connection.changed', online: this.isHealthy });\n return;\n }\n\n // we're offline, wait few seconds and fire and event if still offline\n setTimeout(() => {\n if (this.isHealthy) return;\n this.client.dispatchEvent({ type: 'connection.changed', online: this.isHealthy });\n }, 1000);\n };\n\n /**\n * _errorFromWSEvent - Creates an error object for the WS event\n *\n */\n _errorFromWSEvent = (event: WebSocket.CloseEvent | WebSocket.Data | WebSocket.ErrorEvent, isWSFailure = true) => {\n let code;\n let statusCode;\n let message;\n if (isCloseEvent(event)) {\n code = event.code;\n statusCode = 'unknown';\n message = event.reason;\n }\n\n if (isErrorEvent(event)) {\n code = event.error.code;\n statusCode = event.error.StatusCode;\n message = event.error.message;\n }\n\n // Keeping this `warn` level log, to avoid cluttering of error logs from ws failures.\n this._log(`_errorFromWSEvent() - WS failed with code ${code}`, { event }, 'warn');\n\n const error = new Error(`WS failed with code ${code} and reason - ${message}`) as Error & {\n code?: string | number;\n isWSFailure?: boolean;\n StatusCode?: string | number;\n };\n error.code = code;\n /**\n * StatusCode does not exist on any event types but has been left\n * as is to preserve JS functionality during the TS implementation\n */\n error.StatusCode = statusCode;\n error.isWSFailure = isWSFailure;\n return error;\n };\n\n /**\n * _destroyCurrentWSConnection - Removes the current WS connection\n *\n */\n _destroyCurrentWSConnection() {\n // increment the ID, meaning we will ignore all messages from the old\n // ws connection from now on.\n this.wsID += 1;\n\n try {\n this?.ws?.removeAllListeners();\n this?.ws?.close();\n } catch (e) {\n // we don't care\n }\n }\n\n /**\n * _setupPromise - sets up the this.connectOpen promise\n */\n _setupConnectionPromise = () => {\n this.isResolved = false;\n /** a promise that is resolved once ws.open is called */\n this.connectionOpen = new Promise<ConnectionOpen<ErmisChatGenerics>>((resolve, reject) => {\n this.resolvePromise = resolve;\n this.rejectPromise = reject;\n });\n };\n\n /**\n * Schedules a next health check ping for websocket.\n */\n scheduleNextPing = () => {\n if (this.healthCheckTimeoutRef) {\n clearTimeout(this.healthCheckTimeoutRef);\n }\n\n // 30 seconds is the recommended interval (messenger uses this)\n this.healthCheckTimeoutRef = setTimeout(() => {\n // send the healthcheck.., server replies with a health check event\n const data = [{ type: 'health.check', client_id: this.client.clientID }];\n // try to send on the connection\n try {\n this.ws?.send(JSON.stringify(data));\n } catch (e) {\n // error will already be detected elsewhere\n }\n }, this.pingInterval);\n };\n\n /**\n * scheduleConnectionCheck - schedules a check for time difference between last received event and now.\n * If the difference is more than 35 seconds, it means our health check logic has failed and websocket needs\n * to be reconnected.\n */\n scheduleConnectionCheck = () => {\n if (this.connectionCheckTimeoutRef) {\n clearTimeout(this.connectionCheckTimeoutRef);\n }\n\n this.connectionCheckTimeoutRef = setTimeout(() => {\n const now = new Date();\n if (this.lastEvent && now.getTime() - this.lastEvent.getTime() > this.connectionCheckTimeout) {\n this._log('scheduleConnectionCheck - going to reconnect');\n this._setHealth(false);\n this._reconnect();\n }\n }, this.connectionCheckTimeout);\n };\n}\n","import { ExtendableGenerics, DefaultGenerics, UserResponse } from './types';\n\n/**\n * TokenManager\n *\n * Manages token storage and retrieval for the chat client.\n */\nexport class TokenManager<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> {\n loadTokenPromise: Promise<string> | null;\n token?: string;\n user?: UserResponse<ErmisChatGenerics>;\n\n constructor() {\n this.loadTokenPromise = null;\n }\n\n /**\n * Set the static string token.\n */\n setTokenOrProvider = async (tokenOrProvider: string | null, user: UserResponse<ErmisChatGenerics>) => {\n this.user = user;\n\n if (typeof tokenOrProvider === 'string') {\n this.token = tokenOrProvider;\n }\n\n this.loadTokenPromise = Promise.resolve(this.token as string);\n };\n\n /**\n * Resets the token manager.\n */\n reset = () => {\n this.token = undefined;\n this.user = undefined;\n this.loadTokenPromise = null;\n };\n\n /**\n * Resolves when token is ready.\n */\n tokenReady = () => this.loadTokenPromise;\n\n /** Returns the current token */\n getToken = () => {\n return this.token;\n };\n}\n","import { AxiosResponse } from 'axios';\nimport { APIErrorResponse } from './types';\n\nexport const APIErrorCodes: Record<string, { name: string; retryable: boolean }> = {\n '-1': { name: 'InternalSystemError', retryable: true },\n '2': { name: 'AccessKeyError', retryable: false },\n '3': { name: 'AuthenticationFailedError', retryable: true },\n '4': { name: 'InputError', retryable: false },\n '6': { name: 'DuplicateUsernameError', retryable: false },\n '9': { name: 'RateLimitError', retryable: true },\n '16': { name: 'DoesNotExistError', retryable: false },\n '17': { name: 'NotAllowedError', retryable: false },\n '18': { name: 'EventNotSupportedError', retryable: false },\n '19': { name: 'ChannelFeatureNotSupportedError', retryable: false },\n '20': { name: 'MessageTooLongError', retryable: false },\n '21': { name: 'MultipleNestingLevelError', retryable: false },\n '22': { name: 'PayloadTooBigError', retryable: false },\n '23': { name: 'RequestTimeoutError', retryable: true },\n '24': { name: 'MaxHeaderSizeExceededError', retryable: false },\n '40': { name: 'AuthErrorTokenExpired', retryable: false },\n '41': { name: 'AuthErrorTokenNotValidYet', retryable: false },\n '42': { name: 'AuthErrorTokenUsedBeforeIssuedAt', retryable: false },\n '43': { name: 'AuthErrorTokenSignatureInvalid', retryable: false },\n '44': { name: 'CustomCommandEndpointMissingError', retryable: false },\n '45': { name: 'CustomCommandEndpointCallError', retryable: true },\n '60': { name: 'CoolDownError', retryable: true },\n '69': { name: 'ErrWrongRegion', retryable: false },\n '70': { name: 'ErrQueryChannelPermissions', retryable: false },\n '71': { name: 'ErrTooManyConnections', retryable: true },\n '99': { name: 'AppSuspendedError', retryable: false },\n};\n\ntype APIError = Error & { code: number; isWSFailure?: boolean };\n\nexport function isAPIError(error: Error): error is APIError {\n return (error as APIError).code !== undefined;\n}\n\nexport function isErrorRetryable(error: APIError) {\n if (!error.code) return false;\n const err = APIErrorCodes[`${error.code}`];\n if (!err) return false;\n return err.retryable;\n}\n\nexport function isWSFailure(err: APIError): boolean {\n if (typeof err.isWSFailure === 'boolean') {\n return err.isWSFailure;\n }\n\n try {\n return JSON.parse(err.message).isWSFailure;\n } catch (_) {\n return false;\n }\n}\n\nexport function isErrorResponse(res: AxiosResponse<unknown>): res is AxiosResponse<APIErrorResponse> {\n return !res.status || res.status < 200 || 300 <= res.status;\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { StableWSConnection } from './connection';\nimport { EVENT_MAP } from './events';\n\nexport type Role = 'owner' | 'moder' | 'member' | 'pending' | 'skipped' | string;\n\n/* Unknown Record */\nexport type UR = Record<string, unknown>;\nexport type DefaultGenerics = {\n attachmentType: UR;\n channelType: UR;\n commandType: LiteralStringForUnion;\n eventType: UR;\n messageType: UR;\n pollOptionType: UR;\n pollType: UR;\n reactionType: UR;\n userType: UR;\n};\n\nexport type ExtendableGenerics = {\n attachmentType: UR;\n channelType: UR;\n commandType: string;\n eventType: UR;\n messageType: UR;\n pollOptionType: UR;\n pollType: UR;\n reactionType: UR;\n userType: UR;\n};\n\n/**\n * Response Types\n */\n\nexport type APIResponse = {\n duration?: string;\n};\n\nexport type ChannelResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n ErmisChatGenerics['channelType'] & {\n cid: string;\n id: string;\n type: string;\n created_at?: string;\n created_by?: UserResponse<ErmisChatGenerics> | null;\n deleted_at?: string;\n last_message_at?: string;\n member_count?: number;\n members: ChannelMemberResponse<ErmisChatGenerics>[];\n name?: string;\n own_capabilities?: string[];\n updated_at?: string;\n image?: string;\n description?: string;\n member_message_cooldown?: number;\n member_capabilities?: string[];\n is_pinned?: boolean;\n topics_enabled?: boolean;\n is_closed_topic?: boolean;\n };\n\nexport type QueryChannelsAPIResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {\n channels: Omit<ChannelAPIResponse<ErmisChatGenerics>, keyof APIResponse>[];\n};\n\nexport type QueryChannelAPIResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse &\n ChannelAPIResponse<ErmisChatGenerics>;\n\nexport type ChannelAPIResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = {\n channel: ChannelResponse<ErmisChatGenerics>;\n members: ChannelMemberResponse<ErmisChatGenerics>[];\n messages: MessageResponse<ErmisChatGenerics>[];\n pinned_messages: MessageResponse<ErmisChatGenerics>[];\n membership?: ChannelMembership<ErmisChatGenerics> | null;\n read?: ReadResponse<ErmisChatGenerics>[];\n topics?: QueryChannelAPIResponse<ErmisChatGenerics>[];\n watcher_count?: number;\n watchers?: UserResponse<ErmisChatGenerics>[];\n is_pinned?: boolean;\n};\n\nexport type ChannelMemberResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = {\n banned?: boolean;\n blocked?: boolean;\n channel_role?: Role;\n created_at?: string;\n updated_at?: string;\n user?: UserResponse<ErmisChatGenerics>;\n user_id?: string;\n};\n\nexport type ConnectAPIResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n Promise<void | ConnectionOpen<ErmisChatGenerics>>;\n\nexport type FormatMessageResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = Omit<\n MessageResponse<{\n attachmentType: ErmisChatGenerics['attachmentType'];\n channelType: ErmisChatGenerics['channelType'];\n commandType: ErmisChatGenerics['commandType'];\n eventType: ErmisChatGenerics['eventType'];\n messageType: {};\n pollOptionType: ErmisChatGenerics['pollOptionType'];\n pollType: ErmisChatGenerics['pollType'];\n reactionType: ErmisChatGenerics['reactionType'];\n userType: ErmisChatGenerics['userType'];\n }>,\n 'created_at' | 'pinned_at' | 'updated_at' | 'status'\n> &\n ErmisChatGenerics['messageType'] & {\n created_at: Date;\n pinned_at: Date | null;\n status: string;\n updated_at: Date;\n };\n\nexport type MessageResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n MessageResponseBase<ErmisChatGenerics> & {\n quoted_message?: MessageResponseBase<ErmisChatGenerics>;\n };\n\nexport type MessageResponseBase<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n MessageBase<ErmisChatGenerics> & {\n type: MessageLabel;\n channel?: ChannelResponse<ErmisChatGenerics>;\n cid?: string;\n created_at?: string;\n deleted_at?: string;\n latest_reactions?: ReactionResponse<ErmisChatGenerics>[];\n mentioned_users?: string[];\n own_reactions?: ReactionResponse<ErmisChatGenerics>[] | null;\n pinned_at?: string | null;\n pinned_by?: UserResponse<ErmisChatGenerics> | null;\n reaction_counts?: { [key: string]: number } | null;\n reaction_scores?: { [key: string]: number } | null;\n reply_count?: number;\n status?: string;\n updated_at?: string;\n };\n\nexport type ReactionAPIResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {\n message: MessageResponse<ErmisChatGenerics>;\n reaction: ReactionResponse<ErmisChatGenerics>;\n};\n\nexport type ReactionResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n Reaction<ErmisChatGenerics> & {\n created_at: string;\n message_id: string;\n updated_at: string;\n };\n\nexport type ReadResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = {\n last_read: string;\n user: UserResponse<ErmisChatGenerics>;\n last_read_message_id?: string;\n unread_messages?: number;\n last_send?: string;\n};\n\n// Thumb URL(thumb_url) is added considering video attachments as the backend will return the thumbnail in the response.\nexport type SendFileAPIResponse = APIResponse & { file: string; thumb_url?: string };\n\nexport type SendMessageAPIResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {\n message: MessageResponse<ErmisChatGenerics>;\n};\n\nexport type UpdateChannelAPIResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {\n channel: ChannelResponse<ErmisChatGenerics>;\n members: ChannelMemberResponse<ErmisChatGenerics>[];\n message?: MessageResponse<ErmisChatGenerics>;\n};\n\nexport type UserResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n ErmisChatGenerics['userType'] & {\n id: string;\n name?: string;\n avatar?: string;\n about_me?: string;\n project_id?: string;\n email?: string;\n phone?: string;\n };\nexport type Contact = {\n project_id: string;\n user_id: string;\n other_id: string;\n relation_status: string;\n created_at: string;\n updated_at: string;\n};\n\nexport type ContactResponse = APIResponse & {\n project_id_user_ids: {\n [key: string]: Contact[];\n };\n};\n\nexport type ContactResult<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {\n contact_users: UserResponse<ErmisChatGenerics>[];\n block_users: UserResponse<ErmisChatGenerics>[];\n};\n\nexport type ChannelQueryOptions = {\n messages?: {\n limit?: number;\n id_lt?: string;\n id_gt?: string;\n id_around?: string;\n };\n};\n\nexport type ChannelStateOptions = {\n offlineMode?: boolean;\n skipInitialization?: string[];\n};\n\nexport type ErmisChatOptions = AxiosRequestConfig & {\n /**\n * Used to disable warnings that are triggered by using connectUser or connectAnonymousUser server-side.\n */\n allowServerSideConnect?: boolean;\n axiosRequestConfig?: AxiosRequestConfig;\n /**\n * Base url for User BE API (uss/v1). Defaults to baseURL + '/uss/v1' if not provided.\n */\n userBaseURL?: string;\n browser?: boolean;\n enableInsights?: boolean;\n /** experimental feature, please contact support if you want this feature enabled for you */\n logger?: Logger;\n /**\n * When network is recovered, we re-query the active channels on client. But in single query, you can recover\n * only 30 channels. So its not guaranteed that all the channels in activeChannels object have updated state.\n * Thus in UI sdks, state recovery is managed by components themselves, they don't rely on js client for this.\n *\n * `recoverStateOnReconnect` parameter can be used in such cases, to disable state recovery within js client.\n * When false, user/consumer of this client will need to make sure all the channels present on UI by\n * manually calling queryChannels endpoint.\n */\n recoverStateOnReconnect?: boolean;\n warmUp?: boolean;\n // Set the instance of StableWSConnection on chat client. Its purely for testing purpose and should\n // not be used in production apps.\n wsConnection?: StableWSConnection;\n};\n\n/**\n * Event Types\n */\n\nexport type Event<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = ErmisChatGenerics['eventType'] & {\n type: EventTypes;\n channel?: ChannelResponse<ErmisChatGenerics>;\n channel_id?: string;\n channel_type?: string;\n cid?: string;\n created_at?: string;\n hard_delete?: boolean;\n last_read_at?: string;\n last_read_message_id?: string;\n me?: UserResponse<ErmisChatGenerics>;\n member?: ChannelMemberResponse<ErmisChatGenerics>;\n message?: MessageResponse<ErmisChatGenerics>;\n online?: boolean;\n parent_id?: string;\n reaction?: ReactionResponse<ErmisChatGenerics>;\n received_at?: string | Date;\n unread_messages?: number;\n user?: UserResponse<ErmisChatGenerics>;\n user_id?: string;\n watcher_count?: number;\n};\n\nexport type EventHandler<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = (\n event: Event<ErmisChatGenerics>,\n) => void;\n\nexport type EventTypes = 'all' | keyof typeof EVENT_MAP;\n\n/**\n * Filter Types\n */\n\nexport type AscDesc = 1 | -1;\n\nexport type ChannelFilters = {\n project_id?: string;\n type: ('messaging' | 'team' | 'topic')[];\n limit?: number;\n offset?: number;\n roles?: string[];\n other_roles?: string[];\n banned?: boolean;\n blocked?: boolean;\n include_pinned_messages?: boolean;\n parent_cid?: string;\n parent_id?: string;\n include_parent?: boolean;\n};\n\nexport type ChannelSort = {\n field: string;\n direction: -1 | 1;\n}[];\n\nexport type Attachment<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n ErmisChatGenerics['attachmentType'] & {\n // main fields for ermis.\n id?: string;\n thumb_url?: string;\n content_disposition?: string;\n content_length?: number;\n content_type?: string;\n updated_at?: string;\n created_at?: string;\n message_id?: string;\n file_name?: string;\n url?: string;\n cid?: string;\n user_id?: string;\n asset_url?: string;\n author_icon?: string;\n author_link?: string;\n author_name?: string;\n color?: string;\n duration?: number;\n fallback?: string;\n file_size?: number | string;\n footer?: string;\n footer_icon?: string;\n image_url?: string;\n mime_type?: string;\n og_scrape_url?: string;\n original_height?: number;\n original_width?: number;\n pretext?: string;\n text?: string;\n title?: string;\n title_link?: string;\n type?: string;\n waveform_data?: Array<number>;\n link_url?: string;\n };\n\nexport type ChannelData<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n ErmisChatGenerics['channelType'] & {\n members?: string[];\n name?: string;\n is_pinned?: boolean;\n };\n\nexport type ChannelMembership<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = {\n banned?: boolean;\n blocked?: boolean;\n channel_role?: Role;\n created_at?: string;\n updated_at?: string;\n user?: UserResponse<ErmisChatGenerics>;\n};\n\nexport type ConnectionOpen<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = {\n cid?: string;\n created_at?: string;\n me?: UserResponse<ErmisChatGenerics>;\n type?: string;\n};\n\nexport type LiteralStringForUnion = string & {};\n\nexport type LogLevel = 'info' | 'error' | 'warn';\n\nexport type Logger = (logLevel: LogLevel, message: string, extraData?: Record<string, unknown>) => void;\n\nexport type Message<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = Partial<\n MessageBase<ErmisChatGenerics>\n> & {\n id?: string;\n mentioned_all?: boolean;\n mentioned_users?: string[];\n cid?: string;\n forward_cid?: string;\n forward_message_id?: string;\n poll_type?: string; // single | multiple\n poll_choices?: string[];\n sticker_url?: string;\n};\n\nexport type EditMessage = {\n text: string;\n mentioned_all?: boolean;\n mentioned_users?: string[];\n};\n\nexport type ForwardMessage<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = {\n cid: string;\n forward_cid: string;\n forward_message_id: string;\n id?: string;\n text?: string;\n attachments?: Attachment<ErmisChatGenerics>[];\n sticker_url?: string;\n};\n\nexport type PollMessage = {\n id?: string;\n text: string;\n poll_type: string; // single | multiple\n poll_choices: string[];\n};\n\nexport type MessageBase<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n ErmisChatGenerics['messageType'] & {\n id: string;\n attachments?: Attachment[];\n html?: string;\n mml?: string;\n parent_id?: string;\n pinned?: boolean;\n pinned_at?: string | null;\n quoted_message_id?: string;\n text?: string;\n user?: UserResponse | null;\n user_id?: string;\n };\n\nexport type MessageLabel = 'regular' | 'system' | 'signal' | 'poll' | 'sticker' | 'error';\n\nexport type Reaction<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> =\n ErmisChatGenerics['reactionType'] & {\n type: string;\n message_id?: string;\n score?: number;\n user?: UserResponse | null;\n user_id?: string;\n };\n\nexport type MessageSetType = 'latest' | 'current' | 'new';\n\nexport type APIErrorResponse = {\n code: number;\n duration: string;\n message: string;\n more_info: string;\n StatusCode: number;\n};\n\nexport class ErrorFromResponse<T> extends Error {\n code?: number;\n response?: AxiosResponse<T>;\n status?: number;\n}\n\nexport type UsersResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = {\n data: Array<UserResponse<ErmisChatGenerics>>;\n count: number;\n total: number;\n page: number;\n page_count: number;\n};\n\nexport type AttachmentResponse<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> = APIResponse & {\n attachments: Attachment<ErmisChatGenerics>[];\n};\n\nexport type SignalData = {\n cid?: string;\n is_video?: boolean;\n action?: string;\n signal?: Object;\n metadata?: Object;\n};\n\nexport enum CallAction {\n CREATE_CALL = 'create-call',\n ACCEPT_CALL = 'accept-call',\n SIGNAL_CALL = 'signal-call',\n CONNECT_CALL = 'connect-call',\n HEALTH_CALL = 'health-call',\n END_CALL = 'end-call',\n REJECT_CALL = 'reject-call',\n MISS_CALL = 'miss-call',\n UPGRADE_CALL = 'upgrade-call',\n}\n\nexport enum CallStatus {\n RINGING = 'ringing',\n ENDED = 'ended',\n CONNECTED = 'connected',\n ERROR = 'error',\n}\n\nexport type CallEventType = 'incoming' | 'outgoing';\n\nexport type CallEventData = {\n type: CallEventType;\n callType: string;\n cid: string;\n callerInfo: UserCallInfo | undefined;\n receiverInfo: UserCallInfo | undefined;\n metadata?: Object;\n};\n\nexport type UserCallInfo = {\n id: string;\n name?: string;\n avatar?: string;\n};\n\nexport type Metadata = {\n address?: string;\n};\n\nexport type INodeCall = {\n connect: (address: string) => Promise<void>;\n acceptConnection: () => Promise<void>;\n sendControlFrame: (packet: Uint8Array) => Promise<void>;\n sendAudioFrame: (packet: Uint8Array) => Promise<void>; // audio\n sendFrame: (packet: Uint8Array) => Promise<void>; // video delta\n beginWithGop: (packet: Uint8Array) => Promise<void>; // video key\n asyncRecv: () => Promise<Uint8Array>;\n};\n\nexport type VideoConfig = {\n codec: string;\n codedWidth: number;\n codedHeight: number;\n frameRate?: number;\n orientation?: number;\n rotation?: number;\n description?: any;\n};\n\nexport type AudioConfig = {\n codec: string;\n sampleRate: number;\n numberOfChannels: number;\n description?: string;\n};\n\nexport type TransceiverState = {\n audio_enable: boolean;\n video_enable: boolean;\n};\n\nexport interface IMediaReceiverEvents {\n onConnected?: () => void;\n onTransceiverState?: (state: any) => void;\n onRequestConfig?: () => void;\n onRequestKeyFrame?: () => void;\n onEndCall?: () => void;\n}\n\nexport enum FRAME_TYPE {\n VIDEO_CONFIG = 0,\n AUDIO_CONFIG = 1,\n VIDEO_KEY = 2,\n VIDEO_DELTA = 3,\n AUDIO = 4,\n ORIENTATION = 5,\n CONNECTED = 6,\n TRANSCEIVER_STATE = 7,\n REQUEST_CONFIG = 8,\n REQUEST_KEY_FRAME = 9,\n END_CALL = 10,\n}\n","export const EVENT_MAP = {\n 'channel.created': true,\n 'channel.deleted': true,\n 'channel.truncate': true,\n 'channel.updated': true,\n 'channel.pinned': true,\n 'channel.unpinned': true,\n 'health.check': true,\n 'member.added': true,\n 'member.removed': true,\n 'member.updated': true,\n 'member.joined': true,\n 'member.promoted': true,\n 'member.demoted': true,\n 'member.banned': true,\n 'member.unbanned': true,\n 'member.blocked': true,\n 'member.unblocked': true,\n 'message.deleted': true,\n 'message.deleted_for_me': true,\n 'message.new': true,\n 'message.read': true,\n 'message.updated': true,\n 'message.pinned': true,\n 'message.unpinned': true,\n 'notification.channel_deleted': true,\n 'notification.invite_accepted': true,\n 'notification.invite_rejected': true,\n 'notification.invite_messaging_skipped': true,\n 'pollchoice.new': true,\n 'reaction.deleted': true,\n 'reaction.new': true,\n 'typing.start': true,\n 'typing.stop': true,\n 'user.watching.start': true,\n 'user.watching.stop': true,\n 'connection.changed': true,\n 'connection.recovered': true,\n 'capabilities.changed': true,\n 'channel.topic.disabled': true,\n 'channel.topic.enabled': true,\n 'channel.topic.created': true,\n 'channel.topic.closed': true,\n 'channel.topic.reopen': true,\n 'channel.topic.updated': true,\n};\n","let wasm;\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet heap = new Array(128).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n }\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export3(addHeapObject(e));\n }\n}\n\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nconst CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(state => state.dtor(state.a, state.b));\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n state.a = a;\n real._wbg_cb_unref();\n }\n };\n real._wbg_cb_unref = () => {\n if (--state.cnt === 0) {\n state.dtor(state.a, state.b);\n state.a = 0;\n CLOSURE_DTORS.unregister(state);\n }\n };\n CLOSURE_DTORS.register(real, state, state);\n return real;\n}\n\nfunction makeClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n try {\n return f(state.a, state.b, ...args);\n } finally {\n real._wbg_cb_unref();\n }\n };\n real._wbg_cb_unref = () => {\n if (--state.cnt === 0) {\n state.dtor(state.a, state.b);\n state.a = 0;\n CLOSURE_DTORS.unregister(state);\n }\n };\n CLOSURE_DTORS.register(real, state, state);\n return real;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\nfunction __wasm_bindgen_func_elem_12858(arg0, arg1) {\n wasm.__wasm_bindgen_func_elem_12858(arg0, arg1);\n}\n\nfunction __wasm_bindgen_func_elem_11688(arg0, arg1, arg2) {\n wasm.__wasm_bindgen_func_elem_11688(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wasm_bindgen_func_elem_6230(arg0, arg1) {\n wasm.__wasm_bindgen_func_elem_6230(arg0, arg1);\n}\n\nfunction __wasm_bindgen_func_elem_2287(arg0, arg1, arg2) {\n wasm.__wasm_bindgen_func_elem_2287(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wasm_bindgen_func_elem_12912(arg0, arg1, arg2) {\n wasm.__wasm_bindgen_func_elem_12912(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wasm_bindgen_func_elem_5748(arg0, arg1) {\n wasm.__wasm_bindgen_func_elem_5748(arg0, arg1);\n}\n\nfunction __wasm_bindgen_func_elem_14376(arg0, arg1, arg2, arg3) {\n wasm.__wasm_bindgen_func_elem_14376(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\n\nconst __wbindgen_enum_BinaryType = [\"blob\", \"arraybuffer\"];\n\nconst __wbindgen_enum_ReadableStreamType = [\"bytes\"];\n\nconst __wbindgen_enum_RequestCache = [\"default\", \"no-store\", \"reload\", \"no-cache\", \"force-cache\", \"only-if-cached\"];\n\nconst __wbindgen_enum_RequestCredentials = [\"omit\", \"same-origin\", \"include\"];\n\nconst __wbindgen_enum_RequestMode = [\"same-origin\", \"no-cors\", \"cors\", \"navigate\"];\n\nconst ConnectionStatsFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_connectionstats_free(ptr >>> 0, 1));\n\nexport class ConnectionStats {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n ConnectionStatsFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_connectionstats_free(ptr, 0);\n }\n /**\n * @returns {number | undefined}\n */\n get rtt_ms() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.__wbg_get_connectionstats_rtt_ms(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);\n return r0 === 0 ? undefined : r2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number | null} [arg0]\n */\n set rtt_ms(arg0) {\n wasm.__wbg_set_connectionstats_rtt_ms(this.__wbg_ptr, !isLikeNone(arg0), isLikeNone(arg0) ? 0 : arg0);\n }\n /**\n * @returns {number | undefined}\n */\n get packet_loss() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.__wbg_get_connectionstats_packet_loss(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);\n return r0 === 0 ? undefined : r2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number | null} [arg0]\n */\n set packet_loss(arg0) {\n wasm.__wbg_set_connectionstats_packet_loss(this.__wbg_ptr, !isLikeNone(arg0), isLikeNone(arg0) ? 0 : arg0);\n }\n /**\n * @param {string | null} [connection_type]\n * @param {number | null} [rtt_ms]\n * @param {number | null} [packet_loss]\n */\n constructor(connection_type, rtt_ms, packet_loss) {\n var ptr0 = isLikeNone(connection_type) ? 0 : passStringToWasm0(connection_type, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.connectionstats_new(ptr0, len0, !isLikeNone(rtt_ms), isLikeNone(rtt_ms) ? 0 : rtt_ms, !isLikeNone(packet_loss), isLikeNone(packet_loss) ? 0 : packet_loss);\n this.__wbg_ptr = ret >>> 0;\n ConnectionStatsFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * @returns {string | undefined}\n */\n get connection_type() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.connectionstats_connection_type(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n let v1;\n if (r0 !== 0) {\n v1 = getStringFromWasm0(r0, r1).slice();\n wasm.__wbindgen_export4(r0, r1 * 1, 1);\n }\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string | null} [value]\n */\n set connection_type(value) {\n var ptr0 = isLikeNone(value) ? 0 : passStringToWasm0(value, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n var len0 = WASM_VECTOR_LEN;\n wasm.connectionstats_set_connection_type(this.__wbg_ptr, ptr0, len0);\n }\n}\nif (Symbol.dispose) ConnectionStats.prototype[Symbol.dispose] = ConnectionStats.prototype.free;\n\nconst ErmisCallFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_ermiscall_free(ptr >>> 0, 1));\n\nexport class ErmisCall {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n ErmisCallFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_ermiscall_free(ptr, 0);\n }\n constructor() {\n const ret = wasm.ermiscall_new();\n this.__wbg_ptr = ret >>> 0;\n ErmisCallFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * @param {any} relay_urls\n * @param {Uint8Array | null} [secret_key]\n * @returns {Promise<void>}\n */\n spawn(relay_urls, secret_key) {\n var ptr0 = isLikeNone(secret_key) ? 0 : passArray8ToWasm0(secret_key, wasm.__wbindgen_export);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.ermiscall_spawn(this.__wbg_ptr, addHeapObject(relay_urls), ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @returns {Promise<string>}\n */\n getLocalEndpointAddr() {\n const ret = wasm.ermiscall_getLocalEndpointAddr(this.__wbg_ptr);\n return takeObject(ret);\n }\n /**\n * @param {string} addr\n * @returns {Promise<void>}\n */\n connect(addr) {\n const ptr0 = passStringToWasm0(addr, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.ermiscall_connect(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @returns {Promise<void>}\n */\n closeEndpoint() {\n const ret = wasm.ermiscall_closeEndpoint(this.__wbg_ptr);\n return takeObject(ret);\n }\n closeConnection() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.ermiscall_closeConnection(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {Promise<void>}\n */\n acceptConnection() {\n const ret = wasm.ermiscall_acceptConnection(this.__wbg_ptr);\n return takeObject(ret);\n }\n /**\n * @param {Uint8Array} data\n */\n sendControlFrame(data) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);\n const len0 = WASM_VECTOR_LEN;\n wasm.ermiscall_sendControlFrame(retptr, this.__wbg_ptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {Uint8Array} data\n */\n sendAudioFrame(data) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);\n const len0 = WASM_VECTOR_LEN;\n wasm.ermiscall_sendAudioFrame(retptr, this.__wbg_ptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {Uint8Array} data\n */\n sendFrame(data) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);\n const len0 = WASM_VECTOR_LEN;\n wasm.ermiscall_sendFrame(retptr, this.__wbg_ptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n notifyNewGop() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.ermiscall_notifyNewGop(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {Uint8Array}\n */\n recv() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.ermiscall_recv(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {Promise<Uint8Array>}\n */\n asyncRecv() {\n const ret = wasm.ermiscall_asyncRecv(this.__wbg_ptr);\n return takeObject(ret);\n }\n /**\n * @param {Uint8Array} data\n */\n beginWithGop(data) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);\n const len0 = WASM_VECTOR_LEN;\n wasm.ermiscall_beginWithGop(retptr, this.__wbg_ptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {string | undefined}\n */\n connectionType() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.ermiscall_connectionType(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n let v1;\n if (r0 !== 0) {\n v1 = getStringFromWasm0(r0, r1).slice();\n wasm.__wbindgen_export4(r0, r1 * 1, 1);\n }\n return v1;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {number | undefined}\n */\n roundTripTime() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.ermiscall_roundTripTime(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);\n return r0 === 0 ? undefined : r2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {number | undefined}\n */\n currentPacketLoss() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.ermiscall_currentPacketLoss(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);\n return r0 === 0 ? undefined : r2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n networkChange() {\n wasm.ermiscall_networkChange(this.__wbg_ptr);\n }\n /**\n * @returns {any}\n */\n getStats() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.ermiscall_getStats(retptr, this.__wbg_ptr);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n}\nif (Symbol.dispose) ErmisCall.prototype[Symbol.dispose] = ErmisCall.prototype.free;\n\nconst IntoUnderlyingByteSourceFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingbytesource_free(ptr >>> 0, 1));\n\nexport class IntoUnderlyingByteSource {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n IntoUnderlyingByteSourceFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_intounderlyingbytesource_free(ptr, 0);\n }\n /**\n * @returns {ReadableStreamType}\n */\n get type() {\n const ret = wasm.intounderlyingbytesource_type(this.__wbg_ptr);\n return __wbindgen_enum_ReadableStreamType[ret];\n }\n /**\n * @returns {number}\n */\n get autoAllocateChunkSize() {\n const ret = wasm.intounderlyingbytesource_autoAllocateChunkSize(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * @param {ReadableByteStreamController} controller\n */\n start(controller) {\n wasm.intounderlyingbytesource_start(this.__wbg_ptr, addHeapObject(controller));\n }\n /**\n * @param {ReadableByteStreamController} controller\n * @returns {Promise<any>}\n */\n pull(controller) {\n const ret = wasm.intounderlyingbytesource_pull(this.__wbg_ptr, addHeapObject(controller));\n return takeObject(ret);\n }\n cancel() {\n const ptr = this.__destroy_into_raw();\n wasm.intounderlyingbytesource_cancel(ptr);\n }\n}\nif (Symbol.dispose) IntoUnderlyingByteSource.prototype[Symbol.dispose] = IntoUnderlyingByteSource.prototype.free;\n\nconst IntoUnderlyingSinkFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsink_free(ptr >>> 0, 1));\n\nexport class IntoUnderlyingSink {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n IntoUnderlyingSinkFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_intounderlyingsink_free(ptr, 0);\n }\n /**\n * @param {any} chunk\n * @returns {Promise<any>}\n */\n write(chunk) {\n const ret = wasm.intounderlyingsink_write(this.__wbg_ptr, addHeapObject(chunk));\n return takeObject(ret);\n }\n /**\n * @returns {Promise<any>}\n */\n close() {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.intounderlyingsink_close(ptr);\n return takeObject(ret);\n }\n /**\n * @param {any} reason\n * @returns {Promise<any>}\n */\n abort(reason) {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.intounderlyingsink_abort(ptr, addHeapObject(reason));\n return takeObject(ret);\n }\n}\nif (Symbol.dispose) IntoUnderlyingSink.prototype[Symbol.dispose] = IntoUnderlyingSink.prototype.free;\n\nconst IntoUnderlyingSourceFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsource_free(ptr >>> 0, 1));\n\nexport class IntoUnderlyingSource {\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n IntoUnderlyingSourceFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_intounderlyingsource_free(ptr, 0);\n }\n /**\n * @param {ReadableStreamDefaultController} controller\n * @returns {Promise<any>}\n */\n pull(controller) {\n const ret = wasm.intounderlyingsource_pull(this.__wbg_ptr, addHeapObject(controller));\n return takeObject(ret);\n }\n cancel() {\n const ptr = this.__destroy_into_raw();\n wasm.intounderlyingsource_cancel(ptr);\n }\n}\nif (Symbol.dispose) IntoUnderlyingSource.prototype[Symbol.dispose] = IntoUnderlyingSource.prototype.free;\n\nconst EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_Error_e83987f665cf5504 = function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_String_8f0eb39a4a4c2f66 = function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_boolean_get_6d5a1ee65bab5f68 = function(arg0) {\n const v = getObject(arg0);\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n };\n imports.wbg.__wbg___wbindgen_debug_string_df47ffb5e35e6763 = function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_is_function_ee8a6c5833c90377 = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'function';\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_object_c818261d21f283a4 = function(arg0) {\n const val = getObject(arg0);\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_string_fbb76cb2940daafd = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'string';\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_undefined_2d472862bd29a478 = function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n };\n imports.wbg.__wbg___wbindgen_jsval_loose_eq_b664b38a2f582147 = function(arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg___wbindgen_number_get_a20bf9b85341449d = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n };\n imports.wbg.__wbg___wbindgen_string_get_e4f06c90489ad01b = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_throw_b855445ff6a94295 = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg__wbg_cb_unref_2454a539ea5790d9 = function(arg0) {\n getObject(arg0)._wbg_cb_unref();\n };\n imports.wbg.__wbg_abort_28ad55c5825b004d = function(arg0, arg1) {\n getObject(arg0).abort(getObject(arg1));\n };\n imports.wbg.__wbg_abort_e7eb059f72f9ed0c = function(arg0) {\n getObject(arg0).abort();\n };\n imports.wbg.__wbg_addEventListener_40dc0fc428fc49e1 = function() { return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments) };\n imports.wbg.__wbg_append_b577eb3a177bc0fa = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments) };\n imports.wbg.__wbg_body_587542b2fd8e06c0 = function(arg0) {\n const ret = getObject(arg0).body;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_buffer_ccc4520b36d3ccf4 = function(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_byobRequest_2344e6975f27456e = function(arg0) {\n const ret = getObject(arg0).byobRequest;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_byteLength_bcd42e4025299788 = function(arg0) {\n const ret = getObject(arg0).byteLength;\n return ret;\n };\n imports.wbg.__wbg_byteOffset_ca3a6cf7944b364b = function(arg0) {\n const ret = getObject(arg0).byteOffset;\n return ret;\n };\n imports.wbg.__wbg_call_525440f72fbfc0ea = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_call_e762c39fa8ea36bf = function() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_cancel_48ab6f9dc366e369 = function(arg0) {\n const ret = getObject(arg0).cancel();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_catch_943836faa5d29bfb = function(arg0, arg1) {\n const ret = getObject(arg0).catch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_clearTimeout_15dfc3d1dcb635c6 = function() { return handleError(function (arg0, arg1) {\n getObject(arg0).clearTimeout(takeObject(arg1));\n }, arguments) };\n imports.wbg.__wbg_clearTimeout_7a42b49784aea641 = function(arg0) {\n const ret = clearTimeout(takeObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_close_5a6caed3231b68cd = function() { return handleError(function (arg0) {\n getObject(arg0).close();\n }, arguments) };\n imports.wbg.__wbg_close_6956df845478561a = function() { return handleError(function (arg0) {\n getObject(arg0).close();\n }, arguments) };\n imports.wbg.__wbg_close_885e277edf06b3fa = function() { return handleError(function (arg0) {\n getObject(arg0).close();\n }, arguments) };\n imports.wbg.__wbg_code_20d453b11b200026 = function(arg0) {\n const ret = getObject(arg0).code;\n return ret;\n };\n imports.wbg.__wbg_code_218f5fdf8c7fcabd = function(arg0) {\n const ret = getObject(arg0).code;\n return ret;\n };\n imports.wbg.__wbg_crypto_574e78ad8b13b65f = function(arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_data_ee4306d069f24f2d = function(arg0) {\n const ret = getObject(arg0).data;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_done_2042aa2670fb1db1 = function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_enqueue_7b18a650aec77898 = function() { return handleError(function (arg0, arg1) {\n getObject(arg0).enqueue(getObject(arg1));\n }, arguments) };\n imports.wbg.__wbg_fetch_74a3e84ebd2c9a0e = function(arg0) {\n const ret = fetch(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_fetch_f8ba0e29a9d6de0d = function(arg0, arg1) {\n const ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getRandomValues_1c61fac11405ffdc = function() { return handleError(function (arg0, arg1) {\n globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1));\n }, arguments) };\n imports.wbg.__wbg_getRandomValues_b8f5dbd5f3995a9e = function() { return handleError(function (arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n }, arguments) };\n imports.wbg.__wbg_getReader_48e00749fe3f6089 = function() { return handleError(function (arg0) {\n const ret = getObject(arg0).getReader();\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_getTime_14776bfb48a1bff9 = function(arg0) {\n const ret = getObject(arg0).getTime();\n return ret;\n };\n imports.wbg.__wbg_get_7bed016f185add81 = function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_done_a0463af43a1fc764 = function(arg0) {\n const ret = getObject(arg0).done;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n };\n imports.wbg.__wbg_get_efcb449f58ec27c2 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_get_value_5ce96c9f81ce7398 = function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_has_787fafc980c3ccdb = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n }, arguments) };\n imports.wbg.__wbg_headers_b87d7eaba61c3278 = function(arg0) {\n const ret = getObject(arg0).headers;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_70beb1189ca63b38 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Blob_23b3322f66e5a83b = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Blob;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Response_f4f3e87e07f3135c = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Response;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Uint8Array_20c8e73002f7af98 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_isArray_96e0af9891d0945d = function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_iterator_e5822695327a3c39 = function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_length_69bca3cb64fc8748 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_length_cdd215e10d9dd507 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_log_ee0138cca4957740 = function(arg0, arg1) {\n console.log(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_message_bd42dbe3f2f3ed8e = function(arg0, arg1) {\n const ret = getObject(arg1).message;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_msCrypto_a61aeb35a24c1329 = function(arg0) {\n const ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_0_f9740686d739025c = function() {\n const ret = new Date();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_1acc0b6eea89d040 = function() {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_2531773dac38ebb3 = function() { return handleError(function () {\n const ret = new AbortController();\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_new_3c3d849046688a66 = function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return __wasm_bindgen_func_elem_14376(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally {\n state0.a = state0.b = 0;\n }\n };\n imports.wbg.__wbg_new_5a79be3ab53b8aa5 = function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_881c4fe631eee9ad = function() { return handleError(function (arg0, arg1) {\n const ret = new WebSocket(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_new_9edf9838a2def39c = function() { return handleError(function () {\n const ret = new Headers();\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_new_a7442b4b19c1a356 = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_e17d9f43105b08be = function() {\n const ret = new Array();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_from_slice_92f4d78ca282a2d2 = function(arg0, arg1) {\n const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_no_args_ee98eee5275000a4 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_with_byte_offset_and_length_46e3e6a5e9f9e89b = function(arg0, arg1, arg2) {\n const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_with_length_01aa0dc35aa13543 = function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_with_str_and_init_0ae7728b6ec367b1 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_new_with_str_sequence_57a88eb77393f23f = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = new WebSocket(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_next_020810e0ae8ebcb0 = function() { return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_next_2c826fe5dfec6b6a = function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_node_905d3e251edff8a2 = function(arg0) {\n const ret = getObject(arg0).node;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_now_2c95c9de01293173 = function(arg0) {\n const ret = getObject(arg0).now();\n return ret;\n };\n imports.wbg.__wbg_now_793306c526e2e3b6 = function() {\n const ret = Date.now();\n return ret;\n };\n imports.wbg.__wbg_performance_7a3ffd0b17f663ad = function(arg0) {\n const ret = getObject(arg0).performance;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_process_dc0fbacc7c1c06f7 = function(arg0) {\n const ret = getObject(arg0).process;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_prototypesetcall_2a6620b6922694b2 = function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2));\n };\n imports.wbg.__wbg_push_df81a39d04db858c = function(arg0, arg1) {\n const ret = getObject(arg0).push(getObject(arg1));\n return ret;\n };\n imports.wbg.__wbg_queueMicrotask_34d692c25c47d05b = function(arg0) {\n const ret = getObject(arg0).queueMicrotask;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_9d76cacb20c84d58 = function(arg0) {\n queueMicrotask(getObject(arg0));\n };\n imports.wbg.__wbg_randomFillSync_ac0988aba3254290 = function() { return handleError(function (arg0, arg1) {\n getObject(arg0).randomFillSync(takeObject(arg1));\n }, arguments) };\n imports.wbg.__wbg_read_48f1593df542f968 = function(arg0) {\n const ret = getObject(arg0).read();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_readyState_97984f126080aeda = function(arg0) {\n const ret = getObject(arg0).readyState;\n return ret;\n };\n imports.wbg.__wbg_reason_1cced37e3a93763e = function(arg0, arg1) {\n const ret = getObject(arg1).reason;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_releaseLock_5d0b5a68887b891d = function(arg0) {\n getObject(arg0).releaseLock();\n };\n imports.wbg.__wbg_removeEventListener_924d9db66a4f775d = function() { return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments) };\n imports.wbg.__wbg_require_60cc747a6bc5215a = function() { return handleError(function () {\n const ret = module.require;\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_resolve_caf97c30b83f7053 = function(arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_respond_0f4dbf5386f5c73e = function() { return handleError(function (arg0, arg1) {\n getObject(arg0).respond(arg1 >>> 0);\n }, arguments) };\n imports.wbg.__wbg_send_171576d2f7487517 = function() { return handleError(function (arg0, arg1, arg2) {\n getObject(arg0).send(getStringFromWasm0(arg1, arg2));\n }, arguments) };\n imports.wbg.__wbg_send_3d2cf376613294f0 = function() { return handleError(function (arg0, arg1, arg2) {\n getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2));\n }, arguments) };\n imports.wbg.__wbg_setTimeout_4eb823e8b72fbe79 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).setTimeout(takeObject(arg1), arg2);\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_setTimeout_7bb3429662ab1e70 = function(arg0, arg1) {\n const ret = setTimeout(getObject(arg0), arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n };\n imports.wbg.__wbg_set_9e6516df7b7d0f19 = function(arg0, arg1, arg2) {\n getObject(arg0).set(getArrayU8FromWasm0(arg1, arg2));\n };\n imports.wbg.__wbg_set_binaryType_9d839cea8fcdc5c3 = function(arg0, arg1) {\n getObject(arg0).binaryType = __wbindgen_enum_BinaryType[arg1];\n };\n imports.wbg.__wbg_set_body_3c365989753d61f4 = function(arg0, arg1) {\n getObject(arg0).body = getObject(arg1);\n };\n imports.wbg.__wbg_set_cache_2f9deb19b92b81e3 = function(arg0, arg1) {\n getObject(arg0).cache = __wbindgen_enum_RequestCache[arg1];\n };\n imports.wbg.__wbg_set_credentials_f621cd2d85c0c228 = function(arg0, arg1) {\n getObject(arg0).credentials = __wbindgen_enum_RequestCredentials[arg1];\n };\n imports.wbg.__wbg_set_handle_event_b2de49ad6c81e3c8 = function(arg0, arg1) {\n getObject(arg0).handleEvent = getObject(arg1);\n };\n imports.wbg.__wbg_set_headers_6926da238cd32ee4 = function(arg0, arg1) {\n getObject(arg0).headers = getObject(arg1);\n };\n imports.wbg.__wbg_set_method_c02d8cbbe204ac2d = function(arg0, arg1, arg2) {\n getObject(arg0).method = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_set_mode_52ef73cfa79639cb = function(arg0, arg1) {\n getObject(arg0).mode = __wbindgen_enum_RequestMode[arg1];\n };\n imports.wbg.__wbg_set_onclose_c09e4f7422de8dae = function(arg0, arg1) {\n getObject(arg0).onclose = getObject(arg1);\n };\n imports.wbg.__wbg_set_onerror_337a3a2db9517378 = function(arg0, arg1) {\n getObject(arg0).onerror = getObject(arg1);\n };\n imports.wbg.__wbg_set_onmessage_8661558551a89792 = function(arg0, arg1) {\n getObject(arg0).onmessage = getObject(arg1);\n };\n imports.wbg.__wbg_set_onopen_efccb9305427b907 = function(arg0, arg1) {\n getObject(arg0).onopen = getObject(arg1);\n };\n imports.wbg.__wbg_set_signal_dda2cf7ccb6bee0f = function(arg0, arg1) {\n getObject(arg0).signal = getObject(arg1);\n };\n imports.wbg.__wbg_signal_4db5aa055bf9eb9a = function(arg0) {\n const ret = getObject(arg0).signal;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_89e1d9ac6a1b250e = function() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_THIS_8b530f326a9e48ac = function() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_static_accessor_SELF_6fdf4b64710cc91b = function() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_static_accessor_WINDOW_b45bfc5a37f6cfa2 = function() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_status_de7eed5a7a5bfd5d = function(arg0) {\n const ret = getObject(arg0).status;\n return ret;\n };\n imports.wbg.__wbg_stringify_b5fb28f6465d9c3e = function() { return handleError(function (arg0) {\n const ret = JSON.stringify(getObject(arg0));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_subarray_480600f3d6a9f26c = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_4f46f6544e6b4a28 = function(arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_70d05cf780a18d77 = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_url_9bd0af1cd8643de7 = function(arg0, arg1) {\n const ret = getObject(arg1).url;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_url_b36d2a5008eb056f = function(arg0, arg1) {\n const ret = getObject(arg1).url;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_value_692627309814bb8c = function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_versions_c01dfd4722a88165 = function(arg0) {\n const ret = getObject(arg0).versions;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_view_f6c15ac9fed63bbd = function(arg0) {\n const ret = getObject(arg0).view;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_wasClean_3d7c0cf05bd0a123 = function(arg0) {\n const ret = getObject(arg0).wasClean;\n return ret;\n };\n imports.wbg.__wbindgen_cast_0b4723bb5ff7475b = function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 2388, function: Function { arguments: [NamedExternref(\"MessageEvent\")], shim_idx: 2389, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_11664, __wasm_bindgen_func_elem_11688);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_253c73f2760a05aa = function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 1351, function: Function { arguments: [], shim_idx: 1352, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_6219, __wasm_bindgen_func_elem_6230);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_343835dd8f264af2 = function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 1255, function: Function { arguments: [], shim_idx: 1256, ret: Unit, inner_ret: Some(Unit) }, mutable: false }) -> Externref`.\n const ret = makeClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_5735, __wasm_bindgen_func_elem_5748);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_7bacc9fa7d2c65f4 = function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 2465, function: Function { arguments: [], shim_idx: 2466, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_12841, __wasm_bindgen_func_elem_12858);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_88fdcfb6b716b7f8 = function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 2473, function: Function { arguments: [Externref], shim_idx: 2474, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_12896, __wasm_bindgen_func_elem_12912);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_c43a1cf1b94f2e7c = function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 544, function: Function { arguments: [NamedExternref(\"CloseEvent\")], shim_idx: 545, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_2083, __wasm_bindgen_func_elem_2287);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_cb9088102bce6b30 = function(arg0, arg1) {\n // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref(\"Uint8Array\")`.\n const ret = getArrayU8FromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n };\n\n return imports;\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('ermis_call_node_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import { base64Encode, createPacketWithHeader } from './utils';\nimport { AudioConfig, INodeCall, TransceiverState, VideoConfig } from './types';\n\nexport class MediaStreamSender {\n private videoEncoder: VideoEncoder | null = null;\n private audioEncoder: AudioEncoder | null = null;\n private videoReader: ReadableStreamDefaultReader<VideoFrame> | null = null;\n\n private localStream: MediaStream | null = null;\n\n private videoConfig: VideoConfig | null = null;\n private audioConfig: AudioConfig | null = null;\n\n private videoConfigSent: boolean = false;\n private audioConfigSent: boolean = false;\n\n private hasVideo: boolean = false;\n private hasAudio: boolean = false;\n\n private forceKeyFrame: boolean = false;\n\n private nodeCall: INodeCall;\n\n constructor(nodeCall: INodeCall) {\n this.nodeCall = nodeCall;\n }\n\n /**\n * Bắt đầu xử lý MediaStream\n */\n public async connect(address: string): Promise<void> {\n try {\n await this.nodeCall.connect(address);\n await this.sendConnected();\n await this.sendConfigs();\n } catch (error) {\n console.error('Error starting MediaStreamSender:', error);\n }\n }\n\n public async sendConfigs(): Promise<void> {\n try {\n await this.sendTransceiverState(this.hasAudio, this.hasVideo);\n await this.sendAudioConfig();\n\n const videoTrack = this.localStream?.getVideoTracks()[0];\n if (videoTrack) {\n await this.sendVideoConfig();\n }\n } catch (error) {\n console.error('Error sending configs:', error);\n }\n }\n\n /**\n * Dừng và reset encoders\n */\n public stop = (): void => {\n if (this.videoReader) {\n try {\n this.videoReader.cancel('Stream stopped').catch(() => {});\n } catch (e) {}\n this.videoReader = null;\n }\n\n if (this.videoEncoder) {\n try {\n if (this.videoEncoder.state !== 'closed') {\n this.videoEncoder.reset(); // Xả frame\n this.videoEncoder.close();\n }\n } catch (e) {}\n this.videoEncoder = null;\n }\n\n // Reset and close audio encoder\n if (this.audioEncoder) {\n try {\n if (this.audioEncoder.state !== 'closed') {\n this.audioEncoder.reset();\n this.audioEncoder.close();\n }\n } catch (e) {}\n this.audioEncoder = null;\n }\n\n // Reset configs and flags\n this.videoConfig = null;\n this.audioConfig = null;\n\n this.videoConfigSent = false;\n this.audioConfigSent = false;\n this.hasVideo = false;\n this.hasAudio = false;\n\n if (this.localStream) {\n this.localStream.getTracks().forEach((track) => track.stop());\n this.localStream = null;\n }\n };\n\n public initAudioEncoder = (audioTrack: MediaStreamTrack): void => {\n this.localStream = new MediaStream([audioTrack]);\n this.audioConfigSent = false;\n this.hasAudio = !!audioTrack;\n\n const audioEncoder = new AudioEncoder({\n output: (chunk, metadata) => {\n if (metadata?.decoderConfig && !this.audioConfigSent) {\n let description: string | undefined = undefined;\n if (metadata.decoderConfig.description) {\n description = base64Encode(metadata.decoderConfig.description as ArrayBuffer);\n }\n\n this.audioConfig = {\n codec: metadata.decoderConfig.codec ?? 'opus',\n sampleRate: metadata.decoderConfig.sampleRate ?? 48000,\n numberOfChannels: metadata.decoderConfig.numberOfChannels ?? 1,\n ...(description && { description }),\n };\n }\n\n if (chunk && this.isReadyToSendData('audio')) {\n const data = new ArrayBuffer(chunk.byteLength);\n chunk.copyTo(data);\n // const timestamp = Math.floor(chunk.timestamp / 1000);\n const timestamp = chunk.timestamp;\n\n const packet = createPacketWithHeader(data, timestamp, 'audio', null);\n this.sendPacketOrQueue(packet, 'audio', null);\n }\n },\n error: (e) => console.error('AudioEncoder error:', e),\n });\n\n audioEncoder.configure({\n codec: 'mp4a.40.2',\n sampleRate: 48000,\n numberOfChannels: 1,\n bitrate: 128000,\n });\n\n this.audioEncoder = audioEncoder;\n this.processAudioFrames(audioTrack);\n };\n\n public initVideoEncoder(videoTrack: MediaStreamTrack): void {\n if (this.localStream) {\n this.localStream.addTrack(videoTrack);\n }\n\n this.videoConfigSent = false;\n this.hasVideo = !!videoTrack;\n\n const settings = videoTrack.getSettings();\n const videoWidth = settings.width || 1280;\n const videoHeight = settings.height || 720;\n\n const videoEncoder = new VideoEncoder({\n output: async (chunk, metadata) => {\n if (metadata?.decoderConfig && !this.videoConfigSent) {\n let description: string | undefined = undefined;\n if (metadata.decoderConfig.description) {\n description = base64Encode(metadata.decoderConfig.description as ArrayBuffer);\n }\n\n this.videoConfig = {\n codec: metadata.decoderConfig.codec ?? 'hev1.1.6.L93.B0',\n codedWidth: metadata.decoderConfig.codedWidth ?? videoWidth,\n codedHeight: metadata.decoderConfig.codedHeight ?? videoHeight,\n frameRate: 30.0,\n orientation: 0,\n ...(description && { description }),\n };\n\n await this.sendVideoConfig();\n }\n\n if (chunk && this.isReadyToSendData('video')) {\n const data = new ArrayBuffer(chunk.byteLength);\n chunk.copyTo(data);\n const frameType = chunk.type === 'key' ? 'video-key' : 'video-delta';\n // const timestamp = Math.floor(chunk.timestamp / 1000);\n const timestamp = chunk.timestamp;\n\n const packet = createPacketWithHeader(data, timestamp, frameType, null);\n this.sendPacketOrQueue(packet, 'video', frameType);\n }\n },\n error: (e) => console.error('VideoEncoder error:', e),\n });\n\n videoEncoder.configure({\n codec: 'hev1.1.6.L93.B0',\n width: videoWidth,\n height: videoHeight,\n bitrate: 500_000,\n framerate: 30,\n latencyMode: 'realtime',\n hardwareAcceleration: 'prefer-hardware',\n });\n\n this.videoEncoder = videoEncoder;\n this.processVideoFrames(videoTrack);\n }\n\n public initEncoders = (stream: MediaStream): void => {\n const videoTrack = stream.getVideoTracks()[0];\n const audioTrack = stream.getAudioTracks()[0];\n\n if (audioTrack) {\n this.initAudioEncoder(audioTrack);\n }\n\n if (videoTrack) {\n this.initVideoEncoder(videoTrack);\n }\n };\n\n public sendTransceiverState = async (audioEnable: boolean, videoEnable: boolean) => {\n const state: TransceiverState = {\n audio_enable: !!audioEnable,\n video_enable: !!videoEnable,\n };\n const configPacket = createPacketWithHeader(null, null, 'transciverState', state);\n await this.nodeCall.sendControlFrame(configPacket);\n };\n\n public async replaceVideoTrack(track: MediaStreamTrack): Promise<void> {\n // 1. Dừng reader của track cũ (quan trọng)\n if (this.videoReader) {\n try {\n // Việc gọi cancel sẽ làm Promise tại dòng await read() bên dưới throw lỗi hoặc trả về done\n await this.videoReader.cancel('Replacing track');\n } catch (e) {\n // Bỏ qua lỗi khi cancel\n }\n this.videoReader = null;\n }\n\n if (track) {\n this.processVideoFrames(track);\n }\n }\n\n public async replaceAudioTrack(track: MediaStreamTrack): Promise<void> {\n if (track) {\n this.processAudioFrames(track);\n }\n }\n\n /**\n * Yêu cầu gửi keyframe ngay lập tức (được gọi khi nhận REQUEST_KEY_FRAME từ receiver)\n */\n public requestKeyFrame = (): void => {\n console.log('📥 KeyFrame requested');\n this.forceKeyFrame = true;\n };\n\n // ================= PRIVATE METHODS =================\n\n private processVideoFrames = async (videoTrack: MediaStreamTrack) => {\n try {\n // @ts-ignore: MediaStreamTrackProcessor is explicitly defined in WebCodecs types\n const videoProcessor = new MediaStreamTrackProcessor({ track: videoTrack });\n this.videoReader = videoProcessor.readable.getReader();\n\n let frameCounter = 0;\n while (true) {\n if (!this.videoReader) break;\n\n const { done, value: frame } = await this.videoReader.read();\n if (done) break;\n\n if (!this.videoEncoder) {\n frame?.close();\n break;\n }\n\n if (frame) {\n frameCounter += 1;\n const keyFrame = frameCounter % 60 === 0 || this.forceKeyFrame;\n if (this.forceKeyFrame) {\n console.log('📤 Sending forced KeyFrame');\n this.forceKeyFrame = false;\n }\n try {\n this.videoEncoder.encode(frame, { keyFrame });\n } catch (err) {\n console.error('Encode error:', err);\n } finally {\n frame.close();\n }\n }\n }\n } catch (error: any) {\n console.error(`Error processing video frames: ${error.message}`);\n } finally {\n if (this.videoReader) {\n try {\n this.videoReader.releaseLock();\n } catch (e) {}\n // this.videoReader = null;\n }\n }\n };\n\n private processAudioFrames = async (audioTrack: MediaStreamTrack) => {\n // @ts-ignore\n const audioProcessor = new MediaStreamTrackProcessor({ track: audioTrack });\n const audioReader = audioProcessor.readable.getReader();\n\n try {\n while (true) {\n const { done, value: frame } = await audioReader.read();\n if (done) break;\n\n if (!this.audioEncoder) {\n frame?.close();\n break;\n }\n\n if (frame) {\n try {\n this.audioEncoder.encode(frame);\n } catch (err) {\n console.error('Audio Encoding error:', err);\n } finally {\n frame.close();\n }\n }\n }\n } catch (error: any) {\n console.error(`Error processing audio frames: ${error.message}`);\n }\n };\n\n private isReadyToSendData = (type: 'video' | 'audio'): boolean => {\n const videoReady = !this.hasVideo || this.videoConfigSent;\n const audioReady = !this.hasAudio || this.audioConfigSent;\n const allConfigsSent = videoReady && audioReady;\n\n if (type === 'video') {\n return allConfigsSent && this.videoConfigSent;\n } else if (type === 'audio') {\n return allConfigsSent && this.audioConfigSent;\n }\n\n return false;\n };\n\n private sendVideoConfig = async () => {\n if (this.videoConfig && !this.videoConfigSent) {\n try {\n const configPacket = createPacketWithHeader(null, null, 'videoConfig', this.videoConfig);\n await this.nodeCall.sendControlFrame(configPacket);\n this.videoConfigSent = true;\n } catch (error) {\n console.error('Error sending video config:', error);\n }\n }\n };\n\n private sendAudioConfig = async () => {\n if (this.audioConfig && !this.audioConfigSent) {\n try {\n const configPacket = createPacketWithHeader(null, null, 'audioConfig', this.audioConfig);\n await this.nodeCall.sendControlFrame(configPacket);\n this.audioConfigSent = true;\n } catch (error) {\n console.error('Error sending audio config:', error);\n }\n }\n };\n\n public sendConnected = async () => {\n const configPacket = createPacketWithHeader(null, null, 'connected', null);\n await this.nodeCall.sendControlFrame(configPacket);\n };\n\n private sendPacketOrQueue = async (\n packet: Uint8Array,\n type: 'video' | 'audio',\n frameType: 'video-key' | 'video-delta' | null,\n ) => {\n if (!this.isReadyToSendData(type)) {\n return;\n }\n\n if (type === 'audio') {\n await this.nodeCall.sendAudioFrame(packet);\n } else if (type === 'video') {\n if (frameType === 'video-key') {\n await this.nodeCall.beginWithGop(packet);\n } else if (frameType === 'video-delta') {\n await this.nodeCall.sendFrame(packet);\n }\n }\n };\n}\n","// 1. Định nghĩa các hằng số NAL Unit\nexport const NALUnitType = {\n VPS_NUT: 32,\n SPS_NUT: 33,\n PPS_NUT: 34,\n PREFIX_SEI_NUT: 39,\n SUFFIX_SEI_NUT: 40,\n\n fromValue(value: number): string | number {\n const types: Record<number, string> = {\n 32: 'VPS_NUT',\n 33: 'SPS_NUT',\n 34: 'PPS_NUT',\n 39: 'PREFIX_SEI_NUT',\n 40: 'SUFFIX_SEI_NUT',\n };\n return types[value] || value;\n },\n} as const;\n\n// 2. Interface cho mảng NAL Unit bên trong config\nexport interface INALArray {\n arrayCompleteness: boolean;\n nalUnitType: string | number;\n nalus: Uint8Array[];\n}\n\n// 3. Interface cho cấu hình HEVC (giúp strict type checking)\nexport interface IHEVCConfig {\n generalProfileSpace: number;\n generalTierFlag: boolean;\n generalProfileIdc: number;\n generalProfileCompatibilityFlags: number;\n generalConstraintIndicatorFlags: number;\n generalLevelIdc: number;\n minSpatialSegmentationIdc: number;\n parallelismType: number;\n chromaFormatIdc: number;\n bitDepthLumaMinus8: number;\n bitDepthChromaMinus8: number;\n avgFrameRate: number;\n constantFrameRate: number;\n numTemporalLayers: number;\n temporalIdNested: boolean;\n lengthSizeMinusOne: number;\n arrays: INALArray[];\n}\n\nexport class HEVCDecoderConfigurationRecord implements IHEVCConfig {\n // Khai báo các thuộc tính của class\n public generalProfileSpace: number = 0;\n public generalTierFlag: boolean = false;\n public generalProfileIdc: number = 0;\n public generalProfileCompatibilityFlags: number = 0;\n public generalConstraintIndicatorFlags: number = 0;\n public generalLevelIdc: number = 0;\n public minSpatialSegmentationIdc: number = 0;\n public parallelismType: number = 0;\n public chromaFormatIdc: number = 0;\n public bitDepthLumaMinus8: number = 0;\n public bitDepthChromaMinus8: number = 0;\n public avgFrameRate: number = 0;\n public constantFrameRate: number = 0;\n public numTemporalLayers: number = 0;\n public temporalIdNested: boolean = false;\n public lengthSizeMinusOne: number = 0;\n public arrays: INALArray[] = [];\n\n constructor(config: IHEVCConfig) {\n Object.assign(this, config);\n }\n\n /**\n * Demuxes an HEVCDecoderConfigurationRecord from a byte buffer.\n * @param data - The byte data to parse\n */\n static demux(data: ArrayBuffer | Uint8Array): HEVCDecoderConfigurationRecord {\n const buffer = data instanceof Uint8Array ? data : new Uint8Array(data);\n const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n\n let offset = 0;\n let bitOffset = 0;\n\n // Helper to read bits\n const readBits = (numBits: number): number => {\n let result = 0;\n for (let i = 0; i < numBits; i++) {\n if (offset >= buffer.length) throw new Error('End of buffer');\n const bit = (buffer[offset] >> (7 - bitOffset)) & 1;\n result = (result << 1) | bit;\n bitOffset++;\n if (bitOffset === 8) {\n bitOffset = 0;\n offset++;\n }\n }\n return result;\n };\n\n // Helper to read a byte\n const readU8 = (): number => {\n if (bitOffset !== 0) return readBits(8);\n if (offset >= buffer.length) throw new Error('End of buffer');\n return buffer[offset++];\n };\n\n // Helper to read 16-bit big-endian\n const readU16BE = (): number => {\n if (bitOffset !== 0) return readBits(16);\n const val = view.getUint16(offset, false);\n offset += 2;\n return val;\n };\n\n // Helper to read 32-bit big-endian\n const readU32BE = (): number => {\n if (bitOffset !== 0) return readBits(32);\n const val = view.getUint32(offset, false);\n offset += 4;\n return val;\n };\n\n // Helper to read 48-bit big-endian\n const readU48BE = (): number => {\n const high = readU16BE();\n const low = readU32BE();\n return high * 0x100000000 + low;\n };\n\n // Helper to read exact bytes\n const readExact = (length: number): Uint8Array => {\n if (bitOffset !== 0) {\n const result = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n result[i] = readBits(8);\n }\n return result;\n }\n if (offset + length > buffer.length) throw new Error('End of buffer');\n const result = buffer.slice(offset, offset + length);\n offset += length;\n return result;\n };\n\n // Parse configuration version\n const configurationVersion = readU8();\n if (configurationVersion !== 1) {\n throw new Error('Invalid configuration version');\n }\n\n // Parse profile information\n const generalProfileSpace = readBits(2);\n const generalTierFlag = readBits(1) === 1;\n const generalProfileIdc = readBits(5);\n const generalProfileCompatibilityFlags = readU32BE();\n const generalConstraintIndicatorFlags = readU48BE();\n const generalLevelIdc = readU8();\n\n // Parse spatial segmentation\n readBits(4); // reserved_4bits\n const minSpatialSegmentationIdc = readBits(12);\n\n // Parse parallelism type\n readBits(6); // reserved_6bits\n const parallelismType = readBits(2);\n\n // Parse chroma format\n readBits(6); // reserved_6bits\n const chromaFormatIdc = readBits(2);\n\n // Parse bit depth (luma)\n readBits(5); // reserved_5bits\n const bitDepthLumaMinus8 = readBits(3);\n\n // Parse bit depth (chroma)\n readBits(5); // reserved_5bits\n const bitDepthChromaMinus8 = readBits(3);\n\n // Parse frame rate and temporal information\n const avgFrameRate = readU16BE();\n const constantFrameRate = readBits(2);\n const numTemporalLayers = readBits(3);\n const temporalIdNested = readBits(1) === 1;\n const lengthSizeMinusOne = readBits(2);\n\n if (lengthSizeMinusOne === 2) {\n throw new Error('length_size_minus_one must be 0, 1, or 3');\n }\n\n // Parse NALU arrays\n const numOfArrays = readU8();\n const arrays: INALArray[] = [];\n\n for (let i = 0; i < numOfArrays; i++) {\n const arrayCompleteness = readBits(1) === 1;\n readBits(1); // reserved\n const nalUnitType = readBits(6);\n const nalUnitTypeName = NALUnitType.fromValue(nalUnitType);\n\n if (\n nalUnitType !== NALUnitType.VPS_NUT &&\n nalUnitType !== NALUnitType.SPS_NUT &&\n nalUnitType !== NALUnitType.PPS_NUT &&\n nalUnitType !== NALUnitType.PREFIX_SEI_NUT &&\n nalUnitType !== NALUnitType.SUFFIX_SEI_NUT\n ) {\n // Có thể comment dòng này nếu muốn hỗ trợ các loại NALU khác không chuẩn\n // throw new Error('Invalid nal_unit_type');\n }\n\n const numNalus = readU16BE();\n const nalus: Uint8Array[] = [];\n\n for (let j = 0; j < numNalus; j++) {\n const nalUnitLength = readU16BE();\n const naluData = readExact(nalUnitLength);\n nalus.push(naluData);\n }\n\n arrays.push({\n arrayCompleteness,\n nalUnitType: nalUnitTypeName,\n nalus,\n });\n }\n\n return new HEVCDecoderConfigurationRecord({\n generalProfileSpace,\n generalTierFlag,\n generalProfileIdc,\n generalProfileCompatibilityFlags,\n generalConstraintIndicatorFlags,\n generalLevelIdc,\n minSpatialSegmentationIdc,\n parallelismType,\n chromaFormatIdc,\n bitDepthLumaMinus8,\n bitDepthChromaMinus8,\n avgFrameRate,\n constantFrameRate,\n numTemporalLayers,\n temporalIdNested,\n lengthSizeMinusOne,\n arrays,\n });\n }\n\n /**\n * Converts the HEVC configuration to a codec string (RFC 6381 format).\n * @returns Codec string like \"hev1.1.6.L93.B0\"\n */\n toCodecString(): string {\n const profileSpaceMap: Record<number, string> = { 0: '', 1: 'A', 2: 'B', 3: 'C' };\n const generalProfileSpace = profileSpaceMap[this.generalProfileSpace];\n\n if (generalProfileSpace === undefined) {\n throw new Error('Unknown profile space');\n }\n\n const profileAndSpace = `${generalProfileSpace}${this.generalProfileIdc}`;\n\n // Format profile compatibility flags (reverse hex and strip trailing zeros)\n let profileCompatibilityFlagsUnfiltered = this.generalProfileCompatibilityFlags\n .toString(16)\n .padStart(8, '0')\n .split('')\n .reverse()\n .join('');\n\n let profileCompatibilityFlags = '';\n for (let i = 0; i < profileCompatibilityFlagsUnfiltered.length; i++) {\n const char = profileCompatibilityFlagsUnfiltered[i];\n if (char !== '0' || i === 0) {\n profileCompatibilityFlags += char;\n }\n }\n\n // Format tier and level\n const generalTierFlag = this.generalTierFlag ? 'H' : 'L';\n const tierAndLevel = `${generalTierFlag}${this.generalLevelIdc}`;\n\n // Format constraint flags (skip first 2 bytes of 48-bit value)\n let constraintFlags = '';\n\n // Convert 48-bit number to 6 bytes\n const constraint = this.generalConstraintIndicatorFlags;\n const bytes = [\n Math.floor(constraint / 0x10000000000) & 0xff,\n Math.floor(constraint / 0x100000000) & 0xff,\n Math.floor(constraint / 0x1000000) & 0xff,\n Math.floor(constraint / 0x10000) & 0xff,\n Math.floor(constraint / 0x100) & 0xff,\n constraint & 0xff,\n ];\n\n // Skip first 2 bytes (bytes[0] and bytes[1]) per Logic\n for (let i = 2; i < 6; i++) {\n if (bytes[i] !== 0) {\n constraintFlags += `.${bytes[i].toString(16).padStart(2, '0')}`;\n }\n }\n\n return `hev1.${profileAndSpace}.${profileCompatibilityFlags}.${tierAndLevel}${constraintFlags}`;\n }\n}\n","import { replaceCodecNumber } from './utils';\nimport { FRAME_TYPE, IMediaReceiverEvents, INodeCall, VideoConfig } from './types';\nimport { HEVCDecoderConfigurationRecord } from './hevc_decoder_config';\n\n// Các biến cấu hình Audio Sync\nconst MAX_AUDIO_LATENCY = 0.1; // 100ms\nconst MIN_BUFFER_AHEAD = 0.02; // 20ms\n\nexport class MediaStreamReceiver {\n private videoDecoder: VideoDecoder | null = null;\n private audioDecoder: AudioDecoder | null = null;\n\n // WritableStreamDefaultWriter<VideoFrame> là type chuẩn của WebCodecs\n private videoWriter: WritableStreamDefaultWriter<VideoFrame> | null = null;\n\n private audioContext: AudioContext | null = null;\n private mediaDestination: MediaStreamAudioDestinationNode | null = null;\n\n private isWaitingForKeyFrame: boolean = true;\n private nextStartTime: number = 0;\n private lastVideoConfig: VideoConfig | null = null;\n\n private nodeCall: INodeCall;\n private events: IMediaReceiverEvents;\n\n private generatedStream: MediaStream | null = null;\n\n constructor(nodeCall: INodeCall, events: IMediaReceiverEvents = {}) {\n this.nodeCall = nodeCall;\n this.events = events;\n }\n\n public async acceptConnection(): Promise<void> {\n try {\n await this.nodeCall.acceptConnection();\n } catch (error) {\n console.error('❌ Error starting MediaStreamReceiver:', error);\n }\n }\n\n public getRemoteStream = (): MediaStream | null => {\n return this.generatedStream;\n };\n\n /**\n * Dừng toàn bộ quá trình và giải phóng tài nguyên\n */\n public stop = (): void => {\n this.resetDecoders();\n };\n\n // ================= PRIVATE METHODS =================\n\n private initAudioContext = async (): Promise<void> => {\n if (!this.audioContext || this.audioContext.state === 'closed') {\n const AudioContextClass = window.AudioContext || (window as any).webkitAudioContext;\n this.audioContext = new AudioContextClass({\n sampleRate: 48000,\n latencyHint: 'interactive',\n });\n\n this.mediaDestination = this.audioContext.createMediaStreamDestination();\n\n if (this.audioContext.state === 'suspended') {\n await this.audioContext.resume();\n }\n this.nextStartTime = this.audioContext.currentTime + MIN_BUFFER_AHEAD;\n }\n };\n\n public initDecoders = (callType: string): void => {\n // 1. Audio Decoder Setup\n if (this.audioDecoder) this.audioDecoder.close();\n\n // 2. Setup Audio Context & Streams\n this.initAudioContext();\n\n // Đảm bảo mediaDestination đã được tạo trong initAudioContext\n if (this.mediaDestination) {\n const audioTrack = this.mediaDestination.stream.getAudioTracks()[0];\n\n // Khởi tạo stream với 1 track audio\n this.generatedStream = new MediaStream([audioTrack]);\n }\n\n this.isWaitingForKeyFrame = true;\n\n // 3. Init AudioDecoder\n this.audioDecoder = new AudioDecoder({\n output: (audioData) => this.playDecodedAudio(audioData),\n error: (err) => console.error('AudioDecoder error:', err),\n });\n\n if (callType === 'video') {\n // 4. Setup VideoDecoder\n this.setupVideoDecoder();\n }\n\n this.receiveLoop();\n };\n\n public setupVideoDecoder = (): void => {\n if (!this.videoWriter) return;\n\n if (this.videoDecoder) {\n try {\n if (this.videoDecoder.state !== 'closed') this.videoDecoder.close();\n } catch (e) {\n /* ignore */\n }\n }\n\n const videoDecoder = new VideoDecoder({\n output: async (frame) => {\n try {\n if (!this.videoWriter) {\n frame.close();\n return;\n }\n\n // Backpressure check: Nếu writer đang bận, drop frame để tránh overflow\n if (this.videoWriter.desiredSize! <= 0) {\n frame.close();\n return;\n }\n\n await this.videoWriter.write(frame);\n } catch (err) {\n frame.close();\n // console.error('Frame write error:', err);\n } finally {\n frame.close();\n }\n },\n error: (err) => {\n console.error('❌ VideoDecoder CRASHED:', err);\n this.isWaitingForKeyFrame = true;\n\n if (this.videoWriter) {\n // Chỉ hồi sinh nếu Writer vẫn còn sống\n console.log('♻️ Attempting to respawn VideoDecoder...');\n this.setupVideoDecoder();\n if (this.lastVideoConfig && this.videoDecoder) {\n try {\n this.videoDecoder.configure(this.lastVideoConfig);\n } catch (configErr) {}\n }\n }\n },\n });\n\n this.videoDecoder = videoDecoder;\n };\n\n private playDecodedAudio = (audioData: AudioData): void => {\n try {\n if (!this.audioContext || !this.mediaDestination) {\n audioData.close();\n return;\n }\n\n const { numberOfChannels, numberOfFrames, sampleRate } = audioData;\n const duration = numberOfFrames / sampleRate;\n const currentTime = this.audioContext.currentTime;\n\n // --- XỬ LÝ LATENCY & SYNC ---\n if (this.nextStartTime < currentTime) {\n this.nextStartTime = currentTime;\n } else if (this.nextStartTime > currentTime + MAX_AUDIO_LATENCY) {\n // Nếu buffer quá lớn (latency cao), reset về thời điểm hiện tại\n this.nextStartTime = currentTime + MIN_BUFFER_AHEAD;\n }\n\n const audioBuffer = this.audioContext.createBuffer(numberOfChannels, numberOfFrames, sampleRate);\n const size = numberOfChannels * numberOfFrames;\n const tempBuffer = new Float32Array(size);\n\n audioData.copyTo(tempBuffer, { planeIndex: 0, format: 'f32-planar' });\n\n for (let ch = 0; ch < numberOfChannels; ch++) {\n const channelData = tempBuffer.subarray(ch * numberOfFrames, (ch + 1) * numberOfFrames);\n audioBuffer.copyToChannel(channelData, ch);\n }\n\n const source = this.audioContext.createBufferSource();\n source.buffer = audioBuffer;\n source.connect(this.mediaDestination);\n\n source.start(this.nextStartTime);\n this.nextStartTime += duration;\n\n audioData.close();\n } catch (err) {\n console.error('Error in playDecodedAudio:', err);\n audioData?.close();\n }\n };\n\n private newCodecFromDescription = (buffer: ArrayBuffer, receivedCodec: string): string => {\n // Chỉ check nếu codec là HEVC (hvc1 hoặc hev1)\n if (!receivedCodec.toLowerCase().includes('hvc') && !receivedCodec.toLowerCase().includes('hev')) return '';\n\n try {\n const record = HEVCDecoderConfigurationRecord.demux(buffer);\n return record.toCodecString();\n } catch (error) {\n return '';\n }\n };\n\n // Vòng lặp chính xử lý dữ liệu\n public receiveLoop = async (): Promise<void> => {\n const textDecoder = new TextDecoder();\n\n while (true) {\n try {\n if (!this.nodeCall) break;\n\n // Gọi hàm nhận dữ liệu async\n const data = await this.nodeCall.asyncRecv();\n\n const dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const frameType = dataView.getUint8(0);\n\n // const frameTypeName =\n // {\n // [FRAME_TYPE.VIDEO_CONFIG]: 'VIDEO_CONFIG',\n // [FRAME_TYPE.AUDIO_CONFIG]: 'AUDIO_CONFIG',\n // [FRAME_TYPE.VIDEO_KEY]: 'VIDEO_KEY',\n // [FRAME_TYPE.VIDEO_DELTA]: 'VIDEO_DELTA',\n // [FRAME_TYPE.AUDIO]: 'AUDIO',\n // [FRAME_TYPE.CONNECTED]: 'CONNECTED',\n // [FRAME_TYPE.TRANSCEIVER_STATE]: 'TRANSCEIVER_STATE',\n // [FRAME_TYPE.ORIENTATION]: 'ORIENTATION',\n // [FRAME_TYPE.REQUEST_CONFIG]: 'REQUEST_CONFIG',\n // [FRAME_TYPE.REQUEST_KEY_FRAME]: 'REQUEST_KEY_FRAME',\n // [FRAME_TYPE.END_CALL]: 'END_CALL',\n // }[frameType] || 'UNKNOWN';\n\n // console.log(`----frameType ${frameTypeName}----`, frameType);\n\n const payloadOffset = (\n [\n FRAME_TYPE.VIDEO_CONFIG,\n FRAME_TYPE.AUDIO_CONFIG,\n FRAME_TYPE.CONNECTED,\n FRAME_TYPE.TRANSCEIVER_STATE,\n FRAME_TYPE.ORIENTATION,\n FRAME_TYPE.REQUEST_CONFIG,\n FRAME_TYPE.REQUEST_KEY_FRAME,\n FRAME_TYPE.END_CALL,\n ] as number[]\n ).includes(frameType)\n ? 1\n : 9; // 1 byte type + 8 bytes timestamp\n\n const payload = new Uint8Array(data.buffer, data.byteOffset + payloadOffset, data.byteLength - payloadOffset);\n\n switch (frameType) {\n // --- VIDEO CONFIG ---\n case FRAME_TYPE.VIDEO_CONFIG: {\n try {\n const videoConfigStr = textDecoder.decode(payload);\n const videoConfig = JSON.parse(videoConfigStr);\n console.log('--videoConfig--', videoConfig);\n\n // Setup Video Track Writer & Combine Streams\n if (!this.videoWriter) {\n // @ts-ignore: MediaStreamTrackGenerator types\n const videoTrackGenerator = new MediaStreamTrackGenerator({ kind: 'video' });\n this.videoWriter = videoTrackGenerator.writable.getWriter();\n\n // MERGE: Add Video Track vào Stream Audio đã có sẵn\n if (this.generatedStream) {\n this.generatedStream.addTrack(videoTrackGenerator);\n }\n }\n\n if (!this.videoDecoder) {\n this.setupVideoDecoder();\n }\n\n this.isWaitingForKeyFrame = true;\n\n let descriptionBuffer: ArrayBuffer | undefined = undefined;\n if (videoConfig.description) {\n try {\n const binaryString = atob(videoConfig.description);\n const desc = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n desc[i] = binaryString.charCodeAt(i);\n }\n descriptionBuffer = desc.buffer;\n } catch (e) {}\n }\n\n // const newCodec = replaceCodecNumber(videoConfig.codec);\n\n let newCodec: string = '';\n if (descriptionBuffer) {\n newCodec =\n this.newCodecFromDescription(descriptionBuffer, videoConfig.codec) ||\n replaceCodecNumber(videoConfig.codec);\n }\n\n const decoderConfig: VideoConfig = {\n codec: newCodec,\n frameRate: videoConfig.frameRate,\n codedWidth: videoConfig.codedWidth,\n codedHeight: videoConfig.codedHeight,\n ...(videoConfig.orientation && { rotation: videoConfig.orientation }),\n ...(descriptionBuffer && { description: descriptionBuffer }),\n };\n\n this.lastVideoConfig = decoderConfig;\n\n if (this.videoDecoder && this.videoDecoder.state !== 'closed') {\n const support = await VideoDecoder.isConfigSupported(decoderConfig);\n if (support.supported) {\n this.videoDecoder.configure(decoderConfig);\n this.isWaitingForKeyFrame = true;\n } else {\n console.error('❌ Browser does not support this video config:', decoderConfig);\n }\n }\n } catch (error) {\n console.error('❌ Error processing VIDEO_CONFIG:', error);\n }\n break;\n }\n\n // --- AUDIO CONFIG ---\n case FRAME_TYPE.AUDIO_CONFIG: {\n const audioConfig = JSON.parse(textDecoder.decode(payload));\n console.log('--audioConfig--', audioConfig);\n\n if (this.audioDecoder?.state !== 'closed') {\n this.audioDecoder?.configure({\n codec: audioConfig.codec,\n sampleRate: audioConfig.sampleRate,\n numberOfChannels: audioConfig.numberOfChannels,\n });\n }\n break;\n }\n\n // --- VIDEO DATA ---\n case FRAME_TYPE.VIDEO_KEY:\n case FRAME_TYPE.VIDEO_DELTA: {\n if (!this.videoDecoder || this.videoDecoder.state !== 'configured') break;\n const isKeyFrame = frameType === FRAME_TYPE.VIDEO_KEY;\n\n if (this.isWaitingForKeyFrame) {\n if (!isKeyFrame) break;\n console.log('✅ Resumed decoding at KeyFrame');\n this.isWaitingForKeyFrame = false;\n }\n\n if (!isKeyFrame && this.videoDecoder.decodeQueueSize > 15) {\n console.warn('⚠️ Queue > 15. Dropping & Waiting for KeyFrame...');\n // Nếu drop bất kỳ frame nào, ta phải chờ Key Frame tiếp theo mới decode được\n this.isWaitingForKeyFrame = true;\n break;\n }\n\n // const timestamp = dataView.getUint32(1, false);\n const timestampBigInt = dataView.getBigUint64(1, false);\n const timestamp = Number(timestampBigInt);\n\n try {\n this.videoDecoder.decode(\n new EncodedVideoChunk({\n type: isKeyFrame ? 'key' : 'delta',\n timestamp: timestamp,\n data: payload,\n }),\n );\n } catch (decodeErr) {\n console.error('Video decode failed:', decodeErr);\n if ((this.videoDecoder as VideoDecoder).state === 'closed') {\n // this.setupVideoDecoder();\n // if (this.lastVideoConfig) {\n // this.videoDecoder?.configure(this.lastVideoConfig);\n // }\n this.isWaitingForKeyFrame = true;\n }\n }\n break;\n }\n\n // --- AUDIO DATA ---\n case FRAME_TYPE.AUDIO: {\n if (this.audioDecoder?.state === 'configured') {\n // const timestamp = dataView.getUint32(1, false);\n const timestampBigInt = dataView.getBigUint64(1, false);\n const timestamp = Number(timestampBigInt);\n this.audioDecoder.decode(\n new EncodedAudioChunk({\n type: 'key',\n timestamp: timestamp,\n data: payload,\n }),\n );\n }\n break;\n }\n\n case FRAME_TYPE.CONNECTED:\n if (this.events.onConnected) {\n this.events.onConnected();\n }\n break;\n\n case FRAME_TYPE.TRANSCEIVER_STATE:\n const transceiverState = JSON.parse(textDecoder.decode(payload));\n if (this.events.onTransceiverState) {\n this.events.onTransceiverState(transceiverState);\n }\n break;\n\n case FRAME_TYPE.ORIENTATION: {\n const orientation = dataView.getInt32(1, false);\n if (this.videoDecoder && this.lastVideoConfig && this.lastVideoConfig.rotation !== orientation) {\n this.lastVideoConfig.rotation = orientation;\n try {\n // 1. Configure lại với rotation mới\n this.videoDecoder.configure(this.lastVideoConfig);\n\n // 2. QUAN TRỌNG: Phải chờ KeyFrame mới để tránh lỗi decode Delta frame sau khi reset\n this.isWaitingForKeyFrame = true;\n\n console.log('🔄 Reconfigured rotation to', orientation, '- Waiting for next KeyFrame');\n } catch (configErr) {\n console.error('Error reconfiguring VideoDecoder with new orientation:', configErr);\n }\n }\n break;\n }\n\n case FRAME_TYPE.REQUEST_CONFIG:\n console.log('📥 Received REQUEST_CONFIG');\n if (this.events.onRequestConfig) {\n this.events.onRequestConfig();\n }\n break;\n\n case FRAME_TYPE.REQUEST_KEY_FRAME:\n console.log('📥 Received REQUEST_KEY_FRAME');\n if (this.events.onRequestKeyFrame) {\n this.events.onRequestKeyFrame();\n }\n break;\n\n case FRAME_TYPE.END_CALL:\n console.log('📥 Received END_CALL');\n if (this.events.onEndCall) {\n this.events.onEndCall();\n }\n break;\n\n default:\n console.warn('❓ Unknown frame type received:', frameType);\n break;\n }\n } catch (error) {\n console.error('Stream loop error', error);\n // Có thể thêm delay nhỏ ở đây để tránh spam error nếu loop lỗi liên tục\n await new Promise((r) => setTimeout(r, 200));\n }\n }\n };\n\n private resetDecoders = (): void => {\n if (this.videoWriter) {\n try {\n this.videoWriter.abort('Stream stopped').catch(() => {});\n this.videoWriter.releaseLock();\n } catch (e) {\n console.warn('Error closing video writer:', e);\n }\n this.videoWriter = null;\n }\n\n if (this.videoDecoder) {\n try {\n if (this.videoDecoder.state !== 'closed') {\n this.videoDecoder.reset();\n this.videoDecoder.close();\n }\n } catch (e) {}\n this.videoDecoder = null;\n }\n\n if (this.audioDecoder) {\n try {\n if (this.audioDecoder.state !== 'closed') {\n this.audioDecoder.reset();\n this.audioDecoder.close();\n }\n } catch (e) {}\n this.audioDecoder = null;\n }\n\n // Đóng AudioContext\n if (this.audioContext) {\n try {\n this.audioContext.close();\n } catch (e) {\n console.warn('Error closing audio context:', e);\n }\n this.audioContext = null;\n }\n\n // Reset các biến\n this.isWaitingForKeyFrame = true;\n this.mediaDestination = null;\n this.nextStartTime = 0;\n this.lastVideoConfig = null;\n\n if (this.generatedStream) {\n this.generatedStream.getTracks().forEach((track) => track.stop());\n this.generatedStream = null;\n }\n };\n}\n","import { ErmisChat } from './client';\nimport init, { ErmisCall } from './wasm/ermis_call_node_wasm';\nimport {\n CallAction,\n CallEventData,\n CallStatus,\n DefaultGenerics,\n Event,\n ExtendableGenerics,\n Metadata,\n SignalData,\n UserCallInfo,\n} from './types';\nimport { MediaStreamSender } from './media_stream_sender';\nimport { MediaStreamReceiver } from './media_stream_receiver';\n\nexport class ErmisCallNode<ErmisChatGenerics extends ExtendableGenerics = DefaultGenerics> {\n wasmPath: string;\n\n relayUrl = 'https://test-iroh.ermis.network.:8443';\n\n /** Reference to the Ermis Chat client instance */\n _client: ErmisChat<ErmisChatGenerics>;\n\n /** Unique identifier for the current call session */\n sessionID: string;\n\n /** Channel ID for communication between users */\n cid?: string;\n\n /** Type of call: 'audio' or 'video' */\n callType?: string;\n\n /** ID of the current user */\n userID?: string | undefined;\n\n /** Current status of the call */\n callStatus? = '';\n\n metadata?: Metadata;\n\n callNode: ErmisCall | null = null;\n\n /** Local media stream from user's camera/microphone */\n localStream?: MediaStream | null = null;\n\n /** Remote media stream from the other participant */\n remoteStream?: MediaStream | null = null;\n\n /** Information about the caller */\n callerInfo?: UserCallInfo;\n\n /** Information about the call receiver */\n receiverInfo?: UserCallInfo;\n\n /** Callback triggered when call events occur (incoming/outgoing) */\n onCallEvent?: (data: CallEventData) => void;\n\n /** Callback triggered when local stream is available */\n onLocalStream?: (stream: MediaStream) => void;\n\n /** Callback triggered when remote stream is available */\n onRemoteStream?: (stream: MediaStream) => void;\n\n /** Callback for connection status message changes */\n onConnectionMessageChange?: (message: string | null) => void;\n\n /** Callback for call status changes */\n onCallStatus?: (status: string | null) => void;\n\n /** Callback for messages received through WebRTC data channel */\n onDataChannelMessage?: (data: any) => void;\n\n /** Callback for when a call is upgraded (e.g., audio to video) */\n onUpgradeCall?: (upgraderInfo: UserCallInfo) => void;\n\n /** Callback for screen sharing status changes */\n onScreenShareChange?: (isSharing: boolean) => void;\n\n /** Callback for error handling */\n onError?: (error: string) => void;\n\n /** Callback for device list changes */\n onDeviceChange?: (audioDevices: MediaDeviceInfo[], videoDevices: MediaDeviceInfo[]) => void;\n\n /** Available audio input devices */\n private availableAudioDevices: MediaDeviceInfo[] = [];\n\n /** Available video input devices */\n private availableVideoDevices: MediaDeviceInfo[] = [];\n\n /** Currently selected audio device ID */\n private selectedAudioDeviceId?: string;\n\n /** Currently selected video device ID */\n private selectedVideoDeviceId?: string;\n\n /** Timeout for ending call if not answered after a period */\n private missCallTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Interval for sending health check via WebRTC */\n private healthCallInterval: ReturnType<typeof setInterval> | null = null;\n\n /** Interval for sending health check via server */\n private healthCallServerInterval: ReturnType<typeof setInterval> | null = null;\n\n /** Timeout for detecting if remote peer has disconnected */\n private healthCallTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Timeout for showing warning when connection becomes unstable */\n private healthCallWarningTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Handler for signal events */\n private signalHandler: any;\n\n /** Handler for connection change events */\n private connectionChangedHandler: any;\n\n /** Handler for message updated events */\n private messageUpdatedHandler: any;\n\n /** Flag indicating if the user is offline */\n private isOffline: boolean = false;\n\n /**\n * True if this call instance is destroyed (e.g., when another device accepts the call).\n * When true, SIGNAL_CALL events will be ignored.\n */\n private isDestroyed = false;\n\n public mediaSender: MediaStreamSender | null = null;\n public mediaReceiver: MediaStreamReceiver | null = null;\n\n constructor(client: ErmisChat<ErmisChatGenerics>, sessionID: string, wasmPath: string, relayUrl: string) {\n this._client = client;\n this.cid = '';\n this.callType = '';\n this.sessionID = sessionID;\n this.userID = client.userID;\n this.metadata = {};\n this.wasmPath = wasmPath;\n this.relayUrl = relayUrl;\n\n this.listenSocketEvents();\n this.setupDeviceChangeListener();\n this.loadWasm();\n }\n\n private async loadWasm(): Promise<void> {\n try {\n await init(this.wasmPath);\n } catch (error) {\n console.error('Failed to load ErmisCall WASM module:', error);\n throw error;\n }\n }\n\n private async initialize(): Promise<ErmisCall> {\n try {\n const node = new ErmisCall();\n await node.spawn([this.relayUrl]);\n this.callNode = node;\n\n // 1. Init Sender\n this.mediaSender = new MediaStreamSender(node as any);\n\n // 2. Init Receiver\n this.mediaReceiver = new MediaStreamReceiver(node as any, {\n onConnected: () => {\n this.setCallStatus(CallStatus.CONNECTED);\n this.connectCall();\n if (this.missCallTimeout) {\n clearTimeout(this.missCallTimeout);\n this.missCallTimeout = null;\n }\n if (this.healthCallServerInterval) clearInterval(this.healthCallServerInterval);\n this.healthCallServerInterval = setInterval(() => {\n this.healthCall();\n }, 10000);\n\n const remoteStream = this.mediaReceiver?.getRemoteStream();\n\n if (remoteStream && this.onRemoteStream) {\n this.onRemoteStream(remoteStream);\n }\n },\n\n onTransceiverState: (state) => {\n if (typeof this.onDataChannelMessage === 'function') {\n this.onDataChannelMessage(state);\n }\n },\n\n onRequestConfig: () => {\n console.log('📤 Responding to REQUEST_CONFIG by sending configs');\n this.mediaSender?.sendConfigs();\n },\n\n onRequestKeyFrame: () => {\n console.log('📤 Responding to REQUEST_KEY_FRAME by forcing key frame');\n this.mediaSender?.requestKeyFrame();\n },\n\n onEndCall: () => {\n console.log('📥 Received END_CALL from remote peer');\n this.destroy();\n },\n });\n\n return node;\n } catch (error) {\n console.error('Failed to initialize Ermis SDK:', error);\n throw error;\n }\n }\n\n public async getLocalEndpointAddr(): Promise<string | null> {\n try {\n await this.initialize();\n\n if (!this.callNode) {\n console.error('ErmisCall is not initialized.');\n return null;\n }\n\n const address = await this.callNode.getLocalEndpointAddr();\n if (this.metadata) {\n this.metadata.address = address;\n }\n return address;\n } catch (error) {\n console.error('Failed to get address from ErmisCall:', error);\n return null;\n }\n }\n\n private getClient(): ErmisChat<ErmisChatGenerics> {\n return this._client;\n }\n\n private async _sendSignal(payload: SignalData) {\n try {\n return await this.getClient().post(this.getClient().baseURL + '/signal', {\n ...payload,\n cid: this.cid || payload.cid,\n is_video: this.callType === 'video' || payload.is_video,\n ios: false,\n session_id: this.sessionID,\n });\n } catch (error: any) {\n const action = payload.action;\n\n // Skip error message for HEALTH_CALL action\n if (action === CallAction.HEALTH_CALL) {\n return;\n }\n\n if (typeof this.onError === 'function') {\n if (error.code === 'ERR_NETWORK') {\n if (action === CallAction.CREATE_CALL) {\n this.onError('Unable to make the call. Please check your network connection');\n }\n } else {\n if (error.response.data.ermis_code === 20) {\n this.onError('Recipient was busy');\n } else {\n const errMsg = error.response.data?.message ? error.response.data?.message : 'Call failed';\n this.onError(errMsg);\n }\n }\n }\n }\n }\n\n private async getAvailableDevices(): Promise<{ audioDevices: MediaDeviceInfo[]; videoDevices: MediaDeviceInfo[] }> {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n\n const audioDevices = devices.filter((device) => device.kind === 'audioinput');\n const videoDevices = devices.filter((device) => device.kind === 'videoinput');\n\n this.availableAudioDevices = audioDevices;\n this.availableVideoDevices = videoDevices;\n\n return { audioDevices, videoDevices };\n } catch (error) {\n console.error('Error enumerating devices:', error);\n return { audioDevices: [], videoDevices: [] };\n }\n }\n\n private async getMediaConstraints() {\n // Get available devices first\n const { audioDevices, videoDevices } = await this.getAvailableDevices();\n\n // Notify UI about available devices\n if (this.onDeviceChange) {\n this.onDeviceChange(audioDevices, videoDevices);\n }\n\n // Auto-select default devices if none selected\n if (!this.selectedAudioDeviceId && audioDevices.length > 0) {\n this.selectedAudioDeviceId = audioDevices[0].deviceId;\n }\n if (!this.selectedVideoDeviceId && videoDevices.length > 0) {\n this.selectedVideoDeviceId = videoDevices[0].deviceId;\n }\n\n // Build constraints with specific device IDs if selected\n const audioConstraints = {\n deviceId: this.selectedAudioDeviceId ? { exact: this.selectedAudioDeviceId } : undefined,\n echoCancellation: true,\n noiseSuppression: true,\n sampleRate: 48000,\n };\n\n const videoConstraints =\n this.callType === 'video'\n ? {\n deviceId: this.selectedVideoDeviceId ? { exact: this.selectedVideoDeviceId } : undefined,\n width: 640,\n height: 360,\n }\n : false;\n\n const finalConstraints: MediaStreamConstraints = {\n audio: audioConstraints,\n video: videoConstraints,\n };\n\n return finalConstraints;\n }\n\n public async startLocalStream() {\n const mediaConstraints = await this.getMediaConstraints();\n\n try {\n // Request the media stream with the determined constraints\n const stream = await navigator.mediaDevices.getUserMedia(mediaConstraints);\n if (this.callStatus === CallStatus.ENDED) {\n // If the call has ended, stop the local stream tracks\n stream.getTracks().forEach((track) => track.stop());\n this.destroy();\n return;\n }\n if (this.onLocalStream) {\n this.onLocalStream(stream);\n }\n this.localStream = stream;\n return stream;\n } catch (error) {\n console.error('Error getting user media:', error);\n // if (typeof this.onError === 'function') {\n // this.onError('Unable to access microphone/camera');\n // }\n return null;\n }\n }\n\n private setConnectionMessage(message: string | null) {\n if (typeof this.onConnectionMessageChange === 'function') {\n this.onConnectionMessageChange(message);\n }\n }\n\n private setCallStatus(status: CallStatus) {\n this.callStatus = status;\n if (typeof this.onCallStatus === 'function') {\n this.onCallStatus(status);\n }\n }\n\n private setUserInfo(cid: string | undefined, eventUserId: string | undefined) {\n if (!cid || !eventUserId) return;\n\n // Get caller and receiver userId from activeChannels\n const channel = cid ? this.getClient().activeChannels[cid] : undefined;\n const members = channel?.state?.members || {};\n const memberIds = Object.keys(members);\n\n // callerId is eventUserId, receiverId is the other user in the channel\n const callerId = eventUserId || '';\n const receiverId = memberIds.find((id) => id !== callerId) || '';\n\n // Get user info from client.state.users\n const callerUser = this.getClient().state.users[callerId];\n const receiverUser = this.getClient().state.users[receiverId];\n\n this.callerInfo = {\n id: callerId,\n name: callerUser?.name,\n avatar: callerUser?.avatar || '',\n };\n this.receiverInfo = {\n id: receiverId,\n name: receiverUser?.name,\n avatar: receiverUser?.avatar || '',\n };\n }\n\n private listenSocketEvents() {\n this.signalHandler = async (event: Event<ErmisChatGenerics>) => {\n const { action, user_id: eventUserId, session_id: eventSessionId, cid, is_video, signal, metadata } = event;\n\n switch (action) {\n case CallAction.CREATE_CALL:\n if (eventUserId === this.userID && eventSessionId !== this.sessionID) {\n // If the event is triggered by the current user but the session ID is different,\n // it means another device (or tab) of the same user has started a call.\n // In this case, mark this call instance as destroyed and ignore further events.\n this.isDestroyed = true;\n this.destroy();\n return;\n }\n this.isDestroyed = false;\n this.callStatus = '';\n this.callType = is_video ? 'video' : 'audio';\n await this.startLocalStream();\n if (this.callStatus === CallStatus.ENDED) return;\n this.setUserInfo(cid, eventUserId);\n this.setCallStatus(CallStatus.RINGING);\n this.cid = cid || '';\n this.metadata = metadata || {};\n\n console.log('----metadata---', metadata);\n if (eventUserId !== this.userID) {\n await this.initialize();\n }\n\n if (this.localStream && this.mediaSender && this.mediaReceiver) {\n this.mediaSender?.initEncoders(this.localStream);\n this.mediaReceiver?.initDecoders(this.callType);\n }\n\n if (typeof this.onCallEvent === 'function') {\n this.onCallEvent({\n type: eventUserId !== this.userID ? 'incoming' : 'outgoing',\n callType: is_video ? 'video' : 'audio',\n cid: cid || '',\n callerInfo: this.callerInfo,\n receiverInfo: this.receiverInfo,\n metadata: this.metadata,\n });\n }\n\n if (eventUserId === this.userID) {\n // Set missCall timeout if no connection after 60s\n if (this.missCallTimeout) clearTimeout(this.missCallTimeout);\n this.missCallTimeout = setTimeout(async () => {\n await this.missCall();\n }, 60000);\n }\n break;\n\n case CallAction.ACCEPT_CALL:\n if (eventUserId === this.userID && eventSessionId !== this.sessionID) {\n this.isDestroyed = true;\n this.destroy();\n return;\n }\n\n if (eventUserId !== this.userID && !this.isDestroyed) {\n if (this.mediaReceiver && this.mediaSender) {\n await this.mediaReceiver.acceptConnection();\n await this.mediaSender.sendConnected();\n await this.mediaSender.sendConfigs();\n }\n }\n break;\n\n case CallAction.END_CALL:\n case CallAction.REJECT_CALL:\n case CallAction.MISS_CALL:\n // this.setCallStatus(CallStatus.ENDED);\n this.destroy();\n break;\n }\n };\n\n this.connectionChangedHandler = (event: Event<ErmisChatGenerics>) => {\n const online = event.online;\n this.isOffline = !online;\n if (!online) {\n this.setConnectionMessage('Your network connection is unstable');\n\n // Clear health_call intervals when offline\n if (this.healthCallInterval) {\n clearInterval(this.healthCallInterval);\n this.healthCallInterval = null;\n }\n if (this.healthCallServerInterval) {\n clearInterval(this.healthCallServerInterval);\n this.healthCallServerInterval = null;\n }\n } else {\n this.setConnectionMessage(null);\n\n // When back online, if CONNECTED, set up health_call intervals again\n if (this.callStatus === CallStatus.CONNECTED) {\n if (!this.healthCallServerInterval) {\n this.healthCallServerInterval = setInterval(() => {\n this.healthCall();\n }, 10000);\n }\n }\n }\n };\n\n this.messageUpdatedHandler = (event: Event<ErmisChatGenerics>) => {\n if (this.callStatus === CallStatus.CONNECTED && event.cid === this.cid) {\n const upgradeUserId = event.user?.id;\n\n let upgraderInfo: UserCallInfo | undefined;\n\n if (upgradeUserId === this.callerInfo?.id) {\n upgraderInfo = this.callerInfo;\n } else if (upgradeUserId === this.receiverInfo?.id) {\n upgraderInfo = this.receiverInfo;\n }\n\n if (upgraderInfo && typeof this.onUpgradeCall === 'function') {\n this.onUpgradeCall(upgraderInfo);\n }\n }\n };\n\n this._client.on('signal', this.signalHandler);\n this._client.on('connection.changed', this.connectionChangedHandler);\n this._client.on('message.updated', this.messageUpdatedHandler);\n }\n\n private cleanupCall() {\n if (this.mediaSender) {\n this.mediaSender?.stop();\n this.mediaSender = null;\n }\n if (this.mediaReceiver) {\n this.mediaReceiver.stop();\n this.mediaReceiver = null;\n }\n\n if (this.callNode) {\n this.callNode?.closeEndpoint();\n\n if (this.callStatus === CallStatus.CONNECTED) {\n this.callNode?.closeConnection();\n }\n\n this.callNode = null;\n }\n\n // Clear all timeouts and intervals\n if (this.missCallTimeout) {\n clearTimeout(this.missCallTimeout);\n this.missCallTimeout = null;\n }\n\n if (this.healthCallInterval) {\n clearInterval(this.healthCallInterval);\n this.healthCallInterval = null;\n }\n\n if (this.healthCallServerInterval) {\n clearInterval(this.healthCallServerInterval);\n this.healthCallServerInterval = null;\n }\n\n if (this.healthCallTimeout) {\n clearTimeout(this.healthCallTimeout);\n this.healthCallTimeout = null;\n }\n\n if (this.healthCallWarningTimeout) {\n clearTimeout(this.healthCallWarningTimeout);\n this.healthCallWarningTimeout = null;\n }\n\n // this.setCallStatus(CallStatus.ENDED);\n this.setConnectionMessage(null);\n this.cid = '';\n this.callType = '';\n this.metadata = {};\n\n if (this.localStream) {\n this.localStream.getTracks().forEach((track) => track.stop());\n this.localStream = null;\n }\n\n if (this.remoteStream) {\n this.remoteStream.getTracks().forEach((track) => track.stop());\n this.remoteStream = null;\n }\n\n this.setCallStatus(CallStatus.ENDED);\n }\n\n private destroy() {\n // if (this.signalHandler) this._client.off('signal', this.signalHandler);\n // if (this.connectionChangedHandler) this._client.off('connection.changed', this.connectionChangedHandler);\n // if (this.messageUpdatedHandler) this._client.off('message.updated', this.messageUpdatedHandler);\n this.cleanupCall();\n }\n\n public async getDevices(): Promise<{ audioDevices: MediaDeviceInfo[]; videoDevices: MediaDeviceInfo[] }> {\n // Return cached devices if available, otherwise fetch new ones\n if (this.availableAudioDevices.length > 0 || this.availableVideoDevices.length > 0) {\n return {\n audioDevices: this.availableAudioDevices,\n videoDevices: this.availableVideoDevices,\n };\n }\n return await this.getAvailableDevices();\n }\n\n // Get current selected devices info\n public getSelectedDevices(): { audioDevice?: MediaDeviceInfo; videoDevice?: MediaDeviceInfo } {\n const audioDevice = this.selectedAudioDeviceId\n ? this.availableAudioDevices.find((device) => device.deviceId === this.selectedAudioDeviceId)\n : undefined;\n\n const videoDevice = this.selectedVideoDeviceId\n ? this.availableVideoDevices.find((device) => device.deviceId === this.selectedVideoDeviceId)\n : undefined;\n\n return { audioDevice, videoDevice };\n }\n\n // Get default devices (first available device)\n public getDefaultDevices(): { audioDevice?: MediaDeviceInfo; videoDevice?: MediaDeviceInfo } {\n return {\n audioDevice: this.availableAudioDevices[0],\n videoDevice: this.availableVideoDevices[0],\n };\n }\n\n public async createCall(callType: string, cid: string) {\n try {\n this.cid = cid;\n\n const address = await this.getLocalEndpointAddr();\n\n await this._sendSignal({\n action: CallAction.CREATE_CALL,\n cid,\n is_video: callType === 'video',\n metadata: { address },\n });\n } catch (error) {\n console.error('Failed to create call:', error);\n throw error;\n }\n }\n\n public async acceptCall() {\n try {\n await this._sendSignal({ action: CallAction.ACCEPT_CALL });\n\n if (this.mediaSender) {\n const address = this.metadata?.address || '';\n await this.mediaSender.connect(address);\n }\n } catch (error) {\n console.error('Failed to accept call:', error);\n throw error;\n }\n }\n\n public async endCall() {\n await this._sendSignal({ action: CallAction.END_CALL });\n this.destroy();\n }\n\n public async rejectCall() {\n await this._sendSignal({ action: CallAction.REJECT_CALL });\n this.destroy();\n }\n\n private async missCall() {\n await this._sendSignal({ action: CallAction.MISS_CALL });\n this.destroy();\n }\n\n private async connectCall() {\n return await this._sendSignal({ action: CallAction.CONNECT_CALL });\n }\n\n private async healthCall() {\n return await this._sendSignal({ action: CallAction.HEALTH_CALL });\n }\n\n private async addVideoTrackToLocalStream() {\n const mediaConstraints = await this.getMediaConstraints();\n const stream = await navigator.mediaDevices.getUserMedia(mediaConstraints);\n const newVideoTrack = stream.getVideoTracks()[0];\n if (this.localStream) {\n this.localStream.addTrack(newVideoTrack);\n\n if (this.onLocalStream) {\n this.onLocalStream(this.localStream);\n }\n } else {\n this.localStream = stream;\n if (this.onLocalStream) {\n this.onLocalStream(this.localStream);\n }\n }\n }\n\n public async upgradeCall() {\n try {\n this.callType = 'video';\n await this.addVideoTrackToLocalStream();\n await this._sendSignal({ action: CallAction.UPGRADE_CALL });\n\n if (this.localStream) {\n this.mediaSender?.initVideoEncoder(this.localStream?.getVideoTracks()[0]);\n const audioEnable = !!this.localStream?.getAudioTracks().some((track) => track.enabled);\n const videoEnable = !!this.localStream?.getVideoTracks().some((track) => track.enabled);\n await this.mediaSender?.sendTransceiverState(audioEnable, videoEnable);\n }\n } catch (error) {\n console.error('Failed to upgrade call:', error);\n throw error;\n }\n }\n\n public async requestUpgradeCall(enabled: boolean) {\n if (enabled) {\n this.callType = 'video';\n await this.addVideoTrackToLocalStream();\n\n if (this.localStream) {\n this.mediaSender?.initVideoEncoder(this.localStream?.getVideoTracks()[0]);\n const audioEnable = !!this.localStream?.getAudioTracks().some((track) => track.enabled);\n const videoEnable = !!this.localStream?.getVideoTracks().some((track) => track.enabled);\n await this.mediaSender?.sendTransceiverState(audioEnable, videoEnable);\n }\n }\n }\n\n public async startScreenShare() {\n // @ts-ignore\n if (!navigator.mediaDevices.getDisplayMedia) {\n throw new Error('Screen sharing is not supported in this browser.');\n }\n\n // @ts-ignore\n const screenStream = await navigator.mediaDevices.getDisplayMedia({ video: true });\n const screenTrack = screenStream.getVideoTracks()[0];\n\n // Replace video track in localStream\n if (this.localStream) {\n // Stop old track\n this.localStream.getVideoTracks().forEach((track) => track.stop());\n // Add new track to localStream\n this.localStream.removeTrack(this.localStream.getVideoTracks()[0]);\n this.localStream.addTrack(screenTrack);\n } else {\n // If no localStream, create new one\n this.localStream = screenStream;\n }\n\n // When screen sharing stops, automatically switch back to camera\n screenTrack.onended = () => {\n this.stopScreenShare();\n };\n\n // Call callback if UI needs to update\n if (this.onLocalStream) {\n // @ts-ignore\n this.onLocalStream(this.localStream);\n\n this.mediaSender?.replaceVideoTrack(this.localStream.getVideoTracks()[0]);\n }\n\n // Call callback when screen sharing starts\n if (typeof this.onScreenShareChange === 'function') {\n this.onScreenShareChange(true);\n }\n }\n\n public async stopScreenShare() {\n const mediaConstraints = await this.getMediaConstraints();\n\n const cameraStream = await navigator.mediaDevices.getUserMedia(mediaConstraints);\n const cameraTrack = cameraStream.getVideoTracks()[0];\n\n // Replace video track in localStream\n if (this.localStream) {\n // Stop old track (screen)\n this.localStream.getVideoTracks().forEach((track) => track.stop());\n // Replace with camera track\n this.localStream.removeTrack(this.localStream.getVideoTracks()[0]);\n this.localStream.addTrack(cameraTrack);\n } else {\n this.localStream = cameraStream;\n }\n\n // Call callback if UI needs to update\n if (this.onLocalStream) {\n this.onLocalStream(this.localStream);\n this.mediaSender?.replaceVideoTrack(this.localStream.getVideoTracks()[0]);\n }\n\n // Call callback when screen sharing stops\n if (typeof this.onScreenShareChange === 'function') {\n this.onScreenShareChange(false);\n }\n }\n\n public async toggleMic(enabled: boolean) {\n if (this.localStream) {\n this.localStream.getAudioTracks().forEach((track) => {\n track.enabled = enabled;\n });\n\n const audioEnable = enabled;\n const videoEnable = this.localStream.getVideoTracks().some((track) => track.enabled);\n await this.mediaSender?.sendTransceiverState(audioEnable, videoEnable);\n }\n }\n\n public async toggleCamera(enabled: boolean) {\n if (this.localStream) {\n this.localStream.getVideoTracks().forEach((track) => {\n track.enabled = enabled;\n });\n\n const audioEnable = this.localStream.getAudioTracks().some((track) => track.enabled);\n const videoEnable = enabled;\n await this.mediaSender?.sendTransceiverState(audioEnable, videoEnable);\n }\n }\n\n // Public method to switch audio device\n public async switchAudioDevice(deviceId: string): Promise<boolean> {\n try {\n // Validate device exists in available devices\n const targetDevice = this.availableAudioDevices.find((device) => device.deviceId === deviceId);\n if (!targetDevice) {\n console.error('Audio device not found:', deviceId);\n if (this.onError) {\n this.onError('Selected microphone not found');\n }\n return false;\n }\n\n this.selectedAudioDeviceId = deviceId;\n\n if (!this.localStream) return false;\n\n // Get new audio stream with selected device\n const newStream = await navigator.mediaDevices.getUserMedia({\n audio: { deviceId: { exact: deviceId } },\n video: false,\n });\n\n const newAudioTrack = newStream.getAudioTracks()[0];\n const oldAudioTrack = this.localStream.getAudioTracks()[0];\n\n // Replace audio track in peer connection\n // if (this.peer && oldAudioTrack) {\n // const sender = this.peer.getSenders().find((s) => s.track === oldAudioTrack);\n // if (sender) {\n // await sender.replaceTrack(newAudioTrack);\n // }\n // }\n\n // Replace audio track in local stream\n if (oldAudioTrack) {\n this.localStream.removeTrack(oldAudioTrack);\n oldAudioTrack.stop();\n }\n this.localStream.addTrack(newAudioTrack);\n\n // Update UI\n if (this.onLocalStream) {\n this.onLocalStream(this.localStream);\n }\n\n return true;\n } catch (error) {\n console.error('Error switching audio device:', error);\n if (this.onError) {\n this.onError('Failed to switch microphone');\n }\n return false;\n }\n }\n\n // Public method to switch video device\n public async switchVideoDevice(deviceId: string): Promise<boolean> {\n try {\n // Validate device exists in available devices\n const targetDevice = this.availableVideoDevices.find((device) => device.deviceId === deviceId);\n if (!targetDevice) {\n console.error('Video device not found:', deviceId);\n if (this.onError) {\n this.onError('Selected camera not found');\n }\n return false;\n }\n\n this.selectedVideoDeviceId = deviceId;\n\n if (!this.localStream) return false;\n\n // Get new video stream with selected device\n const newStream = await navigator.mediaDevices.getUserMedia({\n audio: false,\n video: { deviceId: { exact: deviceId } },\n });\n\n const newVideoTrack = newStream.getVideoTracks()[0];\n const oldVideoTrack = this.localStream.getVideoTracks()[0];\n\n // Replace video track in local stream\n if (oldVideoTrack) {\n this.localStream.removeTrack(oldVideoTrack);\n oldVideoTrack.stop();\n }\n this.localStream.addTrack(newVideoTrack);\n\n // Update UI\n if (this.onLocalStream) {\n this.onLocalStream(this.localStream);\n }\n\n return true;\n } catch (error) {\n console.error('Error switching video device:', error);\n if (this.onError) {\n this.onError('Failed to switch camera');\n }\n return false;\n }\n }\n\n // Listen for device changes\n private setupDeviceChangeListener() {\n navigator.mediaDevices.addEventListener('devicechange', async () => {\n const { audioDevices, videoDevices } = await this.getAvailableDevices();\n if (this.onDeviceChange) {\n this.onDeviceChange(audioDevices, videoDevices);\n }\n });\n }\n}\n","import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { APIErrorResponse, ErmisChatOptions, ErrorFromResponse, Logger } from './types';\nimport { chatCodes, isFunction, randomId, retryInterval, sleep } from './utils';\nimport https from 'https';\nimport { isErrorResponse } from './errors';\n\nexport class ErmisAuthProvider {\n apiKey: string;\n baseURL?: string;\n options?: ErmisChatOptions;\n axiosInstance: AxiosInstance;\n disconnected: boolean;\n browser: boolean;\n node: boolean;\n logger: Logger;\n consecutiveFailures: number;\n userAgent?: string;\n /** Last identifier (phone or email) used for OTP */\n lastIdentifier?: string;\n /**\n * The last OTP method used ('Sms', 'Voice', or 'Email').\n * Used to verify OTP for the correct method.\n */\n lastMethod?: 'Sms' | 'Voice' | 'Email';\n /** Wallet address used for wallet authentication */\n address?: string;\n\n constructor(apiKey: string, baseURL: string, options?: ErmisChatOptions) {\n const inputOptions = options || {};\n this.apiKey = apiKey;\n this.baseURL = options?.userBaseURL || baseURL + '/uss/v1';\n\n this.browser = typeof inputOptions.browser !== 'undefined' ? inputOptions.browser : typeof window !== 'undefined';\n this.node = !this.browser;\n this.options = {\n // timeout: 3000,\n withCredentials: false, // making sure cookies are not sent\n warmUp: false,\n recoverStateOnReconnect: true,\n ...inputOptions,\n };\n if (this.node && !this.options.httpsAgent) {\n this.options.httpsAgent = new https.Agent({\n keepAlive: true,\n keepAliveMsecs: 3000,\n });\n }\n this.axiosInstance = axios.create(this.options);\n this.logger = isFunction(inputOptions.logger) ? inputOptions.logger : () => null;\n this.consecutiveFailures = 0;\n this.disconnected = false;\n }\n\n _logApiRequest(\n type: string,\n url: string,\n data: unknown,\n config: AxiosRequestConfig & {\n config?: AxiosRequestConfig & { maxBodyLength?: number };\n },\n ) {\n this.logger(\n 'info',\n `client: ${type} - Request - ${url}- ${JSON.stringify(data)} - ${JSON.stringify(config.params)}`,\n {\n tags: ['api', 'api_request', 'client'],\n url,\n payload: data,\n config,\n },\n );\n }\n\n _logApiResponse<T>(type: string, url: string, response: AxiosResponse<T>) {\n this.logger('info', `client:${type} - Response - url: ${url} > status ${response.status}`, {\n tags: ['api', 'api_response', 'client'],\n url,\n response,\n });\n }\n\n _logApiError(type: string, url: string, error: unknown, options: unknown) {\n this.logger(\n 'error',\n `client:${type} - Error: ${JSON.stringify(error)} - url: ${url} - options: ${JSON.stringify(options)}`,\n {\n tags: ['api', 'api_response', 'client'],\n url,\n error,\n },\n );\n }\n\n doAxiosRequest = async <T>(\n type: string,\n url: string,\n data?: unknown,\n options: AxiosRequestConfig & {\n config?: AxiosRequestConfig & { maxBodyLength?: number };\n } = {},\n ): Promise<T> => {\n const requestConfig = this._enrichAxiosOptions(options);\n\n try {\n let response: AxiosResponse<T>;\n this._logApiRequest(type, url, data, requestConfig);\n switch (type) {\n case 'get':\n response = await this.axiosInstance.get(url, requestConfig);\n break;\n case 'delete':\n response = await this.axiosInstance.delete(url, requestConfig);\n break;\n case 'post':\n response = await this.axiosInstance.post(url, data, requestConfig);\n break;\n case 'postForm':\n response = await this.axiosInstance.postForm(url, data, requestConfig);\n break;\n case 'put':\n response = await this.axiosInstance.put(url, data, requestConfig);\n break;\n case 'patch':\n response = await this.axiosInstance.patch(url, data, requestConfig);\n break;\n case 'options':\n response = await this.axiosInstance.options(url, requestConfig);\n break;\n default:\n throw new Error('Invalid request type');\n }\n this._logApiResponse<T>(type, url, response);\n this.consecutiveFailures = 0;\n return this.handleResponse(response);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any /**TODO: generalize error types */) {\n e.client_request_id = requestConfig.headers?.['x-client-request-id'];\n this._logApiError(type, url, e, options);\n this.consecutiveFailures += 1;\n if (e.response) {\n /** connection_fallback depends on this token expiration logic */\n if (e.response.data.code === chatCodes.TOKEN_EXPIRED) {\n if (this.consecutiveFailures > 1) {\n await sleep(retryInterval(this.consecutiveFailures));\n }\n return await this.doAxiosRequest<T>(type, url, data, requestConfig);\n }\n return this.handleResponse(e.response);\n } else {\n throw e as AxiosError<APIErrorResponse>;\n }\n }\n };\n\n get<T>(url: string, params?: AxiosRequestConfig['params']) {\n return this.doAxiosRequest<T>('get', url, null, { params });\n }\n\n put<T>(url: string, data?: unknown) {\n return this.doAxiosRequest<T>('put', url, data);\n }\n\n post<T>(url: string, data?: unknown, params?: AxiosRequestConfig['params']) {\n return this.doAxiosRequest<T>('post', url, data, { params });\n }\n\n patch<T>(url: string, data?: unknown) {\n return this.doAxiosRequest<T>('patch', url, data);\n }\n\n delete<T>(url: string, params?: AxiosRequestConfig['params']) {\n return this.doAxiosRequest<T>('delete', url, null, { params });\n }\n errorFromResponse(response: AxiosResponse<APIErrorResponse>): ErrorFromResponse<APIErrorResponse> {\n let err: ErrorFromResponse<APIErrorResponse>;\n err = new ErrorFromResponse(`ErmisChat error HTTP code: ${response.status}`);\n if (response.data && response.data.code) {\n err = new Error(`ErmisChat error code ${response.data.code}: ${response.data.message}`);\n err.code = response.data.code;\n }\n err.response = response;\n err.status = response.status;\n return err;\n }\n\n handleResponse<T>(response: AxiosResponse<T>) {\n const data = response.data;\n if (isErrorResponse(response)) {\n throw this.errorFromResponse(response);\n }\n return data;\n }\n\n getUserAgent() {\n return (\n this.userAgent || `ermis-chat-sdk-javascript-client-${this.node ? 'node' : 'browser'}-${process.env.PKG_VERSION}`\n );\n }\n setUserAgent(userAgent: string) {\n this.userAgent = userAgent;\n }\n _enrichAxiosOptions(\n options: AxiosRequestConfig & { config?: AxiosRequestConfig } = {\n params: {},\n headers: {},\n config: {},\n },\n ): AxiosRequestConfig {\n let signal: AbortSignal | null = null;\n\n if (!options.headers?.['x-client-request-id']) {\n options.headers = {\n ...options.headers,\n 'x-client-request-id': randomId(),\n };\n }\n const {\n params: axiosRequestConfigParams,\n headers: axiosRequestConfigHeaders,\n ...axiosRequestConfigRest\n } = this.options?.axiosRequestConfig || {};\n\n let user_service_params = {\n // api_key: this.key,\n ...options.params,\n ...(axiosRequestConfigParams || {}),\n };\n\n return {\n params: user_service_params,\n headers: {\n 'X-Stream-Client': this.getUserAgent(),\n ...options.headers,\n ...(axiosRequestConfigHeaders || {}),\n },\n ...(signal ? { signal } : {}),\n ...options.config,\n ...(axiosRequestConfigRest || {}),\n };\n }\n\n /**\n * Send OTP to a phone number.\n * @param identifier Phone number\n * @param language Language code (e.g. 'En', 'Vi')\n * @param method Method type (e.g. 'Sms', 'Voice')\n */\n async sendOtpToPhone(identifier: string, method: 'Sms' | 'Voice'): Promise<{ success: boolean; message?: string }> {\n this.lastIdentifier = identifier;\n this.lastMethod = method;\n const data = {\n apikey: this.apiKey,\n identifier,\n language: 'Vi',\n method,\n otp_type: 'Login',\n };\n return this.post<{ success: boolean; message?: string }>(this.baseURL + '/auth/get_otp_new', data);\n }\n\n /**\n * Send OTP to a email.\n * @param identifier Email address\n * @param language Language code (e.g. 'En', 'Vi')\n * @param method Method type (e.g. 'Email')\n */\n async sendOtpToEmail(identifier: string): Promise<{ success: boolean; message?: string }> {\n this.lastIdentifier = identifier;\n this.lastMethod = 'Email';\n const data = {\n apikey: this.apiKey,\n identifier,\n language: 'Vi',\n method: 'Email',\n otp_type: 'Login',\n };\n return this.post<{ success: boolean; message?: string }>(this.baseURL + '/auth/get_otp_new', data);\n }\n\n /**\n * Verify OTP for phone or email.\n * @param otp OTP code\n */\n async verifyOtp(otp: string): Promise<{ success: boolean; message?: string }> {\n const data = {\n identifier: this.lastIdentifier,\n method: this.lastMethod,\n apikey: this.apiKey,\n otp,\n };\n\n return this.post<{ success: boolean; message?: string }>(this.baseURL + '/auth/otp_login', data);\n }\n\n /**\n * Login with Google.\n * @param token Google OAuth token\n * @param apikey API key\n */\n async loginWithGoogle(token: string): Promise<{ success: boolean; message?: string }> {\n const data = {\n token,\n apikey: this.apiKey,\n };\n return this.post<{ success: boolean; message?: string }>(this.baseURL + '/auth/google_login', data);\n }\n\n /**\n * Get challenge for wallet login.\n * @param address Wallet address\n * @param apiKey API key\n */\n async getWalletChallenge(address: string): Promise<any> {\n this.address = address;\n const response = await this.post<{ challenge: string }>(this.baseURL + '/auth/get_challenge', {\n address,\n apikey: this.apiKey,\n });\n const challenge = JSON.parse(response.challenge);\n return challenge;\n }\n\n private createNonce(length: number): string {\n let result = '';\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n }\n\n /**\n * Verify wallet signature after receiving the challenge.\n * @param address Wallet address\n * @param signature Signature generated by the wallet\n * @param nonce Nonce used in the challenge\n * @returns Verification result and token if successful\n */\n async verifyWalletSignature(signature: string): Promise<{ success: boolean; token?: string; message?: string }> {\n const data = {\n address: this.address,\n signature,\n nonce: this.createNonce(20),\n apikey: this.apiKey,\n };\n return this.post<{ success: boolean; token?: string; message?: string }>(\n this.baseURL + '/auth/verify_signature',\n data,\n );\n }\n}\n","/**\n * Duration lookup: milliseconds → human-readable text.\n */\nconst DURATION_MAP: Record<string, string> = {\n '10000': '10 seconds',\n '30000': '30 seconds',\n '60000': '1 minute',\n '300000': '5 minutes',\n '900000': '15 minutes',\n '3600000': '60 minutes',\n};\n\n/**\n * Resolve a user ID to a display name using the provided map.\n * Falls back to the raw userId if no entry is found.\n */\nfunction resolveUser(userId: string, userMap: Record<string, string>): string {\n return userMap[userId] ?? userId;\n}\n\n/**\n * Parse a raw system message string into a human-readable English sentence.\n *\n * The raw format is: `\"<formatId> <userID> [<param1> <param2> ...]\"`\n *\n * @param value - Raw system message string from the server\n * @param userMap - Mapping of user IDs → display names\n * @returns Parsed English text, or the original string if the format is unknown\n */\nexport function parseSystemMessage(\n value: string,\n userMap: Record<string, string>,\n): string {\n if (!value || typeof value !== 'string') return value ?? '';\n\n const trimmed = value.trim();\n if (!trimmed) return '';\n\n const parts = trimmed.split(' ');\n const formatId = parts[0];\n const userId = parts[1] ?? '';\n const userName = userId ? resolveUser(userId, userMap) : 'User';\n\n switch (formatId) {\n // 1: userName changed the channel name to channelName (may contain spaces)\n case '1': {\n const channelName = parts.slice(2).join(' ');\n return `${userName} changed the channel name to ${channelName}.`;\n }\n\n // 2–13, 16–17: single-user actions\n case '2':\n return `${userName} changed the channel avatar.`;\n case '3':\n return `${userName} changed the channel description.`;\n case '4':\n return `${userName} was removed from the channel.`;\n case '5':\n return `${userName} was banned.`;\n case '6':\n return `${userName} was unbanned.`;\n case '7':\n return `${userName} was promoted to moderator.`;\n case '8':\n return `${userName} was demoted from moderator.`;\n case '9':\n return `${userName}'s permissions were updated.`;\n case '10':\n return `${userName} joined the channel.`;\n case '11':\n return `${userName} declined the channel invitation.`;\n case '12':\n return `${userName} left the channel.`;\n case '13':\n return `${userName} cleared the chat history.`;\n\n // 14: channel type change (true = public, false = private)\n case '14': {\n const rawType = parts[2] ?? '';\n const channelType = rawType === 'true' ? 'public' : 'private';\n return `${userName} changed the channel to ${channelType}.`;\n }\n\n // 15: cooldown toggle / duration\n case '15': {\n const duration = parts[2] ?? '0';\n if (duration === '0') {\n return `${userName} disabled cooldown.`;\n }\n const durationText = DURATION_MAP[duration] ?? `${duration}ms`;\n return `${userName} enabled cooldown for ${durationText}.`;\n }\n\n case '16':\n return `${userName} updated the banned words.`;\n case '17':\n return `${userName} was added to the channel.`;\n\n // 18: admin transfer (two user IDs)\n case '18': {\n const oldUserId = parts[1] ?? '';\n const newUserId = parts[2] ?? '';\n const oldUserName = oldUserId ? resolveUser(oldUserId, userMap) : 'User';\n const newUserName = newUserId ? resolveUser(newUserId, userMap) : 'User';\n return `Admin ${oldUserName} left and assigned ${newUserName} as the new admin.`;\n }\n\n // 19–20: pin / unpin (userId + msgID)\n case '19':\n return `${userName} pinned a message.`;\n case '20':\n return `${userName} unpinned a message.`;\n\n default:\n return trimmed;\n }\n}\n","/**\n * Convert duration in seconds to mm:ss format.\n */\nfunction formatDuration(durationSec: string): string {\n const sec = parseInt(durationSec, 10);\n if (isNaN(sec) || sec < 0) return durationSec;\n const minutes = Math.floor(sec / 60);\n const seconds = sec % 60;\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n}\n\n/**\n * Resolve a user ID to a display name using the provided map.\n * Falls back to the raw userId if no entry is found.\n */\nfunction resolveUser(userId: string, userMap: Record<string, string>): string {\n return userMap[userId] ?? userId;\n}\n\n/**\n * Parse a raw signal message string into a human-readable English sentence.\n *\n * Signal messages represent call events. The raw format is:\n * `\"<formatId> <userID> [<param1> <param2> ...]\"`\n *\n * @param value - Raw signal message string from the server\n * @param userMap - Mapping of user IDs → display names\n * @returns Parsed English text, or the original string if unknown\n */\nexport function parseSignalMessage(\n value: string,\n userMap: Record<string, string>,\n): string {\n if (!value || typeof value !== 'string') return value ?? '';\n\n const trimmed = value.trim();\n if (!trimmed) return '';\n\n const parts = trimmed.split(' ');\n const formatId = parts[0];\n const userId = parts[1] ?? '';\n const userName = userId ? resolveUser(userId, userMap) : 'User';\n\n switch (formatId) {\n // 1: Audio call started\n case '1':\n return `📞 ${userName} started an audio call.`;\n\n // 2: Audio call missed\n case '2':\n return `📞 Missed audio call from ${userName}.`;\n\n // 3: Audio call ended (caller_id ender_id duration)\n case '3': {\n const enderId = parts[2] ?? '';\n const duration = parts[3] ?? '0';\n const enderName = enderId ? resolveUser(enderId, userMap) : 'User';\n return `📞 Audio call by ${userName}, ended by ${enderName}. Duration: ${formatDuration(duration)}.`;\n }\n\n // 4: Video call started\n case '4':\n return `📹 ${userName} started a video call.`;\n\n // 5: Video call missed\n case '5':\n return `📹 Missed video call from ${userName}.`;\n\n // 6: Video call ended (caller_id ender_id duration)\n case '6': {\n const enderId = parts[2] ?? '';\n const duration = parts[3] ?? '0';\n const enderName = enderId ? resolveUser(enderId, userMap) : 'User';\n return `📹 Video call by ${userName}, ended by ${enderName}. Duration: ${formatDuration(duration)}.`;\n }\n\n // 7: Audio call rejected\n case '7':\n return `📞 Audio call from ${userName} was rejected.`;\n\n // 8: Video call rejected\n case '8':\n return `📹 Video call from ${userName} was rejected.`;\n\n // 9: Audio call busy\n case '9':\n return `📞 Audio call from ${userName} — recipient was busy.`;\n\n // 10: Video call busy\n case '10':\n return `📹 Video call from ${userName} — recipient was busy.`;\n\n default:\n return trimmed;\n }\n}\n"],"mappings":"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","names":["require_delayed_stream","__commonJSMin","exports","module","Stream","util","DelayedStream","source","options","delayedStream","option","realEmit","args","r","message","require_combined_stream","__commonJSMin","exports","module","util","Stream","DelayedStream","CombinedStream","options","combinedStream","option","stream","isStreamLike","newStream","dest","getStream","value","self","err","data","message","empty_exports","__export","empty_default","init_empty","__esmMin","require_db","__commonJSMin","exports","module","require_mime_db","__commonJSMin","exports","module","require_mime_types","__commonJSMin","exports","db","extname","EXTRACT_TYPE_REGEXP","TEXT_TYPE_REGEXP","charset","contentType","extension","lookup","populateMaps","type","match","mime","str","exts","path","extensions","types","preference","i","from","to","require_defer","__commonJSMin","exports","module","defer","fn","nextTick","require_async","__commonJSMin","exports","module","defer","async","callback","isAsync","err","result","require_abort","__commonJSMin","exports","module","abort","state","clean","key","require_iterate","__commonJSMin","exports","module","async","abort","iterate","list","iterator","state","callback","key","runJob","error","output","item","aborter","require_state","__commonJSMin","exports","module","state","list","sortMethod","isNamedList","initState","a","b","require_terminator","__commonJSMin","exports","module","abort","async","terminator","callback","require_parallel","__commonJSMin","exports","module","iterate","initState","terminator","parallel","list","iterator","callback","state","error","result","require_serialOrdered","__commonJSMin","exports","module","iterate","initState","terminator","serialOrdered","ascending","descending","list","iterator","sortMethod","callback","state","iteratorHandler","error","result","a","b","require_serial","__commonJSMin","exports","module","serialOrdered","serial","list","iterator","callback","require_asynckit","__commonJSMin","exports","module","require_es_object_atoms","__commonJSMin","exports","module","require_es_errors","__commonJSMin","exports","module","require_eval","__commonJSMin","exports","module","require_range","__commonJSMin","exports","module","require_ref","__commonJSMin","exports","module","require_syntax","__commonJSMin","exports","module","require_type","__commonJSMin","exports","module","require_uri","__commonJSMin","exports","module","require_abs","__commonJSMin","exports","module","require_floor","__commonJSMin","exports","module","require_max","__commonJSMin","exports","module","require_min","__commonJSMin","exports","module","require_pow","__commonJSMin","exports","module","require_round","__commonJSMin","exports","module","require_isNaN","__commonJSMin","exports","module","a","require_sign","__commonJSMin","exports","module","$isNaN","number","require_gOPD","__commonJSMin","exports","module","require_gopd","__commonJSMin","exports","module","$gOPD","require_es_define_property","__commonJSMin","exports","module","$defineProperty","require_shams","__commonJSMin","exports","module","obj","sym","symObj","symVal","_","syms","descriptor","require_has_symbols","__commonJSMin","exports","module","origSymbol","hasSymbolSham","require_Reflect_getPrototypeOf","__commonJSMin","exports","module","require_Object_getPrototypeOf","__commonJSMin","exports","module","$Object","require_implementation","__commonJSMin","exports","module","ERROR_MESSAGE","toStr","max","funcType","concatty","a","b","arr","j","slicy","arrLike","offset","joiny","joiner","str","i","that","target","args","bound","binder","result","boundLength","boundArgs","Empty","require_function_bind","__commonJSMin","exports","module","implementation","require_functionCall","__commonJSMin","exports","module","require_functionApply","__commonJSMin","exports","module","require_reflectApply","__commonJSMin","exports","module","require_actualApply","__commonJSMin","exports","module","bind","$apply","$call","$reflectApply","require_call_bind_apply_helpers","__commonJSMin","exports","module","bind","$TypeError","$call","$actualApply","args","require_get","__commonJSMin","exports","module","callBind","gOPD","hasProtoAccessor","e","desc","$Object","$getPrototypeOf","value","require_get_proto","__commonJSMin","exports","module","reflectGetProto","originalGetProto","getDunderProto","O","require_hasown","__commonJSMin","exports","module","call","$hasOwn","bind","require_get_intrinsic","__commonJSMin","exports","module","undefined","$Object","$Error","$EvalError","$RangeError","$ReferenceError","$SyntaxError","$TypeError","$URIError","abs","floor","max","min","pow","round","sign","$Function","getEvalledConstructor","expressionSyntax","$gOPD","$defineProperty","throwTypeError","ThrowTypeError","hasSymbols","getProto","$ObjectGPO","$ReflectGPO","$apply","$call","needsEval","TypedArray","INTRINSICS","e","errorProto","doEval","name","value","fn","gen","LEGACY_ALIASES","bind","hasOwn","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","string","first","last","result","match","number","quote","subString","getBaseIntrinsic","allowMissing","intrinsicName","alias","parts","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","i","isOwn","part","desc","require_shams","__commonJSMin","exports","module","hasSymbols","require_es_set_tostringtag","__commonJSMin","exports","module","GetIntrinsic","$defineProperty","hasToStringTag","hasOwn","$TypeError","toStringTag","object","value","overrideIfSet","nonConfigurable","require_populate","__commonJSMin","exports","module","dst","src","prop","require_form_data","__commonJSMin","exports","module","CombinedStream","util","path","http","https","parseUrl","fs","Stream","crypto","mime","asynckit","setToStringTag","hasOwn","populate","FormData","options","option","field","value","append","header","footer","valueLength","callback","err","stat","fileSize","response","contentDisposition","contentType","contents","headers","prop","filename","next","lastPart","userHeaders","formHeaders","boundary","dataBuffer","i","len","knownLength","hasKnownLength","cb","values","length","params","request","defaults","onResponse","error","responce","require_proxy_from_env","__commonJSMin","exports","parseUrl","DEFAULT_PORTS","stringEndsWith","s","getProxyForUrl","url","parsedUrl","proto","hostname","port","shouldProxy","proxy","getEnv","NO_PROXY","parsedProxy","parsedProxyHostname","parsedProxyPort","key","require_ms","__commonJSMin","exports","module","s","m","h","d","w","y","val","options","type","parse","fmtLong","fmtShort","str","match","n","ms","msAbs","plural","name","isPlural","require_common","__commonJSMin","exports","module","setup","env","createDebug","coerce","disable","enable","enabled","destroy","key","selectColor","namespace","hash","i","prevTime","enableOverride","namespacesCache","enabledCache","debug","args","self","curr","ms","index","match","format","formatter","val","extend","v","delimiter","newDebug","namespaces","split","ns","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","name","skip","require_browser","__commonJSMin","exports","module","formatArgs","save","load","useColors","localstorage","warned","m","args","c","index","lastC","match","namespaces","r","formatters","v","error","require_has_flag","__commonJSMin","exports","module","flag","argv","prefix","position","terminatorPosition","require_supports_color","__commonJSMin","exports","module","os","tty","hasFlag","env","flagForceColor","envForceColor","translateLevel","level","supportsColor","haveStream","streamIsTTY","sniffFlags","noFlagForceColor","forceColor","min","osRelease","sign","version","getSupportLevel","stream","options","require_node","__commonJSMin","exports","module","tty","util","init","log","formatArgs","save","load","useColors","supportsColor","key","obj","prop","_","k","val","args","name","c","colorCode","prefix","getDate","namespaces","debug","keys","i","formatters","v","str","require_src","__commonJSMin","exports","module","require_debug","__commonJSMin","exports","module","debug","require_follow_redirects","__commonJSMin","exports","module","url","URL","http","https","Writable","assert","debug","looksLikeNode","looksLikeBrowser","looksLikeV8","isFunction","useNativeURL","error","preservedUrlFields","events","eventHandlers","event","arg1","arg2","arg3","InvalidUrlError","createErrorType","RedirectionError","TooManyRedirectsError","MaxBodyLengthExceededError","WriteAfterEndError","destroy","noop","RedirectableRequest","options","responseCallback","self","response","cause","destroyRequest","data","encoding","callback","isString","isBuffer","currentRequest","name","value","msecs","destroyOnTimeout","socket","startTimer","clearTimer","method","a","b","property","searchPos","protocol","nativeProtocol","scheme","request","i","buffers","writeNext","buffer","statusCode","location","requestHeaders","beforeRedirect","removeMatchingHeaders","currentHostHeader","currentUrlParts","parseUrl","currentHost","currentUrl","redirectUrl","resolveUrl","spreadUrlObject","isSubdomain","responseDetails","requestDetails","wrap","protocols","nativeProtocols","wrappedProtocol","input","isURL","validateUrl","get","wrappedRequest","parsed","relative","base","urlObject","target","spread","key","regex","headers","lastValue","header","code","message","baseClass","CustomError","properties","subdomain","domain","dot","require_constants","__commonJSMin","exports","module","require_buffer_util","__commonJSMin","exports","module","EMPTY_BUFFER","concat","list","totalLength","target","offset","buf","_mask","source","mask","output","length","i","_unmask","buffer","toArrayBuffer","toBuffer","data","bufferUtil","bu","require_limiter","__commonJSMin","exports","module","kDone","kRun","Limiter","concurrency","job","require_permessage_deflate","__commonJSMin","exports","module","zlib","bufferUtil","Limiter","kStatusCode","NOOP","TRAILER","kPerMessageDeflate","kTotalLength","kCallback","kBuffers","kError","zlibLimiter","PerMessageDeflate","options","isServer","maxPayload","concurrency","params","configurations","callback","offers","opts","accepted","response","key","value","num","data","fin","done","err","result","endpoint","windowBits","inflateOnError","inflateOnData","deflateOnData","chunk","require_validation","__commonJSMin","exports","module","isValidStatusCode","code","_isValidUTF8","buf","len","i","isValidUTF8","require_receiver","__commonJSMin","exports","module","Writable","PerMessageDeflate","BINARY_TYPES","EMPTY_BUFFER","kStatusCode","kWebSocket","concat","toArrayBuffer","unmask","isValidStatusCode","isValidUTF8","GET_INFO","GET_PAYLOAD_LENGTH_16","GET_PAYLOAD_LENGTH_64","GET_MASK","GET_DATA","INFLATING","Receiver","binaryType","extensions","isServer","maxPayload","chunk","encoding","cb","n","buf","dst","offset","err","error","compressed","num","data","er","messageLength","fragments","code","ErrorCtor","message","prefix","statusCode","errorCode","require_sender","__commonJSMin","exports","module","net","tls","randomFillSync","PerMessageDeflate","EMPTY_BUFFER","isValidStatusCode","applyMask","toBuffer","mask","Sender","_Sender","socket","extensions","data","options","merge","offset","payloadLength","target","code","cb","buf","length","readOnly","perMessageDeflate","opcode","rsv1","opts","compress","_","err","i","callback","params","list","require_event_target","__commonJSMin","exports","module","Event","type","target","MessageEvent","data","CloseEvent","code","reason","OpenEvent","ErrorEvent","error","EventTarget","listener","options","onMessage","onClose","message","onError","onOpen","method","listeners","i","require_extension","__commonJSMin","exports","module","tokenChars","push","dest","name","elem","parse","header","offers","params","mustUnescape","isEscaping","inQuotes","extensionName","paramName","start","end","i","code","value","token","format","extensions","extension","configurations","k","values","v","require_websocket","__commonJSMin","exports","module","EventEmitter","https","http","net","tls","randomBytes","createHash","Readable","URL","PerMessageDeflate","Receiver","Sender","BINARY_TYPES","EMPTY_BUFFER","GUID","kStatusCode","kWebSocket","NOOP","addEventListener","removeEventListener","format","parse","toBuffer","readyStates","protocolVersions","closeTimeout","WebSocket","_WebSocket","address","protocols","options","initAsClient","type","listener","socket","head","maxPayload","receiver","receiverOnConclude","receiverOnDrain","receiverOnError","receiverOnMessage","receiverOnPing","receiverOnPong","socketOnClose","socketOnData","socketOnEnd","socketOnError","code","data","abortHandshake","err","mask","cb","sendAfterClose","opts","property","method","listeners","i","websocket","parsedUrl","isUnixSocket","emitErrorAndClose","isSecure","defaultPort","key","get","perMessageDeflate","tlsConnect","netConnect","parts","headers","value","isSameHost","req","res","location","statusCode","addr","upgrade","digest","serverProt","protList","protError","secWebSocketExtensions","extensions","extensionNames","stream","message","length","reason","resume","receiverOnFinish","chunk","require_stream","__commonJSMin","exports","module","Duplex","emitClose","stream","duplexOnEnd","duplexOnError","err","createWebSocketStream","ws","options","resumeOnReceiverDrain","terminateOnDestroy","receiverOnDrain","duplex","msg","callback","called","chunk","encoding","require_websocket_server","__commonJSMin","exports","module","EventEmitter","http","https","net","tls","createHash","PerMessageDeflate","WebSocket","format","parse","GUID","kWebSocket","keyRegex","RUNNING","CLOSING","CLOSED","WebSocketServer","options","callback","req","res","body","emitConnection","addListeners","socket","head","cb","emitClose","client","server","index","socketOnError","key","upgrade","version","extensions","abortHandshake","perMessageDeflate","offers","info","verified","code","message","headers","ws","protocol","trim","params","value","map","event","h","str","require_ws","__commonJSMin","exports","module","WebSocket","require_node","__commonJSMin","exports","module","require_eventsource","__commonJSMin","exports","module","global","setTimeout","clearTimeout","XMLHttpRequest","XDomainRequest","ActiveXObject","NativeEventSource","document","Promise","fetch","Response","TextDecoder","TextEncoder","AbortController","event","C","F","originalFetch2","url","options","signal","response","reader","TextDecoderPolyfill","octets","valid","codePoint","shift","octetsCount","bitsNeeded","REPLACER","string","i","octet","supportsStreamOption","error","k","XHRWrapper","xhr","method","that","state","timeout","silent","onStart","status","statusText","contentType","onProgress","responseText","onFinish","type","onReadyStateChange","onTimeout","name","value","error1","toLowerCase","c","HeadersPolyfill","all","map","array","line","parts","XHRTransport","onStartCallback","onProgressCallback","onFinishCallback","withCredentials","headers","offset","chunk","HeadersWrapper","FetchTransport","controller","textDecoder","resolve","reject","readNextChunk","result","EventTarget","throwError","e","typeListeners","length","listener","listeners","found","filtered","Event","MessageEvent","ConnectionEvent","ErrorEvent","WAITING","CONNECTING","OPEN","CLOSED","AFTER_CR","FIELD_START","FIELD","VALUE_START","VALUE","contentTypeRegExp","MINIMUM_DURATION","MAXIMUM_DURATION","parseDuration","def","n","clampDuration","fire","f","EventSourcePolyfill","start","getBestXHRTransport","isFetchSupported","es","lastEventIdQueryParameterName","initialRetry","heartbeatTimeout","lastEventId","retry","wasActivity","textLength","TransportOption","transport","abortController","currentState","dataBuffer","lastEventIdBuffer","eventTypeBuffer","textBuffer","fieldStart","valueStart","message","close","textChunk","position","field","nextHeartbeat","requestURL","p","paramName","requestHeaders","R","factory","v","index_exports","__export","CallAction","CallStatus","Channel","ChannelState","ClientState","EVENT_MAP","ErmisAuthProvider","ErmisCallNode","ErmisChat","ErrorFromResponse","FRAME_TYPE","StableWSConnection","TokenManager","buildAttachmentPayload","chatCodes","createForwardMessagePayload","formatMessage","getAttachmentCategory","isHeicFile","isVideoFile","logChatPromiseExecution","normalizeFileName","parseSignalMessage","parseSystemMessage","bind","fn","thisArg","toString","getPrototypeOf","iterator","toStringTag","kindOf","cache","thing","str","kindOfTest","type","typeOfTest","isArray","isUndefined","isBuffer","val","isFunction","isArrayBuffer","isArrayBufferView","result","isString","isNumber","isObject","isBoolean","isPlainObject","prototype","isDate","isFile","isBlob","isFileList","isStream","isFormData","kind","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","trim","forEach","obj","fn","allOwnKeys","i","l","keys","len","key","findKey","_key","_global","isContextDefined","context","merge","caseless","assignValue","targetKey","extend","a","b","thisArg","bind","stripBOM","content","inherits","constructor","superConstructor","props","descriptors","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","position","lastIndex","toArray","arr","isTypedArray","TypedArray","forEachEntry","_iterator","pair","matchAll","regExp","matches","isHTMLForm","toCamelCase","m","p1","p2","hasOwnProperty","isRegExp","reduceDescriptors","reducer","reducedDescriptors","descriptor","name","ret","freezeMethods","value","toObjectSet","arrayOrString","delimiter","define","noop","toFiniteNumber","defaultValue","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","_setImmediate","setImmediateSupported","postMessageSupported","token","callbacks","data","cb","asap","isIterable","utils_default","AxiosError","message","code","config","request","response","utils_default","prototype","descriptors","error","customProps","axiosError","obj","prop","AxiosError_default","import_form_data","FormData_default","FormData","isVisitable","thing","utils_default","removeBrackets","key","renderKey","path","dots","token","i","isFlatArray","arr","predicates","prop","toFormData","obj","formData","options","FormData_default","option","source","metaTokens","visitor","defaultVisitor","indexes","useBlob","convertValue","value","AxiosError_default","el","index","stack","exposedHelpers","build","toFormData_default","encode","str","charMap","match","AxiosURLSearchParams","params","options","toFormData_default","prototype","name","value","encoder","_encode","pair","AxiosURLSearchParams_default","encode","val","buildURL","url","params","options","_encode","utils_default","serializeFn","serializedParams","AxiosURLSearchParams_default","hashmarkIndex","InterceptorManager","fulfilled","rejected","options","id","fn","utils_default","h","InterceptorManager_default","transitional_default","import_crypto","import_url","URLSearchParams_default","url","ALPHA","DIGIT","ALPHABET","generateString","size","alphabet","str","length","randomValues","crypto","i","node_default","URLSearchParams_default","FormData_default","utils_exports","__export","hasBrowserEnv","hasStandardBrowserEnv","hasStandardBrowserWebWorkerEnv","_navigator","origin","platform_default","utils_exports","node_default","toURLEncodedForm","data","options","toFormData_default","platform_default","value","key","path","helpers","utils_default","parsePropPath","name","utils_default","match","arrayToObject","arr","obj","keys","i","len","key","formDataToJSON","formData","buildPath","path","value","target","index","isNumericKey","isLast","formDataToJSON_default","stringifySafely","rawValue","parser","encoder","utils_default","e","defaults","transitional_default","data","headers","contentType","hasJSONContentType","isObjectPayload","formDataToJSON_default","isFileList","toURLEncodedForm","_FormData","toFormData_default","transitional","forcedJSONParsing","JSONRequested","strictJSONParsing","AxiosError_default","platform_default","status","method","defaults_default","ignoreDuplicateOf","utils_default","parseHeaders_default","rawHeaders","parsed","key","val","line","$internals","normalizeHeader","header","normalizeValue","value","utils_default","parseTokens","str","tokens","tokensRE","match","isValidHeaderName","matchHeaderValue","context","filter","isHeaderNameFilter","formatHeader","w","char","buildAccessors","obj","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders","headers","valueOrRewrite","rewrite","self","setHeader","_value","_header","_rewrite","lHeader","key","setHeaders","parseHeaders_default","dest","entry","parser","matcher","deleted","deleteHeader","keys","i","format","normalized","targets","asStrings","thing","first","computed","target","accessors","prototype","defineAccessor","mapped","headerValue","AxiosHeaders_default","transformData","fns","response","config","defaults_default","context","headers","AxiosHeaders_default","data","utils_default","fn","isCancel","value","CanceledError","message","config","request","AxiosError_default","utils_default","CanceledError_default","settle","resolve","reject","response","validateStatus","AxiosError_default","isAbsoluteURL","url","combineURLs","baseURL","relativeURL","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","isAbsoluteURL","combineURLs","import_proxy_from_env","import_http","init_empty","import_util","import_follow_redirects","import_zlib","VERSION","parseProtocol","url","match","DATA_URL_PATTERN","fromDataURI","uri","asBlob","options","_Blob","platform_default","protocol","parseProtocol","match","AxiosError_default","mime","isBase64","body","buffer","import_stream","import_stream","kInternals","AxiosTransformStream","stream","options","utils_default","prop","source","internals","event","size","chunk","encoding","callback","maxRate","readableHighWaterMark","timeWindow","divider","bytesThreshold","minChunkSize","pushChunk","_chunk","_callback","bytes","transformChunk","chunkSize","chunkRemainder","maxChunkSize","bytesLeft","passed","now","transformNextChunk","err","AxiosTransformStream_default","import_events","import_util","import_stream","asyncIterator","readBlob","blob","readBlob_default","BOUNDARY_ALPHABET","platform_default","textEncoder","util","CRLF","CRLF_BYTES","CRLF_BYTES_COUNT","FormDataPart","name","value","escapeName","isStringValue","utils_default","headers","readBlob_default","match","formDataToStream","form","headersHandler","options","tag","size","boundary","boundaryBytes","footerBytes","contentLength","parts","part","computedHeaders","formDataToStream_default","import_stream","ZlibHeaderTransformStream","stream","chunk","encoding","callback","header","ZlibHeaderTransformStream_default","callbackify","fn","reducer","utils_default","args","cb","value","err","callbackify_default","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","startedAt","i","bytesCount","passed","speedometer_default","throttle","fn","freq","timestamp","threshold","lastArgs","timer","invoke","args","now","passed","throttle_default","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","speedometer_default","throttle_default","e","loaded","total","progressBytes","rate","inRange","data","progressEventDecorator","throttled","lengthComputable","asyncDecorator","fn","args","utils_default","zlibOptions","zlib","brotliOptions","isBrotliSupported","utils_default","httpFollow","httpsFollow","followRedirects","isHttps","supportedProtocols","platform_default","protocol","flushOnFinish","stream","throttled","flush","dispatchBeforeRedirect","options","responseDetails","setProxy","configProxy","location","proxy","proxyUrl","proxyFromEnv","base64","proxyHost","redirectOptions","isHttpAdapterSupported","wrapAsync","asyncExecutor","resolve","reject","onDone","isDone","done","value","isRejected","_resolve","_reject","reason","onDoneHandler","resolveFamily","address","family","buildAddressEntry","http_default","config","data","lookup","responseType","responseEncoding","method","rejected","req","_lookup","callbackify_default","hostname","opt","cb","err","arg0","arg1","addresses","addr","emitter","onFinished","abort","CanceledError_default","fullPath","buildFullPath","parsed","convertedData","settle","fromDataURI","AxiosError_default","AxiosHeaders_default","headers","VERSION","onUploadProgress","onDownloadProgress","maxRate","maxUploadRate","maxDownloadRate","userBoundary","formDataToStream_default","formHeaders","knownLength","util","readBlob_default","contentLength","AxiosTransformStream_default","progressEventDecorator","progressEventReducer","asyncDecorator","auth","username","password","urlUsername","urlPassword","path","buildURL","customErr","transport","isHttpsRequest","empty_default","http","res","streams","responseLength","transformStream","responseStream","lastRequest","ZlibHeaderTransformStream_default","offListeners","response","responseBuffer","totalResponseBytes","chunk","responseData","socket","timeout","timeoutErrorMessage","transitional","transitional_default","ended","errored","isURLSameOrigin_default","platform_default","origin","isMSIE","url","cookies_default","platform_default","name","value","expires","path","domain","secure","cookie","utils_default","match","headersToObject","thing","AxiosHeaders_default","mergeConfig","config1","config2","config","getMergedValue","target","source","prop","caseless","utils_default","mergeDeepProperties","a","b","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","merge","configValue","resolveConfig_default","config","newConfig","mergeConfig","data","withXSRFToken","xsrfHeaderName","xsrfCookieName","headers","auth","AxiosHeaders_default","buildURL","buildFullPath","contentType","utils_default","platform_default","type","tokens","token","isURLSameOrigin_default","xsrfValue","cookies_default","isXHRAdapterSupported","xhr_default","config","resolve","reject","_config","resolveConfig_default","requestData","requestHeaders","AxiosHeaders_default","responseType","onUploadProgress","onDownloadProgress","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","done","request","onloadend","responseHeaders","response","settle","value","err","AxiosError_default","timeoutErrorMessage","transitional","transitional_default","utils_default","val","key","progressEventReducer","cancel","CanceledError_default","protocol","parseProtocol","platform_default","composeSignals","signals","timeout","length","controller","aborted","onabort","reason","unsubscribe","err","AxiosError_default","CanceledError_default","timer","signal","utils_default","composeSignals_default","streamChunk","chunk","chunkSize","len","pos","end","readBytes","iterable","readStream","stream","reader","done","value","trackStream","onProgress","onFinish","iterator","bytes","_onFinish","e","controller","loadedBytes","err","reason","isFetchSupported","isReadableStreamSupported","encodeText","encoder","str","test","fn","args","supportsRequestStream","duplexAccessed","hasContentType","platform_default","DEFAULT_CHUNK_SIZE","supportsResponseStream","utils_default","resolvers","res","type","_","config","AxiosError_default","getBodyLength","body","resolveBodyLength","headers","length","fetch_default","url","method","data","signal","cancelToken","timeout","onDownloadProgress","onUploadProgress","responseType","withCredentials","fetchOptions","resolveConfig_default","composedSignal","composeSignals_default","request","unsubscribe","requestContentLength","_request","contentTypeHeader","onProgress","flush","progressEventDecorator","progressEventReducer","asyncDecorator","trackStream","isCredentialsSupported","response","isStreamResponse","options","prop","responseContentLength","responseData","resolve","reject","settle","AxiosHeaders_default","err","knownAdapters","http_default","xhr_default","fetch_default","utils_default","fn","value","renderReason","reason","isResolvedHandle","adapter","adapters_default","adapters","length","nameOrAdapter","rejectedReasons","i","id","AxiosError_default","reasons","state","s","throwIfCancellationRequested","config","CanceledError_default","dispatchRequest","AxiosHeaders_default","transformData","adapters_default","defaults_default","response","reason","isCancel","validators","type","i","thing","deprecatedWarnings","validator","version","message","formatMessage","opt","desc","VERSION","value","opts","AxiosError_default","correctSpelling","assertOptions","options","schema","allowUnknown","keys","result","validator_default","validators","validator_default","Axios","instanceConfig","InterceptorManager_default","configOrUrl","config","err","dummy","stack","mergeConfig","transitional","paramsSerializer","headers","utils_default","contextHeaders","method","AxiosHeaders_default","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","promise","i","len","chain","dispatchRequest","newConfig","onFulfilled","onRejected","error","fullPath","buildFullPath","buildURL","url","generateHTTPMethod","isForm","data","Axios_default","CancelToken","_CancelToken","executor","resolvePromise","resolve","token","cancel","i","onfulfilled","_resolve","promise","message","config","request","CanceledError_default","listener","index","controller","abort","err","c","CancelToken_default","spread","callback","arr","isAxiosError","payload","utils_default","HttpStatusCode","key","value","HttpStatusCode_default","createInstance","defaultConfig","context","Axios_default","instance","bind","utils_default","instanceConfig","mergeConfig","axios","defaults_default","CanceledError_default","CancelToken_default","isCancel","VERSION","toFormData_default","AxiosError_default","promises","spread","isAxiosError","AxiosHeaders_default","thing","formDataToJSON_default","adapters_default","HttpStatusCode_default","axios_default","Axios","AxiosError","CanceledError","isCancel","CancelToken","VERSION","all","Cancel","isAxiosError","spread","toFormData","AxiosHeaders","HttpStatusCode","formToJSON","getAdapter","mergeConfig","axios_default","init_empty","import_form_data","logChatPromiseExecution","promise","name","error","sleep","m","r","isFunction","value","chatCodes","isReadableStream","obj","isBuffer","isFileWebAPI","uri","isBlobWebAPI","addFileToFormData","contentType","data","FormData","retryInterval","numberOfFailures","max","min","randomId","generateUUIDv4","hex","bytes","s","i","getRandomBytes","getRandomValuesWithMathRandom","getRandomValues","length","addConnectionEventListeners","cb","removeConnectionEventListeners","axiosParamsSerializer","params","newParams","k","formatMessage","message","addToMessageList","messages","timestampChanged","sortBy","addIfDoesNotExist","addMessageToList","messageArr","msg","messageArrayLength","messageTime","messageIsNewest","left","middle","right","map","uniqueMessages","enrichWithUserInfo","items","users","item","userId","lastestReactionMsg","quotedMsg","user","u","reaction","reactionUser","quotedUser","getUserInfo","id","getDirectChannelName","members","currentUserId","otherMember","member","getDirectChannelImage","ensureMembersUserInfoLoaded","client","memberIds","missingUserIds","getLatestCreatedAt","createPacketWithHeader","timestamp","type","configMsg","HEADER_SIZE","payload","jsonString","packet","typeCode","base64Encode","arrayBuffer","binary","len","replaceCodecNumber","input","regex","match","createForwardMessagePayload","targetCid","activeCid","forwardPayload","ChannelState","channel","s","messages","index","newMessage","timestampChanged","addIfDoesNotExist","messageSetToAddToIfDoesNotExist","message","newMessages","initializing","messagesToAdd","targetMessageSetIndex","i","isMessageFormatted","pinnedMatch","pm","pinnedMessages","a","b","timeA","pinnedMessage","formatted","msg","result","reaction","enforce_unique","messageWithReaction","ownReactions","item","parseMessage","m","set","updatedMessages","updateFunc","parent_id","pinned","messageSetIndex","msgIndex","isUpToDate","messageId","status","sortBy","addToMessageList","messageToRemove","isRemoved","removed","msgArray","user","_updateUserMessages","latestReactions","r","hardDelete","_deleteUserMessages","filteredMessages","now","userID","lastEvent","receivedAt","parentMessageId","limit","switchedToMessageSet","messageIdToFind","currentMessages","messages1","messages2","m1","m2","overlappingMessageSetIndices","_","mergeTargetMessageSetIndex","mergeSourceMessageSetIndices","target","sources","messageSet","normalizeFileName","name","dotIndex","baseName","extension","isHeicFile","file","mime","ext","getAttachmentCategory","mimeType","fileName","isVideoFile","buildAttachmentPayload","uploadedUrl","thumbUrl","voiceMeta","title","category","Channel","client","type","id","data","validTypeRe","validIDRe","ChannelState","message","randomId","messageId","optimisticMessage","error","statusToSet","stateMsg","m","messagePayload","isOfflineError","pollMessage","messageID","pollChoice","channel","oldMessageID","uri","name","contentType","user","files","options","failedFiles","processedFiles","file","newName","normalizeFileName","uploadResults","thumbUrls","thumbPromises","i","isVideoFile","thumbBlob","thumbFile","thumbResp","attachments","result","uploadedUrl","thumbUrl","voiceMeta","buildAttachmentPayload","event","reactionType","url","channelData","updateMessage","key","action","channel_id","members","capabilities","cooldown","allowedValues","response","a","b","search_term","offset","getUserInfo","payload","topicsFromApi","users","topics","topic","enrichWithUserInfo","channels","duration","parent_id","now","diff","min","max","messageSlice","logChatPromiseExecution","combined","state","ensureMembersUserInfoLoaded","getDirectChannelName","getDirectChannelImage","userID","lastRead","count","project_id","uuid","topicID","queryURL","messageSetToAddToIfDoesNotExist","update_options","membersStr","member","tempChannelCid","messageSet","areCapabilitiesChanged","message_id","limit","msg","pm","p","pmDate","resolve","videoPlayer","canvas","ctx","blob","topicCID","activeTopic","callbackOrString","callbackOrNothing","callback","el","value","channelState","userId","ownMessage","isThreadMessage","resUser","userInfo","quotedUser","userEvent","userMsg","truncatedAt","messageSetIndex","createdAt","userReaction","item","enrichedMembers","topicState","listeners","listener","updateUserIds","clientState","map","uniqueMessages","messages","watcher","last_read","read","acc","ClientState","users","user","updatedUser","channelID","userID","import_isomorphic_ws","isCloseEvent","res","isErrorEvent","StableWSConnection","client","addConnectionEventListeners","msg","extra","level","timeout","healthCheck","error","chatCodes","i","sleep","qs","token","rawURL","removeConnectionEventListeners","isClosedPromise","ws","resolve","onclose","event","randomId","isTokenReady","wsURL","WebSocket","response","err","options","interval","retryInterval","wsID","data","healthy","isWSFailure","code","statusCode","message","reject","now","TokenManager","tokenOrProvider","user","isErrorResponse","res","import_event_source_polyfill","ErrorFromResponse","CallAction","CallStatus","FRAME_TYPE","isString","x","ErmisChat","_ErmisChat","apiKey","projectId","baseURL","options","ClientState","inputOptions","empty_default","axios_default","TokenManager","axiosParamsSerializer","isFunction","key","refresh_token","user","token","params","url","query","headers","tokenStr","response","errorMsg","errorData","userTokenOrProvider","extenal_auth","external_auth_token","setTokenPromise","wsPromise","result","err","timeout","randomId","closePromise","channel","callbackOrString","callbackOrNothing","callback","el","value","type","data","config","error","requestConfig","e","uri","name","contentType","addFileToFormData","ErrorFromResponse","isErrorResponse","event","postListenerCallbacks","cid","c","members","ensureMembersUserInfoLoaded","updatedUsers","enrichedMembers","enrichWithUserInfo","channelName","getDirectChannelName","channelState","messageEvent","jsonString","refMap","channelID","hardDelete","client","t","m","msg","listeners","listener","cids","filter","sort","StableWSConnection","onCallBack","userInfo","otherMember","member","page_size","page","defaultOptions","project_id","user_id","userResponse","users","usersRepsonse","userIds","contact_users","block_users","contact","userID","state_user","file","formData","new_user","about_me","body","filterConditions","stateOptions","payload","a","b","aLatest","getLatestCreatedAt","topic","bLatest","memberIds","membersInfo","getDirectChannelImage","channels","channelsFromApi","skipInitialization","offlineMode","id","search_term","offset","limit","channelType","channelId","custom","Channel","uuid","timeoutOrExpirationDate","pinExpires","now","userAgent","authorization","axiosRequestConfigParams","axiosRequestConfigHeaders","axiosRequestConfigRest","that","client_request_id","EVENT_MAP","import_meta","wasm","cachedUint8ArrayMemory0","getUint8ArrayMemory0","cachedTextDecoder","MAX_SAFARI_DECODE_BYTES","numBytesDecoded","decodeText","ptr","len","getStringFromWasm0","heap","heap_next","addHeapObject","obj","idx","getObject","WASM_VECTOR_LEN","cachedTextEncoder","arg","view","buf","passStringToWasm0","malloc","realloc","mem","offset","code","ret","cachedDataViewMemory0","getDataViewMemory0","isLikeNone","x","debugString","val","type","description","name","length","debug","i","builtInMatches","className","handleError","f","args","e","dropObject","takeObject","getArrayU8FromWasm0","CLOSURE_DTORS","state","makeMutClosure","arg0","arg1","dtor","real","a","makeClosure","passArray8ToWasm0","__wasm_bindgen_func_elem_12858","__wasm_bindgen_func_elem_11688","arg2","__wasm_bindgen_func_elem_6230","__wasm_bindgen_func_elem_2287","__wasm_bindgen_func_elem_12912","__wasm_bindgen_func_elem_5748","__wasm_bindgen_func_elem_14376","arg3","__wbindgen_enum_BinaryType","__wbindgen_enum_ReadableStreamType","__wbindgen_enum_RequestCache","__wbindgen_enum_RequestCredentials","__wbindgen_enum_RequestMode","ConnectionStatsFinalization","ConnectionStats","retptr","r0","r2","connection_type","rtt_ms","packet_loss","ptr0","len0","r1","v1","value","ErmisCallFinalization","ErmisCall","relay_urls","secret_key","addr","data","IntoUnderlyingByteSourceFinalization","IntoUnderlyingByteSource","controller","IntoUnderlyingSinkFinalization","IntoUnderlyingSink","chunk","reason","IntoUnderlyingSourceFinalization","IntoUnderlyingSource","EXPECTED_RESPONSE_TYPES","__wbg_load","module","imports","bytes","instance","__wbg_get_imports","ptr1","len1","v","arg4","result","state0","cb0","__wbg_finalize_init","__wbg_init","__wbg_init","module_or_path","wasm","import_meta","imports","__wbg_get_imports","instance","module","__wbg_load","__wbg_finalize_init","ermis_call_node_wasm_default","__wbg_init","MediaStreamSender","nodeCall","address","error","track","audioTrack","audioEncoder","chunk","metadata","description","base64Encode","data","timestamp","packet","createPacketWithHeader","e","videoTrack","settings","videoWidth","videoHeight","videoEncoder","frameType","stream","audioEnable","videoEnable","configPacket","videoProcessor","frameCounter","done","frame","keyFrame","err","audioReader","type","videoReady","audioReady","allConfigsSent","NALUnitType","value","HEVCDecoderConfigurationRecord","_HEVCDecoderConfigurationRecord","config","data","buffer","view","offset","bitOffset","readBits","numBits","result","i","bit","readU8","readU16BE","val","readU32BE","readU48BE","high","low","readExact","length","generalProfileSpace","generalTierFlag","generalProfileIdc","generalProfileCompatibilityFlags","generalConstraintIndicatorFlags","generalLevelIdc","minSpatialSegmentationIdc","parallelismType","chromaFormatIdc","bitDepthLumaMinus8","bitDepthChromaMinus8","avgFrameRate","constantFrameRate","numTemporalLayers","temporalIdNested","lengthSizeMinusOne","numOfArrays","arrays","arrayCompleteness","nalUnitType","nalUnitTypeName","numNalus","nalus","j","nalUnitLength","naluData","profileAndSpace","profileCompatibilityFlagsUnfiltered","profileCompatibilityFlags","char","tierAndLevel","constraintFlags","constraint","bytes","MAX_AUDIO_LATENCY","MIN_BUFFER_AHEAD","MediaStreamReceiver","nodeCall","events","error","AudioContextClass","callType","audioTrack","audioData","err","videoDecoder","frame","numberOfChannels","numberOfFrames","sampleRate","duration","currentTime","audioBuffer","size","tempBuffer","ch","channelData","source","buffer","receivedCodec","HEVCDecoderConfigurationRecord","textDecoder","data","dataView","frameType","payloadOffset","payload","videoConfigStr","videoConfig","videoTrackGenerator","descriptionBuffer","binaryString","desc","i","newCodec","replaceCodecNumber","decoderConfig","audioConfig","isKeyFrame","timestampBigInt","timestamp","decodeErr","transceiverState","orientation","configErr","r","track","ErmisCallNode","client","sessionID","wasmPath","relayUrl","ermis_call_node_wasm_default","error","node","ErmisCall","MediaStreamSender","MediaStreamReceiver","remoteStream","state","address","payload","action","errMsg","devices","audioDevices","device","videoDevices","audioConstraints","videoConstraints","mediaConstraints","stream","track","message","status","cid","eventUserId","members","memberIds","callerId","receiverId","id","callerUser","receiverUser","event","eventSessionId","is_video","signal","metadata","online","upgradeUserId","upgraderInfo","audioDevice","videoDevice","callType","newVideoTrack","audioEnable","videoEnable","enabled","screenStream","screenTrack","cameraStream","cameraTrack","deviceId","newAudioTrack","oldAudioTrack","oldVideoTrack","init_empty","ErmisAuthProvider","apiKey","baseURL","options","inputOptions","empty_default","axios_default","isFunction","type","url","data","config","response","error","requestConfig","e","chatCodes","sleep","retryInterval","params","err","ErrorFromResponse","isErrorResponse","userAgent","signal","randomId","axiosRequestConfigParams","axiosRequestConfigHeaders","axiosRequestConfigRest","identifier","method","otp","token","address","length","result","characters","charactersLength","i","signature","DURATION_MAP","resolveUser","userId","userMap","parseSystemMessage","value","trimmed","parts","formatId","userName","channelName","channelType","duration","durationText","oldUserId","newUserId","oldUserName","newUserName","formatDuration","durationSec","sec","minutes","seconds","resolveUser","userId","userMap","parseSignalMessage","value","trimmed","parts","formatId","userName","enderId","duration","enderName"]}