@krainovsd/js-helpers 0.8.1 → 0.10.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 +230 -14
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/constants/api.js +5 -1
- package/lib/esm/constants/api.js.map +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/lib/api/auth/token.js +73 -1
- package/lib/esm/lib/api/auth/token.js.map +1 -1
- package/lib/esm/lib/api/core.js +26 -3
- package/lib/esm/lib/api/core.js.map +1 -1
- package/lib/esm/lib/api/middlewares/auth-no-refresh-middleware.js +43 -0
- package/lib/esm/lib/api/middlewares/auth-no-refresh-middleware.js.map +1 -0
- package/lib/esm/lib/api/middlewares/console-middleware.js +19 -8
- package/lib/esm/lib/api/middlewares/console-middleware.js.map +1 -1
- package/lib/esm/lib/api/middlewares/console-post-middleware.js +47 -0
- package/lib/esm/lib/api/middlewares/console-post-middleware.js.map +1 -0
- package/lib/esm/lib/api/middlewares/index.js +36 -4
- package/lib/esm/lib/api/middlewares/index.js.map +1 -1
- package/lib/index.d.ts +59 -5
- package/package.json +1 -1
package/lib/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ResponseError, createRequestClientInstance } from './lib/api/core.js';
|
|
2
|
-
export { getAuthToken, updateAuthToken } from './lib/api/auth/token.js';
|
|
2
|
+
export { getAuthToken, getAuthTokenNoRefresh, updateAuthToken, updateAuthTokenNoRefresh } from './lib/api/auth/token.js';
|
|
3
3
|
export { getAuthUser, updateAuthUser } from './lib/api/auth/user.js';
|
|
4
4
|
export { downloadFile } from './lib/browser/download-file.js';
|
|
5
5
|
export { downloadJson } from './lib/browser/download-json.js';
|
|
@@ -53,7 +53,7 @@ export { isString } from './lib/typings/is-string.js';
|
|
|
53
53
|
export { isUndefined } from './lib/typings/is-undefined.js';
|
|
54
54
|
export { isDate } from './lib/typings/is-date.js';
|
|
55
55
|
export { DATE_TYPES } from './constants/date.js';
|
|
56
|
-
export { API_MIDDLEWARES } from './constants/api.js';
|
|
56
|
+
export { API_MIDDLEWARES, POST_API_MIDDLEWARES } from './constants/api.js';
|
|
57
57
|
export { IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER } from './constants/environment.js';
|
|
58
58
|
export { COLOR_FORMATS } from './constants/colors.js';
|
|
59
59
|
export { FIELD_TYPES } from './constants/fields.js';
|
|
@@ -3,6 +3,7 @@ import { isString } from '../../typings/is-string.js';
|
|
|
3
3
|
import { isNull } from '../../typings/is-null.js';
|
|
4
4
|
import { isObject } from '../../typings/is-object.js';
|
|
5
5
|
import { isUndefined } from '../../typings/is-undefined.js';
|
|
6
|
+
import { waitUntil } from '../../utils/wait-until.js';
|
|
6
7
|
import { getByPath } from '../../utils/get-by-path.js';
|
|
7
8
|
import '../../../constants/environment.js';
|
|
8
9
|
import 'dayjs';
|
|
@@ -10,6 +11,7 @@ import '../../date/is-today.js';
|
|
|
10
11
|
import '../../date/is-tomorrow.js';
|
|
11
12
|
import '../../date/is-yesterday.js';
|
|
12
13
|
import 'lodash/set';
|
|
14
|
+
import { wait } from '../../utils/wait.js';
|
|
13
15
|
|
|
14
16
|
async function updateAuthToken(options) {
|
|
15
17
|
let token = localStorage.getItem(options.storageTokenName);
|
|
@@ -64,6 +66,76 @@ function transformData(data, pathToToken, pathToTokenExpires) {
|
|
|
64
66
|
token,
|
|
65
67
|
};
|
|
66
68
|
}
|
|
69
|
+
async function getAuthTokenNoRefresh(options) {
|
|
70
|
+
let waiting = true;
|
|
71
|
+
const url = new URL(window.origin);
|
|
72
|
+
url.searchParams.append(options.queryTokenExpiresName, "true");
|
|
73
|
+
let windowInstance = window.open(url.toString(), "_blank", "width=800,height=600,left=100,top=100");
|
|
74
|
+
if (!windowInstance) {
|
|
75
|
+
windowInstance = window.open(url.toString());
|
|
76
|
+
}
|
|
77
|
+
if (!windowInstance) {
|
|
78
|
+
if (options.onWindowOpenError)
|
|
79
|
+
options.onWindowOpenError();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const channel = new BroadcastChannel(options.queryIsRefreshTokenName);
|
|
83
|
+
channel.onmessage = () => {
|
|
84
|
+
if (waiting) {
|
|
85
|
+
waiting = false;
|
|
86
|
+
channel.close();
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
setTimeout(() => {
|
|
90
|
+
if (waiting) {
|
|
91
|
+
waiting = false;
|
|
92
|
+
channel.close();
|
|
93
|
+
}
|
|
94
|
+
if (windowInstance && !windowInstance.closed) {
|
|
95
|
+
windowInstance.close();
|
|
96
|
+
}
|
|
97
|
+
}, 15000);
|
|
98
|
+
await waitUntil(() => waiting);
|
|
99
|
+
}
|
|
100
|
+
async function updateAuthTokenNoRefresh(options) {
|
|
101
|
+
let expires = localStorage.getItem(options.storageTokenExpiresName);
|
|
102
|
+
if (expires && !Number.isNaN(+expires) && Date.now() > +expires)
|
|
103
|
+
expires = null;
|
|
104
|
+
let hasExpiresQuery = false;
|
|
105
|
+
if (!expires) {
|
|
106
|
+
const queries = window.location.search.substring(1).split("&");
|
|
107
|
+
for (const query of queries) {
|
|
108
|
+
const [key, value] = query.split("=");
|
|
109
|
+
if (key === options.queryTokenExpiresName && value) {
|
|
110
|
+
expires = value;
|
|
111
|
+
hasExpiresQuery = true;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (expires && !Number.isNaN(+expires) && Date.now() > +expires)
|
|
116
|
+
expires = null;
|
|
117
|
+
}
|
|
118
|
+
if (!expires) {
|
|
119
|
+
return void window.location.replace(options.authUrl());
|
|
120
|
+
}
|
|
121
|
+
localStorage.setItem(options.storageTokenExpiresName, expires);
|
|
122
|
+
const queries = window.location.search.substring(1).split("&");
|
|
123
|
+
for (const query of queries) {
|
|
124
|
+
const [key, value] = query.split("=");
|
|
125
|
+
if (key === options.queryIsRefreshTokenName && value === "true") {
|
|
126
|
+
const channel = new BroadcastChannel(options.queryIsRefreshTokenName);
|
|
127
|
+
channel.postMessage(true);
|
|
128
|
+
channel.close();
|
|
129
|
+
window.close();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (hasExpiresQuery) {
|
|
133
|
+
const url = new URL(window.location.href);
|
|
134
|
+
url.searchParams.delete(options.queryTokenExpiresName);
|
|
135
|
+
window.location.replace(url.toString());
|
|
136
|
+
await wait(300);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
67
139
|
|
|
68
|
-
export { getAuthToken, updateAuthToken };
|
|
140
|
+
export { getAuthToken, getAuthTokenNoRefresh, updateAuthToken, updateAuthTokenNoRefresh };
|
|
69
141
|
//# sourceMappingURL=token.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sources":["../../../../../src/lib/api/auth/token.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"token.js","sources":["../../../../../src/lib/api/auth/token.ts"],"sourcesContent":["import type {\n AuthMiddleWareOptions,\n AuthNoRefreshMiddleWareOptions,\n AuthTokenNoRefreshRequestOptions,\n AuthTokenRequestOptions,\n} from \"../../../types\";\nimport { isNull, isNumber, isObject, isString, isUndefined } from \"../../typings\";\nimport { getByPath, wait, waitUntil } from \"../../utils\";\n\nexport async function updateAuthToken(options: AuthMiddleWareOptions) {\n let token: string | null | undefined = localStorage.getItem(options.storageTokenName);\n const expires: string | null | undefined = localStorage.getItem(options.storageTokenExpiresName);\n\n if (!token || !expires || Date.now() > +expires) {\n token = await (options.tokenRequest ? options.tokenRequest() : getAuthToken(options));\n if (isNull(token)) {\n return void window.location.replace(options.authUrl());\n }\n if (isUndefined(token)) {\n return void window.location.replace(options.errorUrl);\n }\n }\n\n return token;\n}\n\nexport async function getAuthToken(options: AuthTokenRequestOptions) {\n let status = 0;\n try {\n const response = await fetch(options.authTokenUrl, {\n method: \"GET\",\n });\n status = response.status;\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n\n const result = (await response.json()) as Record<string, unknown>;\n\n try {\n const { expires, token } = transformData(\n result,\n options.pathToToken,\n options.pathToTokenExpires,\n );\n\n localStorage.setItem(options.storageTokenExpiresName, expires);\n localStorage.setItem(options.storageTokenName, token);\n\n return token;\n } catch {\n return undefined;\n }\n } catch {\n if (status >= 500) return undefined;\n\n return null;\n }\n}\n\nfunction transformData(data: unknown, pathToToken: string, pathToTokenExpires: string) {\n if (!isObject(data)) throw new Error(\"Bad response data\");\n\n const token = getByPath(data, pathToToken);\n const expiresToken = getByPath(data, pathToTokenExpires);\n\n if ((!isString(expiresToken) && !isNumber(expiresToken)) || !isString(token))\n throw new Error(\"Bad response data\");\n\n return {\n expires: String(expiresToken),\n token,\n };\n}\n\nexport async function getAuthTokenNoRefresh(options: AuthTokenNoRefreshRequestOptions) {\n let waiting = true;\n const url = new URL(window.origin);\n url.searchParams.append(options.queryTokenExpiresName, \"true\");\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n\n if (!windowInstance) {\n windowInstance = window.open(url.toString());\n }\n\n if (!windowInstance) {\n if (options.onWindowOpenError) options.onWindowOpenError();\n\n return;\n }\n\n const channel = new BroadcastChannel(options.queryIsRefreshTokenName);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, 15000);\n\n await waitUntil(() => waiting);\n}\n\nexport async function updateAuthTokenNoRefresh(options: AuthNoRefreshMiddleWareOptions) {\n let expires: string | null | undefined = localStorage.getItem(options.storageTokenExpiresName);\n if (expires && !Number.isNaN(+expires) && Date.now() > +expires) expires = null;\n let hasExpiresQuery = false;\n\n if (!expires) {\n const queries = window.location.search.substring(1).split(\"&\");\n for (const query of queries) {\n const [key, value] = query.split(\"=\");\n if (key === options.queryTokenExpiresName && value) {\n expires = value;\n hasExpiresQuery = true;\n break;\n }\n }\n if (expires && !Number.isNaN(+expires) && Date.now() > +expires) expires = null;\n }\n\n if (!expires) {\n return void window.location.replace(options.authUrl());\n }\n\n localStorage.setItem(options.storageTokenExpiresName, expires);\n\n const queries = window.location.search.substring(1).split(\"&\");\n for (const query of queries) {\n const [key, value] = query.split(\"=\");\n if (key === options.queryIsRefreshTokenName && value === \"true\") {\n const channel = new BroadcastChannel(options.queryIsRefreshTokenName);\n channel.postMessage(true);\n channel.close();\n window.close();\n }\n }\n\n if (hasExpiresQuery) {\n const url = new URL(window.location.href);\n url.searchParams.delete(options.queryTokenExpiresName);\n window.location.replace(url.toString());\n\n await wait(300);\n }\n}\n"],"names":[],"mappings":"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"}
|
package/lib/esm/lib/api/core.js
CHANGED
|
@@ -10,7 +10,7 @@ import '../date/is-yesterday.js';
|
|
|
10
10
|
import 'lodash/set';
|
|
11
11
|
import { wait } from '../utils/wait.js';
|
|
12
12
|
import { createURLWithParams } from '../utils/create-url-with-params.js';
|
|
13
|
-
import { generateMiddlewares } from './middlewares/index.js';
|
|
13
|
+
import { generateMiddlewares, generatePostMiddlewares } from './middlewares/index.js';
|
|
14
14
|
|
|
15
15
|
class ResponseError extends Error {
|
|
16
16
|
status;
|
|
@@ -21,8 +21,14 @@ class ResponseError extends Error {
|
|
|
21
21
|
this.description = description;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
function createRequestClientInstance(
|
|
25
|
-
|
|
24
|
+
function createRequestClientInstance(options = {}) {
|
|
25
|
+
let executeMiddlewares;
|
|
26
|
+
let executePostMiddlewares;
|
|
27
|
+
function setMiddlewares({ activeMiddlewares = [], middlewareOptions = {}, customMiddlewares = [], activePostMiddlewares = [], postMiddlewaresOptions = {}, customPostMiddlewares = [], } = {}) {
|
|
28
|
+
executeMiddlewares = generateMiddlewares(activeMiddlewares, middlewareOptions, customMiddlewares);
|
|
29
|
+
executePostMiddlewares = generatePostMiddlewares(activePostMiddlewares, postMiddlewaresOptions, customPostMiddlewares);
|
|
30
|
+
}
|
|
31
|
+
setMiddlewares(options);
|
|
26
32
|
async function handleRequest(request, responseWithStatus) {
|
|
27
33
|
if (request.delay) {
|
|
28
34
|
await wait(request.delay);
|
|
@@ -74,13 +80,29 @@ function createRequestClientInstance({ activeMiddlewares, middlewareOptions, cus
|
|
|
74
80
|
signal: request.signal,
|
|
75
81
|
});
|
|
76
82
|
}
|
|
83
|
+
await executePostMiddlewares(response);
|
|
77
84
|
if (!response) {
|
|
78
85
|
throw new Error("hasn't response");
|
|
79
86
|
}
|
|
80
87
|
if (!response.ok) {
|
|
88
|
+
let result;
|
|
89
|
+
try {
|
|
90
|
+
const contentType = response.headers.get("content-type");
|
|
91
|
+
if (contentType?.includes?.("text")) {
|
|
92
|
+
result = await response.text();
|
|
93
|
+
}
|
|
94
|
+
else if (contentType?.includes?.("json")) {
|
|
95
|
+
result = await response.json();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
result = await response.blob();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch { }
|
|
81
102
|
throw new ResponseError({
|
|
82
103
|
status: response.status,
|
|
83
104
|
message: `HTTP error! Status: ${response.status}`,
|
|
105
|
+
description: result,
|
|
84
106
|
});
|
|
85
107
|
}
|
|
86
108
|
if (request.downloadFile) {
|
|
@@ -142,6 +164,7 @@ function createRequestClientInstance({ activeMiddlewares, middlewareOptions, cus
|
|
|
142
164
|
return {
|
|
143
165
|
requestApi,
|
|
144
166
|
requestApiWithMeta,
|
|
167
|
+
setMiddlewares,
|
|
145
168
|
};
|
|
146
169
|
}
|
|
147
170
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sources":["../../../../src/lib/api/core.ts"],"sourcesContent":["import type { BodyInit as NodeBodyInit, Response as NodeResponse } from \"node-fetch\";\nimport { IS_BROWSER, IS_JEST, IS_NODE } from \"../../constants\";\nimport type {\n ActiveMiddleware,\n Middleware,\n MiddlewaresOptions,\n RequestInterface,\n} from \"../../types\";\nimport { downloadFile } from \"../browser\";\nimport { isArray, isObject } from \"../typings\";\nimport { createURLWithParams, wait } from \"../utils\";\nimport { generateMiddlewares } from \"./middlewares\";\n\ntype ResponseErrorOptions = {\n message: string;\n status: number;\n description?: string;\n};\n\nexport class ResponseError extends Error {\n status: number;\n\n description?: string;\n\n constructor({ message, status, description }: ResponseErrorOptions) {\n super(message);\n this.status = status;\n this.description = description;\n }\n}\n\ntype CreateRequestClientInstance = {\n activeMiddlewares?: ActiveMiddleware;\n middlewareOptions?: MiddlewaresOptions;\n customMiddlewares?: Middleware[];\n};\n\nexport function createRequestClientInstance({\n activeMiddlewares,\n middlewareOptions,\n customMiddlewares,\n}: CreateRequestClientInstance = {}) {\n const executeMiddlewares = generateMiddlewares(\n activeMiddlewares || [],\n middlewareOptions || {},\n customMiddlewares || [],\n );\n\n async function handleRequest<T, Incoming = unknown, Body = unknown, Outcoming = unknown>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n responseWithStatus?: boolean,\n ): Promise<{ data: T; status: number; headers: Record<string, string> } | T> {\n if (request.delay) {\n await wait(request.delay);\n }\n if (request.mock) {\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(request.mock)\n : (request.mock as T);\n\n return responseWithStatus\n ? { data: transformedResult, status: 200, headers: {} }\n : transformedResult;\n }\n\n await executeMiddlewares(request);\n\n const { method, body, path, params, headers } = request;\n\n const url = createURLWithParams({ baseURL: path, params });\n let preparedBody = body;\n\n if (body && !(preparedBody instanceof FormData)) {\n if (request.transformOutcomingData) {\n preparedBody = request.transformOutcomingData(body as Body);\n }\n\n if (isObject(body) || isArray(body)) preparedBody = JSON.stringify(preparedBody) as Outcoming;\n }\n\n let response: Response | NodeResponse | undefined;\n\n if (IS_BROWSER || IS_JEST) {\n response = await fetch(url, {\n method,\n body: preparedBody as BodyInit,\n headers: {\n ...(body instanceof FormData || !body\n ? {}\n : { \"Content-Type\": \"application/json; charset=UTF-8\" }),\n ...headers,\n },\n signal: request.signal,\n });\n }\n if (IS_NODE && !IS_JEST) {\n const nodeFetch = (await import(\"node-fetch\")).default;\n response = await nodeFetch(url, {\n method,\n body: preparedBody as NodeBodyInit,\n headers: {\n ...(body instanceof FormData || !body\n ? {}\n : { \"Content-Type\": \"application/json; charset=UTF-8\" }),\n ...headers,\n },\n signal: request.signal,\n });\n }\n\n if (!response) {\n throw new Error(\"hasn't response\");\n }\n\n if (!response.ok) {\n throw new ResponseError({\n status: response.status,\n message: `HTTP error! Status: ${response.status}`,\n });\n }\n\n if (request.downloadFile) {\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 || !fileName) throw new Error(\"Download Error! Empty info!\");\n\n if (IS_BROWSER)\n downloadFile({\n data,\n fileName,\n mimeType,\n });\n\n return responseWithStatus\n ? {\n data: data as T,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (data as T);\n }\n\n if (request.withoutResponse)\n return responseWithStatus\n ? {\n data: true as T,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (true as T);\n\n const contentType = response.headers.get(\"content-type\");\n let result: Incoming;\n\n if (contentType?.includes?.(\"text\")) {\n result = (await response.text()) as Incoming;\n } else if (contentType?.includes?.(\"json\")) {\n result = (await response.json()) as Incoming;\n } else {\n result = (await response.blob()) as Incoming;\n }\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(result)\n : (result as unknown as T);\n\n return responseWithStatus\n ? {\n data: transformedResult,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : transformedResult;\n }\n\n async function requestApi<T, Incoming = unknown, Body = unknown, Outcoming = unknown>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ): Promise<T> {\n return handleRequest(request, false) as Promise<T>;\n }\n\n async function requestApiWithMeta<T, Incoming = unknown, Body = unknown, Outcoming = unknown>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ): Promise<{ data: T; status: number; headers: Record<string, string> }> {\n return handleRequest(request, true) as Promise<{\n data: T;\n status: number;\n headers: Record<string, string>;\n }>;\n }\n\n return {\n requestApi,\n requestApiWithMeta,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","sources":["../../../../src/lib/api/core.ts"],"sourcesContent":["import type { BodyInit as NodeBodyInit, Response as NodeResponse } from \"node-fetch\";\nimport { IS_BROWSER, IS_JEST, IS_NODE } from \"../../constants\";\nimport type {\n ActiveMiddleware,\n ActivePostMiddleware,\n Middleware,\n MiddlewaresOptions,\n PostMiddleware,\n PostMiddlewareOptions,\n RequestInterface,\n} from \"../../types\";\nimport { downloadFile } from \"../browser\";\nimport { isArray, isObject } from \"../typings\";\nimport { createURLWithParams, wait } from \"../utils\";\nimport { generateMiddlewares, generatePostMiddlewares } from \"./middlewares\";\n\ntype ResponseErrorOptions = {\n message: string;\n status: number;\n description?: unknown;\n};\n\nexport class ResponseError extends Error {\n status: number;\n\n description?: unknown;\n\n constructor({ message, status, description }: ResponseErrorOptions) {\n super(message);\n this.status = status;\n this.description = description;\n }\n}\n\ntype CreateRequestClientInstance = {\n activeMiddlewares?: ActiveMiddleware;\n middlewareOptions?: MiddlewaresOptions;\n customMiddlewares?: Middleware[];\n activePostMiddlewares?: ActivePostMiddleware;\n postMiddlewaresOptions?: PostMiddlewareOptions;\n customPostMiddlewares?: PostMiddleware[];\n};\n\nexport type RequestInstance = {\n <T, Incoming = unknown, Body = unknown, Outcoming = unknown>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ): Promise<T>;\n setOptions: (options: CreateRequestClientInstance) => void;\n};\n\nexport function createRequestClientInstance(options: CreateRequestClientInstance = {}) {\n let executeMiddlewares: <T, Incoming, Body, Outcoming>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ) => Promise<unknown>;\n\n let executePostMiddlewares: (response: Response | NodeResponse | undefined) => Promise<unknown>;\n\n function setMiddlewares({\n activeMiddlewares = [],\n middlewareOptions = {},\n customMiddlewares = [],\n activePostMiddlewares = [],\n postMiddlewaresOptions = {},\n customPostMiddlewares = [],\n }: CreateRequestClientInstance = {}) {\n executeMiddlewares = generateMiddlewares(\n activeMiddlewares,\n middlewareOptions,\n customMiddlewares,\n );\n\n executePostMiddlewares = generatePostMiddlewares(\n activePostMiddlewares,\n postMiddlewaresOptions,\n customPostMiddlewares,\n );\n }\n\n setMiddlewares(options);\n\n async function handleRequest<T, Incoming = unknown, Body = unknown, Outcoming = unknown>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n responseWithStatus?: boolean,\n ): Promise<{ data: T; status: number; headers: Record<string, string> } | T> {\n if (request.delay) {\n await wait(request.delay);\n }\n if (request.mock) {\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(request.mock)\n : (request.mock as T);\n\n return responseWithStatus\n ? { data: transformedResult, status: 200, headers: {} }\n : transformedResult;\n }\n\n await executeMiddlewares(request);\n\n const { method, body, path, params, headers } = request;\n\n const url = createURLWithParams({ baseURL: path, params });\n let preparedBody = body;\n\n if (body && !(preparedBody instanceof FormData)) {\n if (request.transformOutcomingData) {\n preparedBody = request.transformOutcomingData(body as Body);\n }\n\n if (isObject(body) || isArray(body)) preparedBody = JSON.stringify(preparedBody) as Outcoming;\n }\n\n let response: Response | NodeResponse | undefined;\n\n if (IS_BROWSER || IS_JEST) {\n response = await fetch(url, {\n method,\n body: preparedBody as BodyInit,\n headers: {\n ...(body instanceof FormData || !body\n ? {}\n : { \"Content-Type\": \"application/json; charset=UTF-8\" }),\n ...headers,\n },\n signal: request.signal,\n });\n }\n if (IS_NODE && !IS_JEST) {\n const nodeFetch = (await import(\"node-fetch\")).default;\n response = await nodeFetch(url, {\n method,\n body: preparedBody as NodeBodyInit,\n headers: {\n ...(body instanceof FormData || !body\n ? {}\n : { \"Content-Type\": \"application/json; charset=UTF-8\" }),\n ...headers,\n },\n signal: request.signal,\n });\n }\n\n await executePostMiddlewares(response);\n\n if (!response) {\n throw new Error(\"hasn't response\");\n }\n\n if (!response.ok) {\n let result;\n try {\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n } catch {}\n\n throw new ResponseError({\n status: response.status,\n message: `HTTP error! Status: ${response.status}`,\n description: result,\n });\n }\n\n if (request.downloadFile) {\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 || !fileName) throw new Error(\"Download Error! Empty info!\");\n\n if (IS_BROWSER)\n downloadFile({\n data,\n fileName,\n mimeType,\n });\n\n return responseWithStatus\n ? {\n data: data as T,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (data as T);\n }\n\n if (request.withoutResponse)\n return responseWithStatus\n ? {\n data: true as T,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (true as T);\n\n const contentType = response.headers.get(\"content-type\");\n let result: Incoming;\n\n if (contentType?.includes?.(\"text\")) {\n result = (await response.text()) as Incoming;\n } else if (contentType?.includes?.(\"json\")) {\n result = (await response.json()) as Incoming;\n } else {\n result = (await response.blob()) as Incoming;\n }\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(result)\n : (result as unknown as T);\n\n return responseWithStatus\n ? {\n data: transformedResult,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : transformedResult;\n }\n\n async function requestApi<T, Incoming = unknown, Body = unknown, Outcoming = unknown>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ): Promise<T> {\n return handleRequest(request, false) as Promise<T>;\n }\n\n async function requestApiWithMeta<T, Incoming = unknown, Body = unknown, Outcoming = unknown>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ): Promise<{ data: T; status: number; headers: Record<string, string> }> {\n return handleRequest(request, true) as Promise<{\n data: T;\n status: number;\n headers: Record<string, string>;\n }>;\n }\n\n return {\n requestApi,\n requestApiWithMeta,\n setMiddlewares,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { waitUntil } from '../../utils/wait-until.js';
|
|
2
|
+
import 'lodash/get';
|
|
3
|
+
import '../../../constants/environment.js';
|
|
4
|
+
import 'dayjs';
|
|
5
|
+
import '../../date/is-today.js';
|
|
6
|
+
import '../../date/is-tomorrow.js';
|
|
7
|
+
import '../../date/is-yesterday.js';
|
|
8
|
+
import 'lodash/set';
|
|
9
|
+
import { startWith } from '../../utils/start-with.js';
|
|
10
|
+
import { getAuthTokenNoRefresh } from '../auth/token.js';
|
|
11
|
+
|
|
12
|
+
let isFetchingAccessToken = false;
|
|
13
|
+
const generateAuthNoRefreshMiddleWare = (options) => async (request) => {
|
|
14
|
+
if (!options.authUrl || !options.storageTokenExpiresName || !options.errorUrl) {
|
|
15
|
+
throw new Error("Auth middleware hasn't required options");
|
|
16
|
+
}
|
|
17
|
+
const isSameOrigin = !startWith(request.path, "http");
|
|
18
|
+
if (request.token) {
|
|
19
|
+
if (!isSameOrigin)
|
|
20
|
+
request.headers = {
|
|
21
|
+
...request.headers,
|
|
22
|
+
Authorization: `Bearer ${request.token}`,
|
|
23
|
+
};
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (isFetchingAccessToken)
|
|
27
|
+
await waitUntil(() => isFetchingAccessToken);
|
|
28
|
+
const expires = localStorage.getItem(options.storageTokenExpiresName);
|
|
29
|
+
if (!expires) {
|
|
30
|
+
isFetchingAccessToken = true;
|
|
31
|
+
await (options.tokenRequest ? options.tokenRequest() : getAuthTokenNoRefresh(options));
|
|
32
|
+
isFetchingAccessToken = false;
|
|
33
|
+
}
|
|
34
|
+
const token = options.storageTokenName ? localStorage.getItem(options.storageTokenName) : null;
|
|
35
|
+
if (!isSameOrigin && token)
|
|
36
|
+
request.headers = {
|
|
37
|
+
...request.headers,
|
|
38
|
+
Authorization: `Bearer ${token}`,
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export { generateAuthNoRefreshMiddleWare };
|
|
43
|
+
//# sourceMappingURL=auth-no-refresh-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-no-refresh-middleware.js","sources":["../../../../../src/lib/api/middlewares/auth-no-refresh-middleware.ts"],"sourcesContent":["import type { AuthNoRefreshMiddleWareOptions, Middleware } from \"../../../types\";\nimport { startWith, waitUntil } from \"../../utils\";\nimport { getAuthTokenNoRefresh } from \"../auth\";\n\nlet isFetchingAccessToken = false;\n\nexport const generateAuthNoRefreshMiddleWare =\n (options: AuthNoRefreshMiddleWareOptions): Middleware =>\n async (request) => {\n if (!options.authUrl || !options.storageTokenExpiresName || !options.errorUrl) {\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 (isFetchingAccessToken) await waitUntil(() => isFetchingAccessToken);\n\n const expires = localStorage.getItem(options.storageTokenExpiresName);\n if (!expires) {\n isFetchingAccessToken = true;\n await (options.tokenRequest ? options.tokenRequest() : getAuthTokenNoRefresh(options));\n isFetchingAccessToken = false;\n }\n const token = options.storageTokenName ? localStorage.getItem(options.storageTokenName) : null;\n\n if (!isSameOrigin && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n"],"names":[],"mappings":";;;;;;;;;;;AAIA,IAAI,qBAAqB,GAAG,KAAK;AAE1B,MAAM,+BAA+B,GAC1C,CAAC,OAAuC,KACxC,OAAO,OAAO,KAAI;AAChB,IAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC7E,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;;AAGF,IAAA,IAAI,qBAAqB;AAAE,QAAA,MAAM,SAAS,CAAC,MAAM,qBAAqB,CAAC;IAEvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;IACrE,IAAI,CAAC,OAAO,EAAE;QACZ,qBAAqB,GAAG,IAAI;AAC5B,QAAA,OAAO,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACtF,qBAAqB,GAAG,KAAK;;IAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAE9F,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,10 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
return
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
function generateConsoleMiddleware(options = {}) {
|
|
2
|
+
return (request) => {
|
|
3
|
+
return new Promise((resolve) => {
|
|
4
|
+
if ((options.filter &&
|
|
5
|
+
!options.filter(request)) ||
|
|
6
|
+
(options.filterHeaders && !options.filterHeaders(request.headers)) ||
|
|
7
|
+
(options.filterMethod && !options.filterMethod(request.method)) ||
|
|
8
|
+
(options.filterParams && !options.filterParams(request.params)) ||
|
|
9
|
+
(options.filterPath && !options.filterPath(request.path))) {
|
|
10
|
+
resolve(true);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
// eslint-disable-next-line no-console
|
|
14
|
+
console.log(request);
|
|
15
|
+
resolve(true);
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
}
|
|
8
19
|
|
|
9
|
-
export {
|
|
20
|
+
export { generateConsoleMiddleware };
|
|
10
21
|
//# sourceMappingURL=console-middleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-middleware.js","sources":["../../../../../src/lib/api/middlewares/console-middleware.ts"],"sourcesContent":["import type { Middleware } from \"../../../types\";\n\nexport
|
|
1
|
+
{"version":3,"file":"console-middleware.js","sources":["../../../../../src/lib/api/middlewares/console-middleware.ts"],"sourcesContent":["import type { LoggerMiddlewareOptions, Middleware, RequestInterface } from \"../../../types\";\n\nexport function generateConsoleMiddleware(options: LoggerMiddlewareOptions = {}): Middleware {\n return (request) => {\n return new Promise((resolve) => {\n if (\n (options.filter &&\n !options.filter(request as RequestInterface<unknown, unknown, unknown, unknown>)) ||\n (options.filterHeaders && !options.filterHeaders(request.headers)) ||\n (options.filterMethod && !options.filterMethod(request.method)) ||\n (options.filterParams && !options.filterParams(request.params)) ||\n (options.filterPath && !options.filterPath(request.path))\n ) {\n resolve(true);\n\n return;\n }\n // eslint-disable-next-line no-console\n console.log(request);\n resolve(true);\n });\n };\n}\n"],"names":[],"mappings":"AAEgB,SAAA,yBAAyB,CAAC,OAAA,GAAmC,EAAE,EAAA;IAC7E,OAAO,CAAC,OAAO,KAAI;AACjB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IACE,CAAC,OAAO,CAAC,MAAM;AACb,gBAAA,CAAC,OAAO,CAAC,MAAM,CAAC,OAA+D,CAAC;AAClF,iBAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClE,iBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/D,iBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/D,iBAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EACzD;gBACA,OAAO,CAAC,IAAI,CAAC;gBAEb;;;AAGF,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC;AACf,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
function generateConsolePostMiddleware(options = {}) {
|
|
2
|
+
return (response) => {
|
|
3
|
+
return new Promise((resolve) => {
|
|
4
|
+
void (async function logger() {
|
|
5
|
+
try {
|
|
6
|
+
if (!response ||
|
|
7
|
+
(options.filter && !options.filter(response)) ||
|
|
8
|
+
(options.filterStatus && !options.filterStatus(response.status)) ||
|
|
9
|
+
(options.filterUrl && !options.filterUrl(response.url)) ||
|
|
10
|
+
(options.filterHeaders && !options.filterHeaders(response.headers))) {
|
|
11
|
+
resolve(true);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const contentType = response.headers.get("content-type");
|
|
15
|
+
let result;
|
|
16
|
+
if (contentType?.includes?.("text")) {
|
|
17
|
+
result = await response.text();
|
|
18
|
+
}
|
|
19
|
+
else if (contentType?.includes?.("json")) {
|
|
20
|
+
result = await response.json();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
result = await response.blob();
|
|
24
|
+
}
|
|
25
|
+
console.log({
|
|
26
|
+
url: response.url,
|
|
27
|
+
status: response.status,
|
|
28
|
+
headers: response.headers,
|
|
29
|
+
body: result,
|
|
30
|
+
});
|
|
31
|
+
resolve(true);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
if (response) {
|
|
35
|
+
console.log({ url: response.url, status: response.status, headers: response.headers });
|
|
36
|
+
}
|
|
37
|
+
resolve(true);
|
|
38
|
+
}
|
|
39
|
+
})().finally(() => {
|
|
40
|
+
resolve(true);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { generateConsolePostMiddleware };
|
|
47
|
+
//# sourceMappingURL=console-post-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-post-middleware.js","sources":["../../../../../src/lib/api/middlewares/console-post-middleware.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport type { LoggerPostMiddlewareOptions, PostMiddleware } from \"../../../types\";\n\nexport function generateConsolePostMiddleware(\n options: LoggerPostMiddlewareOptions = {},\n): PostMiddleware {\n return (response) => {\n return new Promise((resolve) => {\n void (async function logger() {\n try {\n if (\n !response ||\n (options.filter && !options.filter(response)) ||\n (options.filterStatus && !options.filterStatus(response.status)) ||\n (options.filterUrl && !options.filterUrl(response.url)) ||\n (options.filterHeaders && !options.filterHeaders(response.headers))\n ) {\n resolve(true);\n\n return;\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result;\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n\n console.log({\n url: response.url,\n status: response.status,\n headers: response.headers,\n body: result,\n });\n\n resolve(true);\n } catch {\n if (response) {\n console.log({ url: response.url, status: response.status, headers: response.headers });\n }\n\n resolve(true);\n }\n })().finally(() => {\n resolve(true);\n });\n });\n };\n}\n"],"names":[],"mappings":"AAGgB,SAAA,6BAA6B,CAC3C,OAAA,GAAuC,EAAE,EAAA;IAEzC,OAAO,CAAC,QAAQ,KAAI;AAClB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,eAAe,MAAM,GAAA;AACzB,gBAAA,IAAI;AACF,oBAAA,IACE,CAAC,QAAQ;yBACR,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7C,yBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChE,yBAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvD,yBAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EACnE;wBACA,OAAO,CAAC,IAAI,CAAC;wBAEb;;oBAGF,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACxD,oBAAA,IAAI,MAAM;oBACV,IAAI,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE;AACnC,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;yBACzB,IAAI,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE;AAC1C,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;yBACzB;AACL,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;oBAGhC,OAAO,CAAC,GAAG,CAAC;wBACV,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;AACzB,wBAAA,IAAI,EAAE,MAAM;AACb,qBAAA,CAAC;oBAEF,OAAO,CAAC,IAAI,CAAC;;AACb,gBAAA,MAAM;oBACN,IAAI,QAAQ,EAAE;wBACZ,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;;oBAGxF,OAAO,CAAC,IAAI,CAAC;;AAEjB,aAAC,GAAG,CAAC,OAAO,CAAC,MAAK;gBAChB,OAAO,CAAC,IAAI,CAAC;AACf,aAAC,CAAC;AACJ,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { API_MIDDLEWARES } from '../../../constants/api.js';
|
|
1
|
+
import { API_MIDDLEWARES, POST_API_MIDDLEWARES } from '../../../constants/api.js';
|
|
2
2
|
import { IS_BROWSER, IS_JEST } from '../../../constants/environment.js';
|
|
3
3
|
import { generateAuthMiddleWare } from './auth-middleware.js';
|
|
4
|
-
import {
|
|
4
|
+
import { generateAuthNoRefreshMiddleWare } from './auth-no-refresh-middleware.js';
|
|
5
|
+
import { generateConsoleMiddleware } from './console-middleware.js';
|
|
6
|
+
import { generateConsolePostMiddleware } from './console-post-middleware.js';
|
|
5
7
|
|
|
6
8
|
function generateMiddlewares(activeMiddlewares, middlewareOptions, customMiddlewares) {
|
|
7
9
|
const selectedMiddlewares = customMiddlewares;
|
|
@@ -12,8 +14,13 @@ function generateMiddlewares(activeMiddlewares, middlewareOptions, customMiddlew
|
|
|
12
14
|
selectedMiddlewares.push(generateAuthMiddleWare(middlewareOptions.auth));
|
|
13
15
|
continue;
|
|
14
16
|
}
|
|
17
|
+
case API_MIDDLEWARES.AuthNoRefresh: {
|
|
18
|
+
if (middlewareOptions.authNoRefresh && (IS_BROWSER || IS_JEST))
|
|
19
|
+
selectedMiddlewares.push(generateAuthNoRefreshMiddleWare(middlewareOptions.authNoRefresh));
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
15
22
|
case API_MIDDLEWARES.Logger: {
|
|
16
|
-
selectedMiddlewares.push(
|
|
23
|
+
selectedMiddlewares.push(generateConsoleMiddleware(middlewareOptions.logger));
|
|
17
24
|
continue;
|
|
18
25
|
}
|
|
19
26
|
default: {
|
|
@@ -33,6 +40,31 @@ function generateMiddlewares(activeMiddlewares, middlewareOptions, customMiddlew
|
|
|
33
40
|
});
|
|
34
41
|
};
|
|
35
42
|
}
|
|
43
|
+
function generatePostMiddlewares(activePostMiddlewares, postMiddlewaresOptions, customPostMiddlewares) {
|
|
44
|
+
const selectedMiddlewares = customPostMiddlewares;
|
|
45
|
+
for (const key of activePostMiddlewares) {
|
|
46
|
+
switch (key) {
|
|
47
|
+
case POST_API_MIDDLEWARES.Logger: {
|
|
48
|
+
selectedMiddlewares.push(generateConsolePostMiddleware(postMiddlewaresOptions.logger));
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
default: {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return function executeMiddlewares(response) {
|
|
57
|
+
return new Promise((resolve) => {
|
|
58
|
+
void (async () => {
|
|
59
|
+
for (const middleware of selectedMiddlewares) {
|
|
60
|
+
// eslint-disable-next-line no-await-in-loop
|
|
61
|
+
await middleware(response);
|
|
62
|
+
}
|
|
63
|
+
resolve(1);
|
|
64
|
+
})();
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
}
|
|
36
68
|
|
|
37
|
-
export { generateMiddlewares };
|
|
69
|
+
export { generateMiddlewares, generatePostMiddlewares };
|
|
38
70
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/lib/api/middlewares/index.ts"],"sourcesContent":["import { API_MIDDLEWARES, IS_BROWSER, IS_JEST } from \"../../../constants\";\nimport type {\n ActiveMiddleware,\n Middleware,\n MiddlewaresOptions,\n RequestInterface,\n} from \"../../../types\";\nimport { generateAuthMiddleWare } from \"./auth-middleware\";\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/lib/api/middlewares/index.ts"],"sourcesContent":["import type { Response as NodeResponse } from \"node-fetch\";\nimport { API_MIDDLEWARES, IS_BROWSER, IS_JEST, POST_API_MIDDLEWARES } from \"../../../constants\";\nimport type {\n ActiveMiddleware,\n ActivePostMiddleware,\n Middleware,\n MiddlewaresOptions,\n PostMiddleware,\n PostMiddlewareOptions,\n RequestInterface,\n} from \"../../../types\";\nimport { generateAuthMiddleWare } from \"./auth-middleware\";\nimport { generateAuthNoRefreshMiddleWare } from \"./auth-no-refresh-middleware\";\nimport { generateConsoleMiddleware } from \"./console-middleware\";\nimport { generateConsolePostMiddleware } from \"./console-post-middleware\";\n\nexport function generateMiddlewares(\n activeMiddlewares: ActiveMiddleware,\n middlewareOptions: MiddlewaresOptions,\n customMiddlewares: Middleware[],\n) {\n const selectedMiddlewares: Middleware[] = customMiddlewares;\n\n for (const key of activeMiddlewares) {\n switch (key) {\n case API_MIDDLEWARES.Auth: {\n if (middlewareOptions.auth && (IS_BROWSER || IS_JEST))\n selectedMiddlewares.push(generateAuthMiddleWare(middlewareOptions.auth));\n continue;\n }\n case API_MIDDLEWARES.AuthNoRefresh: {\n if (middlewareOptions.authNoRefresh && (IS_BROWSER || IS_JEST))\n selectedMiddlewares.push(\n generateAuthNoRefreshMiddleWare(middlewareOptions.authNoRefresh),\n );\n continue;\n }\n case API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(generateConsoleMiddleware(middlewareOptions.logger));\n continue;\n }\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares<T, Incoming, Body, Outcoming>(\n request: RequestInterface<T, Incoming, Body, Outcoming>,\n ) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(request);\n }\n\n resolve(1);\n })();\n });\n };\n}\n\nexport function generatePostMiddlewares(\n activePostMiddlewares: ActivePostMiddleware,\n postMiddlewaresOptions: PostMiddlewareOptions,\n customPostMiddlewares: PostMiddleware[],\n) {\n const selectedMiddlewares: PostMiddleware[] = customPostMiddlewares;\n\n for (const key of activePostMiddlewares) {\n switch (key) {\n case POST_API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(generateConsolePostMiddleware(postMiddlewaresOptions.logger));\n continue;\n }\n\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares(response: Response | NodeResponse | undefined) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(response);\n }\n\n resolve(1);\n })();\n });\n };\n}\n"],"names":[],"mappings":";;;;;;;SAgBgB,mBAAmB,CACjC,iBAAmC,EACnC,iBAAqC,EACrC,iBAA+B,EAAA;IAE/B,MAAM,mBAAmB,GAAiB,iBAAiB;AAE3D,IAAA,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE;QACnC,QAAQ,GAAG;AACT,YAAA,KAAK,eAAe,CAAC,IAAI,EAAE;gBACzB,IAAI,iBAAiB,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC;oBACnD,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC1E;;AAEF,YAAA,KAAK,eAAe,CAAC,aAAa,EAAE;gBAClC,IAAI,iBAAiB,CAAC,aAAa,KAAK,UAAU,IAAI,OAAO,CAAC;oBAC5D,mBAAmB,CAAC,IAAI,CACtB,+BAA+B,CAAC,iBAAiB,CAAC,aAAa,CAAC,CACjE;gBACH;;AAEF,YAAA,KAAK,eAAe,CAAC,MAAM,EAAE;gBAC3B,mBAAmB,CAAC,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC7E;;YAEF,SAAS;gBACP;;;;IAKN,OAAO,SAAS,kBAAkB,CAChC,OAAuD,EAAA;AAEvD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,YAAW;AACf,gBAAA,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE;;AAE5C,oBAAA,MAAM,UAAU,CAAC,OAAO,CAAC;;gBAG3B,OAAO,CAAC,CAAC,CAAC;aACX,GAAG;AACN,SAAC,CAAC;AACJ,KAAC;AACH;SAEgB,uBAAuB,CACrC,qBAA2C,EAC3C,sBAA6C,EAC7C,qBAAuC,EAAA;IAEvC,MAAM,mBAAmB,GAAqB,qBAAqB;AAEnE,IAAA,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE;QACvC,QAAQ,GAAG;AACT,YAAA,KAAK,oBAAoB,CAAC,MAAM,EAAE;gBAChC,mBAAmB,CAAC,IAAI,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBACtF;;YAGF,SAAS;gBACP;;;;IAKN,OAAO,SAAS,kBAAkB,CAAC,QAA6C,EAAA;AAC9E,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,YAAW;AACf,gBAAA,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE;;AAE5C,oBAAA,MAAM,UAAU,CAAC,QAAQ,CAAC;;gBAG5B,OAAO,CAAC,CAAC,CAAC;aACX,GAAG;AACN,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Response as Response$1, Headers as Headers$1 } from 'node-fetch';
|
|
2
|
+
|
|
1
3
|
declare const DATE_TYPES: {
|
|
2
4
|
readonly Days: "days";
|
|
3
5
|
readonly Months: "months";
|
|
@@ -9,6 +11,10 @@ declare const DATE_TYPES: {
|
|
|
9
11
|
|
|
10
12
|
declare const API_MIDDLEWARES: {
|
|
11
13
|
readonly Auth: "auth";
|
|
14
|
+
readonly AuthNoRefresh: "authNoRefresh";
|
|
15
|
+
readonly Logger: "logger";
|
|
16
|
+
};
|
|
17
|
+
declare const POST_API_MIDDLEWARES: {
|
|
12
18
|
readonly Logger: "logger";
|
|
13
19
|
};
|
|
14
20
|
|
|
@@ -40,9 +46,10 @@ type ValueOf<T> = T extends {} ? T[keyof T] : unknown;
|
|
|
40
46
|
|
|
41
47
|
type ParamValueType = string | number | boolean;
|
|
42
48
|
type ParamsType = Record<string, ParamValueType | ParamValueType[] | null | undefined>;
|
|
49
|
+
type RequestMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
43
50
|
interface RequestInterface<T, Incoming, Body, Outcoming> {
|
|
44
51
|
path: string;
|
|
45
|
-
method:
|
|
52
|
+
method: RequestMethod;
|
|
46
53
|
body?: Body | Outcoming;
|
|
47
54
|
params?: ParamsType;
|
|
48
55
|
headers?: Record<string, string | undefined>;
|
|
@@ -56,6 +63,18 @@ interface RequestInterface<T, Incoming, Body, Outcoming> {
|
|
|
56
63
|
signal?: AbortSignal;
|
|
57
64
|
}
|
|
58
65
|
type Middleware = <T, Incoming, Body, Outcoming>(request: RequestInterface<T, Incoming, Body, Outcoming>) => Promise<unknown>;
|
|
66
|
+
type PostMiddleware = (response: Response | Response$1 | undefined) => Promise<unknown>;
|
|
67
|
+
type PostMiddlewareType = ValueOf<typeof POST_API_MIDDLEWARES>;
|
|
68
|
+
type ActivePostMiddleware = PostMiddlewareType[];
|
|
69
|
+
type LoggerPostMiddlewareOptions = {
|
|
70
|
+
filter?: (response: Response | Response$1 | undefined) => boolean;
|
|
71
|
+
filterStatus?: (status: number) => boolean;
|
|
72
|
+
filterUrl?: (url: string) => boolean;
|
|
73
|
+
filterHeaders?: (headers: Headers | Headers$1) => boolean;
|
|
74
|
+
};
|
|
75
|
+
type PostMiddlewareOptions = {
|
|
76
|
+
logger?: LoggerPostMiddlewareOptions;
|
|
77
|
+
};
|
|
59
78
|
type MiddlewareType = ValueOf<typeof API_MIDDLEWARES>;
|
|
60
79
|
type ActiveMiddleware = MiddlewareType[];
|
|
61
80
|
type AuthMiddleWareOptions = {
|
|
@@ -68,8 +87,17 @@ type AuthMiddleWareOptions = {
|
|
|
68
87
|
pathToTokenExpires: string;
|
|
69
88
|
tokenRequest?: () => Promise<string | null | undefined>;
|
|
70
89
|
};
|
|
90
|
+
type LoggerMiddlewareOptions = {
|
|
91
|
+
filter?: (request: RequestInterface<unknown, unknown, unknown, unknown>) => boolean;
|
|
92
|
+
filterPath?: (path: string) => boolean;
|
|
93
|
+
filterMethod?: (method: RequestMethod) => boolean;
|
|
94
|
+
filterParams?: (params?: ParamsType) => boolean;
|
|
95
|
+
filterHeaders?: (headers?: Record<string, string | undefined>) => boolean;
|
|
96
|
+
};
|
|
71
97
|
type MiddlewaresOptions = {
|
|
72
98
|
auth?: AuthMiddleWareOptions;
|
|
99
|
+
authNoRefresh?: AuthNoRefreshMiddleWareOptions;
|
|
100
|
+
logger?: LoggerMiddlewareOptions;
|
|
73
101
|
};
|
|
74
102
|
type AuthUserUpdateRequestOptions<User extends Record<string, unknown>> = AuthUserRequestOptions & {
|
|
75
103
|
userRequest?: () => Promise<User | null | undefined>;
|
|
@@ -86,6 +114,22 @@ type AuthTokenRequestOptions = {
|
|
|
86
114
|
pathToToken: string;
|
|
87
115
|
pathToTokenExpires: string;
|
|
88
116
|
};
|
|
117
|
+
type AuthTokenNoRefreshRequestOptions = {
|
|
118
|
+
storageTokenExpiresName: string;
|
|
119
|
+
queryIsRefreshTokenName: string;
|
|
120
|
+
queryTokenExpiresName: string;
|
|
121
|
+
onWindowOpenError?: () => void;
|
|
122
|
+
};
|
|
123
|
+
type AuthNoRefreshMiddleWareOptions = {
|
|
124
|
+
errorUrl: string;
|
|
125
|
+
authUrl: () => string;
|
|
126
|
+
storageTokenName?: string;
|
|
127
|
+
storageTokenExpiresName: string;
|
|
128
|
+
queryTokenExpiresName: string;
|
|
129
|
+
queryIsRefreshTokenName: string;
|
|
130
|
+
tokenRequest?: () => Promise<string | null | undefined>;
|
|
131
|
+
onWindowOpenError?: () => void;
|
|
132
|
+
};
|
|
89
133
|
|
|
90
134
|
type DateType = ValueOf<typeof DATE_TYPES>;
|
|
91
135
|
type DateGetterRule = {
|
|
@@ -100,29 +144,39 @@ type ColorFormat = ValueOf<typeof COLOR_FORMATS>;
|
|
|
100
144
|
type ResponseErrorOptions = {
|
|
101
145
|
message: string;
|
|
102
146
|
status: number;
|
|
103
|
-
description?:
|
|
147
|
+
description?: unknown;
|
|
104
148
|
};
|
|
105
149
|
declare class ResponseError extends Error {
|
|
106
150
|
status: number;
|
|
107
|
-
description?:
|
|
151
|
+
description?: unknown;
|
|
108
152
|
constructor({ message, status, description }: ResponseErrorOptions);
|
|
109
153
|
}
|
|
110
154
|
type CreateRequestClientInstance = {
|
|
111
155
|
activeMiddlewares?: ActiveMiddleware;
|
|
112
156
|
middlewareOptions?: MiddlewaresOptions;
|
|
113
157
|
customMiddlewares?: Middleware[];
|
|
158
|
+
activePostMiddlewares?: ActivePostMiddleware;
|
|
159
|
+
postMiddlewaresOptions?: PostMiddlewareOptions;
|
|
160
|
+
customPostMiddlewares?: PostMiddleware[];
|
|
161
|
+
};
|
|
162
|
+
type RequestInstance = {
|
|
163
|
+
<T, Incoming = unknown, Body = unknown, Outcoming = unknown>(request: RequestInterface<T, Incoming, Body, Outcoming>): Promise<T>;
|
|
164
|
+
setOptions: (options: CreateRequestClientInstance) => void;
|
|
114
165
|
};
|
|
115
|
-
declare function createRequestClientInstance(
|
|
166
|
+
declare function createRequestClientInstance(options?: CreateRequestClientInstance): {
|
|
116
167
|
requestApi: <T, Incoming = unknown, Body = unknown, Outcoming = unknown>(request: RequestInterface<T, Incoming, Body, Outcoming>) => Promise<T>;
|
|
117
168
|
requestApiWithMeta: <T, Incoming = unknown, Body = unknown, Outcoming = unknown>(request: RequestInterface<T, Incoming, Body, Outcoming>) => Promise<{
|
|
118
169
|
data: T;
|
|
119
170
|
status: number;
|
|
120
171
|
headers: Record<string, string>;
|
|
121
172
|
}>;
|
|
173
|
+
setMiddlewares: ({ activeMiddlewares, middlewareOptions, customMiddlewares, activePostMiddlewares, postMiddlewaresOptions, customPostMiddlewares, }?: CreateRequestClientInstance) => void;
|
|
122
174
|
};
|
|
123
175
|
|
|
124
176
|
declare function updateAuthToken(options: AuthMiddleWareOptions): Promise<string | undefined>;
|
|
125
177
|
declare function getAuthToken(options: AuthTokenRequestOptions): Promise<string | null | undefined>;
|
|
178
|
+
declare function getAuthTokenNoRefresh(options: AuthTokenNoRefreshRequestOptions): Promise<void>;
|
|
179
|
+
declare function updateAuthTokenNoRefresh(options: AuthNoRefreshMiddleWareOptions): Promise<undefined>;
|
|
126
180
|
|
|
127
181
|
declare function updateAuthUser<User extends Record<string, unknown>>(options: AuthUserUpdateRequestOptions<User>): Promise<User | undefined>;
|
|
128
182
|
declare function getAuthUser<User extends Record<string, unknown>>(options: AuthUserRequestOptions): Promise<User | null | undefined>;
|
|
@@ -281,4 +335,4 @@ declare function isUndefined(value: unknown): value is undefined;
|
|
|
281
335
|
|
|
282
336
|
declare function isDate(value: unknown): value is Date;
|
|
283
337
|
|
|
284
|
-
export { API_MIDDLEWARES, type ActiveMiddleware, type AuthMiddleWareOptions, type AuthTokenRequestOptions, type AuthUserRequestOptions, type AuthUserUpdateRequestOptions, COLOR_FORMATS, type ColorFormat, DATE_TYPES, type DateGetterRule, type DateType, FIELD_TYPES, type FieldType, IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER, type Maybe, type Middleware, type MiddlewareType, type MiddlewaresOptions, type ParamValueType, type ParamsType, type PositionPlacements, type RequestInterface, ResponseError, type ValueOf, type VisiblePosition, arrayToMapByKey, buildQueryString, checkType, createRequestClientInstance, createURLWithParams, dateDifference, dateFormat, downloadFile, downloadJson, fieldViewFormat, getAuthToken, getAuthUser, getByPath, getCallerFunctionName, getColorFormat, getDateByRules, getFileNameFromHeader, getRandomColor, getToday, getTomorrow, getVisiblePosition, getYesterday, isArray, isBoolean, isDate, isId, isNull, isNullable, isNumber, isObject, isString, isToday, isTomorrow, isUndefined, isYesterday, joinPaths, jsonParse, limitStreamOfRequests, randomNumber, randomString, readFile, setByPath, startWith, syncObjectValues, takeOpacityColors, transformHEXtoRGB, transformRGBAtoRGB, transformRGBtoRGBA, transformToColor, transformToNumber, translit, trimUrl, updateAuthToken, updateAuthUser, wait, waitUntil };
|
|
338
|
+
export { API_MIDDLEWARES, type ActiveMiddleware, type ActivePostMiddleware, type AuthMiddleWareOptions, type AuthNoRefreshMiddleWareOptions, type AuthTokenNoRefreshRequestOptions, type AuthTokenRequestOptions, type AuthUserRequestOptions, type AuthUserUpdateRequestOptions, COLOR_FORMATS, type ColorFormat, DATE_TYPES, type DateGetterRule, type DateType, FIELD_TYPES, type FieldType, IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER, type LoggerMiddlewareOptions, type LoggerPostMiddlewareOptions, type Maybe, type Middleware, type MiddlewareType, type MiddlewaresOptions, POST_API_MIDDLEWARES, type ParamValueType, type ParamsType, type PositionPlacements, type PostMiddleware, type PostMiddlewareOptions, type PostMiddlewareType, type RequestInstance, type RequestInterface, type RequestMethod, ResponseError, type ValueOf, type VisiblePosition, arrayToMapByKey, buildQueryString, checkType, createRequestClientInstance, createURLWithParams, dateDifference, dateFormat, downloadFile, downloadJson, fieldViewFormat, getAuthToken, getAuthTokenNoRefresh, getAuthUser, getByPath, getCallerFunctionName, getColorFormat, getDateByRules, getFileNameFromHeader, getRandomColor, getToday, getTomorrow, getVisiblePosition, getYesterday, isArray, isBoolean, isDate, isId, isNull, isNullable, isNumber, isObject, isString, isToday, isTomorrow, isUndefined, isYesterday, joinPaths, jsonParse, limitStreamOfRequests, randomNumber, randomString, readFile, setByPath, startWith, syncObjectValues, takeOpacityColors, transformHEXtoRGB, transformRGBAtoRGB, transformRGBtoRGBA, transformToColor, transformToNumber, translit, trimUrl, updateAuthToken, updateAuthTokenNoRefresh, updateAuthUser, wait, waitUntil };
|