import { ISmsDriver, ISmsMessage, ISmsResponse } from "../interfaces/sms-driver.interface";
import { IHttpClient } from "../interfaces/http-client.interface";
import { HttpResponse } from "../types/driver-types";
/**
 * Base configuration interface for all drivers
 */
export interface IBaseDriverConfig {
    url: string;
    timeout?: number;
}
/**
 * Abstract base class for all SMS drivers
 * Provides common functionality and enforces interface implementation
 */
export declare abstract class BaseSmsDriver implements ISmsDriver {
    protected readonly httpClient: IHttpClient;
    protected readonly config: IBaseDriverConfig;
    constructor(config: IBaseDriverConfig, httpClient: IHttpClient);
    abstract verify(_message: ISmsMessage): Promise<ISmsResponse>;
    /**
     * Build default headers for HTTP requests
     */
    protected buildHeaders(additionalHeaders?: Record<string, string>): Record<string, string>;
    /**
     * Build URL by combining base URL with endpoint
     */
    protected buildUrl(endpoint: string): string;
    /**
     * Validate SMS message before sending
     */
    protected validateMessage(message: ISmsMessage): void;
    /**
     * Validate driver configuration
     */
    private validateConfig;
    /**
     * Handle HTTP errors and convert to appropriate exceptions
     */
    protected handleHttpRequest<T>(requestFn: () => Promise<HttpResponse<T>>): Promise<HttpResponse<T>>;
    /**
     * Handle and standardize driver errors
     */
    protected handleError(error: unknown, context?: string): never;
    /**
     * Create a standardized success response
     */
    protected createSuccessResponse(data: unknown, messageId?: string): ISmsResponse;
    /**
     * Create a standardized error response
     */
    protected createErrorResponse(error: string, errorCode?: string, data?: unknown): ISmsResponse;
    /**
     * Extract message ID from provider response
     * This method can be overridden by concrete drivers if needed
     */
    protected extractMessageId(response: unknown): string | undefined;
    /**
     * Log request/response for debugging (can be overridden)
     */
    protected log(level: "info" | "error" | "warn" | "debug", message: string, data?: unknown): void;
}
//# sourceMappingURL=base-driver.d.ts.map