官方套件 · 自動化與基礎架構
把 Supabase 資料表變更變成即時事件
把 Supabase 資料表的變更即時送到瀏覽器與 App:Database Webhook 呼叫 Edge Function,由它發布 Hibira 事件。
Edge FunctionsSupabase ↗
- 每次新增、更新、刪除,Database Webhook 都會呼叫 Edge Function,由它用 npm 的 pusher 套件發布。
- 每個資料表是一個頻道,每次變更是一個事件(insert、update、delete),瀏覽器與 App 用 pusher-js 或任何 Pusher 用戶端訂閱即可。
登入後,範例程式碼會自動帶入您的叢集主機。 登入
設定
supabase functions new hibira-broadcast supabase secrets set HIBIRA_APP_ID=YOUR_APP_ID HIBIRA_APP_KEY=YOUR_APP_KEY \ HIBIRA_APP_SECRET=YOUR_APP_SECRET HIBIRA_HOST=ws.hibira.io \ WEBHOOK_SECRET=a-long-random-string在函式中發布資料表變更
// supabase/functions/hibira-broadcast/index.ts import Pusher from 'npm:pusher@5'; const env = (k: string) => Deno.env.get(k) ?? ''; const pusher = new Pusher({ appId: env('HIBIRA_APP_ID'), key: env('HIBIRA_APP_KEY'), secret: env('HIBIRA_APP_SECRET'), host: env('HIBIRA_HOST'), port: '443', useTLS: true, }); // A Database Webhook posts { type, table, record, old_record }. Deno.serve(async (req) => { if (req.headers.get('x-webhook-secret') !== env('WEBHOOK_SECRET')) { return new Response('forbidden', { status: 403 }); } const { type, table, record, old_record } = await req.json(); // orders → channel "orders", event "insert" / "update" / "delete" await pusher.trigger(table, type.toLowerCase(), record ?? old_record); return new Response('ok'); });把資料表變更送到函式
; supabase functions deploy hibira-broadcast --no-verify-jwt ; Then in the Supabase dashboard: Database → Webhooks → Create a new hook Table = public.orders Events = Insert, Update, Delete Type = Supabase Edge Functions Edge Function = hibira-broadcast HTTP Headers = x-webhook-secret: a-long-random-string使用
import Pusher from 'pusher-js'; const pusher = new Pusher('YOUR_APP_KEY', { cluster: 'hkg', wsHost: 'ws.hibira.io', wsPort: 443, wssPort: 443, forceTLS: true, enabledTransports: ['ws', 'wss'], }); pusher.subscribe('orders').bind('insert', (row) => { console.log('New order', row); });
開始之前
- 為了讓 Database Webhook 能呼叫,函式以 --no-verify-jwt 部署,所以每個請求都要檢查共用密鑰標頭。
- 只有任何人都能看的資料列才發布到公開頻道。個人資料請發布到 private-user-<id> 頻道,並用另一個檢查 Supabase 工作階段的 Edge Function 簽署訂閱。
請使用儀表板中的應用程式 Key;Secret 只放在你的伺服器上。頻道、事件與授權端點的用法和 Pusher 完全相同。 免費建立帳號 →