import type { NormalizedSuperJsonDocument } from '@superfaceai/ast'; import type { IConfig, ICrypto, ILogger, ITimers } from '../../../interfaces'; import type { IFetch } from '../../interpreter'; import type { Events } from '../events'; import type { FailurePolicyReason } from '../failure'; export declare const enum FailoverReason { NETWORK_ERROR_DNS = "NETWORK_ERROR_DNS", NETWORK_ERROR_SSL = "NETWORK_ERROR_SSL", NETWORK_ERROR_CONNECTION = "NETWORK_ERROR_CONNECTION", NETWORK_ERROR_TIMEOUT = "NETWORK_ERROR_TIMEOUT", REQUEST_ERROR_TIMEOUT = "REQUEST_ERROR_TIMEOUT", REQUEST_ERROR_ABORT = "REQUEST_ERROR_ABORT", HTTP_ERROR_500 = "HTTP_ERROR_500", UNEXPECTED_ERROR = "UNEXPECTED_ERROR" } declare type EventInputBase = { eventType: 'SDKInit' | 'PerformMetrics' | 'ProviderChange'; occurredAt: Date; }; export declare type SDKInitInput = EventInputBase & { eventType: 'SDKInit'; }; export declare type PerformMetricsInput = EventInputBase & { eventType: 'PerformMetrics'; profile: string; provider: string; success: boolean; }; export declare type ProviderChangeInput = EventInputBase & { eventType: 'ProviderChange'; from: string; to?: string; profile: string; reasons?: { reason: FailurePolicyReason; occurredAt: Date; }[]; }; export declare type EventInput = SDKInitInput | PerformMetricsInput | ProviderChangeInput; export declare function hookMetrics(events: Events, metricReporter: MetricReporter): void; export declare class MetricReporter { private readonly config; private readonly timers; private readonly fetchInstance; private timer; private startTime; private readonly sdkToken; private performMetrics; private configHash; private anonymizedSuperJson; private readonly log; constructor(config: IConfig, timers: ITimers, fetchInstance: IFetch, crypto: ICrypto, superJson?: NormalizedSuperJsonDocument, logger?: ILogger); reportEvent(event: EventInput): void; flush(): void; private setTimer; private reportSdkInitEvent; private reportPerformMetricsEvent; private reportProviderChangeEvent; private createSDKInitEventPayload; private createProviderChangeEventPayload; private aggregateMetrics; private sendEvent; } export {};