@bufferlog/sdk-node 1.0.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/dist/config.d.ts +97 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +38 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/context/async-context.d.ts +86 -0
  8. package/dist/context/async-context.d.ts.map +1 -0
  9. package/dist/context/async-context.js +90 -0
  10. package/dist/context/async-context.js.map +1 -0
  11. package/dist/control-plane/policy-fetcher.d.ts +73 -0
  12. package/dist/control-plane/policy-fetcher.d.ts.map +1 -0
  13. package/dist/control-plane/policy-fetcher.js +116 -0
  14. package/dist/control-plane/policy-fetcher.js.map +1 -0
  15. package/dist/control-plane/telemetry-reporter.d.ts +73 -0
  16. package/dist/control-plane/telemetry-reporter.d.ts.map +1 -0
  17. package/dist/control-plane/telemetry-reporter.js +133 -0
  18. package/dist/control-plane/telemetry-reporter.js.map +1 -0
  19. package/dist/core/buffer-manager.d.ts +83 -0
  20. package/dist/core/buffer-manager.d.ts.map +1 -0
  21. package/dist/core/buffer-manager.js +119 -0
  22. package/dist/core/buffer-manager.js.map +1 -0
  23. package/dist/core/log-event.d.ts +72 -0
  24. package/dist/core/log-event.d.ts.map +1 -0
  25. package/dist/core/log-event.js +78 -0
  26. package/dist/core/log-event.js.map +1 -0
  27. package/dist/core/ring-buffer.d.ts +60 -0
  28. package/dist/core/ring-buffer.d.ts.map +1 -0
  29. package/dist/core/ring-buffer.js +120 -0
  30. package/dist/core/ring-buffer.js.map +1 -0
  31. package/dist/flash/adapters/datadog.d.ts +40 -0
  32. package/dist/flash/adapters/datadog.d.ts.map +1 -0
  33. package/dist/flash/adapters/datadog.js +67 -0
  34. package/dist/flash/adapters/datadog.js.map +1 -0
  35. package/dist/flash/adapters/splunk.d.ts +46 -0
  36. package/dist/flash/adapters/splunk.d.ts.map +1 -0
  37. package/dist/flash/adapters/splunk.js +71 -0
  38. package/dist/flash/adapters/splunk.js.map +1 -0
  39. package/dist/flash/adapters/stdout.d.ts +25 -0
  40. package/dist/flash/adapters/stdout.d.ts.map +1 -0
  41. package/dist/flash/adapters/stdout.js +29 -0
  42. package/dist/flash/adapters/stdout.js.map +1 -0
  43. package/dist/flash/adapters/types.d.ts +25 -0
  44. package/dist/flash/adapters/types.d.ts.map +1 -0
  45. package/dist/flash/adapters/types.js +10 -0
  46. package/dist/flash/adapters/types.js.map +1 -0
  47. package/dist/flash/flash-controller.d.ts +78 -0
  48. package/dist/flash/flash-controller.d.ts.map +1 -0
  49. package/dist/flash/flash-controller.js +157 -0
  50. package/dist/flash/flash-controller.js.map +1 -0
  51. package/dist/index.d.ts +126 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +185 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/integrations/pino.d.ts +37 -0
  56. package/dist/integrations/pino.d.ts.map +1 -0
  57. package/dist/integrations/pino.js +86 -0
  58. package/dist/integrations/pino.js.map +1 -0
  59. package/dist/integrations/winston.d.ts +61 -0
  60. package/dist/integrations/winston.d.ts.map +1 -0
  61. package/dist/integrations/winston.js +120 -0
  62. package/dist/integrations/winston.js.map +1 -0
  63. package/dist/middleware/express.d.ts +47 -0
  64. package/dist/middleware/express.d.ts.map +1 -0
  65. package/dist/middleware/express.js +71 -0
  66. package/dist/middleware/express.js.map +1 -0
  67. package/dist/middleware/fastify.d.ts +32 -0
  68. package/dist/middleware/fastify.d.ts.map +1 -0
  69. package/dist/middleware/fastify.js +91 -0
  70. package/dist/middleware/fastify.js.map +1 -0
  71. package/package.json +82 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Flash Controller — Orchestrates error-triggered log flushing.
