- Node.js ≥ 18
- npm ≥ 9
npm install @devraj-labs/api-kitapi-kit does not store tokens itself. You pass a TokenStorage implementation that fits your platform.
| Platform | Recommended |
|---|---|
| Browser | HttpOnly cookies via your server — see storage.md |
| React Native | @devraj-labs/rn-storage-kit → SecureStorageAdapter — see storage.md |
| Node.js script | MemoryTokenStorage (built-in) |
Call ApiClient.getInstance(config) once, at your app's entry point. Every subsequent call returns the same instance with no config required.
Browser
import { ApiClient } from "@devraj-labs/api-kit";
import { CookieTokenStorage } from "./storage/cookieTokenStorage";
ApiClient.getInstance({
baseURL: "https://api.example.com",
storage: new CookieTokenStorage(),
hooks: {
onAuthFailure() { window.location.href = "/login"; },
},
});React Native
import { ApiClient } from "@devraj-labs/api-kit";
import { rnSecureTokenStorage } from "./storage/tokenStorage"; // SecureStorageAdapter bridge
ApiClient.getInstance({
baseURL: "https://api.example.com",
storage: rnSecureTokenStorage,
hooks: {
onAuthFailure() {
navigationRef.current?.reset({ index: 0, routes: [{ name: "Login" }] });
},
},
});Node.js
import { ApiClient, MemoryTokenStorage } from "@devraj-labs/api-kit";
ApiClient.getInstance({
baseURL: "http://localhost:4000",
storage: new MemoryTokenStorage(),
});import { ApiClient } from "@devraj-labs/api-kit";
const client = ApiClient.getInstance(); // no config — returns the existing instance
const { data } = await client.get<User>("/api/me");
await client.post("/api/orders", { itemId: 42 });api-kit doesn't intercept your login call. After your login request resolves, pass the tokens to storage:
const { data } = await client.post<{
accessToken: string;
refreshToken: string;
accessTokenExpiresAt: number;
}>("/auth/login", { username, password });
await storage.setTokens(data);
// All subsequent requests are now authenticated automaticallyNext: Configuration Reference