export type TelemetryTags = Record; export type TelemetryFields = Record; export type TelemetryLevel = 'metrics' | 'trace'; export interface TelemetryEvent { name: string; at: number; tags?: TelemetryTags; fields?: TelemetryFields; } export interface Telemetry { enabled?(level?: TelemetryLevel): boolean; emit(event: TelemetryEvent): void; counter?(name: string, value?: number, tags?: TelemetryTags): void; histogram?(name: string, value: number, tags?: TelemetryTags): void; event?(name: string, fields?: TelemetryFields, tags?: TelemetryTags): void; span?(name: string, fn: () => Promise | Type, tags?: TelemetryTags): Promise | Type; } export declare const NoopTelemetry: Telemetry; export declare function setGlobalTelemetry(telemetry: Telemetry | undefined): void; export declare function getGlobalTelemetry(): Telemetry | undefined; export declare function emitTelemetryEvent(event: { name: string; at?: number; tags?: TelemetryTags; fields?: Record; telemetry?: Telemetry; level?: TelemetryLevel; }): void; export declare function emitTelemetryCounter(options: { name: string; value?: number; tags?: TelemetryTags; telemetry?: Telemetry; level?: TelemetryLevel; }): void; export declare function emitTelemetryHistogram(options: { name: string; value: number; tags?: TelemetryTags; telemetry?: Telemetry; level?: TelemetryLevel; }): void; export declare function withTelemetrySpan(name: string, fn: () => Promise | Type, tags?: TelemetryTags, options?: { telemetry?: Telemetry; level?: TelemetryLevel; fieldsOnSuccess?: (value: Type) => Record | undefined; }): Promise;