@@ -4,6 +4,7 @@ import { ENV } from '../constants';
44import {
55 GroupEventType ,
66 MessageEventType ,
7+ NotificationEventType ,
78 ProposedEventNames ,
89 PushStreamInitializeProps ,
910 STREAM ,
@@ -53,11 +54,11 @@ export class PushStream extends EventEmitter {
5354
5455 if ( ! this . pushNotificationSocket ) {
5556 throw new Error ( 'Push notification socket not connected' ) ;
56- }
57+ }
5758
5859 if ( ! this . pushChatSocket ) {
5960 throw new Error ( 'Push chat socket not connected' ) ;
60- }
61+ }
6162
6263 this . raw = options . raw ?? false ;
6364 this . options = options ;
@@ -155,6 +156,16 @@ export class PushStream extends EventEmitter {
155156 return this . options . filter . chats . includes ( dataChatId ) ;
156157 }
157158
159+ private shouldEmitChannel ( dataChannelId : string ) : boolean {
160+ if (
161+ ! this . options . filter ?. channels ||
162+ this . options . filter . channels . length === 0
163+ ) {
164+ return true ;
165+ }
166+ return this . options . filter . channels . includes ( dataChannelId ) ;
167+ }
168+
158169 public async init ( ) : Promise < void > {
159170 const shouldEmit = ( eventType : STREAM ) : boolean => {
160171 if ( ! this . options . listen || this . options . listen . length === 0 ) {
@@ -164,78 +175,106 @@ export class PushStream extends EventEmitter {
164175 } ;
165176
166177 this . pushChatSocket . on ( EVENTS . CHAT_GROUPS , ( data : any ) => {
167- try {
168- const modifiedData = DataModifier . handleChatGroupEvent ( data , this . raw ) ;
169- modifiedData . event = this . convertToProposedName ( modifiedData . event ) ;
170- this . handleToField ( modifiedData ) ;
171- if ( this . shouldEmitChat ( data . chatId ) ) {
172- if (
173- data . eventType === GroupEventType . JoinGroup ||
174- data . eventType === GroupEventType . LeaveGroup ||
175- data . eventType === MessageEventType . Request ||
176- data . eventType === GroupEventType . Remove
177- ) {
178- if ( shouldEmit ( STREAM . CHAT ) ) {
179- this . emit ( STREAM . CHAT , modifiedData ) ;
180- }
181- } else {
182- if ( shouldEmit ( STREAM . CHAT_OPS ) ) {
183- this . emit ( STREAM . CHAT_OPS , modifiedData ) ;
184- }
185- }
186- }
187- } catch ( error ) {
188- console . error ( 'Error handling CHAT_GROUPS event:' , error , 'Data:' , data ) ;
189- }
190- } ) ;
191-
192- this . pushChatSocket . on ( EVENTS . CHAT_RECEIVED_MESSAGE , async ( data : any ) => {
193- try {
178+ try {
179+ const modifiedData = DataModifier . handleChatGroupEvent ( data , this . raw ) ;
180+ modifiedData . event = this . convertToProposedName ( modifiedData . event ) ;
181+ this . handleToField ( modifiedData ) ;
182+ if ( this . shouldEmitChat ( data . chatId ) ) {
194183 if (
195- data . messageCategory == 'Chat' ||
196- data . messageCategory == 'Request'
184+ data . eventType === GroupEventType . JoinGroup ||
185+ data . eventType === GroupEventType . LeaveGroup ||
186+ data . eventType === MessageEventType . Request ||
187+ data . eventType === GroupEventType . Remove
197188 ) {
198- data = await this . chatInstance . decrypt ( [ data ] ) ;
199- data = data [ 0 ]
200- }
201-
202- const modifiedData = DataModifier . handleChatEvent ( data , this . raw ) ;
203- modifiedData . event = this . convertToProposedName ( modifiedData . event ) ;
204- this . handleToField ( modifiedData ) ;
205- if ( this . shouldEmitChat ( data . chatId ) ) {
206189 if ( shouldEmit ( STREAM . CHAT ) ) {
207190 this . emit ( STREAM . CHAT , modifiedData ) ;
208191 }
192+ } else {
193+ if ( shouldEmit ( STREAM . CHAT_OPS ) ) {
194+ this . emit ( STREAM . CHAT_OPS , modifiedData ) ;
195+ }
209196 }
210- } catch ( error ) {
211- console . error (
212- 'Error handling CHAT_RECEIVED_MESSAGE event:' ,
213- error ,
214- 'Data:' ,
215- data
216- ) ;
217197 }
198+ } catch ( error ) {
199+ console . error (
200+ 'Error handling CHAT_GROUPS event:' ,
201+ error ,
202+ 'Data:' ,
203+ data
204+ ) ;
205+ }
206+ } ) ;
207+
208+ this . pushChatSocket . on ( EVENTS . CHAT_RECEIVED_MESSAGE , async ( data : any ) => {
209+ try {
210+ if (
211+ data . messageCategory == 'Chat' ||
212+ data . messageCategory == 'Request'
213+ ) {
214+ data = await this . chatInstance . decrypt ( [ data ] ) ;
215+ data = data [ 0 ] ;
216+ }
217+
218+ const modifiedData = DataModifier . handleChatEvent ( data , this . raw ) ;
219+ modifiedData . event = this . convertToProposedName ( modifiedData . event ) ;
220+ this . handleToField ( modifiedData ) ;
221+ if ( this . shouldEmitChat ( data . chatId ) ) {
222+ if ( shouldEmit ( STREAM . CHAT ) ) {
223+ this . emit ( STREAM . CHAT , modifiedData ) ;
224+ }
225+ }
226+ } catch ( error ) {
227+ console . error (
228+ 'Error handling CHAT_RECEIVED_MESSAGE event:' ,
229+ error ,
230+ 'Data:' ,
231+ data
232+ ) ;
233+ }
218234 } ) ;
219235
220236 this . pushNotificationSocket . on ( EVENTS . USER_FEEDS , ( data : any ) => {
221237 try {
222- this . emit ( STREAM . NOTIF , data ) ;
238+ const modifiedData = DataModifier . mapToNotificationEvent (
239+ data ,
240+ NotificationEventType . INBOX ,
241+ this . account === data . sender ? 'self' : 'other' ,
242+ this . raw
243+ ) ;
244+
245+ if ( this . shouldEmitChannel ( modifiedData . from ) ) {
246+ if ( shouldEmit ( STREAM . NOTIF ) ) {
247+ this . emit ( STREAM . NOTIF , modifiedData ) ;
248+ }
249+ }
223250 } catch ( error ) {
224251 console . error ( 'Error handling USER_FEEDS event:' , error , 'Data:' , data ) ;
225252 }
226253 } ) ;
227254
228255 this . pushNotificationSocket . on ( EVENTS . USER_SPAM_FEEDS , ( data : any ) => {
229- try {
230- this . emit ( STREAM . NOTIF , data ) ;
231- } catch ( error ) {
232- console . error (
233- 'Error handling USER_SPAM_FEEDS event:' ,
234- error ,
235- 'Data:' ,
236- data
237- ) ;
238- }
256+ try {
257+ const modifiedData = DataModifier . mapToNotificationEvent (
258+ data ,
259+ NotificationEventType . SPAM ,
260+ this . account === data . sender ? 'self' : 'other' ,
261+ this . raw
262+ ) ;
263+ modifiedData . origin =
264+ this . account === modifiedData . from ? 'self' : 'other' ;
265+ if ( this . shouldEmitChannel ( modifiedData . from ) ) {
266+ if ( shouldEmit ( STREAM . NOTIF ) ) {
267+ this . emit ( STREAM . NOTIF , modifiedData ) ;
268+ }
269+ }
270+ } catch ( error ) {
271+ console . error (
272+ 'Error handling USER_SPAM_FEEDS event:' ,
273+ error ,
274+ 'Data:' ,
275+ data
276+ ) ;
277+ }
239278 } ) ;
240279 }
241280}
0 commit comments