跳转到内容

实时 Provider

LiveProvider 通过 WebSocket 或 Server-Sent Events 实现实时数据更新。

interface LiveProvider {
subscribe(params: { resource: string; callback: (event: LiveEvent) => void }): () => void;
unsubscribe?(params: { resource: string }): void;
publish?(event: LiveEvent): void;
}
interface LiveEvent {
type: 'INSERT' | 'UPDATE' | 'DELETE';
resource: string;
payload: Record<string, unknown>;
}
import { createWebSocketLiveProvider } from '@svadmin/core';
const liveProvider = createWebSocketLiveProvider({ url: 'ws://localhost:3001' });
import { createSSELiveProvider } from '@svadmin/core';
const liveProvider = createSSELiveProvider({ url: 'http://localhost:3001/events' });
import { createSupabaseLiveProvider } from '@svadmin/supabase';
const liveProvider = createSupabaseLiveProvider(supabaseClient);

支持通过 Supabase Realtime 广播频道发布事件。

如果你还需要 @supacloud/js 的任务状态订阅,可以使用 @svadmin/supabase/supacloud 里的 createSupaCloudTaskLiveProvider()。它会把 tasks.subscribe() 桥接成标准的 svadmin LiveProvider 接口。

import { createAppwriteLiveProvider } from '@svadmin/appwrite';
const liveProvider = createAppwriteLiveProvider({ client, databaseId: 'main' });
import { createPocketBaseLiveProvider } from '@svadmin/pocketbase';
const liveProvider = createPocketBaseLiveProvider({ pb });

PocketBase 使用基于 SSE 的实时订阅。

useLive(liveProvider, 'posts', {
liveMode: 'auto', // 'auto' | 'manual' | 'off'
onLiveEvent: (event) => {}, // 可选回调
});
useSubscription({
resource: 'notifications',
liveProvider,
onLiveEvent: (event) => console.log(event),
});
const publish = usePublish(liveProvider);
publish({ type: 'UPDATE', resource: 'posts', payload: { id: 1 } });
模式行为
auto收到事件后自动刷新查询(默认)
manual触发 onLiveEvent 但不自动刷新 — 由你决定
off不订阅