@juzi/wechaty-puppet-service 1.0.106 → 1.0.108

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.
Files changed (32) hide show
  1. package/dist/cjs/src/client/puppet-service.d.ts +1 -0
  2. package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
  3. package/dist/cjs/src/client/puppet-service.js +44 -4
  4. package/dist/cjs/src/client/puppet-service.js.map +1 -1
  5. package/dist/cjs/src/config.js +2 -2
  6. package/dist/cjs/src/package-json.js +3 -3
  7. package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -1
  8. package/dist/cjs/src/server/puppet-implementation.js +48 -3
  9. package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
  10. package/dist/cjs/src/utils/pb-payload-helper.d.ts +1 -0
  11. package/dist/cjs/src/utils/pb-payload-helper.d.ts.map +1 -1
  12. package/dist/cjs/src/utils/pb-payload-helper.js +44 -1
  13. package/dist/cjs/src/utils/pb-payload-helper.js.map +1 -1
  14. package/dist/esm/src/client/puppet-service.d.ts +1 -0
  15. package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
  16. package/dist/esm/src/client/puppet-service.js +45 -5
  17. package/dist/esm/src/client/puppet-service.js.map +1 -1
  18. package/dist/esm/src/config.js +2 -2
  19. package/dist/esm/src/package-json.js +3 -3
  20. package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -1
  21. package/dist/esm/src/server/puppet-implementation.js +48 -3
  22. package/dist/esm/src/server/puppet-implementation.js.map +1 -1
  23. package/dist/esm/src/utils/pb-payload-helper.d.ts +1 -0
  24. package/dist/esm/src/utils/pb-payload-helper.d.ts.map +1 -1
  25. package/dist/esm/src/utils/pb-payload-helper.js +42 -0
  26. package/dist/esm/src/utils/pb-payload-helper.js.map +1 -1
  27. package/package.json +3 -3
  28. package/src/client/puppet-service.ts +50 -5
  29. package/src/config.ts +2 -2
  30. package/src/package-json.ts +3 -3
  31. package/src/server/puppet-implementation.ts +57 -3
  32. package/src/utils/pb-payload-helper.ts +39 -0
@@ -50,7 +50,7 @@ import { packageJson } from '../package-json.js'
50
50
 
51
51
  import { GrpcManager } from './grpc-manager.js'
52
52
  import { PayloadStore } from './payload-store.js'
53
- import { OptionalBooleanUnwrapper, OptionalBooleanWrapper, callRecordPbToPayload, channelPayloadToPb, channelPbToPayload, chatHistoryPbToPayload, postPayloadToPb, roomMemberPbToPayload, urlLinkPbToPayload } from '../utils/pb-payload-helper.js'
53
+ import { OptionalBooleanUnwrapper, OptionalBooleanWrapper, callRecordPbToPayload, channelPayloadToPb, channelPbToPayload, chatHistoryPbToPayload, contactPbToPayload, postPayloadToPb, roomMemberPbToPayload, urlLinkPbToPayload } from '../utils/pb-payload-helper.js'
54
54
  import type { MessageBroadcastTargets } from '@juzi/wechaty-puppet/dist/esm/src/schemas/message.js'
55
55
  import { timeoutPromise } from 'gerror'
56
56
  import { BooleanIndicator } from 'state-switch'
@@ -763,6 +763,49 @@ class PuppetService extends PUPPET.Puppet {
763
763
  return payload
764
764
  }
765
765
 
