Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

nest-raven

Package Overview
Dependencies
Maintainers
2
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nest-raven

Sentry Raven Module for Nest Framework

  • 10.1.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
30K
increased by1.23%
Maintainers
2
Weekly downloads
 
Created
Source

Nest Logo

Sentry Module for Nest framework

NPM Version Package License NPM Downloads Push Github Actions Coveralls

Description

This is a sentry module for Nest.

This package is no longer based on deprecated raven module, but rather on new stable @sentry/node module.

Should i use this for large projects?

This is not a solution for all cases and large applications, just a quick starter that covers the common rest/graphql capturing (the basics). You might want deeper integration with Sentry, which means you can still use this to cover the rest/graphql error capture, but you will have to use the rest of Sentry SDK to cover other cases.

For really large projects, you might have to take this library as an example of how to integrate sentry with NestJS, and write your custom integration instead.

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, context: ExecutionContext) => {
          const req = context.switchToHttp().getRequest<Request>();
          scope.addExtra('important query', req.query.important_query)
          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) {
    ...
  }

Keywords

FAQs

Package last updated on 23 May 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc