@@ -4,6 +4,7 @@ import { ENV } from '../constants';
4
4
import {
5
5
GroupEventType ,
6
6
MessageEventType ,
7
+ NotificationEventType ,
7
8
ProposedEventNames ,
8
9
PushStreamInitializeProps ,
9
10
STREAM ,
@@ -53,11 +54,11 @@ export class PushStream extends EventEmitter {
53
54
54
55
if ( ! this . pushNotificationSocket ) {
55
56
throw new Error ( 'Push notification socket not connected' ) ;
56
- }
57
+ }
57
58
58
59
if ( ! this . pushChatSocket ) {
59
60
throw new Error ( 'Push chat socket not connected' ) ;
60
- }
61
+ }
61
62
62
63
this . raw = options . raw ?? false ;
63
64
this . options = options ;
@@ -155,6 +156,16 @@ export class PushStream extends EventEmitter {
155
156
return this . options . filter . chats . includes ( dataChatId ) ;
156
157
}
157
158
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
+
158
169
public async init ( ) : Promise < void > {
159
170
const shouldEmit = ( eventType : STREAM ) : boolean => {
160
171
if ( ! this . options . listen || this . options . listen . length === 0 ) {
@@ -164,78 +175,106 @@ export class PushStream extends EventEmitter {
164
175
} ;
165
176
166
177
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 ) ) {
194
183
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
197
188
) {
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 ) ) {
206
189
if ( shouldEmit ( STREAM . CHAT ) ) {
207
190
this . emit ( STREAM . CHAT , modifiedData ) ;
208
191
}
192
+ } else {
193
+ if ( shouldEmit ( STREAM . CHAT_OPS ) ) {
194
+ this . emit ( STREAM . CHAT_OPS , modifiedData ) ;
195
+ }
209
196
}
210
- } catch ( error ) {
211
- console . error (
212
- 'Error handling CHAT_RECEIVED_MESSAGE event:' ,
213
- error ,
214
- 'Data:' ,
215
- data
216
- ) ;
217
197
}
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
+ }
218
234
} ) ;
219
235
220
236
this . pushNotificationSocket . on ( EVENTS . USER_FEEDS , ( data : any ) => {
221
237
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
+ }
223
250
} catch ( error ) {
224
251
console . error ( 'Error handling USER_FEEDS event:' , error , 'Data:' , data ) ;
225
252
}
226
253
} ) ;
227
254
228
255
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
+ }
239
278
} ) ;
240
279
}
241
280
}
0 commit comments