fg-tracker-sdk 0.4.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/CHANGELOG.md +17 -0
- package/README.md +375 -0
- package/dist/cli/release.d.ts +3 -0
- package/dist/cli/release.d.ts.map +1 -0
- package/dist/cli/release.js +134 -0
- package/dist/cli/release.js.map +1 -0
- package/dist/cli/sourcemaps.d.ts +3 -0
- package/dist/cli/sourcemaps.d.ts.map +1 -0
- package/dist/cli/sourcemaps.js +98 -0
- package/dist/cli/sourcemaps.js.map +1 -0
- package/dist/constants.d.ts +28 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +35 -0
- package/dist/constants.js.map +1 -0
- package/dist/context.d.ts +22 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +42 -0
- package/dist/context.js.map +1 -0
- package/dist/database.d.ts +29 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +157 -0
- package/dist/database.js.map +1 -0
- package/dist/express.d.ts +17 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +125 -0
- package/dist/express.js.map +1 -0
- package/dist/fetch.d.ts +9 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/fetch.js +78 -0
- package/dist/fetch.js.map +1 -0
- package/dist/global-errors.d.ts +11 -0
- package/dist/global-errors.d.ts.map +1 -0
- package/dist/global-errors.js +35 -0
- package/dist/global-errors.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +154 -0
- package/dist/index.js.map +1 -0
- package/dist/logs/nest-logger.d.ts +40 -0
- package/dist/logs/nest-logger.d.ts.map +1 -0
- package/dist/logs/nest-logger.js +99 -0
- package/dist/logs/nest-logger.js.map +1 -0
- package/dist/logs/pino.d.ts +24 -0
- package/dist/logs/pino.d.ts.map +1 -0
- package/dist/logs/pino.js +62 -0
- package/dist/logs/pino.js.map +1 -0
- package/dist/logs/shipper.d.ts +18 -0
- package/dist/logs/shipper.d.ts.map +1 -0
- package/dist/logs/shipper.js +217 -0
- package/dist/logs/shipper.js.map +1 -0
- package/dist/logs/types.d.ts +84 -0
- package/dist/logs/types.d.ts.map +1 -0
- package/dist/logs/types.js +47 -0
- package/dist/logs/types.js.map +1 -0
- package/dist/logs/winston.d.ts +31 -0
- package/dist/logs/winston.d.ts.map +1 -0
- package/dist/logs/winston.js +57 -0
- package/dist/logs/winston.js.map +1 -0
- package/dist/monitors.d.ts +8 -0
- package/dist/monitors.d.ts.map +1 -0
- package/dist/monitors.js +69 -0
- package/dist/monitors.js.map +1 -0
- package/dist/next.d.ts +9 -0
- package/dist/next.d.ts.map +1 -0
- package/dist/next.js +55 -0
- package/dist/next.js.map +1 -0
- package/dist/normalize.d.ts +12 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +113 -0
- package/dist/normalize.js.map +1 -0
- package/dist/pg.d.ts +9 -0
- package/dist/pg.d.ts.map +1 -0
- package/dist/pg.js +83 -0
- package/dist/pg.js.map +1 -0
- package/dist/releases.d.ts +5 -0
- package/dist/releases.d.ts.map +1 -0
- package/dist/releases.js +30 -0
- package/dist/releases.js.map +1 -0
- package/dist/scrub.d.ts +11 -0
- package/dist/scrub.d.ts.map +1 -0
- package/dist/scrub.js +34 -0
- package/dist/scrub.js.map +1 -0
- package/dist/tracker.d.ts +99 -0
- package/dist/tracker.d.ts.map +1 -0
- package/dist/tracker.js +400 -0
- package/dist/tracker.js.map +1 -0
- package/dist/types.d.ts +264 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TrackerCore } from './tracker.js';
|
|
2
|
+
/**
|
|
3
|
+
* Captura global de erros do processo (opcional, `captureGlobalErrors: true`):
|
|
4
|
+
* - `uncaughtExceptionMonitor` observa sem alterar o comportamento padrão (o processo
|
|
5
|
+
* continua encerrando);
|
|
6
|
+
* - `unhandledRejection` é registrado e, se este for o único listener, o erro é
|
|
7
|
+
* relançado no próximo tick para preservar o comportamento padrão do Node.
|
|
8
|
+
* Cada erro vira um span `custom` (`process.uncaughtException` / `process.unhandledRejection`).
|
|
9
|
+
*/
|
|
10
|
+
export declare function installGlobalErrorCapture(core: TrackerCore): () => void;
|
|
11
|
+
//# sourceMappingURL=global-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-errors.d.ts","sourceRoot":"","sources":["../src/global-errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,IAAI,CAuBvE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Captura global de erros do processo (opcional, `captureGlobalErrors: true`):
|
|
3
|
+
* - `uncaughtExceptionMonitor` observa sem alterar o comportamento padrão (o processo
|
|
4
|
+
* continua encerrando);
|
|
5
|
+
* - `unhandledRejection` é registrado e, se este for o único listener, o erro é
|
|
6
|
+
* relançado no próximo tick para preservar o comportamento padrão do Node.
|
|
7
|
+
* Cada erro vira um span `custom` (`process.uncaughtException` / `process.unhandledRejection`).
|
|
8
|
+
*/
|
|
9
|
+
export function installGlobalErrorCapture(core) {
|
|
10
|
+
const record = (name, err) => {
|
|
11
|
+
if (!core.enabled)
|
|
12
|
+
return;
|
|
13
|
+
const span = core.rootSpan() ?? core.startSpan('custom', name, { fatal: name === 'process.uncaughtException' }, null);
|
|
14
|
+
span.setError(err);
|
|
15
|
+
if (!core.rootSpan())
|
|
16
|
+
span.end();
|
|
17
|
+
void core.flush();
|
|
18
|
+
};
|
|
19
|
+
const onException = (err) => record('process.uncaughtException', err);
|
|
20
|
+
const onRejection = (reason) => {
|
|
21
|
+
record('process.unhandledRejection', reason);
|
|
22
|
+
if (process.listenerCount('unhandledRejection') === 1) {
|
|
23
|
+
process.nextTick(() => {
|
|
24
|
+
throw reason;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
process.on('uncaughtExceptionMonitor', onException);
|
|
29
|
+
process.on('unhandledRejection', onRejection);
|
|
30
|
+
return () => {
|
|
31
|
+
process.off('uncaughtExceptionMonitor', onException);
|
|
32
|
+
process.off('unhandledRejection', onRejection);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=global-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-errors.js","sourceRoot":"","sources":["../src/global-errors.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAiB;IACzD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,GAAY,EAAE,EAAE;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,2BAA2B,EAAE,EAAE,IAAI,CAAC,CAAC;QACtH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,MAAM,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAC/E,MAAM,WAAW,GAAG,CAAC,MAAe,EAAE,EAAE;QACtC,MAAM,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACpB,MAAM,MAAM,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAC9C,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type { DatabaseInstrumentationOptions, DatabaseOperation, PostgresSqlLike } from "./database.js";
|
|
2
|
+
import type { Tracker, TrackerOptions } from './types.js';
|
|
3
|
+
export type { ActiveSpan, CheckInHandle, CheckInOptions, ExpressErrorMiddleware, ExpressLikeRequest, ExpressLikeResponse, ExpressMiddleware, ExpressOptions, NextRouteHandler, PgPoolLike, PropagationTargets, RegisterReleaseInput, ReleaseCommitInput, SamplingContext, Span, SpanError, SpanKind, Tracker, TrackerOptions, UserRef, } from './types.js';
|
|
4
|
+
export { normalizePath, normalizeSql } from './normalize.js';
|
|
5
|
+
export { detectEnvironment, detectRelease, shouldPropagate } from './tracker.js';
|
|
6
|
+
export { formatTraceparent, parseTraceparent, TRACEPARENT_HEADER } from './context.js';
|
|
7
|
+
export { DEFAULT_SCRUB_FIELDS, scrubAttributes } from './scrub.js';
|
|
8
|
+
export { API_KEY_HEADER, DEFAULT_ENDPOINT, readEnv } from './constants.js';
|
|
9
|
+
/**
|
|
10
|
+
* Cria um tracker do FG Tracker.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* const tracker = createTracker({ apiKey: process.env.FG_TRACKER_KEY!, endpoint: 'http://localhost:4050', serviceName: 'minha-app' });
|
|
14
|
+
* app.use(tracker.express());
|
|
15
|
+
* tracker.instrumentPg(pool);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function createTracker(options: TrackerOptions): Tracker;
|
|
19
|
+
export { currentSpanContext } from './context.js';
|
|
20
|
+
export type { SpanContext } from './context.js';
|
|
21
|
+
export { createLogShipper, traceMixin } from './logs/shipper.js';
|
|
22
|
+
export { pinoTransport, fromPino } from './logs/pino.js';
|
|
23
|
+
export type { PinoTransportOptions } from './logs/pino.js';
|
|
24
|
+
export { nestLogger } from './logs/nest-logger.js';
|
|
25
|
+
export type { FgTrackerNestLogger, NestLoggerOptions, NestLoggerService, NestLogLevel, StreadTrackNestLogger } from './logs/nest-logger.js';
|
|
26
|
+
export { LOG_LEVEL_NUMBER, toLogLevel } from './logs/types.js';
|
|
27
|
+
export type { LogEntry, LogInput, LogLevel, LogShipper, LogShipperOptions, SpanContextSource } from './logs/types.js';
|
|
28
|
+
export type { WinstonTransportOptions } from './logs/winston.js';
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AASxG,OAAO,KAAK,EAAsE,OAAO,EAAE,cAAc,EAAW,MAAM,YAAY,CAAC;AAEvI,YAAY,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,OAAO,EACP,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE3E;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAiG9D;AAyBD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtH,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { instrumentPostgresClient, instrumentDatabaseClient, startDatabaseSpan, databaseError } from "./database.js";
|
|
2
|
+
import { createExpressErrorHandler, createExpressMiddleware } from './express.js';
|
|
3
|
+
import { createInstrumentedFetch } from './fetch.js';
|
|
4
|
+
import { installGlobalErrorCapture } from './global-errors.js';
|
|
5
|
+
import { createMonitor, runCheckIn } from './monitors.js';
|
|
6
|
+
import { wrapNextRouteHandler } from './next.js';
|
|
7
|
+
import { instrumentPgPool } from './pg.js';
|
|
8
|
+
import { registerRelease } from './releases.js';
|
|
9
|
+
import { TrackerCore } from './tracker.js';
|
|
10
|
+
export { normalizePath, normalizeSql } from './normalize.js';
|
|
11
|
+
export { detectEnvironment, detectRelease, shouldPropagate } from './tracker.js';
|
|
12
|
+
export { formatTraceparent, parseTraceparent, TRACEPARENT_HEADER } from './context.js';
|
|
13
|
+
export { DEFAULT_SCRUB_FIELDS, scrubAttributes } from './scrub.js';
|
|
14
|
+
export { API_KEY_HEADER, DEFAULT_ENDPOINT, readEnv } from './constants.js';
|
|
15
|
+
/**
|
|
16
|
+
* Cria um tracker do FG Tracker.
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* const tracker = createTracker({ apiKey: process.env.FG_TRACKER_KEY!, endpoint: 'http://localhost:4050', serviceName: 'minha-app' });
|
|
20
|
+
* app.use(tracker.express());
|
|
21
|
+
* tracker.instrumentPg(pool);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function createTracker(options) {
|
|
25
|
+
const core = new TrackerCore(options);
|
|
26
|
+
let originalFetch = null;
|
|
27
|
+
const instrumentGlobalFetch = () => {
|
|
28
|
+
if (originalFetch)
|
|
29
|
+
return originalFetch;
|
|
30
|
+
originalFetch = globalThis.fetch;
|
|
31
|
+
globalThis.fetch = createInstrumentedFetch(core, originalFetch);
|
|
32
|
+
return originalFetch;
|
|
33
|
+
};
|
|
34
|
+
if (options.instrumentGlobalFetch && core.enabled)
|
|
35
|
+
instrumentGlobalFetch();
|
|
36
|
+
if (options.captureGlobalErrors && core.enabled)
|
|
37
|
+
installGlobalErrorCapture(core);
|
|
38
|
+
const tracker = {
|
|
39
|
+
express: (expressOptions) => createExpressMiddleware(core, expressOptions),
|
|
40
|
+
expressErrorHandler: () => createExpressErrorHandler(core),
|
|
41
|
+
instrumentPostgres: (client) => instrumentPostgresClient(core, client),
|
|
42
|
+
instrumentDatabase: (client, options) => instrumentDatabaseClient(core, client, options),
|
|
43
|
+
async traceDatabase(operation, fn) {
|
|
44
|
+
const span = startDatabaseSpan(core, operation);
|
|
45
|
+
try {
|
|
46
|
+
return await fn();
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
databaseError(span, error);
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
span?.end();
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
traceDatabaseSync(operation, fn) {
|
|
57
|
+
const span = startDatabaseSpan(core, operation);
|
|
58
|
+
try {
|
|
59
|
+
return fn();
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
databaseError(span, error);
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
span?.end();
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
instrumentPg: (pool) => instrumentPgPool(core, pool),
|
|
70
|
+
async span(kind, name, fn, attributes = {}) {
|
|
71
|
+
if (!core.enabled)
|
|
72
|
+
return fn(noopSpan(kind, name, attributes));
|
|
73
|
+
const span = core.startSpan(kind, name, attributes);
|
|
74
|
+
try {
|
|
75
|
+
const result = await core.runInSpan(span, () => fn(span));
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
if (!span.error)
|
|
80
|
+
span.setError(err);
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
span.end();
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
wrapNextRoute: (handler) => wrapNextRouteHandler(core, handler),
|
|
88
|
+
wrapFetch: (fetchImpl) => createInstrumentedFetch(core, fetchImpl),
|
|
89
|
+
instrumentGlobalFetch,
|
|
90
|
+
currentSpan: () => core.currentSpan(),
|
|
91
|
+
rootSpan: () => core.rootSpan(),
|
|
92
|
+
currentTraceId: () => core.currentContext()?.traceId,
|
|
93
|
+
traceHeaders: () => core.traceHeaders(),
|
|
94
|
+
setUser(user) {
|
|
95
|
+
(core.rootSpan() ?? core.currentSpan())?.setUser(user);
|
|
96
|
+
},
|
|
97
|
+
captureException(err, attributes = {}) {
|
|
98
|
+
if (!core.enabled)
|
|
99
|
+
return;
|
|
100
|
+
const root = core.rootSpan() ?? core.currentSpan();
|
|
101
|
+
if (root) {
|
|
102
|
+
if (!root.error)
|
|
103
|
+
root.setError(err);
|
|
104
|
+
for (const [key, value] of Object.entries(attributes))
|
|
105
|
+
root.setAttribute(key, value);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const span = core.startSpan('custom', 'exception', attributes, null);
|
|
109
|
+
span.setError(err);
|
|
110
|
+
span.end();
|
|
111
|
+
},
|
|
112
|
+
startSpan: (kind, name, attributes = {}) => core.enabled ? core.startSpan(kind, name, attributes) : noopSpan(kind, name, attributes),
|
|
113
|
+
checkIn: (slug, fn, checkInOptions) => runCheckIn(core, slug, fn, checkInOptions),
|
|
114
|
+
monitor: (slug, checkInOptions) => createMonitor(core, slug, checkInOptions),
|
|
115
|
+
registerRelease: (input) => registerRelease(core, input),
|
|
116
|
+
get release() {
|
|
117
|
+
return core.options.release;
|
|
118
|
+
},
|
|
119
|
+
get environment() {
|
|
120
|
+
return core.options.environment;
|
|
121
|
+
},
|
|
122
|
+
flush: () => core.flush(),
|
|
123
|
+
shutdown: () => core.shutdown(),
|
|
124
|
+
};
|
|
125
|
+
return tracker;
|
|
126
|
+
}
|
|
127
|
+
function noopSpan(kind, name, attributes) {
|
|
128
|
+
return {
|
|
129
|
+
traceId: '',
|
|
130
|
+
spanId: '',
|
|
131
|
+
parentSpanId: null,
|
|
132
|
+
kind,
|
|
133
|
+
name,
|
|
134
|
+
method: null,
|
|
135
|
+
route: null,
|
|
136
|
+
statusCode: null,
|
|
137
|
+
attributes,
|
|
138
|
+
error: null,
|
|
139
|
+
sampled: false,
|
|
140
|
+
setAttribute() { },
|
|
141
|
+
setError() { },
|
|
142
|
+
setUser() { },
|
|
143
|
+
end() { },
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
/* ------------------------------------------------------------------ */
|
|
147
|
+
/* Logs (CONTRATO.md §11) */
|
|
148
|
+
/* ------------------------------------------------------------------ */
|
|
149
|
+
export { currentSpanContext } from './context.js';
|
|
150
|
+
export { createLogShipper, traceMixin } from './logs/shipper.js';
|
|
151
|
+
export { pinoTransport, fromPino } from './logs/pino.js';
|
|
152
|
+
export { nestLogger } from './logs/nest-logger.js';
|
|
153
|
+
export { LOG_LEVEL_NUMBER, toLogLevel } from './logs/types.js';
|
|
154
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { LogShipper, LogShipperOptions } from './types.js';
|
|
2
|
+
/** Forma estrutural do `LoggerService` do NestJS (sem depender de `@nestjs/common`). */
|
|
3
|
+
export interface NestLoggerService {
|
|
4
|
+
log(message: unknown, ...optionalParams: unknown[]): void;
|
|
5
|
+
error(message: unknown, ...optionalParams: unknown[]): void;
|
|
6
|
+
warn(message: unknown, ...optionalParams: unknown[]): void;
|
|
7
|
+
debug?(message: unknown, ...optionalParams: unknown[]): void;
|
|
8
|
+
verbose?(message: unknown, ...optionalParams: unknown[]): void;
|
|
9
|
+
fatal?(message: unknown, ...optionalParams: unknown[]): void;
|
|
10
|
+
setLogLevels?(levels: string[]): void;
|
|
11
|
+
}
|
|
12
|
+
export type NestLogLevel = 'log' | 'error' | 'warn' | 'debug' | 'verbose' | 'fatal';
|
|
13
|
+
export type NestLoggerOptions = LogShipperOptions & {
|
|
14
|
+
/** Espelha no console (formato compacto). Default `true`. */
|
|
15
|
+
console?: boolean;
|
|
16
|
+
/** Níveis do Nest habilitados. Default todos. */
|
|
17
|
+
logLevels?: NestLogLevel[];
|
|
18
|
+
};
|
|
19
|
+
export interface FgTrackerNestLogger extends NestLoggerService {
|
|
20
|
+
readonly shipper: LogShipper;
|
|
21
|
+
debug(message: unknown, ...optionalParams: unknown[]): void;
|
|
22
|
+
verbose(message: unknown, ...optionalParams: unknown[]): void;
|
|
23
|
+
fatal(message: unknown, ...optionalParams: unknown[]): void;
|
|
24
|
+
setLogLevels(levels: string[]): void;
|
|
25
|
+
flush(): Promise<void>;
|
|
26
|
+
shutdown(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
/** @deprecated use `FgTrackerNestLogger` (nome antigo do `stread-track-sdk`; removido na 1.0). */
|
|
29
|
+
export type StreadTrackNestLogger = FgTrackerNestLogger;
|
|
30
|
+
/**
|
|
31
|
+
* `LoggerService` do Nest que espelha no console e envia para o FG Tracker:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const app = await NestFactory.create(AppModule, { logger: nestLogger({ apiKey, service: 'minha-api', tracker }) });
|
|
35
|
+
* ```
|
|
36
|
+
* Convenção do Nest: o último parâmetro string é o `context` (nome da classe);
|
|
37
|
+
* em `error(message, stack, context)` o penúltimo é o stack.
|
|
38
|
+
*/
|
|
39
|
+
export declare function nestLogger(options: NestLoggerOptions): FgTrackerNestLogger;
|
|
40
|
+
//# sourceMappingURL=nest-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest-logger.d.ts","sourceRoot":"","sources":["../../src/logs/nest-logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3D,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7D,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7D,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpF,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG;IAClD,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5D,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9D,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5D,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,kGAAkG;AAClG,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAWxD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,CA6B1E"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { createLogShipper } from './shipper.js';
|
|
2
|
+
const NEST_TO_LEVEL = {
|
|
3
|
+
verbose: 'trace',
|
|
4
|
+
debug: 'debug',
|
|
5
|
+
log: 'info',
|
|
6
|
+
warn: 'warn',
|
|
7
|
+
error: 'error',
|
|
8
|
+
fatal: 'fatal',
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* `LoggerService` do Nest que espelha no console e envia para o FG Tracker:
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* const app = await NestFactory.create(AppModule, { logger: nestLogger({ apiKey, service: 'minha-api', tracker }) });
|
|
15
|
+
* ```
|
|
16
|
+
* Convenção do Nest: o último parâmetro string é o `context` (nome da classe);
|
|
17
|
+
* em `error(message, stack, context)` o penúltimo é o stack.
|
|
18
|
+
*/
|
|
19
|
+
export function nestLogger(options) {
|
|
20
|
+
const { console: mirror = true, logLevels, ...shipperOptions } = options;
|
|
21
|
+
const shipper = createLogShipper(shipperOptions);
|
|
22
|
+
let enabled = new Set(logLevels ?? ['log', 'error', 'warn', 'debug', 'verbose', 'fatal']);
|
|
23
|
+
const emit = (nestLevel, message, params) => {
|
|
24
|
+
if (!enabled.has(nestLevel))
|
|
25
|
+
return;
|
|
26
|
+
const { text, context, stack, name } = splitParams(nestLevel, message, params);
|
|
27
|
+
if (mirror)
|
|
28
|
+
mirrorToConsole(nestLevel, text, name, stack);
|
|
29
|
+
const extra = { ...context };
|
|
30
|
+
if (name)
|
|
31
|
+
extra.context = name;
|
|
32
|
+
if (stack)
|
|
33
|
+
extra.stack = stack;
|
|
34
|
+
shipper.push({ level: NEST_TO_LEVEL[nestLevel], message: text, context: extra });
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
shipper,
|
|
38
|
+
log: (message, ...params) => emit('log', message, params),
|
|
39
|
+
error: (message, ...params) => emit('error', message, params),
|
|
40
|
+
warn: (message, ...params) => emit('warn', message, params),
|
|
41
|
+
debug: (message, ...params) => emit('debug', message, params),
|
|
42
|
+
verbose: (message, ...params) => emit('verbose', message, params),
|
|
43
|
+
fatal: (message, ...params) => emit('fatal', message, params),
|
|
44
|
+
setLogLevels(levels) {
|
|
45
|
+
enabled = new Set(levels);
|
|
46
|
+
},
|
|
47
|
+
flush: () => shipper.flush(),
|
|
48
|
+
shutdown: () => shipper.shutdown(),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function splitParams(nestLevel, message, params) {
|
|
52
|
+
const rest = [...params];
|
|
53
|
+
let name;
|
|
54
|
+
let stack;
|
|
55
|
+
if (rest.length > 0 && typeof rest[rest.length - 1] === 'string')
|
|
56
|
+
name = rest.pop();
|
|
57
|
+
if (nestLevel === 'error' && rest.length > 0 && typeof rest[rest.length - 1] === 'string')
|
|
58
|
+
stack = rest.pop();
|
|
59
|
+
const context = {};
|
|
60
|
+
let text;
|
|
61
|
+
if (message instanceof Error) {
|
|
62
|
+
text = message.message;
|
|
63
|
+
stack = stack ?? message.stack;
|
|
64
|
+
context.errorName = message.name;
|
|
65
|
+
}
|
|
66
|
+
else if (typeof message === 'string') {
|
|
67
|
+
text = message;
|
|
68
|
+
}
|
|
69
|
+
else if (message && typeof message === 'object') {
|
|
70
|
+
text = message.message?.toString() ?? JSON.stringify(message);
|
|
71
|
+
Object.assign(context, message);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
text = String(message);
|
|
75
|
+
}
|
|
76
|
+
if (rest.length > 0)
|
|
77
|
+
context.params = rest;
|
|
78
|
+
return { text, context, stack, name };
|
|
79
|
+
}
|
|
80
|
+
function mirrorToConsole(nestLevel, text, name, stack) {
|
|
81
|
+
const prefix = `${new Date().toISOString()} ${nestLevel.toUpperCase().padEnd(7)}${name ? ` [${name}]` : ''}`;
|
|
82
|
+
const line = `${prefix} ${text}`;
|
|
83
|
+
switch (nestLevel) {
|
|
84
|
+
case 'error':
|
|
85
|
+
case 'fatal':
|
|
86
|
+
console.error(stack ? `${line}\n${stack}` : line);
|
|
87
|
+
break;
|
|
88
|
+
case 'warn':
|
|
89
|
+
console.warn(line);
|
|
90
|
+
break;
|
|
91
|
+
case 'debug':
|
|
92
|
+
case 'verbose':
|
|
93
|
+
console.debug(line);
|
|
94
|
+
break;
|
|
95
|
+
default:
|
|
96
|
+
console.log(line);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=nest-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest-logger.js","sourceRoot":"","sources":["../../src/logs/nest-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import build from 'pino-abstract-transport';
|
|
2
|
+
import type { LogInput, LogShipperOptions } from './types.js';
|
|
3
|
+
/** Opções aceitas em `transport.options` (serializadas para o worker: nada de funções/tracker). */
|
|
4
|
+
export type PinoTransportOptions = Omit<LogShipperOptions, 'tracker' | 'fetch'> & {
|
|
5
|
+
/** Chaves do objeto do pino que NÃO devem ir para `context`. */
|
|
6
|
+
ignoreKeys?: string[];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Transport do pino v7+ (roda em worker thread via `thread-stream`):
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import pino from 'pino';
|
|
13
|
+
* const logger = pino({ transport: { target: 'fg-tracker-sdk/pino', options: { apiKey, service: 'minha-api' } } });
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export default function fgTrackerPinoTransport(options: PinoTransportOptions): import("stream").Transform & build.OnUnknown;
|
|
17
|
+
/** Config pronta para `pino({ transport })`. */
|
|
18
|
+
export declare function pinoTransport(options: PinoTransportOptions): {
|
|
19
|
+
target: string;
|
|
20
|
+
options: PinoTransportOptions;
|
|
21
|
+
};
|
|
22
|
+
/** Mapeia a linha do pino para o contrato: `msg` → message, `name` → service, resto → context. */
|
|
23
|
+
export declare function fromPino(obj: Record<string, unknown>, ignored?: Set<string>, defaultService?: string): LogInput;
|
|
24
|
+
//# sourceMappingURL=pino.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../../src/logs/pino.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,yBAAyB,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE9D,mGAAmG;AACnG,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG;IAChF,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAIF;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,OAAO,EAAE,oBAAoB,gDAiB3E;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,oBAAoB,CAAA;CAAE,CAE9G;AAED,kGAAkG;AAClG,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE,GAAG,CAAC,MAAM,CAAiB,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,CAoB9H"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import build from 'pino-abstract-transport';
|
|
2
|
+
import { createLogShipper } from './shipper.js';
|
|
3
|
+
const PINO_RESERVED = new Set(['level', 'time', 'msg', 'pid', 'hostname', 'name', 'v', 'traceId', 'spanId', 'requestId', 'reqId', 'env']);
|
|
4
|
+
/**
|
|
5
|
+
* Transport do pino v7+ (roda em worker thread via `thread-stream`):
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import pino from 'pino';
|
|
9
|
+
* const logger = pino({ transport: { target: 'fg-tracker-sdk/pino', options: { apiKey, service: 'minha-api' } } });
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export default function fgTrackerPinoTransport(options) {
|
|
13
|
+
const { ignoreKeys = [], ...shipperOptions } = options;
|
|
14
|
+
const shipper = createLogShipper(shipperOptions);
|
|
15
|
+
const ignored = new Set([...PINO_RESERVED, ...ignoreKeys]);
|
|
16
|
+
return build(async (source) => {
|
|
17
|
+
for await (const obj of source) {
|
|
18
|
+
shipper.push(fromPino(obj, ignored, options.service));
|
|
19
|
+
}
|
|
20
|
+
}, {
|
|
21
|
+
async close() {
|
|
22
|
+
await shipper.shutdown();
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** Config pronta para `pino({ transport })`. */
|
|
27
|
+
export function pinoTransport(options) {
|
|
28
|
+
return { target: 'fg-tracker-sdk/pino', options };
|
|
29
|
+
}
|
|
30
|
+
/** Mapeia a linha do pino para o contrato: `msg` → message, `name` → service, resto → context. */
|
|
31
|
+
export function fromPino(obj, ignored = PINO_RESERVED, defaultService) {
|
|
32
|
+
const context = {};
|
|
33
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
34
|
+
if (ignored.has(key) || value === undefined)
|
|
35
|
+
continue;
|
|
36
|
+
context[key] = value;
|
|
37
|
+
}
|
|
38
|
+
const req = obj.req;
|
|
39
|
+
const requestId = firstString(obj.requestId, obj.reqId, req?.id);
|
|
40
|
+
return {
|
|
41
|
+
ts: typeof obj.time === 'number' || typeof obj.time === 'string' ? obj.time : undefined,
|
|
42
|
+
level: obj.level,
|
|
43
|
+
service: defaultService ?? (typeof obj.name === 'string' ? obj.name : undefined),
|
|
44
|
+
message: typeof obj.msg === 'string' ? obj.msg : obj.msg === undefined ? '' : String(obj.msg),
|
|
45
|
+
context,
|
|
46
|
+
traceId: firstString(obj.traceId),
|
|
47
|
+
spanId: firstString(obj.spanId),
|
|
48
|
+
requestId,
|
|
49
|
+
env: firstString(obj.env),
|
|
50
|
+
host: firstString(obj.hostname),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function firstString(...values) {
|
|
54
|
+
for (const value of values) {
|
|
55
|
+
if (typeof value === 'string' && value)
|
|
56
|
+
return value;
|
|
57
|
+
if (typeof value === 'number')
|
|
58
|
+
return String(value);
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=pino.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pino.js","sourceRoot":"","sources":["../../src/logs/pino.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type LogShipper, type LogShipperOptions } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fila + envio em lote para `POST /v1/logs`. Mesma política do tracker:
|
|
4
|
+
* timer com `unref()`, fila limitada (descarta as mais antigas), aviso único
|
|
5
|
+
* em falha, 4xx descarta o lote, 5xx/rede tenta de novo uma vez e depois
|
|
6
|
+
* devolve o lote para o próximo flush.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createLogShipper(options: LogShipperOptions): LogShipper;
|
|
9
|
+
/**
|
|
10
|
+
* `mixin` para o pino: injeta `traceId`/`spanId` do span corrente em cada linha.
|
|
11
|
+
* Necessário porque o transport roda em worker thread, sem acesso ao AsyncLocalStorage da app.
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* const logger = pino({ mixin: traceMixin(tracker), transport: pinoTransport({ ... }) });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function traceMixin(tracker?: LogShipperOptions['tracker']): () => Record<string, string>;
|
|
18
|
+
//# sourceMappingURL=shipper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shipper.d.ts","sourceRoot":"","sources":["../../src/logs/shipper.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6E,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAShJ;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAEvE;AAiLD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/F"}
|