export declare const symlinkNetwork = " \n/* eslint-disable */ \n/*\n NOTE: This file goes inside the network.symlink.ts web worker and because\n we are in a webworker you do NOT have access to stuff that you would use\n in type script or react or npm libraries.\n\n Modifying anything in this file requires native javascript! \n*/\n\n// Javascript helpers since we don't have access to lodash etc. here.\n/** @private */\nclass _helpers {\n constructor() {\n this.bindObject = (fn, thisArg) => {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n };\n\n this.toString = Object.prototype.toString;\n\n this.objectOf = ((cache) => {\n return (thing) => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n })(Object.create(null));\n\n this.checkType = (type) => {\n type = type.toLowerCase();\n return (thing) => {\n return this.objectOf(thing) === type;\n };\n };\n\n this.isArray = (val) => {\n return Array.isArray(val);\n };\n\n this.isUndefined = (val) => {\n return typeof val === \"undefined\";\n };\n\n this.isBuffer = (val) => {\n return (\n val !== null &&\n !this.isUndefined(val) &&\n val.constructor !== null &&\n !this.isUndefined(val.constructor) &&\n typeof val.constructor.isBuffer === \"function\" &&\n val.constructor.isBuffer(val)\n );\n };\n\n this.isArrayBuffer = this.checkType(\"ArrayBuffer\");\n\n this.isArrayBufferView = (val) => {\n let result;\n if (typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && this.isArrayBuffer(val.buffer);\n }\n return result;\n };\n\n this.isString = (val) => {\n return typeof val === \"string\";\n };\n\n this.isNumber = (val) => {\n return typeof val === \"number\";\n };\n\n this.isObject = (val) => {\n return val !== null && typeof val === \"object\";\n };\n\n this.isPlainObject = (val) => {\n if (this.objectOf(val) !== \"object\") {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n };\n\n this.isDate = this.checkType(\"Date\");\n\n this.isFile = this.checkType(\"File\");\n\n this.isBlob = this.checkType(\"Blob\");\n\n this.hasFiles = this.checkType(\"FileList\");\n\n this.isFunction = (val) => {\n return toString.call(val) === \"[object Function]\";\n };\n\n this.isStream = (val) => {\n return this.isObject(val) && this.isFunction(val.pipe);\n };\n\n this.isFormObj = (thing) => {\n const pattern = \"[object FormData]\";\n return (\n thing &&\n ((typeof FormData === \"function\" && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (this.isFunction(thing.toString) && thing.toString() === pattern))\n );\n };\n\n this.isURLSearchParams = this.checkType(\"URLSearchParams\");\n\n this.trim = (str) => {\n const regX = \"/^[s\uFEFF\u00A0]+|[s\uFEFF\u00A0]+$\";\n return str.trim ? str.trim() : str.replace(new RegExp(regX, \"g\"), \"\");\n };\n\n this.isStandardBrowserEnv = () => {\n let product;\n if (\n typeof navigator !== \"undefined\" &&\n ((product = navigator.product) === \"ReactNative\" ||\n product === \"NativeScript\" ||\n product === \"NS\")\n ) {\n return false;\n }\n\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n };\n\n this.forEach = function (obj, fn) {\n if (obj === null || typeof obj === \"undefined\") {\n return;\n }\n\n if (typeof obj !== \"object\") {\n obj = [obj];\n }\n\n if (this.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n };\n\n this.merge = function () {\n let result = {};\n function assignValue(val, key) {\n if (Helpers.isPlainObject(result[key]) && Helpers.isPlainObject(val)) {\n result[key] = Helpers.merge(result[key], val);\n } else if (Helpers.isPlainObject(val)) {\n result[key] = Helpers.merge({}, val);\n } else if (Helpers.isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n Helpers.forEach(arguments[i], assignValue);\n }\n return result;\n };\n\n this.extend = function (a, b, thisArg) {\n Helpers.forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === \"function\") {\n a[key] = Helpers.bindObject(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n };\n\n this.stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xfeff) {\n content = content.slice(1);\n }\n return content;\n };\n\n this.inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(\n superConstructor.prototype,\n descriptors\n );\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n };\n\n this.toFlatObject = function (sourceObj, destObj, filter, propFilter) {\n let props,\n i,\n merged = {};\n\n destObj = destObj || {};\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n const prop = props[i];\n if (\n (!propFilter || propFilter(prop, sourceObj, destObj)) &&\n !merged[prop]\n ) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && Object.getPrototypeOf(sourceObj);\n } while (\n sourceObj &&\n (!filter || filter(sourceObj, destObj)) &&\n sourceObj !== Object.prototype\n );\n\n return destObj;\n };\n\n this.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 this.toArray = (thing) => {\n if (!thing) return null;\n if (this.isArray(thing)) return thing;\n let i = thing.length;\n if (!this.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 this.isTypedArray = (function (TypedArray) {\n return function (thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n })(typeof Uint8Array !== \"undefined\" && Object.getPrototypeOf(Uint8Array));\n\n this.forEachEntry = function (obj, fn) {\n const generator = obj && obj[Symbol.iterator];\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 this.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 this.isHTMLForm = this.checkType(\"HTMLFormElement\");\n\n this.hasOwnProperty = (function resolver(_hasOwnProperty) {\n return function (obj, prop) {\n return _hasOwnProperty.call(obj, prop);\n };\n })(Object.prototype.hasOwnProperty);\n }\n}\n\n// Init the helper class\n/** @private */\nconst Helpers = new _helpers();\n\n// Begin networking\n// Note: We use function here instad of const because we are\n// creating a Functon Object that we will use the extended prototypes on.\n/** @private */\nfunction LagunaNetworkError(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 = \"LagunaNetworkError\";\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nHelpers.inherits(LagunaNetworkError, Error, {\n toJSON: function toJSON() {\n return {\n message: this.message,\n name: this.name,\n description: this.description,\n number: this.number,\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n config: this.config,\n code: this.code,\n status:\n this.response && this.response.status ? this.response.status : null,\n };\n },\n});\n\nlet networkPrototypes = LagunaNetworkError.prototype;\nlet descriptors = {};\n\n// Create some enums for errors\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].forEach(function (code) {\n descriptors[code] = { value: code };\n});\n\nObject.defineProperties(LagunaNetworkError, descriptors);\nObject.defineProperty(networkPrototypes, \"isNetworkError\", { value: true });\n\nLagunaNetworkError.from = function (\n error,\n code,\n config,\n request,\n response,\n customProps\n) {\n const _networkError = Object.create(networkPrototypes);\n\n Helpers.toFlatObject(error, _networkError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n LagunaNetworkError.call(\n _networkError,\n error.message,\n code,\n config,\n request,\n response\n );\n\n _networkError.cause = error;\n\n _networkError.name = error.name;\n\n customProps && Object.assign(_networkError, customProps);\n\n return _networkError;\n};\n\nlet internalLagunaNetworkError = LagunaNetworkError;\n\nlet browserHasFormData =\n // eslint-disable-next-line no-restricted-globals\n typeof self == \"object\" ? self.FormData : window.FormData;\n\nlet _internalFormData = browserHasFormData;\n\nconst isVisitable = (thing) => {\n return Helpers.isPlainObject(thing) || Helpers.isArray(thing);\n};\n\nconst removeBrackets = (key) => {\n return Helpers.endsWith(key, \"[]\") ? key.slice(0, -2) : key;\n};\n\nconst renderKey = (path, key, dots) => {\n if (!path) return key;\n return path\n .concat(key)\n .map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? \"[\" + token + \"]\" : token;\n })\n .join(dots ? \".\" : \"\");\n};\n\nconst isFlatArray = (arr) => {\n return Helpers.isArray(arr) && !arr.some(isVisitable);\n};\n\nconst networkAsserts = Helpers.toFlatObject(\n Helpers,\n {},\n null,\n function filter(prop) {\n const regEx = \"/^is[A-Z]/\";\n return new RegExp(regEx).test(prop);\n }\n);\n\nconst isFormatCompliantWithAccepted = (thing) => {\n return (\n thing &&\n Helpers.isFunction(thing.append) &&\n thing[Symbol.toStringTag] === \"FormData\" &&\n thing[Symbol.iterator]\n );\n};\n\n// If we are recieving form data we need to\n// translate the data to actual form data this is only\n// used inside of a browser when building FormData or FileReader type stuff.\nconst convertFormData = (obj, formData, options) => {\n if (!Helpers.isObject(obj)) {\n throw new TypeError(\n \"Response data needs to be an object, try JSON.parse() first.\"\n );\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (_internalFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = Helpers.toFlatObject(\n options,\n {\n metaTokens: true,\n dots: false,\n indexes: false,\n },\n false,\n (option, source) => {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !Helpers.isUndefined(source[option]);\n }\n );\n\n const metaTokens = options.metaTokens;\n \n const convertObject = (value) => {\n if (value === null) return \"\";\n\n if (Helpers.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && Helpers.isBlob(value)) {\n throw new internalLagunaNetworkError(\n \"Blob is not supported. Use a Buffer instead.\"\n );\n }\n\n if (Helpers.isArrayBuffer(value) || Helpers.isTypedArray(value)) {\n return useBlob && typeof Blob === \"function\"\n ? new Blob([value])\n : Buffer.from(value);\n }\n\n return value;\n };\n\n const defaultVisitor = (value, key, path) => {\n let arr = value;\n\n if (value && !path && typeof value === \"object\") {\n if (Helpers.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 (Helpers.isArray(value) && isFlatArray(value)) ||\n Helpers.hasFiles(value) ||\n (Helpers.endsWith(key, \"[]\") && (arr = Helpers.toArray(value)))\n ) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !Helpers.isUndefined(el) &&\n formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true\n ? renderKey([key], index, dots)\n : indexes === null\n ? key\n : key + \"[]\",\n convertObject(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), convertObject(value));\n\n return false;\n };\n\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 && isFormatCompliantWithAccepted(formData);\n\n if (!Helpers.isFunction(visitor)) {\n throw new TypeError(\"visitor must be a function\");\n }\n\n\n const stack = [];\n\n const exposedHelpers = Object.assign(networkAsserts, {\n defaultVisitor: defaultVisitor,\n convertObject: convertObject,\n isVisitable: isVisitable,\n });\n\n const build = (value, path) => {\n if (Helpers.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 Helpers.forEach(value, function each(el, key) {\n const result =\n !Helpers.isUndefined(el) &&\n visitor.call(\n formData,\n el,\n Helpers.isString(key) ? key.trim() : key,\n path,\n 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 (!Helpers.isObject(obj)) {\n throw new TypeError(\"data must be an object\");\n }\n\n build(obj);\n\n return formData;\n};\n\nconst convertFormDataRef = convertFormData;\n\nconst encodeFormData = (str) => {\n const charMap = {\n \"!\": \"%21\",\n \"'\": \"%27\",\n \"(\": \"%28\",\n \")\": \"%29\",\n \"~\": \"%7E\",\n \"%20\": \"+\",\n \"%00\": \"\0\",\n };\n\n const regEx = \"/[!'()~]|%20|%00\";\n return encodeURIComponent(str).replace(\n new RegExp(regEx, \"g\"),\n function replacer(match) {\n return charMap[match];\n }\n );\n};\n\nfunction NetworkURLSearchParams(params, options) {\n this._pairs = [];\n params && convertFormDataRef(params, this, options);\n}\n\nconst searchPrototype = NetworkURLSearchParams.prototype;\n\nsearchPrototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nsearchPrototype.toString = function toString(encoder) {\n const _encode = encoder\n ? function (value) {\n return encoder.call(this, value, encodeFormData);\n }\n : encodeFormData;\n\n return this._pairs\n .map(function each(pair) {\n return _encode(pair[0]) + \"=\" + _encode(pair[1]);\n }, \"\")\n .join(\"&\");\n};\n\nconst _networkSearchParams = NetworkURLSearchParams;\n\nconst encode = (val) => {\n return encodeURIComponent(val)\n .replace(new RegExp(\"/%3A\", \"gi\"), \":\")\n .replace(new RegExp(\"/%24\", \"g\"), \"$\")\n .replace(new RegExp(\"/%2C\", \"gi\"), \",\")\n .replace(new RegExp(\"/%20\", \"g\"), \"+\")\n .replace(new RegExp(\"/%5B\", \"gi\"), \"[\")\n .replace(new RegExp(\"/%5D\", \"gi\"), \"]\");\n};\n\nconst buildURL = (url, params, options) => {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n const _encode = (options && options.encode) || encode;\n\n const serializerParams = Helpers.isURLSearchParams(params)\n ? params.toString()\n : new _networkSearchParams(params, options).toString(_encode);\n\n if (serializerParams) {\n url += (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + serializerParams;\n }\n\n return url;\n};\n\nfunction TransformBridge() {\n this.handlers = [];\n}\n\nTransformBridge.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null,\n });\n return this.handlers.length - 1;\n};\n\nTransformBridge.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\nTransformBridge.prototype.clear = function clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n};\n\nTransformBridge.prototype.forEach = function forEach(fn) {\n Helpers.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nconst transformBridge = TransformBridge;\n\nconst normalizeHeaderName = (headers, normalizedName) => {\n Helpers.forEach(headers, function processHeader(value, name) {\n if (\n name !== normalizedName &&\n name.toUpperCase() === normalizedName.toUpperCase()\n ) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\nconst parseBridge = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false,\n};\n\nlet _searchParams =\n typeof SearchParams !== \"undefined\"\n ? // eslint-disable-next-line no-undef\n SearchParams\n : _networkSearchParams;\n\nconst _BrowserFormDataObject = FormData;\n\nconst browser = {\n isBrowser: false,\n classes: {\n SearchParams: _searchParams,\n FormData: _BrowserFormDataObject,\n Blob: Blob,\n },\n protocols: [\"http\", \"https\", \"file\", \"blob\", \"url\"],\n};\n\nconst currentPlatform = browser;\n\nconst toURLEncodedForm = (data, options) => {\n return convertFormDataRef(\n data,\n new currentPlatform.classes.SearchParams(),\n Object.assign(\n {\n visitor: function (value, key, path, helpers) {\n if (currentPlatform.isNode && Helpers.isBuffer(value)) {\n this.append(key, value.toString(\"base64\"));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n },\n options\n )\n );\n};\n\nconst parsePropPath = (name) => {\n return Helpers.matchAll(new RegExp(\"/w+|[(w*)]\", \"g\"), name).map(function (\n match\n ) {\n return match[0] === \"[]\" ? \"\" : match[1] || match[0];\n });\n};\n\nconst arrayToObject = (arr) => {\n const obj = {};\n const keys = Object.keys(arr);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n};\n\nconst convertFormToJSON = (formData) => {\n const buildPath = (path, value, target, index) => {\n let name = path[index++];\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && Helpers.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (Helpers.hasOwnProperty(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] || !Helpers.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && Helpers.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n };\n\n if (Helpers.isFormObj(formData) && Helpers.isFunction(formData.entries)) {\n let obj = {};\n\n Helpers.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n};\n\nconst convertFormToJSONRef = convertFormToJSON;\n\nconst resolveReturnResult = (resolve, reject, response) => {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(\n new internalLagunaNetworkError(\n \"Request failed with status code \" + response.status,\n [\n internalLagunaNetworkError.ERR_BAD_REQUEST,\n internalLagunaNetworkError.ERR_BAD_RESPONSE,\n ][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n )\n );\n }\n};\n\n// If the server sent back cookies and we are in the browser\n// then write the cookies otherwise ignore them with an empty object.\nconst cookieMonster = Helpers.isStandardBrowserEnv()\n ? (() => {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n const cookie = [];\n cookie.push(name + \"=\" + encodeURIComponent(value));\n\n if (Helpers.isNumber(expires)) {\n cookie.push(\"expires=\" + new Date(expires).toGMTString());\n }\n\n if (Helpers.isString(path)) {\n cookie.push(\"path=\" + path);\n }\n\n if (Helpers.isString(domain)) {\n cookie.push(\"domain=\" + domain);\n }\n\n if (secure === true) {\n cookie.push(\"secure\");\n }\n\n document.cookie = cookie.join(\"; \");\n },\n\n read: function read(name) {\n const match = document.cookie.match(\n new RegExp(\"(^|;\\s*)(\" + name + \")=([^;]*)\")\n );\n return match ? decodeURIComponent(match[3]) : null;\n },\n\n remove: function remove(name) {\n this.write(name, \"\", Date.now() - 86400000);\n },\n };\n })()\n : (() => {\n return {\n write: function write() { },\n read: function read() {\n return null;\n },\n remove: function remove() { },\n };\n })();\n\nconst isAbsoluteURL = (url) => {\n return new RegExp(\"/^([a-z][a-zd+-.]*:)?//\", \"i\").test(url);\n};\n\nconst combineURLs = (baseURL, relativeURL) => {\n return relativeURL\n ? baseURL.replace(new RegExp(\"//+$/\"), \"\") +\n \"/\" +\n relativeURL.replace(new RegExp(\"/^/+/\"), \"\")\n : baseURL;\n};\n\nconst buildFullPath = (baseURL, requestedURL) => {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n\nconst ignoreDuplicateHeaders = [\n \"age\",\n \"authorization\",\n \"content-length\",\n \"content-type\",\n \"etag\",\n \"expires\",\n \"from\",\n \"host\",\n \"if-modified-since\",\n \"if-unmodified-since\",\n \"last-modified\",\n \"location\",\n \"max-forwards\",\n \"proxy-authorization\",\n \"referer\",\n \"retry-after\",\n \"user-agent\",\n];\n\nconst parseResponseHeaders = (headers) => {\n let parsed = {};\n\n if (!headers) {\n return parsed;\n }\n\n Helpers.forEach(headers.split(\"\\n\"), function parser(line) {\n const i = line.indexOf(\":\");\n const key = Helpers.trim(line.slice(0, i)).toLowerCase();\n const val = Helpers.trim(line.slice(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateHeaders.indexOf(key) >= 0) {\n return;\n }\n if (key === \"set-cookie\") {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + \", \" + val : val;\n }\n }\n });\n\n return parsed;\n};\n\n// Some basic orgin testing for cors related stuff.\nconst isLocationSameOrigin = Helpers.isStandardBrowserEnv()\n ? (() => {\n const msie = new RegExp(\"/(msie|trident)\", \"i\").test(navigator.userAgent);\n const urlParsingNode = document.createElement(\"a\");\n let originURL;\n\n const resolveURL = (url) => {\n let href = url;\n\n if (msie) {\n urlParsingNode.setAttribute(\"href\", href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute(\"href\", href);\n\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol\n ? urlParsingNode.protocol.replace(/:$/, \"\")\n : \"\",\n host: urlParsingNode.host,\n search: urlParsingNode.search\n ? // eslint-disable-next-line no-invalid-regexp\n urlParsingNode.search.replace(new RegExp(\"/^?/\"), \"\")\n : \"\",\n hash: urlParsingNode.hash\n ? urlParsingNode.hash.replace(new RegExp(\"/^#/\"), \"\")\n : \"\",\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname:\n urlParsingNode.pathname.charAt(0) === \"/\"\n ? urlParsingNode.pathname\n : \"/\" + urlParsingNode.pathname,\n };\n };\n\n originURL = resolveURL(window.location.href);\n\n return (requestURL) => {\n let parsed = Helpers.isString(requestURL)\n ? resolveURL(requestURL)\n : requestURL;\n return (\n parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host\n );\n };\n })()\n : (() => {\n // Just return true because we are in a thread\n return () => {\n return true;\n };\n })();\n\nfunction NetworkCanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n internalLagunaNetworkError.call(\n this,\n message == null ? \"canceled\" : message,\n internalLagunaNetworkError.ERR_CANCELED,\n config,\n request\n );\n this.name = \"NetworkCanceledError\";\n}\n\nHelpers.inherits(NetworkCanceledError, internalLagunaNetworkError, {\n __CANCEL__: true,\n});\n\nconst networkCanceledErrorRef = NetworkCanceledError;\n\nconst parseProtocol = (url) => {\n const match = new RegExp(\"/^([-+w]{1,25})(:?//|:)/\").exec(url);\n return (match && match[1]) || \"\";\n};\n\n// The xhr network adapter reference\n// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest\n\nconst networkAdapterRef = (config) => {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n let requestHeaders = config.headers;\n let responseType = config.responseType;\n let requestData = config.data;\n let onCanceled;\n\n const done = () => {\n if (config.cancelRequest) {\n config.cancelRequest.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener(\"abort\", onCanceled);\n }\n };\n\n if (Helpers.isFormObj(requestData) && Helpers.isStandardBrowserEnv()) {\n delete requestHeaders[\"Content-Type\"]; // Let the browser set it\n }\n\n let networkRequest = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n const username = config.auth.username || \"\";\n const password = config.auth.password\n ? unescape(encodeURIComponent(config.auth.password)) // unescape is only depreciated in the browser not in web workers\n : \"\";\n requestHeaders.Authorization = \"Basic \" + btoa(username + \":\" + password);\n }\n\n const fullPath = buildFullPath(config.baseURL, config.url);\n\n networkRequest.open(\n config.method.toUpperCase(),\n buildURL(fullPath, config.params, config.paramsSerializer),\n true\n );\n\n networkRequest.timeout = config.timeout;\n\n const onloadend = () => {\n if (!networkRequest) {\n return;\n }\n // Prepare the response\n const responseHeaders =\n \"getAllResponseHeaders\" in networkRequest\n ? parseResponseHeaders(networkRequest.getAllResponseHeaders())\n : null;\n\n const responseData =\n !responseType || responseType === \"text\" || responseType === \"json\"\n ? networkRequest.responseText\n : networkRequest.response;\n\n const response = {\n data: responseData,\n status: networkRequest.status,\n statusText: networkRequest.statusText,\n headers: responseHeaders,\n config: config,\n request: networkRequest,\n };\n\n resolveReturnResult(\n function _resolve(value) {\n resolve(value);\n done();\n },\n function _reject(err) {\n reject(err);\n done();\n },\n response\n );\n\n // Dispose the network socket\n networkRequest = null;\n };\n\n if (\"onloadend\" in networkRequest) {\n networkRequest.onloadend = onloadend;\n } else {\n networkRequest.onreadystatechange = function handleLoad() {\n if (!networkRequest || networkRequest.readyState !== 4) {\n return;\n }\n\n if (\n networkRequest.status === 0 &&\n !(\n networkRequest.responseURL &&\n networkRequest.responseURL.indexOf(\"file:\") === 0\n )\n ) {\n return;\n }\n setTimeout(onloadend);\n };\n }\n\n networkRequest.onabort = () => {\n if (!networkRequest) {\n return;\n }\n\n reject(\n new internalLagunaNetworkError(\n \"Network request has been aborted.\",\n internalLagunaNetworkError.ECONNABORTED,\n config,\n networkRequest\n )\n );\n\n // Dispose the network socket\n networkRequest = null;\n };\n\n // Handle low level network errors\n networkRequest.onerror = () => {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(\n new internalLagunaNetworkError(\n \"Network Error\",\n internalLagunaNetworkError.ERR_NETWORK,\n config,\n networkRequest\n )\n );\n\n // Dispose the network socket\n networkRequest = null;\n };\n\n // Handle socket or server timeout\n networkRequest.ontimeout = () => {\n const timeoutErrorMessage = config.timeout\n ? \"timeout of \" + config.timeout + \"ms exceeded\"\n : \"timeout exceeded\";\n\n const _parseBridge = config.parseBridge || parseBridge;\n\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n\n reject(\n new internalLagunaNetworkError(\n timeoutErrorMessage,\n _parseBridge.clarifyTimeoutError\n ? internalLagunaNetworkError.ETIMEDOUT\n : internalLagunaNetworkError.ECONNABORTED,\n config,\n networkRequest\n )\n );\n\n // Dispose the network socket\n networkRequest = null;\n };\n\n // Add xsrf header in a standard browser environment.\n if (Helpers.isStandardBrowserEnv()) {\n const xsrfValue =\n (config.withCredentials || isLocationSameOrigin(fullPath)) &&\n config.xsrfCookieName\n ? cookieMonster.read(config.xsrfCookieName)\n : undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Inject headers to the xhr object\n if (\"setRequestHeader\" in networkRequest) {\n Helpers.forEach(requestHeaders, (val, key) => {\n if (\n typeof requestData === \"undefined\" &&\n key.toLowerCase() === \"content-type\"\n ) {\n delete requestHeaders[key];\n } else {\n networkRequest.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!Helpers.isUndefined(config.withCredentials)) {\n networkRequest.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== \"json\") {\n networkRequest.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === \"function\") {\n networkRequest.addEventListener(\"progress\", config.onDownloadProgress);\n }\n\n // Handle upload events\n if (\n typeof config.onUploadProgress === \"function\" &&\n networkRequest.upload\n ) {\n networkRequest.upload.addEventListener(\n \"progress\",\n config.onUploadProgress\n );\n }\n\n // Allow the socket to be canceled\n if (config.cancelRequest || config.signal) {\n // eslint-disable-next-line func-names\n onCanceled = (cancel) => {\n if (!networkRequest) {\n return;\n }\n reject(\n !cancel || cancel.type\n ? new networkCanceledErrorRef(null, config, networkRequest)\n : cancel\n );\n networkRequest.abort();\n networkRequest = null;\n };\n\n config.cancelRequest && config.cancelRequest.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted\n ? onCanceled()\n : config.signal.addEventListener(\"abort\", onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n const protocol = parseProtocol(fullPath);\n\n if (protocol && currentPlatform.protocols.indexOf(protocol) === -1) {\n reject(\n new internalLagunaNetworkError(\n \"Unsupported protocol \" + protocol + \":\",\n internalLagunaNetworkError.ERR_BAD_REQUEST,\n config\n )\n );\n return;\n }\n\n // Send\n networkRequest.send(requestData);\n });\n};\n\nconst DEFAULT_CONTENT_TYPE_STRING = {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n};\n\nconst setContentIfUnset = (headers, value) => {\n if (\n !Helpers.isUndefined(headers) &&\n Helpers.isUndefined(headers[\"Content-Type\"])\n ) {\n headers[\"Content-Type\"] = value;\n }\n};\n\nconst getDefaultNetworkAdapter = () => {\n if (typeof XMLHttpRequest !== \"undefined\") {\n return networkAdapterRef;\n } else if (\n typeof process !== \"undefined\" &&\n Object.prototype.toString.call(process) === \"[object process]\"\n ) {\n return networkAdapterRef;\n }\n return null;\n};\n\nconst jsonStringify = (rawValue, parser, encoder) => {\n if (Helpers.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return Helpers.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 networkDefaults = {\n parseBridge: parseBridge,\n\n networkAdapter: getDefaultNetworkAdapter(),\n\n transformRequest: [\n function transformRequest(data, headers) {\n normalizeHeaderName(headers, \"Accept\");\n normalizeHeaderName(headers, \"Content-Type\");\n\n const contentType = (headers && headers[\"Content-Type\"]) || \"\";\n const hasJSONContentType = contentType.indexOf(\"application/json\") > -1;\n const isObjectPayload = Helpers.isObject(data);\n\n if (isObjectPayload && Helpers.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormObj = Helpers.isFormObj(data);\n\n if (isFormObj) {\n if (!hasJSONContentType) {\n return data;\n }\n return hasJSONContentType\n ? JSON.stringify(convertFormToJSONRef(data))\n : data;\n }\n\n if (\n Helpers.isArrayBuffer(data) ||\n Helpers.isBuffer(data) ||\n Helpers.isStream(data) ||\n Helpers.isFile(data) ||\n Helpers.isBlob(data)\n ) {\n return data;\n }\n if (Helpers.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (Helpers.isURLSearchParams(data)) {\n setContentIfUnset(\n headers,\n \"application/x-www-form-urlencoded;charset=utf-8\"\n );\n return data.toString();\n }\n\n let hasFiles;\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 (\n (hasFiles = Helpers.hasFiles(data)) ||\n contentType.indexOf(\"multipart/form-data\") > -1\n ) {\n const _formData = this.env && this.env.FormData;\n\n return convertFormDataRef(\n hasFiles ? { \"files[]\": data } : data,\n _formData && new _formData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType) {\n setContentIfUnset(headers, \"application/json\");\n return jsonStringify(data);\n }\n\n return data;\n },\n ],\n\n transformResponse: [\n function transformResponse(data) {\n const parseBridge = this.parseBridge || networkDefaults.parseBridge;\n const forcedJSONParsing = parseBridge && parseBridge.forcedJSONParsing;\n const JSONRequested = this.responseType === \"json\";\n\n if (\n data &&\n Helpers.isString(data) &&\n ((forcedJSONParsing && !this.responseType) || JSONRequested)\n ) {\n const silentJSONParsing = parseBridge && parseBridge.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 internalLagunaNetworkError.from(\n e,\n internalLagunaNetworkError.ERR_BAD_RESPONSE,\n this,\n null,\n this.response\n );\n }\n throw e;\n }\n }\n }\n\n return data;\n },\n ],\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: currentPlatform.classes.FormData,\n Blob: currentPlatform.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 },\n },\n};\n\nHelpers.forEach(\n [\"delete\", \"get\", \"head\"],\n function forEachMethodNoData(method) {\n networkDefaults.headers[method] = {};\n }\n);\n\nHelpers.forEach(\n [\"post\", \"put\", \"patch\"],\n function forEachMethodWithData(method) {\n networkDefaults.headers[method] = Helpers.merge(\n DEFAULT_CONTENT_TYPE_STRING\n );\n }\n);\n\nconst networkDefaultsRef = networkDefaults;\n\nconst transformData = (data, headers, status, fns) => {\n const context = this || networkDefaultsRef;\n /*eslint no-param-reassign:0*/\n Helpers.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers, status);\n });\n\n return data;\n};\n\nconst isCancel = (value) => {\n return !!(value && value.__CANCEL__);\n};\n\nconst raiseCancelError = (config) => {\n if (config.cancelRequest) {\n config.cancelRequest.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new networkCanceledErrorRef();\n }\n};\n\nconst appendRequest = (config) => {\n raiseCancelError(config);\n\n config.headers = config.headers || {};\n\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n null,\n config.transformRequest\n );\n\n normalizeHeaderName(config.headers, \"Accept\");\n normalizeHeaderName(config.headers, \"Content-Type\");\n\n config.headers = Helpers.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n Helpers.forEach(\n [\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\", \"common\"],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n const networkAdapter =\n config.networkAdapter || networkDefaultsRef.networkAdapter;\n\n return networkAdapter(config).then(\n (response) => {\n raiseCancelError(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n response.status,\n config.transformResponse\n );\n\n return response;\n },\n (reason) => {\n if (!isCancel(reason)) {\n raiseCancelError(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n reason.response.status,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n }\n );\n};\n\nconst mergeNetworkConfig = (original, options) => {\n // eslint-disable-next-line no-param-reassign\n options = options || {};\n let config = {};\n\n const getMergedValue = (target, source) => {\n if (Helpers.isPlainObject(target) && Helpers.isPlainObject(source)) {\n return Helpers.merge(target, source);\n } else if (Helpers.isPlainObject(source)) {\n return Helpers.merge({}, source);\n } else if (Helpers.isArray(source)) {\n return source.slice();\n }\n return source;\n };\n\n // eslint-disable-next-line consistent-return\n const mergeDeepProperties = (prop) => {\n if (!Helpers.isUndefined(options[prop])) {\n return getMergedValue(original[prop], options[prop]);\n } else if (!Helpers.isUndefined(original[prop])) {\n return getMergedValue(undefined, original[prop]);\n }\n };\n\n // eslint-disable-next-line consistent-return\n const optionsValues = (prop) => {\n if (!Helpers.isUndefined(options[prop])) {\n return getMergedValue(undefined, options[prop]);\n }\n };\n\n // eslint-disable-next-line consistent-return\n const writeOriginal = (prop) => {\n if (!Helpers.isUndefined(options[prop])) {\n return getMergedValue(undefined, options[prop]);\n } else if (!Helpers.isUndefined(original[prop])) {\n return getMergedValue(undefined, original[prop]);\n }\n };\n\n // eslint-disable-next-line consistent-return\n const mergeDirectKeys = (prop) => {\n if (prop in options) {\n return getMergedValue(original[prop], options[prop]);\n } else if (prop in original) {\n return getMergedValue(undefined, original[prop]);\n }\n };\n\n const configOptions = {\n url: optionsValues,\n method: optionsValues,\n data: optionsValues,\n baseURL: writeOriginal,\n transformRequest: writeOriginal,\n transformResponse: writeOriginal,\n paramsSerializer: writeOriginal,\n timeout: writeOriginal,\n timeoutMessage: writeOriginal,\n withCredentials: writeOriginal,\n networkAdapter: writeOriginal,\n responseType: writeOriginal,\n xsrfCookieName: writeOriginal,\n xsrfHeaderName: writeOriginal,\n onUploadProgress: writeOriginal,\n onDownloadProgress: writeOriginal,\n decompress: writeOriginal,\n maxContentLength: writeOriginal,\n maxBodyLength: writeOriginal,\n beforeRedirect: writeOriginal,\n transport: writeOriginal,\n httpAgent: writeOriginal,\n httpsAgent: writeOriginal,\n cancelRequest: writeOriginal,\n socketPath: writeOriginal,\n responseEncoding: writeOriginal,\n validateStatus: mergeDirectKeys,\n };\n\n Helpers.forEach(\n Object.keys(original).concat(Object.keys(options)),\n function computeConfigValue(prop) {\n const merge = configOptions[prop] || mergeDeepProperties;\n const configValue = merge(prop);\n (Helpers.isUndefined(configValue) && merge !== mergeDirectKeys) ||\n (config[prop] = configValue);\n }\n );\n\n return config;\n};\n\nconst metaData = {\n version: \"2.0.0\",\n};\n\nconst validationObj = {};\n\n// eslint-disable-next-line func-names\n[\"object\", \"boolean\", \"number\", \"function\", \"string\", \"symbol\"].forEach(\n function (type, i) {\n validationObj[type] = function validator(thing) {\n return typeof thing === type || \"a\" + (i < 1 ? \"n \" : \" \") + type;\n };\n }\n);\n\nlet deprecatedWarnings = {};\n\nvalidationObj.parseBridge = function parseBridge(validator, version, message) {\n function formatMessage(opt, desc) {\n return (\n \"[Laguna Network v\" +\n metaData.version +\n \"] Parse Bridge option '\" +\n opt +\n \"'\" +\n desc +\n (message ? \". \" + message : \"\")\n );\n }\n\n // eslint-disable-next-line func-names\n return function (value, opt, opts) {\n if (validator === false) {\n throw new internalLagunaNetworkError(\n formatMessage(\n opt,\n \" has been removed\" + (version ? \" in \" + version : \"\")\n ),\n internalLagunaNetworkError.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\" +\n version +\n \" and will be removed in the near future\"\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== \"object\") {\n throw new internalLagunaNetworkError(\n \"options must be an object\",\n internalLagunaNetworkError.ERR_BAD_OPTION_VALUE\n );\n }\n\n const keys = Object.keys(options);\n let i = keys.length;\n\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 internalLagunaNetworkError(\n \"option \" + opt + \" must be \" + result,\n internalLagunaNetworkError.ERR_BAD_OPTION_VALUE\n );\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new internalLagunaNetworkError(\n \"Unknown option \" + opt,\n internalLagunaNetworkError.ERR_BAD_OPTION\n );\n }\n }\n}\n\nconst validationOptions = {\n assertOptions: assertOptions,\n validationObjs: validationObj,\n};\n\nconst validationItems = validationOptions.validationObjs;\nfunction InternalNetwork(instanceConfig) {\n this.networkDefaults = instanceConfig;\n this.interceptors = {\n request: new transformBridge(),\n response: new transformBridge(),\n };\n}\n\nInternalNetwork.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n if (typeof configOrUrl === \"string\") {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeNetworkConfig(this.networkDefaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.networkDefaults.method) {\n config.method = this.networkDefaults.method.toLowerCase();\n } else {\n config.method = \"get\";\n }\n\n const parseBridge = config.parseBridge;\n\n if (parseBridge !== undefined) {\n validationOptions.assertOptions(\n parseBridge,\n {\n silentJSONParsing: validationItems.parseBridge(validationItems.boolean),\n forcedJSONParsing: validationItems.parseBridge(validationItems.boolean),\n clarifyTimeoutError: validationItems.parseBridge(\n validationItems.boolean\n ),\n },\n false\n );\n }\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach((interceptor) => {\n if (\n typeof interceptor.runWhen === \"function\" &&\n interceptor.runWhen(config) === false\n ) {\n return;\n }\n\n synchronousRequestInterceptors =\n synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(\n interceptor.fulfilled,\n interceptor.rejected\n );\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach((interceptor) => {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n\n if (!synchronousRequestInterceptors) {\n let chain = [appendRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n let newConfig = config;\n while (requestInterceptorChain.length) {\n const onFulfilled = requestInterceptorChain.shift();\n const onRejected = requestInterceptorChain.shift();\n\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = appendRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(\n responseInterceptorChain.shift(),\n responseInterceptorChain.shift()\n );\n }\n\n return promise;\n};\n\nInternalNetwork.prototype.getUri = (config) => {\n config = mergeNetworkConfig(this.networkDefaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\nHelpers.forEach([\"delete\", \"get\", \"head\", \"options\"], (method) => {\n /*eslint func-names:0*/\n InternalNetwork.prototype[method] = (url, config) => {\n return this.request(\n mergeNetworkConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data,\n })\n );\n };\n});\n\nHelpers.forEach([\"post\", \"put\", \"patch\"], (method) => {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return (url, data, config) => {\n return this.request(\n mergeNetworkConfig(config || {}, {\n method: method,\n headers: isForm\n ? {\n \"Content-Type\": \"multipart/form-data\",\n }\n : {},\n url: url,\n data: data,\n })\n );\n };\n }\n\n InternalNetwork.prototype[method] = generateHTTPMethod();\n\n InternalNetwork.prototype[method + \"Form\"] = generateHTTPMethod(true);\n});\n\nconst _internalNetwork = InternalNetwork;\n\nfunction CancelRequest(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(function (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 = function (onfulfilled) {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(function (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 networkCanceledErrorRef(message, config, request);\n resolvePromise(token.reason);\n });\n}\n\nCancelRequest.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\nCancelRequest.prototype.subscribe = function 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\nCancelRequest.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\nCancelRequest.ref = function ref() {\n let cancel;\n const token = new CancelRequest(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel,\n };\n};\n\nconst cancelRequestRef = CancelRequest;\n\nconst spread = (callback) => {\n return (arr) => {\n return callback.apply(null, arr);\n };\n};\n\nconst isNetworkError = (payload) => {\n return Helpers.isObject(payload) && payload.isNetworkError === true;\n};\n\nconst createNetworkInstance = (defaultConfig) => {\n const context = new _internalNetwork(defaultConfig);\n const instance = Helpers.bindObject(\n _internalNetwork.prototype.request,\n context\n );\n\n Helpers.extend(instance, _internalNetwork.prototype, context);\n\n Helpers.extend(instance, context);\n instance.create = function create(instanceConfig) {\n return createNetworkInstance(\n mergeNetworkConfig(defaultConfig, instanceConfig)\n );\n };\n\n return instance;\n};\n\n// Create the default instance to be exported\nconst LagunaNetwork = {\n ...createNetworkInstance(networkDefaultsRef),\n ...{\n InternalNetwork: _internalNetwork,\n NetworkCanceledError: networkCanceledErrorRef,\n CancelRequest: cancelRequestRef,\n isCancel: isCancel,\n metaData: metaData,\n convertFormData: convertFormDataRef,\n LagunaNetworkError: internalLagunaNetworkError,\n Cancel: NetworkCanceledError,\n all: function all(promises) {\n return Promise.all(promises);\n },\n spread: spread,\n isNetworkError: isNetworkError,\n\n convertFormToJSON: (thing) => {\n return convertFormToJSONRef(\n Helpers.isHTMLForm(thing) ? new FormData(thing) : thing\n );\n },\n },\n};\n\nclass _network {\n constructor() {\n this.debugMode = false;\n }\n\n /**\n * Get method that allows a user to make a get request.\n * @function \n * @param {options} NetworkService.Types.Request\n */\n async get(options) {\n const requestOptions = { ...options, ...{ method: \"GET\" } }; \n\n const networkResponse = await LagunaNetwork.request(requestOptions).catch(\n (err) => { \n return {\n code: err.response.status,\n message: err.message,\n };\n }\n );\n \n let networkResult = networkResponse.data; \n return networkResult;\n }\n\n /**\n * Post method that allows a user to make a post request.\n * @function \n * @param {options} NetworkService.Types.Request\n */\n async post(options) {\n const requestOptions = { ...options, ...{ method: \"POST\" } };\n const networkResponse = await LagunaNetwork.request(requestOptions).catch(\n (err) => {\n return {\n code: err.response.status,\n message: err.message,\n };\n }\n );\n\n return networkResponse.data;\n }\n\n /**\n * Delete method that allows a user to make a delete request.\n * @function \n * @param {options} NetworkService.Types.Request\n */\n async delete(options) {\n const requestOptions = { ...options, ...{ method: \"DELETE\" } };\n const networkResponse = await LagunaNetwork.request(requestOptions).catch(\n (err) => {\n return {\n code: err.response.status,\n message: err.message,\n };\n }\n );\n\n return networkResponse.data;\n }\n\n /**\n * Put method that allows a user to make a put request.\n * @function \n * @param {options} NetworkService.Types.Request\n */\n async put(options) {\n const requestOptions = { ...options, ...{ method: \"PUT\" } };\n const networkResponse = await LagunaNetwork.request(requestOptions).catch(\n (err) => {\n return {\n code: err.response.status,\n message: err.message,\n };\n }\n );\n\n return networkResponse.data;\n }\n\n /**\n * Patch method that allows a user to make a patch request.\n * @function \n * @param {options} NetworkService.Types.Request\n */\n async patch(options) {\n const requestOptions = { ...options, ...{ method: \"PATCH\" } };\n const networkResponse = await LagunaNetwork.request(requestOptions).catch(\n (err) => {\n return {\n code: err.response.status,\n message: err.message,\n };\n }\n );\n\n return networkResponse.data;\n }\n\n /**\n * Raw method that allows a user to make a raw network request.\n * @function \n * @param {options} NetworkService.Types.Request\n */\n async raw(options) {\n const requestOptions = { ...options };\n const networkResponse = await LagunaNetwork.request(requestOptions).catch(\n (err) => {\n return {\n code: err.response.status,\n message: err.message,\n };\n }\n );\n\n return networkResponse.data;\n }\n\n /**\n * Cancels the currernt network request that is in progress.\n * @function \n */\n async cancelNetwork() {\n const { CancelRequest } = LagunaNetwork.Cancel;\n return CancelRequest.ref();\n }\n \n}\n\n";