@krainovsd/js-helpers 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,9 @@ class OauthState {
18
18
  }
19
19
  }
20
20
  const OAUTH_STATE = new OauthState();
21
+ const OAUTH_TOKEN_STORAGE_NAME = "session_token";
22
+ const OAUTH_TOKEN_EXPIRES_STORAGE_NAME = "session_token_expires";
23
+ const OAUTH_REFRESH_QUERY = "only_session_refresh";
21
24
 
22
- export { OAUTH_STATE, REQUEST_ERROR, RESPONSE_DATA_SYMBOL };
25
+ export { OAUTH_REFRESH_QUERY, OAUTH_STATE, OAUTH_TOKEN_EXPIRES_STORAGE_NAME, OAUTH_TOKEN_STORAGE_NAME, REQUEST_ERROR, RESPONSE_DATA_SYMBOL };
23
26
  //# sourceMappingURL=api.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.constants.js","sources":["../../../src/api/api.constants.ts"],"sourcesContent":["export const RESPONSE_DATA_SYMBOL = Symbol(\"response data\");\nexport const REQUEST_ERROR = {\n HTTP_ERROR: \"http\",\n NETWORK_ERROR: \"network\",\n TIMEOUT_ERROR: \"timeout\",\n ABORT_ERROR: \"abort\",\n VALIDATION_ERROR: \"validation\",\n CACHE_ERROR: \"cache\",\n UNKNOWN_ERROR: \"unknown\",\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();\n"],"names":[],"mappings":"MAAa,oBAAoB,GAAG,MAAM,CAAC,eAAe;AAC7C,MAAA,aAAa,GAAG;AAC3B,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,aAAa,EAAE,SAAS;;AAG1B,MAAM,UAAU,CAAA;IACN,SAAS,GAAY,KAAK;AAElC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAEzB;AACY,MAAA,WAAW,GAAG,IAAI,UAAU;;;;"}
1
+ {"version":3,"file":"api.constants.js","sources":["../../../src/api/api.constants.ts"],"sourcesContent":["export const RESPONSE_DATA_SYMBOL = Symbol(\"response data\");\nexport const REQUEST_ERROR = {\n HTTP_ERROR: \"http\",\n NETWORK_ERROR: \"network\",\n TIMEOUT_ERROR: \"timeout\",\n ABORT_ERROR: \"abort\",\n VALIDATION_ERROR: \"validation\",\n CACHE_ERROR: \"cache\",\n UNKNOWN_ERROR: \"unknown\",\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\";\n"],"names":[],"mappings":"MAAa,oBAAoB,GAAG,MAAM,CAAC,eAAe;AAC7C,MAAA,aAAa,GAAG;AAC3B,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,gBAAgB,EAAE,YAAY;AAC9B,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,aAAa,EAAE,SAAS;;AAG1B,MAAM,UAAU,CAAA;IACN,SAAS,GAAY,KAAK;AAElC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;IAGvB,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAEzB;AACY,MAAA,WAAW,GAAG,IAAI,UAAU;AAClC,MAAM,wBAAwB,GAAG;AACjC,MAAM,gCAAgC,GAAG;AACzC,MAAM,mBAAmB,GAAG;;;;"}
@@ -158,7 +158,10 @@ function createFetchClient(options) {
158
158
  request.onError?.(REQUEST_ERROR.CACHE_ERROR, error);
159
159
  return { data: error, error: REQUEST_ERROR.CACHE_ERROR, response };
160
160
  }
