Have ideas to improve npm?Join in the discussion! »

    nest-raven
    TypeScript icon, indicating that this package has built-in type declarations

    7.2.0 • Public • Published

    Nest Logo

    Sentry Raven Module for Nest framework

    NPM Version Package License NPM Downloads Push Github Actions Coveralls

    Description

    This's a @sentry/minimal module for Nest.

    Installation

    $ npm i --save nest-raven

    Quick Start

    Include Module

    For Module to work you need to setup Sentry SDK yourself, this should be done in your main.ts file where you initialize the NestJS application.

    app.module.ts

    @Module({
      imports: [RavenModule],
    })
    export class ApplicationModule implements NestModule {}

    Using Interceptor

    app.controller.ts

      @UseInterceptors(new RavenInterceptor())
      @Get('/some/route')
      public async someRoute() {
        ...
      }

    With this setup, sentry will pick up all exceptions (even 400 types).

    Global

    If you want to set up interceptor as global, you have to follow Nest instructions here. Something like this. This only works for Controllers not for Gateways (limitation by NestJS):

    app.module.ts

    import { APP_INTERCEPTOR } from '@nestjs/core';
    
    @Module({
      imports: [RavenModule],
      providers: [
        {
          provide: APP_INTERCEPTOR,
          useValue: new RavenInterceptor(),
        },
      ],
    })
    export class ApplicationModule {}

    Filters

    Sometimes we don't want to catch all exceptions but only 500 or those that we didn't handle properly. For that we can add filters on interceptor to filter out good exceptions.

    app.controller.ts

      @UseInterceptors(new RavenInterceptor({
        filters: [
            // Filter exceptions of type HttpException. Ignore those that
            // have status code of less than 500
            { type: HttpException, filter: (exception: HttpException) => 500 > exception.getStatus() }
        ],
      }))
      @Get('/some/route')
      public async someRoute() {
        ...
      }

    Transformers

    It may be useful to add some extra data to the Sentry's context before sending the payload. Adding some request-related properties for instance. To achieve this we can add scope transformers on interceptor to injecte some data dynamically.

    app.controller.ts

      @UseInterceptors(new RavenInterceptor({
        transformers: [
            // Add an extra property to Sentry's scope
            (scope: Scope) => { scope.addExtra('important key', 'useful value') }
        ],
      }))
      @Get('/some/route')
      public async someRoute() {
        ...
      }

    Additional data

    Interceptor automatically adds req and req.user (as user) to additional data.

    Other additional data can be added for each interceptor.

    • tags
    • extra
    • fingerprint
    • level

    app.controller.ts

    import { Severity } from '@sentry/node';
    
      @UseInterceptors(new RavenInterceptor({
        tags: {
          type: 'fileUpload',
        },
        level: Severity.Warning,
      }))
      @Get('/some/route')
      public async someRoute()
        ...
      }

    Websockets

    Note: Websockets ignore Global interceptors.

    It will add ws_client and ws_data extras.

    app.gateway.ts

      @UseInterceptors(new RavenInterceptor())
      @SubscribeMessage('message_name')
      public someMessage(client, data: string): string {
        ...
      }

    GraphQL

    It will add fieldName and args extras.

    app.gateway.ts

      @Mutation()
      @UseInterceptors(new RavenInterceptor())
      async upvotePost(@Args('postId') postId: number) {
        ...
      }

    Install

    npm i nest-raven

    DownloadsWeekly Downloads

    18,741

    Version

    7.2.0

    License

    MIT

    Unpacked Size

    22.6 kB

    Total Files

    14

    Last publish

    Collaborators

    • avatar
    • avatar