- @bytelyst/backend-flags: createFlagRegistry() with defaults, 6 tests - @bytelyst/backend-telemetry: createTelemetryBuffer() with enabled switch, 5 tests
51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
/**
|
|
* In-memory telemetry event buffer for product backends.
|
|
*
|
|
* Products call createTelemetryBuffer() with an enabled flag,
|
|
* then use trackEvent/getBufferedEvents/flushEvents as needed.
|
|
*/
|
|
|
|
export interface TelemetryEvent {
|
|
event: string;
|
|
userId?: string;
|
|
properties?: Record<string, unknown>;
|
|
timestamp?: string;
|
|
}
|
|
|
|
export interface TelemetryBuffer {
|
|
trackEvent(event: string, userId?: string, properties?: Record<string, unknown>): void;
|
|
getBufferedEvents(): TelemetryEvent[];
|
|
flushEvents(): TelemetryEvent[];
|
|
}
|
|
|
|
export interface TelemetryBufferOptions {
|
|
/** Master switch — when false, trackEvent is a no-op. */
|
|
enabled: boolean;
|
|
}
|
|
|
|
export function createTelemetryBuffer(opts: TelemetryBufferOptions): TelemetryBuffer {
|
|
const buffer: TelemetryEvent[] = [];
|
|
|
|
return {
|
|
trackEvent(event: string, userId?: string, properties?: Record<string, unknown>): void {
|
|
if (!opts.enabled) return;
|
|
buffer.push({
|
|
event,
|
|
userId,
|
|
properties,
|
|
timestamp: new Date().toISOString(),
|
|
});
|
|
},
|
|
|
|
getBufferedEvents(): TelemetryEvent[] {
|
|
return [...buffer];
|
|
},
|
|
|
|
flushEvents(): TelemetryEvent[] {
|
|
const flushed = [...buffer];
|
|
buffer.length = 0;
|
|
return flushed;
|
|
},
|
|
};
|
|
}
|