import {AnyEventResponse, EventType, IRequestPayload} from '../events'; export interface VisitorIdProvider { getCurrentVisitorId: () => Promise; setCurrentVisitorId: (visitorId: string) => void; } export interface AnalyticsRequestClient { sendEvent(eventType: string, payload: IRequestPayload): Promise; deleteHttpCookieVisitorId: () => Promise; } export interface IAnalyticsClientOptions { baseUrl: string; token?: string; visitorIdProvider: VisitorIdProvider; preprocessRequest?: PreprocessAnalyticsRequest; } export type AnalyticsClientOrigin = 'analyticsFetch' | 'analyticsBeacon'; export type PreprocessAnalyticsRequest = ( request: IAnalyticsRequestOptions, clientOrigin: AnalyticsClientOrigin, ) => IAnalyticsRequestOptions | Promise; export interface IAnalyticsRequestOptions extends RequestInit { url: string; } export class NoopAnalyticsClient implements AnalyticsRequestClient { public async sendEvent(_: EventType, __: IRequestPayload): Promise { return Promise.resolve(); } public async deleteHttpCookieVisitorId() { return Promise.resolve(); } }