@exisjs/fetch
v0.9.2
Published
End-to-end type-safe HTTP client for ExisJS APIs
Readme
@exisjs/fetch
@exisjs/fetch is a lightweight, zero-dependency HTTP and typed RPC client for ExisJS applications and web frontends.
Installation
npm install @exisjs/fetchFeatures
- Zero External Dependencies: Built entirely on the standard web
fetchAPI. - Typed RPC Client: Direct type-safe invocation of backend routes and payloads using exported
AppRoutertypes. - Axios-Compatible API: Support for request/response interceptors, cancellation (
AbortController), and custom headers. - Automatic Retry & Cache: Built-in exponential backoff retries and in-memory response caching for idempotent requests.
- RFC 10008 QUERY Method: Support for
http.query()with complex JSON payloads.
Usage
1. Typed RPC Client
Consume your ExisJS backend API with complete end-to-end type safety:
import { createClient } from '@exisjs/fetch'
import type { AppRouter } from '../backend/.exis/types'
const api = createClient<AppRouter>({
baseUrl: 'http://localhost:3000',
headers: () => ({
Authorization: `Bearer ${localStorage.getItem('token')}`,
}),
})
// Autocompleted route path with inferred response type
const response = await api.users.get()
console.log(response.data)2. Standard HTTP Client
Use the client directly as an HTTP request utility:
import http from '@exisjs/fetch'
// GET request
const { data } = await http.get<{ id: string; name: string }>('/api/users/1', {
baseURL: 'https://api.example.com',
})
// POST request with JSON body
const result = await http.post('/api/users', { name: 'Alice' }, {
baseURL: 'https://api.example.com',
})3. Request Interceptors
import http from '@exisjs/fetch'
http.interceptors.request.use((config) => {
config.headers = {
...config.headers,
'X-Client-Version': '1.0.0',
}
return config
})API Reference
HTTP Methods
http.get<T>(url, config?)
http.post<T>(url, data?, config?)
http.put<T>(url, data?, config?)
http.patch<T>(url, data?, config?)
http.delete<T>(url, config?)
http.head<T>(url, config?)
http.options<T>(url, config?)
http.query<T>(url, data?, config?)
http.postForm<T>(url, formData, config?)Documentation
For full documentation and integration guides, visit the ExisJS Repository and exisjs.com.