161
- if (response.status === 401 && refetchAfterOauth$1 && oauthOptions) {
161
+ if ((oauthOptions?.responseStatusesForOauth?.includes(response.status) ||
162
+ (!oauthOptions?.responseStatusesForOauth && response.status === 401)) &&
163
+ oauthOptions &&
164
+ refetchAfterOauth$1) {
162
165
  return await refetchAfterOauth(oauthOptions, () => handleRequest({ ...request, refetchAfterOauth: false }));
163
166
  }
164
167
  if (response.status === 401 && refetchAfterAuth) {
@@ -329,7 +332,6 @@ function executeBeforeHandlers(handlers, request) {
329
332
  return new Promise((resolve) => {
330
333
  void (async () => {
331
334
  for (const handler of handlers) {
332
- // eslint-disable-next-line no-await-in-loop
333
335
  await handler(request);
334
336
  }
335
337
  resolve(1);
@@ -340,7 +342,6 @@ function executeAfterHandlers(handlers, request, response) {
340
342
  return new Promise((resolve) => {
341
343
  void (async () => {
342
344
  for (const handler of handlers) {
343
- // eslint-disable-next-line no-await-in-loop
344
345
  await handler(request, response);
345
346
  }
346
347
  resolve(1);
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sources":["../../../src/api/api.ts"],"sourcesContent":["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 OauthOptions,\n RequestError,\n RequestInterface,\n} from \"./api.types\";\nimport { refetchAfterOauth as refetchAfterOauthFn } from \"./oauth\";\n\nexport type RefetchAfterAuthFn =\n | (<IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ) => Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>>)\n | undefined;\n\ntype CreateRequestClientInstance = {\n client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch;\n oauthOptions?: OauthOptions;\n beforeHandlers?: BeforeHandler[];\n afterHandlers?: AfterHandler[];\n retries?: number[];\n timeout?: number;\n refetchAfterAuth?: RefetchAfterAuthFn;\n};\n\nexport type RequestInstance = {\n <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<Incoming>;\n recreate: (options: CreateRequestClientInstance) => void;\n};\n\nexport function createFetchClient(options: CreateRequestClientInstance) {\n let client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch = options.client;\n let oauthOptions: OauthOptions | undefined = options.oauthOptions;\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 = options.refetchAfterAuth;\n\n function recreate(options: CreateRequestClientInstance) {\n if (\"client\" in options) {\n client = options.client;\n }\n if (\"oauthOptions\" in options) {\n oauthOptions = options.oauthOptions;\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 }\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 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 = {}, refetchAfterOauth = true } = request;\n let refetchAfterAuth: RefetchAfterAuthFn = refetchAfterAuthGlobal;\n if (\"refetchAfterAuth\" in request) {\n refetchAfterAuth = request.refetchAfterAuth as RefetchAfterAuthFn;\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_ERROR,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.CACHE_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.CACHE_ERROR, response };\n }\n if (response.status === 401 && refetchAfterOauth && oauthOptions) {\n return await refetchAfterOauthFn(oauthOptions, () =>\n handleRequest({ ...request, refetchAfterOauth: false }),\n );\n }\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_ERROR,\n description: result,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.HTTP_ERROR, error);\n\n return {\n data: error,\n error: REQUEST_ERROR.HTTP_ERROR,\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_ERROR,\n status: 0,\n description: String(err.message),\n });\n request.onError?.(REQUEST_ERROR.NETWORK_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.NETWORK_ERROR, 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_ERROR,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.TIMEOUT_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.TIMEOUT_ERROR, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.ABORT_ERROR,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.ABORT_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.ABORT_ERROR, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.UNKNOWN_ERROR,\n status: 0,\n description: String(err),\n });\n request.onError?.(REQUEST_ERROR.UNKNOWN_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.UNKNOWN_ERROR, 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 // eslint-disable-next-line no-await-in-loop\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 // eslint-disable-next-line no-await-in-loop\n await handler(request, response);\n }\n\n resolve(1);\n })();\n });\n}\n"],"names":["refetchAfterOauth","refetchAfterOauthFn"],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sources":["../../../src/api/api.ts"],"sourcesContent":["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 OauthOptions,\n RequestError,\n RequestInterface,\n} from \"./api.types\";\nimport { refetchAfterOauth as refetchAfterOauthFn } from \"./oauth\";\n\nexport type RefetchAfterAuthFn =\n | (<IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ) => Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>>)\n | undefined;\n\ntype CreateRequestClientInstance = {\n client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch;\n oauthOptions?: OauthOptions;\n beforeHandlers?: BeforeHandler[];\n afterHandlers?: AfterHandler[];\n retries?: number[];\n timeout?: number;\n refetchAfterAuth?: RefetchAfterAuthFn;\n};\n\nexport type RequestInstance = {\n <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<Incoming>;\n recreate: (options: CreateRequestClientInstance) => void;\n};\n\nexport function createFetchClient(options: CreateRequestClientInstance) {\n let client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch = options.client;\n let oauthOptions: OauthOptions | undefined = options.oauthOptions;\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 = options.refetchAfterAuth;\n\n function recreate(options: CreateRequestClientInstance) {\n if (\"client\" in options) {\n client = options.client;\n }\n if (\"oauthOptions\" in options) {\n oauthOptions = options.oauthOptions;\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 }\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 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 = {}, refetchAfterOauth = true } = request;\n let refetchAfterAuth: RefetchAfterAuthFn = refetchAfterAuthGlobal;\n if (\"refetchAfterAuth\" in request) {\n refetchAfterAuth = request.refetchAfterAuth as RefetchAfterAuthFn;\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_ERROR,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.CACHE_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.CACHE_ERROR, response };\n }\n if (\n (oauthOptions?.responseStatusesForOauth?.includes(response.status) ||\n (!oauthOptions?.responseStatusesForOauth && response.status === 401)) &&\n oauthOptions &&\n refetchAfterOauth\n ) {\n return await refetchAfterOauthFn(oauthOptions, () =>\n handleRequest({ ...request, refetchAfterOauth: false }),\n );\n }\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_ERROR,\n description: result,\n headers: Object.fromEntries(response.headers.entries()),\n });\n request.onError?.(REQUEST_ERROR.HTTP_ERROR, error);\n\n return {\n data: error,\n error: REQUEST_ERROR.HTTP_ERROR,\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_ERROR,\n status: 0,\n description: String(err.message),\n });\n request.onError?.(REQUEST_ERROR.NETWORK_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.NETWORK_ERROR, 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_ERROR,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.TIMEOUT_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.TIMEOUT_ERROR, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.ABORT_ERROR,\n status: 0,\n });\n request.onError?.(REQUEST_ERROR.ABORT_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.ABORT_ERROR, response: null };\n }\n\n const error = new ResponseError({\n message: REQUEST_ERROR.UNKNOWN_ERROR,\n status: 0,\n description: String(err),\n });\n request.onError?.(REQUEST_ERROR.UNKNOWN_ERROR, error);\n\n return { data: error, error: REQUEST_ERROR.UNKNOWN_ERROR, 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"],"names":["refetchAfterOauth","refetchAfterOauthFn"],"mappings":"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"}
@@ -4,47 +4,20 @@ import 'dayjs';
4
4
  import '../../lib/lodash/get-by-path.js';
5
5
  import '../../lib/lodash/set-by-path.js';
6
6
  import { startWith } from '../../lib/utils/start-with.js';
7
- import { OAUTH_STATE } from '../api.constants.js';
8
- import { getOauthTokenFromOtherWindow } from '../oauth.js';
7
+ import { OAUTH_TOKEN_STORAGE_NAME, OAUTH_STATE } from '../api.constants.js';
9
8
 
10
- const oauthBeforeHandler = (options) => async (request) => {
11
- if (!options.expiresTokenStorageName) {
12
- throw new Error("Auth middleware hasn't required options");
13
- }
14
- const isSameOrigin = !startWith(request.path, "http");
15
- if (request.token) {
16
- if (!isSameOrigin)
17
- request.headers = {
18
- ...request.headers,
19
- Authorization: `Bearer ${request.token}`,
20
- };
21
- return;
22
- }
9
+ const authBeforeHandler = (options = {}) => async (request) => {
10
+ const { tokenStorageName = OAUTH_TOKEN_STORAGE_NAME, forceSetToken = false } = options;
23
11
  if (OAUTH_STATE.fetching)
24
12
  await waitUntil(() => OAUTH_STATE.fetching);
25
- const expires = localStorage.getItem(options.expiresTokenStorageName);
26
- let token;
27
- if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {
28
- OAUTH_STATE.fetching = true;
29
- await getOauthTokenFromOtherWindow({
30
- onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,
31
- onWindowOpenError: options.onWindowOpenError,
32
- refreshTokenWindowUrl: options.refreshTokenWindowUrl,
33
- wait: options.wait,
34
- expiresTokenStorageName: options.expiresTokenStorageName,
35
- closeObserveInterval: options.closeObserveInterval,
36
- });
37
- if (options.tokenStorageName) {
38
- token = localStorage.getItem(options.tokenStorageName);
39
- }
40
- OAUTH_STATE.fetching = false;
41
- }
42
- if (!isSameOrigin && token)
13
+ const token = request.token ?? localStorage.getItem(tokenStorageName);
14
+ const isSameOrigin = request.path.includes(window.location.origin) || !startWith(request.path, "http");
15
+ if ((!isSameOrigin || forceSetToken) && token)
43
16
  request.headers = {
44
17
  ...request.headers,
45
18
  Authorization: `Bearer ${token}`,
46
19
  };
47
20
  };
48
21
 
49
- export { oauthBeforeHandler };
22
+ export { authBeforeHandler };
50
23
  //# sourceMappingURL=oauth-before-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-before-handler.js","sources":["../../../../src/api/before/oauth-before-handler.ts"],"sourcesContent":["import { startWith, waitUntil } from \"../../lib/utils\";\nimport { OAUTH_STATE } from \"../api.constants\";\nimport type { BeforeHandler, OauthOptions } from \"../api.types\";\nimport { getOauthTokenFromOtherWindow } from \"../oauth\";\n\nexport const oauthBeforeHandler =\n (options: OauthOptions): BeforeHandler =>\n async (request) => {\n if (!options.expiresTokenStorageName) {\n throw new Error(\"Auth middleware hasn't required options\");\n }\n\n const isSameOrigin = !startWith(request.path, \"http\");\n\n if (request.token) {\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${request.token}`,\n };\n\n return;\n }\n\n if (OAUTH_STATE.fetching) await waitUntil(() => OAUTH_STATE.fetching);\n\n const expires = localStorage.getItem(options.expiresTokenStorageName);\n let token: string | undefined | null;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {\n OAUTH_STATE.fetching = true;\n await getOauthTokenFromOtherWindow({\n onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,\n onWindowOpenError: options.onWindowOpenError,\n refreshTokenWindowUrl: options.refreshTokenWindowUrl,\n wait: options.wait,\n expiresTokenStorageName: options.expiresTokenStorageName,\n closeObserveInterval: options.closeObserveInterval,\n });\n if (options.tokenStorageName) {\n token = localStorage.getItem(options.tokenStorageName);\n }\n OAUTH_STATE.fetching = false;\n }\n\n if (!isSameOrigin && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n"],"names":[],"mappings":";;;;;;;;;AAKO,MAAM,kBAAkB,GAC7B,CAAC,OAAqB,KACtB,OAAO,OAAO,KAAI;AAChB,IAAA,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;AACpC,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;;IAG5D,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAErD,IAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY;YACf,OAAO,CAAC,OAAO,GAAG;gBAChB,GAAG,OAAO,CAAC,OAAO;AAClB,gBAAA,aAAa,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,KAAK,CAAE,CAAA;aACzC;QAEH;;IAGF,IAAI,WAAW,CAAC,QAAQ;QAAE,MAAM,SAAS,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC;IAErE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACrE,IAAA,IAAI,KAAgC;AACpC,IAAA,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE;AAC/D,QAAA,WAAW,CAAC,QAAQ,GAAG,IAAI;AAC3B,QAAA,MAAM,4BAA4B,CAAC;YACjC,+BAA+B,EAAE,OAAO,CAAC,+BAA+B;YACxE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;YACpD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;YACxD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;AACnD,SAAA,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC5B,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;;AAExD,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAG9B,IAAI,CAAC,YAAY,IAAI,KAAK;QACxB,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;YAClB,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;SACjC;AACL;;;;"}
1
+ {"version":3,"file":"oauth-before-handler.js","sources":["../../../../src/api/before/oauth-before-handler.ts"],"sourcesContent":["import { startWith, waitUntil } from \"../../lib/utils\";\nimport { OAUTH_STATE, OAUTH_TOKEN_STORAGE_NAME } from \"../api.constants\";\nimport type { AuthBeforeHandlerOptions, BeforeHandler } from \"../api.types\";\n\nexport const authBeforeHandler =\n (options: AuthBeforeHandlerOptions = {}): BeforeHandler =>\n async (request) => {\n const { tokenStorageName = OAUTH_TOKEN_STORAGE_NAME, forceSetToken = false } = options;\n if (OAUTH_STATE.fetching) await waitUntil(() => OAUTH_STATE.fetching);\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"],"names":[],"mappings":";;;;;;;;AAIO,MAAM,iBAAiB,GAC5B,CAAC,OAAoC,GAAA,EAAE,KACvC,OAAO,OAAO,KAAI;IAChB,MAAM,EAAE,gBAAgB,GAAG,wBAAwB,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,OAAO;IACtF,IAAI,WAAW,CAAC,QAAQ;QAAE,MAAM,SAAS,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC;AAErE,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACrE,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AACnF,IAAA,IAAI,CAAC,CAAC,YAAY,IAAI,aAAa,KAAK,KAAK;QAC3C,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;YAClB,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;SACjC;AACL;;;;"}
@@ -6,18 +6,20 @@ import { isString } from '../lib/typings/is-string.js';
6
6
  import '../lib/lodash/get-by-path.js';
7
7
  import '../lib/lodash/set-by-path.js';
8
8
  import { getQueryValues } from '../lib/browser/get-query-values.js';
9
- import { OAUTH_STATE } from './api.constants.js';
9
+ import { OAUTH_REFRESH_QUERY, OAUTH_STATE, OAUTH_TOKEN_EXPIRES_STORAGE_NAME, OAUTH_TOKEN_STORAGE_NAME } from './api.constants.js';
10
10
 
11
11
  async function getOauthTokenFromOtherWindow(options) {
12
12
  let waiting = true;
13
13
  const url = new URL(typeof options.refreshTokenWindowUrl === "function"
14
14
  ? options.refreshTokenWindowUrl()
15
15
  : (options.refreshTokenWindowUrl ?? window.origin));
16
- url.searchParams.append(options.onlyRefreshTokenWindowQueryName, "true");
16
+ // added only refresh tag to autoclose window after flow
17
+ url.searchParams.append(options.onlyRefreshTokenWindowQueryName ?? OAUTH_REFRESH_QUERY, "true");
18
+ // try open window with both of action
17
19
  let windowInstance = window.open(url.toString(), "_blank", "width=800,height=600,left=100,top=100");
18
20
  windowInstance ??= window.open(url.toString(), "_blank");
19
21
  if (windowInstance) {
20
- const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);
22
+ const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName ?? OAUTH_REFRESH_QUERY);
21
23
  const windowCloseObserver = setInterval(() => {
22
24
  if (windowInstance.closed) {
23
25
  if (waiting) {
@@ -43,11 +45,14 @@ async function getOauthTokenFromOtherWindow(options) {
43
45
  if (windowInstance && !windowInstance.closed) {
44
46
  windowInstance.close();
45
47
  }
46
- }, options.wait ?? 15000);
48
+ }, options.wait ?? 8000);
47
49
  }
48
50
  else {
49
- if (options.onWindowOpenError)
50
- options.onWindowOpenError();
51
+ if ("onWindowOpenError" in options)
52
+ options.onWindowOpenError?.();
53
+ else {
54
+ getOauthToken(options.oauthUrl);
55
+ }
51
56
  waiting = false;
52
57
  return;
53
58
  }
@@ -60,19 +65,21 @@ async function refetchAfterOauth(options, refetch) {
60
65
  onWindowOpenError: options.onWindowOpenError,
61
66
  refreshTokenWindowUrl: options.refreshTokenWindowUrl,
62
67
  wait: options.wait,
63
- expiresTokenStorageName: options.expiresTokenStorageName,
64
68
  closeObserveInterval: options.closeObserveInterval,
65
69
  });
66
70
  OAUTH_STATE.fetching = false;
67
71
  return await refetch();
68
72
  }
69
- async function getOauthToken(options) {
70
- const queries = getQueryValues([
71
- options.expiresTokenQueryName,
72
- options.onlyRefreshTokenWindowQueryName,
73
- ]);
74
- const refreshQuery = queries?.[options.onlyRefreshTokenWindowQueryName];
75
- const expiresQuery = queries?.[options.expiresTokenQueryName];
73
+ function getOauthToken(oauthUrl) {
74
+ oauthUrl ??= `/api/v1/auth?frontend_protocol=${window.location.protocol.replace(":", "")}&frontend_host=${window.location.host}&comeback_path=${window.location.pathname}${encodeURIComponent(window.location.search)}`;
75
+ window.location.replace(typeof oauthUrl === "function" ? oauthUrl() : oauthUrl);
76
+ return null;
77
+ }
78
+ async function extractOauthOptions(options = {}) {
79
+ const { expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, onlyRefreshTokenWindowQueryName = OAUTH_REFRESH_QUERY, tokenStorageName = OAUTH_TOKEN_STORAGE_NAME, expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME, tokenRequest = undefined, } = options;
80
+ const queries = getQueryValues([expiresTokenQueryName, onlyRefreshTokenWindowQueryName]);
81
+ const refreshQuery = queries?.[onlyRefreshTokenWindowQueryName];
82
+ const expiresQuery = queries?.[expiresTokenQueryName];
76
83
  /** Is OnlyRefresh window */
77
84
  const isRefresh = isString(refreshQuery)
78
85
  ? refreshQuery === "true"
@@ -85,21 +92,18 @@ async function getOauthToken(options) {
85
92
  : isArray(expiresQuery)
86
93
  ? expiresQuery[expiresQuery.length - 1]
87
94
  : false;
88
- /** OAuth flow if not expires */
89
- if (!expires) {
90
- window.location.replace(typeof options.oauthUrl === "function" ? options.oauthUrl() : options.oauthUrl);
91
- return null;
92
- }
93
- localStorage.setItem(options.expiresTokenStorageName, expires);
94
- if (options.tokenRequest) {
95
- const token = await options.tokenRequest();
96
- if (token != undefined && options.tokenStorageName) {
97
- localStorage.setItem(options.tokenStorageName, token);
95
+ if (expires && !Number.isNaN(+expires) && Date.now() < +expires) {
96
+ localStorage.setItem(expiresTokenStorageName, expires);
97
+ if (tokenRequest) {
98
+ const token = await tokenRequest();
99
+ if (token != undefined && tokenStorageName) {
100
+ localStorage.setItem(tokenStorageName, token);
101
+ }
98
102
  }
99
103
  }
100
104
  /** Close if OnlyRefresh window */
101
105
  if (isRefresh) {
102
- const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);
106
+ const channel = new BroadcastChannel(onlyRefreshTokenWindowQueryName);
103
107
  channel.postMessage(true);
104
108
  channel.close();
105
109
  window.close();
@@ -107,12 +111,12 @@ async function getOauthToken(options) {
107
111
  /** Delete expires query */
108
112
  if (expires) {
109
113
  const url = new URL(window.location.href);
110
- url.searchParams.delete(options.expiresTokenQueryName);
114
+ url.searchParams.delete(expiresTokenQueryName);
111
115
  window.location.replace(url.toString());
112
116
  return null;
113
117
  }
114
118
  return expires;
115
119
  }
116
120
 
117
- export { getOauthToken, getOauthTokenFromOtherWindow, refetchAfterOauth };
121
+ export { extractOauthOptions, getOauthToken, getOauthTokenFromOtherWindow, refetchAfterOauth };
118
122
  //# sourceMappingURL=oauth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sources":["../../../src/api/oauth.ts"],"sourcesContent":["import { getQueryValues, isArray, isString, waitUntil } from \"../lib\";\nimport { OAUTH_STATE } from \"./api.constants\";\nimport type {\n GetOauthTokenFromOtherWindowOptions,\n GetOauthTokenOptions,\n OauthOptions,\n} from \"./api.types\";\n\nexport async function getOauthTokenFromOtherWindow(options: GetOauthTokenFromOtherWindowOptions) {\n let waiting = true;\n const url = new URL(\n typeof options.refreshTokenWindowUrl === \"function\"\n ? options.refreshTokenWindowUrl()\n : (options.refreshTokenWindowUrl ?? window.origin),\n );\n url.searchParams.append(options.onlyRefreshTokenWindowQueryName, \"true\");\n\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(options.onlyRefreshTokenWindowQueryName);\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, options.closeObserveInterval ?? 500);\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 }, options.wait ?? 15000);\n } else {\n if (options.onWindowOpenError) options.onWindowOpenError();\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n}\n\nexport async function refetchAfterOauth<T>(options: OauthOptions, refetch: () => Promise<T>) {\n OAUTH_STATE.fetching = true;\n await getOauthTokenFromOtherWindow({\n onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,\n onWindowOpenError: options.onWindowOpenError,\n refreshTokenWindowUrl: options.refreshTokenWindowUrl,\n wait: options.wait,\n expiresTokenStorageName: options.expiresTokenStorageName,\n closeObserveInterval: options.closeObserveInterval,\n });\n OAUTH_STATE.fetching = false;\n\n return await refetch();\n}\n\nexport async function getOauthToken(options: GetOauthTokenOptions) {\n const queries = getQueryValues([\n options.expiresTokenQueryName,\n options.onlyRefreshTokenWindowQueryName,\n ]);\n const refreshQuery = queries?.[options.onlyRefreshTokenWindowQueryName];\n const expiresQuery = queries?.[options.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 /** OAuth flow if not expires */\n if (!expires) {\n window.location.replace(\n typeof options.oauthUrl === \"function\" ? options.oauthUrl() : options.oauthUrl,\n );\n\n return null;\n }\n\n localStorage.setItem(options.expiresTokenStorageName, expires);\n if (options.tokenRequest) {\n const token = await options.tokenRequest();\n if (token != undefined && options.tokenStorageName) {\n localStorage.setItem(options.tokenStorageName, token);\n }\n }\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n channel.postMessage(true);\n channel.close();\n window.close();\n }\n\n /** Delete expires query */\n if (expires) {\n const url = new URL(window.location.href);\n url.searchParams.delete(options.expiresTokenQueryName);\n window.location.replace(url.toString());\n\n return null;\n }\n\n return expires;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAQO,eAAe,4BAA4B,CAAC,OAA4C,EAAA;IAC7F,IAAI,OAAO,GAAG,IAAI;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,OAAO,OAAO,CAAC,qBAAqB,KAAK;AACvC,UAAE,OAAO,CAAC,qBAAqB;WAC5B,OAAO,CAAC,qBAAqB,IAAI,MAAM,CAAC,MAAM,CAAC,CACrD;IACD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,+BAA+B,EAAE,MAAM,CAAC;AAExE,IAAA,IAAI,cAAc,GAAG,MAAM,CAAC,IAAI,CAC9B,GAAG,CAAC,QAAQ,EAAE,EACd,QAAQ,EACR,uCAAuC,CACxC;AACD,IAAA,cAAc,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;IAExD,IAAI,cAAc,EAAE;QAClB,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,CAAC;AAC7E,QAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;AAC3C,YAAA,IAAI,cAAc,CAAC,MAAM,EAAE;gBACzB,IAAI,OAAO,EAAE;oBACX,OAAO,GAAG,KAAK;oBACf,OAAO,CAAC,KAAK,EAAE;oBACf,aAAa,CAAC,mBAAmB,CAAC;;;AAGxC,SAAC,EAAE,OAAO,CAAC,oBAAoB,IAAI,GAAG,CAAC;AACvC,QAAA,OAAO,CAAC,SAAS,GAAG,MAAK;YACvB,IAAI,OAAO,EAAE;gBACX,OAAO,GAAG,KAAK;gBACf,OAAO,CAAC,KAAK,EAAE;gBACf,aAAa,CAAC,mBAAmB,CAAC;;AAEtC,SAAC;QACD,UAAU,CAAC,MAAK;YACd,IAAI,OAAO,EAAE;gBACX,OAAO,GAAG,KAAK;gBACf,OAAO,CAAC,KAAK,EAAE;gBACf,aAAa,CAAC,mBAAmB,CAAC;;AAEpC,YAAA,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBAC5C,cAAc,CAAC,KAAK,EAAE;;AAE1B,SAAC,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;;SACpB;QACL,IAAI,OAAO,CAAC,iBAAiB;YAAE,OAAO,CAAC,iBAAiB,EAAE;QAC1D,OAAO,GAAG,KAAK;QAEf;;AAGF,IAAA,MAAM,SAAS,CAAC,MAAM,OAAO,CAAC;AAChC;AAEO,eAAe,iBAAiB,CAAI,OAAqB,EAAE,OAAyB,EAAA;AACzF,IAAA,WAAW,CAAC,QAAQ,GAAG,IAAI;AAC3B,IAAA,MAAM,4BAA4B,CAAC;QACjC,+BAA+B,EAAE,OAAO,CAAC,+BAA+B;QACxE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;QACxD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;AACnD,KAAA,CAAC;AACF,IAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;IAE5B,OAAO,MAAM,OAAO,EAAE;AACxB;AAEO,eAAe,aAAa,CAAC,OAA6B,EAAA;IAC/D,MAAM,OAAO,GAAG,cAAc,CAAC;AAC7B,QAAA,OAAO,CAAC,qBAAqB;AAC7B,QAAA,OAAO,CAAC,+BAA+B;AACxC,KAAA,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC,+BAA+B,CAAC;IACvE,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC;;AAG7D,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY;UACnC,YAAY,KAAK;AACnB,UAAE,OAAO,CAAC,YAAY;cAClB,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK;cAC1C,KAAK;;AAEX,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY;AACnC,UAAE;AACF,UAAE,OAAO,CAAC,YAAY;cAClB,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;cACpC,KAAK;;IAGX,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,CAAC,QAAQ,CAAC,OAAO,CACrB,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAC/E;AAED,QAAA,OAAO,IAAI;;IAGb,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;AAC9D,IAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,QAAA,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;QAC1C,IAAI,KAAK,IAAI,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAClD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;;;;IAIzD,IAAI,SAAS,EAAE;QACb,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,+BAA+B,CAAC;AAC7E,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,KAAK,EAAE;QACf,MAAM,CAAC,KAAK,EAAE;;;IAIhB,IAAI,OAAO,EAAE;QACX,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAEvC,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,OAAO;AAChB;;;;"}
1
+ {"version":3,"file":"oauth.js","sources":["../../../src/api/oauth.ts"],"sourcesContent":["import { getQueryValues, isArray, isString, waitUntil } from \"../lib\";\nimport {\n OAUTH_REFRESH_QUERY,\n OAUTH_STATE,\n OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n OAUTH_TOKEN_STORAGE_NAME,\n} from \"./api.constants\";\nimport type { ExtractOauthTokenOptions, OauthOptions } from \"./api.types\";\n\nexport async function getOauthTokenFromOtherWindow(options: OauthOptions) {\n let waiting = true;\n const url = new URL(\n typeof options.refreshTokenWindowUrl === \"function\"\n ? options.refreshTokenWindowUrl()\n : (options.refreshTokenWindowUrl ?? window.origin),\n );\n // added only refresh tag to autoclose window after flow\n url.searchParams.append(options.onlyRefreshTokenWindowQueryName ?? 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(\n options.onlyRefreshTokenWindowQueryName ?? OAUTH_REFRESH_QUERY,\n );\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, options.closeObserveInterval ?? 500);\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 }, options.wait ?? 8000);\n } else {\n if (\"onWindowOpenError\" in options) options.onWindowOpenError?.();\n else {\n getOauthToken(options.oauthUrl);\n }\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n}\n\nexport async function refetchAfterOauth<T>(options: OauthOptions, refetch: () => Promise<T>) {\n OAUTH_STATE.fetching = true;\n await getOauthTokenFromOtherWindow({\n onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,\n onWindowOpenError: options.onWindowOpenError,\n refreshTokenWindowUrl: options.refreshTokenWindowUrl,\n wait: options.wait,\n closeObserveInterval: options.closeObserveInterval,\n });\n OAUTH_STATE.fetching = false;\n\n return await refetch();\n}\n\nexport function getOauthToken(oauthUrl?: (() => string) | string) {\n oauthUrl ??= `/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 oauthUrl === \"function\" ? oauthUrl() : oauthUrl);\n return null;\n}\n\nexport async function extractOauthOptions(options: ExtractOauthTokenOptions = {}) {\n const {\n expiresTokenQueryName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n onlyRefreshTokenWindowQueryName = OAUTH_REFRESH_QUERY,\n tokenStorageName = OAUTH_TOKEN_STORAGE_NAME,\n expiresTokenStorageName = OAUTH_TOKEN_EXPIRES_STORAGE_NAME,\n tokenRequest = undefined,\n } = options;\n\n const queries = getQueryValues([expiresTokenQueryName, onlyRefreshTokenWindowQueryName]);\n const refreshQuery = queries?.[onlyRefreshTokenWindowQueryName];\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\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(onlyRefreshTokenWindowQueryName);\n channel.postMessage(true);\n channel.close();\n window.close();\n }\n\n /** Delete expires query */\n if (expires) {\n const url = new URL(window.location.href);\n url.searchParams.delete(expiresTokenQueryName);\n window.location.replace(url.toString());\n\n return null;\n }\n\n return expires;\n}\n"],"names":[],"mappings":";;;;;;;;;;AASO,eAAe,4BAA4B,CAAC,OAAqB,EAAA;IACtE,IAAI,OAAO,GAAG,IAAI;IAClB,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,OAAO,OAAO,CAAC,qBAAqB,KAAK;AACvC,UAAE,OAAO,CAAC,qBAAqB;WAC5B,OAAO,CAAC,qBAAqB,IAAI,MAAM,CAAC,MAAM,CAAC,CACrD;;AAED,IAAA,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,+BAA+B,IAAI,mBAAmB,EAAE,MAAM,CAAC;;AAG/F,IAAA,IAAI,cAAc,GAAG,MAAM,CAAC,IAAI,CAC9B,GAAG,CAAC,QAAQ,EAAE,EACd,QAAQ,EACR,uCAAuC,CACxC;AACD,IAAA,cAAc,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC;IAExD,IAAI,cAAc,EAAE;QAClB,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAClC,OAAO,CAAC,+BAA+B,IAAI,mBAAmB,CAC/D;AACD,QAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAK;AAC3C,YAAA,IAAI,cAAc,CAAC,MAAM,EAAE;gBACzB,IAAI,OAAO,EAAE;oBACX,OAAO,GAAG,KAAK;oBACf,OAAO,CAAC,KAAK,EAAE;oBACf,aAAa,CAAC,mBAAmB,CAAC;;;AAGxC,SAAC,EAAE,OAAO,CAAC,oBAAoB,IAAI,GAAG,CAAC;AACvC,QAAA,OAAO,CAAC,SAAS,GAAG,MAAK;YACvB,IAAI,OAAO,EAAE;gBACX,OAAO,GAAG,KAAK;gBACf,OAAO,CAAC,KAAK,EAAE;gBACf,aAAa,CAAC,mBAAmB,CAAC;;AAEtC,SAAC;QACD,UAAU,CAAC,MAAK;YACd,IAAI,OAAO,EAAE;gBACX,OAAO,GAAG,KAAK;gBACf,OAAO,CAAC,KAAK,EAAE;gBACf,aAAa,CAAC,mBAAmB,CAAC;;AAEpC,YAAA,IAAI,cAAc,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBAC5C,cAAc,CAAC,KAAK,EAAE;;AAE1B,SAAC,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;;SACnB;QACL,IAAI,mBAAmB,IAAI,OAAO;AAAE,YAAA,OAAO,CAAC,iBAAiB,IAAI;aAC5D;AACH,YAAA,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC;;QAEjC,OAAO,GAAG,KAAK;QAEf;;AAGF,IAAA,MAAM,SAAS,CAAC,MAAM,OAAO,CAAC;AAChC;AAEO,eAAe,iBAAiB,CAAI,OAAqB,EAAE,OAAyB,EAAA;AACzF,IAAA,WAAW,CAAC,QAAQ,GAAG,IAAI;AAC3B,IAAA,MAAM,4BAA4B,CAAC;QACjC,+BAA+B,EAAE,OAAO,CAAC,+BAA+B;QACxE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;AACnD,KAAA,CAAC;AACF,IAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;IAE5B,OAAO,MAAM,OAAO,EAAE;AACxB;AAEM,SAAU,aAAa,CAAC,QAAkC,EAAA;AAC9D,IAAA,QAAQ,KAAK,CAAkC,+BAAA,EAAA,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA,eAAA,EAAkB,MAAM,CAAC,QAAQ,CAAC,IAAI,kBAAkB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAG,EAAA,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACvN,IAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAC/E,IAAA,OAAO,IAAI;AACb;AAEO,eAAe,mBAAmB,CAAC,UAAoC,EAAE,EAAA;IAC9E,MAAM,EACJ,qBAAqB,GAAG,gCAAgC,EACxD,+BAA+B,GAAG,mBAAmB,EACrD,gBAAgB,GAAG,wBAAwB,EAC3C,uBAAuB,GAAG,gCAAgC,EAC1D,YAAY,GAAG,SAAS,GACzB,GAAG,OAAO;IAEX,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,qBAAqB,EAAE,+BAA+B,CAAC,CAAC;AACxF,IAAA,MAAM,YAAY,GAAG,OAAO,GAAG,+BAA+B,CAAC;AAC/D,IAAA,MAAM,YAAY,GAAG,OAAO,GAAG,qBAAqB,CAAC;;AAGrD,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY;UACnC,YAAY,KAAK;AACnB,UAAE,OAAO,CAAC,YAAY;cAClB,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK;cAC1C,KAAK;;AAEX,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY;AACnC,UAAE;AACF,UAAE,OAAO,CAAC,YAAY;cAClB,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;cACpC,KAAK;AAEX,IAAA,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE;AAC/D,QAAA,YAAY,CAAC,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;QACtD,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE;AAClC,YAAA,IAAI,KAAK,IAAI,SAAS,IAAI,gBAAgB,EAAE;AAC1C,gBAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;;;;;IAMnD,IAAI,SAAS,EAAE;AACb,QAAA,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,+BAA+B,CAAC;AACrE,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;QACzB,OAAO,CAAC,KAAK,EAAE;QACf,MAAM,CAAC,KAAK,EAAE;;;IAIhB,IAAI,OAAO,EAAE;QACX,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzC,QAAA,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AAEvC,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,OAAO;AAChB;;;;"}
package/lib/esm/index.js CHANGED
@@ -68,11 +68,11 @@ export { throttle } from './lib/lodash/throttle.js';
68
68
  export { type } from './lib/lodash/type.js';
69
69
  export { COLOR_FORMATS, DATE_TYPES, FIELD_TYPES } from './constants/index.js';
70
70
  export { createFetchClient } from './api/api.js';
71
- export { getOauthToken, getOauthTokenFromOtherWindow, refetchAfterOauth } from './api/oauth.js';
71
+ export { extractOauthOptions, getOauthToken, getOauthTokenFromOtherWindow, refetchAfterOauth } from './api/oauth.js';
72
72
  export { loggerAfterHandler } from './api/after/logger-after-handler.js';
73
73
  export { loggerBeforeHandler } from './api/before/logger-before-handler.js';
74
- export { oauthBeforeHandler } from './api/before/oauth-before-handler.js';
75
- export { OAUTH_STATE, REQUEST_ERROR, RESPONSE_DATA_SYMBOL } from './api/api.constants.js';
74
+ export { authBeforeHandler } from './api/before/oauth-before-handler.js';
75
+ export { OAUTH_REFRESH_QUERY, OAUTH_STATE, OAUTH_TOKEN_EXPIRES_STORAGE_NAME, OAUTH_TOKEN_STORAGE_NAME, REQUEST_ERROR, RESPONSE_DATA_SYMBOL } from './api/api.constants.js';
76
76
  export { ResponseError } from './constants/errors.js';
77
77
  export { IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER } from './constants/environment.js';
78
78
  //# sourceMappingURL=index.js.map
package/lib/index.d.ts CHANGED
@@ -75,6 +75,9 @@ declare class OauthState {
75
75
  set fetching(value: boolean);
76
76
  }
77
77
  declare const OAUTH_STATE: OauthState;
78
+ declare const OAUTH_TOKEN_STORAGE_NAME = "session_token";
79
+ declare const OAUTH_TOKEN_EXPIRES_STORAGE_NAME = "session_token_expires";
80
+ declare const OAUTH_REFRESH_QUERY = "only_session_refresh";
78
81
 
79
82
  type RequestQueryValue = string | number | boolean;
80
83
  type RequestQuery = Record<string, RequestQueryValue | RequestQueryValue[] | null | undefined>;
@@ -151,48 +154,38 @@ type RequestTransformIncoming<IncomingApi, Incoming> = IsEqual<Incoming, Incomin
151
154
  type BeforeHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<void> | void;
152
155
  type AfterHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>, response: Response | Response$1 | undefined) => Promise<void> | void;
153
156
  type OauthOptions = {
154
- /** A name of expires token in localstorage */
155
- expiresTokenStorageName: string;
156
- /** A name of flag in query for oauth flow window */
157
- onlyRefreshTokenWindowQueryName: string;
157
+ /** A response statuses that trigger refetch oauth */
158
+ responseStatusesForOauth?: number[];
159
+ /** An url of proxy auth service */
160
+ oauthUrl?: (() => string) | string;
158
161
  /** An url of start oauth flow window */
159
162
  refreshTokenWindowUrl?: (() => string) | string;
163
+ /** A name of flag in query for oauth flow window */
164
+ onlyRefreshTokenWindowQueryName?: string;
160
165
  /** An error handle that call if oauth flow window wasn't open */
161
166
  onWindowOpenError?: () => void;
162
- /** A name of token in localstorage */
163
- tokenStorageName?: string;
164
167
  /** A number of millisecond for waiting oauth flow window before force close it */
165
168
  wait?: number;
166
169
  /** An interval for check closable property by oauth flow window in ms */
167
170
  closeObserveInterval?: number;
168
171
  };
169
- type GetOauthTokenOptions = {
170
- /** An url of start oauth flow */
171
- oauthUrl: (() => string) | string;
172
+ type ExtractOauthTokenOptions = {
172
173
  /** A name of expires token in localstorage */
173
- expiresTokenStorageName: string;
174
+ expiresTokenStorageName?: string;
174
175
  /** A name of expires token in query */
175
- expiresTokenQueryName: string;
176
+ expiresTokenQueryName?: string;
176
177
  /** A name of flag in query for oauth flow window */
177
- onlyRefreshTokenWindowQueryName: string;
178
+ onlyRefreshTokenWindowQueryName?: string;
178
179
  /** A name of token in localstorage */
179
180
  tokenStorageName?: string;
180
181
  /** An url for refresh token */
181
182
  tokenRequest?: () => Promise<string | null | undefined>;
182
183
  };
183
- type GetOauthTokenFromOtherWindowOptions = {
184
- /** An url of start oauth flow window */
185
- refreshTokenWindowUrl?: (() => string) | string;
186
- /** A name of flag in query for oauth flow window */
187
- onlyRefreshTokenWindowQueryName: string;
188
- /** A name of expires token in localstorage */
189
- expiresTokenStorageName: string;
190
- /** An error handle that call if oauth flow window wasn't open */
191
- onWindowOpenError?: () => void;
192
- /** A number of millisecond for waiting oauth flow window before force close it */
193
- wait?: number;
194
- /** An interval for check closable property by oauth flow window in ms */
195
- closeObserveInterval?: number;
184
+ type AuthBeforeHandlerOptions = {
185
+ /** A name of token in localstorage */
186
+ tokenStorageName?: string;
187
+ /** Set token event if it is same origin */
188
+ forceSetToken?: boolean;
196
189
  };
197
190
 
198
191
  type RefetchAfterAuthFn = (<IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>>) | undefined;
@@ -223,9 +216,10 @@ declare function createFetchClient(options: CreateRequestClientInstance): {
223
216
  recreate: (options: CreateRequestClientInstance) => void;
224
217
  };
225
218
 
226
- declare function getOauthTokenFromOtherWindow(options: GetOauthTokenFromOtherWindowOptions): Promise<void>;
219
+ declare function getOauthTokenFromOtherWindow(options: OauthOptions): Promise<void>;
227
220
  declare function refetchAfterOauth<T>(options: OauthOptions, refetch: () => Promise<T>): Promise<T>;
228
- declare function getOauthToken(options: GetOauthTokenOptions): Promise<string | null>;
221
+ declare function getOauthToken(oauthUrl?: (() => string) | string): null;
222
+ declare function extractOauthOptions(options?: ExtractOauthTokenOptions): Promise<string | false | null>;
229
223
 
230
224
  type LoggerAfterHandlerOptions = {
231
225
  filter?: (response: Response | Response$1 | undefined) => boolean;
@@ -244,7 +238,7 @@ type LoggerBeforeHandlerOptions = {
244
238
  };
245
239
  declare function loggerBeforeHandler(options?: LoggerBeforeHandlerOptions): BeforeHandler;
246
240
 
247
- declare const oauthBeforeHandler: (options: OauthOptions) => BeforeHandler;
241
+ declare const authBeforeHandler: (options?: AuthBeforeHandlerOptions) => BeforeHandler;
248
242
 
249
243
  type ResponseErrorOptions = {
250
244
  message: string;
@@ -458,5 +452,5 @@ declare function throttle<TArgs extends any[]>(func: (...args: TArgs) => any, in
458
452
 
459
453
  declare function type(value: unknown): string;
460
454
 
461
- export { COLOR_FORMATS, DATE_TYPES, FIELD_TYPES, IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER, OAUTH_STATE, REQUEST_ERROR, RESPONSE_DATA_SYMBOL, ResponseError, arrayToMapByKey, asyncLoop, buildQueryString, checkType, cloneDeep, copyToClipboard, createFetchClient, createGlobalId, createLocalIdGenerator, createURLWithQueries, dateDifference, dateFormat, debounce, declination, difference, differenceBy, differenceWith, downloadFile, downloadJson, execAnimation, extractQueries, fieldViewFormat, getByPath, getCallerFunctionName, getColorFormat, getDateByRules, getFileNameFromHeader, getOauthToken, getOauthTokenFromOtherWindow, getQueryValues, getRandomColor, getToday, getVisiblePosition, isArray, isBoolean, isDate, isEqual, isId, isNull, isNullable, isNumber, isObject, isPrimitive, isString, isToday, isUndefined, joinPaths, jsonParse, limitStreamOfRequests, loggerAfterHandler, loggerBeforeHandler, oauthBeforeHandler, randomBase64, randomHex, randomNumber, randomString, readFile, refetchAfterOauth, setByPath, speedTest, startWith, syncObjectValues, takeOpacityColors, throttle, transformHEXtoRGB, transformRGBAtoRGB, transformRGBtoRGBA, transformToColor, transformToDayjs, transformToNumber, translit, trimUrl, type, wait, waitUntil };
462
- export type { AfterHandler, BeforeHandler, ColorFormat, DateGetterRule, DateType, DayJS, FieldType, GetOauthTokenFromOtherWindowOptions, GetOauthTokenOptions, IsEqual, LoggerAfterHandlerOptions, LoggerBeforeHandlerOptions, Maybe, OauthOptions, PositionPlacements, RefetchAfterAuthFn, RequestError, RequestHeader, RequestInstance, RequestInterface, RequestMethod, RequestQuery, RequestQueryValue, RequestTransformIncoming, RequestTransformOutcoming, ValueOf, VisiblePosition };
455
+ export { COLOR_FORMATS, DATE_TYPES, FIELD_TYPES, IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER, OAUTH_REFRESH_QUERY, OAUTH_STATE, OAUTH_TOKEN_EXPIRES_STORAGE_NAME, OAUTH_TOKEN_STORAGE_NAME, REQUEST_ERROR, RESPONSE_DATA_SYMBOL, ResponseError, arrayToMapByKey, asyncLoop, authBeforeHandler, buildQueryString, checkType, cloneDeep, copyToClipboard, createFetchClient, createGlobalId, createLocalIdGenerator, createURLWithQueries, dateDifference, dateFormat, debounce, declination, difference, differenceBy, differenceWith, downloadFile, downloadJson, execAnimation, extractOauthOptions, extractQueries, fieldViewFormat, getByPath, getCallerFunctionName, getColorFormat, getDateByRules, getFileNameFromHeader, getOauthToken, getOauthTokenFromOtherWindow, 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, refetchAfterOauth, setByPath, speedTest, startWith, syncObjectValues, takeOpacityColors, throttle, transformHEXtoRGB, transformRGBAtoRGB, transformRGBtoRGBA, transformToColor, transformToDayjs, transformToNumber, translit, trimUrl, type, wait, waitUntil };
456
+ export type { AfterHandler, AuthBeforeHandlerOptions, BeforeHandler, ColorFormat, DateGetterRule, DateType, DayJS, ExtractOauthTokenOptions, FieldType, IsEqual, LoggerAfterHandlerOptions, LoggerBeforeHandlerOptions, Maybe, OauthOptions, 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.17.0",
3
+ "version": "0.18.0",
4
4
  "description": "Krainov helpers",
5
5
  "type": "module",
6
6
  "author": "KrainovSD <denislosev48@gmail.com>",
@@ -48,7 +48,7 @@
48
48
  "dayjs": "^1.11.13"
49
49
  },
50
50
  "devDependencies": {
51
- "@krainovsd/presets": "0.3.6",
51
+ "@krainovsd/presets": "0.4.0",
52
52
  "rollup": "4.34.9",
53
53
  "prettier": "3.6.1",
54
54
  "eslint": "9.29.0",