export type TelemetryCategory = "mcp" | "runtime" | "custom"; export interface TelemetryEventInput { name: string; category: TelemetryCategory; properties?: Record; } export interface TelemetryEventRecord { eventId: string; timestamp: string; category: TelemetryCategory; name: string; mcpVersion: string; libVersion?: string | null; vendor?: string | null; platform: "mcp_server"; osVersion?: string | null; deviceModel?: string | null; properties: Record; userSegment?: string | null; enqueuedAtMs: number; } export interface TelemetryPoster { post(events: TelemetryEventRecord[]): Promise; } export interface TelemetryClientOptions { poster?: TelemetryPoster; flushIntervalMs?: number; flushBatchSize?: number; retryMax?: number; retryTtlMs?: number; now?: () => number; osVersion?: string | null; enabled?: () => boolean; } /** Defaults aligned with Android/iOS clients. */ export declare const TELEMETRY_DEFAULTS: { readonly flushIntervalMs: 30000; readonly flushBatchSize: 50; readonly retryMax: 500; readonly retryTtlMs: number; }; export declare class McpTelemetryClient { private pending; private retry; private flushTimer; private retryTimer; private userSegment; private readonly poster; private readonly flushIntervalMs; private readonly flushBatchSize; private readonly retryMax; private readonly retryTtlMs; private readonly now; private readonly osVersion; private readonly enabled; constructor(opts?: TelemetryClientOptions); /** Record an event. No-op when consent=declined. */ emit(ev: TelemetryEventInput): void; setUserSegment(segment: string | null): void; /** Flush buffered events. Resolves after POST (success or retry enqueue). */ flush(_reason?: string): Promise; /** Drain retry queue on shutdown. One-shot attempt. */ drain(): Promise; /** Internal: periodic flush timer. */ private scheduleInterval; private scheduleRetry; } export declare function retryBackoffMs(attempt: number): number; /** Default poster — gzip + POST to backend /api/telemetry/events. */ export declare class HttpTelemetryPoster implements TelemetryPoster { post(events: TelemetryEventRecord[]): Promise; } //# sourceMappingURL=client.d.ts.map