Skip to content

Latest commit

 

History

History

README.md

🔥 Hyper Fetch Firebase Admin

Type-safe Firebase Admin SDK adapter for HyperFetch. Server-side Firestore and Realtime Database — fully typed.

Firebase

📖 About

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.

🎯 Key Capabilities

  • 🔮 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

🚀 Quick Start

npm install @hyper-fetch/core @hyper-fetch/firebase-admin firebase-admin
import { 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));

📚 Documentation

💡 Examples

Server-side CRUD

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}`));

Update and delete

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();

License

MIT