intelicoreact 2.0.9 → 2.0.10

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/classes.ts", "../src/Classes/AbortableFetch.js", "../src/Classes/AnimatedHandler.js", "../src/Classes/RESTAPI/partials/AbortableFetch.js", "../src/Classes/RESTAPI/partials/_utils.js", "../src/Classes/RESTAPI/partials/Utils.js", "../src/Classes/RESTAPI/partials/ApiUtils.js", "../src/Classes/RESTAPI/partials/ApiRequestCreators.js", "../src/Classes/RESTAPI/partials/ApiBase.js", "../src/Classes/RESTAPI/partials/CredentialsProcessing.js", "../src/Classes/RESTAPI/index.js"],
4
- "sourcesContent": ["/**\n * IntelicoKit \u2014 Public subpath: \"intelicoreact/classes\"\n * RESTAPI, AbortableFetch, AnimatedHandler\n */\n\nexport { default as AbortableFetch } from './Classes/AbortableFetch';\nexport { default as AnimatedHandler } from './Classes/AnimatedHandler';\nexport { default as RESTAPI } from './Classes/RESTAPI/index';\n", "/* eslint-disable no-unused-vars */\n\nconst RESPONSE_AS_OBJECT_ALWAYS_VALUE = \"always\";\nclass AbortableFetch {\n #pathPrefix = null;\n\n #method = null;\n\n #queryParameters = null;\n\n #headers = null;\n\n #body = null;\n\n #options = null;\n\n #callback = null;\n\n #catchCallback = null;\n\n #everyPromiseCallback = null;\n\n #isResponseAsObject = false;\n\n constructor(input) {\n if (input && (typeof input !== \"object\" || Array.isArray(input)))\n throw new Error(\"Not valid input value!\");\n this.getPathPrefix = this.getPathPrefix.bind(this);\n this.setPathPrefix = this.setPathPrefix.bind(this);\n this.getMethod = this.getMethod.bind(this);\n this.setMethod = this.setMethod.bind(this);\n this.getQueryParameters = this.getQueryParameters.bind(this);\n this.getQueryString = this.getQueryString.bind(this);\n this.setQueryParameters = this.setQueryParameters.bind(this);\n this.getHeaders = this.getHeaders.bind(this);\n this.getHeadersObj = this.getHeadersObj.bind(this);\n this.setHeaders = this.setHeaders.bind(this);\n this.getBody = this.getBody.bind(this);\n this.setBody = this.setBody.bind(this);\n this.getOptions = this.getOptions.bind(this);\n this.setOptions = this.setOptions.bind(this);\n this.getCallback = this.getCallback.bind(this);\n this.setCallback = this.setCallback.bind(this);\n this.getCatchCallback = this.getCatchCallback.bind(this);\n this.setCatchCallback = this.setCatchCallback.bind(this);\n this.getEveryPromiseCallback = this.getEveryPromiseCallback.bind(this);\n this.setEveryPromiseCallback = this.setEveryPromiseCallback.bind(this);\n this.getIsResponseAsObject = this.getIsResponseAsObject.bind(this);\n this.setIsResponseAsObject = this.setIsResponseAsObject.bind(this);\n this.getProps = this.getProps.bind(this);\n this.setProps = this.setProps.bind(this);\n\n this.request = this.request.bind(this);\n this.repeatRequest = this.repeatRequest.bind(this);\n this.setProps(input || {});\n }\n\n request(props) {\n if (!props || (typeof props !== \"object\" && typeof props !== \"string\"))\n throw new Error(\"Not valid props value!\");\n\n const stringifyBody = (b) =>\n b?.constructor === FormData ? b : JSON.stringify(b);\n\n this.requestInput = props;\n // eslint-disable-next-line no-use-before-define\n const requests = getRequestsArray.call(this, props);\n if (!requests.length)\n return Promise.reject(new Error(\"There are no any valid props\"));\n\n const abortController = new AbortController();\n let externalRequest = Promise.all(\n requests.map(async (item) => {\n const safelyQuery = item.path.includes(\"?\")\n ? `&${item.queryParameters.replace(/\\?/g, \"\")}`\n : item.queryParameters;\n let request = fetch(`${item.pathPrefix}${item.path}${safelyQuery}`, {\n ...item.options,\n method: item.method,\n headers: item.headers,\n ...(item.body ? { body: stringifyBody(item.body) } : {}),\n signal: abortController.signal,\n })\n .then((response) => {\n response.request = item;\n return response;\n })\n .catch((response) => {\n\n return Promise.resolve({\n ok: false,\n status: 0,\n statusText: response,\n request: item,\n })\n }\n\n );\n\n if (this.#everyPromiseCallback && !item.isSkipEveryPromiseCallback)\n request = request.then((response) =>\n this.#everyPromiseCallback(response),\n );\n\n if (item.callback)\n request = request.then((response) => item.callback(response));\n\n if (this.#isResponseAsObject)\n request = request.then((response) => ({ name: item.name, response }));\n\n return request;\n }),\n );\n\n externalRequest = externalRequest.then((response) =>\n response.length < 2 ? response[0] : response,\n );\n\n if (this.#isResponseAsObject) {\n externalRequest = externalRequest.then((response) => {\n if (Array.isArray(props) && props.length > 1)\n return response.reduce(\n (ac, item) => ({ ...ac, [item.name]: item.response }),\n {},\n );\n else\n return this.#isResponseAsObject === RESPONSE_AS_OBJECT_ALWAYS_VALUE\n ? { [response.name]: response.response }\n : response.response;\n });\n }\n\n externalRequest = externalRequest.then((response) =>\n this.#callback ? this.#callback(response) : response,\n );\n\n externalRequest = externalRequest.catch((error) =>\n this.#catchCallback ? this.#catchCallback(error) : error,\n );\n\n // eslint-disable-next-line no-proto\n externalRequest.__proto__.abort = () => abortController.abort();\n return externalRequest;\n\n function getRequestsArray(input) {\n const requestsArray = (() => {\n if (typeof input === \"string\") return [{ path: input }];\n return Array.isArray(input) ? [...input] : [input];\n })();\n\n return requestsArray.reduce((ac, item, index) => {\n const itemObj =\n typeof item === \"object\" && item !== null && !Array.isArray(item)\n ? item\n : {};\n const {\n name,\n path,\n method,\n queryParameters,\n headers,\n body,\n options,\n callback,\n mergeProps,\n isNoPathPrefix,\n isSkipEveryPromiseCallback,\n } = itemObj;\n\n\n\n const safelyMergeProps =\n mergeProps instanceof Object && !Array.isArray(mergeProps)\n ? mergeProps\n : {};\n const getMergeProps = (key) =>\n safelyMergeProps.all ?? safelyMergeProps[key];\n\n if (!path || typeof path !== \"string\") return ac;\n\n const {\n name: omitName,\n path: omitPath,\n pathPrefix: omitPathPrefix,\n method: omitMethod,\n queryParameters: omitQueryParameters,\n headers: omitHeaders,\n body: omitBody,\n options: omitOptions,\n callback: omitCallback,\n mergeProps: omitMergeProps,\n ...optionsRest\n } = options || {};\n\n return [\n ...ac,\n {\n path,\n pathPrefix:\n getMergeProps(\"pathPrefix\") === \"onlyLocal\" || isNoPathPrefix\n ? \"\"\n : this.#pathPrefix || \"\",\n method: (() => {\n if (getMergeProps(\"method\") === \"onlyLocal\")\n return method || \"GET\";\n return getMergeProps(\"method\") === \"onlyGlobal\"\n ? this.#method || \"GET\"\n : method || this.#method || \"GET\";\n })(),\n queryParameters: (() => {\n if (\n (getMergeProps(\"queryParameters\") ?? getMergeProps(\"query\")) ===\n \"onlyLocal\"\n ) {\n return this.getQueryString(this.getQueryArray(queryParameters));\n }\n return (getMergeProps(\"queryParameters\") ??\n getMergeProps(\"query\")) === \"onlyGlobal\"\n ? this.getQueryString(this.getQueryArray(this.#queryParameters))\n : this.getQueryString([\n ...this.getQueryArray(this.#queryParameters),\n ...this.getQueryArray(queryParameters),\n ]);\n })(),\n headers: (() => {\n if (getMergeProps(\"headers\") === \"onlyLocal\")\n return this.getHeadersObj(headers || {});\n return getMergeProps(\"headers\") === \"onlyGlobal\"\n ? this.getHeadersObj({ ...(this.#headers || {}) })\n : this.getHeadersObj({\n ...(this.#headers || {}),\n ...(headers || {}),\n });\n })(),\n body: (() => {\n if (getMergeProps(\"body\") === \"onlyLocal\") return body || null;\n if (getMergeProps(\"body\") === \"onlyGlobal\")\n return this.#body || null;\n if (\n body &&\n this.#body &&\n typeof body === typeof this.#body &&\n typeof body === \"object\"\n ) {\n return Array.isArray(body)\n ? [...this.#body, ...body]\n : { ...this.#body, ...body };\n } else return body || this.#body || null;\n })(),\n options: (() => {\n if (getMergeProps(\"options\") === \"onlyLocal\")\n return { ...(optionsRest || {}) };\n return getMergeProps(\"options\") === \"onlyGlobal\"\n ? { ...(this.#options || {}) }\n : { ...(this.#options || {}), ...(optionsRest || {}) };\n })(),\n callback,\n isSkipEveryPromiseCallback,\n ...(this.getIsResponseAsObject()\n ? { name: name && typeof name === \"string\" ? name : index }\n : {}),\n },\n ];\n }, []);\n }\n }\n\n repeatRequest() {\n return this.request(this.requestInput);\n }\n\n // ***** getters and setters *****\n getPathPrefix() {\n return this.#pathPrefix;\n }\n\n setPathPrefix(value) {\n if (value && typeof value !== \"string\")\n throw new Error(\"Not valid pathPrefix value!\");\n this.#pathPrefix = value || null;\n }\n\n getMethod() {\n return this.#method;\n }\n\n setMethod(value) {\n const methods = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"CONNECT\",\n \"OPTIONS\",\n \"TRACE\",\n \"PATCH\",\n ];\n if (value && !methods.includes(value))\n throw new Error(\"Not valid method value!\");\n this.#method = value || null;\n }\n\n getQueryParameters() {\n return this.#queryParameters;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getQueryArray(value) {\n if (typeof value === \"string\") return value?.replace(/\\?/g, \"\")?.split(\"&\");\n else if (Array.isArray(value))\n return value.map((item) => item.replace(/\\?/g, \"\"));\n else if (typeof value === \"object\" && value !== null)\n return Object.keys(value)\n .filter((key) => key && value[key])\n .map((key) => `${key}=${value[key]}`);\n else return [];\n }\n\n // eslint-disable-next-line class-methods-use-this\n getQueryString(value) {\n if (!Array.isArray(value))\n throw new Error(\"Not valid query parameters value!\");\n return value.length ? `?${value.join(\"&\")}` : \"\";\n }\n\n setQueryParameters(value) {\n if (value && !Array.isArray(value))\n throw new Error(\"Not valid query parameters value!\");\n this.#queryParameters = value || null;\n }\n\n getHeaders() {\n return this.#headers;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getHeadersObj(value) {\n const headers = new Headers();\n if (!value) return headers;\n\n if (typeof value !== \"object\" || Array.isArray(value))\n throw new Error(\"Not valid headers value!\");\n Object.keys(value).forEach((item) => {\n headers.append(item, value[item]);\n });\n return headers;\n }\n\n setHeaders(value) {\n if (value && (typeof value !== \"object\" || Array.isArray(value)))\n throw new Error(\"Not valid headers value!\");\n this.#headers = value || null;\n }\n\n getBody() {\n return this.#body;\n }\n\n setBody(value) {\n this.#body = value;\n }\n\n getOptions() {\n return this.#options;\n }\n\n setOptions(value) {\n if (value && (typeof value !== \"object\" || Array.isArray(value)))\n throw new Error(\"Not valid options value!\");\n this.#options = { ...value };\n }\n\n getCallback() {\n return this.#callback;\n }\n\n setCallback(value) {\n if (value && typeof value !== \"function\")\n throw new Error(\"Not valid callback value!\");\n this.#callback = value || null;\n }\n\n getCatchCallback() {\n return this.#catchCallback;\n }\n\n setCatchCallback(value) {\n if (value && typeof value !== \"function\")\n throw new Error(\"Not valid callback value!\");\n this.#catchCallback = value || null;\n }\n\n getEveryPromiseCallback() {\n return this.#everyPromiseCallback;\n }\n\n setEveryPromiseCallback(value) {\n if (value && typeof value !== \"function\")\n throw new Error(\"Not valid callback value!\");\n this.#everyPromiseCallback = value || null;\n }\n\n getIsResponseAsObject() {\n return this.#isResponseAsObject;\n }\n\n setIsResponseAsObject(value) {\n this.#isResponseAsObject =\n typeof value !== \"boolean\" && value !== \"always\" ? Boolean(value) : value;\n }\n\n getProps() {\n return {\n pathPrefix: this.getPathPrefix() || null,\n method: this.getMethod() || null,\n queryParameters: this.getQueryParameters() || null,\n headers: this.getHeaders() || null,\n body: this.getBody() || null,\n options: this.getOptions() || null,\n callback: this.getCallback() || null,\n everyPromiseCallback: this.getEveryPromiseCallback(),\n // isAnywayRunCallback: this.getIsAnywayRunCallback(),\n isResponseAsObject: this.getIsResponseAsObject(),\n };\n }\n\n setProps(input) {\n const {\n pathPrefix,\n method,\n queryParameters,\n headers,\n body,\n options,\n callback,\n catchCallback,\n everyPromiseCallback,\n // isAnywayRunCallback,\n isResponseAsObject,\n } = input;\n if (pathPrefix) this.setPathPrefix(pathPrefix);\n if (method) this.setMethod(method);\n if (queryParameters)\n this.setQueryParameters(this.getQueryArray(queryParameters));\n if (headers) this.setHeaders(headers);\n if (body) this.setBody(body);\n if (options) this.setOptions(options);\n if (callback) this.setCallback(callback);\n if (catchCallback) this.setCatchCallback(catchCallback);\n if (everyPromiseCallback)\n this.setEveryPromiseCallback(everyPromiseCallback);\n // if (isAnywayRunCallback) this.setIsAnywayRunCallback(isAnywayRunCallback);\n if (isResponseAsObject !== undefined)\n this.setIsResponseAsObject(isResponseAsObject);\n }\n}\n\nexport default AbortableFetch;\n", "const DEFAULT_ANIMATION_DURATION = 200;\n\nclass AnimatedHandler {\n constructor(params) {\n const {\n type = \"\",\n animationTarget,\n animation,\n settings,\n hendler,\n } = params || {};\n if (!animationTarget || !hendler) throw new Error(\"Bad input!\");\n const {\n keyframes,\n delay,\n direction,\n duration,\n easing,\n endDelay,\n fill,\n iterationStart,\n iterations,\n } = animation || {};\n\n // eslint-disable-next-line no-constructor-return\n return function (...args) {\n const keyframesToUse = Array.isArray(keyframes)\n ? keyframes\n : [\n { height: `${animationTarget.clientHeight}px`, opacity: 1 },\n { height: \"0\", opacity: 0 },\n ];\n const durationToUse = duration || DEFAULT_ANIMATION_DURATION;\n\n animationTarget.animate(keyframesToUse, animation);\n\n return new Promise((res) => {\n setTimeout(\n () => res(hendler ? hendler(...args) : undefined),\n durationToUse,\n );\n });\n };\n }\n}\n\nexport default AnimatedHandler;\n", "import { getIsOnlyAnObject } from './_utils';\n\nconst RESPONSE_AS_OBJECT_ALWAYS_VALUE = 'always';\nclass AbortableFetch {\n #pathPrefix = null;\n\n #method = null;\n\n #queryParameters = null;\n\n #headers = null;\n\n #body = null;\n\n #options = null;\n\n #callback = null;\n\n #catchCallback = null;\n\n #everyPromiseCallback = null;\n\n #isResponseAsObject = false;\n\n constructor(input) {\n if (input && !getIsOnlyAnObject(input)) throw new Error('Not valid input value!');\n this.getPathPrefix = this.getPathPrefix.bind(this);\n this.setPathPrefix = this.setPathPrefix.bind(this);\n this.getMethod = this.getMethod.bind(this);\n this.setMethod = this.setMethod.bind(this);\n this.getQueryParameters = this.getQueryParameters.bind(this);\n this.getQueryString = this.getQueryString.bind(this);\n this.setQueryParameters = this.setQueryParameters.bind(this);\n this.getHeaders = this.getHeaders.bind(this);\n this.getHeadersObj = this.getHeadersObj.bind(this);\n this.setHeaders = this.setHeaders.bind(this);\n this.getBody = this.getBody.bind(this);\n this.setBody = this.setBody.bind(this);\n this.getOptions = this.getOptions.bind(this);\n this.setOptions = this.setOptions.bind(this);\n this.getCallback = this.getCallback.bind(this);\n this.setCallback = this.setCallback.bind(this);\n this.getCatchCallback = this.getCatchCallback.bind(this);\n this.setCatchCallback = this.setCatchCallback.bind(this);\n this.getEveryPromiseCallback = this.getEveryPromiseCallback.bind(this);\n this.setEveryPromiseCallback = this.setEveryPromiseCallback.bind(this);\n this.getIsResponseAsObject = this.getIsResponseAsObject.bind(this);\n this.setIsResponseAsObject = this.setIsResponseAsObject.bind(this);\n this.getProps = this.getProps.bind(this);\n this.setProps = this.setProps.bind(this);\n\n this.request = this.request.bind(this);\n this.repeatRequest = this.repeatRequest.bind(this);\n this.setProps(input || {});\n }\n\n async request(props) {\n if (!getIsOnlyAnObject(props) && !Array.isArray(props) && typeof props !== 'string') throw new Error('Not valid props value!');\n\n const stringifyBody = b => (b?.constructor === FormData ? b : JSON.stringify(b));\n\n this.requestInput = props;\n const requests = getRequestsArray.call(this, props);\n\n const ABORTABLE_FETCH_CONTEXT = this;\n const abortController = new AbortController();\n\n const addProps = (response, request) => {\n response.request = request;\n if (ABORTABLE_FETCH_CONTEXT.#isResponseAsObject) response.name = getIsOnlyAnObject(request) ? request.name || '' : '';\n return response;\n };\n\n let externalRequest = Promise.all(\n requests.map(async item => {\n // \u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C (\u043A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u0438\u0437 \u043C\u0430\u0441\u0441\u0438\u0432\u0430)\n\n const safelyQuery = item.path.includes('?') ? `&${item.queryParameters.replace(/\\?/g, '')}` : item.queryParameters;\n const internalRequest = fetch(`${item.pathPrefix}${item.path}${safelyQuery}`, {\n ...item.options,\n method: item.method,\n headers: item.headers,\n ...(item.body ? { body: stringifyBody(item.body) } : {}),\n signal: abortController.signal,\n })\n // ? \u0414\u043E\u043A\u0438\u0434\u044B\u0432\u0430\u0435\u043C \u0438\u043D\u0444\u044B\n .then(async response => addProps(response, item))\n // ! \u0412\u0410\u0416\u041D\u041E !\n // ! \u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u043C \u0447\u0442\u043E \u043A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u0417\u0410\u0420\u0415\u0417\u041E\u041B\u0412\u0418\u0422\u0421\u042F\n .catch(async response => {\n // ? \u0415\u0441\u043B\u0438 fetch \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u043F\u043E \u043D\u043E\u0432\u043E\u043C\u0443 \u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u043B \u043E\u0442\u0432\u0435\u0442\u044B \u0441 \"\u043D\u0435 200-\u043C\u0438 \u043A\u043E\u0434\u0430\u043C\u0438\" \u0432 catch,\n // ? \u0442\u043E \u043E\u0436\u0438\u0434\u0430\u0435\u043C \u0447\u0442\u043E response \u0431\u0443\u0434\u0435\u0442 \u041D\u0415 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C Error, \u0430 \u0432\u0441\u0435-\u0442\u0430\u043A\u0438 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C Response.\n // ? \u041F\u043E\u044D\u0442\u043E\u043C\u0443 \u0432 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0438\u043C \u0435\u0433\u043E \u043A\u0430\u043A \u0432 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u043C then\n if (response instanceof Response) return Promise.resolve(addProps(response, item));\n\n // ? \u0412\u043E \u0432\u0441\u0435\u0445 \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0445 \u0441\u043B\u0443\u0447\u0430\u044F\u0445 \u0442\u0440\u0430\u043A\u0442\u0443\u0435\u043C \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044E \u043A\u0430\u043A \"\u0437\u0430\u043F\u0440\u043E\u0441 \u041D\u0415 \u0443\u0448\u0435\u043B\":\n // ? \u043F\u0440\u043E\u043C\u0438\u0441 \u0432\u0441\u0435-\u0440\u0430\u0432\u043D\u043E \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u043C, \u0433\u043E\u0442\u0434\u0430\u0435\u043C \"\u043F\u0441\u0435\u0432\u0434\u043E-\u043E\u0442\u0432\u0435\u0442\"\n return Promise.resolve(\n addProps({\n ok: false,\n status: 0,\n statusText: response,\n request: item,\n })\n );\n })\n // ? \u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u0441\u0440\u0430\u0431\u043E\u0442\u0430\u043A\u0435\u0442 \u043E\u0436\u0438\u0434\u0430\u0435\u043C \u0437\u0430\u0440\u0435\u0437\u043E\u043B\u0432\u043B\u0435\u043D\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0438\u0441, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0435\u043C then-chain\n\n // ? \u041E\u0442\u0440\u0430\u0431\u0430\u0438\u044B\u0432\u0430\u0435\u043C everyPromiseCallback\n // ? (\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043A\u043E\u043B\u0431\u0435\u043A \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430, \u043E\u043F\u0438\u0441\u0430\u043D\u044B\u0439 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430 AbortableFetch)\n .then(async res => {\n return typeof ABORTABLE_FETCH_CONTEXT.#everyPromiseCallback === 'function' && !item.isSkipEveryPromiseCallback\n ? await ABORTABLE_FETCH_CONTEXT.#everyPromiseCallback(res)\n : res;\n })\n // ? \u041E\u0442\u0440\u0430\u0431\u0430\u0438\u044B\u0432\u0430\u0435\u043C \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0439callback\n .then(async res => {\n return await (typeof item.callback === 'function' ? item.callback(res) : res);\n })\n // ? \u041F\u043E\u0434\u0433\u043E\u0442\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u043C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u0434\u043B\u044F \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F\n .then(async res => {\n return { request: item, response: res, ...(item.name ? { name: item.name } : {}) };\n });\n\n // ? \u041A\u0430\u0436\u0434\u043E\u043C\u0443 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0435\u043C\u0443 \u043F\u0440\u043E\u043C\u0438\u0441\u0443 \u0432 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u044B \u043B\u0435\u043F\u0438\u043C \u043C\u0435\u0442\u043E\u0434 \u043E\u0442\u043C\u0435\u043D\u044B \u0432\u0441\u0435\u0439 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432\n internalRequest.__proto__.abort = () => abortController.abort();\n return internalRequest;\n })\n )\n // \u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C (Promise.all)\n // ? \u041F\u0440\u043E\u0446\u0435\u0441\u0441\u0438\u043C \u0432\u043E\u0437\u0432\u0440\u0430\u0442 \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F (\u043A\u0430\u043A \u043E\u0431\u044A\u0435\u043A\u0442)\n .then(async resArr => {\n // ? \u0415\u0441\u043B\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u043D\u0435\u0442, \u0442\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C \u043F\u0443\u0441\u0442\u043E\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 \u0438\u043B\u0438 \u043C\u0430\u0441\u0441\u0438\u0432, true \u0438\u043B\u0438 \"always\" - \u0440\u0430\u0432\u043D\u043E\u0437\u043D\u0430\u0447\u043D\u043E\n if (resArr.length < 1) {\n return ABORTABLE_FETCH_CONTEXT.#isResponseAsObject ? {} : [];\n }\n\n // ? \u0415\u0441\u043B\u0438 #isResponseAsObject === \"always\", \u0442\u043E \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0432\u0430 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0432\u044B\u0434\u0430\u0435\u043C \u043E\u0431\u044A\u0435\u043A\u0442\n if (ABORTABLE_FETCH_CONTEXT.#isResponseAsObject === RESPONSE_AS_OBJECT_ALWAYS_VALUE) {\n return resArr.reduce((ac, item) => ({ ...ac, [item.name]: item.response }), {});\n }\n\n // ? \u0415\u0441\u043B\u0438 \u0437\u0430\u043F\u0440\u043E\u0441 \u043E\u0434\u0438\u043D, \u0442\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C \u0435\u0433\u043E \u043A\u0430\u043A \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442\n if (resArr.length === 1) return resArr[0].response;\n\n // ? \u0415\u0441\u043B\u0438 \u0434\u043E\u0449\u043B\u0438 \u0434\u043E \u0441\u044E\u0434\u0430, \u0442\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0431\u043E\u043B\u044C\u0448\u0435 \u0447\u0435\u043C 1 \u0438 \u043D\u0443\u0436\u043D\u043E \u043F\u043E\u043D\u044F\u0442\u044C \u043A\u0430\u043A \u0438\u0445 \u0441\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u0430\u0442\u044C\n // ? - \u043A\u0430\u043A \u043E\u0431\u044A\u0435\u043A\u0435\u0442 (#isResponseAsObject === true \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0435\u0441\u043B\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0431\u043E\u043B\u044C\u0448\u0435 \u0447\u0435\u043C 1)\n // ? - \u043A\u0430\u043A \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u043E\u0442 Promise.all (\u0442.\u0435. \u043C\u0430\u0441\u0441\u0438\u0432 \u043E\u0442\u0432\u0435\u0442\u043E\u0432)\n return ABORTABLE_FETCH_CONTEXT.#isResponseAsObject === true\n ? resArr.reduce((ac, item) => ({ ...ac, [item.name]: item.response }), {})\n : resArr.map(item => item.response);\n })\n // ? \u041F\u043E\u0441\u043B\u0435 \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0430 \u043E\u0442\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C/\u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0439 callback\n .then(async res => {\n return typeof ABORTABLE_FETCH_CONTEXT.#callback === 'function' ? await ABORTABLE_FETCH_CONTEXT.#callback(res) : res;\n })\n // ? \u041D\u0430 \u0441\u043B\u0443\u0447\u0430\u0439 \u0440\u0435\u0436\u0435\u043A\u0442\u0430 Promise.all \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C/\u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0439 catchCallback\n .catch(async res => {\n return typeof ABORTABLE_FETCH_CONTEXT.#catchCallback === 'function' ? await ABORTABLE_FETCH_CONTEXT.#catchCallback(res) : res;\n });\n\n // ? \u0412 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u044B Promise.all \u043B\u0435\u043F\u0438\u043C \u043C\u0435\u0442\u043E\u0434 \u043E\u0442\u043C\u0435\u043D\u044B \u0432\u0441\u0435\u0439 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432\n externalRequest.__proto__.abort = () => abortController.abort();\n\n return externalRequest;\n\n function getRequestsArray(input) {\n // ? \u041F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043A \u043E\u0434\u043D\u043E\u043C\u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0443 - \u043C\u0430\u0441\u0441\u0438\u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432\n const requestsArray = (() => {\n if (typeof input === 'string') return [{ path: input }];\n return Array.isArray(input) ? [...input] : [input];\n })();\n\n return requestsArray.reduce((ac, item, index) => {\n const itemObj = getIsOnlyAnObject(item) ? item : {};\n const { name, path, method, queryParameters, headers, body, options, callback, mergeProps, isNoPathPrefix, isSkipEveryPromiseCallback } =\n itemObj;\n\n const safelyMergeProps = getIsOnlyAnObject(mergeProps) ? mergeProps : {};\n const getMergeProps = key => safelyMergeProps.all ?? safelyMergeProps[key];\n\n if (!path || typeof path !== 'string') return ac;\n\n const {\n name: omitName,\n path: omitPath,\n pathPrefix: omitPathPrefix,\n method: omitMethod,\n queryParameters: omitQueryParameters,\n headers: omitHeaders,\n body: omitBody,\n options: omitOptions,\n callback: omitCallback,\n mergeProps: omitMergeProps,\n ...optionsRest\n } = options || {};\n\n return [\n ...ac,\n {\n path,\n pathPrefix: getMergeProps('pathPrefix') === 'onlyLocal' || isNoPathPrefix ? '' : this.#pathPrefix || '',\n method: (() => {\n if (getMergeProps('method') === 'onlyLocal') return method || 'GET';\n return getMergeProps('method') === 'onlyGlobal' ? this.#method || 'GET' : method || this.#method || 'GET';\n })(),\n queryParameters: (() => {\n if ((getMergeProps('queryParameters') ?? getMergeProps('query')) === 'onlyLocal') {\n return this.getQueryString(this.getQueryArray(queryParameters));\n }\n return (getMergeProps('queryParameters') ?? getMergeProps('query')) === 'onlyGlobal'\n ? this.getQueryString(this.getQueryArray(this.#queryParameters))\n : this.getQueryString([...this.getQueryArray(this.#queryParameters), ...this.getQueryArray(queryParameters)]);\n })(),\n headers: (() => {\n if (getMergeProps('headers') === 'onlyLocal') return this.getHeadersObj(headers || {});\n return getMergeProps('headers') === 'onlyGlobal'\n ? this.getHeadersObj({ ...(this.#headers || {}) })\n : this.getHeadersObj({\n ...(this.#headers || {}),\n ...(headers || {}),\n });\n })(),\n body: (() => {\n if (getMergeProps('body') === 'onlyLocal') return body || null;\n if (getMergeProps('body') === 'onlyGlobal') return this.#body || null;\n if (body && this.#body && typeof body === typeof this.#body && typeof body === 'object') {\n return Array.isArray(body) ? [...this.#body, ...body] : { ...this.#body, ...body };\n } else return body || this.#body || null;\n })(),\n options: (() => {\n if (getMergeProps('options') === 'onlyLocal') return { ...(optionsRest || {}) };\n return getMergeProps('options') === 'onlyGlobal' ? { ...(this.#options || {}) } : { ...(this.#options || {}), ...(optionsRest || {}) };\n })(),\n callback,\n isSkipEveryPromiseCallback,\n ...(this.getIsResponseAsObject() ? { name: name && typeof name === 'string' ? name : index } : {}),\n },\n ];\n }, []);\n }\n }\n\n repeatRequest() {\n return this.request(this.requestInput);\n }\n\n // ***** getters and setters *****\n getPathPrefix() {\n return this.#pathPrefix;\n }\n\n setPathPrefix(value) {\n if (value && typeof value !== 'string') throw new Error('Not valid pathPrefix value!');\n this.#pathPrefix = value || null;\n }\n\n getMethod() {\n return this.#method;\n }\n\n setMethod(value) {\n const methods = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'];\n if (value && !methods.includes(value)) throw new Error('Not valid method value!');\n this.#method = value || null;\n }\n\n getQueryParameters() {\n return this.#queryParameters;\n }\n\n getQueryArray(value) {\n if (typeof value === 'string') return (value[0] === '?' ? value.slice(1) : value).split('&');\n else if (Array.isArray(value)) return value;\n else if (typeof value === 'object' && value !== null) {\n return Object.keys(value)\n .filter(key => Boolean(key) && Boolean(value[key]))\n .map(key => `${key}=${value[key]}`);\n } else return [];\n }\n\n getQueryString(value) {\n if (!value) return '';\n if (!Array.isArray(value)) throw new Error('Not valid query parameters value!');\n return value.length ? `?${value.join('&')}` : '';\n }\n\n setQueryParameters(value) {\n if (value && !Array.isArray(value)) throw new Error('Not valid query parameters value!');\n this.#queryParameters = value || null;\n }\n\n getHeaders() {\n return this.#headers;\n }\n\n getHeadersObj(obj) {\n const headers = new Headers();\n if (!obj) return headers;\n\n if (typeof obj !== 'object' || Array.isArray(obj)) throw new Error('Not valid headers value!');\n Object.keys(obj).forEach(key => {\n headers.append(key, obj[key]);\n });\n return headers;\n }\n\n setHeaders(value) {\n if (value && (typeof value !== 'object' || Array.isArray(value))) throw new Error('Not valid headers value!');\n this.#headers = value || null;\n }\n\n getBody() {\n return this.#body;\n }\n\n setBody(value) {\n this.#body = value;\n }\n\n getOptions() {\n return this.#options;\n }\n\n setOptions(value) {\n if (value && (typeof value !== 'object' || Array.isArray(value))) throw new Error('Not valid options value!');\n this.#options = { ...value };\n }\n\n getCallback() {\n return this.#callback;\n }\n\n setCallback(value) {\n if (value && typeof value !== 'function') throw new Error('Not valid callback value!');\n this.#callback = value || null;\n }\n\n getCatchCallback() {\n return this.#catchCallback;\n }\n\n setCatchCallback(value) {\n if (value && typeof value !== 'function') throw new Error('Not valid callback value!');\n this.#catchCallback = value || null;\n }\n\n getEveryPromiseCallback() {\n return this.#everyPromiseCallback;\n }\n\n setEveryPromiseCallback(value) {\n if (value && typeof value !== 'function') throw new Error('Not valid callback value!');\n this.#everyPromiseCallback = value || null;\n }\n\n getIsResponseAsObject() {\n return this.#isResponseAsObject;\n }\n\n setIsResponseAsObject(value) {\n this.#isResponseAsObject = typeof value !== 'boolean' && value !== 'always' ? Boolean(value) : value;\n }\n\n getProps() {\n return {\n pathPrefix: this.getPathPrefix() || null,\n method: this.getMethod() || null,\n queryParameters: this.getQueryParameters() || null,\n headers: this.getHeaders() || null,\n body: this.getBody() || null,\n options: this.getOptions() || null,\n callback: this.getCallback() || null,\n everyPromiseCallback: this.getEveryPromiseCallback(),\n // isAnywayRunCallback: this.getIsAnywayRunCallback(),\n isResponseAsObject: this.getIsResponseAsObject(),\n };\n }\n\n setProps(input) {\n const {\n pathPrefix,\n method,\n queryParameters,\n headers,\n body,\n options,\n callback,\n catchCallback,\n everyPromiseCallback,\n // isAnywayRunCallback,\n isResponseAsObject,\n } = input;\n if (pathPrefix) this.setPathPrefix(pathPrefix);\n if (method) this.setMethod(method);\n if (queryParameters) this.setQueryParameters(this.getQueryArray(queryParameters));\n if (headers) this.setHeaders(headers);\n if (body) this.setBody(body);\n if (options) this.setOptions(options);\n if (callback) this.setCallback(callback);\n if (catchCallback) this.setCatchCallback(catchCallback);\n if (everyPromiseCallback) this.setEveryPromiseCallback(everyPromiseCallback);\n // if (isAnywayRunCallback) this.setIsAnywayRunCallback(isAnywayRunCallback);\n if (isResponseAsObject !== undefined) this.setIsResponseAsObject(isResponseAsObject);\n }\n}\n\nexport default AbortableFetch;\n", "import AbortableFetch from './AbortableFetch';\n\nexport function getIsOnlyAnObject(input) {\n return (\n typeof input === 'object' && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B \u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u0438\n input instanceof Object && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" null\n !Array.isArray(input) && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u0441\u0441\u0438\u0432\u044B\n !(input instanceof Set) && // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u0441\u0435\u0442\u044B\n !(input instanceof Map) // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u043F\u044B\n );\n}\n\nexport const clone = input => {\n if (input === null || typeof input !== 'object') return input;\n const data = input instanceof Array ? [] : {};\n for (const i in input) data[i] = clone(input[i]);\n return data;\n};\n\n//\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0438 \u043C\u0430\u0441\u0441\u0438\u0432 \u043A\u043B\u044E\u0447\u0435\u0439 \u043E\u0431\u044C\u0435\u043A\u0442\u0430\n//\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0441 \u0442\u0435\u043C\u0438 \u043F\u043E\u043B\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435\u0442 \u0432 \u043C\u0430\u0441\u0441\u0438\u0432\u0435 \u043A\u043B\u044E\u0447\u0435\u0439\nexport const omitKeys = (obj = {}, keys = []) =>\n keys.reduce((acc, key) => {\n const { [key]: omit, ...rest } = acc;\n return rest;\n }, obj);\n\nexport const getResponseClone = async res => (typeof res?.clone === 'function' ? await res.clone() : clone(res));\n\nexport function addCustomMethods(data, prefix) {\n const preparedPrefix = (prefix || '').toString();\n\n Object.keys(data).forEach(key => {\n const preparedKey = `${preparedPrefix}${key}`;\n if (typeof data[key] === 'function' && getIsOnlyAnObject(this)) this[preparedKey] = data[key];\n });\n}\n\nexport async function getInstanceOfFetchSystem(isGetBody) {\n const API_CONTEXT = this;\n const CREDENTIALS_CONTEXT = API_CONTEXT.credentialsProcessing;\n\n let credentials = {};\n //? \u041D\u0430\u043B\u0438\u0447\u0438\u0435 credentialsProcessing \u0432\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u043E\u043A\u0435\u043D\u0430 \u0432 \u043F\u0440\u0438\u043D\u0446\u0438\u043F\u0435 (\u0435\u0441\u043B\u0438 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u043E\u0432\u0430\u043D\u044B \u0432 \u0441\u0438\u0441\u0442\u0435\u043C\u0435)\n if (CREDENTIALS_CONTEXT) {\n //? \u041C\u0435\u0442\u043E\u0434 getCredentials - \u043A\u043B\u0430\u0441\u0441\u043E\u0432\u044B\u0439 \u043C\u0435\u0442\u043E\u0434, \u043E\u0431\u0435\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 getCredentials, \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u043D\u044B\u043C \u043F\u0440\u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430\n //? \u0412 \u043A\u043B\u0430\u0441\u0441\u043E\u0432\u043E\u043C getCredentials \u0443\u0436\u0435 \u0438\u043D\u043A\u0430\u043F\u0441\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0430 \u043B\u043E\u0433\u0438\u043A\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F importCredentials\n const cred = await CREDENTIALS_CONTEXT.getCredentials();\n\n credentials = CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing\n ? await CREDENTIALS_CONTEXT.waitRefresh(cred.isNeedRefresh && !CREDENTIALS_CONTEXT.getIsTokenStartRefresh()).then(async () =>\n CREDENTIALS_CONTEXT.processCredentials(await CREDENTIALS_CONTEXT.getCredentials())\n )\n : cred;\n }\n\n //? \u041D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F instance \u043C\u043E\u0436\u0435\u0442 \u0443\u0436\u0435 \u0441\u043B\u043E\u0436\u0438\u0442\u044C\u0441\u044F \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044F, \u0447\u0442\u043E \u0441\u0445\u043E\u0434\u0438\u043B\u0438 \u043D\u0430 \u0440\u0435\u0444\u0440\u0435\u0448 \u0438 \u043E\u043D \u043D\u0435\u0443\u0434\u0430\u0447\u043D\u044B\u0439.\n //? \u041F\u0440\u0435\u0440\u044B\u0432\u0430\u0435\u043C \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435 instance, \u0434\u0430\u0435\u043C \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C callbackAfterRejectRefresh (\u0441\u043C\u043E\u0442\u0440\u0438 class CredentialsProcessing)\n if (credentials.isRefreshFailed) return null;\n\n if (API_CONTEXT.addAsCommon && typeof API_CONTEXT.addAsCommon !== 'function') {\n throw new Error('addAsCommon must be function [getInstanceOfFetchSystem]');\n }\n\n const {\n headers: headersToAbortableFetchInstance,\n queryParameters: queryParamsToAbortableFetchInstance,\n options: optionsToAbortableFetchInstance,\n } = (await API_CONTEXT.addAsCommon?.()) || {};\n\n if (\n (headersToAbortableFetchInstance && !getIsOnlyAnObject(headersToAbortableFetchInstance)) ||\n (optionsToAbortableFetchInstance && !getIsOnlyAnObject(optionsToAbortableFetchInstance)) ||\n (queryParamsToAbortableFetchInstance &&\n !(\n typeof queryParamsToAbortableFetchInstance === 'string' ||\n getIsOnlyAnObject(queryParamsToAbortableFetchInstance) ||\n Array.isArray(queryParamsToAbortableFetchInstance)\n ))\n ) {\n throw new Error('Bad output format from addAsCommon [getInstanceOfFetchSystem]');\n }\n\n //? \u041F\u043E \u0438\u0442\u043E\u0433\u0443 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044F \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 \u043A\u043B\u0430\u0441\u0441\u0430 AbortableFetch (\u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043C\u044B \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043C \u0431\u043E\u043B\u044C\u0448\u0438\u043C \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A)\n return (CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing ? CREDENTIALS_CONTEXT.waitRefresh() : Promise.resolve()).then(\n async () =>\n new AbortableFetch({\n //? \u041C\u0435\u0442\u043E\u0434 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E\n method: 'GET',\n //? \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E\n headers: {\n ...headersToAbortableFetchInstance,\n //? (*) \u0422\u0443\u0442 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043A\u0435\u0439\u0441\u044B\n //? - \u043A\u043E\u0433\u0434\u0430 \u043D\u0435\u0442 this.credentialsProcessing\n //? (\u043C\u044B \u041D\u0415 \u0445\u043E\u0442\u0438\u043C \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0442\u043E\u043A\u0435\u043D\u044B \u0432 \u043F\u0440\u0438\u043D\u0446\u0438\u043F\u0435, \u043D\u0435 \u0437\u0430\u0448\u043B\u0438 \u0432 \u0432\u0435\u0440\u0445\u043D\u044E\u044E if-\u043A\u0443)\n //? - \u043A\u043E\u0433\u0434\u0430 \u0435\u0441\u0442\u044C this.credentialsProcessing, \u043D\u043E \u043D\u0435\u0442 credentials.token (\u043D\u0435 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u043E\u0432\u0430\u043D\u044B)\n //? (\u0437\u0430\u0448\u043B\u0438 \u0432 \u0432\u0435\u0440\u0445\u043D\u044E\u044E if-\u043A\u0443, \u043F\u043E\u043F\u0440\u043E\u0431\u043E\u0432\u0430\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C/\u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u043A\u0440\u0435\u0434\u044B)\n ...(credentials.token ? CREDENTIALS_CONTEXT?.getHeadersForAuthorize?.(credentials.token) || {} : {}),\n },\n queryParameters: await API_CONTEXT.processQueryParams(queryParamsToAbortableFetchInstance),\n //? \u041E\u043F\u0446\u0438\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E\n options: {\n mode: 'cors',\n redirect: 'follow',\n ...optionsToAbortableFetchInstance,\n },\n\n //? \u041A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 (\u043A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u043C\u0443\u043B\u044C\u0442\u0438\u0437\u0430\u043F\u0440\u043E\u0441\u0430), \u0441\u0434\u0435\u043B\u0430\u043D\u044B\u0439 \u043C\u0435\u0442\u043E\u0434\u043E\u043C request \u044D\u0442\u043E\u0433\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442 \u044D\u0442\u043E\u0442 \u043A\u043E\u043B\u0431\u0435\u043A\n everyPromiseCallback: async function everyPromiseCallback(response) {\n //? this - \u044D\u0442\u043E \u041D\u0415 API_CONTEXT \u0438 \u041D\u0415 CREDENTIALS_CONTEXT, a \u0438\u0442\u043E\u0433\u043E\u0432\u044B\u0439 \u044D\u0435\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch\n const ABORTABLE_FETCH_INSTANCE = this;\n\n if (!response.status) {\n const request = ABORTABLE_FETCH_INSTANCE.requestInput.find(item => item?.path === response?.request?.path);\n const isUseErrorToast = request?.mesageOptions?.isUseErrorToast;\n if (isUseErrorToast) {\n API_CONTEXT.sendMessage?.(API_CONTEXT.NO_INET, request.mesageOptions, response);\n }\n }\n\n return API_CONTEXT.REJECT_CODES.includes(response.status) ||\n (CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing && CREDENTIALS_CONTEXT?.CODES_USING_THE_REFRESH_ATTEMPT?.includes?.(response.status))\n ? Promise.reject(new Error(`status:${response.status}`))\n : Promise.resolve(!isGetBody ? response : await API_CONTEXT.getResponseBody(response));\n },\n\n //? \u0415\u0441\u043B\u0438 \u0445\u043E\u0442\u044C \u043E\u0434\u0438\u043D \u0437\u0430\u043F\u0440\u043E\u0441 \u0438\u0437 \u043F\u0430\u0447\u043A\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0440\u0435\u0434\u0436\u0435\u043A\u0447\u0435\u043D, \u0437\u0430\u0440\u0435\u0434\u0436\u0435\u043A\u0442\u0438\u0442\u0441\u044F \u0432\u0441\u044F \u043F\u0430\u0447\u043A\u0430.\n //? \u0412 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D \u044D\u0442\u043E\u0442 \u043A\u043E\u043B\u0431\u044D\u043A\n catchCallback: async function catchCallback(res) {\n //? this - \u044D\u0442\u043E \u041D\u0415 API_CONTEXT \u0438 \u041D\u0415 CREDENTIALS_CONTEXT, a \u0438\u0442\u043E\u0433\u043E\u0432\u044B\u0439 \u044D\u0435\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch\n const ABORTABLE_FETCH_INSTANCE = this;\n const code = Number(res.message.split(':')[1]);\n\n if (CREDENTIALS_CONTEXT?.CODES_USING_THE_REFRESH_ATTEMPT?.includes?.(code)) {\n const isDoRefresh = !CREDENTIALS_CONTEXT?.getIsTokenStartRefresh?.();\n\n return CREDENTIALS_CONTEXT?.waitRefresh(isDoRefresh).then(async () => {\n //? \u041F\u0440\u043E\u0431\u0443\u0435\u043C \u0437\u0430\u0440\u0435\u0444\u0440\u0435\u0448\u0438\u0442\u044C\n const newCredentials = await CREDENTIALS_CONTEXT?.processCredentials({\n ...(await CREDENTIALS_CONTEXT?.getCredentials(true)),\n isCatchCallbackProcess: isDoRefresh,\n });\n\n ABORTABLE_FETCH_INSTANCE.setHeaders({\n ...ABORTABLE_FETCH_INSTANCE.getHeaders(),\n ...(newCredentials?.token ? { Authorization: `Bearer ${newCredentials?.token}` } : {}),\n });\n\n if (newCredentials.token) return ABORTABLE_FETCH_INSTANCE.repeatRequest();\n return Promise.reject(res);\n });\n }\n\n return Promise.reject(res);\n },\n })\n );\n}\n", "import { getIsOnlyAnObject } from './_utils';\n//? \u0412 \u044D\u0442\u043E\u043C \u043A\u043A\u043B\u0430\u0441\u0441\u0435 \u0441\u043E\u0431\u0440\u0430\u043D\u044B \u043F\u043E\u043B\u0435\u0437\u043D\u044B\u0435 \u0434\u043E\u0431\u0430\u0432\u043E\u0447\u043D\u044B\u0435 \u0443\u0442\u0438\u043B\u0438\u0442\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u044B \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u043A\u043B\u0430\u0441\u0441\u0430\u043C\u0438,\n//? \u043D\u043E \u043D\u0435 \u0438\u043C\u0435\u044E\u0442 \u043F\u0440\u044F\u043C\u043E\u0433\u043E \u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u0440\u044F\u043C\u043E\u0439 \u0444-\u0442\u0438 RESTAPI\n//? \u0422\u0430\u043A \u0436\u0435 \u0443\u0442\u0438\u043B\u0438\u0442\u044B \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u044B \u043A\u0430\u043A \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u0447\u043D\u044B\u0435\nclass Utils {\n //! \u041C\u043E\u0433\u0443\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C\u0441\u044F \u041D\u0415\u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0435 \u043C\u0435\u0442\u043E\u0434\u044B!\n\n //? \u0424-\u044F normalizeQueryParams \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u043E\u043C \u0441\u043B\u043E\u0436\u043D\u044B\u0445 \u043A\u0432\u0435\u0440\u0438\n //? \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: &key1=&&&===&&&key2====&&&&&&&&key3=....\n //? \u0414\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043D\u0430 \u0432\u0445\u043E\u0434 \u043D\u0443\u0436\u043D\u043E \u043F\u043E\u0434\u0430\u0432\u0430\u0442\u044C \u041D\u0415 \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\n //? \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0432\u044B\u0445\u043E\u0434\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043A\u0432\u0435\u0440\u0438-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u041D\u0415 \u043A\u043E\u0434\u0438\u0440\u0443\u044E\u0442\u0441\u044F\n normalizeQueryParams(queryParams, settings) {\n if (settings && !getIsOnlyAnObject(settings)) {\n throw new Error('Bad settings [class Utils, normalizeQueryParams]');\n }\n\n const getInitialArr = input => {\n const prepareParam = (key, value) => {\n if (!value) return `${key}=`;\n else if (typeof value === 'string' || typeof value === 'number') return `${key}=${value}`;\n else if (Array.isArray(value)) return `${key}=${value.join('')}`;\n else return `${key}=Bad-data-format`;\n };\n\n if (Array.isArray(input)) {\n return input\n .map(item => {\n if (typeof item !== 'string') return [];\n const index = item.indexOf('=');\n if (index === -1) return [item];\n return [item.slice(0, index), item.slice(index + 1)];\n })\n .filter(([key]) => Boolean(key))\n .map(([key, value]) => prepareParam(key, value));\n } else if (getIsOnlyAnObject(input)) return Object.keys(input).map(key => prepareParam(key, input[key]));\n else if (typeof input === 'string') return (input[0] === '?' ? input.slice(1) : input).split('&');\n else return [];\n };\n\n const { isEncode = false, outputAs = 'array' } = settings || {};\n const initialStructure = getInitialArr(queryParams);\n\n const normalizedStructure = initialStructure.reduce(\n (acc, str, idx) => {\n const lastIndex = acc.result.length - 1;\n const processToJoin = (val, recoverableSymbol = '&') => {\n const encodedToJoin = `${encodeURIComponent(recoverableSymbol)}${encodeURIComponent(val)}`;\n acc.result[lastIndex] = `${acc.result[lastIndex]}${encodedToJoin}`;\n acc.toJoin = null;\n };\n if (typeof acc.toJoin === 'string') processToJoin(acc.toJoin);\n const index = str.indexOf('=');\n if (index !== -1 && index !== 0) {\n const key = str.slice(0, index);\n acc.result.push(`${key}=${encodeURIComponent(str.slice(index + 1))}`);\n } else acc.toJoin = str;\n //? \u0414\u043E\u0431\u0438\u0432\u043A\u0430 \u0434\u043B\u044F \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438\n if (idx === initialStructure.length - 1 && typeof acc.toJoin === 'string') processToJoin(acc.toJoin);\n return acc;\n },\n { result: [], toJoin: null }\n ).result;\n\n const outputStructure = normalizedStructure.map(item => {\n const [key, value] = item.split('=');\n return [key, !isEncode ? decodeURIComponent(value) : value];\n });\n\n switch (outputAs) {\n case 'string':\n return outputStructure.length ? `?${outputStructure.map(([key, value]) => `${key}=${value}`).join('&')}` : '';\n case 'object':\n return outputStructure.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});\n default:\n return outputStructure.map(([key, value]) => `${key}=${value}`);\n }\n }\n}\n\nexport default Utils;\n", "import Utils from './Utils';\nimport { addCustomMethods, getIsOnlyAnObject, getResponseClone } from './_utils';\n\nclass ApiUtils extends Utils {\n constructor(settings) {\n super();\n const { utils } = settings || {};\n if (getIsOnlyAnObject(utils)) addCustomMethods.call(this, utils);\n }\n\n //? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u0438\u0437\u043C\u0435\u043D\u043D\u043E, \u043E\u0434\u043D\u0430\u043A\u043E \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438 \u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n //? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n //? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async splitProperties(apiParams, variant) {\n const {\n isResponseAsObject,\n isGetBody,\n finalCallback,\n\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n\n successMess,\n commonSuccessMessage,\n successMessages,\n successMessageType,\n\n errorMess,\n commonErrorMessage,\n errorMessages,\n\n ...restParams\n } = apiParams || {};\n\n switch (variant) {\n case 'doRequestMapping':\n return {\n ...restParams,\n\n isGetBody,\n\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n\n successMess,\n commonSuccessMessage,\n successMessages,\n successMessageType,\n\n errorMess,\n commonErrorMessage,\n errorMessages,\n };\n default:\n return [\n restParams,\n {\n isGetBody,\n isResponseAsObject,\n ...(finalCallback ? { callback: finalCallback } : {}),\n\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n\n commonSuccessMessage: successMess || commonSuccessMessage,\n successMessages,\n successMessageType,\n\n commonErrorMessage: errorMess || commonErrorMessage,\n errorMessages,\n },\n ];\n }\n }\n\n //! \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043F\u0440\u043E\u043F\u044B api \u0438\u0437 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430\n //? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435,\n //? \u0442.\u043A. \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0440\u0430\u0437\u043D\u044B\u0435 \u0438\u043D\u0442\u0435\u0440\u043F\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u043F\u0440\u043E\u043F\u044B api\n //? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n //? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async getRootPath(/* apiProp */) {\n return this.API_PATH;\n }\n\n //? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u0438\u0437\u043C\u0435\u043D\u043D\u043E, \u043E\u0434\u043D\u0430\u043A\u043E \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438 \u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n //? \u041C\u0435\u0442\u043E\u0434 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439\n async getResponseBody(response, getBodyAs) {\n //? \u0415\u0441\u043B\u0438 response \u043D\u0435 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 Response, \u0442\u043E \u0432\u0435\u0440\u043D\u0443\u0442\u044C \u043F\u043E \u0444\u0430\u043A\u0442\u0443\n if (!(response instanceof Response)) return response;\n\n //? \u0412 \u044D\u0442\u043E\u043C \u043C\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 \u043C\u0435\u0442\u043E\u0434\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0431\u044B\u0442\u044C, \u0442.\u043A. response \u0442\u043E\u0447\u043D\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 Response.\n //? \u0410 \u0432\u043E\u0442 contentType-\u0430 \u043F\u043E\u0445\u043E\u0434\u0443 \u043C\u043E\u0436\u0435\u0442 \u043D\u0435 \u0431\u044B\u0442\u044C. \u041D\u0430\u0432\u0435\u0440\u043D\u043E\u0435...\n const contentType = response.headers.get('content-type');\n if (!contentType) return '';\n\n // ToDo - \u043E\u0448\u0438\u0431\u043A\u0430 \u0431\u044B\u043B\u0430 \u0432 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0438 executor-\u0430...\n // ToDo - \u0412\u0441\u0435 \u0431\u044B\u043B\u043E \u0447\u0435\u0440\u0435\u0437 if. \u0412 \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u043B\u043E \u043D\u0438 \u0432 \u043E\u0434\u043D\u0443 if-\u043A\u0443, \u0442\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u043B\u0441\u044F undefined \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E,\n // ToDo - \u0430 \u043F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0442 undefined \u043F\u044B\u0442\u0430\u043B\u0441\u044F \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0447\u0435\u0440\u0435\u0437 call...\n const executor = (() => {\n if (typeof getBodyAs === 'string' && getBodyAs in response && typeof response[getBodyAs] === 'function') {\n return response[getBodyAs];\n }\n\n if (typeof contentType === 'string' && contentType.includes('text/csv')) {\n return response.blob;\n }\n\n return typeof contentType === 'string' && contentType.includes('json') ? response.json : response.text;\n })();\n\n // \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0441\u043B\u0443\u0447\u0430\u0435\u0432 \u043A\u0440\u0430\u0448\u0430 \u043C\u0435\u0442\u043E\u0434\u0430 json \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0442\u0435\u043B\u0430 \u043E\u0442\u0432\u0435\u0442\u0430\n try {\n return await executor.call(response);\n } catch {\n //? \u0434\u0443\u043C\u0430\u044E \u0441\u0442\u043E\u0438\u0442 \u0437\u043D\u0430\u0442\u044C \u043C\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u0442\u0435\u043B\u043E, \u0430 \u0431\u044D\u043A \u0435\u0433\u043E \u043D\u0435 \u043F\u043E\u043B\u043E\u0436\u0438\u043B\n // eslint-disable-next-line no-console\n console.log('Failed to extract the body');\n return null;\n }\n }\n\n //! \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B \u0434\u043B\u044F \u043E\u0448\u0438\u0431\u043A\u0438 (\u043D\u0435 \u0440\u0435\u043D\u0434\u0435\u0440 \u043C\u0435\u0441\u0441\u0435\u0434\u0436\u0430, \u0430 \u0438\u043C\u0435\u0435\u043D\u043E \u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043E\u0448\u0438\u0431\u043A\u0438),\n //? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435,\n //? \u0442.\u043A. \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0440\u0430\u0437\u043D\u044B\u0435 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B \u0442\u0435\u043B\u0430 \u043E\u0442\u0432\u0435\u0442\u0430 \u0434\u043B\u044F \u043E\u0448\u0438\u0431\u043A\u0438\n //? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n //? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n //? res - \u0443\u0436\u0435 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430\n async getErrorMessage(res) {\n return res;\n }\n\n //? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u0438\u0437\u043C\u0435\u043D\u043D\u043E, \u043E\u0434\u043D\u0430\u043A\u043E \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438 \u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n //? \u041C\u0435\u0442\u043E\u0434 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439\n async checkResponseCode(res, settings) {\n //! \u041F\u0440\u0438 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0438 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430, \u0435\u0441\u043B\u0438 sendMessage \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0444-\u0435\u0439,\n //! \u0442\u043E \u044D\u0442\u043E \u0432\u043E\u0441\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0448\u0430\u0433\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0435 \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u043A\u0430\u043A \u0442\u0430\u043A\u043E\u0432\u043E\u0433\u043E\n if (typeof this.sendMessage !== 'function') return res;\n\n const { successMess, errorMess } = settings || {};\n\n const message = res.ok\n ? successMess || this.DEFAULT_SUCCESS_MESSAGE\n : errorMess || (await this.getErrorMessage(await this.getResponseBody(await getResponseClone(res))));\n\n try {\n this.sendMessage(message, settings, await getResponseClone(res));\n } catch (_error) {}\n return res;\n }\n\n //? \u0421\u0443\u0442\u044C \u043C\u0435\u0442\u043E\u0434\u0430:\n //? \u043F\u0435\u0440\u0435\u0434\u0430\u0442\u044C \u0438\u0437 \u0432\u043D\u0435 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u041A\u0410\u0416\u0414\u041E\u0413\u041E \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0441\u0434\u0435\u043B\u0430\u043D\u043D\u043E\u0433\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C RESTAPI\n //! \u0414\u0430\u043D\u043D\u044B\u0435 \u0437\u0430\u0442\u0440\u0443\u0442 \u043F\u0440\u043E\u0447\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u041A\u0420\u041E\u041C\u0415 \u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E \u043B\u043E\u0433\u0438\u043A\u0435 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438\n //? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n //? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n //? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async addAsCommon() {\n //! \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 { headers, queryParameters, options }, \u0433\u0434\u0435\n //! - headers \u0438 options - \u043E\u0431\u044A\u0435\u043A\u0442\u044B,\n //! - queryParameters - \u0441\u0442\u0440\u043E\u043A\u0430, \u043C\u0430\u0441\u0441\u0438\u0432 \u0438\u043B\u0438 \u043E\u0431\u044A\u0435\u043A\u0442\n return {};\n }\n\n //! \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043A\u0432\u0435\u0440\u0438-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0434\u043B\u044F \u043E\u0431\u0449\u0435\u0433\u043E \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0438\u043D\u0433\u0430,\n //! \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u0434\u043B\u044F \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F decodeURIComponent \u0438\u043B\u0438/\u0438 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0432 \u0444\u043E\u0440\u043C\u0430\u0442 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n //? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435,\n //? \u0442.\u043A. \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0440\u0430\u0437\u043D\u044B\u0435 \u0434\u043E\u0433\u043E\u0432\u043E\u0440\u0435\u043D\u043D\u043E\u0441\u0442\u0438 \u043F\u043E \u0444\u043E\u0440\u043C\u0430\u0442\u0430\u043C\n //? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n //? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async processQueryParams(queryParams) {\n return queryParams;\n }\n}\n\nexport default ApiUtils;\n", "import ApiUtils from './ApiUtils';\nimport { addCustomMethods, getIsOnlyAnObject, getResponseClone, omitKeys } from './_utils';\n\n//? \u041F\u0440\u0435\u0444\u0438\u043A\u0441 createRequest_ \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A \u043A\u0440\u0435\u0439\u0442\u0435\u0440\u0430\u043C \u0441 \u0446\u0435\u043B\u044C\u044E \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0438\u043C\u0435\u043D\nconst PREFIX_OF_CLASS_UTILS = 'createRequest_';\nclass ApiRequestCreators extends ApiUtils {\n constructor(settings) {\n super(settings);\n const { requestsCreators } = settings || {};\n\n if (getIsOnlyAnObject(requestsCreators)) addCustomMethods.call(this, requestsCreators, PREFIX_OF_CLASS_UTILS);\n }\n\n //? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 toJson \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C Response.json()\n //? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043D\u0430\u0441\u0442\u043E\u0440\u043E\u0439\u043A\u0438 isGetBody\n async createRequest_toJson(props, variant) {\n const safelyProps = omitKeys(props, ['getBodyAs']);\n\n return this.splitProperties(\n {\n ...safelyProps,\n isGetBody: false,\n callback: async res => {\n const output = await this.getResponseBody(res, 'json');\n return await (safelyProps.callback?.(output) ?? output);\n },\n },\n variant\n );\n }\n\n //? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 toJsonAdvanced \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 { response, result },\n //? \u0433\u0434\u0435 response - \u043E\u0431\u044A\u0435\u043A\u0442 Response, result - \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C Response.json()\n //? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043D\u0430\u0441\u0442\u043E\u0440\u043E\u0439\u043A\u0438 isGetBody\n async createRequest_toJsonAdvanced(props, variant) {\n const safelyProps = omitKeys(props, ['getBodyAs']);\n\n return this.splitProperties(\n {\n ...safelyProps,\n isGetBody: false,\n callback: async res => {\n const output = {\n response: res,\n result: await this.getResponseBody(await getResponseClone(res), 'json'),\n };\n return await (safelyProps.callback?.(output) ?? output);\n },\n },\n variant\n );\n }\n\n //? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 blob \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C Response.blob(),\n //? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043D\u0430\u0441\u0442\u043E\u0440\u043E\u0439\u043A\u0438 isGetBody\n async createRequest_blob(props, variant) {\n const safelyProps = omitKeys(props, ['getBodyAs']);\n\n return this.splitProperties(\n {\n ...safelyProps,\n isGetBody: false,\n callback: async res => {\n const output = await this.getResponseBody(await getResponseClone(res), 'blob');\n return await (safelyProps.callback?.(output) ?? output);\n },\n },\n variant\n );\n }\n\n //? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 testBadResponse \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u043E\u0431\u044A\u0435\u043A\u0442 Response \u0432 401-\u043C \u0441\u0442\u0430\u0442\u0443\u0441\u0435\n //? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u0432\u043E\u043E\u0431\u0449\u0435 \u043D\u0438 \u043E\u0442 \u0447\u0435\u0433\u043E\n async createRequest_testBadResponse(props, variant) {\n return this.splitProperties(\n {\n ...props,\n callback: async () =>\n Promise.resolve(\n new Response(JSON.stringify({ errors: [{ message: 'test bad Response' }] }), {\n status: 401,\n statusText: 'test bad Response',\n headers: (() => {\n const headers = new Headers();\n headers.append('content-type', 'application/json');\n return headers;\n })(),\n })\n ).then(res => props.callback?.(res) ?? res),\n },\n variant\n );\n }\n\n //? \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\n //? - \u043B\u0438\u0431\u043E \u043E\u0431\u044A\u0435\u043A\u0442 Response\n //? - \u043B\u0438\u0431\u043E \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 (\u0432 \u0441\u043B\u0443\u0447\u0430\u0435 isGetBody: 'first') \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C getResponseBody (\u0441\u043C\u043E\u0442\u0440\u0438 \u043A\u043B\u0430\u0441\u0441 ApiUtils)\n async createRequest_default(props, variant) {\n return this.splitProperties(props, variant);\n }\n}\n\nexport default ApiRequestCreators;\n", "import ApiRequestCreators from './ApiRequestCreators';\nclass ApiBase extends ApiRequestCreators {\n constructor(settings) {\n super(settings);\n\n const {\n API_PATH,\n\n BAD_REQUEST_DATA_TEXT = 'Bad request data',\n DEFAULT_SUCCESS_MESSAGE = 'Success',\n DEFAULT_ERROR_MESSAGE = 'Something wrong, try again',\n NO_INET = 'Please check your network connection and reload page',\n\n REJECT_CODES = [],\n\n ...customConstants\n } = settings.constants || {};\n\n if (typeof API_PATH !== 'string') throw new Error('No API_PATH [ApiBase constructor]');\n\n if (\n typeof BAD_REQUEST_DATA_TEXT !== 'string' ||\n typeof DEFAULT_SUCCESS_MESSAGE !== 'string' ||\n typeof DEFAULT_ERROR_MESSAGE !== 'string' ||\n typeof NO_INET !== 'string' ||\n !Array.isArray(REJECT_CODES) ||\n !REJECT_CODES.every(i => typeof i === 'number')\n ) {\n throw new Error('Bad input data [ApiBase constructor]');\n }\n\n this.API_PATH = API_PATH;\n\n this.BAD_REQUEST_DATA_TEXT = BAD_REQUEST_DATA_TEXT;\n this.DEFAULT_SUCCESS_MESSAGE = DEFAULT_SUCCESS_MESSAGE;\n this.DEFAULT_ERROR_MESSAGE = DEFAULT_ERROR_MESSAGE;\n this.NO_INET = NO_INET;\n\n this.REJECT_CODES = REJECT_CODES;\n\n Object.keys(customConstants).forEach(key => {\n this[key] = customConstants[key];\n });\n }\n}\n\nexport default ApiBase;\n", "import { getIsOnlyAnObject } from './_utils';\n\nexport function decodeJWT(token) {\n try {\n const payload = token.split('.')[1];\n return JSON.parse(atob(payload));\n } catch (e) {\n return null;\n }\n}\n\nclass CredentialsProcessing {\n constructor(settings) {\n const { credentialsProcessing } = settings;\n const {\n //? \u0414\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0432 \u0437\u0430\u043F\u0440\u043E\u0441\u044B \u043E\u0442 API\n //? \u043D\u0443\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C \u043C\u0435\u0442\u043E\u0434\u044B getCredentials \u0438 getHeadersForAuthorize\n getCredentials,\n getHeadersForAuthorize, //? \u041D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u043E\u043A\u0435\u043D, \u0434\u043E\u043B\u0436\u043D\u0430 \u0432\u0435\u0440\u043D\u0443\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 \u0434\u043B\u044F \u043A\u043E\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u0430 Headers\n\n //? \u0422\u0430\u043A \u0436\u0435 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C\n importCredentials, //? \u0435\u0441\u043B\u0438 \u043E\u043D \u043F\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044F, \u0442\u043E \u043E\u043D \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C\u0441\u044F \u043A \u0432\u044B\u0432\u043E\u0434\u0443 \u043E\u0442 \u0432\u044B\u0437\u043E\u0432\u0430 getCredentials\n saveCredentials, //? \u043C\u043E\u0436\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043D\u0430\u0439\u0442\u0438 \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435 credentialsProcessing, \u0447\u0442\u043E\u0431\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438\n\n //! \u041B\u0438\u0431\u043E \u0432\u044B\u0437\u043E\u0432 getCredentials, \u043B\u0438\u0431\u043E \u0446\u0435\u043F\u043E\u0447\u043A\u0430 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 importCredentials(getCredentials())\n //! \u0434\u043E\u043B\u0436\u043D\u0430 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0442\u0440\u0435\u0431\u0443\u0435\u043C\u0443\u044E \u043A\u043B\u0430\u0441\u0441\u043E\u043C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443\n //! \u041A\u043B\u0430\u0441\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B\n //! - { token }, \u0435\u0441\u043B\u0438 \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448 \u0442\u043E\u043A\u0435\u043D\u0430 \u041D\u0415 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F\n //! - { token, refreshToken, expires }, \u0435\u0441\u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448 \u0442\u043E\u043A\u0435\u043D\u0430\n\n // *********\n\n //? \u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432\n isUseRefreshTokensPropcessing = false,\n\n //! \u0414\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043C\u0435\u0442\u043E\u0434\u0430 saveCredentials \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u041E\u0411\u042F\u0417\u0410\u0422\u0415\u041B\u042C\u041D\u041E\u0419\n\n //? \u0422\u0430\u043A \u0436\u0435 \u0434\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u043D\u0443\u0436\u043D\u043E\n //? - \u043B\u0438\u0431\u043E\n refreshCredentials, //! \u043C\u0435\u0442\u043E\u0434 \u0434\u043E\u043B\u0436\u0435\u043D \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0442\u0430\u043A\u0443\u044E \u0436\u0435 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u043A\u0430\u043A \u0438 \u043C\u0435\u0442\u043E\u0434 getCredentials,\n //? \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043A\u0443\u0449\u0438\u0435 \u043A\u0440\u0435\u0434\u044B, \u043A \u0432\u044B\u0445\u043E\u0434\u0443 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D importCredentials, \u0435\u0441\u043B\u0438 \u044D\u0442\u043E\u0442 \u043C\u0435\u0442\u043E\u0434 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043B\u0441\u044F\n //? - \u043B\u0438\u0431\u043E\n REFRESH_TOKEN_PATH, //! REFRESH_TOKEN_PATH \u043F\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044F \u041F\u041E\u041B\u041D\u041E\u0421\u0422\u042C\u042E (\u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u0430\u044F \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044F)!\n CODES_USING_THE_REFRESH_ATTEMPT, //? \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043F\u043E \u043A\u0430\u043A\u0438\u043C \u043A\u043E\u0434\u0430\u043C \u043E\u0442\u0432\u0435\u0442\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442\u044C\u0441\u044F \u0440\u0435\u0444\u0440\u0435\u0448, \u043C\u0430\u0441\u0441\u0438\u0432 \u0447\u0438\u0441\u0435\u043B\n\n //? \u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E\n REFRESH_TOKEN_FLAG = 'refreshTokenFlag',\n INTERVAL_FOR_CHECKING_TOKEN_UPDATE = 50, // ms\n callbackAfterRejectRefresh,\n } = credentialsProcessing || {};\n\n if (typeof getCredentials !== 'function') throw new Error('No getCredentials method [CredentialsProcessing]');\n if (typeof getHeadersForAuthorize !== 'function') {\n throw new Error('No getHeadersForAuthorize method [CredentialsProcessing]');\n }\n if (importCredentials && typeof importCredentials !== 'function') {\n throw new Error('Bad importCredentials method [CredentialsProcessing]');\n }\n\n this.isUseRefreshTokensPropcessing = isUseRefreshTokensPropcessing;\n this.DEFAULT_CREDENTIALS = {};\n this.getCredentialsByOuter = getCredentials;\n this.getHeadersForAuthorize = getHeadersForAuthorize;\n this.importCredentials = importCredentials;\n\n //? \u0415\u0441\u043B\u0438 \u043C\u0435\u0442\u043E\u0434 \u043F\u0435\u0440\u0435\u0434\u0430\u043D \u0438\u043B\u0438 \u0435\u0441\u043B\u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u043D, \u043D\u043E \u0432\u043A\u043B\u044E\u0447\u0435\u043D \u0444\u043B\u043E\u0443 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u043A\u0435\u043D\u043E\u0432 (\u0442\u043E\u0433\u0434\u0430 saveCredentials \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D)\n if (saveCredentials || isUseRefreshTokensPropcessing) {\n if (typeof saveCredentials !== 'function') throw new Error('No saveCredentials method [CredentialsProcessing]');\n else this.saveCredentials = saveCredentials;\n }\n\n if (isUseRefreshTokensPropcessing) {\n if (typeof refreshCredentials === 'function') this.refreshCredentialsByOuter = refreshCredentials;\n else {\n if (typeof this.refreshCredentialsByOuter === 'function' && typeof REFRESH_TOKEN_PATH !== 'string') {\n throw new Error('No REFRESH_TOKEN_PATH [CredentialsProcessing]');\n }\n this.REFRESH_TOKEN_PATH = REFRESH_TOKEN_PATH;\n }\n\n if (!Array.isArray(CODES_USING_THE_REFRESH_ATTEMPT)) {\n throw new Error('No CODES_USING_THE_REFRESH_ATTEMPT [CredentialsProcessing]');\n }\n if (!CODES_USING_THE_REFRESH_ATTEMPT.every(i => typeof i === 'number')) {\n throw new Error('Invalid format of CODES_USING_THE_REFRESH_ATTEMPT elements [CredentialsProcessing]');\n }\n\n if (typeof REFRESH_TOKEN_FLAG !== 'string') throw new Error('Bad REFRESH_TOKEN_FLAG [CredentialsProcessing]');\n if (typeof INTERVAL_FOR_CHECKING_TOKEN_UPDATE !== 'number') {\n throw new Error('Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]');\n }\n if (typeof INTERVAL_FOR_CHECKING_TOKEN_UPDATE !== 'number') {\n throw new Error('Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]');\n }\n if (callbackAfterRejectRefresh && typeof callbackAfterRejectRefresh !== 'function') {\n throw new Error('Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]');\n }\n\n this.CODES_USING_THE_REFRESH_ATTEMPT = CODES_USING_THE_REFRESH_ATTEMPT;\n this.REFRESH_TOKEN_FLAG = REFRESH_TOKEN_FLAG;\n this.INTERVAL_FOR_CHECKING_TOKEN_UPDATE = INTERVAL_FOR_CHECKING_TOKEN_UPDATE;\n\n if (callbackAfterRejectRefresh) this.callbackAfterRejectRefresh = callbackAfterRejectRefresh;\n }\n }\n\n getIsTokenStartRefresh() {\n return localStorage.getItem(this.REFRESH_TOKEN_FLAG);\n }\n\n setIsTokenStartRefresh() {\n localStorage.setItem(this.REFRESH_TOKEN_FLAG, true);\n }\n\n removeIsTokenStartRefresh() {\n localStorage.removeItem(this.REFRESH_TOKEN_FLAG);\n }\n\n async getCredentials(isCatchCallbackProcess, callback) {\n let credentials = await this.getCredentialsByOuter();\n\n if (typeof this.importCredentials === 'function') credentials = await this.importCredentials(credentials);\n if (!getIsOnlyAnObject(credentials)) credentials = {};\n\n const token = credentials.token || null;\n\n if (token && !isCatchCallbackProcess) {\n let decoded;\n try {\n decoded = decodeJWT(token);\n } catch {\n decoded = null;\n }\n const currentTime = Date.now() / 1000;\n if (decoded !== null && Number(decoded.exp) < currentTime) credentials = { ...credentials, isNeedRefresh: true };\n }\n\n if (callback) await callback({ ...credentials, isCatchCallbackProcess });\n return { ...credentials, isCatchCallbackProcess };\n }\n\n async refreshCredentials(currentCredentials, callback) {\n const CONTEXT = this;\n\n async function finalize(cred) {\n if (callback) await callback(cred);\n return Promise.resolve(cred).then(async res => {\n CONTEXT.removeIsTokenStartRefresh();\n return res;\n });\n }\n\n if (!currentCredentials?.token || !currentCredentials?.refreshToken) return finalize(CONTEXT.DEFAULT_CREDENTIALS);\n\n //! \u0412\u041D\u0418\u041C\u0410\u041D\u0418\u0415! \u0414\u0430\u043D\u043D\u044B\u0439 \u043C\u0435\u0445\u0430\u043D\u0438\u0437\u043C \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u043F\u0440\u0438\u043D\u044F\u0442 \u043D\u0430 \u043F\u0440\u043E\u0435\u043A\u0442\u0435 finturfreactfrontend (\u0430\u0434\u043C\u0438\u043D\u043A\u0430)\n //! \u041D\u0430 \u043A\u0430\u0431\u0438\u043D\u0435\u0442\u0435 \u043E\u043D \u0422\u041E\u0427\u041D\u041E \u041D\u0415 \u0422\u0410\u041A\u041E\u0419\n async function refreshCredentialsByDefault() {\n const { token, refreshToken } = currentCredentials;\n const headers = new Headers();\n headers.append(...Object.entries(CONTEXT.getHeadersForAuthorize(token)));\n\n const body = new FormData();\n body.append('grant_type', 'refresh_token');\n body.append('refresh_token', refreshToken);\n body.append('client_id', 'oauth');\n body.append('client_secret', 'secret');\n body.append('access_type', 'offline');\n\n return fetch(`${CONTEXT.REFRESH_TOKEN_PATH}`, {\n mode: 'cors',\n method: 'POST',\n headers,\n body,\n redirect: 'follow',\n });\n }\n\n //? \u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 refreshCredentials \u043F\u0440\u0438 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0438 \u044D\u043A\u0437\u0435\u043C\u043B\u044F\u0440\u0430 RESTAPI, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0443\u0432\u0435\u0440\u0435\u043D\u044B,\n //? \u0447\u0442\u043E \u043C\u0435\u0445\u0430\u043D\u0438\u0437\u043C \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0418\u041C\u0415\u041D\u041D\u041E \u0422\u0410\u041A\u041E\u0419 \u043A\u0430\u043A \u0432 \u0444-\u0438 refreshCredentialsByDefault!\n //! currentCredentials \u043F\u0435\u0440\u0435\u0434\u0430\u044E\u0442\u0441\u044F \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u043A\u043B\u0430\u0441\u0441\u0430! ({ token, refreshToken, expires })\n const newCredentials =\n typeof CONTEXT.refreshCredentialsByOuter === 'function'\n ? await CONTEXT.refreshCredentialsByOuter(currentCredentials)\n : await refreshCredentialsByDefault();\n\n return finalize(newCredentials);\n }\n\n async waitRefresh(isNeedRefresh) {\n return new Promise(resolve => {\n if (!this.getIsTokenStartRefresh()) {\n if (isNeedRefresh) this.setIsTokenStartRefresh();\n resolve();\n } else {\n const intervalId = setInterval(() => {\n if (!this.getIsTokenStartRefresh()) {\n clearInterval(intervalId);\n resolve();\n }\n }, this.INTERVAL_FOR_CHECKING_TOKEN_UPDATE);\n }\n });\n }\n\n async processCredentials(cred) {\n if (!cred.isNeedRefresh && !cred.isCatchCallbackProcess) return cred;\n\n const CONTEXT = this;\n\n return CONTEXT.refreshCredentials(cred, response => CONTEXT.saveCredentials(response)).then(() => {\n return new Promise(resolve => {\n setTimeout(async () => {\n const newCredentials = await CONTEXT.getCredentials();\n if (!newCredentials?.token) {\n newCredentials.isRefreshFailed = true;\n setTimeout(() => {\n CONTEXT?.callbackAfterRejectRefresh?.();\n }, 0);\n }\n resolve(newCredentials);\n }, 0);\n });\n });\n }\n}\n\nexport default CredentialsProcessing;\n", "import ApiBase from './partials/ApiBase';\nimport CredentialsProcessing from './partials/CredentialsProcessing';\nimport { getInstanceOfFetchSystem, getIsOnlyAnObject } from './partials/_utils';\n\nfunction returnTheContext() {\n return this;\n}\nclass RESTAPI extends ApiBase {\n constructor(settings) {\n super(settings);\n const { sendMessage, credentialsProcessing } = settings || {};\n this.sendMessage = typeof sendMessage === 'function' ? sendMessage : null;\n\n //! \u041D\u0430\u043B\u0438\u0447\u0438\u0435 credentialsProcessing \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0414\u041E\u0411\u0410\u0412\u041B\u0415\u041D\u0418\u0415 \u0422\u041E\u041A\u0415\u041D\u041E\u0412 \u0412 \u0417\u0410\u041F\u0420\u041E\u0421\u042B,\n //! \u041D\u041E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u041D\u0415 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432\n //! (\u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u0440\u043E\u043F\u043E\u0439 isUseRefreshTokensPropcessing \u0438\u0437 credentialsProcessing)\n if (getIsOnlyAnObject(credentialsProcessing)) {\n this.credentialsProcessing = new CredentialsProcessing(settings);\n\n //? credentialsProcessing \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D \u043E\u0431\u043E\u0441\u043E\u0431\u043B\u0435\u043D\u043E \u0434\u043B\u044F \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043E\u0431\u043B\u0430\u0434\u0430\u0442\u044C \u0441\u0432\u043E\u0438\u043C \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u044B\u043C this\n //? \u041E\u0434\u043D\u0430\u043A\u043E \u043F\u0440\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0438 \u043C\u0435\u0442\u043E\u0434\u043E\u0432 credentialsProcessing\n //? \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u043D\u0430\u0434\u043E\u0431\u0438\u0442\u0441\u044F \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438 \u043A\u043B\u0430\u0441\u0441\u0430 RESTAPI\n //? \u0414\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0434\u043E\u0442\u044F\u043D\u0443\u0442\u044C\u0441\u044F \u0434\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u0433\u043E \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430\n this.credentialsProcessing.getRESTAPIContext = returnTheContext.bind(this);\n }\n }\n\n //! \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 (\u0431\u0430\u0437\u043E\u0432\u044B\u0439) \u043C\u0435\u0442\u043E\u0434 API, \u043C\u0443\u043B\u044C\u0442\u0438\u0437\u0430\u043F\u0440\u043E\u0441\u044B\n async doRequest(inputRequests, settings) {\n if (typeof inputRequests !== 'string' && typeof inputRequests !== 'object') {\n return Promise.reject(new Error(this.BAD_REQUEST_DATA_TEXT));\n }\n\n //? \u041A \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u043C \u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C API \u0431\u0443\u0434\u0435\u043C \u0442\u044F\u043D\u0443\u0442\u044C\u0441\u044F \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043C\u044B\u043A\u0430\u043D\u0438\u044F\n const API_CONTEXT = this;\n\n const { isResponseAsObject, isGetBody, callback, ...partialRestSettings } = settings || {};\n const {\n commonSuccessMessage: CSMfromSettings,\n commonErrorMessage: CEMfromSettings,\n successMessageType: SMTfromSettings,\n\n isToastResult: isToastFromSettings,\n toastOptions: TOFomSettings,\n isNoToastSuccess: isNTSFromSettings,\n isNoToastError: isNTEFromSettings,\n isNoToast: isNoToastFromSettings,\n\n successMessages,\n errorMessages,\n } = partialRestSettings || {};\n\n //? \u041F\u0440\u0438 \u0432\u044B\u0437\u043E\u0432\u0435 getRequestInstance \u043F\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 API\n //? \u0412 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0435 \u0432\u044B\u0437\u043E\u0432\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u043C \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 \u043A\u043B\u0430\u0441\u0441\u0430 AbortableFetch...\n const instance = await getInstanceOfFetchSystem.call(this);\n if (!instance) {\n throw new Error('It is impossible to make a request!');\n }\n\n //? ... \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0435\u0449\u0435 \u043D\u0435\u043C\u043D\u043E\u0433\u043E \u0434\u043E\u043D\u0430\u0441\u0442\u0440\u043E\u0438\u043C \u0441\u0435\u0442\u0442\u0435\u0440\u0430\u043C\u0438 \u044D\u043A\u0437\u0435\u043F\u043B\u044F\u0440\u0430\n instance.setIsResponseAsObject(isResponseAsObject ?? true);\n if (callback) instance.setCallback(callback);\n\n //? \u042D\u0442\u043E \u041D\u0415 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F \u0444-\u044F, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u0435\u0440\u043D\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n function getRequests() {\n let output;\n if (typeof inputRequests === 'string') output = [{ path: inputRequests }];\n else output = Array.isArray(inputRequests) ? inputRequests : [inputRequests];\n\n //? \u042D\u0442\u043E \u041D\u0415 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F \u0444-\u044F, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439 \u043A\u043E\u043B\u0431\u044D\u043A\n function getCallback(item, mesageOptions) {\n const { getBodyAs } = item;\n\n const finalIsGetBody = typeof item.isGetBody === 'boolean' || typeof item.isGetBody === 'string' ? item.isGetBody : isGetBody;\n const finalIsGetBodyFirst = finalIsGetBody === 'first';\n\n const checkResponseCallback = finalIsGetBodyFirst\n ? async (res, mesageOptions) => API_CONTEXT.getResponseBody(await API_CONTEXT.checkResponseCode(res, mesageOptions), getBodyAs)\n : async (res, mesageOptions) => API_CONTEXT.checkResponseCode(res, mesageOptions);\n\n const callback = item.callback\n ? async res => item.callback(await checkResponseCallback(res, mesageOptions))\n : async res => checkResponseCallback(res, mesageOptions);\n\n return finalIsGetBody && !finalIsGetBodyFirst ? async res => API_CONTEXT.getResponseBody(await callback(res), getBodyAs) : callback;\n }\n\n async function getRequestItem(item, idx) {\n const { type, ...partialRestFirst } = item;\n //? \u041F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u043B\u043E\u0441\u044C \u0447\u0442\u043E \u043F\u0440\u043E\u043F\u0430 type \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430\n //? \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u043C\u0435\u0442\u043E\u0434\u0430 doMonoRequest,\n //? \u043E\u0434\u043D\u0430\u043A\u043E \u043E\u043A\u0430\u0437\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E type \u0443\u0434\u043E\u0431\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0438 \u0432 \u043C\u0443\u043B\u044C\u0442\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u0430\u0445 (\u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E).\n //? \u0412 \u0434\u0430\u043D\u043D\u043E\u043C \u043C\u0435\u0441\u0442\u0435 \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 type \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0438\u0437 \u043C\u0443\u043B\u044C\u0442\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n //? 'doRequestMapping' - \u043A\u043B\u044E\u0447 \u0434\u043B\u044F \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0432\u044B\u0445\u043E\u0434\u043D\u044B\u043C\u0438 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430\u043C\u0438 \u0438\u0437 \u043C\u0435\u0442\u043E\u0434\u0430 splitProperties\n //? (splitProperties \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u041B\u042E\u0411\u042B\u041C \u043A\u0440\u0435\u0439\u0442\u0435\u0440\u043E\u043C)\n const itemAfterRequestCreating = await (async () => {\n const key = `createRequest_${type ?? 'default'}`;\n\n // ? \u0417\u0430\u0449\u0438\u0442\u0430 \u043D\u0430 \u0441\u043B\u0443\u0447\u0430\u0439 \u0435\u0441\u043B\u0438 type \u043F\u0435\u0440\u0435\u0434\u0430\u043D, \u043D\u043E \u0442\u0430\u043A\u043E\u0433\u043E \u043D\u0435\u0442 \u0432 API_CONTEXT\n return key in API_CONTEXT\n ? API_CONTEXT[key](partialRestFirst, 'doRequestMapping')\n : API_CONTEXT.createRequest_default(partialRestFirst, 'doRequestMapping');\n })();\n\n const { fullPath, api, path, query, queryParameters, ...partialRestSecond } = itemAfterRequestCreating;\n const {\n successMess,\n commonSuccessMessage,\n successMessageType,\n errorMess,\n commonErrorMessage,\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n ...rest\n } = partialRestSecond;\n\n const useSuccessMessageFlag = Boolean(\n successMess || commonSuccessMessage || successMessages?.[idx] || CSMfromSettings || isToastResult || isToastFromSettings\n );\n\n const isUseSuccessToast = useSuccessMessageFlag && !isNoToast && !isNoToastFromSettings && !isNoToastSuccess && !isNTSFromSettings;\n\n const isUseErrorToast = !isNoToast && !isNoToastFromSettings && !isNoToastError && !isNTEFromSettings;\n\n const mesageOptions = {\n successMess: successMess || commonSuccessMessage || successMessages?.[idx] || CSMfromSettings,\n successMessageType: successMessageType || SMTfromSettings,\n errorMess: errorMess || commonErrorMessage || errorMessages?.[idx] || CEMfromSettings,\n isUseSuccessToast,\n isUseErrorToast,\n toastOptions: toastOptions || TOFomSettings,\n };\n\n //? \u0414\u0430\u043D\u043D\u0430\u044F \u0444-\u044F \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u0441\u044F await-\u043C\u0438 \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0436\u0434\u0430\u0442\u044C\u0441\u044F \u0444\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\n return {\n ...rest,\n path: `${fullPath || (await API_CONTEXT.getRootPath(api)) + (path || '')}`,\n\n //? \u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u043C \u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0443\u044E\u0441\u044F \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0443\u044E \u0444-\u044E, \u0436\u0434\u0435\u043C \u0440\u0435\u0437\u043E\u043B\u0432\u0430 \u043F\u0440\u043E\u043C\u0438\u0441\u0430 \u043E\u0442 \u043D\u0435\u0435\n queryParameters: await (async () => {\n const queryParams = query || queryParameters || '';\n //? \u0422.\u043A.\u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0430\u044F\u0441\u044F \u0444-\u044F \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u0442\u043E \u043C\u043E\u0436\u0435\u043C \u0434\u043E\u0436\u0434\u0430\u0442\u044C\u0441\u044F \u0444\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\n const preparedQueryParams = await API_CONTEXT.processQueryParams(queryParams);\n return preparedQueryParams;\n })(),\n mesageOptions,\n callback: getCallback(itemAfterRequestCreating, mesageOptions),\n };\n }\n\n //? getRequestItem - \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F \u0444-\u044F (\u0432\u044B\u0437\u043E\u0432 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043F\u0440\u043E\u043C\u0438\u0441)\n //? \u0412\u044B\u0437\u044B\u0432\u0430\u0435\u043C \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043C\u0430\u043F\u0438\u043D\u0433\u0430, \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u043C \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n return output?.map((item, idx) => getRequestItem(item, idx));\n }\n\n //? \u0424-\u044F getRequests \u041D\u0415 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u043D\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n //? \u0414\u041E\u0416\u0418\u0414\u0410\u0415\u041C\u0421\u042F \u0440\u0435\u0437\u043E\u043B\u0432\u0430 \u0432\u0441\u0435\u0445 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432 \u0447\u0435\u0440\u0435\u0437 Promise.all,\n //? \u043F\u043E\u0441\u043B\u0435 \u0440\u0435\u0437\u043E\u043B\u0432\u0430 \u0432\u0441\u0435\u0445 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432 Promise.all \u0432\u0435\u0440\u043D\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0440\u0435\u0437\u043E\u043B\u0432\u0430,\n //? instance - \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch\n //? \u0412\u044B\u0437\u044B\u0432\u0430\u0435\u043C instance.request, \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044F \u043C\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0440\u0435\u0437\u043E\u043B\u0432\u043E\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n //? (\u0442.\u0435. \u043C\u0430\u0441\u0441\u0438\u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430)\n return instance.request(await Promise.all(getRequests()));\n }\n\n //! \u041C\u0435\u0442\u043E\u0434 API \u0434\u043B\u044F \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0445 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432\n async doMonoRequest(requestSettings) {\n if (!getIsOnlyAnObject(requestSettings)) throw new Error(`${this.BAD_REQUEST_DATA_TEXT} [RESTAPI.doMonoRequest]`);\n const { type, ...requestSettingsRest } = requestSettings;\n\n //? \u0420\u0435\u043A\u0432\u0435\u0441\u0442-\u043A\u0440\u0435\u0439\u0442\u0435\u0440\u044B \u0440\u0430\u0437\u0434\u0435\u043B\u044F\u044E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B, \u043F\u0440\u0438 \u043D\u0430\u0434\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u044D\u0442\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044E\u0442, \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u044E\u0442 \u0444-\u0442\u044C\n //? \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u043C\u0435\u0442\u043E\u0434\u0430 doRequest\n const doRequestArgs =\n type && this[`createRequest_${type}`]\n ? [...(await this[`createRequest_${type}`](requestSettingsRest))]\n : [...(await this.createRequest_default(requestSettingsRest))];\n\n return this.doRequest(...doRequestArgs);\n }\n}\n\nexport default RESTAPI;\n"],
5
- "mappings": "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",
6
- "names": ["RESPONSE_AS_OBJECT_ALWAYS_VALUE", "AbortableFetch", "AbortableFetch_default", "AbortableFetch_default", "mesageOptions", "callback"]
3
+ "sources": ["../src/classes.ts", "../src/Classes/AbortableFetch.js", "../src/Classes/AnimatedHandler.js", "../src/Classes/RESTAPI/partials/AbortableFetch.ts", "../src/Classes/RESTAPI/partials/_utils.ts", "../src/Classes/RESTAPI/partials/Utils.ts", "../src/Classes/RESTAPI/partials/ApiUtils.ts", "../src/Classes/RESTAPI/partials/sse.ts", "../src/Classes/RESTAPI/partials/ApiRequestCreators.ts", "../src/Classes/RESTAPI/partials/ApiBase.ts", "../src/Classes/RESTAPI/partials/CredentialsProcessing.ts", "../src/Classes/RESTAPI/index.ts"],
4
+ "sourcesContent": ["/**\n * IntelicoKit \u2014 Public subpath: \"intelicoreact/classes\"\n * RESTAPI, AbortableFetch, AnimatedHandler\n */\n\nexport { default as AbortableFetch } from './Classes/AbortableFetch';\nexport { default as AnimatedHandler } from './Classes/AnimatedHandler';\nexport { default as RESTAPI } from './Classes/RESTAPI/index';\n", "/* eslint-disable no-unused-vars */\n\nconst RESPONSE_AS_OBJECT_ALWAYS_VALUE = \"always\";\nclass AbortableFetch {\n #pathPrefix = null;\n\n #method = null;\n\n #queryParameters = null;\n\n #headers = null;\n\n #body = null;\n\n #options = null;\n\n #callback = null;\n\n #catchCallback = null;\n\n #everyPromiseCallback = null;\n\n #isResponseAsObject = false;\n\n constructor(input) {\n if (input && (typeof input !== \"object\" || Array.isArray(input)))\n throw new Error(\"Not valid input value!\");\n this.getPathPrefix = this.getPathPrefix.bind(this);\n this.setPathPrefix = this.setPathPrefix.bind(this);\n this.getMethod = this.getMethod.bind(this);\n this.setMethod = this.setMethod.bind(this);\n this.getQueryParameters = this.getQueryParameters.bind(this);\n this.getQueryString = this.getQueryString.bind(this);\n this.setQueryParameters = this.setQueryParameters.bind(this);\n this.getHeaders = this.getHeaders.bind(this);\n this.getHeadersObj = this.getHeadersObj.bind(this);\n this.setHeaders = this.setHeaders.bind(this);\n this.getBody = this.getBody.bind(this);\n this.setBody = this.setBody.bind(this);\n this.getOptions = this.getOptions.bind(this);\n this.setOptions = this.setOptions.bind(this);\n this.getCallback = this.getCallback.bind(this);\n this.setCallback = this.setCallback.bind(this);\n this.getCatchCallback = this.getCatchCallback.bind(this);\n this.setCatchCallback = this.setCatchCallback.bind(this);\n this.getEveryPromiseCallback = this.getEveryPromiseCallback.bind(this);\n this.setEveryPromiseCallback = this.setEveryPromiseCallback.bind(this);\n this.getIsResponseAsObject = this.getIsResponseAsObject.bind(this);\n this.setIsResponseAsObject = this.setIsResponseAsObject.bind(this);\n this.getProps = this.getProps.bind(this);\n this.setProps = this.setProps.bind(this);\n\n this.request = this.request.bind(this);\n this.repeatRequest = this.repeatRequest.bind(this);\n this.setProps(input || {});\n }\n\n request(props) {\n if (!props || (typeof props !== \"object\" && typeof props !== \"string\"))\n throw new Error(\"Not valid props value!\");\n\n const stringifyBody = (b) =>\n b?.constructor === FormData ? b : JSON.stringify(b);\n\n this.requestInput = props;\n // eslint-disable-next-line no-use-before-define\n const requests = getRequestsArray.call(this, props);\n if (!requests.length)\n return Promise.reject(new Error(\"There are no any valid props\"));\n\n const abortController = new AbortController();\n let externalRequest = Promise.all(\n requests.map(async (item) => {\n const safelyQuery = item.path.includes(\"?\")\n ? `&${item.queryParameters.replace(/\\?/g, \"\")}`\n : item.queryParameters;\n let request = fetch(`${item.pathPrefix}${item.path}${safelyQuery}`, {\n ...item.options,\n method: item.method,\n headers: item.headers,\n ...(item.body ? { body: stringifyBody(item.body) } : {}),\n signal: abortController.signal,\n })\n .then((response) => {\n response.request = item;\n return response;\n })\n .catch((response) => {\n\n return Promise.resolve({\n ok: false,\n status: 0,\n statusText: response,\n request: item,\n })\n }\n\n );\n\n if (this.#everyPromiseCallback && !item.isSkipEveryPromiseCallback)\n request = request.then((response) =>\n this.#everyPromiseCallback(response),\n );\n\n if (item.callback)\n request = request.then((response) => item.callback(response));\n\n if (this.#isResponseAsObject)\n request = request.then((response) => ({ name: item.name, response }));\n\n return request;\n }),\n );\n\n externalRequest = externalRequest.then((response) =>\n response.length < 2 ? response[0] : response,\n );\n\n if (this.#isResponseAsObject) {\n externalRequest = externalRequest.then((response) => {\n if (Array.isArray(props) && props.length > 1)\n return response.reduce(\n (ac, item) => ({ ...ac, [item.name]: item.response }),\n {},\n );\n else\n return this.#isResponseAsObject === RESPONSE_AS_OBJECT_ALWAYS_VALUE\n ? { [response.name]: response.response }\n : response.response;\n });\n }\n\n externalRequest = externalRequest.then((response) =>\n this.#callback ? this.#callback(response) : response,\n );\n\n externalRequest = externalRequest.catch((error) =>\n this.#catchCallback ? this.#catchCallback(error) : error,\n );\n\n // eslint-disable-next-line no-proto\n externalRequest.__proto__.abort = () => abortController.abort();\n return externalRequest;\n\n function getRequestsArray(input) {\n const requestsArray = (() => {\n if (typeof input === \"string\") return [{ path: input }];\n return Array.isArray(input) ? [...input] : [input];\n })();\n\n return requestsArray.reduce((ac, item, index) => {\n const itemObj =\n typeof item === \"object\" && item !== null && !Array.isArray(item)\n ? item\n : {};\n const {\n name,\n path,\n method,\n queryParameters,\n headers,\n body,\n options,\n callback,\n mergeProps,\n isNoPathPrefix,\n isSkipEveryPromiseCallback,\n } = itemObj;\n\n\n\n const safelyMergeProps =\n mergeProps instanceof Object && !Array.isArray(mergeProps)\n ? mergeProps\n : {};\n const getMergeProps = (key) =>\n safelyMergeProps.all ?? safelyMergeProps[key];\n\n if (!path || typeof path !== \"string\") return ac;\n\n const {\n name: omitName,\n path: omitPath,\n pathPrefix: omitPathPrefix,\n method: omitMethod,\n queryParameters: omitQueryParameters,\n headers: omitHeaders,\n body: omitBody,\n options: omitOptions,\n callback: omitCallback,\n mergeProps: omitMergeProps,\n ...optionsRest\n } = options || {};\n\n return [\n ...ac,\n {\n path,\n pathPrefix:\n getMergeProps(\"pathPrefix\") === \"onlyLocal\" || isNoPathPrefix\n ? \"\"\n : this.#pathPrefix || \"\",\n method: (() => {\n if (getMergeProps(\"method\") === \"onlyLocal\")\n return method || \"GET\";\n return getMergeProps(\"method\") === \"onlyGlobal\"\n ? this.#method || \"GET\"\n : method || this.#method || \"GET\";\n })(),\n queryParameters: (() => {\n if (\n (getMergeProps(\"queryParameters\") ?? getMergeProps(\"query\")) ===\n \"onlyLocal\"\n ) {\n return this.getQueryString(this.getQueryArray(queryParameters));\n }\n return (getMergeProps(\"queryParameters\") ??\n getMergeProps(\"query\")) === \"onlyGlobal\"\n ? this.getQueryString(this.getQueryArray(this.#queryParameters))\n : this.getQueryString([\n ...this.getQueryArray(this.#queryParameters),\n ...this.getQueryArray(queryParameters),\n ]);\n })(),\n headers: (() => {\n if (getMergeProps(\"headers\") === \"onlyLocal\")\n return this.getHeadersObj(headers || {});\n return getMergeProps(\"headers\") === \"onlyGlobal\"\n ? this.getHeadersObj({ ...(this.#headers || {}) })\n : this.getHeadersObj({\n ...(this.#headers || {}),\n ...(headers || {}),\n });\n })(),\n body: (() => {\n if (getMergeProps(\"body\") === \"onlyLocal\") return body || null;\n if (getMergeProps(\"body\") === \"onlyGlobal\")\n return this.#body || null;\n if (\n body &&\n this.#body &&\n typeof body === typeof this.#body &&\n typeof body === \"object\"\n ) {\n return Array.isArray(body)\n ? [...this.#body, ...body]\n : { ...this.#body, ...body };\n } else return body || this.#body || null;\n })(),\n options: (() => {\n if (getMergeProps(\"options\") === \"onlyLocal\")\n return { ...(optionsRest || {}) };\n return getMergeProps(\"options\") === \"onlyGlobal\"\n ? { ...(this.#options || {}) }\n : { ...(this.#options || {}), ...(optionsRest || {}) };\n })(),\n callback,\n isSkipEveryPromiseCallback,\n ...(this.getIsResponseAsObject()\n ? { name: name && typeof name === \"string\" ? name : index }\n : {}),\n },\n ];\n }, []);\n }\n }\n\n repeatRequest() {\n return this.request(this.requestInput);\n }\n\n // ***** getters and setters *****\n getPathPrefix() {\n return this.#pathPrefix;\n }\n\n setPathPrefix(value) {\n if (value && typeof value !== \"string\")\n throw new Error(\"Not valid pathPrefix value!\");\n this.#pathPrefix = value || null;\n }\n\n getMethod() {\n return this.#method;\n }\n\n setMethod(value) {\n const methods = [\n \"GET\",\n \"HEAD\",\n \"POST\",\n \"PUT\",\n \"DELETE\",\n \"CONNECT\",\n \"OPTIONS\",\n \"TRACE\",\n \"PATCH\",\n ];\n if (value && !methods.includes(value))\n throw new Error(\"Not valid method value!\");\n this.#method = value || null;\n }\n\n getQueryParameters() {\n return this.#queryParameters;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getQueryArray(value) {\n if (typeof value === \"string\") return value?.replace(/\\?/g, \"\")?.split(\"&\");\n else if (Array.isArray(value))\n return value.map((item) => item.replace(/\\?/g, \"\"));\n else if (typeof value === \"object\" && value !== null)\n return Object.keys(value)\n .filter((key) => key && value[key])\n .map((key) => `${key}=${value[key]}`);\n else return [];\n }\n\n // eslint-disable-next-line class-methods-use-this\n getQueryString(value) {\n if (!Array.isArray(value))\n throw new Error(\"Not valid query parameters value!\");\n return value.length ? `?${value.join(\"&\")}` : \"\";\n }\n\n setQueryParameters(value) {\n if (value && !Array.isArray(value))\n throw new Error(\"Not valid query parameters value!\");\n this.#queryParameters = value || null;\n }\n\n getHeaders() {\n return this.#headers;\n }\n\n // eslint-disable-next-line class-methods-use-this\n getHeadersObj(value) {\n const headers = new Headers();\n if (!value) return headers;\n\n if (typeof value !== \"object\" || Array.isArray(value))\n throw new Error(\"Not valid headers value!\");\n Object.keys(value).forEach((item) => {\n headers.append(item, value[item]);\n });\n return headers;\n }\n\n setHeaders(value) {\n if (value && (typeof value !== \"object\" || Array.isArray(value)))\n throw new Error(\"Not valid headers value!\");\n this.#headers = value || null;\n }\n\n getBody() {\n return this.#body;\n }\n\n setBody(value) {\n this.#body = value;\n }\n\n getOptions() {\n return this.#options;\n }\n\n setOptions(value) {\n if (value && (typeof value !== \"object\" || Array.isArray(value)))\n throw new Error(\"Not valid options value!\");\n this.#options = { ...value };\n }\n\n getCallback() {\n return this.#callback;\n }\n\n setCallback(value) {\n if (value && typeof value !== \"function\")\n throw new Error(\"Not valid callback value!\");\n this.#callback = value || null;\n }\n\n getCatchCallback() {\n return this.#catchCallback;\n }\n\n setCatchCallback(value) {\n if (value && typeof value !== \"function\")\n throw new Error(\"Not valid callback value!\");\n this.#catchCallback = value || null;\n }\n\n getEveryPromiseCallback() {\n return this.#everyPromiseCallback;\n }\n\n setEveryPromiseCallback(value) {\n if (value && typeof value !== \"function\")\n throw new Error(\"Not valid callback value!\");\n this.#everyPromiseCallback = value || null;\n }\n\n getIsResponseAsObject() {\n return this.#isResponseAsObject;\n }\n\n setIsResponseAsObject(value) {\n this.#isResponseAsObject =\n typeof value !== \"boolean\" && value !== \"always\" ? Boolean(value) : value;\n }\n\n getProps() {\n return {\n pathPrefix: this.getPathPrefix() || null,\n method: this.getMethod() || null,\n queryParameters: this.getQueryParameters() || null,\n headers: this.getHeaders() || null,\n body: this.getBody() || null,\n options: this.getOptions() || null,\n callback: this.getCallback() || null,\n everyPromiseCallback: this.getEveryPromiseCallback(),\n // isAnywayRunCallback: this.getIsAnywayRunCallback(),\n isResponseAsObject: this.getIsResponseAsObject(),\n };\n }\n\n setProps(input) {\n const {\n pathPrefix,\n method,\n queryParameters,\n headers,\n body,\n options,\n callback,\n catchCallback,\n everyPromiseCallback,\n // isAnywayRunCallback,\n isResponseAsObject,\n } = input;\n if (pathPrefix) this.setPathPrefix(pathPrefix);\n if (method) this.setMethod(method);\n if (queryParameters)\n this.setQueryParameters(this.getQueryArray(queryParameters));\n if (headers) this.setHeaders(headers);\n if (body) this.setBody(body);\n if (options) this.setOptions(options);\n if (callback) this.setCallback(callback);\n if (catchCallback) this.setCatchCallback(catchCallback);\n if (everyPromiseCallback)\n this.setEveryPromiseCallback(everyPromiseCallback);\n // if (isAnywayRunCallback) this.setIsAnywayRunCallback(isAnywayRunCallback);\n if (isResponseAsObject !== undefined)\n this.setIsResponseAsObject(isResponseAsObject);\n }\n}\n\nexport default AbortableFetch;\n", "const DEFAULT_ANIMATION_DURATION = 200;\n\nclass AnimatedHandler {\n constructor(params) {\n const {\n type = \"\",\n animationTarget,\n animation,\n settings,\n hendler,\n } = params || {};\n if (!animationTarget || !hendler) throw new Error(\"Bad input!\");\n const {\n keyframes,\n delay,\n direction,\n duration,\n easing,\n endDelay,\n fill,\n iterationStart,\n iterations,\n } = animation || {};\n\n // eslint-disable-next-line no-constructor-return\n return function (...args) {\n const keyframesToUse = Array.isArray(keyframes)\n ? keyframes\n : [\n { height: `${animationTarget.clientHeight}px`, opacity: 1 },\n { height: \"0\", opacity: 0 },\n ];\n const durationToUse = duration || DEFAULT_ANIMATION_DURATION;\n\n animationTarget.animate(keyframesToUse, animation);\n\n return new Promise((res) => {\n setTimeout(\n () => res(hendler ? hendler(...args) : undefined),\n durationToUse,\n );\n });\n };\n }\n}\n\nexport default AnimatedHandler;\n", "import type { HttpMethod, UnknownRecord } from './types';\nimport { getIsOnlyAnObject } from './_utils';\n\n// ? \u041A\u043E\u043B\u0431\u044D\u043A \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043E\u0442\u0432\u0435\u0442\u0430 \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u0443\u0440\u043E\u0432\u043D\u044F\u0445 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432.\n// ? this \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D \u043A\u0430\u043A AbortableFetch: everyPromiseCallback/catchCallback \u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043A\u0430\u043A\n// ? this.#callback(res) \u0438 \u043E\u043F\u0438\u0440\u0430\u044E\u0442\u0441\u044F \u043D\u0430 this === \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch.\ntype ResponseCallback = (this: AbortableFetch, response: unknown) => unknown;\n\n// ? \u041A\u043E\u043B\u0431\u044D\u043A \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430: \u0432\u044B\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A item.callback(res) (\u0431\u0435\u0437 \u0437\u043D\u0430\u0447\u0438\u043C\u043E\u0433\u043E this).\ntype ItemCallback = (response: unknown) => unknown;\n\n// ? \u041F\u0440\u043E\u043C\u0438\u0441 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430 request() \u0441 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u043C \u043C\u0435\u0442\u043E\u0434\u043E\u043C \u043E\u0442\u043C\u0435\u043D\u044B \u0432\u0441\u0435\u0439 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432.\nexport type AbortablePromise<T> = Promise<T> & { abort: () => void };\n\n// ? \u041F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0439 (\u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439) \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u043E\u0434\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0434\u043B\u044F \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0435\u0433\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F.\ninterface PreparedRequest {\n path: string;\n pathPrefix: string;\n method: HttpMethod;\n queryParameters: string;\n headers: Headers;\n body: unknown;\n options: UnknownRecord;\n callback?: ItemCallback;\n isSkipEveryPromiseCallback?: boolean;\n name?: string | number;\n}\n\nconst HTTP_METHODS: readonly string[] = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'];\n\n// ? Type-guard: \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043B\u0438 \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u0430\u043B\u0438\u0434\u043D\u044B\u043C HTTP-\u043C\u0435\u0442\u043E\u0434\u043E\u043C.\nfunction isHttpMethod(value: string): value is HttpMethod {\n return HTTP_METHODS.includes(value);\n}\n\nconst RESPONSE_AS_OBJECT_ALWAYS_VALUE = 'always';\nclass AbortableFetch {\n #pathPrefix: string | null = null;\n\n #method: HttpMethod | null = null;\n\n #queryParameters: string[] | null = null;\n\n #headers: UnknownRecord | null = null;\n\n #body: unknown = null;\n\n #options: UnknownRecord | null = null;\n\n #callback: ResponseCallback | null = null;\n\n #catchCallback: ResponseCallback | null = null;\n\n #everyPromiseCallback: ResponseCallback | null = null;\n\n #isResponseAsObject: boolean | 'always' = false;\n\n // ? \u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u0432\u0445\u043E\u0434 request() \u2014 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F repeatRequest() \u0434\u043B\u044F \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0442\u043E\u0439 \u0436\u0435 \u043F\u0430\u0447\u043A\u0438.\n requestInput: string | UnknownRecord | Array<string | UnknownRecord> = [];\n\n constructor(input?: UnknownRecord) {\n if (input && !getIsOnlyAnObject(input)) throw new Error('Not valid input value!');\n this.getPathPrefix = this.getPathPrefix.bind(this);\n this.setPathPrefix = this.setPathPrefix.bind(this);\n this.getMethod = this.getMethod.bind(this);\n this.setMethod = this.setMethod.bind(this);\n this.getQueryParameters = this.getQueryParameters.bind(this);\n this.getQueryString = this.getQueryString.bind(this);\n this.setQueryParameters = this.setQueryParameters.bind(this);\n this.getHeaders = this.getHeaders.bind(this);\n this.getHeadersObj = this.getHeadersObj.bind(this);\n this.setHeaders = this.setHeaders.bind(this);\n this.getBody = this.getBody.bind(this);\n this.setBody = this.setBody.bind(this);\n this.getOptions = this.getOptions.bind(this);\n this.setOptions = this.setOptions.bind(this);\n this.getCallback = this.getCallback.bind(this);\n this.setCallback = this.setCallback.bind(this);\n this.getCatchCallback = this.getCatchCallback.bind(this);\n this.setCatchCallback = this.setCatchCallback.bind(this);\n this.getEveryPromiseCallback = this.getEveryPromiseCallback.bind(this);\n this.setEveryPromiseCallback = this.setEveryPromiseCallback.bind(this);\n this.getIsResponseAsObject = this.getIsResponseAsObject.bind(this);\n this.setIsResponseAsObject = this.setIsResponseAsObject.bind(this);\n this.getProps = this.getProps.bind(this);\n this.setProps = this.setProps.bind(this);\n\n this.request = this.request.bind(this);\n this.repeatRequest = this.repeatRequest.bind(this);\n this.setProps(input || {});\n }\n\n /**\n * \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u043E\u0434\u0438\u043D \u0438\u043B\u0438 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E HTTP-\u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 (\u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0439 fetch) \u0441 \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C\u044E \u043E\u0442\u043C\u0435\u043D\u044B.\n *\n * \u041C\u0435\u0442\u043E\u0434 `abort()` \u043D\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C\u043E\u0433\u043E \u043F\u0440\u043E\u043C\u0438\u0441\u0430 (\u043A\u0430\u043A \u0432 \u0438\u0441\u0445\u043E\u0434\u043D\u043E\u0439 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438),\n * \u0447\u0442\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C \u0432\u0441\u044E \u0446\u0435\u043F\u043E\u0447\u043A\u0443 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0432\u044B\u0437\u043E\u0432\u043E\u043C `abort()` \u043D\u0430 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0451\u043D\u043D\u043E\u043C \u043F\u0440\u043E\u043C\u0438\u0441\u0435.\n *\n * @param props - \u043F\u0443\u0442\u044C, \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0438\u043B\u0438 \u0438\u0445 \u043C\u0430\u0441\u0441\u0438\u0432.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C (\u0444\u043E\u0440\u043C\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 isResponseAsObject); \u043D\u0430 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D `abort()`.\n */\n async request(props: string | UnknownRecord | Array<string | UnknownRecord>): Promise<unknown> {\n if (!getIsOnlyAnObject(props) && !Array.isArray(props) && typeof props !== 'string') throw new Error('Not valid props value!');\n\n const stringifyBody = (b: unknown): FormData | string => (b instanceof FormData ? b : JSON.stringify(b));\n\n this.requestInput = props;\n const requests = getRequestsArray.call(this, props);\n\n const ABORTABLE_FETCH_CONTEXT = this;\n const abortController = new AbortController();\n\n // ? \u0414\u043E\u043A\u0438\u0434\u044B\u0432\u0430\u0435\u0442 \u043D\u0430 \u043E\u0442\u0432\u0435\u0442 (Response \u0438\u043B\u0438 \u043F\u0441\u0435\u0432\u0434\u043E-\u043E\u0442\u0432\u0435\u0442) \u0441\u043B\u0443\u0436\u0435\u0431\u043D\u044B\u0435 \u043F\u043E\u043B\u044F request/name.\n // ? \u041C\u0443\u0442\u0438\u0440\u0443\u0435\u043C \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 (\u0432\u0430\u0436\u043D\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C Response \u0434\u043B\u044F downstream-\u043F\u0440\u043E\u0432\u0435\u0440\u043E\u043A), \u0431\u0435\u0437 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u043E\u0432.\n const addProps = (response: object, request: PreparedRequest): object => {\n return Object.assign(response, {\n request,\n ...(ABORTABLE_FETCH_CONTEXT.#isResponseAsObject ? { name: getIsOnlyAnObject(request) ? request.name || '' : '' } : {}),\n });\n };\n\n const externalRequest = Promise.all(\n requests.map((item) => {\n // \u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C (\u043A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u0438\u0437 \u043C\u0430\u0441\u0441\u0438\u0432\u0430)\n\n const safelyQuery = item.path.includes('?') ? `&${item.queryParameters.replace(/\\?/g, '')}` : item.queryParameters;\n const internalRequest = fetch(`${item.pathPrefix}${item.path}${safelyQuery}`, {\n ...item.options,\n method: item.method,\n headers: item.headers,\n ...(item.body ? { body: stringifyBody(item.body) } : {}),\n signal: abortController.signal,\n })\n // ? \u0414\u043E\u043A\u0438\u0434\u044B\u0432\u0430\u0435\u043C \u0438\u043D\u0444\u044B\n .then(async response => addProps(response, item))\n // ! \u0412\u0410\u0416\u041D\u041E !\n // ! \u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u043C \u0447\u0442\u043E \u043A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u0417\u0410\u0420\u0415\u0417\u041E\u041B\u0412\u0418\u0422\u0421\u042F\n .catch(async (response: unknown) => {\n // ? \u0415\u0441\u043B\u0438 fetch \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u043F\u043E \u043D\u043E\u0432\u043E\u043C\u0443 \u0438 \u043E\u0442\u043F\u0440\u0430\u0432\u0438\u043B \u043E\u0442\u0432\u0435\u0442\u044B \u0441 \"\u043D\u0435 200-\u043C\u0438 \u043A\u043E\u0434\u0430\u043C\u0438\" \u0432 catch,\n // ? \u0442\u043E \u043E\u0436\u0438\u0434\u0430\u0435\u043C \u0447\u0442\u043E response \u0431\u0443\u0434\u0435\u0442 \u041D\u0415 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C Error, \u0430 \u0432\u0441\u0435-\u0442\u0430\u043A\u0438 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C Response.\n // ? \u041F\u043E\u044D\u0442\u043E\u043C\u0443 \u0432 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0438\u043C \u0435\u0433\u043E \u043A\u0430\u043A \u0432 \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0435\u043C then\n if (response instanceof Response) return Promise.resolve(addProps(response, item));\n\n // ? \u0412\u043E \u0432\u0441\u0435\u0445 \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0445 \u0441\u043B\u0443\u0447\u0430\u044F\u0445 \u0442\u0440\u0430\u043A\u0442\u0443\u0435\u043C \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044E \u043A\u0430\u043A \"\u0437\u0430\u043F\u0440\u043E\u0441 \u041D\u0415 \u0443\u0448\u0435\u043B\":\n // ? \u043F\u0440\u043E\u043C\u0438\u0441 \u0432\u0441\u0435-\u0440\u0430\u0432\u043D\u043E \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u043C, \u0433\u043E\u0442\u0434\u0430\u0435\u043C \"\u043F\u0441\u0435\u0432\u0434\u043E-\u043E\u0442\u0432\u0435\u0442\"\n return Promise.resolve(\n addProps(\n {\n ok: false,\n status: 0,\n statusText: response,\n request: item,\n },\n item,\n ),\n );\n })\n // ? \u041D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u0441\u0440\u0430\u0431\u043E\u0442\u0430\u043A\u0435\u0442 \u043E\u0436\u0438\u0434\u0430\u0435\u043C \u0437\u0430\u0440\u0435\u0437\u043E\u043B\u0432\u043B\u0435\u043D\u043D\u044B\u0439 \u043F\u0440\u043E\u043C\u0438\u0441, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0435\u043C then-chain\n\n // ? \u041E\u0442\u0440\u0430\u0431\u0430\u0438\u044B\u0432\u0430\u0435\u043C everyPromiseCallback\n // ? (\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043A\u043E\u043B\u0431\u0435\u043A \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430, \u043E\u043F\u0438\u0441\u0430\u043D\u044B\u0439 \u043D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430 AbortableFetch)\n .then(async (res) => {\n return typeof ABORTABLE_FETCH_CONTEXT.#everyPromiseCallback === 'function' && !item.isSkipEveryPromiseCallback\n ? await ABORTABLE_FETCH_CONTEXT.#everyPromiseCallback(res)\n : res;\n })\n // ? \u041E\u0442\u0440\u0430\u0431\u0430\u0438\u044B\u0432\u0430\u0435\u043C \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0439callback\n .then(async (res) => {\n return await (typeof item.callback === 'function' ? item.callback(res) : res);\n })\n // ? \u041F\u043E\u0434\u0433\u043E\u0442\u0430\u0432\u043B\u0438\u0432\u0430\u0435\u043C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u0434\u043B\u044F \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F\n .then(async (res) => {\n return { request: item, response: res, ...(item.name ? { name: item.name } : {}) };\n });\n\n // ? \u041A\u0430\u0436\u0434\u043E\u043C\u0443 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0435\u043C\u0443 \u043F\u0440\u043E\u043C\u0438\u0441\u0443 \u0432 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u044B \u043B\u0435\u043F\u0438\u043C \u043C\u0435\u0442\u043E\u0434 \u043E\u0442\u043C\u0435\u043D\u044B \u0432\u0441\u0435\u0439 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432\n const internalProto: { abort?: () => void } = Object.getPrototypeOf(internalRequest);\n internalProto.abort = () => abortController.abort();\n return internalRequest;\n }),\n )\n // \u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C (Promise.all)\n // ? \u041F\u0440\u043E\u0446\u0435\u0441\u0441\u0438\u043C \u0432\u043E\u0437\u0432\u0440\u0430\u0442 \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0443\u0440\u043E\u0432\u043D\u044F (\u043A\u0430\u043A \u043E\u0431\u044A\u0435\u043A\u0442)\n .then(async (resArr) => {\n // ? \u0415\u0441\u043B\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u043D\u0435\u0442, \u0442\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C \u043F\u0443\u0441\u0442\u043E\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 \u0438\u043B\u0438 \u043C\u0430\u0441\u0441\u0438\u0432, true \u0438\u043B\u0438 \"always\" - \u0440\u0430\u0432\u043D\u043E\u0437\u043D\u0430\u0447\u043D\u043E\n if (resArr.length < 1) {\n return ABORTABLE_FETCH_CONTEXT.#isResponseAsObject ? {} : [];\n }\n\n // ? \u0415\u0441\u043B\u0438 #isResponseAsObject === \"always\", \u0442\u043E \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0432\u0430 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0432\u044B\u0434\u0430\u0435\u043C \u043E\u0431\u044A\u0435\u043A\u0442\n if (ABORTABLE_FETCH_CONTEXT.#isResponseAsObject === RESPONSE_AS_OBJECT_ALWAYS_VALUE) {\n return resArr.reduce<UnknownRecord>((ac, item) => ({ ...ac, [String(item.name)]: item.response }), {});\n }\n\n // ? \u0415\u0441\u043B\u0438 \u0437\u0430\u043F\u0440\u043E\u0441 \u043E\u0434\u0438\u043D, \u0442\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C \u0435\u0433\u043E \u043A\u0430\u043A \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442\n if (resArr.length === 1) return resArr[0].response;\n\n // ? \u0415\u0441\u043B\u0438 \u0434\u043E\u0449\u043B\u0438 \u0434\u043E \u0441\u044E\u0434\u0430, \u0442\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0431\u043E\u043B\u044C\u0448\u0435 \u0447\u0435\u043C 1 \u0438 \u043D\u0443\u0436\u043D\u043E \u043F\u043E\u043D\u044F\u0442\u044C \u043A\u0430\u043A \u0438\u0445 \u0441\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u0430\u0442\u044C\n // ? - \u043A\u0430\u043A \u043E\u0431\u044A\u0435\u043A\u0435\u0442 (#isResponseAsObject === true \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0435\u0441\u043B\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432 \u0431\u043E\u043B\u044C\u0448\u0435 \u0447\u0435\u043C 1)\n // ? - \u043A\u0430\u043A \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u043E\u0442 Promise.all (\u0442.\u0435. \u043C\u0430\u0441\u0441\u0438\u0432 \u043E\u0442\u0432\u0435\u0442\u043E\u0432)\n return ABORTABLE_FETCH_CONTEXT.#isResponseAsObject === true\n ? resArr.reduce<UnknownRecord>((ac, item) => ({ ...ac, [String(item.name)]: item.response }), {})\n : resArr.map(item => item.response);\n })\n // ? \u041F\u043E\u0441\u043B\u0435 \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0430 \u043E\u0442\u0432\u0435\u0442\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C/\u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0439 callback\n .then(async (res) => {\n return typeof ABORTABLE_FETCH_CONTEXT.#callback === 'function' ? await ABORTABLE_FETCH_CONTEXT.#callback(res) : res;\n })\n // ? \u041D\u0430 \u0441\u043B\u0443\u0447\u0430\u0439 \u0440\u0435\u0436\u0435\u043A\u0442\u0430 Promise.all \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C/\u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u043C \u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u044B\u0439 catchCallback\n .catch(async (res: unknown) => {\n return typeof ABORTABLE_FETCH_CONTEXT.#catchCallback === 'function' ? await ABORTABLE_FETCH_CONTEXT.#catchCallback(res) : res;\n });\n\n // ? \u0412 \u043F\u0440\u043E\u0442\u043E\u0442\u0438\u043F\u044B Promise.all \u043B\u0435\u043F\u0438\u043C \u043C\u0435\u0442\u043E\u0434 \u043E\u0442\u043C\u0435\u043D\u044B \u0432\u0441\u0435\u0439 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432\n const externalProto: { abort?: () => void } = Object.getPrototypeOf(externalRequest);\n externalProto.abort = () => abortController.abort();\n\n return externalRequest;\n\n function getRequestsArray(this: AbortableFetch, input: string | UnknownRecord | Array<string | UnknownRecord>): PreparedRequest[] {\n // ? \u041F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043A \u043E\u0434\u043D\u043E\u043C\u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0443 - \u043C\u0430\u0441\u0441\u0438\u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432\n const requestsArray: Array<string | UnknownRecord> = (() => {\n if (typeof input === 'string') return [{ path: input }];\n return Array.isArray(input) ? [...input] : [input];\n })();\n\n return requestsArray.reduce<PreparedRequest[]>((ac, item, index) => {\n const itemObj: UnknownRecord = getIsOnlyAnObject(item) ? item : {};\n const { name, path, method, queryParameters, headers, body, options, callback, mergeProps, isNoPathPrefix, isSkipEveryPromiseCallback }\n = itemObj;\n\n const safelyMergeProps: UnknownRecord = getIsOnlyAnObject(mergeProps) ? mergeProps : {};\n const getMergeProps = (key: string): unknown => safelyMergeProps.all ?? safelyMergeProps[key];\n\n if (!path || typeof path !== 'string') return ac;\n\n const {\n name: omitName,\n path: omitPath,\n pathPrefix: omitPathPrefix,\n method: omitMethod,\n queryParameters: omitQueryParameters,\n headers: omitHeaders,\n body: omitBody,\n options: omitOptions,\n callback: omitCallback,\n mergeProps: omitMergeProps,\n ...optionsRest\n } = getIsOnlyAnObject(options) ? options : {};\n\n // ? \u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0439 \u043C\u0435\u0442\u043E\u0434 \u0437\u0430\u043F\u0440\u043E\u0441\u0430, \u043F\u0440\u0438\u0432\u0435\u0434\u0451\u043D\u043D\u044B\u0439 \u043A HttpMethod (\u0438\u043B\u0438 null, \u0435\u0441\u043B\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043D\u0435 \u0432\u0430\u043B\u0438\u0434\u043D\u043E).\n const localMethod: HttpMethod | null = typeof method === 'string' && isHttpMethod(method) ? method : null;\n // ? \u041B\u043E\u043A\u0430\u043B\u044C\u043D\u044B\u0439 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback, \u043E\u0431\u0451\u0440\u043D\u0443\u0442\u044B\u0439 \u0432 \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u0443\u044E \u0444\u0443\u043D\u043A\u0446\u0438\u044E (\u0431\u0435\u0437 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u043E\u0432).\n const localCallback: ItemCallback | undefined = typeof callback === 'function' ? (res: unknown) => callback(res) : undefined;\n\n return [\n ...ac,\n {\n path,\n pathPrefix: getMergeProps('pathPrefix') === 'onlyLocal' || isNoPathPrefix ? '' : this.#pathPrefix || '',\n method: ((): HttpMethod => {\n if (getMergeProps('method') === 'onlyLocal') return localMethod || 'GET';\n return getMergeProps('method') === 'onlyGlobal' ? this.#method || 'GET' : localMethod || this.#method || 'GET';\n })(),\n queryParameters: ((): string => {\n if ((getMergeProps('queryParameters') ?? getMergeProps('query')) === 'onlyLocal') {\n return this.getQueryString(this.getQueryArray(queryParameters));\n }\n return (getMergeProps('queryParameters') ?? getMergeProps('query')) === 'onlyGlobal'\n ? this.getQueryString(this.getQueryArray(this.#queryParameters))\n : this.getQueryString([...this.getQueryArray(this.#queryParameters), ...this.getQueryArray(queryParameters)]);\n })(),\n headers: ((): Headers => {\n if (getMergeProps('headers') === 'onlyLocal') return this.getHeadersObj(getIsOnlyAnObject(headers) ? headers : {});\n return getMergeProps('headers') === 'onlyGlobal'\n ? this.getHeadersObj({ ...(this.#headers || {}) })\n : this.getHeadersObj({\n ...(this.#headers || {}),\n ...(getIsOnlyAnObject(headers) ? headers : {}),\n });\n })(),\n body: ((): unknown => {\n if (getMergeProps('body') === 'onlyLocal') return body || null;\n if (getMergeProps('body') === 'onlyGlobal') return this.#body || null;\n if (body && this.#body && typeof body === typeof this.#body && typeof body === 'object') {\n return Array.isArray(body)\n ? [...(Array.isArray(this.#body) ? this.#body : []), ...body]\n : { ...(getIsOnlyAnObject(this.#body) ? this.#body : {}), ...(getIsOnlyAnObject(body) ? body : {}) };\n }\n else {\n return body || this.#body || null;\n }\n })(),\n options: ((): UnknownRecord => {\n if (getMergeProps('options') === 'onlyLocal') return { ...optionsRest };\n return getMergeProps('options') === 'onlyGlobal' ? { ...(this.#options || {}) } : { ...(this.#options || {}), ...optionsRest };\n })(),\n callback: localCallback,\n isSkipEveryPromiseCallback: Boolean(isSkipEveryPromiseCallback),\n ...(this.getIsResponseAsObject() ? { name: name && typeof name === 'string' ? name : index } : {}),\n },\n ];\n }, []);\n }\n }\n\n /** \u041F\u043E\u0432\u0442\u043E\u0440\u044F\u0435\u0442 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u043D\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 (\u0442\u0443 \u0436\u0435 \u043F\u0430\u0447\u043A\u0443). */\n repeatRequest(): Promise<unknown> {\n return this.request(this.requestInput);\n }\n\n // ***** getters and setters *****\n getPathPrefix(): string | null {\n return this.#pathPrefix;\n }\n\n setPathPrefix(value?: string | null): void {\n if (value && typeof value !== 'string') throw new Error('Not valid pathPrefix value!');\n this.#pathPrefix = value || null;\n }\n\n getMethod(): HttpMethod | null {\n return this.#method;\n }\n\n setMethod(value?: HttpMethod | null): void {\n if (value && !isHttpMethod(value)) throw new Error('Not valid method value!');\n this.#method = value || null;\n }\n\n getQueryParameters(): string[] | null {\n return this.#queryParameters;\n }\n\n getQueryArray(value: unknown): string[] {\n if (typeof value === 'string') {\n return (value[0] === '?' ? value.slice(1) : value).split('&');\n }\n else if (Array.isArray(value)) {\n return value.map(item => `${item}`);\n }\n else if (typeof value === 'object' && value !== null) {\n const record: UnknownRecord = getIsOnlyAnObject(value) ? value : {};\n return Object.keys(record)\n .filter(key => Boolean(key) && Boolean(record[key]))\n .map(key => `${key}=${record[key]}`);\n }\n else {\n return [];\n }\n }\n\n getQueryString(value: string[] | null): string {\n if (!value) return '';\n if (!Array.isArray(value)) throw new Error('Not valid query parameters value!');\n return value.length ? `?${value.join('&')}` : '';\n }\n\n setQueryParameters(value?: string[] | null): void {\n if (value && !Array.isArray(value)) throw new Error('Not valid query parameters value!');\n this.#queryParameters = value || null;\n }\n\n getHeaders(): UnknownRecord | null {\n return this.#headers;\n }\n\n getHeadersObj(obj: UnknownRecord): Headers {\n const headers = new Headers();\n if (!obj) return headers;\n\n if (typeof obj !== 'object' || Array.isArray(obj)) throw new Error('Not valid headers value!');\n Object.keys(obj).forEach((key) => {\n headers.append(key, `${obj[key]}`);\n });\n return headers;\n }\n\n setHeaders(value?: UnknownRecord | null): void {\n if (value && (typeof value !== 'object' || Array.isArray(value))) throw new Error('Not valid headers value!');\n this.#headers = value || null;\n }\n\n getBody(): unknown {\n return this.#body;\n }\n\n setBody(value: unknown): void {\n this.#body = value;\n }\n\n getOptions(): UnknownRecord | null {\n return this.#options;\n }\n\n setOptions(value?: UnknownRecord | null): void {\n if (value && (typeof value !== 'object' || Array.isArray(value))) throw new Error('Not valid options value!');\n this.#options = { ...value };\n }\n\n getCallback(): ResponseCallback | null {\n return this.#callback;\n }\n\n setCallback(value?: ResponseCallback | null): void {\n if (value && typeof value !== 'function') throw new Error('Not valid callback value!');\n this.#callback = value || null;\n }\n\n getCatchCallback(): ResponseCallback | null {\n return this.#catchCallback;\n }\n\n setCatchCallback(value?: ResponseCallback | null): void {\n if (value && typeof value !== 'function') throw new Error('Not valid callback value!');\n this.#catchCallback = value || null;\n }\n\n getEveryPromiseCallback(): ResponseCallback | null {\n return this.#everyPromiseCallback;\n }\n\n setEveryPromiseCallback(value?: ResponseCallback | null): void {\n if (value && typeof value !== 'function') throw new Error('Not valid callback value!');\n this.#everyPromiseCallback = value || null;\n }\n\n getIsResponseAsObject(): boolean | 'always' {\n return this.#isResponseAsObject;\n }\n\n setIsResponseAsObject(value: unknown): void {\n this.#isResponseAsObject = typeof value !== 'boolean' && value !== 'always' ? Boolean(value) : value;\n }\n\n getProps(): UnknownRecord {\n return {\n pathPrefix: this.getPathPrefix() || null,\n method: this.getMethod() || null,\n queryParameters: this.getQueryParameters() || null,\n headers: this.getHeaders() || null,\n body: this.getBody() || null,\n options: this.getOptions() || null,\n callback: this.getCallback() || null,\n everyPromiseCallback: this.getEveryPromiseCallback(),\n // isAnywayRunCallback: this.getIsAnywayRunCallback(),\n isResponseAsObject: this.getIsResponseAsObject(),\n };\n }\n\n setProps(input: UnknownRecord): void {\n const {\n pathPrefix,\n method,\n queryParameters,\n headers,\n body,\n options,\n callback,\n catchCallback,\n everyPromiseCallback,\n // isAnywayRunCallback,\n isResponseAsObject,\n } = input;\n if (pathPrefix) this.setPathPrefix(typeof pathPrefix === 'string' ? pathPrefix : null);\n if (method) this.setMethod(typeof method === 'string' && isHttpMethod(method) ? method : null);\n if (queryParameters) this.setQueryParameters(this.getQueryArray(queryParameters));\n if (headers) this.setHeaders(getIsOnlyAnObject(headers) ? headers : null);\n if (body) this.setBody(body);\n if (options) this.setOptions(getIsOnlyAnObject(options) ? options : null);\n // ? \u041A\u043E\u043B\u0431\u044D\u043A\u0438 \u043E\u0431\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043C \u0441 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435\u043C this (\u0447\u0435\u0440\u0435\u0437 .call): everyPromiseCallback/catchCallback\n // ? \u043E\u043F\u0438\u0440\u0430\u044E\u0442\u0441\u044F \u043D\u0430 this === \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch. \u041F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0442\u0438\u043F\u043E\u0432 \u043D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F.\n if (callback && typeof callback === 'function') {\n const fn = callback;\n this.setCallback(function wrappedCallback(this: AbortableFetch, response: unknown) {\n return fn.call(this, response);\n });\n }\n if (catchCallback && typeof catchCallback === 'function') {\n const fn = catchCallback;\n this.setCatchCallback(function wrappedCatchCallback(this: AbortableFetch, response: unknown) {\n return fn.call(this, response);\n });\n }\n if (everyPromiseCallback && typeof everyPromiseCallback === 'function') {\n const fn = everyPromiseCallback;\n this.setEveryPromiseCallback(function wrappedEveryPromiseCallback(this: AbortableFetch, response: unknown) {\n return fn.call(this, response);\n });\n }\n // if (isAnywayRunCallback) this.setIsAnywayRunCallback(isAnywayRunCallback);\n if (isResponseAsObject !== undefined) this.setIsResponseAsObject(isResponseAsObject);\n }\n}\n\nexport default AbortableFetch;\n", "import type { CredentialsState, FetchSystemContext, UnknownRecord } from './types';\nimport AbortableFetch from './AbortableFetch';\n\n/**\n * Type-guard: \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u00AB\u0447\u0438\u0441\u0442\u044B\u043C\u00BB \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C-\u0441\u043B\u043E\u0432\u0430\u0440\u0451\u043C.\n * \u041E\u0442\u0441\u0435\u043A\u0430\u0435\u0442 \u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B, \u0444\u0443\u043D\u043A\u0446\u0438\u0438, null, \u043C\u0430\u0441\u0441\u0438\u0432\u044B, Set \u0438 Map.\n *\n * @param input - \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435.\n * @returns `true`, \u0435\u0441\u043B\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u2014 \u043E\u0431\u044B\u0447\u043D\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 (\u0441 \u0441\u0443\u0436\u0435\u043D\u0438\u0435\u043C \u0442\u0438\u043F\u0430 \u0434\u043E {@link UnknownRecord}).\n */\nexport function getIsOnlyAnObject(input: unknown): input is UnknownRecord {\n return (\n typeof input === 'object' // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B \u0438 \u0444\u0443\u043D\u043A\u0446\u0438\u0438\n && input instanceof Object // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" null\n && !Array.isArray(input) // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u0441\u0441\u0438\u0432\u044B\n && !(input instanceof Set) // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u0441\u0435\u0442\u044B\n && !(input instanceof Map) // \"\u043E\u0442\u0431\u0438\u0432\u0430\u0435\u0442\" \u043C\u0430\u043F\u044B\n );\n}\n\n/**\n * \u0420\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E \u043A\u043B\u043E\u043D\u0438\u0440\u0443\u0435\u0442 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u043F\u0440\u0438\u043C\u0438\u0442\u0438\u0432\u044B \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0442\u0441\u044F \u043A\u0430\u043A \u0435\u0441\u0442\u044C, \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u044B \u2014 \u0433\u043B\u0443\u0431\u043E\u043A\u043E).\n *\n * @param input - \u043A\u043B\u043E\u043D\u0438\u0440\u0443\u0435\u043C\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435.\n * @returns \u0413\u043B\u0443\u0431\u043E\u043A\u0430\u044F \u043A\u043E\u043F\u0438\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F.\n */\nexport function clone(input: unknown): unknown {\n if (input === null || typeof input !== 'object') return input;\n if (Array.isArray(input)) return input.map(item => clone(item));\n const source: UnknownRecord = getIsOnlyAnObject(input) ? input : {};\n const data: UnknownRecord = {};\n Object.keys(source).forEach((key) => {\n data[key] = clone(source[key]);\n });\n return data;\n}\n\n/**\n * \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043A\u043E\u043F\u0438\u044E \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u0431\u0435\u0437 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0445 \u043A\u043B\u044E\u0447\u0435\u0439.\n * (\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0438 \u043C\u0430\u0441\u0441\u0438\u0432 \u043A\u043B\u044E\u0447\u0435\u0439 \u043E\u0431\u044C\u0435\u043A\u0442\u0430, \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043E\u0431\u044C\u0435\u043A\u0442 \u0441 \u0442\u0435\u043C\u0438 \u043F\u043E\u043B\u044F\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u043D\u0435\u0442 \u0432 \u043C\u0430\u0441\u0441\u0438\u0432\u0435 \u043A\u043B\u044E\u0447\u0435\u0439)\n *\n * @param obj - \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442.\n * @param keys - \u043A\u043B\u044E\u0447\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0443\u0436\u043D\u043E \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u044C.\n * @returns \u041D\u043E\u0432\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 \u0431\u0435\u0437 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044B\u0445 \u043A\u043B\u044E\u0447\u0435\u0439.\n */\nexport function omitKeys(obj?: UnknownRecord, keys: string[] = []): UnknownRecord {\n const source: UnknownRecord = obj ?? {};\n const keySet = new Set(keys);\n const result: UnknownRecord = {};\n Object.keys(source).forEach((key) => {\n if (!keySet.has(key)) result[key] = source[key];\n });\n return result;\n}\n\n/**\n * \u041A\u043B\u043E\u043D\u0438\u0440\u0443\u0435\u0442 Response \u0447\u0435\u0440\u0435\u0437 \u043D\u0430\u0442\u0438\u0432\u043D\u044B\u0439 `clone()`, \u0430 \u043F\u0440\u043E\u0447\u0438\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u2014 \u0433\u043B\u0443\u0431\u043E\u043A\u0438\u043C {@link clone}.\n *\n * @param res - \u043E\u0431\u044A\u0435\u043A\u0442 Response \u043B\u0438\u0431\u043E \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u043B\u044C\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u043A\u043B\u043E\u043D\u043E\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F.\n */\nexport async function getResponseClone(res: unknown): Promise<unknown> {\n if (res && typeof res === 'object' && 'clone' in res && typeof res.clone === 'function') {\n return res.clone();\n }\n return clone(res);\n}\n\n/**\n * \u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 (`this`) \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043C\u0435\u0442\u043E\u0434\u044B \u0438\u0437 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 `data` (\u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E \u0441 \u043F\u0440\u0435\u0444\u0438\u043A\u0441\u043E\u043C).\n * \u041A\u043E\u043F\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F-\u0444\u0443\u043D\u043A\u0446\u0438\u0438.\n *\n * @param this - \u0446\u0435\u043B\u0435\u0432\u043E\u0439 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 (\u043F\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 `.call`).\n * @param data - \u0441\u043B\u043E\u0432\u0430\u0440\u044C \u043C\u0435\u0442\u043E\u0434\u043E\u0432 \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F.\n * @param prefix - \u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u0435\u0444\u0438\u043A\u0441 \u0438\u043C\u0435\u043D\u0438 \u043C\u0435\u0442\u043E\u0434\u0430.\n */\nexport function addCustomMethods(this: UnknownRecord, data: UnknownRecord, prefix?: string): void {\n const preparedPrefix = (prefix || '').toString();\n\n Object.keys(data).forEach((key) => {\n const preparedKey = `${preparedPrefix}${key}`;\n if (typeof data[key] === 'function' && getIsOnlyAnObject(this)) this[preparedKey] = data[key];\n });\n}\n\n/**\n * \u0413\u043E\u0442\u043E\u0432\u0438\u0442 \u0438 \u043D\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 {@link AbortableFetch} \u0434\u043B\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430 API.\n *\n * \u041F\u043E\u0434\u043C\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0442\u043E\u043A\u0435\u043D\u044B \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u0435\u0441\u043B\u0438 \u0432\u043A\u043B\u044E\u0447\u0451\u043D credentialsProcessing), \u043E\u0431\u0449\u0438\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438/\u043E\u043F\u0446\u0438\u0438\n * \u0438\u0437 `addAsCommon`, \u0430 \u0442\u0430\u043A\u0436\u0435 \u043D\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442 everyPromiseCallback (\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u043A\u043E\u0434\u043E\u0432 \u043E\u0442\u0432\u0435\u0442\u0430) \u0438\n * catchCallback (\u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432).\n *\n * @param this - \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430 API (\u0441\u043C. {@link FetchSystemContext}).\n * @param isGetBody - \u0438\u0437\u0432\u043B\u0435\u043A\u0430\u0442\u044C \u043B\u0438 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0432 everyPromiseCallback.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C {@link AbortableFetch} \u043B\u0438\u0431\u043E `null`, \u0435\u0441\u043B\u0438 \u0440\u0435\u0444\u0440\u0435\u0448 \u0442\u043E\u043A\u0435\u043D\u0430 \u043D\u0435 \u0443\u0434\u0430\u043B\u0441\u044F.\n */\nexport async function getInstanceOfFetchSystem(this: FetchSystemContext, isGetBody?: boolean): Promise<AbortableFetch | null> {\n const API_CONTEXT = this;\n const CREDENTIALS_CONTEXT = API_CONTEXT.credentialsProcessing;\n\n let credentials: CredentialsState = {};\n // ? \u041D\u0430\u043B\u0438\u0447\u0438\u0435 credentialsProcessing \u0432\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0442\u043E\u043A\u0435\u043D\u0430 \u0432 \u043F\u0440\u0438\u043D\u0446\u0438\u043F\u0435 (\u0435\u0441\u043B\u0438 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u043E\u0432\u0430\u043D\u044B \u0432 \u0441\u0438\u0441\u0442\u0435\u043C\u0435)\n if (CREDENTIALS_CONTEXT) {\n // ? \u041C\u0435\u0442\u043E\u0434 getCredentials - \u043A\u043B\u0430\u0441\u0441\u043E\u0432\u044B\u0439 \u043C\u0435\u0442\u043E\u0434, \u043E\u0431\u0435\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 getCredentials, \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u043D\u044B\u043C \u043F\u0440\u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430\n // ? \u0412 \u043A\u043B\u0430\u0441\u0441\u043E\u0432\u043E\u043C getCredentials \u0443\u0436\u0435 \u0438\u043D\u043A\u0430\u043F\u0441\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0430 \u043B\u043E\u0433\u0438\u043A\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F importCredentials\n const cred = await CREDENTIALS_CONTEXT.getCredentials();\n\n credentials = CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing\n ? await CREDENTIALS_CONTEXT.waitRefresh(Boolean(cred.isNeedRefresh) && !CREDENTIALS_CONTEXT.getIsTokenStartRefresh()).then(async () =>\n CREDENTIALS_CONTEXT.processCredentials(await CREDENTIALS_CONTEXT.getCredentials()),\n )\n : cred;\n }\n\n // ? \u041D\u0430 \u0443\u0440\u043E\u0432\u043D\u0435 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F instance \u043C\u043E\u0436\u0435\u0442 \u0443\u0436\u0435 \u0441\u043B\u043E\u0436\u0438\u0442\u044C\u0441\u044F \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044F, \u0447\u0442\u043E \u0441\u0445\u043E\u0434\u0438\u043B\u0438 \u043D\u0430 \u0440\u0435\u0444\u0440\u0435\u0448 \u0438 \u043E\u043D \u043D\u0435\u0443\u0434\u0430\u0447\u043D\u044B\u0439.\n // ? \u041F\u0440\u0435\u0440\u044B\u0432\u0430\u0435\u043C \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435 instance, \u0434\u0430\u0435\u043C \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043E\u0442\u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C callbackAfterRejectRefresh (\u0441\u043C\u043E\u0442\u0440\u0438 class CredentialsProcessing)\n if (credentials.isRefreshFailed) return null;\n\n if (API_CONTEXT.addAsCommon && typeof API_CONTEXT.addAsCommon !== 'function') {\n throw new Error('addAsCommon must be function [getInstanceOfFetchSystem]');\n }\n\n const {\n headers: headersToAbortableFetchInstance,\n queryParameters: queryParamsToAbortableFetchInstance,\n options: optionsToAbortableFetchInstance,\n } = (await API_CONTEXT.addAsCommon?.()) || {};\n\n if (\n (headersToAbortableFetchInstance && !getIsOnlyAnObject(headersToAbortableFetchInstance))\n || (optionsToAbortableFetchInstance && !getIsOnlyAnObject(optionsToAbortableFetchInstance))\n || (queryParamsToAbortableFetchInstance\n && !(\n typeof queryParamsToAbortableFetchInstance === 'string'\n || getIsOnlyAnObject(queryParamsToAbortableFetchInstance)\n || Array.isArray(queryParamsToAbortableFetchInstance)\n ))\n ) {\n throw new Error('Bad output format from addAsCommon [getInstanceOfFetchSystem]');\n }\n\n // ? \u041F\u043E \u0438\u0442\u043E\u0433\u0443 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044F \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 \u043A\u043B\u0430\u0441\u0441\u0430 AbortableFetch (\u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043C\u044B \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043C \u0431\u043E\u043B\u044C\u0448\u0438\u043C \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A)\n return (CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing ? CREDENTIALS_CONTEXT.waitRefresh() : Promise.resolve()).then(\n async () =>\n new AbortableFetch({\n // ? \u041C\u0435\u0442\u043E\u0434 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E\n method: 'GET',\n // ? \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E\n headers: {\n ...headersToAbortableFetchInstance,\n // ? (*) \u0422\u0443\u0442 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043A\u0435\u0439\u0441\u044B\n // ? - \u043A\u043E\u0433\u0434\u0430 \u043D\u0435\u0442 this.credentialsProcessing\n // ? (\u043C\u044B \u041D\u0415 \u0445\u043E\u0442\u0438\u043C \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u0442\u043E\u043A\u0435\u043D\u044B \u0432 \u043F\u0440\u0438\u043D\u0446\u0438\u043F\u0435, \u043D\u0435 \u0437\u0430\u0448\u043B\u0438 \u0432 \u0432\u0435\u0440\u0445\u043D\u044E\u044E if-\u043A\u0443)\n // ? - \u043A\u043E\u0433\u0434\u0430 \u0435\u0441\u0442\u044C this.credentialsProcessing, \u043D\u043E \u043D\u0435\u0442 credentials.token (\u043D\u0435 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u043E\u0432\u0430\u043D\u044B)\n // ? (\u0437\u0430\u0448\u043B\u0438 \u0432 \u0432\u0435\u0440\u0445\u043D\u044E\u044E if-\u043A\u0443, \u043F\u043E\u043F\u0440\u043E\u0431\u043E\u0432\u0430\u043B\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C/\u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u043A\u0440\u0435\u0434\u044B)\n ...(credentials.token ? CREDENTIALS_CONTEXT?.getHeadersForAuthorize?.(credentials.token) || {} : {}),\n },\n queryParameters: await API_CONTEXT.processQueryParams(queryParamsToAbortableFetchInstance),\n // ? \u041E\u043F\u0446\u0438\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E\n options: {\n mode: 'cors',\n redirect: 'follow',\n ...optionsToAbortableFetchInstance,\n },\n\n // ? \u041A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 (\u043A\u0430\u0436\u0434\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441 \u043C\u0443\u043B\u044C\u0442\u0438\u0437\u0430\u043F\u0440\u043E\u0441\u0430), \u0441\u0434\u0435\u043B\u0430\u043D\u044B\u0439 \u043C\u0435\u0442\u043E\u0434\u043E\u043C request \u044D\u0442\u043E\u0433\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442 \u044D\u0442\u043E\u0442 \u043A\u043E\u043B\u0431\u0435\u043A\n everyPromiseCallback: async function everyPromiseCallback(this: AbortableFetch, response: UnknownRecord): Promise<unknown> {\n // ? this - \u044D\u0442\u043E \u041D\u0415 API_CONTEXT \u0438 \u041D\u0415 CREDENTIALS_CONTEXT, a \u0438\u0442\u043E\u0433\u043E\u0432\u044B\u0439 \u044D\u0435\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch\n const ABORTABLE_FETCH_INSTANCE = this;\n\n if (!response.status) {\n const reqInput = ABORTABLE_FETCH_INSTANCE.requestInput;\n const responseRequest: UnknownRecord = getIsOnlyAnObject(response.request) ? response.request : {};\n const request = Array.isArray(reqInput)\n ? reqInput.find(item => getIsOnlyAnObject(item) && item.path === responseRequest.path)\n : undefined;\n const mesageOptions: UnknownRecord | undefined\n = getIsOnlyAnObject(request) && getIsOnlyAnObject(request.mesageOptions) ? request.mesageOptions : undefined;\n const isUseErrorToast = mesageOptions?.isUseErrorToast;\n if (isUseErrorToast) {\n API_CONTEXT.sendMessage?.(API_CONTEXT.NO_INET, mesageOptions, response);\n }\n }\n\n return API_CONTEXT.REJECT_CODES.includes(Number(response.status))\n || (CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing\n && Boolean(CREDENTIALS_CONTEXT?.CODES_USING_THE_REFRESH_ATTEMPT?.includes(Number(response.status))))\n ? Promise.reject(new Error(`status:${Number(response.status)}`))\n : Promise.resolve(!isGetBody ? response : await API_CONTEXT.getResponseBody(response));\n },\n\n // ? \u0415\u0441\u043B\u0438 \u0445\u043E\u0442\u044C \u043E\u0434\u0438\u043D \u0437\u0430\u043F\u0440\u043E\u0441 \u0438\u0437 \u043F\u0430\u0447\u043A\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0440\u0435\u0434\u0436\u0435\u043A\u0447\u0435\u043D, \u0437\u0430\u0440\u0435\u0434\u0436\u0435\u043A\u0442\u0438\u0442\u0441\u044F \u0432\u0441\u044F \u043F\u0430\u0447\u043A\u0430.\n // ? \u0412 \u044D\u0442\u043E\u043C \u0441\u043B\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D \u044D\u0442\u043E\u0442 \u043A\u043E\u043B\u0431\u044D\u043A\n catchCallback: async function catchCallback(this: AbortableFetch, res: unknown): Promise<unknown> {\n // ? this - \u044D\u0442\u043E \u041D\u0415 API_CONTEXT \u0438 \u041D\u0415 CREDENTIALS_CONTEXT, a \u0438\u0442\u043E\u0433\u043E\u0432\u044B\u0439 \u044D\u0435\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch\n const ABORTABLE_FETCH_INSTANCE = this;\n if (!CREDENTIALS_CONTEXT) return Promise.reject(res);\n\n const code = Number(res instanceof Error ? res.message.split(':')[1] : '');\n\n if (CREDENTIALS_CONTEXT.CODES_USING_THE_REFRESH_ATTEMPT?.includes(code)) {\n const isDoRefresh = !CREDENTIALS_CONTEXT.getIsTokenStartRefresh();\n\n return CREDENTIALS_CONTEXT.waitRefresh(isDoRefresh).then(async () => {\n // ? \u041F\u0440\u043E\u0431\u0443\u0435\u043C \u0437\u0430\u0440\u0435\u0444\u0440\u0435\u0448\u0438\u0442\u044C\n const newCredentials = await CREDENTIALS_CONTEXT.processCredentials({\n ...(await CREDENTIALS_CONTEXT.getCredentials(true)),\n isCatchCallbackProcess: isDoRefresh,\n });\n\n const currentHeaders = ABORTABLE_FETCH_INSTANCE.getHeaders();\n ABORTABLE_FETCH_INSTANCE.setHeaders({\n ...(getIsOnlyAnObject(currentHeaders) ? currentHeaders : {}),\n ...(newCredentials.token ? { Authorization: `Bearer ${newCredentials.token}` } : {}),\n });\n\n if (newCredentials.token) return ABORTABLE_FETCH_INSTANCE.repeatRequest();\n return Promise.reject(res);\n });\n }\n\n return Promise.reject(res);\n },\n }),\n );\n}\n", "import type { UnknownRecord } from './types';\nimport { getIsOnlyAnObject } from './_utils';\n\n// ? \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 query-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432.\ninterface NormalizeQueryParamsSettings {\n isEncode?: boolean;\n outputAs?: 'string' | 'object' | 'array';\n}\n\n// ? \u0410\u043A\u043A\u0443\u043C\u0443\u043B\u044F\u0442\u043E\u0440 \u0441\u043A\u043B\u0435\u0439\u043A\u0438 \u00AB\u0432\u0438\u0441\u044F\u0447\u0438\u0445\u00BB query-\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0432 reduce.\ninterface NormalizeAccumulator {\n result: string[];\n toJoin: string | null;\n}\n\n// ? \u0412 \u044D\u0442\u043E\u043C \u043A\u043A\u043B\u0430\u0441\u0441\u0435 \u0441\u043E\u0431\u0440\u0430\u043D\u044B \u043F\u043E\u043B\u0435\u0437\u043D\u044B\u0435 \u0434\u043E\u0431\u0430\u0432\u043E\u0447\u043D\u044B\u0435 \u0443\u0442\u0438\u043B\u0438\u0442\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u044B \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u043A\u043B\u0430\u0441\u0441\u0430\u043C\u0438,\n// ? \u043D\u043E \u043D\u0435 \u0438\u043C\u0435\u044E\u0442 \u043F\u0440\u044F\u043C\u043E\u0433\u043E \u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F \u043A \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u0440\u044F\u043C\u043E\u0439 \u0444-\u0442\u0438 RESTAPI\n// ? \u0422\u0430\u043A \u0436\u0435 \u0443\u0442\u0438\u043B\u0438\u0442\u044B \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u044B \u043A\u0430\u043A \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u0447\u043D\u044B\u0435\nclass Utils {\n // ? \u0418\u043D\u0434\u0435\u043A\u0441-\u0441\u0438\u0433\u043D\u0430\u0442\u0443\u0440\u0430: \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 \u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043C\u0435\u0442\u043E\u0434\u044B (addCustomMethods)\n // ? \u0438 \u0440\u0435\u043A\u0432\u0435\u0441\u0442-\u043A\u0440\u0435\u0439\u0442\u0435\u0440\u044B (createRequest_${type}). \u041E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u043C\u0435\u0442\u043E\u0434\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u044E\u0442 \u0442\u043E\u0447\u043D\u044B\u0435 \u0442\u0438\u043F\u044B.\n [key: string]: unknown;\n\n // ! \u041C\u043E\u0433\u0443\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C\u0441\u044F \u041D\u0415\u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0435 \u043C\u0435\u0442\u043E\u0434\u044B!\n\n /**\n * \u041D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u0430\u0442\u043E\u0440 \u0441\u043B\u043E\u0436\u043D\u044B\u0445 query-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432.\n *\n * \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: `&key1=&&&===&&&key2====&&&&&&&&key3=...`. \u0414\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043D\u0430 \u0432\u0445\u043E\u0434 \u043D\u0443\u0436\u043D\u043E \u043F\u043E\u0434\u0430\u0432\u0430\u0442\u044C\n * \u041D\u0415 \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F. \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0432\u044B\u0445\u043E\u0434\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F query-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u041D\u0415 \u043A\u043E\u0434\u0438\u0440\u0443\u044E\u0442\u0441\u044F.\n *\n * @param queryParams - query \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043E\u043A\u0438, \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043B\u0438 \u043E\u0431\u044A\u0435\u043A\u0442\u0430.\n * @param settings - \u0444\u043E\u0440\u043C\u0430\u0442 \u0432\u044B\u0432\u043E\u0434\u0430 (`array` | `string` | `object`) \u0438 \u0444\u043B\u0430\u0433 \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F.\n * @returns \u041D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0435 query-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0432 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435.\n */\n // ? \u0424-\u044F normalizeQueryParams \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u043E\u043C \u0441\u043B\u043E\u0436\u043D\u044B\u0445 \u043A\u0432\u0435\u0440\u0438\n // ? \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440: &key1=&&&===&&&key2====&&&&&&&&key3=....\n // ? \u0414\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u043D\u0430 \u0432\u0445\u043E\u0434 \u043D\u0443\u0436\u043D\u043E \u043F\u043E\u0434\u0430\u0432\u0430\u0442\u044C \u041D\u0415 \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\n // ? \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0432\u044B\u0445\u043E\u0434\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043A\u0432\u0435\u0440\u0438-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u041D\u0415 \u043A\u043E\u0434\u0438\u0440\u0443\u044E\u0442\u0441\u044F\n normalizeQueryParams(queryParams: unknown, settings?: NormalizeQueryParamsSettings): string | UnknownRecord | string[] {\n if (settings && !getIsOnlyAnObject(settings)) {\n throw new Error('Bad settings [class Utils, normalizeQueryParams]');\n }\n\n const getInitialArr = (input: unknown): string[] => {\n const prepareParam = (key: unknown, value: unknown): string => {\n if (!value) return `${key}=`;\n else if (typeof value === 'string' || typeof value === 'number') return `${key}=${value}`;\n else if (Array.isArray(value)) return `${key}=${value.join('')}`;\n else return `${key}=Bad-data-format`;\n };\n\n if (Array.isArray(input)) {\n return input\n .map((item): string[] => {\n if (typeof item !== 'string') return [];\n const index = item.indexOf('=');\n if (index === -1) return [item];\n return [item.slice(0, index), item.slice(index + 1)];\n })\n .filter(([key]) => Boolean(key))\n .map(([key, value]) => prepareParam(key, value));\n }\n else if (getIsOnlyAnObject(input)) {\n return Object.keys(input).map(key => prepareParam(key, input[key]));\n }\n else if (typeof input === 'string') {\n return (input[0] === '?' ? input.slice(1) : input).split('&');\n }\n else {\n return [];\n }\n };\n\n const { isEncode = false, outputAs = 'array' } = settings || {};\n const initialStructure = getInitialArr(queryParams);\n\n const normalizedStructure = initialStructure.reduce<NormalizeAccumulator>(\n (acc, str, idx) => {\n const lastIndex = acc.result.length - 1;\n const processToJoin = (val: string, recoverableSymbol = '&'): void => {\n const encodedToJoin = `${encodeURIComponent(recoverableSymbol)}${encodeURIComponent(val)}`;\n acc.result[lastIndex] = `${acc.result[lastIndex]}${encodedToJoin}`;\n acc.toJoin = null;\n };\n if (typeof acc.toJoin === 'string') processToJoin(acc.toJoin);\n const index = str.indexOf('=');\n if (index !== -1 && index !== 0) {\n const key = str.slice(0, index);\n acc.result.push(`${key}=${encodeURIComponent(str.slice(index + 1))}`);\n }\n else {\n acc.toJoin = str;\n }\n // ? \u0414\u043E\u0431\u0438\u0432\u043A\u0430 \u0434\u043B\u044F \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438\n if (idx === initialStructure.length - 1 && typeof acc.toJoin === 'string') processToJoin(acc.toJoin);\n return acc;\n },\n { result: [], toJoin: null },\n ).result;\n\n const outputStructure = normalizedStructure.map((item): [string, string] => {\n const [key, value] = item.split('=');\n return [key, !isEncode ? decodeURIComponent(value ?? '') : value ?? ''];\n });\n\n switch (outputAs) {\n case 'string':\n return outputStructure.length ? `?${outputStructure.map(([key, value]) => `${key}=${value}`).join('&')}` : '';\n case 'object':\n return outputStructure.reduce<UnknownRecord>((acc, [key, value]) => ({ ...acc, [key]: value }), {});\n default:\n return outputStructure.map(([key, value]) => `${key}=${value}`);\n }\n }\n}\n\nexport default Utils;\n", "import type { AddAsCommonResult, RESTAPISettings, UnknownRecord } from './types';\nimport { addCustomMethods, getIsOnlyAnObject, getResponseClone } from './_utils';\nimport Utils from './Utils';\n\n/**\n * \u0423\u0442\u0438\u043B\u0438\u0442\u0430\u0440\u043D\u044B\u0439 \u0441\u043B\u043E\u0439 API: \u0440\u0430\u0437\u0431\u043E\u0440 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u043D\u0430 \u0447\u0430\u0441\u0442\u0438 (splitProperties), \u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435 \u0442\u0435\u043B\u0430 \u043E\u0442\u0432\u0435\u0442\u0430,\n * \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043A\u043E\u0434\u0430 \u043E\u0442\u0432\u0435\u0442\u0430 \u0438 \u0442\u043E\u0447\u043A\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F (getRootPath / addAsCommon / processQueryParams).\n * \u041F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u043C\u0435\u0442\u043E\u0434\u043E\u0432-\u0443\u0442\u0438\u043B\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 `utils`.\n */\nclass ApiUtils extends Utils {\n /** \u041A\u043E\u0440\u043D\u0435\u0432\u043E\u0439 \u043F\u0443\u0442\u044C API (\u0440\u0430\u0441\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0432 ApiBase \u0438\u0437 constants.API_PATH). */\n API_PATH!: string;\n\n constructor(settings?: RESTAPISettings) {\n super();\n const { utils } = settings || {};\n if (getIsOnlyAnObject(utils)) addCustomMethods.call(this, utils);\n }\n\n /**\n * \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u0434\u0438\u043D\u044B\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u043D\u0430 \u0447\u0430\u0441\u0442\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0438 \u043E\u0442 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F.\n *\n * @param apiParams - \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0451\u043D\u043D\u044B\u0435 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n * @param variant - `'doRequestMapping'` \u0434\u043B\u044F \u043C\u0443\u043B\u044C\u0442\u0438\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u043B\u0438\u0431\u043E `undefined` \u0434\u043B\u044F \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u043E\u0433\u043E.\n * @returns \u0414\u043B\u044F `doRequestMapping` \u2014 \u043E\u0431\u044A\u0435\u043A\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432; \u0438\u043D\u0430\u0447\u0435 \u043A\u043E\u0440\u0442\u0435\u0436 `[\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B, \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438]`.\n */\n // ? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u0438\u0437\u043C\u0435\u043D\u043D\u043E, \u043E\u0434\u043D\u0430\u043A\u043E \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438 \u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n // ? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n // ? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async splitProperties(apiParams: UnknownRecord, variant?: string): Promise<UnknownRecord | UnknownRecord[]> {\n const {\n isResponseAsObject,\n isGetBody,\n finalCallback,\n\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n\n successMess,\n commonSuccessMessage,\n successMessages,\n successMessageType,\n\n errorMess,\n commonErrorMessage,\n errorMessages,\n\n ...restParams\n } = apiParams || {};\n\n switch (variant) {\n case 'doRequestMapping':\n return {\n ...restParams,\n\n isGetBody,\n\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n\n successMess,\n commonSuccessMessage,\n successMessages,\n successMessageType,\n\n errorMess,\n commonErrorMessage,\n errorMessages,\n };\n default:\n return [\n restParams,\n {\n isGetBody,\n isResponseAsObject,\n ...(finalCallback ? { callback: finalCallback } : {}),\n\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n\n commonSuccessMessage: successMess || commonSuccessMessage,\n successMessages,\n successMessageType,\n\n commonErrorMessage: errorMess || commonErrorMessage,\n errorMessages,\n },\n ];\n }\n }\n\n /**\n * \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043F\u0440\u043E\u043F\u044B `api` \u0438\u0437 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u2014 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043A\u043E\u0440\u043D\u0435\u0432\u043E\u0439 \u043F\u0443\u0442\u044C API.\n *\n * @returns \u041A\u043E\u0440\u043D\u0435\u0432\u043E\u0439 \u043F\u0443\u0442\u044C (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u2014 API_PATH).\n */\n // ! \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043F\u0440\u043E\u043F\u044B api \u0438\u0437 \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430\n // ? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435,\n // ? \u0442.\u043A. \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0440\u0430\u0437\u043D\u044B\u0435 \u0438\u043D\u0442\u0435\u0440\u043F\u0440\u0435\u0442\u0430\u0446\u0438\u0438 \u043F\u0440\u043E\u043F\u044B api\n // ? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n // ? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async getRootPath(/* apiProp */): Promise<string> {\n return this.API_PATH;\n }\n\n /**\n * \u0418\u0437\u0432\u043B\u0435\u043A\u0430\u0435\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0432 \u043D\u0443\u0436\u043D\u043E\u043C \u0432\u0438\u0434\u0435 (json/blob/text/arrayBuffer/formData) \u043B\u0438\u0431\u043E \u043F\u043E content-type.\n *\n * @param response - \u043E\u0431\u044A\u0435\u043A\u0442 Response (\u0438\u043D\u0430\u0447\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0435\u0441\u0442\u044C).\n * @param getBodyAs - \u0436\u0435\u043B\u0430\u0435\u043C\u044B\u0439 \u0441\u043F\u043E\u0441\u043E\u0431 \u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u044F \u0442\u0435\u043B\u0430.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u0442\u0435\u043B\u043E\u043C \u043E\u0442\u0432\u0435\u0442\u0430 (\u0438\u043B\u0438 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C / null \u043F\u0440\u0438 \u043E\u0448\u0438\u0431\u043A\u0435).\n */\n // ? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u0438\u0437\u043C\u0435\u043D\u043D\u043E, \u043E\u0434\u043D\u0430\u043A\u043E \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438 \u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n // ? \u041C\u0435\u0442\u043E\u0434 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439\n async getResponseBody(response: unknown, getBodyAs?: string): Promise<unknown> {\n // ? \u0415\u0441\u043B\u0438 response \u043D\u0435 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 Response, \u0442\u043E \u0432\u0435\u0440\u043D\u0443\u0442\u044C \u043F\u043E \u0444\u0430\u043A\u0442\u0443\n if (!(response instanceof Response)) return response;\n\n // ? \u0412 \u044D\u0442\u043E\u043C \u043C\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 \u043C\u0435\u0442\u043E\u0434\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0431\u044B\u0442\u044C, \u0442.\u043A. response \u0442\u043E\u0447\u043D\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 Response.\n // ? \u0410 \u0432\u043E\u0442 contentType-\u0430 \u043F\u043E\u0445\u043E\u0434\u0443 \u043C\u043E\u0436\u0435\u0442 \u043D\u0435 \u0431\u044B\u0442\u044C. \u041D\u0430\u0432\u0435\u0440\u043D\u043E\u0435...\n const contentType = response.headers.get('content-type');\n if (!contentType) return '';\n\n // ? \u041D\u0430\u0431\u043E\u0440 \u00AB\u0447\u0438\u0442\u0430\u0442\u0435\u043B\u0435\u0439\u00BB \u0442\u0435\u043B\u0430 Response \u2014 \u0442\u0438\u043F\u043E\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u043D\u0430 \u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E response[getBodyAs].\n const bodyReaders = {\n json: (r: Response) => r.json(),\n blob: (r: Response) => r.blob(),\n text: (r: Response) => r.text(),\n arrayBuffer: (r: Response) => r.arrayBuffer(),\n formData: (r: Response) => r.formData(),\n };\n const isBodyKey = (key: string): key is keyof typeof bodyReaders => key in bodyReaders;\n\n // ToDo - \u043E\u0448\u0438\u0431\u043A\u0430 \u0431\u044B\u043B\u0430 \u0432 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0438 executor-\u0430...\n // ToDo - \u0412\u0441\u0435 \u0431\u044B\u043B\u043E \u0447\u0435\u0440\u0435\u0437 if. \u0412 \u0441\u043B\u0443\u0447\u0430\u0435, \u0435\u0441\u043B\u0438 \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u043B\u043E \u043D\u0438 \u0432 \u043E\u0434\u043D\u0443 if-\u043A\u0443, \u0442\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u043B\u0441\u044F undefined \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E,\n // ToDo - \u0430 \u043F\u043E\u0441\u043B\u0435 \u044D\u0442\u043E\u0442 undefined \u043F\u044B\u0442\u0430\u043B\u0441\u044F \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u0447\u0435\u0440\u0435\u0437 call...\n const reader\n = typeof getBodyAs === 'string' && isBodyKey(getBodyAs)\n ? bodyReaders[getBodyAs]\n : contentType.includes('text/csv')\n ? bodyReaders.blob\n : contentType.includes('json')\n ? bodyReaders.json\n : bodyReaders.text;\n\n // \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 \u0441\u043B\u0443\u0447\u0430\u0435\u0432 \u043A\u0440\u0430\u0448\u0430 \u043C\u0435\u0442\u043E\u0434\u0430 json \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0442\u0435\u043B\u0430 \u043E\u0442\u0432\u0435\u0442\u0430\n try {\n return await reader(response);\n }\n catch {\n // ? \u0434\u0443\u043C\u0430\u044E \u0441\u0442\u043E\u0438\u0442 \u0437\u043D\u0430\u0442\u044C \u043C\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u0442\u0435\u043B\u043E, \u0430 \u0431\u044D\u043A \u0435\u0433\u043E \u043D\u0435 \u043F\u043E\u043B\u043E\u0436\u0438\u043B\n // eslint-disable-next-line no-console\n console.log('Failed to extract the body');\n return null;\n }\n }\n\n /**\n * \u0424\u043E\u0440\u043C\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u043E\u0448\u0438\u0431\u043A\u0438 \u0438\u0437 \u0442\u0435\u043B\u0430 \u043E\u0442\u0432\u0435\u0442\u0430 (\u0442\u043E\u0447\u043A\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F \u043F\u043E\u0434 \u0444\u043E\u0440\u043C\u0430\u0442 \u0431\u044D\u043A\u0435\u043D\u0434\u0430).\n *\n * @param res - \u0443\u0436\u0435 \u0438\u0437\u0432\u043B\u0435\u0447\u0451\u043D\u043D\u043E\u0435 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430.\n * @returns \u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0435.\n */\n // ! \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B \u0434\u043B\u044F \u043E\u0448\u0438\u0431\u043A\u0438 (\u043D\u0435 \u0440\u0435\u043D\u0434\u0435\u0440 \u043C\u0435\u0441\u0441\u0435\u0434\u0436\u0430, \u0430 \u0438\u043C\u0435\u0435\u043D\u043E \u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043E\u0448\u0438\u0431\u043A\u0438),\n // ? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435,\n // ? \u0442.\u043A. \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0440\u0430\u0437\u043D\u044B\u0435 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B \u0442\u0435\u043B\u0430 \u043E\u0442\u0432\u0435\u0442\u0430 \u0434\u043B\u044F \u043E\u0448\u0438\u0431\u043A\u0438\n // ? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n // ? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n // ? res - \u0443\u0436\u0435 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430\n async getErrorMessage(res: unknown): Promise<unknown> {\n return res;\n }\n\n /**\n * \u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u043A\u043E\u0434 \u043E\u0442\u0432\u0435\u0442\u0430 \u0438 (\u0435\u0441\u043B\u0438 \u0437\u0430\u0434\u0430\u043D sendMessage) \u0438\u043D\u0444\u043E\u0440\u043C\u0438\u0440\u0443\u0435\u0442 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043E\u0431 \u0443\u0441\u043F\u0435\u0445\u0435/\u043E\u0448\u0438\u0431\u043A\u0435.\n *\n * @param res - \u043E\u0431\u044A\u0435\u043A\u0442 Response (\u0438\u043B\u0438 \u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u044B\u0439 \u0441 \u043F\u043E\u043B\u0435\u043C `ok`).\n * @param settings - \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0442\u043E\u0441\u0442\u043E\u0432 \u0434\u043B\u044F \u0434\u0430\u043D\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n * @returns \u0418\u0441\u0445\u043E\u0434\u043D\u044B\u0439 `res` (\u043C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043C\u0435\u043D\u044F\u0435\u0442 \u043E\u0442\u0432\u0435\u0442, \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0438\u0433\u043D\u0430\u043B\u0438\u0442 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\u043C).\n */\n // ? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u0438\u0437\u043C\u0435\u043D\u043D\u043E, \u043E\u0434\u043D\u0430\u043A\u043E \u0442\u0435\u0445\u043D\u0438\u0447\u0435\u0441\u043A\u0438 \u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n // ? \u041C\u0435\u0442\u043E\u0434 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439\n async checkResponseCode(res: unknown, settings?: UnknownRecord): Promise<unknown> {\n // ! \u041F\u0440\u0438 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0438 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0430, \u0435\u0441\u043B\u0438 sendMessage \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0444-\u0435\u0439,\n // ! \u0442\u043E \u044D\u0442\u043E \u0432\u043E\u0441\u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0448\u0430\u0433\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0435 \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u043A\u0430\u043A \u0442\u0430\u043A\u043E\u0432\u043E\u0433\u043E\n const send = this.sendMessage;\n if (typeof send !== 'function') return res;\n\n const { successMess, errorMess } = settings || {};\n\n const isOk = getIsOnlyAnObject(res) ? Boolean(res.ok) : false;\n\n const message = isOk\n ? successMess || this.DEFAULT_SUCCESS_MESSAGE\n : errorMess || (await this.getErrorMessage(await this.getResponseBody(await getResponseClone(res))));\n\n try {\n send(message, settings, await getResponseClone(res));\n }\n catch {\n /* \u043E\u0448\u0438\u0431\u043A\u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u044B \u0432\u043B\u0438\u044F\u0442\u044C \u043D\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u043E\u0442\u0432\u0435\u0442\u0430 */\n }\n return res;\n }\n\n /**\n * \u0421\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u041A\u0410\u0416\u0414\u041E\u0413\u041E \u0437\u0430\u043F\u0440\u043E\u0441\u0430, \u0441\u0434\u0435\u043B\u0430\u043D\u043D\u043E\u0433\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C RESTAPI.\n *\n * @returns \u041E\u0431\u044A\u0435\u043A\u0442 `{ headers, queryParameters, options }` (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043F\u0443\u0441\u0442\u043E\u0439).\n */\n // ? \u0421\u0443\u0442\u044C \u043C\u0435\u0442\u043E\u0434\u0430:\n // ? \u043F\u0435\u0440\u0435\u0434\u0430\u0442\u044C \u0438\u0437 \u0432\u043D\u0435 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u041A\u0410\u0416\u0414\u041E\u0413\u041E \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0441\u0434\u0435\u043B\u0430\u043D\u043D\u043E\u0433\u043E \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u043E\u043C RESTAPI\n // ! \u0414\u0430\u043D\u043D\u044B\u0435 \u0437\u0430\u0442\u0440\u0443\u0442 \u043F\u0440\u043E\u0447\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u041A\u0420\u041E\u041C\u0415 \u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E \u043B\u043E\u0433\u0438\u043A\u0435 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438\n // ? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435\n // ? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n // ? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async addAsCommon(): Promise<AddAsCommonResult> {\n // ! \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u043C\u0430\u044F \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 { headers, queryParameters, options }, \u0433\u0434\u0435\n // ! - headers \u0438 options - \u043E\u0431\u044A\u0435\u043A\u0442\u044B,\n // ! - queryParameters - \u0441\u0442\u0440\u043E\u043A\u0430, \u043C\u0430\u0441\u0441\u0438\u0432 \u0438\u043B\u0438 \u043E\u0431\u044A\u0435\u043A\u0442\n return {};\n }\n\n /**\n * \u041E\u0431\u0449\u0438\u0439 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A query-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 (\u0442\u043E\u0447\u043A\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F, \u043D\u0430\u043F\u0440. \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435/\u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043A \u043C\u0430\u0441\u0441\u0438\u0432\u0443).\n *\n * @param queryParams - \u0432\u0445\u043E\u0434\u043D\u044B\u0435 query-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B.\n * @returns \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043D\u043D\u044B\u0435 query-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B (\u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u2014 \u0431\u0435\u0437 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439).\n */\n // ! \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043A\u0432\u0435\u0440\u0438-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 \u0434\u043B\u044F \u043E\u0431\u0449\u0435\u0433\u043E \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0438\u043D\u0433\u0430,\n // ! \u041D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 \u0434\u043B\u044F \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F decodeURIComponent \u0438\u043B\u0438/\u0438 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0432 \u0444\u043E\u0440\u043C\u0430\u0442 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\n // ? \u041F\u043B\u0430\u043D\u0438\u0440\u0443\u0435\u0442\u0441\u044F, \u0447\u0442\u043E \u043C\u0435\u0442\u043E\u0434 \u0431\u0443\u0434\u0435\u0442 \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435,\n // ? \u0442.\u043A. \u043D\u0430 \u0440\u0430\u0437\u043D\u044B\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u0445 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0440\u0430\u0437\u043D\u044B\u0435 \u0434\u043E\u0433\u043E\u0432\u043E\u0440\u0435\u043D\u043D\u043E\u0441\u0442\u0438 \u043F\u043E \u0444\u043E\u0440\u043C\u0430\u0442\u0430\u043C\n // ? \u041C\u0435\u0442\u043E\u0434 \u043D\u0435 \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043B\u0441\u044F \u043A\u0430\u043A \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439,\n // ? \u043E\u0434\u043D\u0430\u043A\u043E \u0432\u0432\u0438\u0434\u0443 \u0442\u043E\u0433\u043E \u0447\u0442\u043E \u043E\u043D \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043D \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440\u0435 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u043E\u0441\u0442\u044C \u043F\u0440\u0435\u0434\u0443\u0441\u043C\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044F\n async processQueryParams(queryParams: unknown): Promise<unknown> {\n return queryParams;\n }\n}\n\nexport default ApiUtils;\n", "import type { SSEEvent, SSEReadOptions, StreamResponseLike } from './types';\n\n// ? \u0423\u0442\u0438\u043B\u0438\u0442\u044B \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 Server-Sent Events (text/event-stream).\n// ? \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u043A\u0440\u0435\u0439\u0442\u0435\u0440\u043E\u043C createRequest_sse (\u0441\u043C\u043E\u0442\u0440\u0438 \u043A\u043B\u0430\u0441\u0441 ApiRequestCreators).\n// ? \u0420\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 EventSource:\n// ? - \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0440\u0430\u0437\u0434\u0435\u043B\u044F\u044E\u0442\u0441\u044F \u043F\u0443\u0441\u0442\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439;\n// ? - \u0441\u0442\u0440\u043E\u043A\u0438 \u0432\u0438\u0434\u0430 \"field:value\" (\u043E\u0434\u0438\u043D \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043F\u0440\u043E\u0431\u0435\u043B \u0432 value \u043E\u0442\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F);\n// ? - \u0441\u0442\u0440\u043E\u043A\u0430, \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0449\u0430\u044F\u0441\u044F \u0441 \":\", \u2014 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 (\u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044F);\n// ? - \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u043B\u0435\u0439 data \u0441\u043A\u043B\u0435\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 \"\\n\";\n// ? - \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043C\u044B\u0435 \u043F\u043E\u043B\u044F: event, data, id, retry.\n\n/**\n * \u041F\u0430\u0440\u0441\u0438\u0442 \u043E\u0434\u0438\u043D \u0431\u043B\u043E\u043A SSE (\u0442\u0435\u043A\u0441\u0442 \u043C\u0435\u0436\u0434\u0443 \u043F\u0443\u0441\u0442\u044B\u043C\u0438 \u0441\u0442\u0440\u043E\u043A\u0430\u043C\u0438) \u0432 \u043E\u0431\u044A\u0435\u043A\u0442 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n *\n * \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `null`, \u0435\u0441\u043B\u0438 \u0432 \u0431\u043B\u043E\u043A\u0435 \u043D\u0435 \u043E\u043A\u0430\u0437\u0430\u043B\u043E\u0441\u044C \u043D\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0438\u043C\u043E\u0433\u043E \u043F\u043E\u043B\u044F\n * (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440, \u0431\u043B\u043E\u043A \u0441\u043E\u0441\u0442\u043E\u044F\u043B \u0442\u043E\u043B\u044C\u043A\u043E \u0438\u0437 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432/heartbeat-\u0430).\n *\n * @param block - \u0441\u044B\u0440\u043E\u0439 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439 \u0431\u043B\u043E\u043A SSE (\u0431\u0435\u0437 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044E\u0449\u0435\u0439 \u043F\u0443\u0441\u0442\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438).\n * @returns \u0420\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043D\u043E\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u0435 {@link SSEEvent} \u043B\u0438\u0431\u043E `null`.\n */\nexport function parseSSEEvent(block: string): SSEEvent | null {\n if (typeof block !== 'string') return null;\n\n const event: SSEEvent = { event: 'message', data: '', id: undefined, retry: undefined };\n const dataLines: string[] = [];\n let hasField = false;\n\n block.split('\\n').forEach((line) => {\n // ? \u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043D\u0443\u0442\u0440\u0438 \u0431\u043B\u043E\u043A\u0430 \u043D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u0430 (\u043F\u043E \u043D\u0435\u0439 \u0431\u043B\u043E\u043A \u0438 \u0440\u0435\u0436\u0435\u0442\u0441\u044F), \u043D\u043E \u043D\u0430 \u0432\u0441\u044F\u043A\u0438\u0439 \u0441\u043B\u0443\u0447\u0430\u0439 \u043F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u043C.\n // ? \u0421\u0442\u0440\u043E\u043A\u0430-\u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0441 \u0434\u0432\u043E\u0435\u0442\u043E\u0447\u0438\u044F.\n if (line === '' || line[0] === ':') return;\n\n const colonIdx = line.indexOf(':');\n const field = colonIdx === -1 ? line : line.slice(0, colonIdx);\n let value = colonIdx === -1 ? '' : line.slice(colonIdx + 1);\n // ? \u041F\u043E \u0441\u043F\u0435\u043A\u0435 \u043E\u0442\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0440\u043E\u0432\u043D\u043E \u043E\u0434\u0438\u043D \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043F\u0440\u043E\u0431\u0435\u043B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F.\n if (value[0] === ' ') value = value.slice(1);\n\n switch (field) {\n case 'event':\n event.event = value;\n hasField = true;\n break;\n case 'data':\n dataLines.push(value);\n hasField = true;\n break;\n case 'id':\n event.id = value;\n hasField = true;\n break;\n case 'retry':\n if (/^\\d+$/.test(value)) {\n event.retry = Number(value);\n hasField = true;\n }\n break;\n default:\n // ? \u041D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u044B\u0435 \u043F\u043E\u043B\u044F \u043F\u043E \u0441\u043F\u0435\u043A\u0435 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u044E\u0442\u0441\u044F.\n break;\n }\n });\n\n if (!hasField) return null;\n event.data = dataLines.join('\\n');\n return event;\n}\n\n// ? \u0411\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439 \u0432\u044B\u0437\u043E\u0432 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043A\u043E\u043B\u0431\u044D\u043A\u0430: \u0435\u0433\u043E \u043E\u0448\u0438\u0431\u043A\u0430 \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u0430 \u0440\u0432\u0430\u0442\u044C \u0447\u0442\u0435\u043D\u0438\u0435 \u043F\u043E\u0442\u043E\u043A\u0430.\nfunction safeCall(fn: unknown, ...args: unknown[]): void {\n if (typeof fn !== 'function') return;\n try {\n // ? fn \u0441\u0443\u0436\u0435\u043D \u0434\u043E \u0444\u0443\u043D\u043A\u0446\u0438\u0438 type-guard-\u043E\u043C \u0432\u044B\u0448\u0435 \u2014 \u0432\u044B\u0437\u044B\u0432\u0430\u0435\u043C \u0431\u0435\u0437 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u043E\u0432.\n fn(...args);\n }\n catch {\n /* \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u043A\u043E\u043B\u0431\u044D\u043A \u043D\u0435 \u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0447\u0442\u0435\u043D\u0438\u0435 \u043F\u043E\u0442\u043E\u043A\u0430 */\n }\n}\n\n/**\n * \u0427\u0438\u0442\u0430\u0435\u0442 \u0442\u0435\u043B\u043E Response \u043A\u0430\u043A \u043F\u043E\u0442\u043E\u043A Server-Sent Events.\n *\n * \u0420\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u043C \u0432\u0441\u0435\u0445 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043D\u044B\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439 \u041F\u041E\u0421\u041B\u0415 \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F \u043F\u043E\u0442\u043E\u043A\u0430.\n * \u041F\u0440\u0435\u0440\u044B\u0432\u0430\u043D\u0438\u0435 \u043F\u043E\u0442\u043E\u043A\u0430 \u0447\u0435\u0440\u0435\u0437 `AbortController` \u0442\u0440\u0430\u043A\u0442\u0443\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0448\u0442\u0430\u0442\u043D\u043E\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0435\n * (\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044F \u0442\u043E, \u0447\u0442\u043E \u0443\u0441\u043F\u0435\u043B\u0438 \u0441\u043E\u0431\u0440\u0430\u0442\u044C); \u043B\u044E\u0431\u0430\u044F \u0438\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0447\u0442\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0432\u044B\u0448\u0435.\n *\n * @param response - \u043E\u0431\u044A\u0435\u043A\u0442 Response (\u0438\u043B\u0438 duck-typed \u0441 `body.getReader()`).\n * @param options - \u043A\u043E\u043B\u0431\u044D\u043A\u0438 \u0438 \u043E\u043F\u0446\u0438\u0438 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043F\u043E\u0442\u043E\u043A\u0430 (\u0441\u043C. {@link SSEReadOptions}).\n * @param options.onEvent - \u0432\u044B\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043A\u0430\u0436\u0434\u043E\u0435 \u0440\u0430\u0441\u043F\u0430\u0440\u0441\u0435\u043D\u043D\u043E\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u0435.\n * @param options.onChunk - \u0432\u044B\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043F\u043E\u043B\u0435\u0437\u043D\u0443\u044E \u043D\u0430\u0433\u0440\u0443\u0437\u043A\u0443 (\u043F\u043E\u043B\u0435 data) \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @param options.handlers - \u043A\u0430\u0440\u0442\u0430 `{ \u0438\u043C\u044F\u0421\u043E\u0431\u044B\u0442\u0438\u044F: cb }` \u0434\u043B\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043F\u043E \u043F\u043E\u043B\u044E `event`.\n * @param options.parseJson - \u0435\u0441\u043B\u0438 `true`, \u043F\u043E\u043B\u0435 `data` \u043F\u0440\u043E\u0433\u043E\u043D\u044F\u0435\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 `JSON.parse`.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u043C \u0432\u0441\u0435\u0445 \u0440\u0430\u0441\u043F\u0430\u0440\u0441\u0435\u043D\u043D\u044B\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439 {@link SSEEvent}.\n */\nexport async function readSSE(response: StreamResponseLike, { onEvent, onChunk, handlers, parseJson }: SSEReadOptions = {}): Promise<SSEEvent[]> {\n const events: SSEEvent[] = [];\n // ? \u041D\u0435\u0442 \u0442\u0435\u043B\u0430 \u2014 \u043D\u0435\u0447\u0435\u0433\u043E \u0447\u0438\u0442\u0430\u0442\u044C (\u0437\u0430\u0449\u0438\u0442\u0430 \u043E\u0442 null \u0438 \u0434\u043B\u044F strictNullChecks).\n const stream = response.body;\n if (!stream) return events;\n\n const reader = stream.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n // ? \u041E\u0442\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0439 \u0445\u0432\u043E\u0441\u0442\u043E\u0432\u043E\u0439 \"\\r\": \u043C\u043E\u0436\u0435\u0442 \u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0441\u044F \u043F\u0435\u0440\u0432\u043E\u0439 \u043F\u043E\u043B\u043E\u0432\u0438\u043D\u043E\u0439 \"\\r\\n\", \u0440\u0430\u0437\u043E\u0440\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435 \u0447\u0430\u043D\u043A\u043E\u0432.\n // ? \u0411\u0435\u0437 \u044D\u0442\u043E\u0433\u043E \u043D\u0430\u0438\u0432\u043D\u0430\u044F \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u043F\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043B\u0430 \u0431\u044B \"\\r\" + \"\\n\" \u0432 \"\\n\\n\" \u0438 \u0441\u043E\u0437\u0434\u0430\u043B\u0430 \u043B\u043E\u0436\u043D\u044B\u0439 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n let pendingCR = '';\n\n // ? \u041D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u0443\u0435\u0442 \u043F\u0435\u0440\u0435\u0432\u043E\u0434\u044B \u0441\u0442\u0440\u043E\u043A \u0432 \u043E\u0434\u043D\u043E\u043C \u0447\u0430\u043D\u043A\u0435 (SSE \u0434\u043E\u043F\u0443\u0441\u043A\u0430\u0435\u0442 CR, LF \u0438 CRLF).\n const normalize = (chunk: string): string => chunk.replace(/\\r\\n|\\r/g, '\\n');\n\n // ? \u0414\u0438\u0441\u043F\u0435\u0442\u0447\u0435\u0440 \u043E\u0434\u043D\u043E\u0433\u043E \u0433\u043E\u0442\u043E\u0432\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430: \u043F\u0430\u0440\u0441\u0438\u0442, \u0430\u043A\u043A\u0443\u043C\u0443\u043B\u0438\u0440\u0443\u0435\u0442 \u0438 \u0434\u0451\u0440\u0433\u0430\u0435\u0442 \u043A\u043E\u043B\u0431\u044D\u043A\u0438.\n const flush = (rawBlock: string): void => {\n const event = parseSSEEvent(rawBlock);\n if (!event) return;\n\n // ? \u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0439 JSON-\u043F\u0430\u0440\u0441\u0438\u043D\u0433 \u043F\u043E\u043B\u0435\u0437\u043D\u043E\u0439 \u043D\u0430\u0433\u0440\u0443\u0437\u043A\u0438 (\u043F\u043E\u0434 \u0431\u044D\u043A\u0435\u043D\u0434\u044B, \u0448\u043B\u044E\u0449\u0438\u0435 JSON \u0432 data).\n if (parseJson && typeof event.data === 'string' && event.data !== '') {\n try {\n event.data = JSON.parse(event.data);\n }\n catch {\n /* \u043D\u0435 \u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0439 JSON \u2014 \u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C data \u0441\u0442\u0440\u043E\u043A\u043E\u0439 */\n }\n }\n\n events.push(event);\n safeCall(onEvent, event);\n safeCall(onChunk, event.data, event);\n // ? \u0422\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u043F\u043E \u0438\u043C\u0435\u043D\u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F (event: delta|status|done|...).\n if (handlers) safeCall(handlers[event.event], event.data, event);\n };\n\n try {\n // ? \u0427\u0438\u0442\u0430\u0435\u043C \u043F\u043E\u0442\u043E\u043A \u0434\u043E \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F, \u043F\u043E \u043C\u0435\u0440\u0435 \u043F\u0440\u0438\u0445\u043E\u0434\u0430 \u0447\u0430\u043D\u043A\u043E\u0432 \u043D\u0430\u0440\u0435\u0437\u0430\u0435\u043C \u0433\u043E\u0442\u043E\u0432\u044B\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n // ? \u041D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u0443\u0435\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0439 \u0447\u0430\u043D\u043A (\u043B\u0438\u043D\u0435\u0439\u043D\u0430\u044F \u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u044C), \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0430 \u0432\u0441\u0435\u0433\u043E \u0431\u0443\u0444\u0435\u0440\u0430 \u043D\u0435 \u0434\u0435\u043B\u0430\u0435\u043C.\n let chunk = pendingCR + decoder.decode(value, { stream: true });\n pendingCR = '';\n // ? \u0415\u0441\u043B\u0438 \u0447\u0430\u043D\u043A \u043E\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \"\\r\" \u2014 \u043E\u0442\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u043C \u0435\u0433\u043E: \u0432\u0434\u0440\u0443\u0433 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u0447\u0430\u043D\u043A \u043D\u0430\u0447\u043D\u0451\u0442\u0441\u044F \u0441 \"\\n\" (CRLF \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435).\n if (chunk.endsWith('\\r')) {\n pendingCR = '\\r';\n chunk = chunk.slice(0, -1);\n }\n buffer += normalize(chunk);\n\n // ? \u0412\u044B\u0440\u0435\u0437\u0430\u0435\u043C \u0432\u0441\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043D\u043D\u044B\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u044F (\u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u2014 \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430).\n let sepIdx;\n // eslint-disable-next-line no-cond-assign\n while ((sepIdx = buffer.indexOf('\\n\\n')) !== -1) {\n const rawBlock = buffer.slice(0, sepIdx);\n buffer = buffer.slice(sepIdx + 2);\n flush(rawBlock);\n }\n }\n\n // ? \u0414\u043E\u0431\u0438\u0432\u0430\u0435\u043C \u0434\u0435\u043A\u043E\u0434\u0435\u0440, \u043E\u0442\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0439 \"\\r\" \u0438 \u0445\u0432\u043E\u0441\u0442, \u0435\u0441\u043B\u0438 \u043F\u043E\u0442\u043E\u043A \u0437\u0430\u043A\u0440\u044B\u043B\u0441\u044F \u0431\u0435\u0437 \u0444\u0438\u043D\u0430\u043B\u044C\u043D\u043E\u0439 \u043F\u0443\u0441\u0442\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438.\n buffer += normalize(pendingCR + decoder.decode());\n buffer = buffer.replace(/\\n+$/g, '');\n if (buffer !== '') flush(buffer);\n }\n catch (error: unknown) {\n // ? \u041F\u0440\u0435\u0440\u044B\u0432\u0430\u043D\u0438\u0435 (abort) \u2014 \u044D\u0442\u043E \u0448\u0442\u0430\u0442\u043D\u043E\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0435 \u0441\u0442\u0440\u0438\u043C\u0430: \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C \u0442\u043E, \u0447\u0442\u043E \u0443\u0441\u043F\u0435\u043B\u0438 \u0441\u043E\u0431\u0440\u0430\u0442\u044C.\n // ? \u041B\u044E\u0431\u0443\u044E \u0438\u043D\u0443\u044E \u043E\u0448\u0438\u0431\u043A\u0443 \u0447\u0442\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u043C \u0432\u044B\u0448\u0435 (\u0435\u0451 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 catchCallback/\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C).\n // ? abort \u0431\u0440\u043E\u0441\u0430\u0435\u0442 DOMException \u0441 name === 'AbortError' (\u0432 Node \u043E\u043D \u043D\u0435 instanceof Error) \u2014 \u043F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u043C \u043F\u043E\u043B\u0435 \u0447\u0435\u0440\u0435\u0437 guard.\n const name = error && typeof error === 'object' && 'name' in error ? error.name : undefined;\n if (name !== 'AbortError') throw error;\n }\n finally {\n try {\n reader.releaseLock?.();\n }\n catch {\n /* releaseLock \u043C\u043E\u0436\u0435\u0442 \u0431\u0440\u043E\u0441\u0438\u0442\u044C, \u0435\u0441\u043B\u0438 \u043F\u043E\u0442\u043E\u043A \u0443\u0436\u0435 \u043E\u0442\u043F\u0443\u0449\u0435\u043D \u2014 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C */\n }\n }\n\n return events;\n}\n", "import type { RequestDescriptor, RESTAPISettings, SSEEvent, SSEReadOptions, StreamResponseLike, UnknownRecord } from './types';\nimport { addCustomMethods, getIsOnlyAnObject, getResponseClone, omitKeys } from './_utils';\nimport ApiUtils from './ApiUtils';\nimport { readSSE } from './sse';\n\n// ? \u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u043B\u044E\u0431\u043E\u0433\u043E \u043A\u0440\u0435\u0439\u0442\u0435\u0440\u0430 \u2014 \u0442\u043E, \u0447\u0442\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 splitProperties.\ntype CreatorResult = Promise<UnknownRecord | UnknownRecord[]>;\n\n// ? Type-guard: \u043E\u0442\u0432\u0435\u0442 \u043F\u0440\u0438\u0433\u043E\u0434\u0435\u043D \u0434\u043B\u044F \u0447\u0442\u0435\u043D\u0438\u044F \u043A\u0430\u043A \u043F\u043E\u0442\u043E\u043A (\u0435\u0441\u0442\u044C \u0442\u0435\u043B\u043E \u0441 getReader \u0438 \u043A\u043E\u0434 ok).\nfunction isStreamResponse(value: unknown): value is StreamResponseLike {\n if (!getIsOnlyAnObject(value) || !value.ok) return false;\n const body = value.body;\n return typeof body === 'object' && body !== null && 'getReader' in body && typeof body.getReader === 'function';\n}\n\n// ? \u041F\u0440\u0435\u0444\u0438\u043A\u0441 createRequest_ \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A \u043A\u0440\u0435\u0439\u0442\u0435\u0440\u0430\u043C \u0441 \u0446\u0435\u043B\u044C\u044E \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E \u0438\u043C\u0435\u043D\nconst PREFIX_OF_CLASS_UTILS = 'createRequest_';\n\n/**\n * \u0421\u043B\u043E\u0439 \u0440\u0435\u043A\u0432\u0435\u0441\u0442-\u043A\u0440\u0435\u0439\u0442\u0435\u0440\u043E\u0432: \u043C\u0435\u0442\u043E\u0434\u044B `createRequest_<type>`, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044E\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443 \u043E\u0442\u0432\u0435\u0442\u0430\n * \u043F\u043E\u0434 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u044B\u0439 \u0441\u0446\u0435\u043D\u0430\u0440\u0438\u0439 (toJson, blob, sse \u0438 \u0442.\u0434.) \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0442 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F doRequest.\n * \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043A\u0440\u0435\u0439\u0442\u0435\u0440\u044B \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u044E\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 `requestsCreators`.\n */\nclass ApiRequestCreators extends ApiUtils {\n constructor(settings?: RESTAPISettings) {\n super(settings);\n const { requestsCreators } = settings || {};\n\n if (getIsOnlyAnObject(requestsCreators)) addCustomMethods.call(this, requestsCreators, PREFIX_OF_CLASS_UTILS);\n }\n\n /**\n * \u041A\u0440\u0435\u0439\u0442\u0435\u0440 \u0442\u0438\u043F\u0430 `toJson`: \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 (Response.json()).\n *\n * @param props - \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n * @param variant - \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 splitProperties.\n */\n // ? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 toJson \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C Response.json()\n // ? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043D\u0430\u0441\u0442\u043E\u0440\u043E\u0439\u043A\u0438 isGetBody\n async createRequest_toJson(props: RequestDescriptor, variant?: string): CreatorResult {\n const safelyProps = omitKeys(props, ['getBodyAs']);\n\n return this.splitProperties(\n {\n ...safelyProps,\n isGetBody: false,\n callback: async (res: unknown) => {\n const output = await this.getResponseBody(res, 'json');\n return await (props.callback?.(output) ?? output);\n },\n },\n variant,\n );\n }\n\n /**\n * \u041A\u0440\u0435\u0439\u0442\u0435\u0440 \u0442\u0438\u043F\u0430 `toJsonAdvanced`: callback \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 `{ response, result }`.\n *\n * @param props - \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n * @param variant - \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 splitProperties.\n */\n // ? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 toJsonAdvanced \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 { response, result },\n // ? \u0433\u0434\u0435 response - \u043E\u0431\u044A\u0435\u043A\u0442 Response, result - \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C Response.json()\n // ? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043D\u0430\u0441\u0442\u043E\u0440\u043E\u0439\u043A\u0438 isGetBody\n async createRequest_toJsonAdvanced(props: RequestDescriptor, variant?: string): CreatorResult {\n const safelyProps = omitKeys(props, ['getBodyAs']);\n\n return this.splitProperties(\n {\n ...safelyProps,\n isGetBody: false,\n callback: async (res: unknown) => {\n const output = {\n response: res,\n result: await this.getResponseBody(await getResponseClone(res), 'json'),\n };\n return await (props.callback?.(output) ?? output);\n },\n },\n variant,\n );\n }\n\n /**\n * \u041A\u0440\u0435\u0439\u0442\u0435\u0440 \u0442\u0438\u043F\u0430 `blob`: callback \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 (Response.blob()).\n *\n * @param props - \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n * @param variant - \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 splitProperties.\n */\n // ? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 blob \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u0440\u0435\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C Response.blob(),\n // ? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u043D\u0430\u0441\u0442\u043E\u0440\u043E\u0439\u043A\u0438 isGetBody\n async createRequest_blob(props: RequestDescriptor, variant?: string): CreatorResult {\n const safelyProps = omitKeys(props, ['getBodyAs']);\n\n return this.splitProperties(\n {\n ...safelyProps,\n isGetBody: false,\n callback: async (res: unknown) => {\n const output = await this.getResponseBody(await getResponseClone(res), 'blob');\n return await (props.callback?.(output) ?? output);\n },\n },\n variant,\n );\n }\n\n /**\n * \u041A\u0440\u0435\u0439\u0442\u0435\u0440 \u0442\u0438\u043F\u0430 `sse`: \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u043E\u0442\u0432\u0435\u0442 \u043A\u0430\u043A \u043F\u043E\u0442\u043E\u043A Server-Sent Events (text/event-stream).\n *\n * \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u043E\u043F\u044B \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430: `onEvent`, `onChunk`, `handlers`, `parseJson`.\n * \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A `Accept: text/event-stream`. \u041C\u0435\u0442\u043E\u0434 doRequest \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F\n * \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u043C \u0432\u0441\u0435\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439 \u041F\u041E\u0421\u041B\u0415 \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F \u043F\u043E\u0442\u043E\u043A\u0430; \u043E\u0442\u043C\u0435\u043D\u0430 \u2014 \u043C\u0435\u0442\u043E\u0434\u043E\u043C `.abort()` \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0451\u043D\u043D\u043E\u0433\u043E \u043F\u0440\u043E\u043C\u0438\u0441\u0430.\n *\n * @param props - \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430 (\u043F\u043B\u044E\u0441 onEvent/onChunk/handlers/parseJson).\n * @param variant - \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 splitProperties.\n */\n // ? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 sse \u0437\u0430\u043F\u0440\u043E\u0441 \u043E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043F\u043E\u0442\u043E\u043A Server-Sent Events (text/event-stream).\n // ? \u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u043E\u043F\u044B \u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430:\n // ? - onEvent(event) \u2014 \u0432\u044B\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043A\u0430\u0436\u0434\u043E\u0435 \u0440\u0430\u0441\u043F\u0430\u0440\u0441\u0435\u043D\u043D\u043E\u0435 \u0441\u043E\u0431\u044B\u0442\u0438\u0435 { event, data, id, retry };\n // ? - onChunk(data, event) \u2014 \u0432\u044B\u0437\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u043F\u043E\u043B\u0435\u0437\u043D\u0443\u044E \u043D\u0430\u0433\u0440\u0443\u0437\u043A\u0443 (\u043F\u043E\u043B\u0435 data) \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F;\n // ? - handlers \u2014 \u043A\u0430\u0440\u0442\u0430 { \u0438\u043C\u044F\u0421\u043E\u0431\u044B\u0442\u0438\u044F: cb } \u0434\u043B\u044F \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0439 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043F\u043E \u043F\u043E\u043B\u044E event\n // ? (\u043D\u0430\u043F\u0440\u0438\u043C\u0435\u0440 { delta, status, done }); cb \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 (data, event);\n // ? - parseJson \u2014 \u0435\u0441\u043B\u0438 true, \u043F\u043E\u043B\u0435 data \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u043F\u0440\u043E\u0433\u043E\u043D\u044F\u0435\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 JSON.parse.\n // ? \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A Accept: text/event-stream (\u0435\u0433\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u044C \u0447\u0435\u0440\u0435\u0437 headers).\n // ? \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback (\u0435\u0441\u043B\u0438 \u043F\u0435\u0440\u0435\u0434\u0430\u043D) \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0438\u0442\u043E\u0433\u043E\u0432\u044B\u0439 \u043C\u0430\u0441\u0441\u0438\u0432 \u0432\u0441\u0435\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n // ? \u041C\u0435\u0442\u043E\u0434 doRequest \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u043C \u0432\u0441\u0435\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439 \u041F\u041E\u0421\u041B\u0415 \u0437\u0430\u043A\u0440\u044B\u0442\u0438\u044F \u043F\u043E\u0442\u043E\u043A\u0430;\n // ? \u043E\u0442\u043C\u0435\u043D\u0430 \u043F\u043E\u0442\u043E\u043A\u0430 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043C\u0435\u0442\u043E\u0434\u043E\u043C .abort() \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0451\u043D\u043D\u043E\u0433\u043E \u043F\u0440\u043E\u043C\u0438\u0441\u0430 (\u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0439 AbortController).\n async createRequest_sse(props: RequestDescriptor, variant?: string): CreatorResult {\n const safelyProps = omitKeys(props, ['getBodyAs', 'onChunk', 'onEvent', 'handlers', 'parseJson']);\n const { onChunk, onEvent, handlers, parseJson } = props;\n\n // ? \u0422\u0438\u043F\u043E\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u043C \u043E\u043F\u0446\u0438\u0438 \u043F\u043E\u0442\u043E\u043A\u0430 \u0438\u0437 \u00AB\u0441\u044B\u0440\u044B\u0445\u00BB \u043F\u0440\u043E\u043F\u043E\u0432 \u0437\u0430\u043F\u0440\u043E\u0441\u0430 (\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0441\u0443\u0436\u0430\u0435\u043C guard-\u0430\u043C\u0438).\n const sseOptions: SSEReadOptions = {\n onChunk: typeof onChunk === 'function' ? (data: unknown, event: SSEEvent) => onChunk(data, event) : undefined,\n onEvent: typeof onEvent === 'function' ? (event: SSEEvent) => onEvent(event) : undefined,\n parseJson: Boolean(parseJson),\n handlers: getIsOnlyAnObject(handlers)\n ? Object.keys(handlers).reduce<Record<string, ((data: unknown, event: SSEEvent) => void) | undefined>>((acc, key) => {\n const fn = handlers[key];\n acc[key] = typeof fn === 'function' ? (data: unknown, event: SSEEvent) => fn(data, event) : undefined;\n return acc;\n }, {})\n : undefined,\n };\n\n return this.splitProperties(\n {\n ...safelyProps,\n headers: { Accept: 'text/event-stream', ...(getIsOnlyAnObject(safelyProps.headers) ? safelyProps.headers : {}) },\n isGetBody: false,\n callback: async (res: unknown) => {\n // ? \u0421\u0442\u0440\u0438\u043C\u0438\u043C \u0442\u043E\u043B\u044C\u043A\u043E \u0443\u0441\u043F\u0435\u0448\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0441 \u0447\u0438\u0442\u0430\u0435\u043C\u044B\u043C \u0442\u0435\u043B\u043E\u043C.\n // ? \u0418\u043D\u0430\u0447\u0435 (\u043E\u0448\u0438\u0431\u043A\u0430/\u043D\u0435\u0442 \u0442\u0435\u043B\u0430) \u043E\u0442\u0434\u0430\u0451\u043C res \u043A\u0430\u043A \u0435\u0441\u0442\u044C \u2014 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u044E\u0442 checkResponseCode/catchCallback/\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C.\n const output = isStreamResponse(res) ? await readSSE(res, sseOptions) : res;\n return await (props.callback?.(output) ?? output);\n },\n },\n variant,\n );\n }\n\n /**\n * \u041A\u0440\u0435\u0439\u0442\u0435\u0440 \u0442\u0438\u043F\u0430 `testBadResponse`: callback \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0441\u0438\u043D\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 Response \u0441\u043E \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C 401.\n *\n * @param props - \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n * @param variant - \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 splitProperties.\n */\n // ? \u041F\u0440\u0438 \u0442\u0438\u043F\u0435 testBadResponse \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u043E\u0431\u044A\u0435\u043A\u0442 Response \u0432 401-\u043C \u0441\u0442\u0430\u0442\u0443\u0441\u0435\n // ? \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u0432\u043E\u043E\u0431\u0449\u0435 \u043D\u0438 \u043E\u0442 \u0447\u0435\u0433\u043E\n async createRequest_testBadResponse(props: RequestDescriptor, variant?: string): CreatorResult {\n return this.splitProperties(\n {\n ...props,\n callback: async () =>\n Promise.resolve(\n new Response(JSON.stringify({ errors: [{ message: 'test bad Response' }] }), {\n status: 401,\n statusText: 'test bad Response',\n headers: (() => {\n const headers = new Headers();\n headers.append('content-type', 'application/json');\n return headers;\n })(),\n }),\n ).then(res => props.callback?.(res) ?? res),\n },\n variant,\n );\n }\n\n /**\n * \u041A\u0440\u0435\u0439\u0442\u0435\u0440 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E: callback \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u043E\u0431\u044A\u0435\u043A\u0442 Response (\u0438\u043B\u0438 \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 \u043F\u0440\u0438 isGetBody: 'first').\n *\n * @param props - \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n * @param variant - \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 splitProperties.\n */\n // ? \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 callback \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\n // ? - \u043B\u0438\u0431\u043E \u043E\u0431\u044A\u0435\u043A\u0442 Response\n // ? - \u043B\u0438\u0431\u043E \u0442\u0435\u043B\u043E \u043E\u0442\u0432\u0435\u0442\u0430 (\u0432 \u0441\u043B\u0443\u0447\u0430\u0435 isGetBody: 'first') \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043D\u043E\u0435 \u043C\u0435\u0442\u043E\u0434\u043E\u043C getResponseBody (\u0441\u043C\u043E\u0442\u0440\u0438 \u043A\u043B\u0430\u0441\u0441 ApiUtils)\n async createRequest_default(props: RequestDescriptor, variant?: string): CreatorResult {\n return this.splitProperties(props, variant);\n }\n}\n\nexport default ApiRequestCreators;\n", "import type { RESTAPISettings } from './types';\nimport ApiRequestCreators from './ApiRequestCreators';\n\n/**\n * \u0411\u0430\u0437\u043E\u0432\u044B\u0439 \u043A\u043B\u0430\u0441\u0441 API: \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0438 \u0432\u0430\u043B\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u044B \u0438\u0437 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\n * (API_PATH, \u0442\u0435\u043A\u0441\u0442\u044B \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439, REJECT_CODES) \u0438 \u0440\u0430\u0441\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442 \u0438\u0445 \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440.\n * \u041A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0435 \u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u044B \u043F\u0440\u043E\u043A\u0438\u0434\u044B\u0432\u0430\u044E\u0442\u0441\u044F \u043D\u0430 \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 \u043A\u0430\u043A \u0435\u0441\u0442\u044C.\n */\nclass ApiBase extends ApiRequestCreators {\n /** \u0422\u0435\u043A\u0441\u0442 \u043E\u0448\u0438\u0431\u043A\u0438 \u043D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043F\u0440\u043E\u0441\u0430. */\n BAD_REQUEST_DATA_TEXT!: string;\n\n /** \u0422\u0435\u043A\u0441\u0442 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043E\u0431 \u0443\u0441\u043F\u0435\u0445\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. */\n DEFAULT_SUCCESS_MESSAGE!: string;\n\n /** \u0422\u0435\u043A\u0441\u0442 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. */\n DEFAULT_ERROR_MESSAGE!: string;\n\n /** \u0422\u0435\u043A\u0441\u0442 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043E\u0431 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u0435\u0442\u0438. */\n NO_INET!: string;\n\n /** \u041A\u043E\u0434\u044B \u043E\u0442\u0432\u0435\u0442\u0430, \u043F\u043E \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u0437\u0430\u043F\u0440\u043E\u0441 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u043E\u0442\u043A\u043B\u043E\u043D\u0451\u043D\u043D\u044B\u043C. */\n REJECT_CODES!: number[];\n\n constructor(settings: RESTAPISettings) {\n super(settings);\n\n const {\n API_PATH,\n\n BAD_REQUEST_DATA_TEXT = 'Bad request data',\n DEFAULT_SUCCESS_MESSAGE = 'Success',\n DEFAULT_ERROR_MESSAGE = 'Something wrong, try again',\n NO_INET = 'Please check your network connection and reload page',\n\n REJECT_CODES = [],\n\n ...customConstants\n } = settings.constants || {};\n\n if (typeof API_PATH !== 'string') throw new Error('No API_PATH [ApiBase constructor]');\n\n if (\n typeof BAD_REQUEST_DATA_TEXT !== 'string'\n || typeof DEFAULT_SUCCESS_MESSAGE !== 'string'\n || typeof DEFAULT_ERROR_MESSAGE !== 'string'\n || typeof NO_INET !== 'string'\n || !Array.isArray(REJECT_CODES)\n || !REJECT_CODES.every(i => typeof i === 'number')\n ) {\n throw new Error('Bad input data [ApiBase constructor]');\n }\n\n this.API_PATH = API_PATH;\n\n this.BAD_REQUEST_DATA_TEXT = BAD_REQUEST_DATA_TEXT;\n this.DEFAULT_SUCCESS_MESSAGE = DEFAULT_SUCCESS_MESSAGE;\n this.DEFAULT_ERROR_MESSAGE = DEFAULT_ERROR_MESSAGE;\n this.NO_INET = NO_INET;\n\n this.REJECT_CODES = REJECT_CODES;\n\n Object.keys(customConstants).forEach((key) => {\n this[key] = customConstants[key];\n });\n }\n}\n\nexport default ApiBase;\n", "import type { CredentialsState, RESTAPISettings, UnknownRecord } from './types';\nimport { getIsOnlyAnObject } from './_utils';\n\n/**\n * \u0414\u0435\u043A\u043E\u0434\u0438\u0440\u0443\u0435\u0442 payload JWT-\u0442\u043E\u043A\u0435\u043D\u0430.\n *\n * @param token - JWT-\u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u0438\u0434\u0430 `header.payload.signature`.\n * @returns \u0420\u0430\u0441\u043F\u0430\u0440\u0441\u0435\u043D\u043D\u044B\u0439 payload (\u043E\u0431\u044A\u0435\u043A\u0442) \u043B\u0438\u0431\u043E `null`, \u0435\u0441\u043B\u0438 \u0434\u0435\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C.\n */\nexport function decodeJWT(token: string): UnknownRecord | null {\n try {\n const payload = token.split('.')[1] ?? '';\n const decoded: unknown = JSON.parse(atob(payload));\n return getIsOnlyAnObject(decoded) ? decoded : null;\n }\n catch {\n return null;\n }\n}\n\n/**\n * \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 (\u0442\u043E\u043A\u0435\u043D\u043E\u0432): \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u043E\u043A\u0435\u043D \u0432 \u0437\u0430\u043F\u0440\u043E\u0441\u044B \u0438 (\u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E) \u0440\u0435\u0430\u043B\u0438\u0437\u0443\u0435\u0442\n * \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432. \u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0443 `credentialsProcessing`.\n */\nclass CredentialsProcessing {\n // ? \u0418\u043D\u0434\u0435\u043A\u0441-\u0441\u0438\u0433\u043D\u0430\u0442\u0443\u0440\u0430: getRESTAPIContext \u043D\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0438\u0437\u0432\u043D\u0435 (\u0438\u0437 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u0430 RESTAPI).\n [key: string]: unknown;\n\n /** \u0412\u043A\u043B\u044E\u0447\u0451\u043D \u043B\u0438 \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432. */\n isUseRefreshTokensPropcessing = false;\n\n /** \u0423\u0447\u0451\u0442\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u043F\u0443\u0441\u0442\u044B\u0435). */\n DEFAULT_CREDENTIALS: CredentialsState = {};\n\n /** \u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u043C\u0435\u0442\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445. */\n getCredentialsByOuter!: () => unknown;\n\n /** \u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u043C\u0435\u0442\u043E\u0434 \u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u043E \u0442\u043E\u043A\u0435\u043D\u0443. */\n getHeadersForAuthorize!: (token: string) => UnknownRecord;\n\n /** \u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u0441\u043B\u0435 getCredentials. */\n importCredentials?: (cred: unknown) => unknown;\n\n /** \u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043C\u0435\u0442\u043E\u0434 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 (\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D \u0434\u043B\u044F \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430). */\n saveCredentials?: (cred: unknown) => unknown;\n\n /** \u0412\u043D\u0435\u0448\u043D\u0438\u0439 \u043C\u0435\u0442\u043E\u0434 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445. */\n refreshCredentialsByOuter?: (cred: CredentialsState) => unknown;\n\n /** \u041F\u043E\u043B\u043D\u044B\u0439 \u043F\u0443\u0442\u044C \u0434\u043E \u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u0430 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u0430. */\n REFRESH_TOKEN_PATH?: string;\n\n /** \u041A\u043E\u0434\u044B \u043E\u0442\u0432\u0435\u0442\u0430, \u043F\u043E \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442\u0441\u044F \u043F\u043E\u043F\u044B\u0442\u043A\u0430 \u0440\u0435\u0444\u0440\u0435\u0448\u0430. */\n CODES_USING_THE_REFRESH_ATTEMPT?: number[];\n\n /** \u041A\u043B\u044E\u0447 \u0444\u043B\u0430\u0433\u0430 \u00AB\u0440\u0435\u0444\u0440\u0435\u0448 \u043D\u0430\u0447\u0430\u0442\u00BB \u0432 localStorage. */\n REFRESH_TOKEN_FLAG = 'refreshTokenFlag';\n\n /** \u0418\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u043E\u043F\u0440\u043E\u0441\u0430 \u0444\u043B\u0430\u0433\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u043A\u0435\u043D\u0430, \u043C\u0441. */\n INTERVAL_FOR_CHECKING_TOKEN_UPDATE = 50;\n\n /** \u041A\u043E\u043B\u0431\u044D\u043A, \u0432\u044B\u0437\u044B\u0432\u0430\u0435\u043C\u044B\u0439 \u043F\u043E\u0441\u043B\u0435 \u043D\u0435\u0443\u0434\u0430\u0447\u043D\u043E\u0433\u043E \u0440\u0435\u0444\u0440\u0435\u0448\u0430. */\n callbackAfterRejectRefresh?: () => unknown;\n\n /** \u0414\u043E\u0441\u0442\u0443\u043F \u043A \u0432\u0435\u0440\u0445\u043D\u0435\u043C\u0443 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0443 RESTAPI (\u043D\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0438\u0437 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u0430 RESTAPI). */\n getRESTAPIContext?: () => unknown;\n\n constructor(settings: RESTAPISettings) {\n const { credentialsProcessing } = settings;\n const {\n // ? \u0414\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0432 \u0437\u0430\u043F\u0440\u043E\u0441\u044B \u043E\u0442 API\n // ? \u043D\u0443\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C \u043C\u0435\u0442\u043E\u0434\u044B getCredentials \u0438 getHeadersForAuthorize\n getCredentials,\n getHeadersForAuthorize, // ? \u041D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u043E\u043A\u0435\u043D, \u0434\u043E\u043B\u0436\u043D\u0430 \u0432\u0435\u0440\u043D\u0443\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 \u0434\u043B\u044F \u043A\u043E\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u0430 Headers\n\n // ? \u0422\u0430\u043A \u0436\u0435 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E \u043C\u043E\u0436\u043D\u043E \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C\n importCredentials, // ? \u0435\u0441\u043B\u0438 \u043E\u043D \u043F\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044F, \u0442\u043E \u043E\u043D \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0442\u044C\u0441\u044F \u043A \u0432\u044B\u0432\u043E\u0434\u0443 \u043E\u0442 \u0432\u044B\u0437\u043E\u0432\u0430 getCredentials\n saveCredentials, // ? \u043C\u043E\u0436\u043D\u043E \u0431\u0443\u0434\u0435\u0442 \u043D\u0430\u0439\u0442\u0438 \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435 credentialsProcessing, \u0447\u0442\u043E\u0431\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438\n\n // ! \u041B\u0438\u0431\u043E \u0432\u044B\u0437\u043E\u0432 getCredentials, \u043B\u0438\u0431\u043E \u0446\u0435\u043F\u043E\u0447\u043A\u0430 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 importCredentials(getCredentials())\n // ! \u0434\u043E\u043B\u0436\u043D\u0430 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0442\u0440\u0435\u0431\u0443\u0435\u043C\u0443\u044E \u043A\u043B\u0430\u0441\u0441\u043E\u043C \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443\n // ! \u041A\u043B\u0430\u0441\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u044B\n // ! - { token }, \u0435\u0441\u043B\u0438 \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448 \u0442\u043E\u043A\u0435\u043D\u0430 \u041D\u0415 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F\n // ! - { token, refreshToken, expires }, \u0435\u0441\u043B\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448 \u0442\u043E\u043A\u0435\u043D\u0430\n\n // *********\n\n // ? \u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432\n isUseRefreshTokensPropcessing = false,\n\n // ! \u0414\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043C\u0435\u0442\u043E\u0434\u0430 saveCredentials \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u041E\u0411\u042F\u0417\u0410\u0422\u0415\u041B\u042C\u041D\u041E\u0419\n\n // ? \u0422\u0430\u043A \u0436\u0435 \u0434\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u043D\u0443\u0436\u043D\u043E\n // ? - \u043B\u0438\u0431\u043E\n refreshCredentials, // ! \u043C\u0435\u0442\u043E\u0434 \u0434\u043E\u043B\u0436\u0435\u043D \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044C \u0442\u0430\u043A\u0443\u044E \u0436\u0435 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443 \u043A\u0430\u043A \u0438 \u043C\u0435\u0442\u043E\u0434 getCredentials,\n // ? \u043D\u0430 \u0432\u0445\u043E\u0434 \u043F\u043E\u043B\u0443\u0447\u0438\u0442 \u0442\u0435\u043A\u0443\u0449\u0438\u0435 \u043A\u0440\u0435\u0434\u044B, \u043A \u0432\u044B\u0445\u043E\u0434\u0443 \u0431\u0443\u0434\u0435\u0442 \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D importCredentials, \u0435\u0441\u043B\u0438 \u044D\u0442\u043E\u0442 \u043C\u0435\u0442\u043E\u0434 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043B\u0441\u044F\n // ? - \u043B\u0438\u0431\u043E\n REFRESH_TOKEN_PATH, // ! REFRESH_TOKEN_PATH \u043F\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044F \u041F\u041E\u041B\u041D\u041E\u0421\u0422\u042C\u042E (\u0433\u043B\u043E\u0431\u0430\u043B\u044C\u043D\u0430\u044F \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044F)!\n CODES_USING_THE_REFRESH_ATTEMPT, // ? \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u043F\u043E \u043A\u0430\u043A\u0438\u043C \u043A\u043E\u0434\u0430\u043C \u043E\u0442\u0432\u0435\u0442\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0438\u0442\u044C\u0441\u044F \u0440\u0435\u0444\u0440\u0435\u0448, \u043C\u0430\u0441\u0441\u0438\u0432 \u0447\u0438\u0441\u0435\u043B\n\n // ? \u041E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E\n REFRESH_TOKEN_FLAG = 'refreshTokenFlag',\n INTERVAL_FOR_CHECKING_TOKEN_UPDATE = 50, // ms\n callbackAfterRejectRefresh,\n } = credentialsProcessing || {};\n\n if (typeof getCredentials !== 'function') throw new Error('No getCredentials method [CredentialsProcessing]');\n if (typeof getHeadersForAuthorize !== 'function') {\n throw new TypeError('No getHeadersForAuthorize method [CredentialsProcessing]');\n }\n if (importCredentials && typeof importCredentials !== 'function') {\n throw new Error('Bad importCredentials method [CredentialsProcessing]');\n }\n\n this.isUseRefreshTokensPropcessing = Boolean(isUseRefreshTokensPropcessing);\n this.DEFAULT_CREDENTIALS = {};\n // ? \u0412\u043D\u0435\u0448\u043D\u0438\u0435 \u0444\u0443\u043D\u043A\u0446\u0438\u0438 \u043E\u0431\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043C \u0432 \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u043E\u0431\u0451\u0440\u0442\u043A\u0438 (\u0431\u0435\u0437 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u043E\u0432 / \u0442\u0438\u043F\u0430 Function).\n this.getCredentialsByOuter = () => getCredentials();\n this.getHeadersForAuthorize = (token: string) => {\n const result = getHeadersForAuthorize(token);\n return getIsOnlyAnObject(result) ? result : {};\n };\n if (typeof importCredentials === 'function') this.importCredentials = (cred: unknown) => importCredentials(cred);\n\n // ? \u0415\u0441\u043B\u0438 \u043C\u0435\u0442\u043E\u0434 \u043F\u0435\u0440\u0435\u0434\u0430\u043D \u0438\u043B\u0438 \u0435\u0441\u043B\u0438 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434\u0430\u043D, \u043D\u043E \u0432\u043A\u043B\u044E\u0447\u0435\u043D \u0444\u043B\u043E\u0443 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u043A\u0435\u043D\u043E\u0432 (\u0442\u043E\u0433\u0434\u0430 saveCredentials \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u0435\u043D)\n if (saveCredentials || isUseRefreshTokensPropcessing) {\n if (typeof saveCredentials !== 'function') throw new Error('No saveCredentials method [CredentialsProcessing]');\n else this.saveCredentials = (cred: unknown) => saveCredentials(cred);\n }\n\n if (isUseRefreshTokensPropcessing) {\n if (typeof refreshCredentials === 'function') {\n this.refreshCredentialsByOuter = (cred: CredentialsState) => refreshCredentials(cred);\n }\n else {\n if (typeof this.refreshCredentialsByOuter === 'function' && typeof REFRESH_TOKEN_PATH !== 'string') {\n throw new TypeError('No REFRESH_TOKEN_PATH [CredentialsProcessing]');\n }\n this.REFRESH_TOKEN_PATH = typeof REFRESH_TOKEN_PATH === 'string' ? REFRESH_TOKEN_PATH : undefined;\n }\n\n if (!Array.isArray(CODES_USING_THE_REFRESH_ATTEMPT)) {\n throw new TypeError('No CODES_USING_THE_REFRESH_ATTEMPT [CredentialsProcessing]');\n }\n if (!CODES_USING_THE_REFRESH_ATTEMPT.every(i => typeof i === 'number')) {\n throw new Error('Invalid format of CODES_USING_THE_REFRESH_ATTEMPT elements [CredentialsProcessing]');\n }\n\n if (typeof REFRESH_TOKEN_FLAG !== 'string') throw new Error('Bad REFRESH_TOKEN_FLAG [CredentialsProcessing]');\n if (typeof INTERVAL_FOR_CHECKING_TOKEN_UPDATE !== 'number') {\n throw new TypeError('Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]');\n }\n if (typeof INTERVAL_FOR_CHECKING_TOKEN_UPDATE !== 'number') {\n throw new TypeError('Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]');\n }\n if (callbackAfterRejectRefresh && typeof callbackAfterRejectRefresh !== 'function') {\n throw new Error('Bad INTERVAL_FOR_CHECKING_TOKEN_UPDATE [CredentialsProcessing]');\n }\n\n this.CODES_USING_THE_REFRESH_ATTEMPT = CODES_USING_THE_REFRESH_ATTEMPT;\n this.REFRESH_TOKEN_FLAG = REFRESH_TOKEN_FLAG;\n this.INTERVAL_FOR_CHECKING_TOKEN_UPDATE = INTERVAL_FOR_CHECKING_TOKEN_UPDATE;\n\n if (typeof callbackAfterRejectRefresh === 'function') this.callbackAfterRejectRefresh = () => callbackAfterRejectRefresh();\n }\n }\n\n /** \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0444\u043B\u0430\u0433\u0430 \u00AB\u0440\u0435\u0444\u0440\u0435\u0448 \u043D\u0430\u0447\u0430\u0442\u00BB \u0438\u0437 localStorage. */\n getIsTokenStartRefresh(): string | null {\n return localStorage.getItem(this.REFRESH_TOKEN_FLAG);\n }\n\n /** \u0412\u044B\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0444\u043B\u0430\u0433 \u00AB\u0440\u0435\u0444\u0440\u0435\u0448 \u043D\u0430\u0447\u0430\u0442\u00BB \u0432 localStorage. */\n setIsTokenStartRefresh(): void {\n localStorage.setItem(this.REFRESH_TOKEN_FLAG, String(true));\n }\n\n /** \u0421\u043D\u0438\u043C\u0430\u0435\u0442 \u0444\u043B\u0430\u0433 \u00AB\u0440\u0435\u0444\u0440\u0435\u0448 \u043D\u0430\u0447\u0430\u0442\u00BB \u0438\u0437 localStorage. */\n removeIsTokenStartRefresh(): void {\n localStorage.removeItem(this.REFRESH_TOKEN_FLAG);\n }\n\n /**\n * \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043A\u0443\u0449\u0438\u0435 \u0443\u0447\u0451\u0442\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435 (\u0441 \u0443\u0447\u0451\u0442\u043E\u043C importCredentials \u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438 \u0438\u0441\u0442\u0435\u0447\u0435\u043D\u0438\u044F JWT).\n *\n * @param isCatchCallbackProcess - \u0444\u043B\u0430\u0433 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043E\u0448\u0438\u0431\u043A\u0438 (\u043E\u0442\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443 \u0438\u0441\u0442\u0435\u0447\u0435\u043D\u0438\u044F).\n * @param callback - \u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043A\u043E\u043B\u0431\u044D\u043A, \u043F\u043E\u043B\u0443\u0447\u0430\u044E\u0449\u0438\u0439 \u0438\u0442\u043E\u0433\u043E\u0432\u044B\u0435 \u0443\u0447\u0451\u0442\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u0443\u0447\u0451\u0442\u043D\u044B\u043C\u0438 \u0434\u0430\u043D\u043D\u044B\u043C\u0438.\n */\n async getCredentials(isCatchCallbackProcess?: boolean, callback?: (cred: CredentialsState) => unknown): Promise<CredentialsState> {\n let credentials: unknown = await this.getCredentialsByOuter();\n\n if (typeof this.importCredentials === 'function') credentials = await this.importCredentials(credentials);\n const credObj: CredentialsState = getIsOnlyAnObject(credentials) ? credentials : {};\n\n const token = credObj.token || null;\n\n if (token && !isCatchCallbackProcess) {\n let decoded: UnknownRecord | null;\n try {\n decoded = decodeJWT(token);\n }\n catch {\n decoded = null;\n }\n const currentTime = Date.now() / 1000;\n if (decoded !== null && Number(decoded.exp) < currentTime) credObj.isNeedRefresh = true;\n }\n\n if (callback) await callback({ ...credObj, isCatchCallbackProcess });\n return { ...credObj, isCatchCallbackProcess };\n }\n\n /**\n * \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0440\u0435\u0444\u0440\u0435\u0448 \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 (\u0432\u043D\u0435\u0448\u043D\u0438\u043C \u043C\u0435\u0442\u043E\u0434\u043E\u043C \u043B\u0438\u0431\u043E \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u043C OAuth-\u0444\u043B\u043E\u0443).\n *\n * @param currentCredentials - \u0442\u0435\u043A\u0443\u0449\u0438\u0435 \u0443\u0447\u0451\u0442\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435.\n * @param callback - \u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u043A\u043E\u043B\u0431\u044D\u043A \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F \u043D\u043E\u0432\u044B\u0445 \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u043D\u043E\u0432\u044B\u043C\u0438 \u0443\u0447\u0451\u0442\u043D\u044B\u043C\u0438 \u0434\u0430\u043D\u043D\u044B\u043C\u0438.\n */\n async refreshCredentials(currentCredentials: CredentialsState, callback?: (cred: CredentialsState) => unknown): Promise<CredentialsState> {\n const CONTEXT = this;\n\n async function finalize(cred: CredentialsState): Promise<CredentialsState> {\n if (callback) await callback(cred);\n return Promise.resolve(cred).then(async (res) => {\n CONTEXT.removeIsTokenStartRefresh();\n return res;\n });\n }\n\n if (!currentCredentials?.token || !currentCredentials?.refreshToken) return finalize(CONTEXT.DEFAULT_CREDENTIALS);\n\n // ! \u0412\u041D\u0418\u041C\u0410\u041D\u0418\u0415! \u0414\u0430\u043D\u043D\u044B\u0439 \u043C\u0435\u0445\u0430\u043D\u0438\u0437\u043C \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u043F\u0440\u0438\u043D\u044F\u0442 \u043D\u0430 \u043F\u0440\u043E\u0435\u043A\u0442\u0435 finturfreactfrontend (\u0430\u0434\u043C\u0438\u043D\u043A\u0430)\n // ! \u041D\u0430 \u043A\u0430\u0431\u0438\u043D\u0435\u0442\u0435 \u043E\u043D \u0422\u041E\u0427\u041D\u041E \u041D\u0415 \u0422\u0410\u041A\u041E\u0419\n async function refreshCredentialsByDefault(): Promise<Response> {\n const { token, refreshToken } = currentCredentials;\n // ? \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u043E\u0440\u043C\u0438\u0440\u0443\u0435\u043C \u0447\u0435\u0440\u0435\u0437 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440 Headers \u0438\u0437 \u043F\u0430\u0440 \u00AB\u043A\u043B\u044E\u0447-\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u00BB.\n const headers = new Headers(Object.entries(CONTEXT.getHeadersForAuthorize(token || '')).map(([key, value]): [string, string] => [key, `${value}`]));\n\n const body = new FormData();\n body.append('grant_type', 'refresh_token');\n body.append('refresh_token', refreshToken || '');\n body.append('client_id', 'oauth');\n body.append('client_secret', 'secret');\n body.append('access_type', 'offline');\n\n return fetch(`${CONTEXT.REFRESH_TOKEN_PATH}`, {\n mode: 'cors',\n method: 'POST',\n headers,\n body,\n redirect: 'follow',\n });\n }\n\n // ? \u041F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 refreshCredentials \u043F\u0440\u0438 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0438 \u044D\u043A\u0437\u0435\u043C\u043B\u044F\u0440\u0430 RESTAPI, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0443\u0432\u0435\u0440\u0435\u043D\u044B,\n // ? \u0447\u0442\u043E \u043C\u0435\u0445\u0430\u043D\u0438\u0437\u043C \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0418\u041C\u0415\u041D\u041D\u041E \u0422\u0410\u041A\u041E\u0419 \u043A\u0430\u043A \u0432 \u0444-\u0438 refreshCredentialsByDefault!\n // ! currentCredentials \u043F\u0435\u0440\u0435\u0434\u0430\u044E\u0442\u0441\u044F \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u043A\u043B\u0430\u0441\u0441\u0430! ({ token, refreshToken, expires })\n const newCredentials\n = typeof CONTEXT.refreshCredentialsByOuter === 'function'\n ? await CONTEXT.refreshCredentialsByOuter(currentCredentials)\n : await refreshCredentialsByDefault();\n\n return finalize(getIsOnlyAnObject(newCredentials) ? newCredentials : CONTEXT.DEFAULT_CREDENTIALS);\n }\n\n /**\n * \u041E\u0436\u0438\u0434\u0430\u0435\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u0430 (\u0438\u043B\u0438 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u0442 \u0435\u0433\u043E \u0444\u043B\u0430\u0433 \u043F\u0440\u0438 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438).\n *\n * @param isNeedRefresh - \u0432\u044B\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043B\u0438 \u0444\u043B\u0430\u0433 \u00AB\u0440\u0435\u0444\u0440\u0435\u0448 \u043D\u0430\u0447\u0430\u0442\u00BB \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0433\u043E \u0440\u0435\u0444\u0440\u0435\u0448\u0430.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u043F\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0438 \u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F.\n */\n async waitRefresh(isNeedRefresh?: boolean): Promise<void> {\n return new Promise<void>((resolve) => {\n if (!this.getIsTokenStartRefresh()) {\n if (isNeedRefresh) this.setIsTokenStartRefresh();\n resolve();\n }\n else {\n const intervalId = setInterval(() => {\n if (!this.getIsTokenStartRefresh()) {\n clearInterval(intervalId);\n resolve();\n }\n }, this.INTERVAL_FOR_CHECKING_TOKEN_UPDATE);\n }\n });\n }\n\n /**\n * \u041E\u0431\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u0435\u0442 \u0443\u0447\u0451\u0442\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435: \u043F\u0440\u0438 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u0438 \u0440\u0435\u0444\u0440\u0435\u0448\u0438\u0442 \u0442\u043E\u043A\u0435\u043D \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435.\n *\n * @param cred - \u0442\u0435\u043A\u0443\u0449\u0438\u0435 \u0443\u0447\u0451\u0442\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435.\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u043C\u0438 \u0443\u0447\u0451\u0442\u043D\u044B\u043C\u0438 \u0434\u0430\u043D\u043D\u044B\u043C\u0438 (\u0441 \u0444\u043B\u0430\u0433\u043E\u043C isRefreshFailed \u043F\u0440\u0438 \u043D\u0435\u0443\u0434\u0430\u0447\u0435).\n */\n async processCredentials(cred: CredentialsState): Promise<CredentialsState> {\n if (!cred.isNeedRefresh && !cred.isCatchCallbackProcess) return cred;\n\n const CONTEXT = this;\n\n return CONTEXT.refreshCredentials(cred, response => CONTEXT.saveCredentials?.(response)).then(() => {\n return new Promise<CredentialsState>((resolve) => {\n setTimeout(async () => {\n const newCredentials = await CONTEXT.getCredentials();\n if (!newCredentials?.token) {\n newCredentials.isRefreshFailed = true;\n setTimeout(() => {\n CONTEXT?.callbackAfterRejectRefresh?.();\n }, 0);\n }\n resolve(newCredentials);\n }, 0);\n });\n });\n }\n}\n\nexport default CredentialsProcessing;\n", "import type { DoRequestSettings, RequestDescriptor, RequestInput, RESTAPISettings, UnknownRecord } from './partials/types';\nimport { getInstanceOfFetchSystem, getIsOnlyAnObject } from './partials/_utils';\nimport ApiBase from './partials/ApiBase';\nimport CredentialsProcessing from './partials/CredentialsProcessing';\n\n// ? \u0412\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 (\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u043F\u0440\u043E\u0431\u0440\u043E\u0441\u0430 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430 RESTAPI \u0432 credentialsProcessing).\nfunction returnTheContext(this: RESTAPI): RESTAPI {\n return this;\n}\n\n/**\n * \u041A\u043B\u0430\u0441\u0441 REST API \u043F\u043E\u0432\u0435\u0440\u0445 AbortableFetch: \u0444\u043E\u0440\u043C\u0438\u0440\u0443\u0435\u0442 \u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u0437\u0430\u043F\u0440\u043E\u0441\u044B (\u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0435 \u0438 \u043C\u0443\u043B\u044C\u0442\u0438\u0437\u0430\u043F\u0440\u043E\u0441\u044B),\n * \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u043E\u043A\u0435\u043D\u0430\u043C\u0438 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u0447\u0435\u0440\u0435\u0437 {@link CredentialsProcessing}) \u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F.\n * \u0420\u0430\u0441\u0448\u0438\u0440\u044F\u0435\u0442\u0441\u044F \u0440\u0435\u043A\u0432\u0435\u0441\u0442-\u043A\u0440\u0435\u0439\u0442\u0435\u0440\u0430\u043C\u0438, \u0443\u0442\u0438\u043B\u0438\u0442\u0430\u043C\u0438 \u0438 \u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u0430\u043C\u0438 \u0447\u0435\u0440\u0435\u0437 \u043E\u0431\u044A\u0435\u043A\u0442 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A.\n */\nclass RESTAPI extends ApiBase {\n /** \u0424\u0443\u043D\u043A\u0446\u0438\u044F \u043F\u043E\u043A\u0430\u0437\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E (\u0438\u043B\u0438 null, \u0435\u0441\u043B\u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u043E). */\n sendMessage: ((...args: unknown[]) => unknown) | null = null;\n\n /** \u041E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0443\u0447\u0451\u0442\u043D\u044B\u0445 \u0434\u0430\u043D\u043D\u044B\u0445 (\u0441\u043E\u0437\u0434\u0430\u0451\u0442\u0441\u044F \u043F\u0440\u0438 \u043D\u0430\u043B\u0438\u0447\u0438\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 credentialsProcessing). */\n credentialsProcessing?: CredentialsProcessing;\n\n constructor(settings: RESTAPISettings) {\n super(settings);\n const { sendMessage, credentialsProcessing } = settings || {};\n this.sendMessage = typeof sendMessage === 'function' ? sendMessage : null;\n\n // ! \u041D\u0430\u043B\u0438\u0447\u0438\u0435 credentialsProcessing \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0414\u041E\u0411\u0410\u0412\u041B\u0415\u041D\u0418\u0415 \u0422\u041E\u041A\u0415\u041D\u041E\u0412 \u0412 \u0417\u0410\u041F\u0420\u041E\u0421\u042B,\n // ! \u041D\u041E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u041D\u0415 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u0442\u043E\u043A\u0435\u043D\u043E\u0432\n // ! (\u0444\u043B\u043E\u0443 \u0440\u0435\u0444\u0440\u0435\u0448\u0430 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u0440\u043E\u043F\u043E\u0439 isUseRefreshTokensPropcessing \u0438\u0437 credentialsProcessing)\n if (getIsOnlyAnObject(credentialsProcessing)) {\n this.credentialsProcessing = new CredentialsProcessing(settings);\n\n // ? credentialsProcessing \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D \u043E\u0431\u043E\u0441\u043E\u0431\u043B\u0435\u043D\u043E \u0434\u043B\u044F \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043E\u0431\u043B\u0430\u0434\u0430\u0442\u044C \u0441\u0432\u043E\u0438\u043C \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u044B\u043C this\n // ? \u041E\u0434\u043D\u0430\u043A\u043E \u043F\u0440\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0438 \u043C\u0435\u0442\u043E\u0434\u043E\u0432 credentialsProcessing\n // ? \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u043D\u0430\u0434\u043E\u0431\u0438\u0442\u0441\u044F \u0432\u043E\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0435\u043F\u043E\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438 \u043A\u043B\u0430\u0441\u0441\u0430 RESTAPI\n // ? \u0414\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u0434\u043E\u0442\u044F\u043D\u0443\u0442\u044C\u0441\u044F \u0434\u043E \u0432\u0435\u0440\u0445\u043D\u0435\u0433\u043E \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430\n this.credentialsProcessing.getRESTAPIContext = returnTheContext.bind(this);\n }\n }\n\n /**\n * \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 (\u0431\u0430\u0437\u043E\u0432\u044B\u0439) \u043C\u0435\u0442\u043E\u0434 API: \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442 \u043C\u0443\u043B\u044C\u0442\u0438\u0437\u0430\u043F\u0440\u043E\u0441 (\u0438\u043B\u0438 \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0439 \u0437\u0430\u043F\u0440\u043E\u0441).\n *\n * @param inputRequests - \u043F\u0443\u0442\u044C, \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0438\u043B\u0438 \u0438\u0445 \u043C\u0430\u0441\u0441\u0438\u0432.\n * @param settings - \u043E\u0431\u0449\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u0430 (\u0444\u043E\u0440\u043C\u0430\u0442 \u043E\u0442\u0432\u0435\u0442\u0430, \u0442\u043E\u0441\u0442\u044B, \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0438 \u0442.\u043F.).\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C (\u0444\u043E\u0440\u043C\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043E\u0442 isResponseAsObject).\n */\n // ! \u041E\u0441\u043D\u043E\u0432\u043D\u043E\u0439 (\u0431\u0430\u0437\u043E\u0432\u044B\u0439) \u043C\u0435\u0442\u043E\u0434 API, \u043C\u0443\u043B\u044C\u0442\u0438\u0437\u0430\u043F\u0440\u043E\u0441\u044B\n async doRequest(inputRequests: RequestInput, settings?: DoRequestSettings): Promise<unknown> {\n if (typeof inputRequests !== 'string' && typeof inputRequests !== 'object') {\n return Promise.reject(new Error(this.BAD_REQUEST_DATA_TEXT));\n }\n\n // ? \u041A \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u043C \u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C API \u0431\u0443\u0434\u0435\u043C \u0442\u044F\u043D\u0443\u0442\u044C\u0441\u044F \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u043C\u044B\u043A\u0430\u043D\u0438\u044F\n const API_CONTEXT = this;\n\n const { isResponseAsObject, isGetBody, callback, ...partialRestSettings } = settings || {};\n const {\n commonSuccessMessage: CSMfromSettings,\n commonErrorMessage: CEMfromSettings,\n successMessageType: SMTfromSettings,\n\n isToastResult: isToastFromSettings,\n toastOptions: TOFomSettings,\n isNoToastSuccess: isNTSFromSettings,\n isNoToastError: isNTEFromSettings,\n isNoToast: isNoToastFromSettings,\n\n successMessages,\n errorMessages,\n } = partialRestSettings || {};\n\n // ? \u041F\u0440\u0438 \u0432\u044B\u0437\u043E\u0432\u0435 getRequestInstance \u043F\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 API\n // ? \u0412 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0435 \u0432\u044B\u0437\u043E\u0432\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u043C \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 \u043A\u043B\u0430\u0441\u0441\u0430 AbortableFetch...\n const instance = await getInstanceOfFetchSystem.call(this);\n if (!instance) {\n throw new Error('It is impossible to make a request!');\n }\n\n // ? ... \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0435\u0449\u0435 \u043D\u0435\u043C\u043D\u043E\u0433\u043E \u0434\u043E\u043D\u0430\u0441\u0442\u0440\u043E\u0438\u043C \u0441\u0435\u0442\u0442\u0435\u0440\u0430\u043C\u0438 \u044D\u043A\u0437\u0435\u043F\u043B\u044F\u0440\u0430\n instance.setIsResponseAsObject(isResponseAsObject ?? true);\n if (typeof callback === 'function') instance.setCallback(callback);\n\n // ? \u042D\u0442\u043E \u041D\u0415 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F \u0444-\u044F, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u0435\u0440\u043D\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n function getRequests(): Array<Promise<UnknownRecord>> {\n let output: Array<string | UnknownRecord>;\n if (typeof inputRequests === 'string') output = [{ path: inputRequests }];\n else output = Array.isArray(inputRequests) ? inputRequests : [inputRequests];\n\n // ? \u042D\u0442\u043E \u041D\u0415 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F \u0444-\u044F, \u043A\u043E\u0442\u043E\u0440\u0430\u044F \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0439 \u043A\u043E\u043B\u0431\u044D\u043A\n function getCallback(item: UnknownRecord, mesageOptions: UnknownRecord): (res: unknown) => Promise<unknown> {\n const getBodyAs = typeof item.getBodyAs === 'string' ? item.getBodyAs : undefined;\n\n const finalIsGetBody = typeof item.isGetBody === 'boolean' || typeof item.isGetBody === 'string' ? item.isGetBody : isGetBody;\n const finalIsGetBodyFirst = finalIsGetBody === 'first';\n\n const checkResponseCallback = finalIsGetBodyFirst\n ? async (res: unknown, options: UnknownRecord) =>\n API_CONTEXT.getResponseBody(await API_CONTEXT.checkResponseCode(res, options), getBodyAs)\n : async (res: unknown, options: UnknownRecord) => API_CONTEXT.checkResponseCode(res, options);\n\n const itemCallback = item.callback;\n const callbackFn = typeof itemCallback === 'function'\n ? async (res: unknown) => itemCallback(await checkResponseCallback(res, mesageOptions))\n : async (res: unknown) => checkResponseCallback(res, mesageOptions);\n\n return finalIsGetBody && !finalIsGetBodyFirst\n ? async (res: unknown) => API_CONTEXT.getResponseBody(await callbackFn(res), getBodyAs)\n : callbackFn;\n }\n\n async function getRequestItem(item: string | UnknownRecord, idx: number): Promise<UnknownRecord> {\n const itemObj: UnknownRecord = getIsOnlyAnObject(item) ? item : { path: item };\n const { type, ...partialRestFirst } = itemObj;\n // ? \u041F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u043B\u043E\u0441\u044C \u0447\u0442\u043E \u043F\u0440\u043E\u043F\u0430 type \u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u0435 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430\n // ? \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u043C\u0435\u0442\u043E\u0434\u0430 doMonoRequest,\n // ? \u043E\u0434\u043D\u0430\u043A\u043E \u043E\u043A\u0430\u0437\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E type \u0443\u0434\u043E\u0431\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0438 \u0432 \u043C\u0443\u043B\u044C\u0442\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u0430\u0445 (\u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u043E).\n // ? \u0412 \u0434\u0430\u043D\u043D\u043E\u043C \u043C\u0435\u0441\u0442\u0435 \u043F\u0440\u043E\u0438\u0441\u0445\u043E\u0434\u0438\u0442 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430 type \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0438\u0437 \u043C\u0443\u043B\u044C\u0442\u0438 \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n // ? 'doRequestMapping' - \u043A\u043B\u044E\u0447 \u0434\u043B\u044F \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0432\u044B\u0445\u043E\u0434\u043D\u044B\u043C\u0438 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430\u043C\u0438 \u0438\u0437 \u043C\u0435\u0442\u043E\u0434\u0430 splitProperties\n // ? (splitProperties \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u041B\u042E\u0411\u042B\u041C \u043A\u0440\u0435\u0439\u0442\u0435\u0440\u043E\u043C)\n const itemAfterRequestCreating: UnknownRecord = await (async () => {\n const key = `createRequest_${typeof type === 'string' ? type : 'default'}`;\n\n // ? \u0417\u0430\u0449\u0438\u0442\u0430 \u043D\u0430 \u0441\u043B\u0443\u0447\u0430\u0439 \u0435\u0441\u043B\u0438 type \u043F\u0435\u0440\u0435\u0434\u0430\u043D, \u043D\u043E \u0442\u0430\u043A\u043E\u0433\u043E \u043D\u0435\u0442 \u0432 API_CONTEXT\n const creator = key in API_CONTEXT ? API_CONTEXT[key] : undefined;\n const result = typeof creator === 'function'\n ? creator.call(API_CONTEXT, partialRestFirst, 'doRequestMapping')\n : API_CONTEXT.createRequest_default(partialRestFirst, 'doRequestMapping');\n const awaited = await result;\n return getIsOnlyAnObject(awaited) ? awaited : {};\n })();\n\n const { fullPath, api, path, query, queryParameters, ...partialRestSecond } = itemAfterRequestCreating;\n const {\n successMess,\n commonSuccessMessage,\n successMessageType,\n errorMess,\n commonErrorMessage,\n isToastResult,\n toastOptions,\n isNoToastSuccess,\n isNoToastError,\n isNoToast,\n ...rest\n } = partialRestSecond;\n\n const successMessagesArr = Array.isArray(successMessages) ? successMessages : undefined;\n const errorMessagesArr = Array.isArray(errorMessages) ? errorMessages : undefined;\n\n const useSuccessMessageFlag = Boolean(\n successMess || commonSuccessMessage || successMessagesArr?.[idx] || CSMfromSettings || isToastResult || isToastFromSettings,\n );\n\n const isUseSuccessToast = useSuccessMessageFlag && !isNoToast && !isNoToastFromSettings && !isNoToastSuccess && !isNTSFromSettings;\n\n const isUseErrorToast = !isNoToast && !isNoToastFromSettings && !isNoToastError && !isNTEFromSettings;\n\n const mesageOptions: UnknownRecord = {\n successMess: successMess || commonSuccessMessage || successMessagesArr?.[idx] || CSMfromSettings,\n successMessageType: successMessageType || SMTfromSettings,\n errorMess: errorMess || commonErrorMessage || errorMessagesArr?.[idx] || CEMfromSettings,\n isUseSuccessToast,\n isUseErrorToast,\n toastOptions: toastOptions || TOFomSettings,\n };\n\n // ? \u0414\u0430\u043D\u043D\u0430\u044F \u0444-\u044F \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u0441\u044F await-\u043C\u0438 \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0436\u0434\u0430\u0442\u044C\u0441\u044F \u0444\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\n return {\n ...rest,\n path: `${fullPath || (await API_CONTEXT.getRootPath()) + (typeof path === 'string' ? path : '')}`,\n\n // ? \u0417\u0430\u043F\u0443\u0441\u043A\u0430\u0435\u043C \u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0443\u044E\u0441\u044F \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0443\u044E \u0444-\u044E, \u0436\u0434\u0435\u043C \u0440\u0435\u0437\u043E\u043B\u0432\u0430 \u043F\u0440\u043E\u043C\u0438\u0441\u0430 \u043E\u0442 \u043D\u0435\u0435\n queryParameters: await (async () => {\n const queryParams = query || queryParameters || '';\n // ? \u0422.\u043A.\u0441\u0430\u043C\u043E\u0432\u044B\u0437\u044B\u0432\u0430\u044E\u0449\u0430\u044F\u0441\u044F \u0444-\u044F \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u0442\u043E \u043C\u043E\u0436\u0435\u043C \u0434\u043E\u0436\u0434\u0430\u0442\u044C\u0441\u044F \u0444\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\n const preparedQueryParams = await API_CONTEXT.processQueryParams(queryParams);\n return preparedQueryParams;\n })(),\n mesageOptions,\n callback: getCallback(itemAfterRequestCreating, mesageOptions),\n };\n }\n\n // ? getRequestItem - \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F \u0444-\u044F (\u0432\u044B\u0437\u043E\u0432 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043F\u0440\u043E\u043C\u0438\u0441)\n // ? \u0412\u044B\u0437\u044B\u0432\u0430\u0435\u043C \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043C\u0430\u043F\u0438\u043D\u0433\u0430, \u043F\u043E\u043B\u0443\u0447\u0430\u0435\u043C \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n return output.map((item, idx) => getRequestItem(item, idx));\n }\n\n // ? \u0424-\u044F getRequests \u041D\u0415 \u0430\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u0430\u044F, \u043D\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n // ? \u0414\u041E\u0416\u0418\u0414\u0410\u0415\u041C\u0421\u042F \u0440\u0435\u0437\u043E\u043B\u0432\u0430 \u0432\u0441\u0435\u0445 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432 \u0447\u0435\u0440\u0435\u0437 Promise.all,\n // ? \u043F\u043E\u0441\u043B\u0435 \u0440\u0435\u0437\u043E\u043B\u0432\u0430 \u0432\u0441\u0435\u0445 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432 Promise.all \u0432\u0435\u0440\u043D\u0435\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0440\u0435\u0437\u043E\u043B\u0432\u0430,\n // ? instance - \u044D\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 AbortableFetch\n // ? \u0412\u044B\u0437\u044B\u0432\u0430\u0435\u043C instance.request, \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044F \u043C\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u0432 \u0440\u0435\u0437\u043E\u043B\u0432\u043E\u0432 \u043F\u0440\u043E\u043C\u0438\u0441\u043E\u0432\n // ? (\u0442.\u0435. \u043C\u0430\u0441\u0441\u0438\u0432 \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0437\u0430\u043F\u0440\u043E\u0441\u0430)\n return instance.request(await Promise.all(getRequests()));\n }\n\n /**\n * \u041C\u0435\u0442\u043E\u0434 API \u0434\u043B\u044F \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0445 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432: \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442 \u043A\u0440\u0435\u0439\u0442\u0435\u0440 \u043F\u043E `type` \u0438 \u0434\u0435\u043B\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0432 {@link RESTAPI.doRequest}.\n *\n * @param requestSettings - \u043E\u0431\u044A\u0435\u043A\u0442 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u043E\u0433\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0430 (\u0441 \u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u043C `type`).\n * @returns \u041F\u0440\u043E\u043C\u0438\u0441 \u0441 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u043E\u043C \u0437\u0430\u043F\u0440\u043E\u0441\u0430.\n */\n // ! \u041C\u0435\u0442\u043E\u0434 API \u0434\u043B\u044F \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0445 \u0437\u0430\u043F\u0440\u043E\u0441\u043E\u0432\n async doMonoRequest(requestSettings: RequestDescriptor): Promise<unknown> {\n if (!getIsOnlyAnObject(requestSettings)) throw new Error(`${this.BAD_REQUEST_DATA_TEXT} [RESTAPI.doMonoRequest]`);\n const { type, ...requestSettingsRest } = requestSettings;\n\n // ? \u0420\u0435\u043A\u0432\u0435\u0441\u0442-\u043A\u0440\u0435\u0439\u0442\u0435\u0440\u044B \u0440\u0430\u0437\u0434\u0435\u043B\u044F\u044E\u0442 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B, \u043F\u0440\u0438 \u043D\u0430\u0434\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u044D\u0442\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u044E\u0442, \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u044E\u0442 \u0444-\u0442\u044C\n // ? \u0438 \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u044E\u0442 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0445 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u043C\u0435\u0442\u043E\u0434\u0430 doRequest\n const key = `createRequest_${typeof type === 'string' ? type : ''}`;\n const creator = type && key in this ? this[key] : undefined;\n const created = typeof creator === 'function'\n ? await creator.call(this, requestSettingsRest)\n : await this.createRequest_default(requestSettingsRest);\n\n const doRequestArgs = Array.isArray(created) ? created : [created];\n\n return this.doRequest(doRequestArgs[0], doRequestArgs[1]);\n }\n}\n\nexport default RESTAPI;\n"],
5
+ "mappings": "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",
6
+ "names": ["RESPONSE_AS_OBJECT_ALWAYS_VALUE", "AbortableFetch", "AbortableFetch_default", "AbortableFetch_default"]
7
7
  }