@mirad-work/sms-core
Version:
A framework-agnostic TypeScript SMS service core with provider abstraction for Iranian SMS providers
62 lines • 2.29 kB
TypeScript
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