diff --git a/src/ClientEvents.ts b/src/ClientEvents.ts index ce4b9e5..af9fc5d 100644 --- a/src/ClientEvents.ts +++ b/src/ClientEvents.ts @@ -18,7 +18,8 @@ import { ChangeThreadThemeEvent, DeliveryReceiptEvent, ReadReceiptEvent, - EventType + EventType, + MessageRemoveEvent } from './types/Events' export default interface ClientEvents { @@ -46,4 +47,6 @@ export default interface ClientEvents { deliveryReceiptEvent: (deliveryReceiptEvent: DeliveryReceiptEvent) => void, readReceiptEvent: (readReceiptEvent: ReadReceiptEvent) => void + + messageRemoveEvent: (messageRemoveEvent: MessageRemoveEvent) => void } diff --git a/src/types/Events.ts b/src/types/Events.ts index 004dbd8..cdbbde9 100644 --- a/src/types/Events.ts +++ b/src/types/Events.ts @@ -19,7 +19,8 @@ export type EventType = ( 'changeThreadThemeEvent' | 'deliveryReceiptEvent' | - 'readReceiptEvent' + 'readReceiptEvent' | + 'messageRemoveEvent' ) export interface Event { @@ -70,3 +71,5 @@ export interface DeliveryReceiptEvent extends Event { export interface ReadReceiptEvent extends Event { receiverId: string } + +export interface MessageRemoveEvent extends MessageEvent {} diff --git a/src/types/events/parseDeltaEvent.ts b/src/types/events/parseDeltaEvent.ts index d69f6c5..62803f9 100644 --- a/src/types/events/parseDeltaEvent.ts +++ b/src/types/events/parseDeltaEvent.ts @@ -4,10 +4,11 @@ import { ThreadNameEvent } from './ThreadEvents' import { - Event, - DeliveryReceiptEvent, - ReadReceiptEvent, - EventType + Event, + DeliveryReceiptEvent, + ReadReceiptEvent, + EventType, + MessageRemoveEvent } from '../Events' import parseAdminMessage from './parseAdminMessage' import { getThreadId } from '../Message' @@ -15,6 +16,16 @@ import { getThreadId } from '../Message' export default function parseDeltaEvent (event: any): { type: EventType, event: Event } { if (event.deltaAdminTextMessage) return parseAdminMessage(event.deltaAdminTextMessage) + if (event.deltaReplaceMessage) { + const delta = event.deltaReplaceMessage + if (delta.newMessage.messageMetadata.unsendType) { + return { + type: 'messageRemoveEvent', + event: getEventMetadata(delta.newMessage) as MessageRemoveEvent + } + } + } + if (event.deltaThreadName) { const delta = event.deltaThreadName return { @@ -32,7 +43,7 @@ export default function parseDeltaEvent (event: any): { type: EventType, event: type: 'deliveryReceiptEvent', event: { threadId: getThreadId(delta), - receiverId: delta.actorFbId || getThreadId(delta) + receiverId: delta.actorFbId.toString() || getThreadId(delta) } as DeliveryReceiptEvent } } @@ -43,7 +54,7 @@ export default function parseDeltaEvent (event: any): { type: EventType, event: type: 'readReceiptEvent', event: { threadId: getThreadId(delta), - receiverId: delta.actorFbId || getThreadId(delta) + receiverId: delta.actorFbId.toString() || getThreadId(delta) } as ReadReceiptEvent } }