API Service
Import API utilities from the subpath:
import {
ApiService,
AuthService,
TokenManager,
createApiClient,
createCustomQuery,
createFirebaseAuthProvider,
createFirebaseAppCheckProvider,
createCustomAuthProvider,
createCustomAppCheckProvider,
type ApiConfig,
type ApiRequestConfig,
type ApiResponse,
type RetryConfig,
} from '@codella-software/utils/api-service'
Quick setup
const authProvider = createFirebaseAuthProvider({ auth })
const client = createApiClient({
authProvider,
apiConfig: {
baseUrl: 'https://api.example.com',
withCredentials: true,
refreshTokenRoute: '/api/v1/users/me',
},
})
await client.authService.initializeSession()
const response = await client.authService.get<{ id: string; email: string }>('/users/me')
createApiClient() returns:
authServiceapiServicetokenManagererrorHandler
ApiService
Promise methods:
get(url, params?)post(url, data?, params?, customHeaders?)put(url, data?, params?, customHeaders?)patch(url, data?, params?, customHeaders?)delete(url, params?)getFile(url, params?)getFileByPost(url, params?, body?)
Observable methods:
request$(config)get$(url, params?, config?)post$(url, data?, params?, config?)put$(url, data?, params?, config?)patch$(url, data?, params?, config?)delete$(url, params?, config?)getFile$(url, params?)postFile$(url, data?, params?)
AuthService
AuthService wraps ApiService and ensures session initialization first.
Key methods:
initializeSession()reinitialize()reset()request$(config)get$ / post$ / put$ / patch$ / delete$get / post / put / patch / deletegetFile()getFileByPost()
Providers
Firebase auth
const authProvider = createFirebaseAuthProvider({
auth: {
currentUser: auth.currentUser,
onAuthStateChanged: auth.onAuthStateChanged,
},
})
Firebase App Check
const appCheckProvider = createFirebaseAppCheckProvider({
appCheck,
getToken,
})
Custom auth
const authProvider = createCustomAuthProvider({
getIdToken: async () => localStorage.getItem('token'),
isAuthenticated: () => Boolean(localStorage.getItem('token')),
})
RTK Query
import { createApi } from '@reduxjs/toolkit/query/react'
const baseQuery = createCustomQuery(client.apiService)
export const api = createApi({
reducerPath: 'api',
baseQuery,
endpoints: () => ({}),
})