@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.
- package/lib/cjs/index.cjs +46 -60
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/api/api.constants.js +4 -1
- package/lib/esm/api/api.constants.js.map +1 -1
- package/lib/esm/api/api.js +4 -3
- package/lib/esm/api/api.js.map +1 -1
- package/lib/esm/api/before/oauth-before-handler.js +7 -34
- package/lib/esm/api/before/oauth-before-handler.js.map +1 -1
- package/lib/esm/api/oauth.js +31 -27
- package/lib/esm/api/oauth.js.map +1 -1
- package/lib/esm/index.js +3 -3
- package/lib/index.d.ts +24 -30
- package/package.json +2 -2
|
@@ -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;;;;"}
|
package/lib/esm/api/api.js
CHANGED
|
@@ -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
|
|
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);
|
package/lib/esm/api/api.js.map
CHANGED
|
@@ -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
|
|
11
|
-
|
|
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
|
|
26
|
-
|
|
27
|
-
if (!
|
|
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 {
|
|
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 {
|
|
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;;;;"}
|
package/lib/esm/api/oauth.js
CHANGED
|
@@ -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
|
-
|
|
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 ??
|
|
48
|
+
}, options.wait ?? 8000);
|
|
47
49
|
}
|
|
48
50
|
else {
|
|
49
|
-
if (options
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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(
|
|
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(
|
|
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
|
package/lib/esm/api/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sources":["../../../src/api/oauth.ts"],"sourcesContent":["import { getQueryValues, isArray, isString, waitUntil } from \"../lib\";\nimport {
|
|
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":"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"}
|
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 {
|
|
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
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
|
|
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
|
|
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
|
|
174
|
+
expiresTokenStorageName?: string;
|
|
174
175
|
/** A name of expires token in query */
|
|
175
|
-
expiresTokenQueryName
|
|
176
|
+
expiresTokenQueryName?: string;
|
|
176
177
|
/** A name of flag in query for oauth flow window */
|
|
177
|
-
onlyRefreshTokenWindowQueryName
|
|
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
|
|
184
|
-
/**
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
|
|
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:
|
|
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(
|
|
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
|
|
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,
|
|
462
|
-
export type { AfterHandler, BeforeHandler, ColorFormat, DateGetterRule, DateType, DayJS,
|
|
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.
|
|
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.
|
|
51
|
+
"@krainovsd/presets": "0.4.0",
|
|
52
52
|
"rollup": "4.34.9",
|
|
53
53
|
"prettier": "3.6.1",
|
|
54
54
|
"eslint": "9.29.0",
|