golevelup / nestjs

A collection of badass modules and utilities to help you level up your NestJS applications 🚀
MIT License
2.26k stars 259 forks source link

decorators param for Stripe webhook not works #743

Closed anteqkois closed 6 days ago

anteqkois commented 4 months ago

I tried to use SkipThrottle decorator, but this don't work and throttling still works.

@Module({
  imports: [
    GolevelupStripeModule.forRootAsync(GolevelupStripeModule, {
      inject: [ConfigService],
      useFactory(configService: ConfigService) {
        return {
          apiVersion: '2024-04-10',
          apiKey: configService.getOrThrow('STRIPE_API_KEY'),
          webhookConfig: {
          decorators: [SkipThrottle()],
            stripeSecrets: {
              account: configService.getOrThrow('STRIPE_WEBHOOK_SECRET'),
              accountTest: configService.getOrThrow('STRIPE_WEBHOOK_SECRET'),
            },
            requestBodyProperty: 'rawBody',
          },
        }
      },
    }),
    ConfigModule,
  ],
  controllers: [paymentsController],
  providers: [StripeService],
  exports: [StripeService],
})
export class PaymentsModule {}

And I get errors:

TypeError: Cannot read properties of undefined (reading 'header')
    at ThrottlerGuard.handleRequest (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+throttler@5.1.2_@nestjs+common@10.3.8_@nestjs+core@10.3.8_reflect-metadata@0.1.14/node_modules/@nestjs/throttler/src/throttler.guard.ts:175:9)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ThrottlerGuard.canActivate (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+throttler@5.1.2_@nestjs+common@10.3.8_@nestjs+core@10.3.8_reflect-metadata@0.1.14/node_modules/@nestjs/throttler/src/throttler.guard.ts:121:9)
    at GuardsConsumer.tryActivate (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/guards/guards-consumer.js:16:17)
    at canActivateFn (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/helpers/external-context-creator.js:155:33)
    at target (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/helpers/external-context-creator.js:73:31)
    at Object.handler (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/helpers/external-proxy.js:9:24)
    at async Promise.all (index 0)
    at StripeWebhookService.handleWebhook (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@golevelup+nestjs-stripe@0.8.0_@nestjs+common@10.3.8_@nestjs+core@10.3.8_rxjs@7.8.1_stripe@15.4.0/node_modules/@golevelup/nestjs-stripe/src/stripe.module.ts:162:9)
    at StripeWebhookController.handleWebhook (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@golevelup+nestjs-stripe@0.8.0_@nestjs+common@10.3.8_@nestjs+core@10.3.8_rxjs@7.8.1_stripe@15.4.0/node_modules/@golevelup/nestjs-stripe/src/stripe.webhook.controller.ts:33:5)
[Nest] 92586  - 06.06.2024, 23:17:24   ERROR [AllExceptionsFilter] [undefined] undefined - 500
    Internal server error occurred
    User: "unknown"
        TypeError: Cannot read properties of undefined (reading 'header')
    at ThrottlerGuard.handleRequest (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+throttler@5.1.2_@nestjs+common@10.3.8_@nestjs+core@10.3.8_reflect-metadata@0.1.14/node_modules/@nestjs/throttler/src/throttler.guard.ts:175:9)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at ThrottlerGuard.canActivate (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+throttler@5.1.2_@nestjs+common@10.3.8_@nestjs+core@10.3.8_reflect-metadata@0.1.14/node_modules/@nestjs/throttler/src/throttler.guard.ts:121:9)
    at GuardsConsumer.tryActivate (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/guards/guards-consumer.js:16:17)
    at canActivateFn (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/helpers/external-context-creator.js:155:33)
    at target (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/helpers/external-context-creator.js:73:31)
    at Object.handler (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@nestjs+core@10.3.8_@nestjs+common@10.3.8_@nestjs+microservices@10.3.8_@nestjs+platform-expre_35rvlrdz2ifbn6ucpg7pclzyxe/node_modules/@nestjs/core/helpers/external-proxy.js:9:24)
    at async Promise.all (index 0)
    at StripeWebhookService.handleWebhook (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@golevelup+nestjs-stripe@0.8.0_@nestjs+common@10.3.8_@nestjs+core@10.3.8_rxjs@7.8.1_stripe@15.4.0/node_modules/@golevelup/nestjs-stripe/src/stripe.module.ts:162:9)
    at StripeWebhookController.handleWebhook (/Users/.../Code/Projects/me/.../node_modules/.pnpm/@golevelup+nestjs-stripe@0.8.0_@nestjs+common@10.3.8_@nestjs+core@10.3.8_rxjs@7.8.1_stripe@15.4.0/node_modules/@golevelup/nestjs-stripe/src/stripe.webhook.controller.ts:33:5)
Semenchuk1997 commented 3 months ago

I have encountered the same issue. @anteqkois Did you solve it ?

underfisk commented 1 week ago

If you want to bypass any guard/custom interceptor you're responsible for evaluating the execution context. The library provides the functionality but we avoided at all cost injecting any opinionated guard, instead you have full control through the contextType token.

https://github.com/golevelup/nestjs/blob/ce44d4dfaad05333cacd916c95dbf20089c91790/packages/stripe/src/stripe.module.ts#L143

https://docs.nestjs.com/fundamentals/execution-context