import { Logger, LogLevel } from 'homebridge';
import { Dispatcher } from 'undici';
import { Checker, IErrorDetail } from 'ts-interface-checker';
import { IncomingHttpHeaders } from 'undici/types/header.js';
import { Config } from './config-types.js';
export type Binary = Dispatcher.ResponseData['body'];
export type Response = Dispatcher.ResponseData;
export type Method = Dispatcher.HttpMethod;
export type Headers = IncomingHttpHeaders;
export type Query = Dispatcher.DispatchOptions['query'];
export interface UAOptions {
    headers?: Headers;
    signal?: AbortSignal;
    [index: string]: unknown;
}
export type RequestParams = [
    method: Method,
    path: string,
    options: UAOptions | undefined,
    body: object | undefined
];
export interface Request {
    path: string;
    method: Method;
    body?: string;
    headers: Headers;
    idempotent?: boolean;
    signal?: AbortSignal;
}
export interface RequestResponse {
    request: Request;
    response: Response;
}
export declare const ELECTROLUX_GROUP_API_URL = "https://api.developer.electrolux.one";
export declare class AEGUserAgent {
    readonly log: Logger;
    readonly config: Config;
    private readonly timeout;
    readonly retryDelay: {
        min: number;
        max: number;
        factor: number;
    };
    private readonly defaultHeaders;
    private readonly client;
    private requestCount;
    constructor(log: Logger, config: Config);
    put(path: string, body: object, options?: UAOptions): Promise<void>;
    post(path: string, body: object, options?: UAOptions): Promise<void>;
    requestEmpty(...params: RequestParams): Promise<void>;
    getJSON<Type>(checker: Checker, path: string, options?: UAOptions): Promise<Type>;
    putJSON<Type>(checker: Checker, path: string, body: object, options?: UAOptions): Promise<Type>;
    postJSON<Type>(checker: Checker, path: string, body: object, options?: UAOptions): Promise<Type>;
    requestJSON<Type>(checker: Checker, ...params: RequestParams): Promise<Type>;
    request(method: Method, path: string, options?: UAOptions, body?: object, headers?: Headers): Promise<RequestResponse>;
    prepareRequest(method: Method, path: string, options?: UAOptions, body?: object, headers?: Headers): Request | Promise<Request>;
    canRetry(err: unknown, options?: UAOptions): boolean;
    requestCore(logPrefix: string, request: Request): Promise<Response>;
    logHeaders(name: string, headers: Headers): void;
    logBody(name: string, body: unknown): void;
    logCheckerValidation(level: LogLevel, message: string, request: Request, errors: IErrorDetail[], json: unknown): void;
}
//# sourceMappingURL=aegapi-ua.d.ts.map