diff --git a/src/app.module.ts b/src/app.module.ts index d97f22afe..b9ae25502 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,9 +1,16 @@ -import { Module } from '@nestjs/common'; +import { + MiddlewareConsumer, + Module, + NestModule, + RequestMethod, +} from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core'; import { ScheduleModule } from '@nestjs/schedule'; import { RateLimiterInterceptor, RateLimiterModule } from 'nestjs-rate-limiter'; import configuration from './config/configuration'; +import { JsonBodyMiddleware } from './middleware/json-body.middleware'; +import { RawBodyMiddleware } from './middleware/raw-body.middleware'; import { AccessTokensModule } from './modules/access-tokens/access-tokens.module'; import { ApiKeysModule } from './modules/api-keys/api-keys.module'; import { ApprovedSubnetsModule } from './modules/approved-subnets/approved-subnets.module'; @@ -65,4 +72,15 @@ import { UsersModule } from './modules/users/users.module'; }, ], }) -export class AppModule {} +export class AppModule implements NestModule { + public configure(consumer: MiddlewareConsumer): void { + consumer + .apply(RawBodyMiddleware) + .forRoutes({ + path: '/webhooks/stripe', + method: RequestMethod.POST, + }) + .apply(JsonBodyMiddleware) + .forRoutes('*'); + } +} diff --git a/src/middleware/json-body.middleware.ts b/src/middleware/json-body.middleware.ts new file mode 100644 index 000000000..a4239dece --- /dev/null +++ b/src/middleware/json-body.middleware.ts @@ -0,0 +1,10 @@ +import { Injectable, NestMiddleware } from '@nestjs/common'; +import * as bodyParser from 'body-parser'; +import { NextFunction, Request, Response } from 'express'; + +@Injectable() +export class JsonBodyMiddleware implements NestMiddleware { + use(req: Request, res: Response, next: NextFunction) { + bodyParser.json()(req, res, next); + } +} diff --git a/src/middleware/raw-body.middleware.ts b/src/middleware/raw-body.middleware.ts new file mode 100644 index 000000000..8b00e380b --- /dev/null +++ b/src/middleware/raw-body.middleware.ts @@ -0,0 +1,10 @@ +import { Injectable, NestMiddleware } from '@nestjs/common'; +import * as bodyParser from 'body-parser'; +import { NextFunction, Request, Response } from 'express'; + +@Injectable() +export class RawBodyMiddleware implements NestMiddleware { + use(req: Request, res: Response, next: NextFunction) { + bodyParser.raw({ type: '*/*' })(req, res, next); + } +}