CrashLens
CrashLens
/ Docs
← Voltar para o site
Documentação / SDK JavaScript / TypeScript

SDKs JavaScript / TypeScript

Capture erros em projetos Node.js, React, NestJS e Next.js usando os mesmos princípios do SDK Flutter. Os pacotes ficam em js-sdks/ e compartilham o @crashlensorg/core.


@crashlensorg/node

Captura uncaughtException, unhandledRejection e oferece middleware para Express/Connect. Envia info do host (hostname, OS, memória).

import { initNode } from '@crashlensorg/node';

const crashlens = initNode({
  apiKey: 'cl_live_xxxxxxxx',
  baseUrl: 'https://apicrashlens.laziv.com/api',
  environment: 'production',
});

// Express
import express from 'express';
app.use(crashlensMiddleware(crashlens));
app.use(crashlensErrorHandler(crashlens));

// Captura manual
try {
  doSomething();
} catch (err) {
  crashlens.captureException(err);
}

@crashlensorg/browser e @crashlensorg/react

O pacote @crashlensorg/browser captura window.onerror, unhandledrejection, instrumenta fetch/ XMLHttpRequest, console e navegação (breadcrumbs), e envia info do browser. O @crashlensorg/react adicionaErrorBoundary, withErrorBoundary e useErrorHandler.

import { CrashLensProvider, ErrorBoundary } from '@crashlensorg/react';

function App() {
  return (
    <CrashLensProvider
      apiKey="cl_live_xxxxxxxx"
      baseUrl="https://apicrashlens.laziv.com/api"
      environment="production"
    >
      <ErrorBoundary fallback={<h1>Erro inesperado</h1>}>
        <Router />
      </ErrorBoundary>
    </CrashLensProvider>
  );
}

// Em um componente:
const onSave = useErrorHandler();
try { await api.save(data); } catch (err) { onSave(err); }

@crashlensorg/nestjs

Registra um filtro global de exceções e um interceptor de requests. Injetável em qualquer controller/service.

import { Module } from '@nestjs/common';
import { CrashLensModule } from '@crashlensorg/nestjs';

@Module({
  imports: [
    CrashLensModule.forRoot({
      apiKey: 'cl_live_xxxxxxxx',
      baseUrl: 'https://apicrashlens.laziv.com/api',
      environment: 'production',
      globalFilter: true,
      globalInterceptor: true,
    }),
  ],
})
export class AppModule {}

// Em um service:
import { CrashLensService } from '@crashlensorg/nestjs';
@Injectable()
class OrderService {
  constructor(private readonly crashlens: CrashLensService) {}
  async create() {
    try { ... } catch (err) {
      this.crashlens.captureException(err, { context: 'order.create' });
    }
  }
}

@crashlensorg/nextjs

Combina os SDKs de servidor (Node) e browser (React) em uma única integração.

// instrumentation.ts (servidor)
export async function register() {
  const { initNextServer } = await import('@crashlensorg/nextjs/server');
  initNextServer({
    apiKey: process.env.NEXT_PUBLIC_CRASHLENS_API_KEY,
    environment: process.env.NODE_ENV,
  });
}

// app/layout.tsx (browser)
import { CrashLensProvider } from '@crashlensorg/nextjs/browser';
<CrashLensProvider apiKey={process.env.NEXT_PUBLIC_CRASHLENS_API_KEY}>
  {children}
</CrashLensProvider>

// app/api/.../route.ts (servidor)
import { captureException } from '@crashlensorg/nextjs/server';
try { ... } catch (err) { captureException(err); }

API comum

Todos os SDKs JS expõem a mesma API base do @crashlensorg/core:

MétodoDescrição
captureException(error, params?)Captura uma exceção (handled ou não)
captureMessage(message, params?)Envia uma mensagem de log
captureEvent(params)Evento totalmente personalizável
addBreadcrumb({ message, type, ... })Adiciona um breadcrumb ao escopo
setUser(user)Define o usuário atual
setTag / removeTagGerencia tags globais
setExtra(key, value)Define dados extras globais
flush()Envia imediatamente a fila de eventos
endSession()Encerra a sessão atual
close()Encerra o SDK (flush + remove handlers)

Fila de eventos com envio em lote, retry automático e pausa quando o plano atinge o limite (HTTP 402/429) — igual ao SDK Flutter.

crashlens.setUser({ id: 'user-123', email: 'user@example.com' });
crashlens.addBreadcrumb({ message: 'checkout iniciado', type: 'navigation', category: 'commerce' });
crashlens.setTag('release', '2.1.0');

crashlens.captureException(new Error('algo falhou'), {
  context: 'checkout.submit',
  handled: false,
});