diff --git a/client_core/network/README.md b/client_core/network/README.md index 7ac8053..ae78ee6 100644 --- a/client_core/network/README.md +++ b/client_core/network/README.md @@ -35,7 +35,9 @@ Receives **1** argument - **Object** wit the next fields: - `beforeParse` - **Function**. Triggered before request **Object** is beeing parsed
Has **1** argument: - - **reqParams** - **ReqParams**. Concrete request's request params. (Read below) + - **reqParams** - **ReqParams**. Concrete request's request params. (Read below)
+ + Returns **void | Promise** - `beforeRequest` - **Function**. Preprocess mutable request data right before it passed to Fetch API
Has **1** argument: @@ -50,7 +52,7 @@ Receives **1** argument - **Object** wit the next fields: - `headers` - **Request** headers - `signal` - **Request** signal - Returns **false** | **void**. Return **false** to abort request execution + Returns **boolean | void | Promise**. Return **false** to abort request execution - `afterRequest` - **Function**. Triggered after successful request was made
Has **2** arguments: diff --git a/client_core/network/request/index.ts b/client_core/network/request/index.ts index 15d25d7..68adf8e 100644 --- a/client_core/network/request/index.ts +++ b/client_core/network/request/index.ts @@ -1,4 +1,5 @@ import populateURLParams from '../../../common/populate_url_params' +import isExists from '../../../common/is/exists' import type { ReqData, ReqError, RequestParams, SetupParams } from './types' @@ -107,6 +108,27 @@ async function extractResponseData(req: RequestParams, res: Response): Promise +) { + + const currentBeforeReqResult = beforeRequest?.(reqData) + let isAllowedToProcess: boolean | void = true + + if (isExists(currentBeforeReqResult)) { + if (typeof currentBeforeReqResult == 'object') { + await currentBeforeReqResult.then(shouldProcess => { + isAllowedToProcess = shouldProcess + }) + + } else isAllowedToProcess = currentBeforeReqResult + } + + + return isAllowedToProcess +} + const createApi = (setupParams: SetupParams = {}) => { const { @@ -137,11 +159,10 @@ const createApi = (setupParams: SetupParams = {}) => { isSameReqPrevent && (reqKey = `${url}_${options.method}_${options.body}`) - if ( - beforeRequest?.(reqData) !== false - && req.beforeRequest?.(reqData) !== false - ) { + const globalReqAllowed = await isAllowedToProcess(beforeRequest, reqData) + const isReqAllowed = globalReqAllowed && await isAllowedToProcess(req.beforeRequest, reqData) + if (isReqAllowed) { try { if (isSameReqPrevent) { if (activeRequest.has(reqKey)) { diff --git a/client_core/network/request/types.d.ts b/client_core/network/request/types.d.ts index dde81fb..dbc62f7 100644 --- a/client_core/network/request/types.d.ts +++ b/client_core/network/request/types.d.ts @@ -103,7 +103,7 @@ type SetupParams = { * * @param reqData fetch api request params */ - beforeRequest?(reqData: ReqData): void | false + beforeRequest?(reqData: ReqData): void | boolean | Promise /** * Triggered after successful request was made diff --git a/package-lock.json b/package-lock.json index 1cf7089..86815b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "siegel", - "version": "0.14.91", + "version": "0.14.92", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 7fee31b..425696d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "siegel", - "version": "0.14.91", + "version": "0.14.92", "homepage": "https://siegel-qe3q.onrender.com", "url": "https://github.com/CyberCookie/siegel", "bugs": "https://github.com/CyberCookie/siegel/issues", @@ -31,7 +31,7 @@ }, "engineStrict": true, "engines": { - "node": ">=16", + "node": ">= 16", "npm": ">= 7" }, "config": {