diff --git a/src/puppet-mock/puppet-mock.ts b/src/puppet-mock/puppet-mock.ts index ac5b40d13a021f6992a31af64938308c7ff85681..1caee6bf51f8a563fb4a05c40eeae9dc61199db2 100644 --- a/src/puppet-mock/puppet-mock.ts +++ b/src/puppet-mock/puppet-mock.ts @@ -89,6 +89,8 @@ export class PuppetMock extends Puppet { type : MessageType.Text, text : 'mock text', timestamp : Date.now(), + fromId : 'xxx', + toId : 'xxx', }) setInterval(() => { diff --git a/src/puppet-puppeteer/puppet-puppeteer.ts b/src/puppet-puppeteer/puppet-puppeteer.ts index ac8737098848f7a3888911a5b6e9f45595f572c4..a3362a3bf6afa790266f491726c3437df3f4476c 100644 --- a/src/puppet-puppeteer/puppet-puppeteer.ts +++ b/src/puppet-puppeteer/puppet-puppeteer.ts @@ -365,17 +365,33 @@ export class PuppetPuppeteer extends Puppet { const type: MessageType = this.messageTypeFromWeb(rawPayload.MsgType) - const payload: MessagePayload = { + const payloadBase = { id, type, fromId, filename, - toId, - roomId, text, timestamp, } + let payload: MessagePayload + + if (toId) { + payload = { + ...payloadBase, + toId, + roomId, + } + } else if (roomId) { + payload = { + ...payloadBase, + toId, + roomId, + } + } else { + throw new Error('neither roomId nor toId') + } + return payload } diff --git a/src/puppet-puppeteer/puppeteer-message.spec.ts b/src/puppet-puppeteer/puppeteer-message.spec.ts index 3985ecd5fd79bfd40f8832096d1ebe208dff30c0..67996575fe8d06a3e633c67626adfdd9e2cc151a 100755 --- a/src/puppet-puppeteer/puppeteer-message.spec.ts +++ b/src/puppet-puppeteer/puppeteer-message.spec.ts @@ -89,6 +89,7 @@ test('constructor()', async t => { type : Message.Type.Text, fromId : EXPECTED.from, timestamp : Date.now(), + toId : 'toId', } return payload }) diff --git a/src/puppet/schemas/message.ts b/src/puppet/schemas/message.ts index eda27acdc0b8718499b9b99d6bb4037d53c313d3..7af01c3577db353bf7019fe98b07da3c5015eefa 100644 --- a/src/puppet/schemas/message.ts +++ b/src/puppet/schemas/message.ts @@ -8,15 +8,25 @@ export enum MessageType { Video, } -export interface MessagePayload { +export interface MessagePayloadBase { id : string, type : MessageType, filename? : string, - fromId? : string, - roomId? : null | string, + fromId : string, text? : string, - timestamp : number, // milliseconds - toId? : null | string, // if to is not set, then room must be set + timestamp : number, // milliseconds +} + +export interface MessagePayloadRoom { + roomId : null | string, + toId? : null | string, // if to is not set, then room must be set } + +export interface MessagePayloadTo { + roomId? : null | string, + toId : null | string, // if to is not set, then room must be set +} + +export type MessagePayload = MessagePayloadBase & (MessagePayloadRoom | MessagePayloadTo)