@krainovsd/js-helpers 0.19.0-beta.6 → 0.19.0-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.cjs CHANGED
@@ -2124,43 +2124,48 @@ function executeAfterHandlers(handlers, request, response) {
2124
2124
  }
2125
2125
 
2126
2126
  function createOauthProvider(opts = {}) {
2127
- const { refreshTokenWindowUrl = window.origin, closeObserveSubWindowInterval = 500, waitSubWindow = 8000, loginUrl = undefined, logoutUrl = undefined, clearPageUrl = OAUTH_CLEAR_PAGE_URL, errorPageUrl = OAUTH_ERROR_PAGE_URL, logoutPageUrl = OAUTH_LOGOUT_PAGE_URL, afterClearPageUrl = "/", expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenStorageName = OAUTH_TOKEN_STORAGE_NAME, expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenRequest = undefined, forceSetToken = false, subWindow = true, refreshToken = false, } = opts;
2127
+ const { refreshTokenWindowUrl = window.origin, closeObserveSubWindowInterval = 500, waitSubWindow = 15000, loginUrl = undefined, logoutUrl = undefined, clearPageUrl = OAUTH_CLEAR_PAGE_URL, errorPageUrl = OAUTH_ERROR_PAGE_URL, logoutPageUrl = OAUTH_LOGOUT_PAGE_URL, afterClearPageUrl = "/", expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenStorageName = OAUTH_TOKEN_STORAGE_NAME, expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenRequest = undefined, forceSetToken = false, subWindow = true, refreshToken = false, } = opts;
2128
2128
  let processing = false;
2129
+ function getExpires(expires) {
2130
+ return Date.now() + (expires - 30);
2131
+ }
2132
+ function checkExpires(expires) {
2133
+ return expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires;
2134
+ }
2129
2135
  async function refetchAfterRefreshFlow(request) {
2130
2136
  if (processing) {
2131
- await beforeHandler(request);
2137
+ await beforeHandlerSetToken(request);
2132
2138
  return request;
2133
2139
  }
2134
2140
  processing = true;
2135
2141
  if (refreshToken && tokenRequest) {
2136
- const token = await tokenRequest();
2137
- if (token == undefined) {
2142
+ const tokenInfo = await startRefreshFlow();
2143
+ if (tokenInfo == undefined) {
2138
2144
  if (subWindow) {
2139
- await startRefreshFlowInSubWindow();
2145
+ await startLoginFlowInSubWindow();
2140
2146
  }
2141
2147
  else {
2142
2148
  await startLoginFlow();
2143
2149
  }
2144
2150
  processing = false;
2145
- await beforeHandler(request);
2151
+ await beforeHandlerSetToken(request);
2146
2152
  return request;
2147
2153
  }
2148
- localStorage.setItem(tokenStorageName, token);
2149
2154
  processing = false;
2150
- await beforeHandler(request);
2155
+ await beforeHandlerSetToken(request);
2151
2156
  return request;
2152
2157
  }
2153
2158
  if (subWindow) {
2154
- await startRefreshFlowInSubWindow();
2159
+ await startLoginFlowInSubWindow();
2155
2160
  }
2156
2161
  else {
2157
2162
  await startLoginFlow();
2158
2163
  }
2159
2164
  processing = false;
2160
- await beforeHandler(request);
2165
+ await beforeHandlerSetToken(request);
2161
2166
  return request;
2162
2167
  }
2163
- async function startRefreshFlowInSubWindow() {
2168
+ async function startLoginFlowInSubWindow() {
2164
2169
  processing = true;
2165
2170
  let waiting = true;
2166
2171
  const url = new URL(typeof refreshTokenWindowUrl === "function" ? refreshTokenWindowUrl() : refreshTokenWindowUrl);
@@ -2224,6 +2229,16 @@ function createOauthProvider(opts = {}) {
2224
2229
  await wait(delay);
2225
2230
  return null;
2226
2231
  }
2232
+ async function startRefreshFlow() {
2233
+ const tokenInfo = await tokenRequest?.();
2234
+ if (tokenInfo) {
2235
+ localStorage.setItem(tokenStorageName, tokenInfo.token);
2236
+ if (tokenInfo.expires !== 0) {
2237
+ localStorage.setItem(expiresTokenStorageName, String(getExpires(tokenInfo.expires)));
2238
+ }
2239
+ }
2240
+ return tokenInfo;
2241
+ }
2227
2242
  // Processing an oauth flow: extract expires, get token, close sub windows, check if logout/clear/error url
2228
2243
  async function register() {
2229
2244
  if (window.location.pathname === logoutPageUrl) {
@@ -2249,19 +2264,19 @@ function createOauthProvider(opts = {}) {
2249
2264
  ? refreshQuery === "true"
2250
2265
  : isArray(refreshQuery)
2251
2266
  ? refreshQuery[refreshQuery.length - 1] === "true"
2252
- : false;
2267
+ : null;
2253
2268
  /** Expires token */
2254
2269
  const expires = isString(expiresQuery)
2255
2270
  ? expiresQuery
2256
2271
  : isArray(expiresQuery)
2257
2272
  ? expiresQuery[expiresQuery.length - 1]
2258
- : false;
2259
- if (expires && !Number.isNaN(+expires) && Date.now() < +expires) {
2260
- localStorage.setItem(expiresTokenStorageName, expires);
2273
+ : null;
2274
+ if (checkExpires(expires)) {
2275
+ localStorage.setItem(expiresTokenStorageName, String(getExpires(+expires)));
2261
2276
  if (tokenRequest) {
2262
- const token = await tokenRequest();
2263
- if (token != undefined && tokenStorageName) {
2264
- localStorage.setItem(tokenStorageName, token);
2277
+ const tokenInfo = await tokenRequest();
2278
+ if (tokenInfo != undefined) {
2279
+ localStorage.setItem(tokenStorageName, tokenInfo.token);
2265
2280
  }
2266
2281
  }
2267
2282
  /** Close if OnlyRefresh window */
@@ -2280,7 +2295,14 @@ function createOauthProvider(opts = {}) {
2280
2295
  }
2281
2296
  return true;
2282
2297
  }
2283
- async function beforeHandler(request) {
2298
+ async function beforeHandlerCheckExpires(request) {
2299
+ const expires = localStorage.getItem(expiresTokenStorageName);
2300
+ if (checkExpires(expires)) {
2301
+ return;
2302
+ }
2303
+ await refetchAfterRefreshFlow(request);
2304
+ }
2305
+ async function beforeHandlerSetToken(request) {
2284
2306
  if (processing)
2285
2307
  await waitUntil(() => processing);
2286
2308
  const token = request.token ?? localStorage.getItem(tokenStorageName);
@@ -2292,12 +2314,14 @@ function createOauthProvider(opts = {}) {
2292
2314
  };
2293
2315
  }
2294
2316
  return {
2295
- startRefreshFlowInSubWindow,
2317
+ startRefreshFlow,
2318
+ startLoginFlowInSubWindow,
2296
2319
  startLoginFlow,
2297
2320
  startLogoutFlow,
2298
- register,
2299
2321
  refetchAfterRefreshFlow,
2300
- beforeHandler,
2322
+ beforeHandlerSetToken,
2323
+ beforeHandlerCheckExpires,
2324
+ register,
2301
2325
  get isServicePage() {
2302
2326
  return [errorPageUrl, clearPageUrl, logoutPageUrl].some((u) => document.location.pathname === u);
2303
2327
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/constants/errors.ts","../../src/constants/environment.ts","../../src/constants/index.ts","../../src/lib/utils/wait-until.ts","../../src/lib/date/date-difference.ts","../../src/lib/date/get-date-by-rules.ts","../../src/lib/date/get-today.ts","../../src/lib/date/is-today.ts","../../src/lib/typings/check-type.ts","../../src/lib/typings/is-array.ts","../../src/lib/typings/is-boolean.ts","../../src/lib/typings/is-number.ts","../../src/lib/typings/is-string.ts","../../src/lib/typings/is-id.ts","../../src/lib/typings/is-null.ts","../../src/lib/typings/is-nullable.ts","../../src/lib/typings/is-object.ts","../../src/lib/typings/is-undefined.ts","../../src/lib/typings/is-date.ts","../../src/lib/typings/is-primitive.ts","../../src/lib/date/date-format.ts","../../src/lib/date/transform-to-dayjs.ts","../../src/lib/utils/transform-to-number.ts","../../src/lib/utils/field-view-format.ts","../../src/lib/utils/json-parse.ts","../../src/lib/utils/random-string.ts","../../src/lib/utils/wait.ts","../../src/lib/utils/build-query-string.ts","../../src/lib/utils/create-url-with-queries.ts","../../src/lib/utils/trim-url.ts","../../src/lib/utils/array-to-map-by-key.ts","../../src/lib/lodash/get-by-path.ts","../../src/lib/lodash/set-by-path.ts","../../src/lib/utils/sync-object-values.ts","../../src/lib/utils/random-number.ts","../../src/lib/utils/get-file-name-from-header.ts","../../src/lib/utils/limit-stream-of-requests.ts","../../src/lib/utils/start-with.ts","../../src/lib/utils/get-caller-function-name.ts","../../src/lib/utils/translit.ts","../../src/lib/utils/join-paths.ts","../../src/lib/utils/speed-test.ts","../../src/lib/utils/create-global-id.ts","../../src/lib/utils/create-local-id-generator.ts","../../src/lib/utils/declination.ts","../../src/lib/utils/async-loop.ts","../../src/lib/utils/random-base64.ts","../../src/lib/utils/random-hex.ts","../../src/lib/browser/download-file.ts","../../src/lib/browser/download-json.ts","../../src/lib/browser/read-file.ts","../../src/lib/browser/get-visible-position.ts","../../src/lib/browser/get-query-values.ts","../../src/lib/browser/exec-animation.ts","../../src/lib/browser/copy-to-clipboard.ts","../../src/lib/browser/extract-queries.ts","../../src/lib/colors/get-color-format.ts","../../src/lib/colors/transform-hex-to-rgb.ts","../../src/lib/colors/transform-rgb-to-rgba.ts","../../src/lib/colors/transform-rgba-to-rgb.ts","../../src/lib/colors/take-opacity-colors.ts","../../src/lib/colors/transform-to-color.ts","../../src/lib/colors/get-random-color.ts","../../src/lib/lodash/type.ts","../../src/lib/lodash/clone-deep.ts","../../src/lib/lodash/debounce.ts","../../src/lib/lodash/difference.ts","../../src/lib/lodash/difference-by.ts","../../src/lib/lodash/difference-with.ts","../../src/lib/lodash/is-equal.ts","../../src/lib/lodash/throttle.ts","../../src/api/api.constants.ts","../../src/api/api.ts","../../src/api/oauth.ts","../../src/api/after/logger-after-handler.ts","../../src/api/before/logger-before-handler.ts"],"sourcesContent":["import type { RequestHeader } from \"../api\";\n\ntype ResponseErrorOptions = {\n message: string;\n status: number;\n code?: number;\n description?: unknown;\n headers?: RequestHeader;\n};\n\nexport class ResponseError extends Error {\n status: number;\n code?: number;\n description?: unknown;\n headers?: RequestHeader;\n\n constructor({ message, status, description, code, headers }: ResponseErrorOptions) {\n super(message);\n this.status = status;\n this.description = description;\n this.code = code;\n this.headers = headers;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n\nexport const IS_JEST = typeof process != \"undefined\" && process.env.JEST_WORKER_ID !== undefined;\n\nexport const IS_BUN = typeof process !== \"undefined\" && process?.versions?.bun != undefined;\n\nexport const IS_DENO =\n // @ts-expect-error\n typeof Deno !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version.deno !== \"undefined\";\n\nexport const IS_NODE = typeof process !== \"undefined\" && process?.versions?.node != undefined;\n\nexport const IS_WEB_WORKER =\n typeof self === \"object\" &&\n self.constructor &&\n self.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const IS_BROWSER = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n","export * from \"./errors\";\nexport * from \"./environment\";\n\nexport const COLOR_FORMATS = {\n Hex: \"HEX\",\n Rgb: \"RGB\",\n Rgba: \"RGBA\",\n Hsl: \"HSL\",\n} as const;\n\nexport const DATE_TYPES = {\n Days: \"days\",\n Months: \"months\",\n Years: \"years\",\n Seconds: \"seconds\",\n Minutes: \"minutes\",\n Hours: \"hours\",\n} as const;\n\nexport const FIELD_TYPES = {\n Date: \"date\",\n Time: \"time\",\n DateTime: \"dateTime\",\n String: \"string\",\n Number: \"number\",\n Array: \"array\",\n} as const;\n","export const waitUntil = (condition: () => boolean, checkInterval = 100) => {\n return new Promise((resolve) => {\n const interval = setInterval(() => {\n if (condition()) return;\n clearInterval(interval);\n resolve(true);\n }, checkInterval);\n });\n};\n","import dayjs from \"dayjs\";\nimport type { DateType } from \"../../types\";\n\ntype DateDifference = {\n type: DateType;\n firstDate: Date;\n secondDate?: Date;\n float?: boolean;\n};\n\nexport function dateDifference({\n firstDate,\n float = false,\n secondDate = new Date(),\n type,\n}: DateDifference) {\n const first = dayjs(firstDate);\n\n return first.diff(secondDate, type, float);\n}\n","import { DATE_TYPES } from \"../../constants\";\nimport { type DateGetterRule, type DateType } from \"../../types\";\n\nexport function getDateByRules(rules: DateGetterRule[], date: Date = new Date()) {\n let result = new Date(date);\n for (const rule of rules) {\n result = getDate(rule.increment, rule.type, result);\n }\n\n return result;\n}\n\nfunction getDate(increment: number, type: DateType, date: Date = new Date()) {\n const result = new Date(date);\n switch (type) {\n case DATE_TYPES.Days: {\n result.setDate(result.getDate() + increment);\n\n return result;\n }\n case DATE_TYPES.Months: {\n result.setMonth(result.getMonth() + increment);\n\n return result;\n }\n case DATE_TYPES.Years: {\n result.setFullYear(result.getFullYear() + increment);\n\n return result;\n }\n case DATE_TYPES.Seconds: {\n result.setSeconds(result.getSeconds() + increment);\n\n return result;\n }\n case DATE_TYPES.Minutes: {\n result.setMinutes(result.getMinutes() + increment);\n\n return result;\n }\n case DATE_TYPES.Hours: {\n result.setHours(result.getHours() + increment);\n\n return result;\n }\n default:\n return result;\n }\n}\n","export function getToday() {\n const startToday = new Date();\n startToday.setHours(0, 0, 0, 0);\n const endToday = new Date();\n endToday.setHours(23, 59, 59, 999);\n\n return { startToday, endToday };\n}\n","import type { Maybe } from \"../../types\";\n\nexport function isToday(date: Maybe<string | Date | number>) {\n if (date == undefined) return false;\n\n try {\n const checkedDate = new Date(date);\n const now = new Date();\n\n return (\n ((checkedDate.getFullYear() << 16) |\n (checkedDate.getMonth() << 8) |\n checkedDate.getDate()) ===\n ((now.getFullYear() << 16) | (now.getMonth() << 8) | now.getDate())\n );\n } catch {\n return false;\n }\n}\n","export function checkType<R>(value: unknown, condition: boolean): value is R {\n if (condition) {\n return true;\n }\n\n return false;\n}\n","export function isArray(value: unknown): value is unknown[] {\n return Boolean(value && Array.isArray(value));\n}\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","export function isNumber(value: unknown): value is number {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n","export function isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n","import { isNumber } from \"./is-number\";\nimport { isString } from \"./is-string\";\n\nexport function isId(value: unknown): value is number | string {\n return isNumber(value) || isString(value);\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","export function isNullable(value: unknown): value is null | undefined {\n return typeof value === \"undefined\" || value === null;\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === \"undefined\";\n}\n","export function isDate(value: unknown): value is Date {\n if (value instanceof Date) return !Number.isNaN(value.valueOf());\n\n return false;\n}\n","export function isPrimitive(value: unknown): value is string | number | boolean | null | undefined {\n const type = typeof value;\n\n return value == undefined || (type != \"object\" && type != \"function\");\n}\n","import dayjs from \"dayjs\";\nimport { isDate } from \"../typings\";\n\nexport function dateFormat(date: Date | string | number, format: string) {\n const correctDate = new Date(date);\n\n if (!isDate(correctDate)) return \"\";\n\n return dayjs(correctDate).format(format);\n}\n","import dayjs, { type Dayjs } from \"dayjs\";\n\nexport function transformToDayjs(date: Date | string | number): Dayjs {\n return dayjs(date);\n}\n","import { isString } from \"../typings\";\n\nexport function transformToNumber(value: unknown) {\n let result: number | undefined;\n\n if (isString(value)) result = parseInt(value, 10);\n else result = Number(value);\n\n return Number.isNaN(result) ? 0 : result;\n}\n","import { FIELD_TYPES } from \"../../constants\";\nimport type { FieldType } from \"../../types\";\nimport { dateFormat } from \"../date\";\nimport { isArray, isBoolean, isDate, isNumber, isString } from \"../typings\";\nimport { transformToNumber } from \"./transform-to-number\";\n\nexport function fieldViewFormat(field: unknown, type: FieldType = \"string\") {\n switch (type) {\n case FIELD_TYPES.Array: {\n return isArray(field) ? field.join(\", \") : \"\";\n }\n case FIELD_TYPES.Date: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY\")\n : \"\";\n }\n case FIELD_TYPES.DateTime: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY HH:mm\")\n : \"\";\n }\n case FIELD_TYPES.Number: {\n return isString(field) || isNumber(field) || isBoolean(field)\n ? String(transformToNumber(field))\n : \"\";\n }\n case FIELD_TYPES.String: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n case FIELD_TYPES.Time: {\n return isString(field) || isNumber(field) || isDate(field) ? dateFormat(field, \"HH:mm\") : \"\";\n }\n default: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n }\n}\n","import { isString } from \"../typings\";\n\nexport function jsonParse<T>(json: unknown): T | null {\n if (!isString(json)) return null;\n\n try {\n return JSON.parse(json) as T;\n } catch {\n return null;\n }\n}\n","const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nexport function randomString(length: number = 16, allowCharacters: string = characters) {\n let result = \"\";\n let counter = 0;\n\n while (counter < length) {\n result += allowCharacters.charAt(Math.floor(Math.random() * allowCharacters.length));\n counter += 1;\n }\n\n return result;\n}\n","export function wait(delay: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, delay);\n });\n}\n","import type { RequestQuery } from \"../../api\";\nimport { isArray, isObject } from \"../typings\";\n\nexport function buildQueryString(params: RequestQuery): string {\n const queryString: string[] = [];\n\n for (const [key, value] of Object.entries(params)) {\n if (isObject(value) || value == undefined) continue;\n\n if (isArray(value)) {\n for (const item of value) {\n if (item != undefined && !isObject(item))\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);\n }\n } else {\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n }\n\n return queryString.join(\"&\");\n}\n","import type { RequestQuery } from \"../../api\";\nimport { buildQueryString } from \"./build-query-string\";\n\ntype CreateURLOptionsInterface = {\n baseURL: string;\n params?: RequestQuery;\n};\n\nexport function createURLWithQueries(options: CreateURLOptionsInterface): string {\n const url = options.baseURL;\n\n if (!options.params) {\n return url;\n }\n\n const queryString = buildQueryString(options.params);\n\n return `${url}?${queryString}`;\n}\n","export function trimUrl(url: string) {\n return url.replace(/^\\//, \"\").replace(/\\/$/, \"\");\n}\n","import { isId } from \"../typings\";\n\nexport function arrayToMapByKey<T extends Record<string, unknown>>(\n array: T[],\n key: keyof T,\n): Record<string, T> {\n const map: Record<string, T> = {};\n\n for (const item of array) {\n const keyValue = item[key] as unknown;\n if (isId(keyValue)) map[keyValue] = item;\n }\n\n return map;\n}\n","/* eslint-disable max-depth */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isArray, isObject, isString } from \"../typings\";\n\nconst startArray = \"[\".codePointAt(0)!;\nconst endArray = \"]\".codePointAt(0)!;\nconst separator = \".\".codePointAt(0)!;\nconst numbers = new Set(\n [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"].map((n) => n.codePointAt(0)!),\n);\nexport function getByPath<T, D = undefined>(\n data: unknown,\n path: string | undefined,\n defaultValue?: D,\n): T | D {\n if (!isString(path) || (!isObject(data) && !isArray(data))) return defaultValue as D;\n\n let cursor = 0;\n let pathStart = 0;\n let arrayPathStart = -1;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let extractedData: any = data;\n\n try {\n while (cursor < path.length) {\n const char = path.codePointAt(cursor)!;\n\n if (char === separator) {\n arrayPathStart = -1;\n if (pathStart === cursor) {\n pathStart++;\n } else {\n if (extractedData == undefined || typeof extractedData !== \"object\")\n return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, cursor)];\n\n pathStart = cursor + 1;\n }\n /** start array path if not started yet */\n } else if (char === startArray && arrayPathStart === -1) {\n arrayPathStart = cursor;\n /** end array if its started min 2 char ago */\n } else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {\n /** before array was an object path */\n if (pathStart < arrayPathStart) {\n if (extractedData == undefined || typeof extractedData !== \"object\")\n return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, arrayPathStart)];\n }\n\n const index = +path.slice(arrayPathStart + 1, cursor);\n if (!Array.isArray(extractedData)) return defaultValue as D;\n extractedData = extractedData[index];\n\n arrayPathStart = -1;\n pathStart = cursor + 1;\n\n /** if array started but char is not number */\n } else if (arrayPathStart !== -1 && !numbers.has(char)) {\n arrayPathStart = -1;\n }\n cursor++;\n }\n\n if (pathStart < path.length) {\n if (extractedData == undefined || typeof extractedData !== \"object\") return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, cursor)];\n }\n } catch {\n return defaultValue as D;\n }\n\n if (extractedData === undefined) {\n return defaultValue as D;\n }\n\n return extractedData as T;\n}\n","/* eslint-disable max-depth */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isArray, isObject } from \"../typings\";\nimport { isString } from \"../typings\";\n\nconst startArray = \"[\".codePointAt(0)!;\nconst endArray = \"]\".codePointAt(0)!;\nconst separator = \".\".codePointAt(0)!;\nconst numbers = new Set(\n [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"].map((n) => n.codePointAt(0)!),\n);\nexport function setByPath(data: unknown, path: string | undefined, settableValue: unknown) {\n if (!isString(path) || (!isObject(data) && !isArray(data))) return false;\n\n let cursor = 0;\n let pathStart = 0;\n let arrayPathStart = -1;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let extractedData: any = data;\n let prevPath: string | number | undefined;\n\n try {\n while (cursor < path.length) {\n const char = path.codePointAt(cursor)!;\n /** get */\n if (char === separator) {\n arrayPathStart = -1;\n if (pathStart === cursor) {\n pathStart++;\n } else {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n\n if (cursor === path.length - 1) {\n extractedData[path.slice(pathStart, cursor)] = settableValue;\n } else {\n const currentPath = path.slice(pathStart, cursor);\n const extractedValue = extractedData[currentPath];\n if (extractedValue == undefined) {\n prevPath = currentPath;\n } else {\n extractedData = extractedValue;\n }\n pathStart = cursor + 1;\n }\n }\n\n /** start array path if not started yet */\n } else if (char === startArray && arrayPathStart === -1) {\n arrayPathStart = cursor;\n /** end array if its started min 2 char ago */\n } else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {\n /** before array was an object path */\n if (pathStart < arrayPathStart) {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n const currentPath = path.slice(pathStart, arrayPathStart);\n const extractedValue = extractedData[currentPath];\n if (extractedValue == undefined) {\n prevPath = currentPath;\n } else {\n extractedData = extractedValue;\n }\n }\n\n if (prevPath) {\n const array: unknown[] = [];\n extractedData[prevPath] = array;\n extractedData = array;\n }\n const index = +path.slice(arrayPathStart + 1, cursor);\n if (cursor === path.length - 1) {\n extractedData[index] = settableValue;\n } else {\n const extractedValue = extractedData[index];\n if (extractedValue == undefined) {\n prevPath = index;\n } else {\n extractedData = extractedValue;\n }\n }\n arrayPathStart = -1;\n pathStart = cursor + 1;\n\n /** if array started but char is not number */\n } else if (arrayPathStart !== -1 && !numbers.has(char)) {\n arrayPathStart = -1;\n }\n cursor++;\n }\n\n if (pathStart < path.length) {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n extractedData[path.slice(pathStart, cursor)] = settableValue;\n }\n } catch {\n return false;\n }\n\n return true;\n}\n","import { getByPath } from \"../lodash/get-by-path\";\nimport { setByPath } from \"../lodash/set-by-path\";\nimport { isUndefined } from \"../typings\";\n\nexport function syncObjectValues(\n oldObj: Record<string, unknown>,\n newObj: Record<string, unknown>,\n exception: string[] = [],\n) {\n for (const field in newObj) {\n if (exception.includes(field)) continue;\n\n const oldValue = getByPath(oldObj, field, undefined);\n const newValue = getByPath(newObj, field, undefined);\n\n if (isUndefined(oldValue) || isUndefined(newValue)) continue;\n if (oldValue === newValue) continue;\n\n setByPath(oldObj, field, newValue);\n }\n}\n","export function randomNumber(\n min: number = Number.MIN_SAFE_INTEGER,\n max: number = Number.MAX_SAFE_INTEGER,\n) {\n min = Math.ceil(min);\n max = Math.floor(max + 1);\n\n return Math.floor(Math.random() * (max - min) + min);\n}\n","const filenameVariables = [\"filename=\", \"filename*=UTF-8''\"];\n\nexport function getFileNameFromHeader(header: string) {\n const name = header\n .split(\";\")\n .find((info) => ~info.indexOf(filenameVariables[0]) || ~info.indexOf(filenameVariables[1]))\n ?.replace(filenameVariables[0], \"\")\n ?.replace(filenameVariables[1], \"\")\n ?.replace(/\"/g, \"\")\n ?.trim();\n\n return name ? decodeURI(name) : null;\n}\n","import { wait } from \"./wait\";\n\ntype LimitStreamOfRequestsOptions<T> = {\n countRequests: number;\n maxCountInParallel: number;\n promiseGetter: (count: number) => Promise<T>;\n refetchAfterError?: boolean;\n maxTryCount?: number;\n tryDelay?: number;\n collectResult?: boolean;\n resultCb?: (result: T) => void;\n throwError?: boolean;\n errorCb?: (error: unknown, position: number, tryCount: number) => void;\n};\n\nexport function limitStreamOfRequests<T>({\n countRequests,\n maxCountInParallel,\n promiseGetter,\n refetchAfterError,\n resultCb,\n collectResult,\n maxTryCount = 3,\n tryDelay = 1000,\n throwError,\n errorCb,\n}: LimitStreamOfRequestsOptions<T>): { promise: Promise<T[]>; cancel: () => void } {\n let isStopped = false;\n\n if (maxCountInParallel > countRequests) maxCountInParallel = countRequests;\n\n return {\n cancel: () => {\n isStopped = true;\n },\n promise: new Promise((resolve, reject) => {\n let requestsAmount = 0;\n let responsesAmount = 0;\n let requestInProgress = 0;\n const results: T[] = [];\n\n for (let i = 0; i < maxCountInParallel; i++) {\n request(++requestsAmount);\n }\n\n function request(position: number, tryCount: number = 1) {\n if (isStopped) return void resolve(results);\n if (responsesAmount === countRequests) return void resolve(results);\n if (position > countRequests) {\n if (requestInProgress === 0) {\n return void resolve(results);\n }\n\n return;\n }\n const promise = promiseGetter(position);\n requestInProgress++;\n Promise.resolve(promise)\n .then((result) => {\n requestInProgress--;\n if (collectResult) results.push(result);\n if (resultCb) resultCb(result);\n responsesAmount++;\n request(++requestsAmount);\n })\n .catch((error: unknown) => {\n requestInProgress--;\n if (errorCb) errorCb(error, position, tryCount);\n if (refetchAfterError && maxTryCount > tryCount) {\n return void wait(tryDelay).then(() => request(position, tryCount + 1));\n }\n if (throwError) {\n reject(error);\n }\n responsesAmount++;\n request(++requestsAmount);\n });\n }\n }),\n };\n}\n","export function startWith(string: string, mask: string) {\n const maskSize = mask.length;\n let pos = 0;\n\n while (pos < maskSize) {\n if (string.codePointAt(pos) !== mask.codePointAt(pos)) return false;\n pos++;\n }\n\n return true;\n}\n","export function getCallerFunctionName() {\n try {\n const error = new Error();\n if (!error.stack) throw error;\n const stack = error.stack.split(\"\\n\");\n\n if (stack[2]) {\n const callerLine = stack[2].trim();\n const match = /at (\\w+)/.exec(callerLine);\n if (match) {\n return match[1];\n }\n }\n } catch {}\n\n return null;\n}\n","const translitDict: Record<string, string> = {\n А: \"A\",\n Б: \"B\",\n В: \"V\",\n Г: \"G\",\n Д: \"D\",\n Е: \"E\",\n Ё: \"YO\",\n Ж: \"ZH\",\n З: \"Z\",\n И: \"I\",\n Й: \"Y\",\n К: \"K\",\n Л: \"L\",\n М: \"M\",\n Н: \"N\",\n О: \"O\",\n П: \"P\",\n Р: \"R\",\n С: \"S\",\n Т: \"T\",\n У: \"U\",\n Ф: \"F\",\n Х: \"KH\",\n Ц: \"TS\",\n Ч: \"CH\",\n Ш: \"SH\",\n Щ: \"SCH\",\n Ъ: \"\",\n Ы: \"Y\",\n Ь: \"\",\n Э: \"E\",\n Ю: \"YU\",\n Я: \"YA\",\n а: \"a\",\n б: \"b\",\n в: \"v\",\n г: \"g\",\n д: \"d\",\n е: \"e\",\n ё: \"yo\",\n ж: \"zh\",\n з: \"z\",\n и: \"i\",\n й: \"y\",\n к: \"k\",\n л: \"l\",\n м: \"m\",\n н: \"n\",\n о: \"o\",\n п: \"p\",\n р: \"r\",\n с: \"s\",\n т: \"t\",\n у: \"u\",\n ф: \"f\",\n х: \"kh\",\n ц: \"ts\",\n ч: \"ch\",\n ш: \"sh\",\n щ: \"sch\",\n ъ: \"\",\n ы: \"y\",\n ь: \"\",\n э: \"e\",\n ю: \"yu\",\n я: \"ya\",\n \" \": \"_\",\n A: \"A\",\n B: \"B\",\n C: \"C\",\n D: \"D\",\n E: \"E\",\n F: \"F\",\n G: \"G\",\n H: \"H\",\n I: \"I\",\n J: \"J\",\n K: \"K\",\n L: \"L\",\n M: \"M\",\n N: \"N\",\n O: \"O\",\n P: \"P\",\n Q: \"Q\",\n R: \"R\",\n S: \"S\",\n T: \"T\",\n U: \"U\",\n V: \"V\",\n W: \"W\",\n X: \"X\",\n Y: \"Y\",\n Z: \"Z\",\n a: \"a\",\n b: \"b\",\n c: \"c\",\n d: \"d\",\n e: \"e\",\n f: \"f\",\n g: \"g\",\n h: \"h\",\n i: \"i\",\n j: \"j\",\n k: \"k\",\n l: \"l\",\n m: \"m\",\n n: \"n\",\n o: \"o\",\n p: \"p\",\n q: \"q\",\n r: \"r\",\n s: \"s\",\n t: \"t\",\n u: \"u\",\n v: \"v\",\n w: \"w\",\n x: \"x\",\n y: \"y\",\n z: \"z\",\n \"0\": \"0\",\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n};\n\nexport function translit(text: string) {\n return text\n .split(\"\")\n .map((char) => translitDict[char] || \"\")\n .join(\"\");\n}\n","export function joinPaths(...parts: string[]) {\n return parts\n .reduce((result: string[], part) => {\n const trimedPart = part.trim().replace(/^\\/+|\\/+$/g, \"\");\n if (trimedPart.length > 0) result.push(trimedPart);\n\n return result;\n }, [])\n .join(\"/\");\n}\n","type SpeedTestOptions = {\n name: string;\n iterations?: number;\n type?: \"time\" | \"performance\";\n};\n\nexport function speedTest<T>(cb: (i: number) => T, opts: SpeedTestOptions): T {\n const { name, iterations = 10000, type = \"performance\" } = opts;\n let result: T | undefined;\n\n if (type === \"performance\") {\n const start = performance.now();\n\n if (iterations <= 1) {\n result = cb(0);\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb(i);\n }\n }\n\n const end = performance.now();\n // eslint-disable-next-line no-console\n console.log(`${name}: `, end - start);\n } else {\n // eslint-disable-next-line no-console\n console.time(name);\n\n if (iterations <= 1) {\n result = cb(0);\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb(i);\n }\n }\n\n // eslint-disable-next-line no-console\n console.timeEnd(name);\n }\n\n return result as T;\n}\n","let id = 0;\n\nexport function createGlobalId() {\n return id++;\n}\n","import { createGlobalId } from \"./create-global-id\";\n\nexport function createLocalIdGenerator(): () => number {\n let localLastId = 0;\n const globalLastId = createGlobalId() << 14;\n\n return function generateId() {\n return (globalLastId | localLastId++) >>> 0;\n };\n}\n","export function declination(value: number, words: [string, string, string]) {\n value = Math.abs(value) % 100;\n const num = value % 10;\n if (value > 10 && value < 20) return words[2];\n if (num > 1 && num < 5) return words[1];\n if (num == 1) return words[0];\n\n return words[2];\n}\n","import { wait } from \"./wait\";\n\ntype AsyncLoopOptions = {\n syncOperations?: number;\n start?: number;\n};\nexport async function asyncLoop(\n cb: (index: number) => void,\n length: number,\n { start = 0, syncOperations = 10000 }: AsyncLoopOptions = {},\n) {\n let index = start;\n\n while (index < start + syncOperations && index < length) {\n cb(index);\n index++;\n }\n\n if (index < length) {\n await wait(0);\n\n return asyncLoop(cb, length, { start: index, syncOperations });\n }\n}\n","export function randomBase64(byteLength = 8) {\n const randomBytes = new Uint8Array(byteLength);\n window.crypto.getRandomValues(randomBytes);\n\n let binaryString = \"\";\n for (let i = 0; i < byteLength; i++) {\n binaryString += String.fromCharCode(randomBytes[i]);\n }\n\n return btoa(binaryString).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/[=]+$/, \"\");\n}\n","export function randomHex(byteLength = 8) {\n const randomBytes = new Uint8Array(byteLength);\n window.crypto.getRandomValues(randomBytes);\n\n let result = \"\";\n for (let i = 0; i < byteLength; i++) {\n result += randomBytes[i].toString(16).padStart(2, \"0\");\n }\n\n return result;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { getFileNameFromHeader } from \"../utils\";\n\ntype DownloadFileOptions = {\n data: Blob;\n fileName: string;\n mimeType: string;\n};\n\nexport function downloadFile({ data, fileName, mimeType }: DownloadFileOptions) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const name = getFileNameFromHeader(fileName);\n if (!name) throw new Error(\"Bad filename\");\n\n const blob = new Blob([data], {\n type: mimeType,\n });\n\n const downloadUrl = window.URL.createObjectURL(blob);\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = downloadUrl;\n\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n link.remove();\n window.URL.revokeObjectURL(downloadUrl);\n\n return null;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function downloadJson(data: unknown, name: string) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const url = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(data))}`;\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function readFile(file: File) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(null);\n\n return;\n }\n\n const reader = new FileReader();\n reader.readAsText(file);\n\n reader.onload = () => {\n resolve(reader.result);\n };\n\n reader.onerror = () => {\n resolve(null);\n };\n });\n}\n","type XPositions = \"insideCenter\" | \"insideLeft\" | \"insideRight\" | \"right\" | \"left\";\ntype YPosition = \"insideCenter\" | \"insideTop\" | \"insideBottom\" | \"bottom\" | \"top\";\n\nexport type PositionPlacements =\n | \"bottom-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"right-center\"\n | \"right-top\"\n | \"right-bottom\"\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"left-center\"\n | \"left-top\"\n | \"left-bottom\"\n | \"flex\";\n\nexport type VisiblePosition = {\n top: number;\n left: number;\n right: number;\n bottom: number;\n placement: PositionPlacements;\n};\n\ntype InitialVisiblePosition = {\n top: number;\n left: number;\n placement: PositionPlacements;\n};\n\ntype InitialPosition = {\n targetNode?: HTMLElement;\n position?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n};\ntype GetVisiblePositionOptions = {\n node: HTMLElement;\n initialPosition?: InitialPosition;\n visibleArea?: HTMLElement;\n placement?: Exclude<PositionPlacements, \"flex\">;\n stepX?: number;\n stepY?: number;\n flex?: boolean;\n nested?: boolean;\n};\nexport function getVisiblePosition({\n initialPosition,\n node,\n visibleArea,\n placement = \"bottom-center\",\n stepX = placement === \"bottom-center\" ||\n placement === \"bottom-left\" ||\n placement === \"bottom-right\" ||\n placement === \"top-left\" ||\n placement === \"top-center\" ||\n placement === \"top-right\"\n ? 0\n : 10,\n stepY = placement === \"left-bottom\" ||\n placement === \"left-center\" ||\n placement === \"left-top\" ||\n placement === \"right-bottom\" ||\n placement === \"right-top\" ||\n placement === \"right-center\"\n ? 0\n : 10,\n flex,\n nested,\n}: GetVisiblePositionOptions): VisiblePosition {\n /** Viewport Variables */\n const totalHeight = document.body.scrollHeight;\n const totalWidth = document.body.scrollWidth;\n const viewport = visibleArea ?? document.body;\n const scrollTop = document.body.scrollTop;\n const scrollLeft = document.body.scrollLeft;\n const rect = viewport.getBoundingClientRect();\n const viewportWidth = viewport.clientWidth;\n const viewportHeight = viewport.clientHeight;\n const xStart = visibleArea ? viewport.offsetLeft - viewport.scrollLeft : Math.abs(rect.left);\n const xEnd = xStart + viewportWidth;\n const yStart = visibleArea ? viewport.offsetTop : Math.abs(rect.top);\n const yEnd = yStart + viewportHeight;\n\n /** Target Variables */\n let targetHeight = 0;\n let targetWidth = 0;\n let targetTopPosition = 0;\n let targetLeftPosition = 0;\n\n /** Not bounding because not need scale */\n const nodeHeight = node.clientHeight;\n const nodeWidth = node.clientWidth;\n\n if (initialPosition?.targetNode) {\n const { top, left, height, width } = initialPosition.targetNode.getBoundingClientRect();\n targetHeight = height;\n targetWidth = width;\n targetTopPosition = top + scrollTop;\n targetLeftPosition = left + scrollLeft;\n }\n if (initialPosition?.position) {\n if (initialPosition.position.x != undefined) {\n targetLeftPosition = initialPosition.position.x + scrollLeft;\n }\n if (initialPosition.position.y != undefined) {\n targetTopPosition = initialPosition.position.y + scrollTop;\n }\n if (initialPosition.position.height != undefined) {\n targetHeight = initialPosition.position.height;\n }\n if (initialPosition.position.width != undefined) {\n targetWidth = initialPosition.position.width;\n }\n }\n\n /** Inherit Position */\n let inheritLeft = 0;\n let inheritTop = 0;\n let inheritHeight = 0;\n let inheritWidth = 0;\n if (nested) {\n const {\n left = 0,\n top = 0,\n height = 0,\n width = 0,\n } = node.parentElement?.getBoundingClientRect?.() ?? {};\n inheritLeft = left + scrollLeft;\n inheritTop = top + scrollTop;\n inheritHeight = height;\n inheritWidth = width;\n }\n\n /** Initial Position */\n const targetXCenter =\n targetWidth != undefined ? targetLeftPosition + targetWidth / 2 : targetLeftPosition;\n const targetYCenter =\n targetHeight != undefined ? targetTopPosition + targetHeight / 2 : targetTopPosition;\n const targetYEnd =\n targetHeight != undefined ? targetTopPosition + targetHeight : targetTopPosition;\n\n const x: Record<XPositions, number> = {\n insideCenter: targetXCenter - nodeWidth / 2 + stepX,\n insideRight: targetLeftPosition + targetWidth + stepX - nodeWidth,\n insideLeft: targetLeftPosition + stepX,\n left: targetLeftPosition - nodeWidth - stepX,\n right: targetLeftPosition + targetWidth + stepX,\n };\n\n const y: Record<YPosition, number> = {\n bottom: targetYEnd + stepY,\n top: targetTopPosition - stepY - nodeHeight,\n insideCenter: targetYCenter - nodeHeight / 2 + stepY,\n insideBottom: targetTopPosition + targetHeight - nodeHeight + stepY,\n insideTop: targetTopPosition + stepY,\n };\n /** Find visible position */\n function isCompletelyVisibleX(left: number) {\n const endXPosition = nodeWidth + left;\n\n return xStart <= left && xEnd >= endXPosition;\n }\n function isCompletelyVisibleY(top: number) {\n const endYPosition = nodeHeight + top;\n\n return yStart <= top && yEnd >= endYPosition;\n }\n\n let visiblePositions = processVisiblePositions({\n targetLeftPosition,\n targetTopPosition,\n x,\n y,\n placement,\n flex,\n nodeHeight,\n nodeWidth,\n xEnd,\n xStart,\n yEnd,\n yStart,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n });\n if (\n flex &&\n (!isCompletelyVisibleX(visiblePositions.left) || !isCompletelyVisibleY(visiblePositions.top))\n ) {\n visiblePositions = getFlexVisiblePosition({\n initialLeft: visiblePositions.left,\n initialTop: visiblePositions.top,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n });\n }\n\n visiblePositions.left -= inheritLeft;\n visiblePositions.top -= inheritTop;\n\n return {\n placement: visiblePositions.placement,\n left: visiblePositions.left,\n top: visiblePositions.top,\n bottom: nested\n ? inheritHeight - (visiblePositions.top + nodeHeight)\n : totalHeight - (visiblePositions.top + nodeHeight),\n right: nested\n ? inheritWidth - (visiblePositions.left + nodeWidth)\n : totalWidth - (visiblePositions.left + nodeWidth),\n };\n}\n\ntype ProcessVisiblePositions = {\n placement: Exclude<PositionPlacements, \"flex\">;\n x: Record<XPositions, number>;\n y: Record<YPosition, number>;\n targetLeftPosition: number;\n targetTopPosition: number;\n nodeWidth: number;\n nodeHeight: number;\n xStart: number;\n xEnd: number;\n yStart: number;\n yEnd: number;\n flex: boolean | undefined;\n isCompletelyVisibleX: (position: number) => boolean;\n isCompletelyVisibleY: (position: number) => boolean;\n};\nfunction processVisiblePositions(opts: ProcessVisiblePositions): InitialVisiblePosition {\n let correctLeft: number | null = opts.targetLeftPosition;\n let correctTop: number | null = opts.targetTopPosition;\n\n switch (opts.placement) {\n case \"bottom-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-center\";\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-bottom\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"right-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-center\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"right-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-top\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"right-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-center\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-bottom\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"left-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-center\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"left-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-top\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"left-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n default: {\n return {\n top: correctTop,\n left: correctLeft,\n placement: opts.placement,\n };\n }\n }\n}\n\ntype GetFlexVisiblePosition = {\n isCompletelyVisibleY: (top: number) => boolean;\n isCompletelyVisibleX: (left: number) => boolean;\n initialLeft: number;\n initialTop: number;\n xEnd: number;\n yEnd: number;\n nodeWidth: number;\n nodeHeight: number;\n};\n\nfunction getFlexVisiblePosition({\n initialLeft,\n initialTop,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n}: GetFlexVisiblePosition): InitialVisiblePosition {\n if (!isCompletelyVisibleY(initialTop)) {\n initialTop = yEnd - nodeHeight;\n }\n if (!isCompletelyVisibleX(initialLeft)) {\n initialLeft = xEnd - nodeWidth;\n }\n\n return {\n top: initialTop,\n left: initialLeft,\n placement: \"flex\",\n };\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { isArray, isString } from \"../typings\";\n\nexport function getQueryValues<K extends string>(\n keys: K[],\n): Record<K, string | string[] | undefined> | null {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const object: Record<K, string | string[] | undefined> = {} as Record<\n K,\n string | string[] | undefined\n >;\n\n const queries = window.location.search.substring(1).split(\"&\");\n for (const query of queries) {\n const [key, value] = query.split(\"=\");\n if (keys.includes(key as K) && value) {\n const prev = object[key as K];\n if (isArray(prev)) prev.push(value);\n else if (isString(prev)) object[key as K] = [prev, value];\n else object[key as K] = value;\n }\n }\n\n return object;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function execAnimation(\n element: HTMLElement | null | undefined,\n className: string,\n autoCloseDelay: number = 700,\n) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(true);\n\n return;\n }\n\n if (!element) {\n resolve(true);\n\n return;\n }\n\n const timerId = setTimeout(() => {\n resolve(true);\n }, autoCloseDelay);\n\n element.addEventListener(\n \"animationend\",\n () => {\n resolve(true);\n element?.classList?.remove?.(className);\n clearTimeout(timerId);\n },\n {\n once: true,\n },\n );\n element.classList.add(className);\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function copyToClipboard(textToCopy: string) {\n return new Promise<boolean>((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(false);\n\n return;\n }\n\n try {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(textToCopy)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n\n return;\n }\n\n const textArea = document.createElement(\"textarea\");\n textArea.value = textToCopy;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const result = document.execCommand(\"copy\");\n textArea.remove();\n\n resolve(result);\n } catch {\n resolve(false);\n }\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function extractQueries() {\n const queryMap: Record<string, string[] | undefined> = {};\n if (!IS_BROWSER && !IS_JEST) return queryMap;\n\n const queryString = document.location.search;\n queryString\n .replace(/^\\?/, \"\")\n .split(\"&\")\n .forEach((query) => {\n const [key, value] = query.split(\"=\", 2);\n\n queryMap[key] ??= [];\n const prev = queryMap[key];\n prev.push(value);\n });\n\n return queryMap;\n}\n","import { COLOR_FORMATS } from \"../../constants\";\n\nexport function getColorFormat(color: string) {\n if (color.startsWith(\"#\")) {\n return COLOR_FORMATS.Hex;\n }\n if (color.startsWith(\"rgba\")) {\n return COLOR_FORMATS.Rgba;\n }\n if (color.startsWith(\"rgb\")) {\n return COLOR_FORMATS.Rgb;\n }\n if (color.startsWith(\"hsl\")) {\n return COLOR_FORMATS.Hsl;\n }\n}\n","export function transformHEXtoRGB(hex: string) {\n return `rgb(${hex.match(/\\w\\w/g)?.map((x) => +`0x${x}`)})`;\n}\n","export function transformRGBtoRGBA(rgb: string, opacity: number) {\n const code = rgb.match(/\\d+/g);\n code?.push(String(opacity / 100));\n\n return `rgba(${code?.join(\",\")})`;\n}\n","export function transformRGBAtoRGB(rgba: string) {\n const code = rgba.match(/\\d+/g);\n code?.splice(3);\n\n return `rgb(${code?.join(\",\")})`;\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport { getColorFormat } from \"./get-color-format\";\nimport { transformHEXtoRGB } from \"./transform-hex-to-rgb\";\nimport { transformRGBtoRGBA } from \"./transform-rgb-to-rgba\";\nimport { transformRGBAtoRGB } from \"./transform-rgba-to-rgb\";\n\nexport function takeOpacityColors(color: string | undefined, opacities: number[]) {\n let rgbColor = color;\n\n if (!rgbColor) return [];\n\n if (getColorFormat(rgbColor) === COLOR_FORMATS.Hex) {\n rgbColor = transformHEXtoRGB(rgbColor);\n } else if (getColorFormat(rgbColor) === COLOR_FORMATS.Rgba) {\n rgbColor = transformRGBAtoRGB(rgbColor);\n }\n\n if (getColorFormat(rgbColor) !== COLOR_FORMATS.Rgb) return [];\n\n return [...opacities.map((opacity) => transformRGBtoRGBA(rgbColor, opacity))];\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport type { ColorFormat } from \"../../types\";\nimport { isString } from \"../typings\";\nimport { getColorFormat } from \"./get-color-format\";\n\nexport function transformToColor(\n currentColor: unknown,\n defaultColor: string = \"black\",\n defaultFormat: ColorFormat = COLOR_FORMATS.Hex,\n) {\n if (!isString(currentColor)) return defaultColor;\n\n let correctColor = currentColor;\n\n if (!getColorFormat(correctColor)) {\n switch (defaultFormat) {\n case COLOR_FORMATS.Hex: {\n correctColor = `#${correctColor}`;\n break;\n }\n case COLOR_FORMATS.Rgb: {\n correctColor = `rgb(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Rgba: {\n correctColor = `rgba(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Hsl: {\n correctColor = `hsl(${correctColor})`;\n break;\n }\n default: {\n correctColor = `#${correctColor}`;\n break;\n }\n }\n }\n\n return correctColor;\n}\n","export function getRandomColor() {\n const randomColor = Math.floor(Math.random() * 16777215).toString(16);\n\n return `#${randomColor.padStart(6, \"0\")}`;\n}\n","export function type(value: unknown) {\n return value === null\n ? \"Null\"\n : value === undefined\n ? \"Undefined\"\n : Object.prototype.toString.call(value).slice(8, -1);\n}\n","import { isPrimitive } from \"../typings\";\nimport { type } from \"./type\";\n\nexport function cloneDeep<T>(value: T): T {\n if (isPrimitive(value)) {\n return value;\n }\n\n function copy(copiedValue: object) {\n for (const key in value as object) {\n if (Object.hasOwn(value as object, key)) {\n (copiedValue as Record<string, unknown>)[key] = cloneDeep(\n (value as Record<string, unknown>)[key],\n );\n }\n }\n\n return copiedValue;\n }\n\n switch (type(value)) {\n case \"Object\":\n return copy(Object.create(Object.getPrototypeOf(value) as object) as object) as T;\n case \"Array\":\n return copy(Array((value as unknown[]).length)) as T;\n case \"Date\":\n return new Date((value as Date).valueOf()) as T;\n case \"RegExp\":\n return cloneRegExp(value as RegExp) as T;\n case \"Int8Array\":\n case \"Uint8Array\":\n case \"Uint8ClampedArray\":\n case \"Int16Array\":\n case \"Uint16Array\":\n case \"Int32Array\":\n case \"Uint32Array\":\n case \"Float32Array\":\n case \"Float64Array\":\n case \"BigInt64Array\":\n case \"BigUint64Array\":\n return (value as Int8Array).slice() as T;\n default:\n return value;\n }\n}\n\nfunction cloneRegExp(pattern: RegExp) {\n return new RegExp(\n pattern.source,\n pattern.flags\n ? pattern.flags\n : (pattern.global ? \"g\" : \"\") +\n (pattern.ignoreCase ? \"i\" : \"\") +\n (pattern.multiline ? \"m\" : \"\") +\n (pattern.sticky ? \"y\" : \"\") +\n (pattern.unicode ? \"u\" : \"\") +\n (pattern.dotAll ? \"s\" : \"\"),\n );\n}\n","export function debounce<TArgs extends unknown[]>(\n func: (...args: TArgs) => unknown,\n delay: number,\n) {\n let timer: NodeJS.Timeout | undefined;\n let active = true;\n\n const debounced = (...args: TArgs) => {\n if (active) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n if (active) {\n func(...args);\n }\n timer = undefined;\n }, delay);\n } else {\n func(...args);\n }\n };\n debounced.isPending = () => {\n return timer !== undefined;\n };\n debounced.cancel = () => {\n active = false;\n };\n debounced.flush = (...args: TArgs) => {\n func(...args);\n };\n\n return debounced;\n}\n","export function difference<T extends string | number | boolean | null | undefined>(\n first: T[],\n second: T[],\n): T[] {\n let idx = 0;\n const out: T[] = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx])) {\n out[out.length] = first[idx];\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceBy<T extends Record<string, unknown>>(\n first: T[],\n second: T[],\n key: keyof T,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i][key]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx][key])) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceWith<T = unknown>(\n first: T[],\n second: T[],\n extractPrimitive: (el: T) => string | number | boolean | undefined | null,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(extractPrimitive(second[i]));\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(extractPrimitive(first[idx]))) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","import { isObject } from \"../typings\";\n\nexport function isEqual(aVal: unknown, bVal: unknown) {\n if (aVal === bVal) return true;\n\n if (\n aVal == undefined ||\n bVal == undefined ||\n typeof aVal !== \"object\" ||\n typeof bVal !== \"object\"\n ) {\n return aVal === bVal;\n }\n\n if (aVal instanceof Date && bVal instanceof Date) {\n return aVal.getTime() === bVal.getTime();\n }\n\n if (aVal instanceof RegExp && bVal instanceof RegExp) {\n return aVal.toString() === bVal.toString();\n }\n\n if (aVal.constructor !== bVal.constructor) {\n return false;\n }\n\n if (Array.isArray(aVal) && Array.isArray(bVal)) {\n if (aVal.length !== bVal.length) return false;\n for (let i = 0; i < aVal.length; i++) {\n if (!isEqual(aVal[i], bVal[i])) return false;\n }\n\n return true;\n }\n\n if (isObject(aVal) && isObject(bVal)) {\n const keysA = Object.keys(aVal);\n const keysB = Object.keys(bVal);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!isEqual(aVal[key], bVal[key])) return false;\n }\n }\n\n return true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function throttle<TArgs extends any[]>(func: (...args: TArgs) => any, interval: number) {\n let ready = true;\n let timer: NodeJS.Timeout | undefined;\n\n const throttled = (...args: TArgs) => {\n if (!ready) return;\n func(...args);\n ready = false;\n timer = setTimeout(() => {\n ready = true;\n timer = undefined;\n }, interval);\n };\n\n throttled.isThrottled = () => {\n return timer !== undefined;\n };\n\n return throttled;\n}\n","export const RESPONSE_DATA_SYMBOL = Symbol(\"response data\");\nexport const REQUEST_ERROR = {\n Http: \"http\",\n Network: \"network\",\n Timeout: \"timeout\",\n Abort: \"abort\",\n Validation: \"validation\",\n Cache: \"cache\",\n Unknown: \"unknown\",\n Disabled: \"disabled\",\n} as const;\n\nclass OauthState {\n private _fetching: boolean = false;\n\n get fetching() {\n return this._fetching;\n }\n\n set fetching(value: boolean) {\n this._fetching = value;\n }\n}\nexport const OAUTH_STATE = new OauthState();\nexport const OAUTH_TOKEN_STORAGE_NAME = \"session_token\";\nexport const OAUTH_TOKEN_EXPIRES_STORAGE_NAME = \"session_token_expires\";\nexport const OAUTH_REFRESH_QUERY = \"only_session_refresh\";\nexport const OAUTH_ERROR_PAGE_URL = \"/error\";\nexport const OAUTH_CLEAR_PAGE_URL = \"/clear\";\nexport const OAUTH_LOGOUT_PAGE_URL = \"/logout\";\n","import type {\n HeadersInit,\n BodyInit as NodeBodyInit,\n RequestInfo as NodeRequestInfo,\n RequestInit as NodeRequestInit,\n Response as NodeResponse,\n} from \"node-fetch\";\nimport { IS_BROWSER, ResponseError } from \"../constants\";\nimport { createURLWithQueries, downloadFile, isArray, isString, wait } from \"../lib\";\nimport { REQUEST_ERROR, RESPONSE_DATA_SYMBOL } from \"./api.constants\";\nimport type {\n AfterHandler,\n BeforeHandler,\n CreateRequestClientInstance,\n RefetchAfterAuthFn,\n RequestError,\n RequestInterface,\n} from \"./api.types\";\n\nexport function createFetchClient(options: CreateRequestClientInstance) {\n let client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch = options.client;\n let beforeHandlers: BeforeHandler[] | undefined = options.beforeHandlers;\n let afterHandlers: AfterHandler[] | undefined = options.afterHandlers;\n let retries: number[] | undefined = options.retries;\n let timeout: number | undefined = options.timeout;\n let refetchAfterAuthGlobal: RefetchAfterAuthFn | undefined = options.refetchAfterAuth;\n let enabled: boolean = options.enabled ?? true;\n\n function recreate(options: CreateRequestClientInstance) {\n if (\"client\" in options) {\n client = options.client;\n }\n if (\"beforeHandlers\" in options) {\n beforeHandlers = options.beforeHandlers;\n }\n if (\"afterHandlers\" in options) {\n afterHandlers = options.afterHandlers;\n }\n if (\"retries\" in options) {\n retries = options.retries;\n }\n if (\"timeout\" in options) {\n timeout = options.timeout;\n }\n if (\"refetchAfterAuth\" in options) {\n refetchAfterAuthGlobal = options.refetchAfterAuth;\n }\n if (\"enabled\" in options) {\n enabled = options.enabled ?? true;\n }\n }\n\n async function handleRequest<\n IncomingApi = unknown,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<\n | {\n data: ResponseError;\n error: RequestError;\n response: Response | NodeResponse | null;\n }\n | { data: Incoming; error: null; response: Response | NodeResponse | null }\n > {\n if (!enabled) {\n return {\n response: null,\n data: new ResponseError({ message: \"requests disabled\", status: 0 }),\n error: REQUEST_ERROR.Disabled,\n };\n }\n\n const timeoutController = new AbortController();\n const requestController = new AbortController();\n const requestTimeout = request.timeout ?? timeout;\n const requestRetries = request.retries ?? retries;\n\n try {\n if (request.delay) {\n await wait(request.delay);\n }\n if (request.mock) {\n const mock: unknown =\n typeof request.mock === \"function\" ? (request.mock as () => Incoming)() : request.mock;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(mock as IncomingApi)\n : (mock as Incoming);\n\n return { data: transformedResult, error: null, response: null };\n }\n\n if (requestTimeout != undefined && requestTimeout != 0) {\n setTimeout(() => {\n if (requestController.signal.aborted) return;\n timeoutController.abort();\n }, requestTimeout);\n timeoutController.signal.addEventListener(\"abort\", () => requestController.abort(), {\n once: true,\n signal: requestController.signal,\n });\n }\n if (request.signal) {\n request.signal.addEventListener(\"abort\", () => requestController.abort(), {\n once: true,\n signal: requestController.signal,\n });\n }\n\n {\n let handlers: BeforeHandler[] = [];\n if (request.beforeHandlers) {\n handlers = request.beforeHandlers;\n } else if (beforeHandlers) {\n handlers = beforeHandlers;\n }\n if (request.additionalBeforeHandlers) {\n handlers = handlers.concat(request.additionalBeforeHandlers);\n }\n\n if (handlers.length > 0) {\n await executeBeforeHandlers(handlers, request);\n }\n }\n\n const { method, body, path, queries, headers = {} } = request;\n let refetchAfterAuth: RefetchAfterAuthFn | undefined = refetchAfterAuthGlobal;\n if (\"refetchAfterAuth\" in request) {\n refetchAfterAuth = request.refetchAfterAuth;\n }\n\n const url = createURLWithQueries({ baseURL: path, params: queries });\n let [, requestContentType] =\n Object.entries(headers).find(([header]) => header.toLowerCase() === \"content-type\") ?? [];\n if (isArray(requestContentType)) {\n requestContentType = requestContentType[0];\n }\n\n let preparedBody: OutcomingApi = body as OutcomingApi;\n if (request.transformOutcomingData) {\n preparedBody = request.transformOutcomingData(body as Outcoming);\n }\n\n if (\n requestContentType == undefined &&\n !(preparedBody instanceof FormData) &&\n preparedBody !== undefined &&\n !isString(preparedBody)\n ) {\n headers[\"content-type\"] = \"application/json; charset=UTF-8\";\n }\n\n if (\n ((requestContentType == undefined && !isString(preparedBody)) ||\n requestContentType?.toLowerCase()?.includes(\"json\")) &&\n preparedBody !== undefined &&\n !(preparedBody instanceof FormData)\n ) {\n preparedBody = JSON.stringify(preparedBody) as OutcomingApi;\n }\n const response: Response | NodeResponse | undefined = await client(url, {\n method,\n body: preparedBody as ((BodyInit | null) & NodeBodyInit) | undefined,\n headers: headers as globalThis.HeadersInit & HeadersInit,\n signal: requestController.signal as\n | (AbortSignal & NodeRequestInit[\"signal\"])\n | null\n | undefined,\n cache: request.cache,\n credentials: request.credentials,\n integrity: request.integrity,\n keepalive: request.keepalive,\n mode: request.mode,\n priority: request.priority,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n compress: request.compress,\n follow: request.follow,\n });\n\n {\n let handlers: AfterHandler[] = [];\n if (request.afterHandlers) {\n handlers = request.afterHandlers;\n } else if (afterHandlers) {\n handlers = afterHandlers;\n }\n if (request.additionalAfterHandlers) {\n handlers = handlers.concat(request.additionalAfterHandlers);\n }\n\n if (handlers.length > 0) {\n await executeAfterHandlers(handlers, request, response);\n }\n }\n\n if (!response.ok) {\n if (response.status === 304) {\n const error = new ResponseError({\n message: REQUEST_ERROR.Cache,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.Cache, error);\n\n return { data: error, error: REQUEST_ERROR.Cache, response };\n }\n /** if you need observe other than only 401 status, you can override some statuses in after handler middleware to 401 */\n if (response.status === 401 && refetchAfterAuth) {\n const newRequest = await refetchAfterAuth(request);\n\n return await handleRequest({ ...newRequest, refetchAfterAuth: false });\n }\n\n if (request.defaultResponse) {\n const defaultResponse: unknown =\n typeof request.defaultResponse === \"function\"\n ? (request.defaultResponse as () => Incoming)()\n : request.defaultResponse;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(defaultResponse as IncomingApi)\n : (defaultResponse as Incoming);\n\n return {\n data: transformedResult,\n error: null,\n response: null,\n };\n }\n if (requestRetries && requestRetries.length > 0) {\n await wait(requestRetries[0]);\n\n return await handleRequest({ ...request, retries: requestRetries.slice(1) });\n }\n\n let result;\n try {\n const contentType = response.headers.get(\"content-type\");\n\n if (RESPONSE_DATA_SYMBOL in response) {\n result = response[RESPONSE_DATA_SYMBOL];\n } else if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n } catch {}\n\n const error = new ResponseError({\n status: response.status,\n message: REQUEST_ERROR.Http,\n description: result,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.Http, error);\n\n return {\n data: error,\n error: REQUEST_ERROR.Http,\n response,\n };\n }\n\n if (request.download) {\n const data = await response.blob();\n const mimeType = response.headers.get(\"content-type\");\n const fileName = response.headers.get(\"content-disposition\");\n\n if (!mimeType) {\n console.warn(\"couldn't download file because content-type header is not exist\");\n } else if (!fileName) {\n console.warn(\"couldn't download file because content-disposition header is not exist\");\n }\n\n if (IS_BROWSER && mimeType && fileName)\n downloadFile({\n data: data as Blob,\n fileName,\n mimeType,\n });\n\n return {\n data: data as Incoming,\n error: null,\n response,\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result: Incoming | IncomingApi = undefined as Incoming | IncomingApi;\n\n if (RESPONSE_DATA_SYMBOL in response) {\n result = response[RESPONSE_DATA_SYMBOL] as Incoming | IncomingApi;\n } else if (contentType?.includes?.(\"text\")) {\n result = (await response.text()) as Incoming | IncomingApi;\n } else if (contentType?.includes?.(\"json\")) {\n result = (await response.json()) as Incoming | IncomingApi;\n } else {\n result = (await response.blob()) as Incoming | IncomingApi;\n }\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(result as IncomingApi)\n : (result as Incoming);\n\n return {\n data: transformedResult,\n error: null,\n response,\n };\n } catch (err: unknown) {\n if (request.defaultResponse) {\n const defaultResponse: unknown =\n typeof request.defaultResponse === \"function\"\n ? (request.defaultResponse as () => Incoming)()\n : request.defaultResponse;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(defaultResponse as IncomingApi)\n : (defaultResponse as Incoming);\n\n return {\n data: transformedResult,\n error: null,\n response: null,\n };\n }\n if (requestRetries && requestRetries.length > 0 && request?.signal?.aborted !== true) {\n await wait(requestRetries[0]);\n\n return await handleRequest({ ...request, retries: requestRetries.slice(1) });\n }\n\n if (err instanceof TypeError) {\n const error = new ResponseError({\n message: REQUEST_ERROR.Network,\n status: 0,\n description: String(err.message),\n });\n request.onError?.(REQUEST_ERROR.Network, error);\n\n return { data: error, error: REQUEST_ERROR.Network, response: null };\n }\n\n if (err instanceof Error && err.name === \"AbortError\") {\n if (timeoutController.signal.aborted) {\n const error = new ResponseError({\n message: REQUEST_ERROR.Timeout,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.Timeout, error);\n\n return { data: error, error: REQUEST_ERROR.Timeout, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.Abort,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.Abort, error);\n\n return { data: error, error: REQUEST_ERROR.Abort, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.Unknown,\n status: 0,\n description: String(err),\n });\n request.onError?.(REQUEST_ERROR.Unknown, error);\n\n return { data: error, error: REQUEST_ERROR.Unknown, response: null };\n } finally {\n requestController.abort();\n }\n }\n\n async function requestWithArrayResponse<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<\n | [ResponseError, RequestError, Response | NodeResponse | null]\n | [Incoming, null, Response | NodeResponse | null]\n > {\n const response = await handleRequest(request);\n\n return [response.data, response.error, response.response] as\n | [ResponseError, RequestError, Response | NodeResponse | null]\n | [Incoming, null, Response | NodeResponse | null];\n }\n\n async function requestWithObjectResponse<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<\n | {\n data: ResponseError;\n error: RequestError;\n response: Response | NodeResponse | null;\n }\n | { data: Incoming; error: null; response: Response | NodeResponse | null }\n > {\n return handleRequest(request);\n }\n\n return {\n requestWithArrayResponse,\n requestWithObjectResponse,\n recreate,\n };\n}\n\nfunction executeBeforeHandlers<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n>(\n handlers: BeforeHandler[],\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n) {\n return new Promise((resolve) => {\n void (async () => {\n for (const handler of handlers) {\n await handler(request);\n }\n\n resolve(1);\n })();\n });\n}\n\nfunction executeAfterHandlers<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n>(\n handlers: AfterHandler[],\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n response: Response | NodeResponse | undefined,\n) {\n return new Promise((resolve) => {\n void (async () => {\n for (const handler of handlers) {\n await handler(request, response);\n }\n\n resolve(1);\n })();\n });\n}\n","import { getQueryValues, isArray, isString, startWith, wait, waitUntil } from \"../lib\";\nimport {\n OAUTH_CLEAR_PAGE_URL,\n OAUTH_ERROR_PAGE_URL,\n OAUTH_LOGOUT_PAGE_URL,\n OAUTH_REFRESH_QUERY,\n OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n OAUTH_TOKEN_STORAGE_NAME,\n} from \"./api.constants\";\nimport type { OauthOptions, RequestInterface } from \"./api.types\";\n\nexport function createOauthProvider(opts: OauthOptions = {}) {\n const {\n refreshTokenWindowUrl = window.origin,\n closeObserveSubWindowInterval = 500,\n waitSubWindow = 8000,\n loginUrl = undefined,\n logoutUrl = undefined,\n clearPageUrl = OAUTH_CLEAR_PAGE_URL,\n errorPageUrl = OAUTH_ERROR_PAGE_URL,\n logoutPageUrl = OAUTH_LOGOUT_PAGE_URL,\n afterClearPageUrl = \"/\",\n expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenStorageName = OAUTH_TOKEN_STORAGE_NAME,\n expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenRequest = undefined,\n forceSetToken = false,\n subWindow = true,\n refreshToken = false,\n } = opts;\n let processing = false;\n\n async function refetchAfterRefreshFlow<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>> {\n if (processing) {\n await beforeHandler(request);\n return request;\n }\n processing = true;\n if (refreshToken && tokenRequest) {\n const token = await tokenRequest();\n if (token == undefined) {\n if (subWindow) {\n await startRefreshFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandler(request);\n return request;\n }\n localStorage.setItem(tokenStorageName, token);\n processing = false;\n await beforeHandler(request);\n return request;\n }\n if (subWindow) {\n await startRefreshFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandler(request);\n return request;\n }\n\n async function startRefreshFlowInSubWindow() {\n processing = true;\n let waiting = true;\n const url = new URL(\n typeof refreshTokenWindowUrl === \"function\" ? refreshTokenWindowUrl() : refreshTokenWindowUrl,\n );\n // added only refresh tag to autoclose window after flow\n url.searchParams.append(OAUTH_REFRESH_QUERY, \"true\");\n\n // try open window with both of action\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n windowInstance ??= window.open(url.toString(), \"_blank\");\n\n if (windowInstance) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, closeObserveSubWindowInterval);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, waitSubWindow);\n } else {\n if (\"onSubWindowOpenError\" in opts) opts.onSubWindowOpenError?.();\n else {\n await startLoginFlow();\n }\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n processing = false;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLoginFlow(\n loginUrlArg: (() => string) | string | undefined = loginUrl,\n delay: number = 2000,\n ) {\n loginUrlArg ??= `/api/v1/auth?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}&comeback_path=${window.location.pathname}${encodeURIComponent(window.location.search)}`;\n window.location.replace(typeof loginUrlArg === \"function\" ? loginUrlArg() : loginUrlArg);\n await wait(delay);\n return null;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLogoutFlow(\n logoutUrlArg: (() => string) | string | undefined = logoutUrl,\n delay: number = 2000,\n ) {\n logoutUrlArg ??= `/api/v1/auth/logout?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}`;\n window.location.replace(typeof logoutUrlArg === \"function\" ? logoutUrlArg() : logoutUrlArg);\n await wait(delay);\n return null;\n }\n\n // Processing an oauth flow: extract expires, get token, close sub windows, check if logout/clear/error url\n async function register(): Promise<boolean> {\n if (window.location.pathname === logoutPageUrl) {\n await startLogoutFlow();\n return false;\n }\n if (window.location.pathname === clearPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n window.location.replace(afterClearPageUrl);\n return false;\n }\n if (window.location.pathname === errorPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n return false;\n }\n\n const queries = getQueryValues([expiresTokenQueryName, OAUTH_REFRESH_QUERY]);\n\n const refreshQuery = queries?.[OAUTH_REFRESH_QUERY];\n const expiresQuery = queries?.[expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : false;\n /** Expires token */\n const expires = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : false;\n\n if (expires && !Number.isNaN(+expires) && Date.now() < +expires) {\n localStorage.setItem(expiresTokenStorageName, expires);\n if (tokenRequest) {\n const token = await tokenRequest();\n if (token != undefined && tokenStorageName) {\n localStorage.setItem(tokenStorageName, token);\n }\n }\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n channel.postMessage(true);\n channel.close();\n window.close();\n return false;\n }\n\n /** Delete expires query */\n const url = new URL(window.location.href);\n url.searchParams.delete(expiresTokenQueryName);\n window.location.replace(url.toString());\n return false;\n }\n\n return true;\n }\n\n async function beforeHandler<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<void> {\n if (processing) await waitUntil(() => processing);\n\n const token = request.token ?? localStorage.getItem(tokenStorageName);\n const isSameOrigin =\n request.path.includes(window.location.origin) || !startWith(request.path, \"http\");\n if ((!isSameOrigin || forceSetToken) && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n }\n\n return {\n startRefreshFlowInSubWindow,\n startLoginFlow,\n startLogoutFlow,\n register,\n refetchAfterRefreshFlow,\n beforeHandler,\n get isServicePage() {\n return [errorPageUrl, clearPageUrl, logoutPageUrl].some(\n (u) => document.location.pathname === u,\n );\n },\n get processing() {\n return processing;\n },\n get token() {\n return localStorage.getItem(tokenStorageName);\n },\n get expires() {\n const expires = localStorage.getItem(expiresTokenStorageName);\n return expires == undefined ? null : Number.isNaN(+expires) ? null : +expires;\n },\n get expired() {\n const expiresStr = localStorage.getItem(expiresTokenStorageName);\n const expires =\n expiresStr == undefined ? null : Number.isNaN(+expiresStr) ? null : +expiresStr;\n return expires == undefined ? true : Date.now() > expires;\n },\n };\n}\n","/* eslint-disable no-console */\nimport type { Headers as NodeHeaders, Response as NodeResponse } from \"node-fetch\";\nimport { RESPONSE_DATA_SYMBOL } from \"../api.constants\";\nimport type { AfterHandler } from \"../api.types\";\n\nexport type LoggerAfterHandlerOptions = {\n filter?: (response: Response | NodeResponse | undefined) => boolean;\n filterStatus?: (status: number) => boolean;\n filterUrl?: (url: string) => boolean;\n filterHeaders?: (headers: Headers | NodeHeaders) => boolean;\n};\n\nexport function loggerAfterHandler(options: LoggerAfterHandlerOptions = {}): AfterHandler {\n return (request, response) => {\n return new Promise((resolve) => {\n void (async function logger() {\n try {\n if (\n !response ||\n (options.filter && !options.filter(response)) ||\n (options.filterStatus && !options.filterStatus(response.status)) ||\n (options.filterUrl && !options.filterUrl(response.url)) ||\n (options.filterHeaders && !options.filterHeaders(response.headers))\n ) {\n resolve();\n\n return;\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result;\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n\n Object.defineProperty(response, RESPONSE_DATA_SYMBOL, {\n value: result,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n\n console.log({\n url: response.url,\n status: response.status,\n headers: response.headers,\n body: result,\n });\n\n resolve();\n } catch {\n if (response) {\n console.log({ url: response.url, status: response.status, headers: response.headers });\n }\n\n resolve();\n }\n })().finally(() => {\n resolve();\n });\n });\n };\n}\n","import type {\n BeforeHandler,\n RequestHeader,\n RequestInterface,\n RequestMethod,\n RequestQuery,\n} from \"../api.types\";\n\nexport type LoggerBeforeHandlerOptions = {\n filter?: (request: RequestInterface<unknown, unknown, unknown, unknown>) => boolean;\n filterPath?: (path: string) => boolean;\n filterMethod?: (method: RequestMethod) => boolean;\n filterParams?: (params?: RequestQuery) => boolean;\n filterHeaders?: (headers?: RequestHeader) => boolean;\n};\n\nexport function loggerBeforeHandler(options: LoggerBeforeHandlerOptions = {}): BeforeHandler {\n return (request) => {\n return new Promise((resolve) => {\n if (\n (options.filter &&\n !options.filter(request as RequestInterface<unknown, unknown, unknown, unknown>)) ||\n (options.filterHeaders && !options.filterHeaders(request.headers)) ||\n (options.filterMethod && !options.filterMethod(request.method)) ||\n (options.filterParams && !options.filterParams(request.queries)) ||\n (options.filterPath && !options.filterPath(request.path))\n ) {\n resolve();\n\n return;\n }\n // eslint-disable-next-line no-console\n console.log(request);\n resolve();\n });\n };\n}\n"],"names":["startArray","endArray","separator","numbers"],"mappings":"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,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/constants/errors.ts","../../src/constants/environment.ts","../../src/constants/index.ts","../../src/lib/utils/wait-until.ts","../../src/lib/date/date-difference.ts","../../src/lib/date/get-date-by-rules.ts","../../src/lib/date/get-today.ts","../../src/lib/date/is-today.ts","../../src/lib/typings/check-type.ts","../../src/lib/typings/is-array.ts","../../src/lib/typings/is-boolean.ts","../../src/lib/typings/is-number.ts","../../src/lib/typings/is-string.ts","../../src/lib/typings/is-id.ts","../../src/lib/typings/is-null.ts","../../src/lib/typings/is-nullable.ts","../../src/lib/typings/is-object.ts","../../src/lib/typings/is-undefined.ts","../../src/lib/typings/is-date.ts","../../src/lib/typings/is-primitive.ts","../../src/lib/date/date-format.ts","../../src/lib/date/transform-to-dayjs.ts","../../src/lib/utils/transform-to-number.ts","../../src/lib/utils/field-view-format.ts","../../src/lib/utils/json-parse.ts","../../src/lib/utils/random-string.ts","../../src/lib/utils/wait.ts","../../src/lib/utils/build-query-string.ts","../../src/lib/utils/create-url-with-queries.ts","../../src/lib/utils/trim-url.ts","../../src/lib/utils/array-to-map-by-key.ts","../../src/lib/lodash/get-by-path.ts","../../src/lib/lodash/set-by-path.ts","../../src/lib/utils/sync-object-values.ts","../../src/lib/utils/random-number.ts","../../src/lib/utils/get-file-name-from-header.ts","../../src/lib/utils/limit-stream-of-requests.ts","../../src/lib/utils/start-with.ts","../../src/lib/utils/get-caller-function-name.ts","../../src/lib/utils/translit.ts","../../src/lib/utils/join-paths.ts","../../src/lib/utils/speed-test.ts","../../src/lib/utils/create-global-id.ts","../../src/lib/utils/create-local-id-generator.ts","../../src/lib/utils/declination.ts","../../src/lib/utils/async-loop.ts","../../src/lib/utils/random-base64.ts","../../src/lib/utils/random-hex.ts","../../src/lib/browser/download-file.ts","../../src/lib/browser/download-json.ts","../../src/lib/browser/read-file.ts","../../src/lib/browser/get-visible-position.ts","../../src/lib/browser/get-query-values.ts","../../src/lib/browser/exec-animation.ts","../../src/lib/browser/copy-to-clipboard.ts","../../src/lib/browser/extract-queries.ts","../../src/lib/colors/get-color-format.ts","../../src/lib/colors/transform-hex-to-rgb.ts","../../src/lib/colors/transform-rgb-to-rgba.ts","../../src/lib/colors/transform-rgba-to-rgb.ts","../../src/lib/colors/take-opacity-colors.ts","../../src/lib/colors/transform-to-color.ts","../../src/lib/colors/get-random-color.ts","../../src/lib/lodash/type.ts","../../src/lib/lodash/clone-deep.ts","../../src/lib/lodash/debounce.ts","../../src/lib/lodash/difference.ts","../../src/lib/lodash/difference-by.ts","../../src/lib/lodash/difference-with.ts","../../src/lib/lodash/is-equal.ts","../../src/lib/lodash/throttle.ts","../../src/api/api.constants.ts","../../src/api/api.ts","../../src/api/oauth.ts","../../src/api/after/logger-after-handler.ts","../../src/api/before/logger-before-handler.ts"],"sourcesContent":["import type { RequestHeader } from \"../api\";\n\ntype ResponseErrorOptions = {\n message: string;\n status: number;\n code?: number;\n description?: unknown;\n headers?: RequestHeader;\n};\n\nexport class ResponseError extends Error {\n status: number;\n code?: number;\n description?: unknown;\n headers?: RequestHeader;\n\n constructor({ message, status, description, code, headers }: ResponseErrorOptions) {\n super(message);\n this.status = status;\n this.description = description;\n this.code = code;\n this.headers = headers;\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n\nexport const IS_JEST = typeof process != \"undefined\" && process.env.JEST_WORKER_ID !== undefined;\n\nexport const IS_BUN = typeof process !== \"undefined\" && process?.versions?.bun != undefined;\n\nexport const IS_DENO =\n // @ts-expect-error\n typeof Deno !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version.deno !== \"undefined\";\n\nexport const IS_NODE = typeof process !== \"undefined\" && process?.versions?.node != undefined;\n\nexport const IS_WEB_WORKER =\n typeof self === \"object\" &&\n self.constructor &&\n self.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const IS_BROWSER = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n","export * from \"./errors\";\nexport * from \"./environment\";\n\nexport const COLOR_FORMATS = {\n Hex: \"HEX\",\n Rgb: \"RGB\",\n Rgba: \"RGBA\",\n Hsl: \"HSL\",\n} as const;\n\nexport const DATE_TYPES = {\n Days: \"days\",\n Months: \"months\",\n Years: \"years\",\n Seconds: \"seconds\",\n Minutes: \"minutes\",\n Hours: \"hours\",\n} as const;\n\nexport const FIELD_TYPES = {\n Date: \"date\",\n Time: \"time\",\n DateTime: \"dateTime\",\n String: \"string\",\n Number: \"number\",\n Array: \"array\",\n} as const;\n","export const waitUntil = (condition: () => boolean, checkInterval = 100) => {\n return new Promise((resolve) => {\n const interval = setInterval(() => {\n if (condition()) return;\n clearInterval(interval);\n resolve(true);\n }, checkInterval);\n });\n};\n","import dayjs from \"dayjs\";\nimport type { DateType } from \"../../types\";\n\ntype DateDifference = {\n type: DateType;\n firstDate: Date;\n secondDate?: Date;\n float?: boolean;\n};\n\nexport function dateDifference({\n firstDate,\n float = false,\n secondDate = new Date(),\n type,\n}: DateDifference) {\n const first = dayjs(firstDate);\n\n return first.diff(secondDate, type, float);\n}\n","import { DATE_TYPES } from \"../../constants\";\nimport { type DateGetterRule, type DateType } from \"../../types\";\n\nexport function getDateByRules(rules: DateGetterRule[], date: Date = new Date()) {\n let result = new Date(date);\n for (const rule of rules) {\n result = getDate(rule.increment, rule.type, result);\n }\n\n return result;\n}\n\nfunction getDate(increment: number, type: DateType, date: Date = new Date()) {\n const result = new Date(date);\n switch (type) {\n case DATE_TYPES.Days: {\n result.setDate(result.getDate() + increment);\n\n return result;\n }\n case DATE_TYPES.Months: {\n result.setMonth(result.getMonth() + increment);\n\n return result;\n }\n case DATE_TYPES.Years: {\n result.setFullYear(result.getFullYear() + increment);\n\n return result;\n }\n case DATE_TYPES.Seconds: {\n result.setSeconds(result.getSeconds() + increment);\n\n return result;\n }\n case DATE_TYPES.Minutes: {\n result.setMinutes(result.getMinutes() + increment);\n\n return result;\n }\n case DATE_TYPES.Hours: {\n result.setHours(result.getHours() + increment);\n\n return result;\n }\n default:\n return result;\n }\n}\n","export function getToday() {\n const startToday = new Date();\n startToday.setHours(0, 0, 0, 0);\n const endToday = new Date();\n endToday.setHours(23, 59, 59, 999);\n\n return { startToday, endToday };\n}\n","import type { Maybe } from \"../../types\";\n\nexport function isToday(date: Maybe<string | Date | number>) {\n if (date == undefined) return false;\n\n try {\n const checkedDate = new Date(date);\n const now = new Date();\n\n return (\n ((checkedDate.getFullYear() << 16) |\n (checkedDate.getMonth() << 8) |\n checkedDate.getDate()) ===\n ((now.getFullYear() << 16) | (now.getMonth() << 8) | now.getDate())\n );\n } catch {\n return false;\n }\n}\n","export function checkType<R>(value: unknown, condition: boolean): value is R {\n if (condition) {\n return true;\n }\n\n return false;\n}\n","export function isArray(value: unknown): value is unknown[] {\n return Boolean(value && Array.isArray(value));\n}\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","export function isNumber(value: unknown): value is number {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n","export function isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n","import { isNumber } from \"./is-number\";\nimport { isString } from \"./is-string\";\n\nexport function isId(value: unknown): value is number | string {\n return isNumber(value) || isString(value);\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","export function isNullable(value: unknown): value is null | undefined {\n return typeof value === \"undefined\" || value === null;\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === \"undefined\";\n}\n","export function isDate(value: unknown): value is Date {\n if (value instanceof Date) return !Number.isNaN(value.valueOf());\n\n return false;\n}\n","export function isPrimitive(value: unknown): value is string | number | boolean | null | undefined {\n const type = typeof value;\n\n return value == undefined || (type != \"object\" && type != \"function\");\n}\n","import dayjs from \"dayjs\";\nimport { isDate } from \"../typings\";\n\nexport function dateFormat(date: Date | string | number, format: string) {\n const correctDate = new Date(date);\n\n if (!isDate(correctDate)) return \"\";\n\n return dayjs(correctDate).format(format);\n}\n","import dayjs, { type Dayjs } from \"dayjs\";\n\nexport function transformToDayjs(date: Date | string | number): Dayjs {\n return dayjs(date);\n}\n","import { isString } from \"../typings\";\n\nexport function transformToNumber(value: unknown) {\n let result: number | undefined;\n\n if (isString(value)) result = parseInt(value, 10);\n else result = Number(value);\n\n return Number.isNaN(result) ? 0 : result;\n}\n","import { FIELD_TYPES } from \"../../constants\";\nimport type { FieldType } from \"../../types\";\nimport { dateFormat } from \"../date\";\nimport { isArray, isBoolean, isDate, isNumber, isString } from \"../typings\";\nimport { transformToNumber } from \"./transform-to-number\";\n\nexport function fieldViewFormat(field: unknown, type: FieldType = \"string\") {\n switch (type) {\n case FIELD_TYPES.Array: {\n return isArray(field) ? field.join(\", \") : \"\";\n }\n case FIELD_TYPES.Date: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY\")\n : \"\";\n }\n case FIELD_TYPES.DateTime: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY HH:mm\")\n : \"\";\n }\n case FIELD_TYPES.Number: {\n return isString(field) || isNumber(field) || isBoolean(field)\n ? String(transformToNumber(field))\n : \"\";\n }\n case FIELD_TYPES.String: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n case FIELD_TYPES.Time: {\n return isString(field) || isNumber(field) || isDate(field) ? dateFormat(field, \"HH:mm\") : \"\";\n }\n default: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n }\n}\n","import { isString } from \"../typings\";\n\nexport function jsonParse<T>(json: unknown): T | null {\n if (!isString(json)) return null;\n\n try {\n return JSON.parse(json) as T;\n } catch {\n return null;\n }\n}\n","const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nexport function randomString(length: number = 16, allowCharacters: string = characters) {\n let result = \"\";\n let counter = 0;\n\n while (counter < length) {\n result += allowCharacters.charAt(Math.floor(Math.random() * allowCharacters.length));\n counter += 1;\n }\n\n return result;\n}\n","export function wait(delay: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, delay);\n });\n}\n","import type { RequestQuery } from \"../../api\";\nimport { isArray, isObject } from \"../typings\";\n\nexport function buildQueryString(params: RequestQuery): string {\n const queryString: string[] = [];\n\n for (const [key, value] of Object.entries(params)) {\n if (isObject(value) || value == undefined) continue;\n\n if (isArray(value)) {\n for (const item of value) {\n if (item != undefined && !isObject(item))\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);\n }\n } else {\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n }\n\n return queryString.join(\"&\");\n}\n","import type { RequestQuery } from \"../../api\";\nimport { buildQueryString } from \"./build-query-string\";\n\ntype CreateURLOptionsInterface = {\n baseURL: string;\n params?: RequestQuery;\n};\n\nexport function createURLWithQueries(options: CreateURLOptionsInterface): string {\n const url = options.baseURL;\n\n if (!options.params) {\n return url;\n }\n\n const queryString = buildQueryString(options.params);\n\n return `${url}?${queryString}`;\n}\n","export function trimUrl(url: string) {\n return url.replace(/^\\//, \"\").replace(/\\/$/, \"\");\n}\n","import { isId } from \"../typings\";\n\nexport function arrayToMapByKey<T extends Record<string, unknown>>(\n array: T[],\n key: keyof T,\n): Record<string, T> {\n const map: Record<string, T> = {};\n\n for (const item of array) {\n const keyValue = item[key] as unknown;\n if (isId(keyValue)) map[keyValue] = item;\n }\n\n return map;\n}\n","/* eslint-disable max-depth */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isArray, isObject, isString } from \"../typings\";\n\nconst startArray = \"[\".codePointAt(0)!;\nconst endArray = \"]\".codePointAt(0)!;\nconst separator = \".\".codePointAt(0)!;\nconst numbers = new Set(\n [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"].map((n) => n.codePointAt(0)!),\n);\nexport function getByPath<T, D = undefined>(\n data: unknown,\n path: string | undefined,\n defaultValue?: D,\n): T | D {\n if (!isString(path) || (!isObject(data) && !isArray(data))) return defaultValue as D;\n\n let cursor = 0;\n let pathStart = 0;\n let arrayPathStart = -1;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let extractedData: any = data;\n\n try {\n while (cursor < path.length) {\n const char = path.codePointAt(cursor)!;\n\n if (char === separator) {\n arrayPathStart = -1;\n if (pathStart === cursor) {\n pathStart++;\n } else {\n if (extractedData == undefined || typeof extractedData !== \"object\")\n return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, cursor)];\n\n pathStart = cursor + 1;\n }\n /** start array path if not started yet */\n } else if (char === startArray && arrayPathStart === -1) {\n arrayPathStart = cursor;\n /** end array if its started min 2 char ago */\n } else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {\n /** before array was an object path */\n if (pathStart < arrayPathStart) {\n if (extractedData == undefined || typeof extractedData !== \"object\")\n return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, arrayPathStart)];\n }\n\n const index = +path.slice(arrayPathStart + 1, cursor);\n if (!Array.isArray(extractedData)) return defaultValue as D;\n extractedData = extractedData[index];\n\n arrayPathStart = -1;\n pathStart = cursor + 1;\n\n /** if array started but char is not number */\n } else if (arrayPathStart !== -1 && !numbers.has(char)) {\n arrayPathStart = -1;\n }\n cursor++;\n }\n\n if (pathStart < path.length) {\n if (extractedData == undefined || typeof extractedData !== \"object\") return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, cursor)];\n }\n } catch {\n return defaultValue as D;\n }\n\n if (extractedData === undefined) {\n return defaultValue as D;\n }\n\n return extractedData as T;\n}\n","/* eslint-disable max-depth */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isArray, isObject } from \"../typings\";\nimport { isString } from \"../typings\";\n\nconst startArray = \"[\".codePointAt(0)!;\nconst endArray = \"]\".codePointAt(0)!;\nconst separator = \".\".codePointAt(0)!;\nconst numbers = new Set(\n [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"].map((n) => n.codePointAt(0)!),\n);\nexport function setByPath(data: unknown, path: string | undefined, settableValue: unknown) {\n if (!isString(path) || (!isObject(data) && !isArray(data))) return false;\n\n let cursor = 0;\n let pathStart = 0;\n let arrayPathStart = -1;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let extractedData: any = data;\n let prevPath: string | number | undefined;\n\n try {\n while (cursor < path.length) {\n const char = path.codePointAt(cursor)!;\n /** get */\n if (char === separator) {\n arrayPathStart = -1;\n if (pathStart === cursor) {\n pathStart++;\n } else {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n\n if (cursor === path.length - 1) {\n extractedData[path.slice(pathStart, cursor)] = settableValue;\n } else {\n const currentPath = path.slice(pathStart, cursor);\n const extractedValue = extractedData[currentPath];\n if (extractedValue == undefined) {\n prevPath = currentPath;\n } else {\n extractedData = extractedValue;\n }\n pathStart = cursor + 1;\n }\n }\n\n /** start array path if not started yet */\n } else if (char === startArray && arrayPathStart === -1) {\n arrayPathStart = cursor;\n /** end array if its started min 2 char ago */\n } else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {\n /** before array was an object path */\n if (pathStart < arrayPathStart) {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n const currentPath = path.slice(pathStart, arrayPathStart);\n const extractedValue = extractedData[currentPath];\n if (extractedValue == undefined) {\n prevPath = currentPath;\n } else {\n extractedData = extractedValue;\n }\n }\n\n if (prevPath) {\n const array: unknown[] = [];\n extractedData[prevPath] = array;\n extractedData = array;\n }\n const index = +path.slice(arrayPathStart + 1, cursor);\n if (cursor === path.length - 1) {\n extractedData[index] = settableValue;\n } else {\n const extractedValue = extractedData[index];\n if (extractedValue == undefined) {\n prevPath = index;\n } else {\n extractedData = extractedValue;\n }\n }\n arrayPathStart = -1;\n pathStart = cursor + 1;\n\n /** if array started but char is not number */\n } else if (arrayPathStart !== -1 && !numbers.has(char)) {\n arrayPathStart = -1;\n }\n cursor++;\n }\n\n if (pathStart < path.length) {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n extractedData[path.slice(pathStart, cursor)] = settableValue;\n }\n } catch {\n return false;\n }\n\n return true;\n}\n","import { getByPath } from \"../lodash/get-by-path\";\nimport { setByPath } from \"../lodash/set-by-path\";\nimport { isUndefined } from \"../typings\";\n\nexport function syncObjectValues(\n oldObj: Record<string, unknown>,\n newObj: Record<string, unknown>,\n exception: string[] = [],\n) {\n for (const field in newObj) {\n if (exception.includes(field)) continue;\n\n const oldValue = getByPath(oldObj, field, undefined);\n const newValue = getByPath(newObj, field, undefined);\n\n if (isUndefined(oldValue) || isUndefined(newValue)) continue;\n if (oldValue === newValue) continue;\n\n setByPath(oldObj, field, newValue);\n }\n}\n","export function randomNumber(\n min: number = Number.MIN_SAFE_INTEGER,\n max: number = Number.MAX_SAFE_INTEGER,\n) {\n min = Math.ceil(min);\n max = Math.floor(max + 1);\n\n return Math.floor(Math.random() * (max - min) + min);\n}\n","const filenameVariables = [\"filename=\", \"filename*=UTF-8''\"];\n\nexport function getFileNameFromHeader(header: string) {\n const name = header\n .split(\";\")\n .find((info) => ~info.indexOf(filenameVariables[0]) || ~info.indexOf(filenameVariables[1]))\n ?.replace(filenameVariables[0], \"\")\n ?.replace(filenameVariables[1], \"\")\n ?.replace(/\"/g, \"\")\n ?.trim();\n\n return name ? decodeURI(name) : null;\n}\n","import { wait } from \"./wait\";\n\ntype LimitStreamOfRequestsOptions<T> = {\n countRequests: number;\n maxCountInParallel: number;\n promiseGetter: (count: number) => Promise<T>;\n refetchAfterError?: boolean;\n maxTryCount?: number;\n tryDelay?: number;\n collectResult?: boolean;\n resultCb?: (result: T) => void;\n throwError?: boolean;\n errorCb?: (error: unknown, position: number, tryCount: number) => void;\n};\n\nexport function limitStreamOfRequests<T>({\n countRequests,\n maxCountInParallel,\n promiseGetter,\n refetchAfterError,\n resultCb,\n collectResult,\n maxTryCount = 3,\n tryDelay = 1000,\n throwError,\n errorCb,\n}: LimitStreamOfRequestsOptions<T>): { promise: Promise<T[]>; cancel: () => void } {\n let isStopped = false;\n\n if (maxCountInParallel > countRequests) maxCountInParallel = countRequests;\n\n return {\n cancel: () => {\n isStopped = true;\n },\n promise: new Promise((resolve, reject) => {\n let requestsAmount = 0;\n let responsesAmount = 0;\n let requestInProgress = 0;\n const results: T[] = [];\n\n for (let i = 0; i < maxCountInParallel; i++) {\n request(++requestsAmount);\n }\n\n function request(position: number, tryCount: number = 1) {\n if (isStopped) return void resolve(results);\n if (responsesAmount === countRequests) return void resolve(results);\n if (position > countRequests) {\n if (requestInProgress === 0) {\n return void resolve(results);\n }\n\n return;\n }\n const promise = promiseGetter(position);\n requestInProgress++;\n Promise.resolve(promise)\n .then((result) => {\n requestInProgress--;\n if (collectResult) results.push(result);\n if (resultCb) resultCb(result);\n responsesAmount++;\n request(++requestsAmount);\n })\n .catch((error: unknown) => {\n requestInProgress--;\n if (errorCb) errorCb(error, position, tryCount);\n if (refetchAfterError && maxTryCount > tryCount) {\n return void wait(tryDelay).then(() => request(position, tryCount + 1));\n }\n if (throwError) {\n reject(error);\n }\n responsesAmount++;\n request(++requestsAmount);\n });\n }\n }),\n };\n}\n","export function startWith(string: string, mask: string) {\n const maskSize = mask.length;\n let pos = 0;\n\n while (pos < maskSize) {\n if (string.codePointAt(pos) !== mask.codePointAt(pos)) return false;\n pos++;\n }\n\n return true;\n}\n","export function getCallerFunctionName() {\n try {\n const error = new Error();\n if (!error.stack) throw error;\n const stack = error.stack.split(\"\\n\");\n\n if (stack[2]) {\n const callerLine = stack[2].trim();\n const match = /at (\\w+)/.exec(callerLine);\n if (match) {\n return match[1];\n }\n }\n } catch {}\n\n return null;\n}\n","const translitDict: Record<string, string> = {\n А: \"A\",\n Б: \"B\",\n В: \"V\",\n Г: \"G\",\n Д: \"D\",\n Е: \"E\",\n Ё: \"YO\",\n Ж: \"ZH\",\n З: \"Z\",\n И: \"I\",\n Й: \"Y\",\n К: \"K\",\n Л: \"L\",\n М: \"M\",\n Н: \"N\",\n О: \"O\",\n П: \"P\",\n Р: \"R\",\n С: \"S\",\n Т: \"T\",\n У: \"U\",\n Ф: \"F\",\n Х: \"KH\",\n Ц: \"TS\",\n Ч: \"CH\",\n Ш: \"SH\",\n Щ: \"SCH\",\n Ъ: \"\",\n Ы: \"Y\",\n Ь: \"\",\n Э: \"E\",\n Ю: \"YU\",\n Я: \"YA\",\n а: \"a\",\n б: \"b\",\n в: \"v\",\n г: \"g\",\n д: \"d\",\n е: \"e\",\n ё: \"yo\",\n ж: \"zh\",\n з: \"z\",\n и: \"i\",\n й: \"y\",\n к: \"k\",\n л: \"l\",\n м: \"m\",\n н: \"n\",\n о: \"o\",\n п: \"p\",\n р: \"r\",\n с: \"s\",\n т: \"t\",\n у: \"u\",\n ф: \"f\",\n х: \"kh\",\n ц: \"ts\",\n ч: \"ch\",\n ш: \"sh\",\n щ: \"sch\",\n ъ: \"\",\n ы: \"y\",\n ь: \"\",\n э: \"e\",\n ю: \"yu\",\n я: \"ya\",\n \" \": \"_\",\n A: \"A\",\n B: \"B\",\n C: \"C\",\n D: \"D\",\n E: \"E\",\n F: \"F\",\n G: \"G\",\n H: \"H\",\n I: \"I\",\n J: \"J\",\n K: \"K\",\n L: \"L\",\n M: \"M\",\n N: \"N\",\n O: \"O\",\n P: \"P\",\n Q: \"Q\",\n R: \"R\",\n S: \"S\",\n T: \"T\",\n U: \"U\",\n V: \"V\",\n W: \"W\",\n X: \"X\",\n Y: \"Y\",\n Z: \"Z\",\n a: \"a\",\n b: \"b\",\n c: \"c\",\n d: \"d\",\n e: \"e\",\n f: \"f\",\n g: \"g\",\n h: \"h\",\n i: \"i\",\n j: \"j\",\n k: \"k\",\n l: \"l\",\n m: \"m\",\n n: \"n\",\n o: \"o\",\n p: \"p\",\n q: \"q\",\n r: \"r\",\n s: \"s\",\n t: \"t\",\n u: \"u\",\n v: \"v\",\n w: \"w\",\n x: \"x\",\n y: \"y\",\n z: \"z\",\n \"0\": \"0\",\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n};\n\nexport function translit(text: string) {\n return text\n .split(\"\")\n .map((char) => translitDict[char] || \"\")\n .join(\"\");\n}\n","export function joinPaths(...parts: string[]) {\n return parts\n .reduce((result: string[], part) => {\n const trimedPart = part.trim().replace(/^\\/+|\\/+$/g, \"\");\n if (trimedPart.length > 0) result.push(trimedPart);\n\n return result;\n }, [])\n .join(\"/\");\n}\n","type SpeedTestOptions = {\n name: string;\n iterations?: number;\n type?: \"time\" | \"performance\";\n};\n\nexport function speedTest<T>(cb: (i: number) => T, opts: SpeedTestOptions): T {\n const { name, iterations = 10000, type = \"performance\" } = opts;\n let result: T | undefined;\n\n if (type === \"performance\") {\n const start = performance.now();\n\n if (iterations <= 1) {\n result = cb(0);\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb(i);\n }\n }\n\n const end = performance.now();\n // eslint-disable-next-line no-console\n console.log(`${name}: `, end - start);\n } else {\n // eslint-disable-next-line no-console\n console.time(name);\n\n if (iterations <= 1) {\n result = cb(0);\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb(i);\n }\n }\n\n // eslint-disable-next-line no-console\n console.timeEnd(name);\n }\n\n return result as T;\n}\n","let id = 0;\n\nexport function createGlobalId() {\n return id++;\n}\n","import { createGlobalId } from \"./create-global-id\";\n\nexport function createLocalIdGenerator(): () => number {\n let localLastId = 0;\n const globalLastId = createGlobalId() << 14;\n\n return function generateId() {\n return (globalLastId | localLastId++) >>> 0;\n };\n}\n","export function declination(value: number, words: [string, string, string]) {\n value = Math.abs(value) % 100;\n const num = value % 10;\n if (value > 10 && value < 20) return words[2];\n if (num > 1 && num < 5) return words[1];\n if (num == 1) return words[0];\n\n return words[2];\n}\n","import { wait } from \"./wait\";\n\ntype AsyncLoopOptions = {\n syncOperations?: number;\n start?: number;\n};\nexport async function asyncLoop(\n cb: (index: number) => void,\n length: number,\n { start = 0, syncOperations = 10000 }: AsyncLoopOptions = {},\n) {\n let index = start;\n\n while (index < start + syncOperations && index < length) {\n cb(index);\n index++;\n }\n\n if (index < length) {\n await wait(0);\n\n return asyncLoop(cb, length, { start: index, syncOperations });\n }\n}\n","export function randomBase64(byteLength = 8) {\n const randomBytes = new Uint8Array(byteLength);\n window.crypto.getRandomValues(randomBytes);\n\n let binaryString = \"\";\n for (let i = 0; i < byteLength; i++) {\n binaryString += String.fromCharCode(randomBytes[i]);\n }\n\n return btoa(binaryString).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/[=]+$/, \"\");\n}\n","export function randomHex(byteLength = 8) {\n const randomBytes = new Uint8Array(byteLength);\n window.crypto.getRandomValues(randomBytes);\n\n let result = \"\";\n for (let i = 0; i < byteLength; i++) {\n result += randomBytes[i].toString(16).padStart(2, \"0\");\n }\n\n return result;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { getFileNameFromHeader } from \"../utils\";\n\ntype DownloadFileOptions = {\n data: Blob;\n fileName: string;\n mimeType: string;\n};\n\nexport function downloadFile({ data, fileName, mimeType }: DownloadFileOptions) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const name = getFileNameFromHeader(fileName);\n if (!name) throw new Error(\"Bad filename\");\n\n const blob = new Blob([data], {\n type: mimeType,\n });\n\n const downloadUrl = window.URL.createObjectURL(blob);\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = downloadUrl;\n\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n link.remove();\n window.URL.revokeObjectURL(downloadUrl);\n\n return null;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function downloadJson(data: unknown, name: string) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const url = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(data))}`;\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function readFile(file: File) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(null);\n\n return;\n }\n\n const reader = new FileReader();\n reader.readAsText(file);\n\n reader.onload = () => {\n resolve(reader.result);\n };\n\n reader.onerror = () => {\n resolve(null);\n };\n });\n}\n","type XPositions = \"insideCenter\" | \"insideLeft\" | \"insideRight\" | \"right\" | \"left\";\ntype YPosition = \"insideCenter\" | \"insideTop\" | \"insideBottom\" | \"bottom\" | \"top\";\n\nexport type PositionPlacements =\n | \"bottom-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"right-center\"\n | \"right-top\"\n | \"right-bottom\"\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"left-center\"\n | \"left-top\"\n | \"left-bottom\"\n | \"flex\";\n\nexport type VisiblePosition = {\n top: number;\n left: number;\n right: number;\n bottom: number;\n placement: PositionPlacements;\n};\n\ntype InitialVisiblePosition = {\n top: number;\n left: number;\n placement: PositionPlacements;\n};\n\ntype InitialPosition = {\n targetNode?: HTMLElement;\n position?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n};\ntype GetVisiblePositionOptions = {\n node: HTMLElement;\n initialPosition?: InitialPosition;\n visibleArea?: HTMLElement;\n placement?: Exclude<PositionPlacements, \"flex\">;\n stepX?: number;\n stepY?: number;\n flex?: boolean;\n nested?: boolean;\n};\nexport function getVisiblePosition({\n initialPosition,\n node,\n visibleArea,\n placement = \"bottom-center\",\n stepX = placement === \"bottom-center\" ||\n placement === \"bottom-left\" ||\n placement === \"bottom-right\" ||\n placement === \"top-left\" ||\n placement === \"top-center\" ||\n placement === \"top-right\"\n ? 0\n : 10,\n stepY = placement === \"left-bottom\" ||\n placement === \"left-center\" ||\n placement === \"left-top\" ||\n placement === \"right-bottom\" ||\n placement === \"right-top\" ||\n placement === \"right-center\"\n ? 0\n : 10,\n flex,\n nested,\n}: GetVisiblePositionOptions): VisiblePosition {\n /** Viewport Variables */\n const totalHeight = document.body.scrollHeight;\n const totalWidth = document.body.scrollWidth;\n const viewport = visibleArea ?? document.body;\n const scrollTop = document.body.scrollTop;\n const scrollLeft = document.body.scrollLeft;\n const rect = viewport.getBoundingClientRect();\n const viewportWidth = viewport.clientWidth;\n const viewportHeight = viewport.clientHeight;\n const xStart = visibleArea ? viewport.offsetLeft - viewport.scrollLeft : Math.abs(rect.left);\n const xEnd = xStart + viewportWidth;\n const yStart = visibleArea ? viewport.offsetTop : Math.abs(rect.top);\n const yEnd = yStart + viewportHeight;\n\n /** Target Variables */\n let targetHeight = 0;\n let targetWidth = 0;\n let targetTopPosition = 0;\n let targetLeftPosition = 0;\n\n /** Not bounding because not need scale */\n const nodeHeight = node.clientHeight;\n const nodeWidth = node.clientWidth;\n\n if (initialPosition?.targetNode) {\n const { top, left, height, width } = initialPosition.targetNode.getBoundingClientRect();\n targetHeight = height;\n targetWidth = width;\n targetTopPosition = top + scrollTop;\n targetLeftPosition = left + scrollLeft;\n }\n if (initialPosition?.position) {\n if (initialPosition.position.x != undefined) {\n targetLeftPosition = initialPosition.position.x + scrollLeft;\n }\n if (initialPosition.position.y != undefined) {\n targetTopPosition = initialPosition.position.y + scrollTop;\n }\n if (initialPosition.position.height != undefined) {\n targetHeight = initialPosition.position.height;\n }\n if (initialPosition.position.width != undefined) {\n targetWidth = initialPosition.position.width;\n }\n }\n\n /** Inherit Position */\n let inheritLeft = 0;\n let inheritTop = 0;\n let inheritHeight = 0;\n let inheritWidth = 0;\n if (nested) {\n const {\n left = 0,\n top = 0,\n height = 0,\n width = 0,\n } = node.parentElement?.getBoundingClientRect?.() ?? {};\n inheritLeft = left + scrollLeft;\n inheritTop = top + scrollTop;\n inheritHeight = height;\n inheritWidth = width;\n }\n\n /** Initial Position */\n const targetXCenter =\n targetWidth != undefined ? targetLeftPosition + targetWidth / 2 : targetLeftPosition;\n const targetYCenter =\n targetHeight != undefined ? targetTopPosition + targetHeight / 2 : targetTopPosition;\n const targetYEnd =\n targetHeight != undefined ? targetTopPosition + targetHeight : targetTopPosition;\n\n const x: Record<XPositions, number> = {\n insideCenter: targetXCenter - nodeWidth / 2 + stepX,\n insideRight: targetLeftPosition + targetWidth + stepX - nodeWidth,\n insideLeft: targetLeftPosition + stepX,\n left: targetLeftPosition - nodeWidth - stepX,\n right: targetLeftPosition + targetWidth + stepX,\n };\n\n const y: Record<YPosition, number> = {\n bottom: targetYEnd + stepY,\n top: targetTopPosition - stepY - nodeHeight,\n insideCenter: targetYCenter - nodeHeight / 2 + stepY,\n insideBottom: targetTopPosition + targetHeight - nodeHeight + stepY,\n insideTop: targetTopPosition + stepY,\n };\n /** Find visible position */\n function isCompletelyVisibleX(left: number) {\n const endXPosition = nodeWidth + left;\n\n return xStart <= left && xEnd >= endXPosition;\n }\n function isCompletelyVisibleY(top: number) {\n const endYPosition = nodeHeight + top;\n\n return yStart <= top && yEnd >= endYPosition;\n }\n\n let visiblePositions = processVisiblePositions({\n targetLeftPosition,\n targetTopPosition,\n x,\n y,\n placement,\n flex,\n nodeHeight,\n nodeWidth,\n xEnd,\n xStart,\n yEnd,\n yStart,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n });\n if (\n flex &&\n (!isCompletelyVisibleX(visiblePositions.left) || !isCompletelyVisibleY(visiblePositions.top))\n ) {\n visiblePositions = getFlexVisiblePosition({\n initialLeft: visiblePositions.left,\n initialTop: visiblePositions.top,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n });\n }\n\n visiblePositions.left -= inheritLeft;\n visiblePositions.top -= inheritTop;\n\n return {\n placement: visiblePositions.placement,\n left: visiblePositions.left,\n top: visiblePositions.top,\n bottom: nested\n ? inheritHeight - (visiblePositions.top + nodeHeight)\n : totalHeight - (visiblePositions.top + nodeHeight),\n right: nested\n ? inheritWidth - (visiblePositions.left + nodeWidth)\n : totalWidth - (visiblePositions.left + nodeWidth),\n };\n}\n\ntype ProcessVisiblePositions = {\n placement: Exclude<PositionPlacements, \"flex\">;\n x: Record<XPositions, number>;\n y: Record<YPosition, number>;\n targetLeftPosition: number;\n targetTopPosition: number;\n nodeWidth: number;\n nodeHeight: number;\n xStart: number;\n xEnd: number;\n yStart: number;\n yEnd: number;\n flex: boolean | undefined;\n isCompletelyVisibleX: (position: number) => boolean;\n isCompletelyVisibleY: (position: number) => boolean;\n};\nfunction processVisiblePositions(opts: ProcessVisiblePositions): InitialVisiblePosition {\n let correctLeft: number | null = opts.targetLeftPosition;\n let correctTop: number | null = opts.targetTopPosition;\n\n switch (opts.placement) {\n case \"bottom-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-center\";\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-bottom\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"right-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-center\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"right-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-top\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"right-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-center\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-bottom\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"left-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-center\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"left-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-top\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"left-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n default: {\n return {\n top: correctTop,\n left: correctLeft,\n placement: opts.placement,\n };\n }\n }\n}\n\ntype GetFlexVisiblePosition = {\n isCompletelyVisibleY: (top: number) => boolean;\n isCompletelyVisibleX: (left: number) => boolean;\n initialLeft: number;\n initialTop: number;\n xEnd: number;\n yEnd: number;\n nodeWidth: number;\n nodeHeight: number;\n};\n\nfunction getFlexVisiblePosition({\n initialLeft,\n initialTop,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n}: GetFlexVisiblePosition): InitialVisiblePosition {\n if (!isCompletelyVisibleY(initialTop)) {\n initialTop = yEnd - nodeHeight;\n }\n if (!isCompletelyVisibleX(initialLeft)) {\n initialLeft = xEnd - nodeWidth;\n }\n\n return {\n top: initialTop,\n left: initialLeft,\n placement: \"flex\",\n };\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { isArray, isString } from \"../typings\";\n\nexport function getQueryValues<K extends string>(\n keys: K[],\n): Record<K, string | string[] | undefined> | null {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const object: Record<K, string | string[] | undefined> = {} as Record<\n K,\n string | string[] | undefined\n >;\n\n const queries = window.location.search.substring(1).split(\"&\");\n for (const query of queries) {\n const [key, value] = query.split(\"=\");\n if (keys.includes(key as K) && value) {\n const prev = object[key as K];\n if (isArray(prev)) prev.push(value);\n else if (isString(prev)) object[key as K] = [prev, value];\n else object[key as K] = value;\n }\n }\n\n return object;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function execAnimation(\n element: HTMLElement | null | undefined,\n className: string,\n autoCloseDelay: number = 700,\n) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(true);\n\n return;\n }\n\n if (!element) {\n resolve(true);\n\n return;\n }\n\n const timerId = setTimeout(() => {\n resolve(true);\n }, autoCloseDelay);\n\n element.addEventListener(\n \"animationend\",\n () => {\n resolve(true);\n element?.classList?.remove?.(className);\n clearTimeout(timerId);\n },\n {\n once: true,\n },\n );\n element.classList.add(className);\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function copyToClipboard(textToCopy: string) {\n return new Promise<boolean>((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(false);\n\n return;\n }\n\n try {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(textToCopy)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n\n return;\n }\n\n const textArea = document.createElement(\"textarea\");\n textArea.value = textToCopy;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const result = document.execCommand(\"copy\");\n textArea.remove();\n\n resolve(result);\n } catch {\n resolve(false);\n }\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function extractQueries() {\n const queryMap: Record<string, string[] | undefined> = {};\n if (!IS_BROWSER && !IS_JEST) return queryMap;\n\n const queryString = document.location.search;\n queryString\n .replace(/^\\?/, \"\")\n .split(\"&\")\n .forEach((query) => {\n const [key, value] = query.split(\"=\", 2);\n\n queryMap[key] ??= [];\n const prev = queryMap[key];\n prev.push(value);\n });\n\n return queryMap;\n}\n","import { COLOR_FORMATS } from \"../../constants\";\n\nexport function getColorFormat(color: string) {\n if (color.startsWith(\"#\")) {\n return COLOR_FORMATS.Hex;\n }\n if (color.startsWith(\"rgba\")) {\n return COLOR_FORMATS.Rgba;\n }\n if (color.startsWith(\"rgb\")) {\n return COLOR_FORMATS.Rgb;\n }\n if (color.startsWith(\"hsl\")) {\n return COLOR_FORMATS.Hsl;\n }\n}\n","export function transformHEXtoRGB(hex: string) {\n return `rgb(${hex.match(/\\w\\w/g)?.map((x) => +`0x${x}`)})`;\n}\n","export function transformRGBtoRGBA(rgb: string, opacity: number) {\n const code = rgb.match(/\\d+/g);\n code?.push(String(opacity / 100));\n\n return `rgba(${code?.join(\",\")})`;\n}\n","export function transformRGBAtoRGB(rgba: string) {\n const code = rgba.match(/\\d+/g);\n code?.splice(3);\n\n return `rgb(${code?.join(\",\")})`;\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport { getColorFormat } from \"./get-color-format\";\nimport { transformHEXtoRGB } from \"./transform-hex-to-rgb\";\nimport { transformRGBtoRGBA } from \"./transform-rgb-to-rgba\";\nimport { transformRGBAtoRGB } from \"./transform-rgba-to-rgb\";\n\nexport function takeOpacityColors(color: string | undefined, opacities: number[]) {\n let rgbColor = color;\n\n if (!rgbColor) return [];\n\n if (getColorFormat(rgbColor) === COLOR_FORMATS.Hex) {\n rgbColor = transformHEXtoRGB(rgbColor);\n } else if (getColorFormat(rgbColor) === COLOR_FORMATS.Rgba) {\n rgbColor = transformRGBAtoRGB(rgbColor);\n }\n\n if (getColorFormat(rgbColor) !== COLOR_FORMATS.Rgb) return [];\n\n return [...opacities.map((opacity) => transformRGBtoRGBA(rgbColor, opacity))];\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport type { ColorFormat } from \"../../types\";\nimport { isString } from \"../typings\";\nimport { getColorFormat } from \"./get-color-format\";\n\nexport function transformToColor(\n currentColor: unknown,\n defaultColor: string = \"black\",\n defaultFormat: ColorFormat = COLOR_FORMATS.Hex,\n) {\n if (!isString(currentColor)) return defaultColor;\n\n let correctColor = currentColor;\n\n if (!getColorFormat(correctColor)) {\n switch (defaultFormat) {\n case COLOR_FORMATS.Hex: {\n correctColor = `#${correctColor}`;\n break;\n }\n case COLOR_FORMATS.Rgb: {\n correctColor = `rgb(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Rgba: {\n correctColor = `rgba(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Hsl: {\n correctColor = `hsl(${correctColor})`;\n break;\n }\n default: {\n correctColor = `#${correctColor}`;\n break;\n }\n }\n }\n\n return correctColor;\n}\n","export function getRandomColor() {\n const randomColor = Math.floor(Math.random() * 16777215).toString(16);\n\n return `#${randomColor.padStart(6, \"0\")}`;\n}\n","export function type(value: unknown) {\n return value === null\n ? \"Null\"\n : value === undefined\n ? \"Undefined\"\n : Object.prototype.toString.call(value).slice(8, -1);\n}\n","import { isPrimitive } from \"../typings\";\nimport { type } from \"./type\";\n\nexport function cloneDeep<T>(value: T): T {\n if (isPrimitive(value)) {\n return value;\n }\n\n function copy(copiedValue: object) {\n for (const key in value as object) {\n if (Object.hasOwn(value as object, key)) {\n (copiedValue as Record<string, unknown>)[key] = cloneDeep(\n (value as Record<string, unknown>)[key],\n );\n }\n }\n\n return copiedValue;\n }\n\n switch (type(value)) {\n case \"Object\":\n return copy(Object.create(Object.getPrototypeOf(value) as object) as object) as T;\n case \"Array\":\n return copy(Array((value as unknown[]).length)) as T;\n case \"Date\":\n return new Date((value as Date).valueOf()) as T;\n case \"RegExp\":\n return cloneRegExp(value as RegExp) as T;\n case \"Int8Array\":\n case \"Uint8Array\":\n case \"Uint8ClampedArray\":\n case \"Int16Array\":\n case \"Uint16Array\":\n case \"Int32Array\":\n case \"Uint32Array\":\n case \"Float32Array\":\n case \"Float64Array\":\n case \"BigInt64Array\":\n case \"BigUint64Array\":\n return (value as Int8Array).slice() as T;\n default:\n return value;\n }\n}\n\nfunction cloneRegExp(pattern: RegExp) {\n return new RegExp(\n pattern.source,\n pattern.flags\n ? pattern.flags\n : (pattern.global ? \"g\" : \"\") +\n (pattern.ignoreCase ? \"i\" : \"\") +\n (pattern.multiline ? \"m\" : \"\") +\n (pattern.sticky ? \"y\" : \"\") +\n (pattern.unicode ? \"u\" : \"\") +\n (pattern.dotAll ? \"s\" : \"\"),\n );\n}\n","export function debounce<TArgs extends unknown[]>(\n func: (...args: TArgs) => unknown,\n delay: number,\n) {\n let timer: NodeJS.Timeout | undefined;\n let active = true;\n\n const debounced = (...args: TArgs) => {\n if (active) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n if (active) {\n func(...args);\n }\n timer = undefined;\n }, delay);\n } else {\n func(...args);\n }\n };\n debounced.isPending = () => {\n return timer !== undefined;\n };\n debounced.cancel = () => {\n active = false;\n };\n debounced.flush = (...args: TArgs) => {\n func(...args);\n };\n\n return debounced;\n}\n","export function difference<T extends string | number | boolean | null | undefined>(\n first: T[],\n second: T[],\n): T[] {\n let idx = 0;\n const out: T[] = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx])) {\n out[out.length] = first[idx];\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceBy<T extends Record<string, unknown>>(\n first: T[],\n second: T[],\n key: keyof T,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i][key]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx][key])) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceWith<T = unknown>(\n first: T[],\n second: T[],\n extractPrimitive: (el: T) => string | number | boolean | undefined | null,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(extractPrimitive(second[i]));\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(extractPrimitive(first[idx]))) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","import { isObject } from \"../typings\";\n\nexport function isEqual(aVal: unknown, bVal: unknown) {\n if (aVal === bVal) return true;\n\n if (\n aVal == undefined ||\n bVal == undefined ||\n typeof aVal !== \"object\" ||\n typeof bVal !== \"object\"\n ) {\n return aVal === bVal;\n }\n\n if (aVal instanceof Date && bVal instanceof Date) {\n return aVal.getTime() === bVal.getTime();\n }\n\n if (aVal instanceof RegExp && bVal instanceof RegExp) {\n return aVal.toString() === bVal.toString();\n }\n\n if (aVal.constructor !== bVal.constructor) {\n return false;\n }\n\n if (Array.isArray(aVal) && Array.isArray(bVal)) {\n if (aVal.length !== bVal.length) return false;\n for (let i = 0; i < aVal.length; i++) {\n if (!isEqual(aVal[i], bVal[i])) return false;\n }\n\n return true;\n }\n\n if (isObject(aVal) && isObject(bVal)) {\n const keysA = Object.keys(aVal);\n const keysB = Object.keys(bVal);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!isEqual(aVal[key], bVal[key])) return false;\n }\n }\n\n return true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function throttle<TArgs extends any[]>(func: (...args: TArgs) => any, interval: number) {\n let ready = true;\n let timer: NodeJS.Timeout | undefined;\n\n const throttled = (...args: TArgs) => {\n if (!ready) return;\n func(...args);\n ready = false;\n timer = setTimeout(() => {\n ready = true;\n timer = undefined;\n }, interval);\n };\n\n throttled.isThrottled = () => {\n return timer !== undefined;\n };\n\n return throttled;\n}\n","export const RESPONSE_DATA_SYMBOL = Symbol(\"response data\");\nexport const REQUEST_ERROR = {\n Http: \"http\",\n Network: \"network\",\n Timeout: \"timeout\",\n Abort: \"abort\",\n Validation: \"validation\",\n Cache: \"cache\",\n Unknown: \"unknown\",\n Disabled: \"disabled\",\n} as const;\n\nclass OauthState {\n private _fetching: boolean = false;\n\n get fetching() {\n return this._fetching;\n }\n\n set fetching(value: boolean) {\n this._fetching = value;\n }\n}\nexport const OAUTH_STATE = new OauthState();\nexport const OAUTH_TOKEN_STORAGE_NAME = \"session_token\";\nexport const OAUTH_TOKEN_EXPIRES_STORAGE_NAME = \"session_token_expires\";\nexport const OAUTH_REFRESH_QUERY = \"only_session_refresh\";\nexport const OAUTH_ERROR_PAGE_URL = \"/error\";\nexport const OAUTH_CLEAR_PAGE_URL = \"/clear\";\nexport const OAUTH_LOGOUT_PAGE_URL = \"/logout\";\n","import type {\n HeadersInit,\n BodyInit as NodeBodyInit,\n RequestInfo as NodeRequestInfo,\n RequestInit as NodeRequestInit,\n Response as NodeResponse,\n} from \"node-fetch\";\nimport { IS_BROWSER, ResponseError } from \"../constants\";\nimport { createURLWithQueries, downloadFile, isArray, isString, wait } from \"../lib\";\nimport { REQUEST_ERROR, RESPONSE_DATA_SYMBOL } from \"./api.constants\";\nimport type {\n AfterHandler,\n BeforeHandler,\n CreateRequestClientInstance,\n RefetchAfterAuthFn,\n RequestError,\n RequestInterface,\n} from \"./api.types\";\n\nexport function createFetchClient(options: CreateRequestClientInstance) {\n let client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch = options.client;\n let beforeHandlers: BeforeHandler[] | undefined = options.beforeHandlers;\n let afterHandlers: AfterHandler[] | undefined = options.afterHandlers;\n let retries: number[] | undefined = options.retries;\n let timeout: number | undefined = options.timeout;\n let refetchAfterAuthGlobal: RefetchAfterAuthFn | undefined = options.refetchAfterAuth;\n let enabled: boolean = options.enabled ?? true;\n\n function recreate(options: CreateRequestClientInstance) {\n if (\"client\" in options) {\n client = options.client;\n }\n if (\"beforeHandlers\" in options) {\n beforeHandlers = options.beforeHandlers;\n }\n if (\"afterHandlers\" in options) {\n afterHandlers = options.afterHandlers;\n }\n if (\"retries\" in options) {\n retries = options.retries;\n }\n if (\"timeout\" in options) {\n timeout = options.timeout;\n }\n if (\"refetchAfterAuth\" in options) {\n refetchAfterAuthGlobal = options.refetchAfterAuth;\n }\n if (\"enabled\" in options) {\n enabled = options.enabled ?? true;\n }\n }\n\n async function handleRequest<\n IncomingApi = unknown,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<\n | {\n data: ResponseError;\n error: RequestError;\n response: Response | NodeResponse | null;\n }\n | { data: Incoming; error: null; response: Response | NodeResponse | null }\n > {\n if (!enabled) {\n return {\n response: null,\n data: new ResponseError({ message: \"requests disabled\", status: 0 }),\n error: REQUEST_ERROR.Disabled,\n };\n }\n\n const timeoutController = new AbortController();\n const requestController = new AbortController();\n const requestTimeout = request.timeout ?? timeout;\n const requestRetries = request.retries ?? retries;\n\n try {\n if (request.delay) {\n await wait(request.delay);\n }\n if (request.mock) {\n const mock: unknown =\n typeof request.mock === \"function\" ? (request.mock as () => Incoming)() : request.mock;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(mock as IncomingApi)\n : (mock as Incoming);\n\n return { data: transformedResult, error: null, response: null };\n }\n\n if (requestTimeout != undefined && requestTimeout != 0) {\n setTimeout(() => {\n if (requestController.signal.aborted) return;\n timeoutController.abort();\n }, requestTimeout);\n timeoutController.signal.addEventListener(\"abort\", () => requestController.abort(), {\n once: true,\n signal: requestController.signal,\n });\n }\n if (request.signal) {\n request.signal.addEventListener(\"abort\", () => requestController.abort(), {\n once: true,\n signal: requestController.signal,\n });\n }\n\n {\n let handlers: BeforeHandler[] = [];\n if (request.beforeHandlers) {\n handlers = request.beforeHandlers;\n } else if (beforeHandlers) {\n handlers = beforeHandlers;\n }\n if (request.additionalBeforeHandlers) {\n handlers = handlers.concat(request.additionalBeforeHandlers);\n }\n\n if (handlers.length > 0) {\n await executeBeforeHandlers(handlers, request);\n }\n }\n\n const { method, body, path, queries, headers = {} } = request;\n let refetchAfterAuth: RefetchAfterAuthFn | undefined = refetchAfterAuthGlobal;\n if (\"refetchAfterAuth\" in request) {\n refetchAfterAuth = request.refetchAfterAuth;\n }\n\n const url = createURLWithQueries({ baseURL: path, params: queries });\n let [, requestContentType] =\n Object.entries(headers).find(([header]) => header.toLowerCase() === \"content-type\") ?? [];\n if (isArray(requestContentType)) {\n requestContentType = requestContentType[0];\n }\n\n let preparedBody: OutcomingApi = body as OutcomingApi;\n if (request.transformOutcomingData) {\n preparedBody = request.transformOutcomingData(body as Outcoming);\n }\n\n if (\n requestContentType == undefined &&\n !(preparedBody instanceof FormData) &&\n preparedBody !== undefined &&\n !isString(preparedBody)\n ) {\n headers[\"content-type\"] = \"application/json; charset=UTF-8\";\n }\n\n if (\n ((requestContentType == undefined && !isString(preparedBody)) ||\n requestContentType?.toLowerCase()?.includes(\"json\")) &&\n preparedBody !== undefined &&\n !(preparedBody instanceof FormData)\n ) {\n preparedBody = JSON.stringify(preparedBody) as OutcomingApi;\n }\n const response: Response | NodeResponse | undefined = await client(url, {\n method,\n body: preparedBody as ((BodyInit | null) & NodeBodyInit) | undefined,\n headers: headers as globalThis.HeadersInit & HeadersInit,\n signal: requestController.signal as\n | (AbortSignal & NodeRequestInit[\"signal\"])\n | null\n | undefined,\n cache: request.cache,\n credentials: request.credentials,\n integrity: request.integrity,\n keepalive: request.keepalive,\n mode: request.mode,\n priority: request.priority,\n redirect: request.redirect,\n referrer: request.referrer,\n referrerPolicy: request.referrerPolicy,\n compress: request.compress,\n follow: request.follow,\n });\n\n {\n let handlers: AfterHandler[] = [];\n if (request.afterHandlers) {\n handlers = request.afterHandlers;\n } else if (afterHandlers) {\n handlers = afterHandlers;\n }\n if (request.additionalAfterHandlers) {\n handlers = handlers.concat(request.additionalAfterHandlers);\n }\n\n if (handlers.length > 0) {\n await executeAfterHandlers(handlers, request, response);\n }\n }\n\n if (!response.ok) {\n if (response.status === 304) {\n const error = new ResponseError({\n message: REQUEST_ERROR.Cache,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.Cache, error);\n\n return { data: error, error: REQUEST_ERROR.Cache, response };\n }\n /** if you need observe other than only 401 status, you can override some statuses in after handler middleware to 401 */\n if (response.status === 401 && refetchAfterAuth) {\n const newRequest = await refetchAfterAuth(request);\n\n return await handleRequest({ ...newRequest, refetchAfterAuth: false });\n }\n\n if (request.defaultResponse) {\n const defaultResponse: unknown =\n typeof request.defaultResponse === \"function\"\n ? (request.defaultResponse as () => Incoming)()\n : request.defaultResponse;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(defaultResponse as IncomingApi)\n : (defaultResponse as Incoming);\n\n return {\n data: transformedResult,\n error: null,\n response: null,\n };\n }\n if (requestRetries && requestRetries.length > 0) {\n await wait(requestRetries[0]);\n\n return await handleRequest({ ...request, retries: requestRetries.slice(1) });\n }\n\n let result;\n try {\n const contentType = response.headers.get(\"content-type\");\n\n if (RESPONSE_DATA_SYMBOL in response) {\n result = response[RESPONSE_DATA_SYMBOL];\n } else if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n } catch {}\n\n const error = new ResponseError({\n status: response.status,\n message: REQUEST_ERROR.Http,\n description: result,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.Http, error);\n\n return {\n data: error,\n error: REQUEST_ERROR.Http,\n response,\n };\n }\n\n if (request.download) {\n const data = await response.blob();\n const mimeType = response.headers.get(\"content-type\");\n const fileName = response.headers.get(\"content-disposition\");\n\n if (!mimeType) {\n console.warn(\"couldn't download file because content-type header is not exist\");\n } else if (!fileName) {\n console.warn(\"couldn't download file because content-disposition header is not exist\");\n }\n\n if (IS_BROWSER && mimeType && fileName)\n downloadFile({\n data: data as Blob,\n fileName,\n mimeType,\n });\n\n return {\n data: data as Incoming,\n error: null,\n response,\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result: Incoming | IncomingApi = undefined as Incoming | IncomingApi;\n\n if (RESPONSE_DATA_SYMBOL in response) {\n result = response[RESPONSE_DATA_SYMBOL] as Incoming | IncomingApi;\n } else if (contentType?.includes?.(\"text\")) {\n result = (await response.text()) as Incoming | IncomingApi;\n } else if (contentType?.includes?.(\"json\")) {\n result = (await response.json()) as Incoming | IncomingApi;\n } else {\n result = (await response.blob()) as Incoming | IncomingApi;\n }\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(result as IncomingApi)\n : (result as Incoming);\n\n return {\n data: transformedResult,\n error: null,\n response,\n };\n } catch (err: unknown) {\n if (request.defaultResponse) {\n const defaultResponse: unknown =\n typeof request.defaultResponse === \"function\"\n ? (request.defaultResponse as () => Incoming)()\n : request.defaultResponse;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(defaultResponse as IncomingApi)\n : (defaultResponse as Incoming);\n\n return {\n data: transformedResult,\n error: null,\n response: null,\n };\n }\n if (requestRetries && requestRetries.length > 0 && request?.signal?.aborted !== true) {\n await wait(requestRetries[0]);\n\n return await handleRequest({ ...request, retries: requestRetries.slice(1) });\n }\n\n if (err instanceof TypeError) {\n const error = new ResponseError({\n message: REQUEST_ERROR.Network,\n status: 0,\n description: String(err.message),\n });\n request.onError?.(REQUEST_ERROR.Network, error);\n\n return { data: error, error: REQUEST_ERROR.Network, response: null };\n }\n\n if (err instanceof Error && err.name === \"AbortError\") {\n if (timeoutController.signal.aborted) {\n const error = new ResponseError({\n message: REQUEST_ERROR.Timeout,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.Timeout, error);\n\n return { data: error, error: REQUEST_ERROR.Timeout, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.Abort,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.Abort, error);\n\n return { data: error, error: REQUEST_ERROR.Abort, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.Unknown,\n status: 0,\n description: String(err),\n });\n request.onError?.(REQUEST_ERROR.Unknown, error);\n\n return { data: error, error: REQUEST_ERROR.Unknown, response: null };\n } finally {\n requestController.abort();\n }\n }\n\n async function requestWithArrayResponse<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<\n | [ResponseError, RequestError, Response | NodeResponse | null]\n | [Incoming, null, Response | NodeResponse | null]\n > {\n const response = await handleRequest(request);\n\n return [response.data, response.error, response.response] as\n | [ResponseError, RequestError, Response | NodeResponse | null]\n | [Incoming, null, Response | NodeResponse | null];\n }\n\n async function requestWithObjectResponse<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<\n | {\n data: ResponseError;\n error: RequestError;\n response: Response | NodeResponse | null;\n }\n | { data: Incoming; error: null; response: Response | NodeResponse | null }\n > {\n return handleRequest(request);\n }\n\n return {\n requestWithArrayResponse,\n requestWithObjectResponse,\n recreate,\n };\n}\n\nfunction executeBeforeHandlers<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n>(\n handlers: BeforeHandler[],\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n) {\n return new Promise((resolve) => {\n void (async () => {\n for (const handler of handlers) {\n await handler(request);\n }\n\n resolve(1);\n })();\n });\n}\n\nfunction executeAfterHandlers<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n>(\n handlers: AfterHandler[],\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n response: Response | NodeResponse | undefined,\n) {\n return new Promise((resolve) => {\n void (async () => {\n for (const handler of handlers) {\n await handler(request, response);\n }\n\n resolve(1);\n })();\n });\n}\n","import { getQueryValues, isArray, isString, startWith, wait, waitUntil } from \"../lib\";\nimport {\n OAUTH_CLEAR_PAGE_URL,\n OAUTH_ERROR_PAGE_URL,\n OAUTH_LOGOUT_PAGE_URL,\n OAUTH_REFRESH_QUERY,\n OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n OAUTH_TOKEN_STORAGE_NAME,\n} from \"./api.constants\";\nimport type { OauthOptions, RequestInterface } from \"./api.types\";\n\nexport function createOauthProvider(opts: OauthOptions = {}) {\n const {\n refreshTokenWindowUrl = window.origin,\n closeObserveSubWindowInterval = 500,\n waitSubWindow = 15000,\n loginUrl = undefined,\n logoutUrl = undefined,\n clearPageUrl = OAUTH_CLEAR_PAGE_URL,\n errorPageUrl = OAUTH_ERROR_PAGE_URL,\n logoutPageUrl = OAUTH_LOGOUT_PAGE_URL,\n afterClearPageUrl = \"/\",\n expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenStorageName = OAUTH_TOKEN_STORAGE_NAME,\n expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenRequest = undefined,\n forceSetToken = false,\n subWindow = true,\n refreshToken = false,\n } = opts;\n let processing = false;\n\n function getExpires(expires: number) {\n return Date.now() + (expires - 30);\n }\n function checkExpires(expires: null | undefined | string | number): expires is number | string {\n return expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires;\n }\n\n async function refetchAfterRefreshFlow<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>> {\n if (processing) {\n await beforeHandlerSetToken(request);\n return request;\n }\n processing = true;\n if (refreshToken && tokenRequest) {\n const tokenInfo = await startRefreshFlow();\n if (tokenInfo == undefined) {\n if (subWindow) {\n await startLoginFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandlerSetToken(request);\n return request;\n }\n processing = false;\n await beforeHandlerSetToken(request);\n return request;\n }\n if (subWindow) {\n await startLoginFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandlerSetToken(request);\n return request;\n }\n\n async function startLoginFlowInSubWindow() {\n processing = true;\n let waiting = true;\n const url = new URL(\n typeof refreshTokenWindowUrl === \"function\" ? refreshTokenWindowUrl() : refreshTokenWindowUrl,\n );\n // added only refresh tag to autoclose window after flow\n url.searchParams.append(OAUTH_REFRESH_QUERY, \"true\");\n\n // try open window with both of action\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n windowInstance ??= window.open(url.toString(), \"_blank\");\n\n if (windowInstance) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, closeObserveSubWindowInterval);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, waitSubWindow);\n } else {\n if (\"onSubWindowOpenError\" in opts) opts.onSubWindowOpenError?.();\n else {\n await startLoginFlow();\n }\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n processing = false;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLoginFlow(\n loginUrlArg: (() => string) | string | undefined = loginUrl,\n delay: number = 2000,\n ) {\n loginUrlArg ??= `/api/v1/auth?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}&comeback_path=${window.location.pathname}${encodeURIComponent(window.location.search)}`;\n window.location.replace(typeof loginUrlArg === \"function\" ? loginUrlArg() : loginUrlArg);\n await wait(delay);\n return null;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLogoutFlow(\n logoutUrlArg: (() => string) | string | undefined = logoutUrl,\n delay: number = 2000,\n ) {\n logoutUrlArg ??= `/api/v1/auth/logout?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}`;\n window.location.replace(typeof logoutUrlArg === \"function\" ? logoutUrlArg() : logoutUrlArg);\n await wait(delay);\n return null;\n }\n\n async function startRefreshFlow() {\n const tokenInfo = await tokenRequest?.();\n if (tokenInfo) {\n localStorage.setItem(tokenStorageName, tokenInfo.token);\n if (tokenInfo.expires !== 0) {\n localStorage.setItem(expiresTokenStorageName, String(getExpires(tokenInfo.expires)));\n }\n }\n return tokenInfo;\n }\n\n // Processing an oauth flow: extract expires, get token, close sub windows, check if logout/clear/error url\n async function register(): Promise<boolean> {\n if (window.location.pathname === logoutPageUrl) {\n await startLogoutFlow();\n return false;\n }\n if (window.location.pathname === clearPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n window.location.replace(afterClearPageUrl);\n return false;\n }\n if (window.location.pathname === errorPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n return false;\n }\n\n const queries = getQueryValues([expiresTokenQueryName, OAUTH_REFRESH_QUERY]);\n\n const refreshQuery = queries?.[OAUTH_REFRESH_QUERY];\n const expiresQuery = queries?.[expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : null;\n /** Expires token */\n const expires = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : null;\n\n if (checkExpires(expires)) {\n localStorage.setItem(expiresTokenStorageName, String(getExpires(+expires)));\n if (tokenRequest) {\n const tokenInfo = await tokenRequest();\n if (tokenInfo != undefined) {\n localStorage.setItem(tokenStorageName, tokenInfo.token);\n }\n }\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n channel.postMessage(true);\n channel.close();\n window.close();\n return false;\n }\n\n /** Delete expires query */\n const url = new URL(window.location.href);\n url.searchParams.delete(expiresTokenQueryName);\n window.location.replace(url.toString());\n return false;\n }\n\n return true;\n }\n\n async function beforeHandlerCheckExpires<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<void> {\n const expires = localStorage.getItem(expiresTokenStorageName);\n if (checkExpires(expires)) {\n return;\n }\n await refetchAfterRefreshFlow(request);\n }\n\n async function beforeHandlerSetToken<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<void> {\n if (processing) await waitUntil(() => processing);\n\n const token = request.token ?? localStorage.getItem(tokenStorageName);\n const isSameOrigin =\n request.path.includes(window.location.origin) || !startWith(request.path, \"http\");\n if ((!isSameOrigin || forceSetToken) && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n }\n\n return {\n startRefreshFlow,\n startLoginFlowInSubWindow,\n startLoginFlow,\n startLogoutFlow,\n refetchAfterRefreshFlow,\n beforeHandlerSetToken,\n beforeHandlerCheckExpires,\n register,\n get isServicePage() {\n return [errorPageUrl, clearPageUrl, logoutPageUrl].some(\n (u) => document.location.pathname === u,\n );\n },\n get processing() {\n return processing;\n },\n get token() {\n return localStorage.getItem(tokenStorageName);\n },\n get expires() {\n const expires = localStorage.getItem(expiresTokenStorageName);\n return expires == undefined ? null : Number.isNaN(+expires) ? null : +expires;\n },\n get expired() {\n const expiresStr = localStorage.getItem(expiresTokenStorageName);\n const expires =\n expiresStr == undefined ? null : Number.isNaN(+expiresStr) ? null : +expiresStr;\n return expires == undefined ? true : Date.now() > expires;\n },\n };\n}\n","/* eslint-disable no-console */\nimport type { Headers as NodeHeaders, Response as NodeResponse } from \"node-fetch\";\nimport { RESPONSE_DATA_SYMBOL } from \"../api.constants\";\nimport type { AfterHandler } from \"../api.types\";\n\nexport type LoggerAfterHandlerOptions = {\n filter?: (response: Response | NodeResponse | undefined) => boolean;\n filterStatus?: (status: number) => boolean;\n filterUrl?: (url: string) => boolean;\n filterHeaders?: (headers: Headers | NodeHeaders) => boolean;\n};\n\nexport function loggerAfterHandler(options: LoggerAfterHandlerOptions = {}): AfterHandler {\n return (request, response) => {\n return new Promise((resolve) => {\n void (async function logger() {\n try {\n if (\n !response ||\n (options.filter && !options.filter(response)) ||\n (options.filterStatus && !options.filterStatus(response.status)) ||\n (options.filterUrl && !options.filterUrl(response.url)) ||\n (options.filterHeaders && !options.filterHeaders(response.headers))\n ) {\n resolve();\n\n return;\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result;\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n\n Object.defineProperty(response, RESPONSE_DATA_SYMBOL, {\n value: result,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n\n console.log({\n url: response.url,\n status: response.status,\n headers: response.headers,\n body: result,\n });\n\n resolve();\n } catch {\n if (response) {\n console.log({ url: response.url, status: response.status, headers: response.headers });\n }\n\n resolve();\n }\n })().finally(() => {\n resolve();\n });\n });\n };\n}\n","import type {\n BeforeHandler,\n RequestHeader,\n RequestInterface,\n RequestMethod,\n RequestQuery,\n} from \"../api.types\";\n\nexport type LoggerBeforeHandlerOptions = {\n filter?: (request: RequestInterface<unknown, unknown, unknown, unknown>) => boolean;\n filterPath?: (path: string) => boolean;\n filterMethod?: (method: RequestMethod) => boolean;\n filterParams?: (params?: RequestQuery) => boolean;\n filterHeaders?: (headers?: RequestHeader) => boolean;\n};\n\nexport function loggerBeforeHandler(options: LoggerBeforeHandlerOptions = {}): BeforeHandler {\n return (request) => {\n return new Promise((resolve) => {\n if (\n (options.filter &&\n !options.filter(request as RequestInterface<unknown, unknown, unknown, unknown>)) ||\n (options.filterHeaders && !options.filterHeaders(request.headers)) ||\n (options.filterMethod && !options.filterMethod(request.method)) ||\n (options.filterParams && !options.filterParams(request.queries)) ||\n (options.filterPath && !options.filterPath(request.path))\n ) {\n resolve();\n\n return;\n }\n // eslint-disable-next-line no-console\n console.log(request);\n resolve();\n });\n };\n}\n"],"names":["startArray","endArray","separator","numbers"],"mappings":"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,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,CAAC,EAAE,GAAG;AACN,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA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"}
@@ -11,43 +11,48 @@ import { getQueryValues } from '../lib/browser/get-query-values.js';
11
11
  import { OAUTH_CLEAR_PAGE_URL, OAUTH_ERROR_PAGE_URL, OAUTH_LOGOUT_PAGE_URL, OAUTH_TOKEN_EXPIRES_STORAGE_NAME, OAUTH_TOKEN_STORAGE_NAME, OAUTH_REFRESH_QUERY } from './api.constants.js';
12
12
 
13
13
  function createOauthProvider(opts = {}) {
14
- const { refreshTokenWindowUrl = window.origin, closeObserveSubWindowInterval = 500, waitSubWindow = 8000, loginUrl = undefined, logoutUrl = undefined, clearPageUrl = OAUTH_CLEAR_PAGE_URL, errorPageUrl = OAUTH_ERROR_PAGE_URL, logoutPageUrl = OAUTH_LOGOUT_PAGE_URL, afterClearPageUrl = "/", expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenStorageName = OAUTH_TOKEN_STORAGE_NAME, expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenRequest = undefined, forceSetToken = false, subWindow = true, refreshToken = false, } = opts;
14
+ const { refreshTokenWindowUrl = window.origin, closeObserveSubWindowInterval = 500, waitSubWindow = 15000, loginUrl = undefined, logoutUrl = undefined, clearPageUrl = OAUTH_CLEAR_PAGE_URL, errorPageUrl = OAUTH_ERROR_PAGE_URL, logoutPageUrl = OAUTH_LOGOUT_PAGE_URL, afterClearPageUrl = "/", expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenStorageName = OAUTH_TOKEN_STORAGE_NAME, expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenRequest = undefined, forceSetToken = false, subWindow = true, refreshToken = false, } = opts;
15
15
  let processing = false;
16
+ function getExpires(expires) {
17
+ return Date.now() + (expires - 30);
18
+ }
19
+ function checkExpires(expires) {
20
+ return expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires;
21
+ }
16
22
  async function refetchAfterRefreshFlow(request) {
17
23
  if (processing) {
18
- await beforeHandler(request);
24
+ await beforeHandlerSetToken(request);
19
25
  return request;
20
26
  }
21
27
  processing = true;
22
28
  if (refreshToken && tokenRequest) {
23
- const token = await tokenRequest();
24
- if (token == undefined) {
29
+ const tokenInfo = await startRefreshFlow();
30
+ if (tokenInfo == undefined) {
25
31
  if (subWindow) {
26
- await startRefreshFlowInSubWindow();
32
+ await startLoginFlowInSubWindow();
27
33
  }
28
34
  else {
29
35
  await startLoginFlow();
30
36
  }
31
37
  processing = false;
32
- await beforeHandler(request);
38
+ await beforeHandlerSetToken(request);
33
39
  return request;
34
40
  }
35
- localStorage.setItem(tokenStorageName, token);
36
41
  processing = false;
37
- await beforeHandler(request);
42
+ await beforeHandlerSetToken(request);
38
43
  return request;
39
44
  }
40
45
  if (subWindow) {
41
- await startRefreshFlowInSubWindow();
46
+ await startLoginFlowInSubWindow();
42
47
  }
43
48
  else {
44
49
  await startLoginFlow();
45
50
  }
46
51
  processing = false;
47
- await beforeHandler(request);
52
+ await beforeHandlerSetToken(request);
48
53
  return request;
49
54
  }
50
- async function startRefreshFlowInSubWindow() {
55
+ async function startLoginFlowInSubWindow() {
51
56
  processing = true;
52
57
  let waiting = true;
53
58
  const url = new URL(typeof refreshTokenWindowUrl === "function" ? refreshTokenWindowUrl() : refreshTokenWindowUrl);
@@ -111,6 +116,16 @@ function createOauthProvider(opts = {}) {
111
116
  await wait(delay);
112
117
  return null;
113
118
  }
119
+ async function startRefreshFlow() {
120
+ const tokenInfo = await tokenRequest?.();
121
+ if (tokenInfo) {
122
+ localStorage.setItem(tokenStorageName, tokenInfo.token);
123
+ if (tokenInfo.expires !== 0) {
124
+ localStorage.setItem(expiresTokenStorageName, String(getExpires(tokenInfo.expires)));
125
+ }
126
+ }
127
+ return tokenInfo;
128
+ }
114
129
  // Processing an oauth flow: extract expires, get token, close sub windows, check if logout/clear/error url
115
130
  async function register() {
116
131
  if (window.location.pathname === logoutPageUrl) {
@@ -136,19 +151,19 @@ function createOauthProvider(opts = {}) {
136
151
  ? refreshQuery === "true"
137
152
  : isArray(refreshQuery)
138
153
  ? refreshQuery[refreshQuery.length - 1] === "true"
139
- : false;
154
+ : null;
140
155
  /** Expires token */
141
156
  const expires = isString(expiresQuery)
142
157
  ? expiresQuery
143
158
  : isArray(expiresQuery)
144
159
  ? expiresQuery[expiresQuery.length - 1]
145
- : false;
146
- if (expires && !Number.isNaN(+expires) && Date.now() < +expires) {
147
- localStorage.setItem(expiresTokenStorageName, expires);
160
+ : null;
161
+ if (checkExpires(expires)) {
162
+ localStorage.setItem(expiresTokenStorageName, String(getExpires(+expires)));
148
163
  if (tokenRequest) {
149
- const token = await tokenRequest();
150
- if (token != undefined && tokenStorageName) {
151
- localStorage.setItem(tokenStorageName, token);
164
+ const tokenInfo = await tokenRequest();
165
+ if (tokenInfo != undefined) {
166
+ localStorage.setItem(tokenStorageName, tokenInfo.token);
152
167
  }
153
168
  }
154
169
  /** Close if OnlyRefresh window */
@@ -167,7 +182,14 @@ function createOauthProvider(opts = {}) {
167
182
  }
168
183
  return true;
169
184
  }
170
- async function beforeHandler(request) {
185
+ async function beforeHandlerCheckExpires(request) {
186
+ const expires = localStorage.getItem(expiresTokenStorageName);
187
+ if (checkExpires(expires)) {
188
+ return;
189
+ }
190
+ await refetchAfterRefreshFlow(request);
191
+ }
192
+ async function beforeHandlerSetToken(request) {
171
193
  if (processing)
172
194
  await waitUntil(() => processing);
173
195
  const token = request.token ?? localStorage.getItem(tokenStorageName);
@@ -179,12 +201,14 @@ function createOauthProvider(opts = {}) {
179
201
  };
180
202
  }
181
203
  return {
182
- startRefreshFlowInSubWindow,
204
+ startRefreshFlow,
205
+ startLoginFlowInSubWindow,
183
206
  startLoginFlow,
184
207
  startLogoutFlow,
185
- register,
186
208
  refetchAfterRefreshFlow,
187
- beforeHandler,
209
+ beforeHandlerSetToken,
210
+ beforeHandlerCheckExpires,
211
+ register,
188
212
  get isServicePage() {
189
213
  return [errorPageUrl, clearPageUrl, logoutPageUrl].some((u) => document.location.pathname === u);
190
214
  },
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sources":["../../../src/api/oauth.ts"],"sourcesContent":["import { getQueryValues, isArray, isString, startWith, wait, waitUntil } from \"../lib\";\nimport {\n OAUTH_CLEAR_PAGE_URL,\n OAUTH_ERROR_PAGE_URL,\n OAUTH_LOGOUT_PAGE_URL,\n OAUTH_REFRESH_QUERY,\n OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n OAUTH_TOKEN_STORAGE_NAME,\n} from \"./api.constants\";\nimport type { OauthOptions, RequestInterface } from \"./api.types\";\n\nexport function createOauthProvider(opts: OauthOptions = {}) {\n const {\n refreshTokenWindowUrl = window.origin,\n closeObserveSubWindowInterval = 500,\n waitSubWindow = 8000,\n loginUrl = undefined,\n logoutUrl = undefined,\n clearPageUrl = OAUTH_CLEAR_PAGE_URL,\n errorPageUrl = OAUTH_ERROR_PAGE_URL,\n logoutPageUrl = OAUTH_LOGOUT_PAGE_URL,\n afterClearPageUrl = \"/\",\n expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenStorageName = OAUTH_TOKEN_STORAGE_NAME,\n expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenRequest = undefined,\n forceSetToken = false,\n subWindow = true,\n refreshToken = false,\n } = opts;\n let processing = false;\n\n async function refetchAfterRefreshFlow<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>> {\n if (processing) {\n await beforeHandler(request);\n return request;\n }\n processing = true;\n if (refreshToken && tokenRequest) {\n const token = await tokenRequest();\n if (token == undefined) {\n if (subWindow) {\n await startRefreshFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandler(request);\n return request;\n }\n localStorage.setItem(tokenStorageName, token);\n processing = false;\n await beforeHandler(request);\n return request;\n }\n if (subWindow) {\n await startRefreshFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandler(request);\n return request;\n }\n\n async function startRefreshFlowInSubWindow() {\n processing = true;\n let waiting = true;\n const url = new URL(\n typeof refreshTokenWindowUrl === \"function\" ? refreshTokenWindowUrl() : refreshTokenWindowUrl,\n );\n // added only refresh tag to autoclose window after flow\n url.searchParams.append(OAUTH_REFRESH_QUERY, \"true\");\n\n // try open window with both of action\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n windowInstance ??= window.open(url.toString(), \"_blank\");\n\n if (windowInstance) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, closeObserveSubWindowInterval);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, waitSubWindow);\n } else {\n if (\"onSubWindowOpenError\" in opts) opts.onSubWindowOpenError?.();\n else {\n await startLoginFlow();\n }\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n processing = false;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLoginFlow(\n loginUrlArg: (() => string) | string | undefined = loginUrl,\n delay: number = 2000,\n ) {\n loginUrlArg ??= `/api/v1/auth?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}&comeback_path=${window.location.pathname}${encodeURIComponent(window.location.search)}`;\n window.location.replace(typeof loginUrlArg === \"function\" ? loginUrlArg() : loginUrlArg);\n await wait(delay);\n return null;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLogoutFlow(\n logoutUrlArg: (() => string) | string | undefined = logoutUrl,\n delay: number = 2000,\n ) {\n logoutUrlArg ??= `/api/v1/auth/logout?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}`;\n window.location.replace(typeof logoutUrlArg === \"function\" ? logoutUrlArg() : logoutUrlArg);\n await wait(delay);\n return null;\n }\n\n // Processing an oauth flow: extract expires, get token, close sub windows, check if logout/clear/error url\n async function register(): Promise<boolean> {\n if (window.location.pathname === logoutPageUrl) {\n await startLogoutFlow();\n return false;\n }\n if (window.location.pathname === clearPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n window.location.replace(afterClearPageUrl);\n return false;\n }\n if (window.location.pathname === errorPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n return false;\n }\n\n const queries = getQueryValues([expiresTokenQueryName, OAUTH_REFRESH_QUERY]);\n\n const refreshQuery = queries?.[OAUTH_REFRESH_QUERY];\n const expiresQuery = queries?.[expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : false;\n /** Expires token */\n const expires = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : false;\n\n if (expires && !Number.isNaN(+expires) && Date.now() < +expires) {\n localStorage.setItem(expiresTokenStorageName, expires);\n if (tokenRequest) {\n const token = await tokenRequest();\n if (token != undefined && tokenStorageName) {\n localStorage.setItem(tokenStorageName, token);\n }\n }\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n channel.postMessage(true);\n channel.close();\n window.close();\n return false;\n }\n\n /** Delete expires query */\n const url = new URL(window.location.href);\n url.searchParams.delete(expiresTokenQueryName);\n window.location.replace(url.toString());\n return false;\n }\n\n return true;\n }\n\n async function beforeHandler<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<void> {\n if (processing) await waitUntil(() => processing);\n\n const token = request.token ?? localStorage.getItem(tokenStorageName);\n const isSameOrigin =\n request.path.includes(window.location.origin) || !startWith(request.path, \"http\");\n if ((!isSameOrigin || forceSetToken) && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n }\n\n return {\n startRefreshFlowInSubWindow,\n startLoginFlow,\n startLogoutFlow,\n register,\n refetchAfterRefreshFlow,\n beforeHandler,\n get isServicePage() {\n return [errorPageUrl, clearPageUrl, logoutPageUrl].some(\n (u) => document.location.pathname === u,\n );\n },\n get processing() {\n return processing;\n },\n get token() {\n return localStorage.getItem(tokenStorageName);\n },\n get expires() {\n const expires = localStorage.getItem(expiresTokenStorageName);\n return expires == undefined ? null : Number.isNaN(+expires) ? null : +expires;\n },\n get expired() {\n const expiresStr = localStorage.getItem(expiresTokenStorageName);\n const expires =\n expiresStr == undefined ? null : Number.isNaN(+expiresStr) ? null : +expiresStr;\n return expires == undefined ? true : Date.now() > expires;\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.js","sources":["../../../src/api/oauth.ts"],"sourcesContent":["import { getQueryValues, isArray, isString, startWith, wait, waitUntil } from \"../lib\";\nimport {\n OAUTH_CLEAR_PAGE_URL,\n OAUTH_ERROR_PAGE_URL,\n OAUTH_LOGOUT_PAGE_URL,\n OAUTH_REFRESH_QUERY,\n OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n OAUTH_TOKEN_STORAGE_NAME,\n} from \"./api.constants\";\nimport type { OauthOptions, RequestInterface } from \"./api.types\";\n\nexport function createOauthProvider(opts: OauthOptions = {}) {\n const {\n refreshTokenWindowUrl = window.origin,\n closeObserveSubWindowInterval = 500,\n waitSubWindow = 15000,\n loginUrl = undefined,\n logoutUrl = undefined,\n clearPageUrl = OAUTH_CLEAR_PAGE_URL,\n errorPageUrl = OAUTH_ERROR_PAGE_URL,\n logoutPageUrl = OAUTH_LOGOUT_PAGE_URL,\n afterClearPageUrl = \"/\",\n expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenStorageName = OAUTH_TOKEN_STORAGE_NAME,\n expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenRequest = undefined,\n forceSetToken = false,\n subWindow = true,\n refreshToken = false,\n } = opts;\n let processing = false;\n\n function getExpires(expires: number) {\n return Date.now() + (expires - 30);\n }\n function checkExpires(expires: null | undefined | string | number): expires is number | string {\n return expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires;\n }\n\n async function refetchAfterRefreshFlow<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>> {\n if (processing) {\n await beforeHandlerSetToken(request);\n return request;\n }\n processing = true;\n if (refreshToken && tokenRequest) {\n const tokenInfo = await startRefreshFlow();\n if (tokenInfo == undefined) {\n if (subWindow) {\n await startLoginFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandlerSetToken(request);\n return request;\n }\n processing = false;\n await beforeHandlerSetToken(request);\n return request;\n }\n if (subWindow) {\n await startLoginFlowInSubWindow();\n } else {\n await startLoginFlow();\n }\n processing = false;\n await beforeHandlerSetToken(request);\n return request;\n }\n\n async function startLoginFlowInSubWindow() {\n processing = true;\n let waiting = true;\n const url = new URL(\n typeof refreshTokenWindowUrl === \"function\" ? refreshTokenWindowUrl() : refreshTokenWindowUrl,\n );\n // added only refresh tag to autoclose window after flow\n url.searchParams.append(OAUTH_REFRESH_QUERY, \"true\");\n\n // try open window with both of action\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n windowInstance ??= window.open(url.toString(), \"_blank\");\n\n if (windowInstance) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, closeObserveSubWindowInterval);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, waitSubWindow);\n } else {\n if (\"onSubWindowOpenError\" in opts) opts.onSubWindowOpenError?.();\n else {\n await startLoginFlow();\n }\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n processing = false;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLoginFlow(\n loginUrlArg: (() => string) | string | undefined = loginUrl,\n delay: number = 2000,\n ) {\n loginUrlArg ??= `/api/v1/auth?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}&comeback_path=${window.location.pathname}${encodeURIComponent(window.location.search)}`;\n window.location.replace(typeof loginUrlArg === \"function\" ? loginUrlArg() : loginUrlArg);\n await wait(delay);\n return null;\n }\n\n // Trigger an oauth flow through some proxy server\n async function startLogoutFlow(\n logoutUrlArg: (() => string) | string | undefined = logoutUrl,\n delay: number = 2000,\n ) {\n logoutUrlArg ??= `/api/v1/auth/logout?frontend_protocol=${window.location.protocol.replace(\":\", \"\")}&frontend_host=${window.location.host}`;\n window.location.replace(typeof logoutUrlArg === \"function\" ? logoutUrlArg() : logoutUrlArg);\n await wait(delay);\n return null;\n }\n\n async function startRefreshFlow() {\n const tokenInfo = await tokenRequest?.();\n if (tokenInfo) {\n localStorage.setItem(tokenStorageName, tokenInfo.token);\n if (tokenInfo.expires !== 0) {\n localStorage.setItem(expiresTokenStorageName, String(getExpires(tokenInfo.expires)));\n }\n }\n return tokenInfo;\n }\n\n // Processing an oauth flow: extract expires, get token, close sub windows, check if logout/clear/error url\n async function register(): Promise<boolean> {\n if (window.location.pathname === logoutPageUrl) {\n await startLogoutFlow();\n return false;\n }\n if (window.location.pathname === clearPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n window.location.replace(afterClearPageUrl);\n return false;\n }\n if (window.location.pathname === errorPageUrl) {\n localStorage.removeItem(expiresTokenStorageName);\n localStorage.removeItem(tokenStorageName);\n return false;\n }\n\n const queries = getQueryValues([expiresTokenQueryName, OAUTH_REFRESH_QUERY]);\n\n const refreshQuery = queries?.[OAUTH_REFRESH_QUERY];\n const expiresQuery = queries?.[expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : null;\n /** Expires token */\n const expires = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : null;\n\n if (checkExpires(expires)) {\n localStorage.setItem(expiresTokenStorageName, String(getExpires(+expires)));\n if (tokenRequest) {\n const tokenInfo = await tokenRequest();\n if (tokenInfo != undefined) {\n localStorage.setItem(tokenStorageName, tokenInfo.token);\n }\n }\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(OAUTH_REFRESH_QUERY);\n channel.postMessage(true);\n channel.close();\n window.close();\n return false;\n }\n\n /** Delete expires query */\n const url = new URL(window.location.href);\n url.searchParams.delete(expiresTokenQueryName);\n window.location.replace(url.toString());\n return false;\n }\n\n return true;\n }\n\n async function beforeHandlerCheckExpires<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<void> {\n const expires = localStorage.getItem(expiresTokenStorageName);\n if (checkExpires(expires)) {\n return;\n }\n await refetchAfterRefreshFlow(request);\n }\n\n async function beforeHandlerSetToken<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<void> {\n if (processing) await waitUntil(() => processing);\n\n const token = request.token ?? localStorage.getItem(tokenStorageName);\n const isSameOrigin =\n request.path.includes(window.location.origin) || !startWith(request.path, \"http\");\n if ((!isSameOrigin || forceSetToken) && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n }\n\n return {\n startRefreshFlow,\n startLoginFlowInSubWindow,\n startLoginFlow,\n startLogoutFlow,\n refetchAfterRefreshFlow,\n beforeHandlerSetToken,\n beforeHandlerCheckExpires,\n register,\n get isServicePage() {\n return [errorPageUrl, clearPageUrl, logoutPageUrl].some(\n (u) => document.location.pathname === u,\n );\n },\n get processing() {\n return processing;\n },\n get token() {\n return localStorage.getItem(tokenStorageName);\n },\n get expires() {\n const expires = localStorage.getItem(expiresTokenStorageName);\n return expires == undefined ? null : Number.isNaN(+expires) ? null : +expires;\n },\n get expired() {\n const expiresStr = localStorage.getItem(expiresTokenStorageName);\n const expires =\n expiresStr == undefined ? null : Number.isNaN(+expiresStr) ? null : +expiresStr;\n return expires == undefined ? true : Date.now() > expires;\n },\n };\n}\n"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -169,6 +169,10 @@ type RequestInstance = {
169
169
  type RefetchAfterAuthFn = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>>;
170
170
  type BeforeHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<void> | void;
171
171
  type AfterHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>, response: Response | Response$1 | undefined) => Promise<void> | void;
172
+ type OauthToken = {
173
+ token: string;
174
+ expires: number;
175
+ };
172
176
  type OauthOptions = {
173
177
  /** An url of start oauth login flow through proxy */
174
178
  loginUrl?: (() => string) | string;
@@ -197,7 +201,7 @@ type OauthOptions = {
197
201
  /** A name of token in local storage */
198
202
  tokenStorageName?: string;
199
203
  /** A request for update token */
200
- tokenRequest?: () => Promise<string | null | undefined>;
204
+ tokenRequest?: () => Promise<OauthToken | null | undefined>;
201
205
  /** Set token to request headers event if it is same origin */
202
206
  forceSetToken?: boolean;
203
207
  /** Set to update token flow in sub window, by default true */
@@ -221,12 +225,14 @@ declare function createFetchClient(options: CreateRequestClientInstance): {
221
225
  };
222
226
 
223
227
  declare function createOauthProvider(opts?: OauthOptions): {
224
- startRefreshFlowInSubWindow: () => Promise<void>;
228
+ startRefreshFlow: () => Promise<OauthToken | null | undefined>;
229
+ startLoginFlowInSubWindow: () => Promise<void>;
225
230
  startLoginFlow: (loginUrlArg?: (() => string) | string | undefined, delay?: number) => Promise<null>;
226
231
  startLogoutFlow: (logoutUrlArg?: (() => string) | string | undefined, delay?: number) => Promise<null>;
227
- register: () => Promise<boolean>;
228
232
  refetchAfterRefreshFlow: <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>>;
229
- beforeHandler: <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<void>;
233
+ beforeHandlerSetToken: <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<void>;
234
+ beforeHandlerCheckExpires: <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<void>;
235
+ register: () => Promise<boolean>;
230
236
  readonly isServicePage: boolean;
231
237
  readonly processing: boolean;
232
238
  readonly token: string | null;
@@ -464,4 +470,4 @@ declare function throttle<TArgs extends any[]>(func: (...args: TArgs) => any, in
464
470
  declare function type(value: unknown): string;
465
471
 
466
472
  export { COLOR_FORMATS, DATE_TYPES, FIELD_TYPES, IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER, OAUTH_CLEAR_PAGE_URL, OAUTH_ERROR_PAGE_URL, OAUTH_LOGOUT_PAGE_URL, OAUTH_REFRESH_QUERY, OAUTH_STATE, OAUTH_TOKEN_EXPIRES_STORAGE_NAME, OAUTH_TOKEN_STORAGE_NAME, REQUEST_ERROR, RESPONSE_DATA_SYMBOL, ResponseError, arrayToMapByKey, asyncLoop, buildQueryString, checkType, cloneDeep, copyToClipboard, createFetchClient, createGlobalId, createLocalIdGenerator, createOauthProvider, createURLWithQueries, dateDifference, dateFormat, debounce, declination, difference, differenceBy, differenceWith, downloadFile, downloadJson, execAnimation, extractQueries, fieldViewFormat, getByPath, getCallerFunctionName, getColorFormat, getDateByRules, getFileNameFromHeader, getQueryValues, getRandomColor, getToday, getVisiblePosition, isArray, isBoolean, isDate, isEqual, isId, isNull, isNullable, isNumber, isObject, isPrimitive, isString, isToday, isUndefined, joinPaths, jsonParse, limitStreamOfRequests, loggerAfterHandler, loggerBeforeHandler, randomBase64, randomHex, randomNumber, randomString, readFile, setByPath, speedTest, startWith, syncObjectValues, takeOpacityColors, throttle, transformHEXtoRGB, transformRGBAtoRGB, transformRGBtoRGBA, transformToColor, transformToDayjs, transformToNumber, translit, trimUrl, type, wait, waitUntil };
467
- export type { AfterHandler, BeforeHandler, ColorFormat, CreateRequestClientInstance, DateGetterRule, DateType, DayJS, FieldType, IsEqual, LoggerAfterHandlerOptions, LoggerBeforeHandlerOptions, Maybe, OauthOptions, PositionPlacements, RefetchAfterAuthFn, RequestError, RequestHeader, RequestInstance, RequestInterface, RequestMethod, RequestQuery, RequestQueryValue, RequestTransformIncoming, RequestTransformOutcoming, ValueOf, VisiblePosition };
473
+ export type { AfterHandler, BeforeHandler, ColorFormat, CreateRequestClientInstance, DateGetterRule, DateType, DayJS, FieldType, IsEqual, LoggerAfterHandlerOptions, LoggerBeforeHandlerOptions, Maybe, OauthOptions, OauthToken, PositionPlacements, RefetchAfterAuthFn, RequestError, RequestHeader, RequestInstance, RequestInterface, RequestMethod, RequestQuery, RequestQueryValue, RequestTransformIncoming, RequestTransformOutcoming, ValueOf, VisiblePosition };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krainovsd/js-helpers",
3
- "version": "0.19.0-beta.6",
3
+ "version": "0.19.0-beta.8",
4
4
  "description": "Krainov helpers",
5
5
  "type": "module",
6
6
  "author": "KrainovSD <denislosev48@gmail.com>",