From 63bf684e66fb83789bdb549c69451b8c0df97a92 Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Wed, 8 Jun 2022 15:52:45 +0200 Subject: [PATCH] refactor(medusa): Migrate middlewares to ts (#1469) --- ...e-customer.js => authenticate-customer.ts} | 8 +++---- .../src/api/middlewares/authenticate.js | 7 ------ .../src/api/middlewares/authenticate.ts | 8 +++++++ .../src/api/middlewares/await-middleware.js | 3 --- .../src/api/middlewares/await-middleware.ts | 9 +++++++ .../{error-handler.js => error-handler.ts} | 6 +++-- .../api/middlewares/{index.js => index.ts} | 0 .../src/api/middlewares/normalized-query.js | 16 ------------- .../src/api/middlewares/normalized-query.ts | 24 +++++++++++++++++++ 9 files changed, 49 insertions(+), 32 deletions(-) rename packages/medusa/src/api/middlewares/{authenticate-customer.js => authenticate-customer.ts} (54%) delete mode 100644 packages/medusa/src/api/middlewares/authenticate.js create mode 100644 packages/medusa/src/api/middlewares/authenticate.ts delete mode 100644 packages/medusa/src/api/middlewares/await-middleware.js create mode 100644 packages/medusa/src/api/middlewares/await-middleware.ts rename packages/medusa/src/api/middlewares/{error-handler.js => error-handler.ts} (87%) rename packages/medusa/src/api/middlewares/{index.js => index.ts} (100%) delete mode 100644 packages/medusa/src/api/middlewares/normalized-query.js create mode 100644 packages/medusa/src/api/middlewares/normalized-query.ts diff --git a/packages/medusa/src/api/middlewares/authenticate-customer.js b/packages/medusa/src/api/middlewares/authenticate-customer.ts similarity index 54% rename from packages/medusa/src/api/middlewares/authenticate-customer.js rename to packages/medusa/src/api/middlewares/authenticate-customer.ts index 61ca8e1b3a..ae86c0b9b3 100644 --- a/packages/medusa/src/api/middlewares/authenticate-customer.js +++ b/packages/medusa/src/api/middlewares/authenticate-customer.ts @@ -1,12 +1,12 @@ import passport from "passport" +import { Request, Response, NextFunction, RequestHandler } from "express" -export default () => { - // Always go to next - return (req, res, next) => { +export default (): RequestHandler => { + return (req: Request, res: Response, next: NextFunction): void => { passport.authenticate( ["jwt", "bearer"], { session: false }, - (err, user, info) => { + (err, user) => { if (err) { return next(err) } diff --git a/packages/medusa/src/api/middlewares/authenticate.js b/packages/medusa/src/api/middlewares/authenticate.js deleted file mode 100644 index d536b8a039..0000000000 --- a/packages/medusa/src/api/middlewares/authenticate.js +++ /dev/null @@ -1,7 +0,0 @@ -import passport from "passport" - -export default () => { - return (req, res, next) => { - passport.authenticate(["jwt", "bearer"], { session: false })(req, res, next) - } -} diff --git a/packages/medusa/src/api/middlewares/authenticate.ts b/packages/medusa/src/api/middlewares/authenticate.ts new file mode 100644 index 0000000000..d5aa4d4ed6 --- /dev/null +++ b/packages/medusa/src/api/middlewares/authenticate.ts @@ -0,0 +1,8 @@ +import passport from "passport" +import { Request, Response, NextFunction, RequestHandler } from "express" + +export default (): RequestHandler => { + return (req: Request, res: Response, next: NextFunction): void => { + passport.authenticate(["jwt", "bearer"], { session: false })(req, res, next) + } +} diff --git a/packages/medusa/src/api/middlewares/await-middleware.js b/packages/medusa/src/api/middlewares/await-middleware.js deleted file mode 100644 index ca4821e6af..0000000000 --- a/packages/medusa/src/api/middlewares/await-middleware.js +++ /dev/null @@ -1,3 +0,0 @@ -export default (fn) => - (...args) => - fn(...args).catch(args[2]) diff --git a/packages/medusa/src/api/middlewares/await-middleware.ts b/packages/medusa/src/api/middlewares/await-middleware.ts new file mode 100644 index 0000000000..b47f9f5246 --- /dev/null +++ b/packages/medusa/src/api/middlewares/await-middleware.ts @@ -0,0 +1,9 @@ +import { NextFunction, Request, RequestHandler, Response } from "express" + +type handler = (req: Request, res: Response) => Promise + +export default (fn: handler): RequestHandler => { + return (req: Request, res: Response, next: NextFunction) => { + return fn(req, res).catch(next) + } +} diff --git a/packages/medusa/src/api/middlewares/error-handler.js b/packages/medusa/src/api/middlewares/error-handler.ts similarity index 87% rename from packages/medusa/src/api/middlewares/error-handler.js rename to packages/medusa/src/api/middlewares/error-handler.ts index ee4ea47932..fb3d38897c 100644 --- a/packages/medusa/src/api/middlewares/error-handler.js +++ b/packages/medusa/src/api/middlewares/error-handler.ts @@ -1,4 +1,6 @@ import { MedusaError } from "medusa-core-utils" +import { NextFunction, Request, Response } from "express" +import { Logger } from "../../types/global" const QUERY_RUNNER_RELEASED = "QueryRunnerAlreadyReleasedError" const TRANSACTION_STARTED = "TransactionAlreadyStartedError" @@ -9,8 +11,8 @@ const INVALID_REQUEST_ERROR = "invalid_request_error" const INVALID_STATE_ERROR = "invalid_state_error" export default () => { - return (err, req, res, next) => { - const logger = req.scope.resolve("logger") + return (err: MedusaError, req: Request, res: Response, next: NextFunction) => { + const logger: Logger = req.scope.resolve("logger") logger.error(err) const errorType = err.type || err.name diff --git a/packages/medusa/src/api/middlewares/index.js b/packages/medusa/src/api/middlewares/index.ts similarity index 100% rename from packages/medusa/src/api/middlewares/index.js rename to packages/medusa/src/api/middlewares/index.ts diff --git a/packages/medusa/src/api/middlewares/normalized-query.js b/packages/medusa/src/api/middlewares/normalized-query.js deleted file mode 100644 index 82e2233b06..0000000000 --- a/packages/medusa/src/api/middlewares/normalized-query.js +++ /dev/null @@ -1,16 +0,0 @@ -export default () => { - return (req, res, next) => { - const clean = Object.entries(req.query).reduce((acc, [key, val]) => { - if (Array.isArray(val) && val.length === 1) { - acc[key] = val[0].split(",") - } else { - acc[key] = val - } - return acc - }, {}) - - req.query = clean - - next() - } -} diff --git a/packages/medusa/src/api/middlewares/normalized-query.ts b/packages/medusa/src/api/middlewares/normalized-query.ts new file mode 100644 index 0000000000..7cc6e90231 --- /dev/null +++ b/packages/medusa/src/api/middlewares/normalized-query.ts @@ -0,0 +1,24 @@ +import { NextFunction, Request, Response } from "express" + +/** + * Normalize an input query, especially from array like query params to an array type + * e.g: /admin/orders/?fields[]=id,status,cart_id becomes { fields: ["id", "status", "cart_id"] } + */ +export default (): (( + req: Request, + res: Response, + next: NextFunction +) => void) => { + return (req: Request, res: Response, next: NextFunction): void => { + req.query = Object.entries(req.query).reduce((acc, [key, val]) => { + if (Array.isArray(val) && val.length === 1) { + acc[key] = (val as string[])[0].split(",") + } else { + acc[key] = val + } + return acc + }, {}) + + next() + } +}