mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-15 19:59:39 +02:00
Create unified API client for all web apps with: - createApiClient factory function - ApiResult<T> Go-style error handling - HTTP methods: get, post, put, patch, delete, upload - Auto token handling via getAuthToken callback - Timeout support with AbortController - Retry logic with exponential backoff - Runtime URL injection for Docker - FormData support for file uploads Migrate clock app as proof of concept: - Replace local fetchApi with shared createApiClient - Update stores to use ApiError.message Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
/**
|
|
* @manacore/shared-api-client
|
|
*
|
|
* Unified API client for all ManaCore web applications.
|
|
* Provides consistent error handling, token management, and retry logic.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* import { createApiClient } from '@manacore/shared-api-client';
|
|
* import { authStore } from '$lib/stores/auth.svelte';
|
|
*
|
|
* // Create client instance
|
|
* export const api = createApiClient({
|
|
* baseUrl: 'http://localhost:3014',
|
|
* apiPrefix: '/api/v1',
|
|
* getAuthToken: () => authStore.getValidToken(),
|
|
* timeout: 30000,
|
|
* retries: 2,
|
|
* });
|
|
*
|
|
* // Make requests
|
|
* const { data, error } = await api.get<User[]>('/users');
|
|
*
|
|
* if (error) {
|
|
* if (error.code === 'UNAUTHORIZED') {
|
|
* // Handle auth error
|
|
* }
|
|
* console.error('API Error:', error.message);
|
|
* return;
|
|
* }
|
|
*
|
|
* // data is typed as User[]
|
|
* console.log('Users:', data);
|
|
* ```
|
|
*/
|
|
|
|
// Client factory
|
|
export { createApiClient } from './client';
|
|
|
|
// Types
|
|
export type {
|
|
ApiClient,
|
|
ApiClientConfig,
|
|
ApiError,
|
|
ApiErrorCode,
|
|
ApiResult,
|
|
RequestOptions,
|
|
} from './types';
|
|
|
|
// Utilities
|
|
export { buildQueryString, getBaseUrl } from './utils';
|