import { Logger, LogLevel } from 'homebridge';
import { IncomingHttpHeaders } from 'http';
import { Dispatcher } from 'undici';
import { Checker, IErrorDetail } from 'ts-interface-checker';
import { ParsedUrlQueryInput } from 'node:querystring';
import { ConfigPlugin } from './config-types.js';
export type Method = Dispatcher.HttpMethod;
export type Headers = IncomingHttpHeaders;
export type Response = Dispatcher.ResponseData;
export interface Request {
    method: Method;
    path: string;
    headers: Headers;
    body?: string;
    idempotent?: boolean;
}
export type SSE = Record<string, string>;
export declare class APIUserAgent {
    readonly log: Logger;
    readonly config: ConfigPlugin;
    readonly language: string;
    readonly url: string;
    private readonly requestTimeout;
    private readonly streamTimeout;
    private readonly defaultHeaders;
    private requestCount;
    private earliestRetry;
    constructor(log: Logger, config: ConfigPlugin, language: string);
    get<Type>(checker: Checker, path: string): Promise<Type>;
    getStream(path: string): Promise<{
        request: Request;
        response: Response;
        stream: AsyncGenerator<SSE, void, void>;
    }>;
    getRedirect(path: string): Promise<URL>;
    put(path: string, body: object): Promise<void>;
    post<Type>(checker: Checker, path: string, form: ParsedUrlQueryInput): Promise<Type>;
    delete(path: string): Promise<void>;
    getEmptyResponse(request: Request, response: Response): Promise<void>;
    getJSONResponse<Type>(checker: Checker, request: Request, response: Response): Promise<Type>;
    getRedirectResponse(request: Request, response: Response): Promise<URL>;
    getSSEResponse(request: Request, response: Response): AsyncGenerator<SSE, void, void>;
    request(method: Method, path: string, options?: Partial<Request>): Promise<{
        request: Request;
        response: Response;
    }>;
    prepareRequest(method: Method, path: string, options?: Partial<Request>): Promise<Request>;
    canRetry(err: unknown): boolean;
    get retryDelay(): number;
    set retryDelay(ms: number);
    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 | undefined, errors: IErrorDetail[], json: unknown): void;
}
//# sourceMappingURL=api-ua.d.ts.map