diff --git a/src/RealtimeChannel.ts b/src/RealtimeChannel.ts index 12c2038..df16e02 100644 --- a/src/RealtimeChannel.ts +++ b/src/RealtimeChannel.ts @@ -31,6 +31,38 @@ export type RealtimeChannelOptions = { } } +type RealtimeBroadcastChangesPayloadBase = { + id: string + schema: string + table: string +} + +export type RealtimeBroadcastInsertPayload = + RealtimeBroadcastChangesPayloadBase & { + operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT}` + record: T + old_record: null + } + +export type RealtimeBroadcastUpdatePayload = + RealtimeBroadcastChangesPayloadBase & { + operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE}` + record: T + old_record: T + } + +export type RealtimeBroadcastDeletePayload = + RealtimeBroadcastChangesPayloadBase & { + operation: `${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE}` + record: null + old_record: T + } + +export type RealtimeBroadcastPayload = + | RealtimeBroadcastInsertPayload + | RealtimeBroadcastUpdatePayload + | RealtimeBroadcastDeletePayload + type RealtimePostgresChangesPayloadBase = { schema: string table: string @@ -406,6 +438,42 @@ export default class RealtimeChannel { payload: T }) => void ): RealtimeChannel + on( + type: `${REALTIME_LISTEN_TYPES.BROADCAST}`, + filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL }, + callback: (payload: { + type: `${REALTIME_LISTEN_TYPES.BROADCAST}` + event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL + payload: RealtimeBroadcastPayload + }) => void + ): RealtimeChannel + on( + type: `${REALTIME_LISTEN_TYPES.BROADCAST}`, + filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT }, + callback: (payload: { + type: `${REALTIME_LISTEN_TYPES.BROADCAST}` + event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT + payload: RealtimeBroadcastInsertPayload + }) => void + ): RealtimeChannel + on( + type: `${REALTIME_LISTEN_TYPES.BROADCAST}`, + filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE }, + callback: (payload: { + type: `${REALTIME_LISTEN_TYPES.BROADCAST}` + event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE + payload: RealtimeBroadcastUpdatePayload + }) => void + ): RealtimeChannel + on( + type: `${REALTIME_LISTEN_TYPES.BROADCAST}`, + filter: { event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE }, + callback: (payload: { + type: `${REALTIME_LISTEN_TYPES.BROADCAST}` + event: REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE + payload: RealtimeBroadcastDeletePayload + }) => void + ): RealtimeChannel on( type: `${REALTIME_LISTEN_TYPES.SYSTEM}`, filter: {},