/** * @file Services Module Index * @description Central export for all service utilities including * HTTP clients, interceptors, caching, batching, versioning, and optimistic updates. * * This module provides a complete enterprise-grade service layer for React applications: * * - **HTTP Client**: Centralized HTTP client with interceptor support * - **Type-Safe API**: Contract-first API clients with Zod validation * - **Circuit Breakers**: Fault tolerance and service health monitoring * - **Offline Support**: Persistent queue for offline-first applications * - **Request Batching**: DataLoader pattern for N+1 query prevention * - **API Versioning**: Multiple versioning strategies with migration support * - **Optimistic Updates**: Seamless UI with conflict resolution * - **Enhanced Interceptors**: Tracing, retry, and telemetry * * @example Quick Start * ```typescript * import { initializeServiceLayer, serviceLayer } from '@/lib/services'; * * // Initialize during app bootstrap * await initializeServiceLayer({ * apiBaseUrl: 'https://api.example.com', * enableOfflineQueue: true, * enableCircuitBreakers: true, * }); * * // Use the HTTP client * const response = await httpClient.get('/users'); * * // Use typed API clients * const userApi = createUserApiClient(); * const users = await userApi.getUsers({ query: { page: 1 } }); * ``` */ export { serviceLayer, initializeServiceLayer, getServiceLayerStatus, disposeServiceLayer, type ServiceLayerConfig, type ServiceLayerStatus, type TelemetryConfig, type ServiceMetric, type ServiceError, } from './service-layer-facade'; export { /** @deprecated Use `ApiClient` from `@/lib/api` instead */ HttpClient, /** @deprecated Use `apiClient` from `@/lib/api` instead */ httpClient, /** @deprecated Use `ApiError` from `@/lib/api/types` instead */ HttpError, type HttpRequestConfig, type HttpResponse, type RequestInterceptor, type ResponseInterceptor, type ErrorInterceptor, type HttpClientConfig, type HttpErrorCategory, type HttpErrorSeverity, } from './http'; export { createAuthInterceptor, createRequestLoggerInterceptor, createResponseLoggerInterceptor, createErrorLoggerInterceptor, createRetryInterceptor, createTokenRefreshInterceptor, createCsrfInterceptor, createRequestIdInterceptor, createTimingInterceptor, } from './interceptors'; export { RequestCache, requestCache, createCachedFetcher, withCache, type CacheConfig, } from './cache'; export { createResourceClient, resourceClients, type ResourceApiResponse, type ResourceClientConfig, type ResourceClient, /** @deprecated Use `createResourceClient` instead */ createApiClient, /** @deprecated Use `resourceClients` instead */ apiClients, /** @deprecated Use `ResourceApiResponse` instead */ type ApiResponse, /** @deprecated Use `ResourceClientConfig` instead */ type ApiClientConfig, /** @deprecated Use `ResourceClient` instead */ type ApiClient, type PaginatedResponse, type ListQueryParams, } from './api-clients'; export { RequestQueue, RateLimiter, RateLimitError, RequestBatcher, globalRequestQueue, rateLimiters, type RequestPriority, type RequestQueueConfig, type RateLimiterConfig, type BatcherConfig, } from './request-queue'; export { createTypedApiClient, defineEndpoint, defineGet, definePost, definePut, definePatch, defineDelete, paginationSchema, createPaginatedResponseSchema, idParamSchema, errorResponseSchema, successResponseSchema, userSchema, userApiContract, createUserApiClient, ApiValidationError, ApiContractError, type HttpMethod, type EndpointDefinition, type ApiContract, type InferRequest, type InferResponse, type RequestOptions, type TypedApiClient, type TypedApiClientConfig, type User, type PaginationParams, } from './type-safe-api-client'; export { InterceptorChain, enhancedInterceptorChain, createEnhancedInterceptorChain, InterceptorPriority, createCircuitBreakerInterceptor, CircuitBreakerError, createTracingInterceptors, createCorrelationInterceptor, type InterceptorContext, type ContextualRequestInterceptor, type ContextualResponseInterceptor, type ContextualErrorInterceptor, type CircuitBreakerState, type CircuitBreakerConfig, type TracingConfig, type TraceSpan, type TimingConfig, type TimingData, type RetryConfig, } from './enhanced-interceptors'; export { useOptimisticMutation, useMutationQueue, createListOptimisticUpdates, OptimisticMutationQueue, globalMutationQueue, deepClone, deepMerge, type QuerySnapshot, type OptimisticContext, type ConflictStrategy, type ConflictContext, type OptimisticUpdateConfig, type ListItem, type ListResponse, type QueuedMutation, type MutationQueueConfig, type QueueStatus, } from './optimistic-mutations'; export { DataLoader, RequestDeduplicator, globalDeduplicator, deduplicatedFetch, GraphQLBatcher, createResourceLoader, createKeyedLoader, type BatchFunction, type KeySerializer, type DataLoaderConfig, type DataLoaderStats, type DeduplicatorConfig, type GraphQLOperation, type GraphQLBatchResponse, type GraphQLBatcherConfig, } from './data-loader-batching'; export { VersionedApiClient, createVersionedApi, VersioningStrategy, parseVersion, versionToNumber, compareVersions, isVersionInRange, getLatestVersion, createFieldRenamingTransformer, createEndpointMappingTransformer, composeTransformers, VersionNotSupportedError, VersionDeprecatedError, exampleVersionedApi, type ApiVersion, type VersionDeprecation, type VersionTransformer, type VersionConfig, type VersionNegotiationResult, type VersionedApiClientConfig, } from './api-versioning'; export { ServiceCircuitBreaker, serviceRegistry, setupDefaultServices, createServiceFetch, type ServiceHealth, type ServiceConfig, type ServiceStatus, type ServiceStateChangeEvent, } from './service-circuit-breaker'; export { PersistentOfflineQueue, offlineQueue, type QueueItemStatus, type QueuedRequest, type OfflineQueueOptions, type EnqueueOptions, type QueueStats, } from './persistent-offline-queue';