import { SnackBaseClient } from "@snackbase/sdk";
const client = new SnackBaseClient({
baseUrl: "https://api.example.com",
});
async function setupRealtime() {
// Connect
await client.realtime.connect();
// Subscribe to collections
await client.realtime.subscribe("posts", ["create", "update", "delete"]);
await client.realtime.subscribe("comments", ["create"]);
await client.realtime.subscribe("likes", ["create", "delete"]);
// Collection events
const unsubscribePosts = client.realtime.on("posts.create", (post) => {
console.log("New post:", post.title);
// Add to UI
});
client.realtime.on("posts.update", (post) => {
console.log("Updated post:", post.title);
// Update in UI
});
client.realtime.on("posts.delete", (post) => {
console.log("Deleted post:", post.id);
// Remove from UI
});
// Wildcard listener
const unsubscribeAll = client.realtime.on("*", (data) => {
console.log("Some event happened:", data);
});
// Connection events
client.realtime.on("connected", () => {
console.log("✅ Connected");
});
client.realtime.on("connecting", () => {
console.log("🔄 Connecting...");
});
client.realtime.on("disconnected", () => {
console.log("❌ Disconnected - will reconnect");
});
client.realtime.on("error", (error) => {
console.error("⚠️ Error:", error.message);
});
client.realtime.on("auth_error", (error) => {
console.error("🔐 Auth error:", error.message);
// Redirect to login
});
// Cleanup function
return () => {
unsubscribePosts();
unsubscribeAll();
client.realtime.disconnect();
};
}