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étodo | Descriçã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 / removeTag | Gerencia 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,
});