import { CHANNEL_STATES } from './lib/constants'; import Push from './lib/push'; import RealtimeClient from './RealtimeClient'; import Timer from './lib/timer'; import RealtimePresence, { RealtimePresenceJoinPayload, RealtimePresenceLeavePayload, RealtimePresenceState, REALTIME_PRESENCE_LISTEN_EVENTS } from './RealtimePresence'; export declare type RealtimeChannelOptions = { config: { /** * self option enables client to receive message it broadcast * ack option instructs server to acknowledge that broadcast message was received */ broadcast?: { self?: boolean; ack?: boolean; }; /** * key option is used to track presence payload across clients */ presence?: { key?: string; }; }; }; declare type RealtimePostgresChangesPayloadBase = { schema: string; table: string; commit_timestamp: string; errors: string[]; }; export declare type RealtimePostgresInsertPayload = RealtimePostgresChangesPayloadBase & { eventType: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT}`; new: T; old: {}; }; export declare type RealtimePostgresUpdatePayload = RealtimePostgresChangesPayloadBase & { eventType: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE}`; new: T; old: Partial; }; export declare type RealtimePostgresDeletePayload = RealtimePostgresChangesPayloadBase & { eventType: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE}`; new: {}; old: Partial; }; export declare type RealtimePostgresChangesPayload = RealtimePostgresInsertPayload | RealtimePostgresUpdatePayload | RealtimePostgresDeletePayload; export declare type RealtimePostgresChangesFilter = { event: T; schema: string; table?: string; filter?: string; }; export declare type RealtimeChannelSendResponse = 'ok' | 'timed out' | 'rate limited'; export declare enum REALTIME_POSTGRES_CHANGES_LISTEN_EVENT { ALL = "*", INSERT = "INSERT", UPDATE = "UPDATE", DELETE = "DELETE" } export declare enum REALTIME_LISTEN_TYPES { BROADCAST = "broadcast", PRESENCE = "presence", POSTGRES_CHANGES = "postgres_changes" } export declare enum REALTIME_SUBSCRIBE_STATES { SUBSCRIBED = "SUBSCRIBED", TIMED_OUT = "TIMED_OUT", CLOSED = "CLOSED", CHANNEL_ERROR = "CHANNEL_ERROR" } /** A channel is the basic building block of Realtime * and narrows the scope of data flow to subscribed clients. * You can think of a channel as a chatroom where participants are able to see who's online * and send and receive messages. **/ export default class RealtimeChannel { /** Topic name can be any string. */ topic: string; params: RealtimeChannelOptions; socket: RealtimeClient; bindings: { [key: string]: { type: string; filter: { [key: string]: any; }; callback: Function; id?: string; }[]; }; timeout: number; state: CHANNEL_STATES; joinedOnce: boolean; joinPush: Push; rejoinTimer: Timer; pushBuffer: Push[]; presence: RealtimePresence; constructor( /** Topic name can be any string. */ topic: string, params: RealtimeChannelOptions, socket: RealtimeClient); /** Subscribe registers your client with the server */ subscribe(callback?: (status: `${REALTIME_SUBSCRIBE_STATES}`, err?: Error) => void, timeout?: number): RealtimeChannel; presenceState(): RealtimePresenceState; track(payload: { [key: string]: any; }, opts?: { [key: string]: any; }): Promise; untrack(opts?: { [key: string]: any; }): Promise; /** Listen to messages. */ on(type: `${REALTIME_LISTEN_TYPES.BROADCAST}`, filter: { event: string; }, callback: (payload: { type: `${REALTIME_LISTEN_TYPES.BROADCAST}`; event: string; [key: string]: any; }) => void): RealtimeChannel; on(type: `${REALTIME_LISTEN_TYPES.PRESENCE}`, filter: { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.SYNC}`; }, callback: () => void): RealtimeChannel; on(type: `${REALTIME_LISTEN_TYPES.PRESENCE}`, filter: { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.JOIN}`; }, callback: (payload: RealtimePresenceJoinPayload) => void): RealtimeChannel; on(type: `${REALTIME_LISTEN_TYPES.PRESENCE}`, filter: { event: `${REALTIME_PRESENCE_LISTEN_EVENTS.LEAVE}`; }, callback: (payload: RealtimePresenceLeavePayload) => void): RealtimeChannel; on(type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`, filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>, callback: (payload: RealtimePostgresChangesPayload) => void): RealtimeChannel; on(type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`, filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT}`>, callback: (payload: RealtimePostgresInsertPayload) => void): RealtimeChannel; on(type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`, filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE}`>, callback: (payload: RealtimePostgresDeletePayload) => void): RealtimeChannel; on(type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`, filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE}`>, callback: (payload: RealtimePostgresUpdatePayload) => void): RealtimeChannel; send(payload: { type: string; [key: string]: any; }, opts?: { [key: string]: any; }): Promise; updateJoinPayload(payload: { [key: string]: any; }): void; /** * Leaves the channel. * * Unsubscribes from server events, and instructs channel to terminate on server. * Triggers onClose() hooks. * * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie: * channel.unsubscribe().receive("ok", () => alert("left!") ) */ unsubscribe(timeout?: number): Promise<'ok' | 'timed out' | 'error'>; } export {}; //# sourceMappingURL=RealtimeChannel.d.ts.map