export declare const ACME_DIRECTORIES: {
    readonly production: 'https://acme-v02.api.letsencrypt.org/directory';
    readonly staging: 'https://acme-staging-v02.api.letsencrypt.org/directory';
};
export interface AcmeClientOptions {
    /**
     * Use staging server for testing
     * @default false
     */
    staging?: boolean;
    /**
     * Account email for Let's Encrypt notifications
     */
    email: string;
    /**
     * Account key in PEM format (optional, will be generated if not provided)
     */
    accountKey?: string;
}
export interface AcmeChallenge {
    type: 'http-01' | 'dns-01';
    token: string;
    keyAuthorization: string;
    /**
     * For HTTP-01: URL path to serve the challenge
     * For DNS-01: TXT record name
     */
    identifier: string;
    /**
     * For DNS-01: The value to put in the TXT record
     */
    dnsValue?: string;
}
export interface AcmeCertificate {
    certificate: string;
    privateKey: string;
    chain: string;
    fullchain: string;
    expiresAt: Date;
}
/**
 * ACME Client for Let's Encrypt certificate management
 */
export declare class AcmeClient {
    private directoryUrl;
    private email;
    private accountKey;
    private accountUrl;
    private directory;
    private nonce;
    constructor(options: AcmeClientOptions);
    /**
     * Generate a new account key pair
     */
    private generateAccountKey;
    /**
     * Get the ACME directory
     */
    private getDirectory;
    /**
     * Get a fresh nonce for requests
     */
    private getNonce;
    /**
     * Create JWK from account key
     */
    private getJwk;
    /**
     * Calculate JWK thumbprint
     */
    private getJwkThumbprint;
    /**
     * Base64URL encode
     */
    private base64UrlEncode;
    /**
     * Sign a payload for ACME request
     */
    private signPayload;
    /**
     * Make a signed ACME request
     */
    private acmeRequest;
    /**
     * Register or get existing account
     */
    registerAccount(): Promise<string>;
    /**
     * Create a new certificate order
     */
    createOrder(domains: string[]): Promise<{
        orderUrl: string;
        authorizations: string[];
        finalize: string;
    }>;
    /**
     * Get authorization challenges
     */
    getAuthorization(authUrl: string): Promise<{
        domain: string;
        challenges: AcmeChallenge[];
    }>;
    /**
     * Respond to a challenge (tell ACME server we're ready)
     */
    respondToChallenge(challengeUrl: string): Promise<void>;
    /**
     * Poll for authorization status
     */
    waitForAuthorization(authUrl: string, maxAttempts?: number): Promise<void>;
    /**
     * Generate a CSR (Certificate Signing Request)
     */
    private generateCsr;
    /**
     * Create a simple CSR (placeholder - would need proper implementation)
     */
    private createSimpleCsr;
    /**
     * Finalize the order and get the certificate
     */
    finalizeOrder(finalizeUrl: string, domains: string[]): Promise<AcmeCertificate>;
    /**
     * Get the account key (for storage/reuse)
     */
    getAccountKey(): string;
}
