import { IBacktraceClientOptions, InitBacktraceClientOptions } from './model/backtraceClientOptions';
import { BacktraceMetrics } from './model/backtraceMetrics';
import { BacktraceReport } from './model/backtraceReport';
import { BacktraceResult } from './model/backtraceResult';
import { Breadcrumbs } from './model/breadcrumbs';
/**
 * Backtrace client
 */
export declare class BacktraceClient {
    options: IBacktraceClientOptions;
    breadcrumbs: Breadcrumbs;
    readonly attributes: {
        [index: string]: any;
    };
    private _backtraceApi;
    readonly _backtraceMetrics: BacktraceMetrics | undefined;
    private _clientRateLimit;
    constructor(clientOptions: InitBacktraceClientOptions);
    private getClientAttributes;
    /**
     * Memorize selected values from application.
     * Memorized attributes will be available in your Backtrace report.
     * Memorized attributes will be only available for one report.
     * @param key attribute key
     * @param value attribute value
     */
    memorize(key: string, value: any): void;
    /**
     * Set custom client attribute
     * Memorized attributes will be available in your Backtrace report.
     * Memorized attributes will be only available for one report.
     * @param key attribute key
     * @param value attribute value
     */
    setAttribute(key: string, value: any): void;
    createReport(payload: Error | string, reportAttributes?: object | undefined, attachment?: string | object): BacktraceReport;
    /**
     * Send report asynchronously to Backtrace
     * @param payload report payload
     * @param reportAttributes attributes
     * @param attachment data to be converted to a Blob and sent as attachment with report
     */
    reportAsync(payload: Error | string, reportAttributes?: object | undefined, attachment?: string | object): Promise<BacktraceResult>;
    /**
     * Send report synchronosuly to Backtrace
     * @param payload report payload - error or string
     * @param reportAttributes attributes
     * @param attachment data to be converted to a Blob and sent as attachment with report
     */
    reportSync(payload: Error | string, reportAttributes?: object | undefined, attachment?: string | object): BacktraceResult;
    sendReport(report: BacktraceReport, callback?: (err?: Error, res?: BacktraceResult) => void): BacktraceResult;
    sendAsync(report: BacktraceReport): Promise<BacktraceResult>;
    private testClientLimits;
    private samplingHit;
    private getSubmitUrl;
    private registerHandlers;
    private registerPromiseHandler;
    private registerGlobalHandler;
    private readAttributes;
    private getOptionsWithDefaults;
}
