Type-safe Firebase Admin SDK adapter for HyperFetch. Server-side Firestore and Realtime Database — fully typed.
This adapter brings HyperFetch to server-side Firebase. Share request patterns between browser and Node.js, use the same typed API for Firestore and Realtime Database, and leverage HyperFetch's queuing and retry capabilities on top of the Firebase Admin SDK.
- 🔮 Same code, server-side — Identical HyperFetch patterns for server and client Firebase operations
- 🔥 Firestore & Realtime Database — Both engines through one typed adapter
- 🔁 Server-side retry and queuing — Automatic retries with backoff for flaky Firebase calls in backend services
- ✨ Full TypeScript types — Parameters, payloads, and responses typed for every database operation
npm install @hyper-fetch/core @hyper-fetch/firebase-admin firebase-adminimport { createClient } from "@hyper-fetch/core";
import { FirebaseAdminAdapter } from "@hyper-fetch/firebase-admin";
import { getFirestore } from "firebase-admin/firestore";
const db = getFirestore();
const client = createClient({ url: "" }).setAdapter(FirebaseAdminAdapter(db));interface Message {
text: string;
author: string;
createdAt: number;
}
const addMessage = client.createRequest<{ payload: Message; response: null }>()({
endpoint: "/messages",
method: "addDoc",
});
const getMessages = client.createRequest<{ response: Message[] }>()({
endpoint: "/messages",
method: "getDocs",
});
await addMessage.send({
data: { text: "Hello from server!", author: "system", createdAt: Date.now() },
});
const { data: messages } = await getMessages.send();
messages.forEach((msg) => console.log(`${msg.author}: ${msg.text}`));const updateMessage = client.createRequest<{ payload: Partial<Message>; response: null }>()({
endpoint: "/messages/:messageId",
method: "updateDoc",
});
const deleteMessage = client.createRequest<{ response: null }>()({
endpoint: "/messages/:messageId",
method: "deleteDoc",
});
await updateMessage.setParams({ messageId: "abc" }).send({ data: { text: "Updated!" } });
await deleteMessage.setParams({ messageId: "abc" }).send();