managarten/packages/shared-api-client/src/index.ts
Till-JS e23d1194d8 feat: add @manacore/shared-api-client package
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>
2026-01-29 14:19:55 +01:00

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';