import type { AnnulmentOperationType, DateTimeIntervalParamType, InvoiceChainQueryType, InvoiceDigestType, InvoiceDirectionType, InvoiceNumberQueryType, InvoiceOperationType, ManageAnnulmentResponse, ManageInvoiceResponse, QueryInvoiceChainDigestResponse, QueryInvoiceCheckResponse, QueryInvoiceDataResponse, QueryInvoiceDigestResponse, QueryTaxpayerResponse, QueryTransactionListResponse, QueryTransactionStatusResponse, RequestStatusType } from "nav-osa-types";
import type { NavApiConfig } from "./configValidator.js";
export interface NavApiResponse<T> {
    data: T;
    xmlValidationWarnings?: string[];
}
export interface DigestAllProgress {
    currentChunk: number;
    totalChunks: number;
    currentPage: number;
    availablePages: number;
    chunkFrom: string;
    chunkTo: string;
    digestsCollected: number;
}
export declare class NavConnect {
    private _config;
    private _baseUrl;
    private _client;
    private _validateResponse;
    private _httpTimeoutMs;
    private _queue;
    static create(config: NavApiConfig): NavConnect;
    constructor(config: NavApiConfig);
    get taxNumber(): string;
    get testSystem(): boolean;
    get technicalUser(): string;
    /**
     * Builds the request XML, posts it through the rate limiter, validates
     * the response (unless disabled), parses it and checks the result
     * field. All public operations share this single error-transformation
     * chain.
     */
    private sendRequest;
    queryInvoiceDigest(params: {
        page: number;
        insDate: DateTimeIntervalParamType;
        invoiceDirectionType: InvoiceDirectionType;
    }): Promise<NavApiResponse<QueryInvoiceDigestResponse>>;
    queryInvoiceDigestAll(params: {
        insDate: DateTimeIntervalParamType;
        invoiceDirectionType: InvoiceDirectionType;
        throttleMs?: number;
        onProgress?: (progress: DigestAllProgress) => void;
    }): Promise<InvoiceDigestType[]>;
    private buildInvoiceNumberQueryRequest;
    queryInvoiceData(params: InvoiceNumberQueryType): Promise<NavApiResponse<QueryInvoiceDataResponse>>;
    queryInvoiceCheck(params: InvoiceNumberQueryType): Promise<NavApiResponse<QueryInvoiceCheckResponse>>;
    private validateResponseXml;
    private validateSequentialIndices;
    tokenExchange(): Promise<{
        token: string;
        tokenValidityFrom: string;
        tokenValidityTo: string;
        serverTimestamp?: string;
    }>;
    manageInvoice(params: {
        invoiceOperation: InvoiceOperationType[];
        compressedContent: boolean;
        skipXmlValidation: boolean;
        exchangeToken?: string;
    }): Promise<NavApiResponse<ManageInvoiceResponse>>;
    manageAnnulment(params: {
        annulmentOperations: AnnulmentOperationType[];
        exchangeToken?: string;
    }): Promise<NavApiResponse<ManageAnnulmentResponse>>;
    queryTransactionStatus(params: {
        transactionId: string;
        returnOriginalRequest?: boolean;
    }): Promise<NavApiResponse<QueryTransactionStatusResponse>>;
    queryTransactionList(params: {
        page: number;
        insDate: DateTimeIntervalParamType;
        requestStatus?: RequestStatusType;
    }): Promise<NavApiResponse<QueryTransactionListResponse>>;
    queryTaxpayer(params: {
        taxNumber: string;
    }): Promise<NavApiResponse<QueryTaxpayerResponse>>;
    queryInvoiceChainDigest(params: {
        page: number;
        invoiceChainQuery: InvoiceChainQueryType;
    }): Promise<NavApiResponse<QueryInvoiceChainDigestResponse>>;
}
