UNPKG

guardz-axios

Version:

Type-safe HTTP client built on top of Axios with runtime validation using guardz. Part of the guardz ecosystem for comprehensive TypeScript type safety.

131 lines 5.85 kB
/** * Unified API Layer * Integrates domain-driven architecture with existing patterns * Following Composition over Inheritance (CoI) principles */ import { RequestService, Logger } from "../services/request-service"; import { CompleteRequestConfig, RequestResult, RequestStatus, ErrorType } from "../domain/types"; import { ValidationGuard } from "../domain/types"; import { AxiosInstance } from "axios"; /** * Unified API Configuration */ export interface UnifiedApiConfig { baseURL?: string; timeout?: number; headers?: Record<string, string>; axiosInstance?: AxiosInstance; logger?: Logger; defaultRetryConfig?: { attempts: number; delay: number; backoff: "linear" | "exponential"; }; } /** * Unified API Class * Provides a clean interface combining all patterns */ export declare class UnifiedApi { private requestService; private defaultConfig; constructor(config?: UnifiedApiConfig); /** * Pattern 1: Curried Functions (Functional Style) */ createSafeGet<T>(guard: ValidationGuard<T>): (url: string, config?: Partial<CompleteRequestConfig<T>>) => Promise<RequestResult<T>>; createSafePost<T>(guard: ValidationGuard<T>): (url: string, data?: unknown, config?: Partial<CompleteRequestConfig<T>>) => Promise<RequestResult<T>>; createSafePut<T>(guard: ValidationGuard<T>): (url: string, data?: unknown, config?: Partial<CompleteRequestConfig<T>>) => Promise<RequestResult<T>>; createSafePatch<T>(guard: ValidationGuard<T>): (url: string, data?: unknown, config?: Partial<CompleteRequestConfig<T>>) => Promise<RequestResult<T>>; createSafeDelete<T>(guard: ValidationGuard<T>): (url: string, config?: Partial<CompleteRequestConfig<T>>) => Promise<RequestResult<T>>; /** * Pattern 2: Configuration-first (Apollo/React Query style) */ safeRequest<T>(config: CompleteRequestConfig<T>): Promise<RequestResult<T>>; /** * Pattern 3: Fluent API Builder */ safe(): SafeRequestBuilder<unknown>; /** * Pattern 4: Context API (React Context style) */ createContext(): SafeApiContext; /** * Utility Methods */ isSuccess<T>(result: RequestResult<T>): result is { status: RequestStatus.SUCCESS; data: T; }; isError<T>(result: RequestResult<T>): result is { status: RequestStatus.ERROR; code: number; message: string; type: ErrorType; }; extractData<T>(result: RequestResult<T>): T | null; extractError<T>(result: RequestResult<T>): { code: number; message: string; type: ErrorType; } | null; } /** * Fluent API Builder */ declare class SafeRequestBuilder<T = unknown> { private config; private requestService; private defaultConfig; constructor(requestService: RequestService, defaultConfig: Partial<CompleteRequestConfig<any>>); get(url: string): SafeRequestBuilder<T>; post(url: string, data?: unknown): SafeRequestBuilder<T>; put(url: string, data?: unknown): SafeRequestBuilder<T>; patch(url: string, data?: unknown): SafeRequestBuilder<T>; delete(url: string): SafeRequestBuilder<T>; guard<U>(guardFn: ValidationGuard<U>): SafeRequestBuilder<U>; tolerance(enabled?: boolean): SafeRequestBuilder<T>; identifier(id: string): SafeRequestBuilder<T>; timeout(ms: number): SafeRequestBuilder<T>; headers(headers: Record<string, string>): SafeRequestBuilder<T>; retry(config: { attempts: number; delay: number; backoff: "linear" | "exponential"; }): SafeRequestBuilder<T>; execute(): Promise<RequestResult<T>>; } /** * Safe API Context */ declare class SafeApiContext { private requestService; private defaultConfig; constructor(requestService: RequestService, defaultConfig: Partial<CompleteRequestConfig<any>>); get<T>(url: string, config: { guard: ValidationGuard<T>; } & Partial<CompleteRequestConfig<T>>): Promise<RequestResult<T>>; post<T>(url: string, data: unknown, config: { guard: ValidationGuard<T>; } & Partial<CompleteRequestConfig<T>>): Promise<RequestResult<T>>; put<T>(url: string, data: unknown, config: { guard: ValidationGuard<T>; } & Partial<CompleteRequestConfig<T>>): Promise<RequestResult<T>>; patch<T>(url: string, data: unknown, config: { guard: ValidationGuard<T>; } & Partial<CompleteRequestConfig<T>>): Promise<RequestResult<T>>; delete<T>(url: string, config: { guard: ValidationGuard<T>; } & Partial<CompleteRequestConfig<T>>): Promise<RequestResult<T>>; } /** * Factory Functions for Easy Usage */ export declare function createUnifiedApi(config?: UnifiedApiConfig): UnifiedApi; export declare function createSafeGet<T>(guard: ValidationGuard<T>, config?: UnifiedApiConfig): (url: string, config?: Partial<CompleteRequestConfig<T>> | undefined) => Promise<RequestResult<T>>; export declare function createSafePost<T>(guard: ValidationGuard<T>, config?: UnifiedApiConfig): (url: string, data?: unknown, config?: Partial<CompleteRequestConfig<T>> | undefined) => Promise<RequestResult<T>>; export declare function createSafePut<T>(guard: ValidationGuard<T>, config?: UnifiedApiConfig): (url: string, data?: unknown, config?: Partial<CompleteRequestConfig<T>> | undefined) => Promise<RequestResult<T>>; export declare function createSafePatch<T>(guard: ValidationGuard<T>, config?: UnifiedApiConfig): (url: string, data?: unknown, config?: Partial<CompleteRequestConfig<T>> | undefined) => Promise<RequestResult<T>>; export declare function createSafeDelete<T>(guard: ValidationGuard<T>, config?: UnifiedApiConfig): (url: string, config?: Partial<CompleteRequestConfig<T>> | undefined) => Promise<RequestResult<T>>; export {}; //# sourceMappingURL=unified-api.d.ts.map