From 42a97ec6dcb1cd047ffedf1fd74626340c400975 Mon Sep 17 00:00:00 2001 From: Gabriel Tozatti Date: Wed, 11 Mar 2026 15:15:09 -0300 Subject: [PATCH 1/2] feat: add base HTTP controller and routes structure --- packages/worker/src/http/index.ts | 9 ++++++++ .../src/http/middlewares/handleErrors.ts | 23 +++++++++++++++++++ .../src/http/modules/gasless/controller.ts | 16 +++++++++++++ .../worker/src/http/modules/gasless/routes.ts | 8 +++++++ packages/worker/src/index.ts | 2 ++ 5 files changed, 58 insertions(+) create mode 100644 packages/worker/src/http/index.ts create mode 100644 packages/worker/src/http/middlewares/handleErrors.ts create mode 100644 packages/worker/src/http/modules/gasless/controller.ts create mode 100644 packages/worker/src/http/modules/gasless/routes.ts diff --git a/packages/worker/src/http/index.ts b/packages/worker/src/http/index.ts new file mode 100644 index 000000000..b2c2d62fb --- /dev/null +++ b/packages/worker/src/http/index.ts @@ -0,0 +1,9 @@ +import { Application } from "express"; +import gaslessRouter from "./modules/gasless/routes"; +import { handleErrors } from "./middlewares/handleErrors"; + +export const setupRoutes = (app: Application): void => { + app.use("/worker/gasless", gaslessRouter); + + app.use(handleErrors); +}; diff --git a/packages/worker/src/http/middlewares/handleErrors.ts b/packages/worker/src/http/middlewares/handleErrors.ts new file mode 100644 index 000000000..66ff6dbfe --- /dev/null +++ b/packages/worker/src/http/middlewares/handleErrors.ts @@ -0,0 +1,23 @@ +import { Request, Response, NextFunction } from "express"; + +export class AppError extends Error { + constructor(public readonly statusCode: number, message: string) { + super(message); + this.name = "AppError"; + } +} + +export const handleErrors = ( + err: Error, + _req: Request, + res: Response, + _next: NextFunction +): void => { + if (err instanceof AppError) { + res.status(err.statusCode).json({ error: err.message }); + return; + } + + console.error("[HTTP]: Unhandled error", err); + res.status(500).json({ error: "Internal server error" }); +}; diff --git a/packages/worker/src/http/modules/gasless/controller.ts b/packages/worker/src/http/modules/gasless/controller.ts new file mode 100644 index 000000000..b1e7395af --- /dev/null +++ b/packages/worker/src/http/modules/gasless/controller.ts @@ -0,0 +1,16 @@ +import { Request, Response, NextFunction } from "express"; +import { AppError } from "@/http/middlewares/handleErrors"; + +export class GaslessController { + static async reserve( + _req: Request, + res: Response, + next: NextFunction + ): Promise { + try { + throw new AppError(501, "Not implemented"); + } catch (err) { + next(err); + } + } +} diff --git a/packages/worker/src/http/modules/gasless/routes.ts b/packages/worker/src/http/modules/gasless/routes.ts new file mode 100644 index 000000000..b6dc0f300 --- /dev/null +++ b/packages/worker/src/http/modules/gasless/routes.ts @@ -0,0 +1,8 @@ +import { Router } from "express"; +import { GaslessController } from "@/http/modules/gasless/controller"; + +const gaslessRouter = Router(); + +gaslessRouter.post("/reserve", GaslessController.reserve); + +export default gaslessRouter; diff --git a/packages/worker/src/index.ts b/packages/worker/src/index.ts index 4c02e4f80..20a1c79f0 100644 --- a/packages/worker/src/index.ts +++ b/packages/worker/src/index.ts @@ -14,6 +14,7 @@ import { UserBlockSyncCron, } from "./queues/userBlockSync"; import { GaslessUtxoCleanup } from "@/queues/gaslessUtxos/gaslessUtxoCleanup"; +import { setupRoutes } from "@/http"; const { WORKER_PORT, @@ -54,6 +55,7 @@ console.log( ); const app = express(); +setupRoutes(app); const serverAdapter = new ExpressAdapter(); createBullBoard({ From 4a4b1f0b6b0ea2459f09104cb8774fb05162f764 Mon Sep 17 00:00:00 2001 From: Gabriel Tozatti Date: Wed, 11 Mar 2026 15:22:52 -0300 Subject: [PATCH 2/2] fix: remove console.log and add basic Express middleware --- packages/worker/src/http/middlewares/handleErrors.ts | 1 - packages/worker/src/index.ts | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/worker/src/http/middlewares/handleErrors.ts b/packages/worker/src/http/middlewares/handleErrors.ts index 66ff6dbfe..88c6940fe 100644 --- a/packages/worker/src/http/middlewares/handleErrors.ts +++ b/packages/worker/src/http/middlewares/handleErrors.ts @@ -18,6 +18,5 @@ export const handleErrors = ( return; } - console.error("[HTTP]: Unhandled error", err); res.status(500).json({ error: "Internal server error" }); }; diff --git a/packages/worker/src/index.ts b/packages/worker/src/index.ts index 20a1c79f0..3b6cebb67 100644 --- a/packages/worker/src/index.ts +++ b/packages/worker/src/index.ts @@ -55,6 +55,8 @@ console.log( ); const app = express(); +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); setupRoutes(app); const serverAdapter = new ExpressAdapter();