3
+ *
4
+ * When an error condition is detected (ERROR log, HTTP 5xx, unhandled exception),
5
+ * the flash controller:
6
+ * 1. Drains the request's ring buffer
7
+ * 2. Appends the triggering error event
8
+ * 3. Serializes all events
9
+ * 4. Dispatches them to all configured downstream adapters
10
+ *
11
+ * Design notes:
12
+ * - Dispatch is non-blocking (uses setImmediate to avoid blocking the response)
13
+ * - Uses Promise.allSettled so one failing adapter doesn't block others
14
+ * - Fail-open: if all adapters fail, dumps to stderr as last resort
15
+ */
16
+ import type { RequestContext } from '../context/async-context.js';
17
+ import type { LogEvent } from '../core/log-event.js';
18
+ import type { DownstreamAdapter } from './adapters/types.js';
19
+ export interface FlashControllerOptions {
20
+ /** Downstream adapters to send flushed logs to */
21
+ adapters: readonly DownstreamAdapter[];
22
+ /** If true, dispatch asynchronously (don't block the request). Default: true */
23
+ async?: boolean;
24
+ /** If true, dump to stderr if all adapters fail. Default: true */
25
+ failOpen?: boolean;
26
+ }
27
+ export interface FlashResult {
28
+ /** Number of log events flushed (including the error event) */
29
+ eventCount: number;
30
+ /** Results from each adapter */
31
+ adapterResults: Array<{
32
+ adapter: string;
33
+ success: boolean;
34
+ error?: Error;
35
+ }>;
36
+ }
37
+ export declare class FlashController {
38
+ private readonly adapters;
39
+ private readonly asyncDispatch;
40
+ private readonly failOpen;
41
+ /** Metrics for telemetry */
42
+ private _flushCount;
43
+ private _eventsFlushed;
44
+ private _adapterErrors;
45
+ constructor(options: FlashControllerOptions);
46
+ /**
47
+ * Trigger a flush for the given request context.
48
+ *
49
+ * @param ctx The request context whose buffer should be flushed
50
+ * @param errorEvent The error log event that triggered the flush
51
+ */
52
+ trigger(ctx: RequestContext, errorEvent: LogEvent): void;
53
+ /**
54
+ * Trigger a flush with raw events (no RequestContext needed).
55
+ * Useful for manual flush scenarios.
56
+ */
57
+ triggerRaw(events: LogEvent[], contextId: string): void;
58
+ /**
59
+ * Dispatch serialized events to all configured adapters.
60
+ * Uses Promise.allSettled to ensure one failure doesn't block others.
61
+ */
62
+ private dispatch;
63
+ /**
64
+ * Last-resort fallback: dump logs to stderr so they're never truly lost.
65
+ */
66
+ private dumpToStderr;
67
+ /**
68
+ * Handle unexpected dispatch errors (shouldn't happen if adapters are well-behaved).
69
+ */
70
+ private handleDispatchFailure;
71
+ /** Total number of flushes triggered */
72
+ get flushCount(): number;
73
+ /** Total number of individual events flushed */
74
+ get eventsFlushed(): number;
75
+ /** Total adapter errors encountered */
76
+ get adapterErrors(): number;
77
+ }
78
+ //# sourceMappingURL=flash-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flash-controller.d.ts","sourceRoot":"","sources":["../../src/flash/flash-controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,sBAAsB;IACrC,kDAAkD;IAClD,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAEvC,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,cAAc,EAAE,KAAK,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,CAAC,CAAC;CACJ;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IAEnC,4BAA4B;IAC5B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;gBAEf,OAAO,EAAE,sBAAsB;IAM3C;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI;IA0BxD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAiBvD;;;OAGG;YACW,QAAQ;IAgDtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B,wCAAwC;IACxC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,gDAAgD;IAChD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,uCAAuC;IACvC,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Flash Controller — Orchestrates error-triggered log flushing.
3
+ *
4
+ * When an error condition is detected (ERROR log, HTTP 5xx, unhandled exception),
5
+ * the flash controller:
6
+ * 1. Drains the request's ring buffer
7
+ * 2. Appends the triggering error event
8
+ * 3. Serializes all events
9
+ * 4. Dispatches them to all configured downstream adapters
10
+ *
11
+ * Design notes:
12
+ * - Dispatch is non-blocking (uses setImmediate to avoid blocking the response)
13
+ * - Uses Promise.allSettled so one failing adapter doesn't block others
14
+ * - Fail-open: if all adapters fail, dumps to stderr as last resort
15
+ */
16
+ import { serializeLogEvent } from '../core/log-event.js';
17
+ export class FlashController {
18
+ adapters;
19
+ asyncDispatch;
20
+ failOpen;
21
+ /** Metrics for telemetry */
22
+ _flushCount = 0;
23
+ _eventsFlushed = 0;
24
+ _adapterErrors = 0;
25
+ constructor(options) {
26
+ this.adapters = options.adapters;
27
+ this.asyncDispatch = options.async ?? true;
28
+ this.failOpen = options.failOpen ?? true;
29
+ }
30
+ /**
31
+ * Trigger a flush for the given request context.
32
+ *
33
+ * @param ctx The request context whose buffer should be flushed
34
+ * @param errorEvent The error log event that triggered the flush
35
+ */
36
+ trigger(ctx, errorEvent) {
37
+ // Drain the buffer — this removes all events from the ring buffer
38
+ const bufferedLogs = ctx.buffer.drain();
39
+ // Build the full payload: all buffered context + the triggering error
40
+ const payload = [...bufferedLogs, errorEvent];
41
+ this._flushCount++;
42
+ this._eventsFlushed += payload.length;
43
+ if (this.asyncDispatch) {
44
+ // Non-blocking: dispatch after the current tick completes
45
+ // This ensures the HTTP response isn't delayed by log shipping
46
+ setImmediate(() => {
47
+ this.dispatch(payload, ctx.contextId, ctx.tags).catch((err) => {
48
+ this.handleDispatchFailure(err, payload);
49
+ });
50
+ });
51
+ }
52
+ else {
53
+ // Synchronous dispatch (useful for testing or critical-path logging)
54
+ this.dispatch(payload, ctx.contextId, ctx.tags).catch((err) => {
55
+ this.handleDispatchFailure(err, payload);
56
+ });
57
+ }
58
+ }
59
+ /**
60
+ * Trigger a flush with raw events (no RequestContext needed).
61
+ * Useful for manual flush scenarios.
62
+ */
63
+ triggerRaw(events, contextId) {
64
+ this._flushCount++;
65
+ this._eventsFlushed += events.length;
66
+ const dispatch = () => {
67
+ this.dispatch(events, contextId).catch((err) => {
68
+ this.handleDispatchFailure(err, events);
69
+ });
70
+ };
71
+ if (this.asyncDispatch) {
72
+ setImmediate(dispatch);
73
+ }
74
+ else {
75
+ dispatch();
76
+ }
77
+ }
78
+ /**
79
+ * Dispatch serialized events to all configured adapters.
80
+ * Uses Promise.allSettled to ensure one failure doesn't block others.
81
+ */
82
+ async dispatch(events, contextId, tags) {
83
+ const serialized = events.map(serializeLogEvent);
84
+ // Attach tags to each event if present
85
+ if (tags) {
86
+ for (const event of serialized) {
87
+ event.metadata = { ...event.metadata, ...tags };
88
+ }
89
+ }
90
+ const results = await Promise.allSettled(this.adapters.map((adapter) => adapter.send(serialized, contextId)));
91
+ const adapterResults = results.map((result, i) => {
92
+ const adapter = this.adapters[i];
93
+ if (result.status === 'fulfilled') {
94
+ return { adapter: adapter.name, success: true };
95
+ }
96
+ else {
97
+ this._adapterErrors++;
98
+ return {
99
+ adapter: adapter.name,
100
+ success: false,
101
+ error: result.reason instanceof Error
102
+ ? result.reason
103
+ : new Error(String(result.reason)),
104
+ };
105
+ }
106
+ });
107
+ const flashResult = {
108
+ eventCount: events.length,
109
+ adapterResults,
110
+ };
111
+ // If ALL adapters failed and fail-open is enabled, dump to stderr
112
+ const allFailed = adapterResults.every((r) => !r.success);
113
+ if (allFailed && this.failOpen && this.adapters.length > 0) {
114
+ this.dumpToStderr(serialized, contextId, adapterResults);
115
+ }
116
+ return flashResult;
117
+ }
118
+ /**
119
+ * Last-resort fallback: dump logs to stderr so they're never truly lost.
120
+ */
121
+ dumpToStderr(events, contextId, failures) {
122
+ console.error(`[BufferLog] All adapters failed for context ${contextId}. ` +
123
+ `Dumping ${events.length} events to stderr.`);
124
+ for (const failure of failures) {
125
+ if (failure.error) {
126
+ console.error(`[BufferLog] ${failure.adapter}: ${failure.error.message}`);
127
+ }
128
+ }
129
+ for (const event of events) {
130
+ console.error(JSON.stringify(event));
131
+ }
132
+ }
133
+ /**
134
+ * Handle unexpected dispatch errors (shouldn't happen if adapters are well-behaved).
135
+ */
136
+ handleDispatchFailure(err, events) {
137
+ console.error('[BufferLog] Flash dispatch encountered an unexpected error:', err);
138
+ if (this.failOpen) {
139
+ for (const event of events) {
140
+ console.error(JSON.stringify(serializeLogEvent(event)));
141
+ }
142
+ }
143
+ }
144
+ /** Total number of flushes triggered */
145
+ get flushCount() {
146
+ return this._flushCount;
147
+ }
148
+ /** Total number of individual events flushed */
149
+ get eventsFlushed() {
150
+ return this._eventsFlushed;
151
+ }
152
+ /** Total adapter errors encountered */
153
+ get adapterErrors() {
154
+ return this._adapterErrors;
155
+ }
156
+ }
157
+ //# sourceMappingURL=flash-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flash-controller.js","sourceRoot":"","sources":["../../src/flash/flash-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * @bufferlog/sdk-node — Public API
3
+ *
4
+ * BufferLog.io Node.js SDK
5
+ * Buffer logs in memory per-request. Flush only on errors. Save 90%+ on APM costs.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { BufferLog } from '@bufferlog/sdk-node';
10
+ * import { StdOutAdapter } from '@bufferlog/sdk-node/adapters';
11
+ *
12
+ * const bufferlog = BufferLog.create({
13
+ * bufferCapacity: 100,
14
+ * adapters: [new StdOutAdapter({ pretty: true })],
15
+ * });
16
+ *
17
+ * // Express
18
+ * app.use(bufferlog.expressMiddleware());
19
+ *
20
+ * // Winston
21
+ * const logger = winston.createLogger({
22
+ * transports: [bufferlog.winstonTransport()],
23
+ * });
24
+ * ```
25
+ */
26
+ export { LogLevel, LOG_LEVEL_LABELS, LOG_LEVEL_FROM_STRING } from './core/log-event.js';
27
+ export type { LogEvent, SerializedLogEvent } from './core/log-event.js';
28
+ export { createLogEvent, serializeLogEvent } from './core/log-event.js';
29
+ export { RingBuffer } from './core/ring-buffer.js';
30
+ export { BufferManager } from './core/buffer-manager.js';
31
+ export type { BufferManagerMetrics } from './core/buffer-manager.js';
32
+ export { BufferLogContext } from './context/async-context.js';
33
+ export type { RequestContext } from './context/async-context.js';
34
+ export { resolveConfig } from './config.js';
35
+ export type { BufferLogConfig, ResolvedConfig } from './config.js';
36
+ export { FlashController } from './flash/flash-controller.js';
37
+ export type { FlashControllerOptions, FlashResult } from './flash/flash-controller.js';
38
+ export type { DownstreamAdapter } from './flash/adapters/types.js';
39
+ export { StdOutAdapter } from './flash/adapters/stdout.js';
40
+ export type { StdOutAdapterOptions } from './flash/adapters/stdout.js';
41
+ export { DatadogAdapter } from './flash/adapters/datadog.js';
42
+ export type { DatadogAdapterOptions } from './flash/adapters/datadog.js';
43
+ export { SplunkAdapter } from './flash/adapters/splunk.js';
44
+ export type { SplunkAdapterOptions } from './flash/adapters/splunk.js';
45
+ export { BufferLogTransport } from './integrations/winston.js';
46
+ export type { BufferLogTransportOptions } from './integrations/winston.js';
47
+ export { createBufferLogDestination } from './integrations/pino.js';
48
+ export type { BufferLogPinoOptions } from './integrations/pino.js';
49
+ export { bufferLogMiddleware } from './middleware/express.js';
50
+ export type { ExpressMiddlewareOptions } from './middleware/express.js';
51
+ export { bufferLogPlugin } from './middleware/fastify.js';
52
+ export type { FastifyPluginOptions } from './middleware/fastify.js';
53
+ export { PolicyFetcher } from './control-plane/policy-fetcher.js';
54
+ export type { PolicyFetcherOptions, RemotePolicy } from './control-plane/policy-fetcher.js';
55
+ export { TelemetryReporter } from './control-plane/telemetry-reporter.js';
56
+ export type { TelemetryReporterOptions } from './control-plane/telemetry-reporter.js';
57
+ import { BufferManager } from './core/buffer-manager.js';
58
+ import { FlashController } from './flash/flash-controller.js';
59
+ import { BufferLogTransport } from './integrations/winston.js';
60
+ import { PolicyFetcher } from './control-plane/policy-fetcher.js';
61
+ import { TelemetryReporter } from './control-plane/telemetry-reporter.js';
62
+ import type { BufferLogConfig, ResolvedConfig } from './config.js';
63
+ import type { RequestHandler } from 'express';
64
+ /**
65
+ * High-level BufferLog instance — the recommended way to use the SDK.
66
+ *
67
+ * Creates and wires together all components (BufferManager, FlashController, etc.)
68
+ * so you only need to call a few methods to integrate.
69
+ */
70
+ export declare class BufferLog {
71
+ readonly config: ResolvedConfig;
72
+ readonly bufferManager: BufferManager;
73
+ readonly flashController: FlashController;
74
+ /** Policy fetcher — only present when controlPlane is configured */
75
+ readonly policyFetcher: PolicyFetcher | null;
76
+ /** Telemetry reporter — only present when controlPlane is configured */
77
+ readonly telemetryReporter: TelemetryReporter | null;
78
+ private constructor();
79
+ /**
80
+ * Create a new BufferLog instance with the given configuration.
81
+ */
82
+ static create(userConfig?: BufferLogConfig): BufferLog;
83
+ /**
84
+ * Get an Express middleware that wraps requests in a BufferLog context.
85
+ */
86
+ expressMiddleware(options?: Partial<import('./middleware/express.js').ExpressMiddlewareOptions>): RequestHandler;
87
+ /**
88
+ * Get a Fastify plugin that wraps requests in a BufferLog context.
89
+ */
90
+ fastifyPlugin(): import("fastify").FastifyPluginCallback<import("./middleware/fastify.js").FastifyPluginOptions>;
91
+ /**
92
+ * Get Fastify plugin options pre-configured with this instance.
93
+ */
94
+ fastifyPluginOptions(options?: Partial<import('./middleware/fastify.js').FastifyPluginOptions>): {
95
+ bufferManager: BufferManager;
96
+ flashController: FlashController;
97
+ config: ResolvedConfig;
98
+ contextIdGenerator?: (req: import("fastify").FastifyRequest) => string;
99
+ tagsExtractor?: (req: import("fastify").FastifyRequest) => Record<string, string>;
100
+ };
101
+ /**
102
+ * Create a Winston transport wired to this BufferLog instance.
103
+ */
104
+ winstonTransport(options?: Partial<import('./integrations/winston.js').BufferLogTransportOptions>): BufferLogTransport;
105
+ /**
106
+ * Create a Pino destination wired to this BufferLog instance.
107
+ */
108
+ pinoDestination(options?: Partial<import('./integrations/pino.js').BufferLogPinoOptions>): import("stream").Writable;
109
+ /**
110
+ * Get metrics from the buffer manager and flash controller.
111
+ */
112
+ getMetrics(): {
113
+ buffers: Readonly<import("./core/buffer-manager.js").BufferManagerMetrics>;
114
+ flash: {
115
+ flushCount: number;
116
+ eventsFlushed: number;
117
+ adapterErrors: number;
118
+ };
119
+ };
120
+ /**
121
+ * Gracefully shut down the SDK.
122
+ * Stops policy polling, sends a final telemetry report, and cleans up.
123
+ */
124
+ shutdown(): Promise<void>;
125
+ }
126
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,185 @@
1
+ /**
2
+ * @bufferlog/sdk-node — Public API
3
+ *
4
+ * BufferLog.io Node.js SDK
5
+ * Buffer logs in memory per-request. Flush only on errors. Save 90%+ on APM costs.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { BufferLog } from '@bufferlog/sdk-node';
10
+ * import { StdOutAdapter } from '@bufferlog/sdk-node/adapters';
11
+ *
12
+ * const bufferlog = BufferLog.create({
13
+ * bufferCapacity: 100,
14
+ * adapters: [new StdOutAdapter({ pretty: true })],
15
+ * });
16
+ *
17
+ * // Express
18
+ * app.use(bufferlog.expressMiddleware());
19
+ *
20
+ * // Winston
21
+ * const logger = winston.createLogger({
22
+ * transports: [bufferlog.winstonTransport()],
23
+ * });
24
+ * ```
25
+ */
26
+ // Core
27
+ export { LogLevel, LOG_LEVEL_LABELS, LOG_LEVEL_FROM_STRING } from './core/log-event.js';
28
+ export { createLogEvent, serializeLogEvent } from './core/log-event.js';
29
+ export { RingBuffer } from './core/ring-buffer.js';
30
+ export { BufferManager } from './core/buffer-manager.js';
31
+ // Context
32
+ export { BufferLogContext } from './context/async-context.js';
33
+ // Config
34
+ export { resolveConfig } from './config.js';
35
+ // Flash Controller
36
+ export { FlashController } from './flash/flash-controller.js';
37
+ export { StdOutAdapter } from './flash/adapters/stdout.js';
38
+ export { DatadogAdapter } from './flash/adapters/datadog.js';
39
+ export { SplunkAdapter } from './flash/adapters/splunk.js';
40
+ // Integrations
41
+ export { BufferLogTransport } from './integrations/winston.js';
42
+ export { createBufferLogDestination } from './integrations/pino.js';
43
+ // Middleware
44
+ export { bufferLogMiddleware } from './middleware/express.js';
45
+ export { bufferLogPlugin } from './middleware/fastify.js';
46
+ // Control Plane
47
+ export { PolicyFetcher } from './control-plane/policy-fetcher.js';
48
+ export { TelemetryReporter } from './control-plane/telemetry-reporter.js';
49
+ // ============================================================
50
+ // High-Level API — Convenience wrapper for quick setup
51
+ // ============================================================
52
+ import { BufferManager } from './core/buffer-manager.js';
53
+ import { FlashController } from './flash/flash-controller.js';
54
+ import { StdOutAdapter } from './flash/adapters/stdout.js';
55
+ import { resolveConfig } from './config.js';
56
+ import { BufferLogTransport } from './integrations/winston.js';
57
+ import { createBufferLogDestination } from './integrations/pino.js';
58
+ import { bufferLogMiddleware } from './middleware/express.js';
59
+ import { bufferLogPlugin } from './middleware/fastify.js';
60
+ import { PolicyFetcher } from './control-plane/policy-fetcher.js';
61
+ import { TelemetryReporter } from './control-plane/telemetry-reporter.js';
62
+ /**
63
+ * High-level BufferLog instance — the recommended way to use the SDK.
64
+ *
65
+ * Creates and wires together all components (BufferManager, FlashController, etc.)
66
+ * so you only need to call a few methods to integrate.
67
+ */
68
+ export class BufferLog {
69
+ config;
70
+ bufferManager;
71
+ flashController;
72
+ /** Policy fetcher — only present when controlPlane is configured */
73
+ policyFetcher = null;
74
+ /** Telemetry reporter — only present when controlPlane is configured */
75
+ telemetryReporter = null;
76
+ constructor(config) {
77
+ this.config = config;
78
+ this.bufferManager = new BufferManager(config.bufferCapacity);
79
+ // Ensure at least a stdout adapter exists
80
+ const adapters = config.adapters.length > 0
81
+ ? config.adapters
82
+ : [new StdOutAdapter({ pretty: true })];
83
+ this.flashController = new FlashController({
84
+ adapters,
85
+ failOpen: config.failOpen,
86
+ });
87
+ // Wire control plane modules if configured
88
+ if (config.controlPlane) {
89
+ this.policyFetcher = new PolicyFetcher({
90
+ controlPlaneUrl: config.controlPlane.url,
91
+ apiKey: config.controlPlane.apiKey,
92
+ intervalMs: config.controlPlane.pollIntervalMs,
93
+ });
94
+ this.telemetryReporter = new TelemetryReporter({
95
+ controlPlaneUrl: config.controlPlane.url,
96
+ apiKey: config.controlPlane.apiKey,
97
+ intervalMs: config.controlPlane.telemetryIntervalMs,
98
+ metricsProvider: () => this.getMetrics(),
99
+ });
100
+ this.policyFetcher.start();
101
+ this.telemetryReporter.start();
102
+ }
103
+ }
104
+ /**
105
+ * Create a new BufferLog instance with the given configuration.
106
+ */
107
+ static create(userConfig) {
108
+ const config = resolveConfig(userConfig);
109
+ return new BufferLog(config);
110
+ }
111
+ /**
112
+ * Get an Express middleware that wraps requests in a BufferLog context.
113
+ */
114
+ expressMiddleware(options) {
115
+ return bufferLogMiddleware({
116
+ bufferManager: this.bufferManager,
117
+ flashController: this.flashController,
118
+ config: this.config,
119
+ ...options,
120
+ });
121
+ }
122
+ /**
123
+ * Get a Fastify plugin that wraps requests in a BufferLog context.
124
+ */
125
+ fastifyPlugin() {
126
+ return bufferLogPlugin;
127
+ }
128
+ /**
129
+ * Get Fastify plugin options pre-configured with this instance.
130
+ */
131
+ fastifyPluginOptions(options) {
132
+ return {
133
+ bufferManager: this.bufferManager,
134
+ flashController: this.flashController,
135
+ config: this.config,
136
+ ...options,
137
+ };
138
+ }
139
+ /**
140
+ * Create a Winston transport wired to this BufferLog instance.
141
+ */
142
+ winstonTransport(options) {
143
+ return new BufferLogTransport({
144
+ flashController: this.flashController,
145
+ config: this.config,
146
+ ...options,
147
+ });
148
+ }
149
+ /**
150
+ * Create a Pino destination wired to this BufferLog instance.
151
+ */
152
+ pinoDestination(options) {
153
+ return createBufferLogDestination({
154
+ flashController: this.flashController,
155
+ ...options,
156
+ });
157
+ }
158
+ /**
159
+ * Get metrics from the buffer manager and flash controller.
160
+ */
161
+ getMetrics() {
162
+ return {
163
+ buffers: this.bufferManager.getMetrics(),
164
+ flash: {
165
+ flushCount: this.flashController.flushCount,
166
+ eventsFlushed: this.flashController.eventsFlushed,
167
+ adapterErrors: this.flashController.adapterErrors,
168
+ },
169
+ };
170
+ }
171
+ /**
172
+ * Gracefully shut down the SDK.
173
+ * Stops policy polling, sends a final telemetry report, and cleans up.
174
+ */
175
+ async shutdown() {
176
+ if (this.policyFetcher) {
177
+ this.policyFetcher.stop();
178
+ }
179
+ if (this.telemetryReporter) {
180
+ await this.telemetryReporter.send(); // Final report
181
+ this.telemetryReporter.stop();
182
+ }
183
+ }
184
+ }
185
+ //# 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,37 @@
1
+ /**
2
+ * Pino Integration — BufferLog Destination Wrapper
3
+ *
4
+ * Creates a Pino destination (writable stream) that intercepts log writes
5
+ * and routes them through BufferLog's buffer/flush pipeline.
6
+ *
7
+ * Usage:
8
+ * ```ts
9
+ * import pino from 'pino';
10
+ * import { createBufferLogDestination } from '@bufferlog/sdk-node/pino';
11
+ *
12
+ * const logger = pino(
13
+ * { level: 'debug' },
14
+ * createBufferLogDestination({ flashController, fallbackDestination: pino.destination(1) })
15
+ * );
16
+ * ```
17
+ */
18
+ import { Writable } from 'node:stream';
19
+ import type { FlashController } from '../flash/flash-controller.js';
20
+ export interface BufferLogPinoOptions {
21
+ /** The flash controller to use for error-triggered flushes */
22
+ flashController: FlashController;
23
+ /** Fallback destination for logs outside a BufferLog context */
24
+ fallbackDestination?: NodeJS.WritableStream;
25
+ /** Pino numeric levels that trigger a flush. @default [50, 60] (error, fatal) */
26
+ flushOnLevels?: number[];
27
+ /** PII scrubber function */
28
+ scrubber?: (message: string, metadata?: Record<string, unknown>) => {
29
+ message: string;
30
+ metadata?: Record<string, unknown>;
31
+ };
32
+ }
33
+ /**
34
+ * Create a Pino-compatible destination stream that routes logs through BufferLog.
35
+ */
36
+ export declare function createBufferLogDestination(options: BufferLogPinoOptions): Writable;
37
+ //# sourceMappingURL=pino.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pino.d.ts","sourceRoot":"","sources":["../../src/integrations/pino.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAmBpE,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,eAAe,EAAE,eAAe,CAAC;IAEjC,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAE5C,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK;QAClE,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,oBAAoB,GAC5B,QAAQ,CAqDV"}