v1.4.2

Examples & Recipes

Below are complete, copy-pasteable examples of common architectural requirements solved elegantly with BoltFetch.

Recipe 1: Full CRUD Operations

A complete implementation of a Data Access Object (DAO) for a resource using a custom client.

typescript
import { configureBoltFetchClient } from "boltfetch"; // Assuming you have configured a client const apiClient = configureBoltFetchClient({ baseUrl: "https://api.example.com/v1" }); export interface Todo { id: number; title: string; completed: boolean; } export const TodoAPI = { // CREATE create: async (title: string) => { return apiClient.post<Todo>('/todos', { title }); }, // READ (List) getAll: async () => { return apiClient.get<Todo[]>('/todos'); }, // READ (Single) getById: async (id: number) => { return apiClient.get<Todo>(`/todos/${id}`); }, // UPDATE update: async (id: number, updates: Partial<Todo>) => { return apiClient.patch<Todo>(`/todos/${id}`, updates); }, // DELETE delete: async (id: number) => { return apiClient.delete<{ success: boolean }>(`/todos/${id}`); } };

Recipe 2: Interacting with GraphQL

BoltFetch is inherently a REST client, but because GraphQL over HTTP is just sending POST requests with JSON payloads, it is remarkably easy to use BoltFetch as a lightweight GraphQL client.

typescript
import { boltfetch } from "boltfetch"; interface GraphQlResponse<T> { data: T; errors?: Array<{ message: string }>; } async function queryGraphQL<T>(query: string, variables?: Record<string, any>) { const response = await boltfetch.post<GraphQlResponse<T>>( 'https://api.example.com/graphql', { query, variables } ); if (!response.success) { console.error("Network Error:", response.message); return null; } if (response.data.errors) { console.error("GraphQL Errors:", response.data.errors); return null; } return response.data.data; } // Usage const GET_USER = ` query GetUser($id: ID!) { user(id: $id) { name email } } `; const result = await queryGraphQL<{ user: { name: string } }>(GET_USER, { id: "1" });

Recipe 3: Parallel Requests

Often, you need to load multiple independent resources concurrently to speed up page load times. Because BoltFetch methods return standard Promises, you can combine them using Promise.all.

typescript
import { boltfetch } from "boltfetch"; async function fetchDashboardData() { // Fire requests concurrently const [usersRes, statsRes, alertsRes] = await Promise.all([ boltfetch.get<User[]>('https://api.example.com/users'), boltfetch.get<Stats>('https://api.example.com/stats'), boltfetch.get<Alert[]>('https://api.example.com/alerts') ]); // Handle successes and failures independently return { users: usersRes.success ? usersRes.data : [], stats: statsRes.success ? statsRes.data : null, alerts: alertsRes.success ? alertsRes.data : [] }; }