mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-21 18:41:52 +02:00
✨ 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>
This commit is contained in:
parent
2b3210df85
commit
e23d1194d8
12 changed files with 562 additions and 292 deletions
|
|
@ -1,7 +1,51 @@
|
|||
/**
|
||||
* Shared API Client for ManaCore Apps
|
||||
* Provides a unified way to make API calls with authentication.
|
||||
* @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);
|
||||
* ```
|
||||
*/
|
||||
|
||||
export { createApiClient, type ApiClientConfig, type ApiClient } from './client';
|
||||
export { type ApiResponse, type FetchOptions, type HttpMethod } from './types';
|
||||
// Client factory
|
||||
export { createApiClient } from './client';
|
||||
|
||||
// Types
|
||||
export type {
|
||||
ApiClient,
|
||||
ApiClientConfig,
|
||||
ApiError,
|
||||
ApiErrorCode,
|
||||
ApiResult,
|
||||
RequestOptions,
|
||||
} from './types';
|
||||
|
||||
// Utilities
|
||||
export { buildQueryString, getBaseUrl } from './utils';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue