@juzi/wechaty-puppet-service 1.0.10 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -921,12 +921,14 @@ class PuppetService extends PUPPET.Puppet {
921
921
  */
922
922
  request.setMiniProgramDeprecated(JSON.stringify(miniProgramPayload))
923
923
 
924
+ log.info('PuppetService', `messageSendMiniProgram(${conversationId}, ${miniProgramPayload.description}) about to call grpc`)
924
925
  const response = await util.promisify(
925
926
  this.grpcManager.client.messageSendMiniProgram
926
927
  .bind(this.grpcManager.client),
927
928
  )(request)
928
929
 
929
930
  const messageId = response.getId()
931
+ log.info('PuppetService', `messageSendMiniProgram(${conversationId}, ${miniProgramPayload.description}) grpc called, messageId: ${messageId}`)
930
932
 
931
933
  if (messageId) {
932
934
  return messageId
@@ -961,12 +963,14 @@ class PuppetService extends PUPPET.Puppet {
961
963
  pbLocationPayload.setName(locationPayload.name)
962
964
  request.setLocation(pbLocationPayload)
963
965
 
966
+ log.info('PuppetService', `messageSendLocation(${conversationId}, ${locationPayload.name}) about to call grpc`)
964
967
  const response = await util.promisify(
965
968
  this.grpcManager.client.messageSendLocation
966
969
  .bind(this.grpcManager.client),
967
970
  )(request)
968
971
 
969
972
  const id = response.getId()
973
+ log.info('PuppetService', `messageSendMiniProgram(${conversationId}, ${locationPayload.name}) grpc called, messageId: ${id}`)
970
974
 
971
975
  if (id) {
972
976
  return id
@@ -993,12 +997,14 @@ class PuppetService extends PUPPET.Puppet {
993
997
  if (channelPayload.url) { pbChannelPayload.setUrl(channelPayload.url) }
994
998
  request.setChannel(pbChannelPayload)
995
999
 
1000
+ log.info('PuppetService', `messageSendChannel(${conversationId}, ${channelPayload.desc}) about to call grpc`)
996
1001
  const response = await util.promisify(
997
1002
  this.grpcManager.client.messageSendChannel
998
1003
  .bind(this.grpcManager.client),
999
1004
  )(request)
1000
1005
 
1001
1006
  const messageId = response.getId()
1007
+ log.info('PuppetService', `messageSendChannel(${conversationId}, ${channelPayload.desc}) grpc called, messageId: ${messageId}`)
1002
1008
 
1003
1009
  if (messageId) {
1004
1010
  return messageId
@@ -1087,12 +1093,14 @@ class PuppetService extends PUPPET.Puppet {
1087
1093
  request.setConversationId(conversationId)
1088
1094
  request.setMessageId(messageId)
1089
1095
 
1096
+ log.info('PuppetService', `messageForward(${conversationId}, ${messageId}) about to call grpc`)
1090
1097
  const response = await util.promisify(
1091
1098
  this.grpcManager.client.messageForward
1092
1099
  .bind(this.grpcManager.client),
1093
1100
  )(request)
1094
1101
 
1095
1102
  const forwardedMessageId = response.getId()
1103
+ log.info('PuppetService', `messageForward(${conversationId}, ${messageId}) grpc called, messageId: ${forwardedMessageId}`)
1096
1104
 
1097
1105
  if (forwardedMessageId) {
1098
1106
  return forwardedMessageId
@@ -1185,12 +1193,14 @@ class PuppetService extends PUPPET.Puppet {
1185
1193
  request.setQuoteId(quoteId)
1186
1194
  }
1187
1195
 
1196
+ log.info('PuppetService', `messageSend(${conversationId}, ${text}) about to call grpc`)
1188
1197
  const response = await util.promisify(
1189
1198
  this.grpcManager.client.messageSendText
1190
1199
  .bind(this.grpcManager.client),
1191
1200
  )(request)
1192
1201
 
1193
1202
  const messageId = response.getId()
1203
+ log.info('PuppetService', `messageSend(${conversationId}, ${text}) grpc called, messageId: ${messageId}`)
1194
1204
 
1195
1205
  if (messageId) {
1196
1206
  return messageId
@@ -1221,12 +1231,14 @@ class PuppetService extends PUPPET.Puppet {
1221
1231
  const serializedFileBox = await this.serializeFileBox(fileBox)
1222
1232
  request.setFileBox(serializedFileBox)
1223
1233
 
1234
+ log.info('PuppetService', `messageSendFile(${conversationId}, ${fileBox}) about to call grpc`)
1224
1235
  const response = await util.promisify(
1225
1236
  this.grpcManager.client.messageSendFile
1226
1237
  .bind(this.grpcManager.client),
1227
1238
  )(request)
1228
1239
 
1229
1240
  const messageId = response.getId()
1241
+ log.info('PuppetService', `messageSendFile(${conversationId}, ${fileBox}) grpc called, messageId: ${messageId}`)
1230
1242
 
1231
1243
  if (messageId) {
1232
1244
  return messageId
@@ -1265,12 +1277,14 @@ class PuppetService extends PUPPET.Puppet {
1265
1277
  request.setConversationId(conversationId)
1266
1278
  request.setContactId(contactId)
1267
1279
 
1280
+ log.info('PuppetService', `messageSendContact(${conversationId}, ${contactId}) about to call grpc`)
1268
1281
  const response = await util.promisify(
1269
1282
  this.grpcManager.client.messageSendContact
1270
1283
  .bind(this.grpcManager.client),
1271
1284
  )(request)
1272
1285
 
1273
1286
  const messageId = response.getId()
1287
+ log.info('PuppetService', `messageSendContact(${conversationId}, ${contactId}) grpc called, messageId: ${messageId}`)
1274
1288
 
1275
1289
  if (messageId) {
1276
1290
  return messageId
@@ -1307,12 +1321,14 @@ class PuppetService extends PUPPET.Puppet {
1307
1321
  // Deprecated: will be removed after Dec 31, 2022
1308
1322
  request.setUrlLinkDeprecated(JSON.stringify(urlLinkPayload))
1309
1323
 
1324
+ log.info('PuppetService', `messageSendUrl(${conversationId}, ${urlLinkPayload}) about to call grpc`)
1310
1325
  const response = await util.promisify(
1311
1326
  this.grpcManager.client.messageSendUrl
1312
1327
  .bind(this.grpcManager.client),
1313
1328
  )(request)
1314
1329
 
1315
1330
  const messageId = response.getId()
1331
+ log.info('PuppetService', `messageSendUrl(${conversationId}, ${urlLinkPayload}) grpc called, messageId: ${messageId}`)
1316
1332
 
1317
1333
  if (messageId) {
1318
1334
  return messageId
package/src/config.ts CHANGED
@@ -30,6 +30,7 @@ const GRPC_OPTIONS = {
30
30
  export const NO_LOG_EVENTS: grpcPuppet.EventTypeMap[keyof grpcPuppet.EventTypeMap][] = [
31
31
  grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT,
32
32
  grpcPuppet.EventType.EVENT_TYPE_DONG,
33
+ grpcPuppet.EventType.EVENT_TYPE_DIRTY,
33
34
  ]
34
35
 
35
36
  export {
@@ -4,7 +4,7 @@
4
4
  import type { PackageJson } from 'type-fest'
5
5
  export const packageJson: PackageJson = {
6
6
  "name": "@juzi/wechaty-puppet-service",
7
- "version": "1.0.10",
7
+ "version": "1.0.13",
8
8
  "description": "Puppet Service for Wechaty",
9
9
  "type": "module",
10
10
  "exports": {
@@ -34,6 +34,7 @@ class EventStreamManager {
34
34
  protected eventStream: undefined | grpc.ServerWritableStream<grpcPuppet.EventRequest, grpcPuppet.EventResponse>
35
35
 
36
36
  private puppetListening = false
37
+ private offCallbackList: (() => void)[] = []
37
38
 
38
39
  constructor (
39
40
  public puppet: PUPPET.impls.PuppetInterface,
@@ -53,10 +54,14 @@ class EventStreamManager {
53
54
  if (this.eventStream) {
54
55
  throw new Error('can not set twice')
55
56
  }
57
+
58
+ // clear all listeners before load new ones
59
+ this.removePuppetListeners()
60
+
56
61
  this.eventStream = stream
57
62
 
58
- const removeAllListeners = this.connectPuppetEventToStreamingCall()
59
- this.onStreamingCallEnd(removeAllListeners)
63
+ this.connectPuppetEventToStreamingCall()
64
+ this.onStreamingCallEnd()
60
65
 
61
66
  /**
62
67
  * Huan(202108):
@@ -112,6 +117,7 @@ class EventStreamManager {
112
117
  throw new Error('no this.eventStream')
113
118
  }
114
119
 
120
+ this.removePuppetListeners()
115
121
  this.eventStream.end()
116
122
  this.eventStream = undefined
117
123
  }
@@ -150,19 +156,9 @@ class EventStreamManager {
150
156
  }
151
157
  }
152
158
 
153
- public connectPuppetEventToStreamingCall (): () => void {
159
+ public connectPuppetEventToStreamingCall () {
154
160
  log.verbose('EventStreamManager', 'connectPuppetEventToStreamingCall() for %s', this.puppet)
155
161
 
156
- const offCallbackList = [] as (() => void)[]
157
- const offAll = () => {
158
- log.verbose('EventStreamManager',
159
- 'connectPuppetEventToStreamingCall() offAll() %s callbacks',
160
- offCallbackList.length,
161
- )
162
- offCallbackList.forEach(off => off())
163
- this.puppetListening = false
164
- }
165
-
166
162
  const eventNameList: PUPPET.types.PuppetEventName[] = Object.keys(PUPPET.types.PUPPET_EVENT_DICT) as PUPPET.types.PuppetEventName[]
167
163
  for (const eventName of eventNameList) {
168
164
  log.verbose('EventStreamManager',
@@ -176,105 +172,105 @@ class EventStreamManager {
176
172
  const listener = (payload: PUPPET.payloads.EventDong) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_DONG, payload)
177
173
  this.puppet.on('dong', listener)
178
174
  const off = () => this.puppet.off('dong', listener)
179
- offCallbackList.push(off)
175
+ this.offCallbackList.push(off)
180
176
  break
181
177
  }
182
178
  case 'dirty': {
183
179
  const listener = (payload: PUPPET.payloads.EventDirty) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_DIRTY, payload)
184
180
  this.puppet.on('dirty', listener)
185
181
  const off = () => this.puppet.off('dirty', listener)
186
- offCallbackList.push(off)
182
+ this.offCallbackList.push(off)
187
183
  break
188
184
  }
189
185
  case 'error': {
190
186
  const listener = (payload: PUPPET.payloads.EventError) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ERROR, payload)
191
187
  this.puppet.on('error', listener)
192
188
  const off = () => this.puppet.off('error', listener)
193
- offCallbackList.push(off)
189
+ this.offCallbackList.push(off)
194
190
  break
195
191
  }
196
192
  case 'heartbeat': {
197
193
  const listener = (payload: PUPPET.payloads.EventHeartbeat) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT, payload)
198
194
  this.puppet.on('heartbeat', listener)
199
195
  const off = () => this.puppet.off('heartbeat', listener)
200
- offCallbackList.push(off)
196
+ this.offCallbackList.push(off)
201
197
  break
202
198
  }
203
199
  case 'friendship': {
204
200
  const listener = (payload: PUPPET.payloads.EventFriendship) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_FRIENDSHIP, payload)
205
201
  this.puppet.on('friendship', listener)
206
202
  const off = () => this.puppet.off('friendship', listener)
207
- offCallbackList.push(off)
203
+ this.offCallbackList.push(off)
208
204
  break
209
205
  }
210
206
  case 'login': {
211
207
  const listener = (payload: PUPPET.payloads.EventLogin) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_LOGIN, payload)
212
208
  this.puppet.on('login', listener)
213
209
  const off = () => this.puppet.off('login', listener)
214
- offCallbackList.push(off)
210
+ this.offCallbackList.push(off)
215
211
  break
216
212
  }
217
213
  case 'logout': {
218
214
  const listener = (payload: PUPPET.payloads.EventLogout) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_LOGOUT, payload)
219
215
  this.puppet.on('logout', listener)
220
216
  const off = () => this.puppet.off('logout', listener)
221
- offCallbackList.push(off)
217
+ this.offCallbackList.push(off)
222
218
  break
223
219
  }
224
220
  case 'message': {
225
221
  const listener = (payload: PUPPET.payloads.EventMessage) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_MESSAGE, payload)
226
222
  this.puppet.on('message', listener)
227
223
  const off = () => this.puppet.off('message', listener)
228
- offCallbackList.push(off)
224
+ this.offCallbackList.push(off)
229
225
  break
230
226
  }
231
227
  case 'post': {
232
228
  const listener = (payload: PUPPET.payloads.EventPost) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_POST, payload)
233
229
  this.puppet.on('post', listener)
234
230
  const off = () => this.puppet.off('post', listener)
235
- offCallbackList.push(off)
231
+ this.offCallbackList.push(off)
236
232
  break
237
233
  }
238
234
  case 'ready': {
239
235
  const listener = (payload: PUPPET.payloads.EventReady) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_READY, payload)
240
236
  this.puppet.on('ready', listener)
241
237
  const off = () => this.puppet.off('ready', listener)
242
- offCallbackList.push(off)
238
+ this.offCallbackList.push(off)
243
239
  break
244
240
  }
245
241
  case 'room-invite': {
246
242
  const listener = (payload: PUPPET.payloads.EventRoomInvite) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_INVITE, payload)
247
243
  this.puppet.on('room-invite', listener)
248
244
  const off = () => this.puppet.off('room-invite', listener)
249
- offCallbackList.push(off)
245
+ this.offCallbackList.push(off)
250
246
  break
251
247
  }
252
248
  case 'room-join': {
253
249
  const listener = (payload: PUPPET.payloads.EventRoomJoin) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_JOIN, payload)
254
250
  this.puppet.on('room-join', listener)
255
251
  const off = () => this.puppet.off('room-join', listener)
256
- offCallbackList.push(off)
252
+ this.offCallbackList.push(off)
257
253
  break
258
254
  }
259
255
  case 'room-leave': {
260
256
  const listener = (payload: PUPPET.payloads.EventRoomLeave) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_LEAVE, payload)
261
257
  this.puppet.on('room-leave', listener)
262
258
  const off = () => this.puppet.off('room-leave', listener)
263
- offCallbackList.push(off)
259
+ this.offCallbackList.push(off)
264
260
  break
265
261
  }
266
262
  case 'room-topic': {
267
263
  const listener = (payload: PUPPET.payloads.EventRoomTopic) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_TOPIC, payload)
268
264
  this.puppet.on('room-topic', listener)
269
265
  const off = () => this.puppet.off('room-topic', listener)
270
- offCallbackList.push(off)
266
+ this.offCallbackList.push(off)
271
267
  break
272
268
  }
273
269
  case 'scan': {
274
270
  const listener = (payload: PUPPET.payloads.EventScan) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_SCAN, payload)
275
271
  this.puppet.on('scan', listener)
276
272
  const off = () => this.puppet.off('scan', listener)
277
- offCallbackList.push(off)
273
+ this.offCallbackList.push(off)
278
274
  break
279
275
  }
280
276
  case 'reset':
@@ -288,17 +284,14 @@ class EventStreamManager {
288
284
  }
289
285
 
290
286
  this.puppetListening = true
291
- return offAll
292
287
  }
293
288
 
294
289
  /**
295
290
  * Detect if the streaming call was gone (GRPC disconnects)
296
291
  * https://github.com/grpc/grpc/issues/8117#issuecomment-362198092
297
292
  */
298
- private onStreamingCallEnd (
299
- removePuppetListeners: () => void,
300
- ): void {
301
- log.verbose('EventStreamManager', 'onStreamingCallEnd(callback)')
293
+ private onStreamingCallEnd () {
294
+ log.verbose('EventStreamManager', 'onStreamingCallEnd()')
302
295
 
303
296
  if (!this.eventStream) {
304
297
  throw new Error('no this.eventStream found')
@@ -324,7 +317,7 @@ class EventStreamManager {
324
317
  )
325
318
 
326
319
  if (this.puppetListening) {
327
- removePuppetListeners()
320
+ this.removePuppetListeners()
328
321
  }
329
322
  if (this.eventStream) {
330
323
  this.eventStream = undefined
@@ -336,7 +329,7 @@ class EventStreamManager {
336
329
  this.eventStream.on('error', err => {
337
330
  log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(error) fired: %s', err)
338
331
  if (this.puppetListening) {
339
- removePuppetListeners()
332
+ this.removePuppetListeners()
340
333
  }
341
334
  if (this.eventStream) {
342
335
  this.eventStream = undefined
@@ -348,7 +341,7 @@ class EventStreamManager {
348
341
  this.eventStream.on('finish', () => {
349
342
  log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(finish) fired')
350
343
  if (this.puppetListening) {
351
- removePuppetListeners()
344
+ this.removePuppetListeners()
352
345
  }
353
346
  if (this.eventStream) {
354
347
  this.eventStream = undefined
@@ -360,7 +353,7 @@ class EventStreamManager {
360
353
  this.eventStream.on('end', () => {
361
354
  log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(end) fired')
362
355
  if (this.puppetListening) {
363
- removePuppetListeners()
356
+ this.removePuppetListeners()
364
357
  }
365
358
  if (this.eventStream) {
366
359
  this.eventStream = undefined
@@ -372,7 +365,7 @@ class EventStreamManager {
372
365
  this.eventStream.on('close', () => {
373
366
  log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(close) fired')
374
367
  if (this.puppetListening) {
375
- removePuppetListeners()
368
+ this.removePuppetListeners()
376
369
  }
377
370
  if (this.eventStream) {
378
371
  this.eventStream = undefined
@@ -382,6 +375,13 @@ class EventStreamManager {
382
375
  })
383
376
  }
384
377
 
378
+ removePuppetListeners () {
379
+ while (this.offCallbackList.length > 0) {
380
+ const func = this.offCallbackList.pop()
381
+ func && func()
382
+ }
383
+ }
384
+
385
385
  }
386
386
 
387
387
  export { EventStreamManager }