import { PostgreSQLAdapter } from '../PostgreSQLAdapter'; /** * Payload types for real-time events */ export interface RealtimePayload { schema: string; table: string; commit_timestamp: string; eventType: 'INSERT' | 'UPDATE' | 'DELETE'; new: Record; old: Record; errors: string[] | null; } /** * Callbacks for real-time subscriptions */ export interface RealtimeCallbacks { onInsert?: (payload: RealtimePayload) => void; onUpdate?: (payload: RealtimePayload) => void; onDelete?: (payload: RealtimePayload) => void; } /** * Presence data for collaborative editing */ export interface PresenceData { userId: string; cursorPosition?: { line: number; column: number; }; timestamp: number; } /** * Manages Supabase real-time subscriptions for collaborative editing */ export declare class RealtimeManager { private adapter; private channels; private logger?; constructor(adapter: PostgreSQLAdapter); /** * Subscribe to table changes for collaborative editing */ subscribeToContent(contentId: string, callbacks: RealtimeCallbacks): () => void; /** * Subscribe to generic table changes */ subscribeToTable(table: string, filter: string | null, callbacks: RealtimeCallbacks): () => void; /** * Broadcast presence for collaborative editing */ broadcastPresence(contentId: string, userId: string, cursorPosition?: { line: number; column: number; }): Promise; /** * Get current presence state for a channel */ getPresence(contentId: string): Record | null; /** * Unsubscribe from a specific channel */ unsubscribe(contentId: string): Promise; /** * Unsubscribe from all channels */ unsubscribeAll(): Promise; /** * Get active channel count */ getActiveChannelCount(): number; /** * Check if a channel is active */ isChannelActive(contentId: string): boolean; }