import axios from 'npm:axios'; import { ApiError, NetworkError } from './errors.ts'; interface Post { id: number; title: string; body: string; userId: number; } interface User { id: number; username: string; email: string; } const apiClient = axios.create({ baseURL: 'https://dummyjson.com', timeout: 2000, }); apiClient.interceptors.response.use( (response) => { console.log('Interceptors response: ', response.data); response.data['timestamp'] = new Date(); delete response.data['title']; return response; }, (error) => { if (axios.isAxiosError(error)) { console.error( 'Interceptors: Fehler ', error.response?.status, error.message ); } else { console.error('Unbekannter Fehler', error); } return Promise.reject(error); } ); async function fetchData(endpoint: string): Promise { try { const response = await apiClient.get(endpoint); return response.data; } catch (error) { if (axios.isAxiosError(error)) { throw new ApiError(error.response?.status ?? 500, error.message); } throw new NetworkError( 'Netzwerkfehler: ' + (error instanceof Error ? error.message : 'Unbekannt') ); } } async function fetchPost(): Promise { try { const post = await fetchData('/posts/1'); console.log('Empfangene Daten', post.title); } catch (error) { console.log('Fehler beim Abrufen der Daten: ', error); } } fetchPost(); async function createPost(): Promise { const payload: Omit = { title: 'TypeScript mit Axios', body: 'Dies ist ein Testpost', userId: 1, }; try { const response = await apiClient.post('/posts/add', payload); console.log('Erstellter Post', response.data); } catch (error) { console.log('Fehler beim Erstellen des Posts: ', error); } } createPost(); async function fetchWithRetry( endpoint: string, retries = 3, delay = 1000 ): Promise { for (let attempt = 1; attempt <= retries; attempt++) { try { return await fetchData(endpoint); } catch (error) { if (attempt < retries) { await new Promise((resolve) => setTimeout(resolve, delay)); delay *= 2; } else { console.error( 'API endgültig fehlgeschlagen nach ', retries, 'Versuchen: ', error ); return null; } } } return null; } fetchWithRetry('/users/1?delay=5000');