@crashlensorg/nestjs 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +70 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.js +206 -0
- package/dist/index.mjs +177 -0
- package/package.json +39 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { DynamicModule, ExceptionFilter, ArgumentsHost, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
|
|
2
|
+
import { NodeInitOptions, CrashLens } from '@crashlensorg/node';
|
|
3
|
+
export { Breadcrumb, CaptureParams, CrashLens, CrashLensUser, CrashOptions, DeviceInfo, NodeInitOptions, Severity, initNode } from '@crashlensorg/node';
|
|
4
|
+
import { BaseExceptionFilter } from '@nestjs/core';
|
|
5
|
+
import { Observable } from 'rxjs';
|
|
6
|
+
|
|
7
|
+
interface CrashLensConfig extends NodeInitOptions {
|
|
8
|
+
/** URL base da API CrashLens. */
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
/** Versão da release do app. */
|
|
11
|
+
release?: string;
|
|
12
|
+
/** Ambiente: "production", "staging", etc. */
|
|
13
|
+
environment?: string;
|
|
14
|
+
/** Tags globais. */
|
|
15
|
+
tags?: Record<string, unknown>;
|
|
16
|
+
/** Extra global. */
|
|
17
|
+
extra?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Serviço que mantém o cliente CrashLens e expõe a API de captura.
|
|
21
|
+
* Pode ser injetado em qualquer controller/service.
|
|
22
|
+
*/
|
|
23
|
+
declare class CrashLensService {
|
|
24
|
+
private readonly client?;
|
|
25
|
+
constructor(options?: CrashLensConfig);
|
|
26
|
+
get isInitialized(): boolean;
|
|
27
|
+
captureException(error: unknown, params?: Parameters<CrashLens['captureException']>[1]): void;
|
|
28
|
+
captureMessage(message: string, params?: Parameters<CrashLens['captureMessage']>[1]): void;
|
|
29
|
+
captureEvent(params: Parameters<CrashLens['captureEvent']>[0]): void;
|
|
30
|
+
addBreadcrumb(breadcrumb: Parameters<CrashLens['addBreadcrumb']>[0]): void;
|
|
31
|
+
setUser(user: Parameters<CrashLens['setUser']>[0]): void;
|
|
32
|
+
setTag(key: string, value: unknown): void;
|
|
33
|
+
get clientInstance(): CrashLens | undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface CrashLensModuleOptions extends CrashLensConfig {
|
|
37
|
+
/** Registra o filtro global de exceções (padrão: true). */
|
|
38
|
+
globalFilter?: boolean;
|
|
39
|
+
/** Registra o interceptor global de requests (padrão: true). */
|
|
40
|
+
globalInterceptor?: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Módulo do CrashLens para NestJS.
|
|
44
|
+
*
|
|
45
|
+
* @Module({ imports: [CrashLensModule.forRoot({ apiKey: 'cl_live_xxx' }) ] })
|
|
46
|
+
*/
|
|
47
|
+
declare class CrashLensModule {
|
|
48
|
+
static forRoot(options: CrashLensModuleOptions): DynamicModule;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Captura todas as exceções não tratadas e as envia ao CrashLens,
|
|
53
|
+
* preservando o comportamento padrão do NestJS.
|
|
54
|
+
*/
|
|
55
|
+
declare class CrashLensFilter extends BaseExceptionFilter implements ExceptionFilter {
|
|
56
|
+
private readonly crashLens;
|
|
57
|
+
constructor(crashLens: CrashLensService);
|
|
58
|
+
catch(exception: unknown, host: ArgumentsHost): void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Interceptor que adiciona breadcrumbs de request e captura erros dos handlers.
|
|
63
|
+
*/
|
|
64
|
+
declare class CrashLensInterceptor implements NestInterceptor {
|
|
65
|
+
private readonly crashLens;
|
|
66
|
+
constructor(crashLens: CrashLensService);
|
|
67
|
+
intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { type CrashLensConfig, CrashLensFilter, CrashLensInterceptor, CrashLensModule, type CrashLensModuleOptions, CrashLensService };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { DynamicModule, ExceptionFilter, ArgumentsHost, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
|
|
2
|
+
import { NodeInitOptions, CrashLens } from '@crashlensorg/node';
|
|
3
|
+
export { Breadcrumb, CaptureParams, CrashLens, CrashLensUser, CrashOptions, DeviceInfo, NodeInitOptions, Severity, initNode } from '@crashlensorg/node';
|
|
4
|
+
import { BaseExceptionFilter } from '@nestjs/core';
|
|
5
|
+
import { Observable } from 'rxjs';
|
|
6
|
+
|
|
7
|
+
interface CrashLensConfig extends NodeInitOptions {
|
|
8
|
+
/** URL base da API CrashLens. */
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
/** Versão da release do app. */
|
|
11
|
+
release?: string;
|
|
12
|
+
/** Ambiente: "production", "staging", etc. */
|
|
13
|
+
environment?: string;
|
|
14
|
+
/** Tags globais. */
|
|
15
|
+
tags?: Record<string, unknown>;
|
|
16
|
+
/** Extra global. */
|
|
17
|
+
extra?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Serviço que mantém o cliente CrashLens e expõe a API de captura.
|
|
21
|
+
* Pode ser injetado em qualquer controller/service.
|
|
22
|
+
*/
|
|
23
|
+
declare class CrashLensService {
|
|
24
|
+
private readonly client?;
|
|
25
|
+
constructor(options?: CrashLensConfig);
|
|
26
|
+
get isInitialized(): boolean;
|
|
27
|
+
captureException(error: unknown, params?: Parameters<CrashLens['captureException']>[1]): void;
|
|
28
|
+
captureMessage(message: string, params?: Parameters<CrashLens['captureMessage']>[1]): void;
|
|
29
|
+
captureEvent(params: Parameters<CrashLens['captureEvent']>[0]): void;
|
|
30
|
+
addBreadcrumb(breadcrumb: Parameters<CrashLens['addBreadcrumb']>[0]): void;
|
|
31
|
+
setUser(user: Parameters<CrashLens['setUser']>[0]): void;
|
|
32
|
+
setTag(key: string, value: unknown): void;
|
|
33
|
+
get clientInstance(): CrashLens | undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface CrashLensModuleOptions extends CrashLensConfig {
|
|
37
|
+
/** Registra o filtro global de exceções (padrão: true). */
|
|
38
|
+
globalFilter?: boolean;
|
|
39
|
+
/** Registra o interceptor global de requests (padrão: true). */
|
|
40
|
+
globalInterceptor?: boolean;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Módulo do CrashLens para NestJS.
|
|
44
|
+
*
|
|
45
|
+
* @Module({ imports: [CrashLensModule.forRoot({ apiKey: 'cl_live_xxx' }) ] })
|
|
46
|
+
*/
|
|
47
|
+
declare class CrashLensModule {
|
|
48
|
+
static forRoot(options: CrashLensModuleOptions): DynamicModule;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Captura todas as exceções não tratadas e as envia ao CrashLens,
|
|
53
|
+
* preservando o comportamento padrão do NestJS.
|
|
54
|
+
*/
|
|
55
|
+
declare class CrashLensFilter extends BaseExceptionFilter implements ExceptionFilter {
|
|
56
|
+
private readonly crashLens;
|
|
57
|
+
constructor(crashLens: CrashLensService);
|
|
58
|
+
catch(exception: unknown, host: ArgumentsHost): void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Interceptor que adiciona breadcrumbs de request e captura erros dos handlers.
|
|
63
|
+
*/
|
|
64
|
+
declare class CrashLensInterceptor implements NestInterceptor {
|
|
65
|
+
private readonly crashLens;
|
|
66
|
+
constructor(crashLens: CrashLensService);
|
|
67
|
+
intercept(context: ExecutionContext, next: CallHandler): Observable<unknown>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { type CrashLensConfig, CrashLensFilter, CrashLensInterceptor, CrashLensModule, type CrashLensModuleOptions, CrashLensService };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
20
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
21
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
22
|
+
if (decorator = decorators[i])
|
|
23
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
24
|
+
if (kind && result) __defProp(target, key, result);
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
|
|
28
|
+
|
|
29
|
+
// src/index.ts
|
|
30
|
+
var index_exports = {};
|
|
31
|
+
__export(index_exports, {
|
|
32
|
+
CrashLens: () => import_node3.CrashLens,
|
|
33
|
+
CrashLensFilter: () => CrashLensFilter,
|
|
34
|
+
CrashLensInterceptor: () => CrashLensInterceptor,
|
|
35
|
+
CrashLensModule: () => CrashLensModule,
|
|
36
|
+
CrashLensService: () => CrashLensService,
|
|
37
|
+
initNode: () => import_node2.initNode
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(index_exports);
|
|
40
|
+
|
|
41
|
+
// src/crash-lens.module.ts
|
|
42
|
+
var import_common4 = require("@nestjs/common");
|
|
43
|
+
var import_core2 = require("@nestjs/core");
|
|
44
|
+
|
|
45
|
+
// src/crash-lens.service.ts
|
|
46
|
+
var import_common = require("@nestjs/common");
|
|
47
|
+
var import_node = require("@crashlensorg/node");
|
|
48
|
+
var CrashLensService = class {
|
|
49
|
+
constructor(options) {
|
|
50
|
+
if (!options) return;
|
|
51
|
+
this.client = (0, import_node.initNode)({
|
|
52
|
+
...options,
|
|
53
|
+
enableGlobalHandlers: options.enableGlobalHandlers ?? false,
|
|
54
|
+
collectRuntimeInfo: options.collectRuntimeInfo ?? true,
|
|
55
|
+
enableSessionTracking: options.enableSessionTracking ?? false
|
|
56
|
+
});
|
|
57
|
+
if (options.tags) {
|
|
58
|
+
for (const [k, v] of Object.entries(options.tags)) {
|
|
59
|
+
this.client.setTag(k, v);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (options.extra) {
|
|
63
|
+
for (const [k, v] of Object.entries(options.extra)) {
|
|
64
|
+
this.client.setExtra(k, v);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
get isInitialized() {
|
|
69
|
+
return this.client?.isInitialized ?? false;
|
|
70
|
+
}
|
|
71
|
+
captureException(error, params) {
|
|
72
|
+
this.client?.captureException(error, params);
|
|
73
|
+
}
|
|
74
|
+
captureMessage(message, params) {
|
|
75
|
+
this.client?.captureMessage(message, params);
|
|
76
|
+
}
|
|
77
|
+
captureEvent(params) {
|
|
78
|
+
this.client?.captureEvent(params);
|
|
79
|
+
}
|
|
80
|
+
addBreadcrumb(breadcrumb) {
|
|
81
|
+
this.client?.addBreadcrumb(breadcrumb);
|
|
82
|
+
}
|
|
83
|
+
setUser(user) {
|
|
84
|
+
this.client?.setUser(user);
|
|
85
|
+
}
|
|
86
|
+
setTag(key, value) {
|
|
87
|
+
this.client?.setTag(key, value);
|
|
88
|
+
}
|
|
89
|
+
get clientInstance() {
|
|
90
|
+
return this.client;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
CrashLensService = __decorateClass([
|
|
94
|
+
(0, import_common.Injectable)(),
|
|
95
|
+
__decorateParam(0, (0, import_common.Optional)()),
|
|
96
|
+
__decorateParam(0, (0, import_common.Inject)(CRASH_LENS_OPTIONS))
|
|
97
|
+
], CrashLensService);
|
|
98
|
+
|
|
99
|
+
// src/crash-lens.filter.ts
|
|
100
|
+
var import_common2 = require("@nestjs/common");
|
|
101
|
+
var import_core = require("@nestjs/core");
|
|
102
|
+
var CrashLensFilter = class extends import_core.BaseExceptionFilter {
|
|
103
|
+
constructor(crashLens) {
|
|
104
|
+
super();
|
|
105
|
+
this.crashLens = crashLens;
|
|
106
|
+
}
|
|
107
|
+
catch(exception, host) {
|
|
108
|
+
const status = exception instanceof import_common2.HttpException ? exception.getStatus() : import_common2.HttpStatus.INTERNAL_SERVER_ERROR;
|
|
109
|
+
const request = host.switchToHttp().getRequest();
|
|
110
|
+
const message = exception instanceof Error ? exception.message : String(exception);
|
|
111
|
+
this.crashLens.captureException(exception, {
|
|
112
|
+
context: "nestjs-exception-filter",
|
|
113
|
+
handled: false,
|
|
114
|
+
tags: {
|
|
115
|
+
httpStatus: String(status),
|
|
116
|
+
httpMethod: request?.method
|
|
117
|
+
},
|
|
118
|
+
extra: {
|
|
119
|
+
url: request?.url,
|
|
120
|
+
method: request?.method,
|
|
121
|
+
statusCode: status,
|
|
122
|
+
error: message
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
super.catch(exception, host);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
CrashLensFilter = __decorateClass([
|
|
129
|
+
(0, import_common2.Catch)()
|
|
130
|
+
], CrashLensFilter);
|
|
131
|
+
|
|
132
|
+
// src/crash-lens.interceptor.ts
|
|
133
|
+
var import_common3 = require("@nestjs/common");
|
|
134
|
+
var import_rxjs = require("rxjs");
|
|
135
|
+
var import_operators = require("rxjs/operators");
|
|
136
|
+
var CrashLensInterceptor = class {
|
|
137
|
+
constructor(crashLens) {
|
|
138
|
+
this.crashLens = crashLens;
|
|
139
|
+
}
|
|
140
|
+
intercept(context, next) {
|
|
141
|
+
const request = context.switchToHttp().getRequest();
|
|
142
|
+
if (request) {
|
|
143
|
+
this.crashLens.addBreadcrumb({
|
|
144
|
+
message: `${request.method ?? "GET"} ${request.url ?? "/"}`,
|
|
145
|
+
type: "request",
|
|
146
|
+
category: "http",
|
|
147
|
+
data: { method: request.method, url: request.url }
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return next.handle().pipe(
|
|
151
|
+
(0, import_operators.tap)({
|
|
152
|
+
error: (error) => {
|
|
153
|
+
this.crashLens.captureException(error, {
|
|
154
|
+
handled: false,
|
|
155
|
+
context: "context.interceptor",
|
|
156
|
+
tags: { httpMethod: request?.method },
|
|
157
|
+
extra: { url: request?.url }
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}),
|
|
161
|
+
(0, import_operators.catchError)((error) => (0, import_rxjs.throwError)(() => error))
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
CrashLensInterceptor = __decorateClass([
|
|
166
|
+
(0, import_common3.Injectable)()
|
|
167
|
+
], CrashLensInterceptor);
|
|
168
|
+
|
|
169
|
+
// src/crash-lens.module.ts
|
|
170
|
+
var CRASH_LENS_OPTIONS = /* @__PURE__ */ Symbol("CRASH_LENS_OPTIONS");
|
|
171
|
+
var CrashLensModule = class {
|
|
172
|
+
static forRoot(options) {
|
|
173
|
+
const providers = [
|
|
174
|
+
{ provide: CRASH_LENS_OPTIONS, useValue: options },
|
|
175
|
+
CrashLensService
|
|
176
|
+
];
|
|
177
|
+
if (options.globalFilter !== false) {
|
|
178
|
+
providers.push({ provide: import_core2.APP_FILTER, useClass: CrashLensFilter });
|
|
179
|
+
}
|
|
180
|
+
if (options.globalInterceptor !== false) {
|
|
181
|
+
providers.push({ provide: import_core2.APP_INTERCEPTOR, useClass: CrashLensInterceptor });
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
module: CrashLensModule,
|
|
185
|
+
global: true,
|
|
186
|
+
providers,
|
|
187
|
+
exports: [CrashLensService]
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
CrashLensModule = __decorateClass([
|
|
192
|
+
(0, import_common4.Global)()
|
|
193
|
+
], CrashLensModule);
|
|
194
|
+
|
|
195
|
+
// src/index.ts
|
|
196
|
+
var import_node2 = require("@crashlensorg/node");
|
|
197
|
+
var import_node3 = require("@crashlensorg/node");
|
|
198
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
199
|
+
0 && (module.exports = {
|
|
200
|
+
CrashLens,
|
|
201
|
+
CrashLensFilter,
|
|
202
|
+
CrashLensInterceptor,
|
|
203
|
+
CrashLensModule,
|
|
204
|
+
CrashLensService,
|
|
205
|
+
initNode
|
|
206
|
+
});
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
6
|
+
if (decorator = decorators[i])
|
|
7
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
+
if (kind && result) __defProp(target, key, result);
|
|
9
|
+
return result;
|
|
10
|
+
};
|
|
11
|
+
var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
|
|
12
|
+
|
|
13
|
+
// src/crash-lens.module.ts
|
|
14
|
+
import { Global } from "@nestjs/common";
|
|
15
|
+
import { APP_FILTER, APP_INTERCEPTOR } from "@nestjs/core";
|
|
16
|
+
|
|
17
|
+
// src/crash-lens.service.ts
|
|
18
|
+
import { Inject, Injectable, Optional } from "@nestjs/common";
|
|
19
|
+
import { initNode } from "@crashlensorg/node";
|
|
20
|
+
var CrashLensService = class {
|
|
21
|
+
constructor(options) {
|
|
22
|
+
if (!options) return;
|
|
23
|
+
this.client = initNode({
|
|
24
|
+
...options,
|
|
25
|
+
enableGlobalHandlers: options.enableGlobalHandlers ?? false,
|
|
26
|
+
collectRuntimeInfo: options.collectRuntimeInfo ?? true,
|
|
27
|
+
enableSessionTracking: options.enableSessionTracking ?? false
|
|
28
|
+
});
|
|
29
|
+
if (options.tags) {
|
|
30
|
+
for (const [k, v] of Object.entries(options.tags)) {
|
|
31
|
+
this.client.setTag(k, v);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (options.extra) {
|
|
35
|
+
for (const [k, v] of Object.entries(options.extra)) {
|
|
36
|
+
this.client.setExtra(k, v);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
get isInitialized() {
|
|
41
|
+
return this.client?.isInitialized ?? false;
|
|
42
|
+
}
|
|
43
|
+
captureException(error, params) {
|
|
44
|
+
this.client?.captureException(error, params);
|
|
45
|
+
}
|
|
46
|
+
captureMessage(message, params) {
|
|
47
|
+
this.client?.captureMessage(message, params);
|
|
48
|
+
}
|
|
49
|
+
captureEvent(params) {
|
|
50
|
+
this.client?.captureEvent(params);
|
|
51
|
+
}
|
|
52
|
+
addBreadcrumb(breadcrumb) {
|
|
53
|
+
this.client?.addBreadcrumb(breadcrumb);
|
|
54
|
+
}
|
|
55
|
+
setUser(user) {
|
|
56
|
+
this.client?.setUser(user);
|
|
57
|
+
}
|
|
58
|
+
setTag(key, value) {
|
|
59
|
+
this.client?.setTag(key, value);
|
|
60
|
+
}
|
|
61
|
+
get clientInstance() {
|
|
62
|
+
return this.client;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
CrashLensService = __decorateClass([
|
|
66
|
+
Injectable(),
|
|
67
|
+
__decorateParam(0, Optional()),
|
|
68
|
+
__decorateParam(0, Inject(CRASH_LENS_OPTIONS))
|
|
69
|
+
], CrashLensService);
|
|
70
|
+
|
|
71
|
+
// src/crash-lens.filter.ts
|
|
72
|
+
import { Catch, HttpException, HttpStatus } from "@nestjs/common";
|
|
73
|
+
import { BaseExceptionFilter } from "@nestjs/core";
|
|
74
|
+
var CrashLensFilter = class extends BaseExceptionFilter {
|
|
75
|
+
constructor(crashLens) {
|
|
76
|
+
super();
|
|
77
|
+
this.crashLens = crashLens;
|
|
78
|
+
}
|
|
79
|
+
catch(exception, host) {
|
|
80
|
+
const status = exception instanceof HttpException ? exception.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR;
|
|
81
|
+
const request = host.switchToHttp().getRequest();
|
|
82
|
+
const message = exception instanceof Error ? exception.message : String(exception);
|
|
83
|
+
this.crashLens.captureException(exception, {
|
|
84
|
+
context: "nestjs-exception-filter",
|
|
85
|
+
handled: false,
|
|
86
|
+
tags: {
|
|
87
|
+
httpStatus: String(status),
|
|
88
|
+
httpMethod: request?.method
|
|
89
|
+
},
|
|
90
|
+
extra: {
|
|
91
|
+
url: request?.url,
|
|
92
|
+
method: request?.method,
|
|
93
|
+
statusCode: status,
|
|
94
|
+
error: message
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
super.catch(exception, host);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
CrashLensFilter = __decorateClass([
|
|
101
|
+
Catch()
|
|
102
|
+
], CrashLensFilter);
|
|
103
|
+
|
|
104
|
+
// src/crash-lens.interceptor.ts
|
|
105
|
+
import { Injectable as Injectable2 } from "@nestjs/common";
|
|
106
|
+
import { throwError } from "rxjs";
|
|
107
|
+
import { catchError, tap } from "rxjs/operators";
|
|
108
|
+
var CrashLensInterceptor = class {
|
|
109
|
+
constructor(crashLens) {
|
|
110
|
+
this.crashLens = crashLens;
|
|
111
|
+
}
|
|
112
|
+
intercept(context, next) {
|
|
113
|
+
const request = context.switchToHttp().getRequest();
|
|
114
|
+
if (request) {
|
|
115
|
+
this.crashLens.addBreadcrumb({
|
|
116
|
+
message: `${request.method ?? "GET"} ${request.url ?? "/"}`,
|
|
117
|
+
type: "request",
|
|
118
|
+
category: "http",
|
|
119
|
+
data: { method: request.method, url: request.url }
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return next.handle().pipe(
|
|
123
|
+
tap({
|
|
124
|
+
error: (error) => {
|
|
125
|
+
this.crashLens.captureException(error, {
|
|
126
|
+
handled: false,
|
|
127
|
+
context: "context.interceptor",
|
|
128
|
+
tags: { httpMethod: request?.method },
|
|
129
|
+
extra: { url: request?.url }
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}),
|
|
133
|
+
catchError((error) => throwError(() => error))
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
CrashLensInterceptor = __decorateClass([
|
|
138
|
+
Injectable2()
|
|
139
|
+
], CrashLensInterceptor);
|
|
140
|
+
|
|
141
|
+
// src/crash-lens.module.ts
|
|
142
|
+
var CRASH_LENS_OPTIONS = /* @__PURE__ */ Symbol("CRASH_LENS_OPTIONS");
|
|
143
|
+
var CrashLensModule = class {
|
|
144
|
+
static forRoot(options) {
|
|
145
|
+
const providers = [
|
|
146
|
+
{ provide: CRASH_LENS_OPTIONS, useValue: options },
|
|
147
|
+
CrashLensService
|
|
148
|
+
];
|
|
149
|
+
if (options.globalFilter !== false) {
|
|
150
|
+
providers.push({ provide: APP_FILTER, useClass: CrashLensFilter });
|
|
151
|
+
}
|
|
152
|
+
if (options.globalInterceptor !== false) {
|
|
153
|
+
providers.push({ provide: APP_INTERCEPTOR, useClass: CrashLensInterceptor });
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
module: CrashLensModule,
|
|
157
|
+
global: true,
|
|
158
|
+
providers,
|
|
159
|
+
exports: [CrashLensService]
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
CrashLensModule = __decorateClass([
|
|
164
|
+
Global()
|
|
165
|
+
], CrashLensModule);
|
|
166
|
+
|
|
167
|
+
// src/index.ts
|
|
168
|
+
import { initNode as initNode2 } from "@crashlensorg/node";
|
|
169
|
+
import { CrashLens as CrashLens2 } from "@crashlensorg/node";
|
|
170
|
+
export {
|
|
171
|
+
CrashLens2 as CrashLens,
|
|
172
|
+
CrashLensFilter,
|
|
173
|
+
CrashLensInterceptor,
|
|
174
|
+
CrashLensModule,
|
|
175
|
+
CrashLensService,
|
|
176
|
+
initNode2 as initNode
|
|
177
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@crashlensorg/nestjs",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CrashLens integração com NestJS — módulo, filtro global de exceções e interceptor HTTP",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.mjs",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.mjs",
|
|
13
|
+
"require": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": ["dist"],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsup src/index.ts --format cjs,esm --dts --clean --external @nestjs/common --external @nestjs/core --external @nestjs/platform-express --external @nestjs/websockets --external @nestjs/microservices --external rxjs --external reflect-metadata",
|
|
22
|
+
"typecheck": "tsc --noEmit"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@crashlensorg/node": "0.1.0"
|
|
26
|
+
},
|
|
27
|
+
"peerDependencies": {
|
|
28
|
+
"@nestjs/common": "^9.0.0 || ^10.0.0 || ^11.0.0",
|
|
29
|
+
"reflect-metadata": "^0.2.0",
|
|
30
|
+
"rxjs": "^7.0.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@nestjs/common": "^10.4.0",
|
|
34
|
+
"@nestjs/core": "^10.4.0",
|
|
35
|
+
"reflect-metadata": "^0.2.2",
|
|
36
|
+
"rxjs": "^7.8.0"
|
|
37
|
+
},
|
|
38
|
+
"keywords": ["crashlens", "nestjs", "error-monitoring", "crash-reporting", "sentry-alternative"]
|
|
39
|
+
}
|