@celerity-sdk/telemetry 0.2.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/LICENSE +201 -0
- package/README.md +85 -0
- package/dist/index.cjs +594 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +106 -0
- package/dist/index.d.ts +106 -0
- package/dist/index.js +544 -0
- package/dist/index.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.js +138 -0
- package/dist/setup.js.map +1 -0
- package/package.json +90 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { CelerityLayer, HandlerContext, HandlerResponse, LogLevel, CelerityLogger, CeleritySpan, CelerityTracer, HttpRequest, ServiceContainer } from '@celerity-sdk/types';
|
|
2
|
+
export { extractUserId } from '@celerity-sdk/common';
|
|
3
|
+
import pino from 'pino';
|
|
4
|
+
import { Span, Context } from '@opentelemetry/api';
|
|
5
|
+
|
|
6
|
+
declare class TelemetryLayer implements CelerityLayer {
|
|
7
|
+
private config;
|
|
8
|
+
private rootLogger;
|
|
9
|
+
private currentLevel;
|
|
10
|
+
private initPromise;
|
|
11
|
+
constructor();
|
|
12
|
+
handle(context: HandlerContext, next: () => Promise<HandlerResponse>): Promise<HandlerResponse>;
|
|
13
|
+
dispose(): Promise<void>;
|
|
14
|
+
private refreshLogLevelFromConfig;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type TelemetryConfig = {
|
|
18
|
+
tracingEnabled: boolean;
|
|
19
|
+
otlpEndpoint: string;
|
|
20
|
+
serviceName: string;
|
|
21
|
+
serviceVersion: string;
|
|
22
|
+
logLevel: LogLevel;
|
|
23
|
+
logFormat: "json" | "human" | "auto";
|
|
24
|
+
logFilePath: string | null;
|
|
25
|
+
};
|
|
26
|
+
declare function readTelemetryEnv(): TelemetryConfig;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Thin pino wrapper implementing CelerityLogger.
|
|
30
|
+
* Every method delegates directly to the underlying pino instance.
|
|
31
|
+
*/
|
|
32
|
+
declare class CelerityLoggerImpl implements CelerityLogger {
|
|
33
|
+
private pinoLogger;
|
|
34
|
+
constructor(pinoLogger: pino.Logger);
|
|
35
|
+
debug(message: string, attributes?: Record<string, unknown>): void;
|
|
36
|
+
info(message: string, attributes?: Record<string, unknown>): void;
|
|
37
|
+
warn(message: string, attributes?: Record<string, unknown>): void;
|
|
38
|
+
error(message: string, attributes?: Record<string, unknown>): void;
|
|
39
|
+
private log;
|
|
40
|
+
child(name: string, attributes?: Record<string, unknown>): CelerityLogger;
|
|
41
|
+
withContext(attributes: Record<string, unknown>): CelerityLogger;
|
|
42
|
+
/** Update the log level at runtime. Internal — used by TelemetryLayer for dynamic config. */
|
|
43
|
+
setLevel(level: LogLevel): void;
|
|
44
|
+
}
|
|
45
|
+
declare function createLogger(config: TelemetryConfig): CelerityLoggerImpl;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get the request-scoped logger from the current async context.
|
|
49
|
+
*
|
|
50
|
+
* Works anywhere in the async call chain during request handling —
|
|
51
|
+
* handlers, services, repositories, API clients.
|
|
52
|
+
*
|
|
53
|
+
* Returns `undefined` outside a request context (e.g., startup code, background tasks).
|
|
54
|
+
*/
|
|
55
|
+
declare function getRequestLogger(): CelerityLogger | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Context-aware logger proxy registered under LOGGER_TOKEN.
|
|
58
|
+
*
|
|
59
|
+
* Delegates to the request-scoped logger (via AsyncLocalStorage) when inside
|
|
60
|
+
* a request context, falls back to the root logger otherwise.
|
|
61
|
+
*
|
|
62
|
+
* This means `@Inject(LOGGER_TOKEN)` automatically resolves to the most
|
|
63
|
+
* appropriate logger for the current context — no manual wiring needed.
|
|
64
|
+
*/
|
|
65
|
+
declare class ContextAwareLogger implements CelerityLogger {
|
|
66
|
+
private rootLogger;
|
|
67
|
+
constructor(rootLogger: CelerityLogger);
|
|
68
|
+
private get current();
|
|
69
|
+
debug(message: string, attributes?: Record<string, unknown>): void;
|
|
70
|
+
info(message: string, attributes?: Record<string, unknown>): void;
|
|
71
|
+
warn(message: string, attributes?: Record<string, unknown>): void;
|
|
72
|
+
error(message: string, attributes?: Record<string, unknown>): void;
|
|
73
|
+
child(name: string, attributes?: Record<string, unknown>): CelerityLogger;
|
|
74
|
+
withContext(attributes: Record<string, unknown>): CelerityLogger;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
declare class OTelTracer implements CelerityTracer {
|
|
78
|
+
private tracer;
|
|
79
|
+
startSpan(name: string, attributes?: Record<string, unknown>): CeleritySpan;
|
|
80
|
+
withSpan<T>(name: string, fn: (span: CeleritySpan) => T | Promise<T>, attributes?: Record<string, unknown>): Promise<T>;
|
|
81
|
+
}
|
|
82
|
+
declare class OTelSpan implements CeleritySpan {
|
|
83
|
+
private span;
|
|
84
|
+
constructor(span: Span);
|
|
85
|
+
setAttribute(key: string, value: string | number | boolean): void;
|
|
86
|
+
setAttributes(attributes: Record<string, string | number | boolean>): void;
|
|
87
|
+
recordError(error: Error): void;
|
|
88
|
+
setOk(): void;
|
|
89
|
+
end(): void;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
declare class NoopTracer implements CelerityTracer {
|
|
93
|
+
startSpan(): CeleritySpan;
|
|
94
|
+
withSpan<T>(_name: string, fn: (span: CeleritySpan) => T | Promise<T>): Promise<T>;
|
|
95
|
+
}
|
|
96
|
+
declare const NOOP_SPAN: CeleritySpan;
|
|
97
|
+
|
|
98
|
+
declare const LOGGER_TOKEN = "CelerityLogger";
|
|
99
|
+
declare const TRACER_TOKEN = "CelerityTracer";
|
|
100
|
+
|
|
101
|
+
declare function extractTraceContext(request: HttpRequest): Context;
|
|
102
|
+
|
|
103
|
+
declare function getLogger(container: ServiceContainer): Promise<CelerityLogger>;
|
|
104
|
+
declare function getTracer(container: ServiceContainer): Promise<CelerityTracer>;
|
|
105
|
+
|
|
106
|
+
export { CelerityLoggerImpl, ContextAwareLogger, LOGGER_TOKEN, NOOP_SPAN, NoopTracer, OTelSpan, OTelTracer, TRACER_TOKEN, type TelemetryConfig, TelemetryLayer, createLogger, extractTraceContext, getLogger, getRequestLogger, getTracer, readTelemetryEnv };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { CelerityLayer, HandlerContext, HandlerResponse, LogLevel, CelerityLogger, CeleritySpan, CelerityTracer, HttpRequest, ServiceContainer } from '@celerity-sdk/types';
|
|
2
|
+
export { extractUserId } from '@celerity-sdk/common';
|
|
3
|
+
import pino from 'pino';
|
|
4
|
+
import { Span, Context } from '@opentelemetry/api';
|
|
5
|
+
|
|
6
|
+
declare class TelemetryLayer implements CelerityLayer {
|
|
7
|
+
private config;
|
|
8
|
+
private rootLogger;
|
|
9
|
+
private currentLevel;
|
|
10
|
+
private initPromise;
|
|
11
|
+
constructor();
|
|
12
|
+
handle(context: HandlerContext, next: () => Promise<HandlerResponse>): Promise<HandlerResponse>;
|
|
13
|
+
dispose(): Promise<void>;
|
|
14
|
+
private refreshLogLevelFromConfig;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type TelemetryConfig = {
|
|
18
|
+
tracingEnabled: boolean;
|
|
19
|
+
otlpEndpoint: string;
|
|
20
|
+
serviceName: string;
|
|
21
|
+
serviceVersion: string;
|
|
22
|
+
logLevel: LogLevel;
|
|
23
|
+
logFormat: "json" | "human" | "auto";
|
|
24
|
+
logFilePath: string | null;
|
|
25
|
+
};
|
|
26
|
+
declare function readTelemetryEnv(): TelemetryConfig;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Thin pino wrapper implementing CelerityLogger.
|
|
30
|
+
* Every method delegates directly to the underlying pino instance.
|
|
31
|
+
*/
|
|
32
|
+
declare class CelerityLoggerImpl implements CelerityLogger {
|
|
33
|
+
private pinoLogger;
|
|
34
|
+
constructor(pinoLogger: pino.Logger);
|
|
35
|
+
debug(message: string, attributes?: Record<string, unknown>): void;
|
|
36
|
+
info(message: string, attributes?: Record<string, unknown>): void;
|
|
37
|
+
warn(message: string, attributes?: Record<string, unknown>): void;
|
|
38
|
+
error(message: string, attributes?: Record<string, unknown>): void;
|
|
39
|
+
private log;
|
|
40
|
+
child(name: string, attributes?: Record<string, unknown>): CelerityLogger;
|
|
41
|
+
withContext(attributes: Record<string, unknown>): CelerityLogger;
|
|
42
|
+
/** Update the log level at runtime. Internal — used by TelemetryLayer for dynamic config. */
|
|
43
|
+
setLevel(level: LogLevel): void;
|
|
44
|
+
}
|
|
45
|
+
declare function createLogger(config: TelemetryConfig): CelerityLoggerImpl;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get the request-scoped logger from the current async context.
|
|
49
|
+
*
|
|
50
|
+
* Works anywhere in the async call chain during request handling —
|
|
51
|
+
* handlers, services, repositories, API clients.
|
|
52
|
+
*
|
|
53
|
+
* Returns `undefined` outside a request context (e.g., startup code, background tasks).
|
|
54
|
+
*/
|
|
55
|
+
declare function getRequestLogger(): CelerityLogger | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* Context-aware logger proxy registered under LOGGER_TOKEN.
|
|
58
|
+
*
|
|
59
|
+
* Delegates to the request-scoped logger (via AsyncLocalStorage) when inside
|
|
60
|
+
* a request context, falls back to the root logger otherwise.
|
|
61
|
+
*
|
|
62
|
+
* This means `@Inject(LOGGER_TOKEN)` automatically resolves to the most
|
|
63
|
+
* appropriate logger for the current context — no manual wiring needed.
|
|
64
|
+
*/
|
|
65
|
+
declare class ContextAwareLogger implements CelerityLogger {
|
|
66
|
+
private rootLogger;
|
|
67
|
+
constructor(rootLogger: CelerityLogger);
|
|
68
|
+
private get current();
|
|
69
|
+
debug(message: string, attributes?: Record<string, unknown>): void;
|
|
70
|
+
info(message: string, attributes?: Record<string, unknown>): void;
|
|
71
|
+
warn(message: string, attributes?: Record<string, unknown>): void;
|
|
72
|
+
error(message: string, attributes?: Record<string, unknown>): void;
|
|
73
|
+
child(name: string, attributes?: Record<string, unknown>): CelerityLogger;
|
|
74
|
+
withContext(attributes: Record<string, unknown>): CelerityLogger;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
declare class OTelTracer implements CelerityTracer {
|
|
78
|
+
private tracer;
|
|
79
|
+
startSpan(name: string, attributes?: Record<string, unknown>): CeleritySpan;
|
|
80
|
+
withSpan<T>(name: string, fn: (span: CeleritySpan) => T | Promise<T>, attributes?: Record<string, unknown>): Promise<T>;
|
|
81
|
+
}
|
|
82
|
+
declare class OTelSpan implements CeleritySpan {
|
|
83
|
+
private span;
|
|
84
|
+
constructor(span: Span);
|
|
85
|
+
setAttribute(key: string, value: string | number | boolean): void;
|
|
86
|
+
setAttributes(attributes: Record<string, string | number | boolean>): void;
|
|
87
|
+
recordError(error: Error): void;
|
|
88
|
+
setOk(): void;
|
|
89
|
+
end(): void;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
declare class NoopTracer implements CelerityTracer {
|
|
93
|
+
startSpan(): CeleritySpan;
|
|
94
|
+
withSpan<T>(_name: string, fn: (span: CeleritySpan) => T | Promise<T>): Promise<T>;
|
|
95
|
+
}
|
|
96
|
+
declare const NOOP_SPAN: CeleritySpan;
|
|
97
|
+
|
|
98
|
+
declare const LOGGER_TOKEN = "CelerityLogger";
|
|
99
|
+
declare const TRACER_TOKEN = "CelerityTracer";
|
|
100
|
+
|
|
101
|
+
declare function extractTraceContext(request: HttpRequest): Context;
|
|
102
|
+
|
|
103
|
+
declare function getLogger(container: ServiceContainer): Promise<CelerityLogger>;
|
|
104
|
+
declare function getTracer(container: ServiceContainer): Promise<CelerityTracer>;
|
|
105
|
+
|
|
106
|
+
export { CelerityLoggerImpl, ContextAwareLogger, LOGGER_TOKEN, NOOP_SPAN, NoopTracer, OTelSpan, OTelTracer, TRACER_TOKEN, type TelemetryConfig, TelemetryLayer, createLogger, extractTraceContext, getLogger, getRequestLogger, getTracer, readTelemetryEnv };
|