UNPKG

@supabase/realtime-js

Version:
76 lines 2.15 kB
import type { PresenceOpts, PresenceOnJoinCallback, PresenceOnLeaveCallback } from 'phoenix'; import type RealtimeChannel from './RealtimeChannel'; type Presence<T extends { [key: string]: any; } = {}> = { presence_ref: string; } & T; export type RealtimePresenceState<T extends { [key: string]: any; } = {}> = { [key: string]: Presence<T>[]; }; export type RealtimePresenceJoinPayload<T extends { [key: string]: any; }> = { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.JOIN}`; key: string; currentPresences: Presence<T>[]; newPresences: Presence<T>[]; }; export type RealtimePresenceLeavePayload<T extends { [key: string]: any; }> = { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.LEAVE}`; key: string; currentPresences: Presence<T>[]; leftPresences: Presence<T>[]; }; export declare enum REALTIME_PRESENCE_LISTEN_EVENTS { SYNC = "sync", JOIN = "join", LEAVE = "leave" } type RawPresenceState = { [key: string]: { metas: { phx_ref?: string; phx_ref_prev?: string; [key: string]: any; }[]; }; }; type RawPresenceDiff = { joins: RawPresenceState; leaves: RawPresenceState; }; export default class RealtimePresence { channel: RealtimeChannel; state: RealtimePresenceState; pendingDiffs: RawPresenceDiff[]; joinRef: string | null; enabled: boolean; caller: { onJoin: PresenceOnJoinCallback; onLeave: PresenceOnLeaveCallback; onSync: () => void; }; /** * Creates a Presence helper that keeps the local presence state in sync with the server. * * @param channel - The realtime channel to bind to. * @param opts - Optional custom event names, e.g. `{ events: { state: 'state', diff: 'diff' } }`. * * @example * ```ts * const presence = new RealtimePresence(channel) * * channel.on('presence', ({ event, key }) => { * console.log(`Presence ${event} on ${key}`) * }) * ``` */ constructor(channel: RealtimeChannel, opts?: PresenceOpts); } export {}; //# sourceMappingURL=RealtimePresence.d.ts.map