import { AuthInfo } from '@sdc-monitor/types';
import { BaseClientType } from '@sdc-monitor/types';
import { BaseOptionsFieldsIntegrationType } from '@sdc-monitor/types';
import { BaseOptionsType } from '@sdc-monitor/types';
import { BasePluginType } from '@sdc-monitor/types';
import { BreadcrumbPushData } from '@sdc-monitor/types';
import { EventTypes } from '@sdc-monitor/shared';
import { LogTypes } from '@sdc-monitor/types';
import { Queue } from '@sdc-monitor/utils';
import { ReportDataType } from '@sdc-monitor/types';
import { TransportDataType } from '@sdc-monitor/types';
import { VueInstance } from '@sdc-monitor/types';

export declare abstract class BaseClient<O extends BaseOptionsFieldsIntegrationType = BaseOptionsFieldsIntegrationType, E extends EventTypes = EventTypes> implements BaseClientType {
    SDK_NAME: string;
    SDK_VERSION: string;
    options: BaseOptionsFieldsIntegrationType;
    abstract breadcrumb: Breadcrumb;
    abstract transport: BaseTransport;
    constructor(options: O);
    use(plugins: BasePluginType<E>[]): void;
    getOptions(): BaseOptionsFieldsIntegrationType;
    abstract isPluginEnable(name: EventTypes): boolean;
    abstract log(data: LogTypes): void;
}

export declare class BaseOptions<O extends BaseOptionsFieldsIntegrationType = BaseOptionsFieldsIntegrationType> implements BaseOptionsType<O> {
    enableTraceId: boolean;
    filterXhrUrlRegExp: RegExp;
    includeHttpUrlTraceIdRegExp: RegExp;
    traceIdFieldName: string;
    throttleDelayTime: number;
    beforeAppAjaxSend: any;
    vue: VueInstance;
    constructor();
    bindOptions(options: O): void;
    isFilterHttpUrl(url: string): boolean;
    setTraceId(httpUrl: string, callback: (headerFieldName: string, traceId: string) => void): void;
}

export declare abstract class BaseTransport<O extends BaseOptionsFieldsIntegrationType = BaseOptionsFieldsIntegrationType> {
    apikey: string;
    dsn: string;
    queue: Queue;
    beforeDataReport: Promise<TransportDataType | null | undefined | boolean> | TransportDataType | any | null | undefined | boolean;
    backTrackerId: unknown;
    configReportUrl: unknown;
    maxDuplicateCount: number;
    constructor();
    getAuthInfo(): AuthInfo;
    getTrackerId(): string | number;
    isSelfDsn(targetUrl: string): boolean;
    bindOptions(options?: Partial<O>): void;
    send(data: any, breadcrumb?: BreadcrumbPushData[]): Promise<void>;
    abstract post(data: TransportDataType | any, url: string): void;
    abstract sendToServer(data: TransportDataType | any, url: string): void;
    abstract getTransportData(data: ReportDataType): TransportDataType;
}

export declare class Breadcrumb<O extends BaseOptionsFieldsIntegrationType = BaseOptionsFieldsIntegrationType> {
    private maxBreadcrumbs;
    private beforePushBreadcrumb;
    private stack;
    constructor(options?: Partial<O>);
    push(data: BreadcrumbPushData): BreadcrumbPushData[];
    private immediatePush;
    private shift;
    clear(): void;
    getStack(): BreadcrumbPushData[];
    bindOptions(options?: Partial<O>): void;
}

declare type MonitorCallback = (data: any) => void;

export declare class Subscribe<T> {
    dep: Map<T, MonitorCallback[]>;
    constructor();
    watch(eventName: T, callBack: (data: any) => any): void;
    notify<D = any>(eventName: T, data: D): void;
}

export { }
