diff --git a/src/libs/Request.js b/src/libs/Request.ts similarity index 53% rename from src/libs/Request.js rename to src/libs/Request.ts index 577dcf3cb85d..459deaf89e1e 100644 --- a/src/libs/Request.js +++ b/src/libs/Request.ts @@ -1,43 +1,29 @@ -import _ from 'underscore'; import HttpUtils from './HttpUtils'; import enhanceParameters from './Network/enhanceParameters'; import * as NetworkStore from './Network/NetworkStore'; +import Request from '../types/onyx/Request'; -let middlewares = []; +type Middleware = (response: unknown, request: Request, isFromSequentialQueue: boolean) => Promise; -/** - * @param {Object} request - * @param {String} request.command - * @param {Object} request.data - * @param {String} request.type - * @param {Boolean} request.shouldUseSecure - * @returns {Promise} - */ -function makeXHR(request) { - const finalParameters = enhanceParameters(request.command, request.data); +let middlewares: Middleware[] = []; + +function makeXHR(request: Request): Promise { + const finalParameters = enhanceParameters(request.command, request?.data ?? {}); return NetworkStore.hasReadRequiredDataFromStorage().then(() => { // If we're using the Supportal token and this is not a Supportal request // let's just return a promise that will resolve itself. if (NetworkStore.getSupportAuthToken() && !NetworkStore.isSupportRequest(request.command)) { - return new Promise((resolve) => resolve()); + return new Promise((resolve) => resolve()); } return HttpUtils.xhr(request.command, finalParameters, request.type, request.shouldUseSecure); }); } -/** - * @param {Object} request - * @param {Boolean} [isFromSequentialQueue] - * @returns {Promise} - */ -function processWithMiddleware(request, isFromSequentialQueue = false) { - return _.reduce(middlewares, (last, middleware) => middleware(last, request, isFromSequentialQueue), makeXHR(request)); +function processWithMiddleware(request: Request, isFromSequentialQueue = false): Promise { + return middlewares.reduce((last, middleware) => middleware(last, request, isFromSequentialQueue), makeXHR(request)); } -/** - * @param {Function} middleware - */ -function use(middleware) { +function use(middleware: Middleware) { middlewares.push(middleware); } diff --git a/src/types/onyx/Request.ts b/src/types/onyx/Request.ts index 1df20cfb28fe..94f14af0ddb3 100644 --- a/src/types/onyx/Request.ts +++ b/src/types/onyx/Request.ts @@ -1,7 +1,7 @@ import {OnyxUpdate} from 'react-native-onyx'; type Request = { - command?: string; + command: string; data?: Record; type?: string; shouldUseSecure?: boolean;