766
+ override async batchContactRawPayload (contactIdList: string[]): Promise<Map<string, PUPPET.payloads.Contact>> {
767
+ log.verbose('PuppetService', 'batchContactRawPayload(%s)', contactIdList)
768
+
769
+ const result = new Map<string, PUPPET.payloads.Contact>()
770
+ const contactIdSet = new Set<string>(contactIdList)
771
+ const needGetSet = new Set<string>()
772
+ for (const contactId of contactIdSet) {
773
+ const cachedContactPayload = await this._payloadStore.contact?.get(contactId)
774
+ if (cachedContactPayload) {
775
+ result.set(contactId, cachedContactPayload)
776
+ } else {
777
+ needGetSet.add(contactId)
778
+ }
779
+ }
780
+
781
+ if (needGetSet.size > 0) {
782
+ try {
783
+ const request = new grpcPuppet.BatchContactPayloadRequest()
784
+ request.setIdsList(Array.from(needGetSet))
785
+
786
+ const response = await util.promisify(
787
+ this.grpcManager.client.batchContactPayload
788
+ .bind(this.grpcManager.client),
789
+ )(request)
790
+
791
+ const payloads = response.getContactPayloadsList()
792
+ for (const payload of payloads) {
793
+ const contactId = payload.getId()
794
+ const puppetPayload = contactPbToPayload(payload)
795
+ result.set(contactId, puppetPayload)
796
+ await this._payloadStore.contact?.set(contactId, puppetPayload)
797
+ }
798
+ } catch (e) {
799
+ log.error('PuppetService', 'batchContactRawPayload(%s, %s) error: %s, use one by one method', contactIdList, needGetSet, e)
800
+ for (const contactId of needGetSet) {
801
+ const payload = await this.contactRawPayload(contactId)
802
+ result.set(contactId, payload)
803
+ }
804
+ }
805
+ }
806
+ return result
807
+ }
808
+
766
809
  override async contactPayloadModify (contactId: string, payload: Partial<PUPPET.payloads.Contact>): Promise<void> {
767
810
  log.verbose('PuppetService', 'contactPayloadModify(%s, %s)', contactId, JSON.stringify(payload))
768
811
 
@@ -1973,10 +2016,12 @@ class PuppetService extends PUPPET.Puppet {
1973
2016
  .bind(this.grpcManager.client),
1974
2017
  )(request)
1975
2018
 
1976
- const map = response.getMembersMap()
1977
- for (const [ contactId, payload ] of Object.entries(map)) {
1978
- result.set(contactId, roomMemberPbToPayload(payload))
1979
- cachedPayload[contactId] = payload
2019
+ const payloads = response.getMemberPayloadsList()
2020
+ for (const payload of payloads) {
2021
+ const contactId = payload.getId()
2022
+ const puppetPayload = roomMemberPbToPayload(payload)
2023
+ result.set(contactId, puppetPayload)
2024
+ cachedPayload[contactId] = puppetPayload
1980
2025
  }
1981
2026
  await this._payloadStore.roomMember?.set(roomId, cachedPayload)
1982
2027
  } catch (e) {
package/src/config.ts CHANGED
@@ -24,8 +24,8 @@ const envVars = {
24
24
  */
25
25
  const GRPC_OPTIONS = {
26
26
  // https://github.com/wechaty/wechaty-puppet-service/issues/86
27
- 'grpc.max_receive_message_length': 1024 * 1024 * 20,
28
- 'grpc.max_send_message_length': 1024 * 1024 * 20,
27
+ 'grpc.max_receive_message_length': 1024 * 1024 * 80,
28
+ 'grpc.max_send_message_length': 1024 * 1024 * 80,
29
29
  }
30
30
 
31
31
  export const NO_LOG_EVENTS: grpcPuppet.EventTypeMap[keyof grpcPuppet.EventTypeMap][] = [
@@ -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.106",
7
+ "version": "1.0.108",
8
8
  "description": "Puppet Service for Wechaty",
9
9
  "type": "module",
10
10
  "exports": {
@@ -55,7 +55,7 @@ export const packageJson: PackageJson = {
55
55
  "@chatie/eslint-config": "^1.0.4",
56
56
  "@chatie/semver": "^0.4.7",
57
57
  "@chatie/tsconfig": "^4.6.3",
58
- "@juzi/wechaty-puppet": "^1.0.104",
58
+ "@juzi/wechaty-puppet": "^1.0.106",
59
59
  "@juzi/wechaty-puppet-mock": "^1.0.1",
60
60
  "@swc/core": "1.3.39",
61
61
  "@types/google-protobuf": "^3.15.5",
@@ -77,7 +77,7 @@ export const packageJson: PackageJson = {
77
77
  "@juzi/wechaty-puppet": "^1.0.84"
78
78
  },
79
79
  "dependencies": {
80
- "@juzi/wechaty-grpc": "^1.0.92",
80
+ "@juzi/wechaty-grpc": "^1.0.94",
81
81
  "clone-class": "^1.1.1",
82
82
  "ducks": "^1.0.2",
83
83
  "file-box": "^1.5.5",
@@ -293,6 +293,57 @@ function puppetImplementation (
293
293
  }
294
294
  },
295
295
 
296
+ batchContactPayload: async (call, callback) => {
297
+ log.verbose('PuppetServiceImpl', 'batchContactPayload()')
298
+
299
+ try {
300
+ const contactIdList = call.request.getIdsList()
301
+
302
+ const payloadMap = await puppet.batchContactPayload(contactIdList)
303
+
304
+ const response = new grpcPuppet.BatchContactPayloadResponse()
305
+
306
+ const payloads: grpcPuppet.ContactPayloadResponse[] = []
307
+ for (const [ _, payload ] of payloadMap.entries()) {
308
+ const pb = new grpcPuppet.ContactPayloadResponse()
309
+ pb.setAddress(payload.address || '')
310
+ pb.setAlias(payload.alias || '')
311
+ pb.setAvatar(payload.avatar)
312
+ pb.setCity(payload.city || '')
313
+ pb.setFriend(payload.friend || false)
314
+ pb.setGender(payload.gender)
315
+ pb.setId(payload.id)
316
+ pb.setName(payload.name)
317
+ pb.setProvince(payload.province || '')
318
+ pb.setSignature(payload.signature || '')
319
+ pb.setStar(payload.star || false)
320
+ pb.setType(payload.type)
321
+ /**
322
+ * @deprecated `payload.weixin` will be removed in v2.0
323
+ * @link https://github.com/wechaty/grpc/issues/174
324
+ */
325
+ pb.setWeixin(payload.handle || payload.weixin || '')
326
+ pb.setPhonesList(payload.phone)
327
+ pb.setCoworker(payload.coworker || false)
328
+ pb.setCorporation(payload.corporation || '')
329
+ pb.setTitle(payload.title || '')
330
+ pb.setDescription(payload.description || '')
331
+ pb.setAdditionalInfo(payload.additionalInfo || '')
332
+ pb.setTagIdsList(payload.tags || [])
333
+ pb.setRealName(payload.realName || '')
334
+ pb.setAka(payload.aka || '')
335
+ payloads.push(pb)
336
+ }
337
+
338
+ response.setContactPayloadsList(payloads)
339
+
340
+ return callback(null, response)
341
+
342
+ } catch (e) {
343
+ return grpcError('batchContactPayload', e, callback)
344
+ }
345
+ },
346
+
296
347
  contactPayloadModify: async (call, callback) => {
297
348
  log.verbose('PuppetServiceImpl', 'contactPayloadModify()')
298
349
 
@@ -1663,8 +1714,9 @@ function puppetImplementation (
1663
1714
  const payloadMap = await puppet.batchRoomMemberPayload(roomId, contactIdList)
1664
1715
 
1665
1716
  const response = new grpcPuppet.BatchRoomMemberPayloadResponse()
1666
- const responseMap = response.getMembersMap()
1667
- for (const [ contactId, payload ] of payloadMap.entries()) {
1717
+
1718
+ const payloads: grpcPuppet.RoomMemberPayloadResponse[] = []
1719
+ for (const [ _, payload ] of payloadMap.entries()) {
1668
1720
  const pb = new grpcPuppet.RoomMemberPayloadResponse()
1669
1721
  pb.setAvatar(payload.avatar)
1670
1722
  pb.setId(payload.id)
@@ -1674,9 +1726,11 @@ function puppetImplementation (
1674
1726
  pb.setAdditionalInfo(payload.additionalInfo || '')
1675
1727
  pb.setJoinScene(payload.joinScene || PUPPET.types.RoomMemberJoinScene.Unknown)
1676
1728
  pb.setJoinTime(payload.joinTime || 0)
1677
- responseMap.set(contactId, pb)
1729
+ payloads.push(pb)
1678
1730
  }
1679
1731
 
1732
+ response.setMemberPayloadsList(payloads)
1733
+
1680
1734
  return callback(null, response)
1681
1735
 
1682
1736
  } catch (e) {
@@ -79,6 +79,8 @@ export const channelPayloadToPb = (grpcPuppet: grpcPuppet, channelPayload: PUPPE
79
79
  if (channelPayload.url) { pbChannelPayload.setUrl(channelPayload.url) }
80
80
  if (channelPayload.objectId) { pbChannelPayload.setObjectId(channelPayload.objectId) }
81
81
  if (channelPayload.objectNonceId) { pbChannelPayload.setObjectNonceId(channelPayload.objectNonceId) }
82
+ if (channelPayload.authIconUrl) { pbChannelPayload.setAuthIconUrl(channelPayload.authIconUrl) }
83
+ if (channelPayload.authJob) { pbChannelPayload.setAuthJob(channelPayload.authJob) }
82
84
  return pbChannelPayload
83
85
  }
84
86
 
@@ -389,3 +391,40 @@ export const roomMemberPbToPayload = (pb: puppet.RoomMemberPayloadResponse) => {
389
391
 
390
392
  return payload
391
393
  }
394
+
395
+ export const contactPbToPayload = (pb: puppet.ContactPayloadResponse) => {
396
+ const payload: PUPPET.payloads.Contact = {
397
+ address : pb.getAddress(),
398
+ alias : pb.getAlias(),
399
+ avatar : pb.getAvatar(),
400
+ city : pb.getCity(),
401
+ corporation : pb.getCorporation(),
402
+ coworker : pb.getCoworker(),
403
+ description : pb.getDescription(),
404
+ friend : pb.getFriend(),
405
+ gender : pb.getGender() as number,
406
+ /**
407
+ * Huan(202203): rename `getWeixin()` to `getHandle()` in v2.0.0
408
+ * @link https://github.com/wechaty/grpc/issues/174
409
+ */
410
+ handle : pb.getWeixin(),
411
+ id : pb.getId(),
412
+ name : pb.getName(),
413
+ phone : pb.getPhonesList(),
414
+ province : pb.getProvince(),
415
+ signature : pb.getSignature(),
416
+ star : pb.getStar(),
417
+ title : pb.getTitle(),
418
+ type : pb.getType() as number,
419
+ /**
420
+ * `weixin` is deprecated, will be removed after Dec 31, 2022
421
+ * use `handle` instead.
422
+ */
423
+ weixin : pb.getWeixin(),
424
+ additionalInfo: pb.getAdditionalInfo(),
425
+ tags : pb.getTagIdsList(),
426
+ realName : pb.getRealName(),
427
+ aka : pb.getAka(),
428
+ }
429
+ return payload
430
+ }