@juzi/wechaty-puppet-service 1.0.105 → 1.0.107
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.
- package/dist/cjs/src/client/puppet-service.d.ts +2 -0
- package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
- package/dist/cjs/src/client/puppet-service.js +84 -0
- package/dist/cjs/src/client/puppet-service.js.map +1 -1
- package/dist/cjs/src/package-json.js +3 -3
- package/dist/cjs/src/package-json.js.map +1 -1
- package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -1
- package/dist/cjs/src/server/puppet-implementation.js +71 -0
- package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
- package/dist/cjs/src/utils/pb-payload-helper.d.ts +2 -0
- package/dist/cjs/src/utils/pb-payload-helper.d.ts.map +1 -1
- package/dist/cjs/src/utils/pb-payload-helper.js +52 -1
- package/dist/cjs/src/utils/pb-payload-helper.js.map +1 -1
- package/dist/esm/src/client/puppet-service.d.ts +2 -0
- package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
- package/dist/esm/src/client/puppet-service.js +85 -1
- package/dist/esm/src/client/puppet-service.js.map +1 -1
- package/dist/esm/src/package-json.js +3 -3
- package/dist/esm/src/package-json.js.map +1 -1
- package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -1
- package/dist/esm/src/server/puppet-implementation.js +71 -0
- package/dist/esm/src/server/puppet-implementation.js.map +1 -1
- package/dist/esm/src/utils/pb-payload-helper.d.ts +2 -0
- package/dist/esm/src/utils/pb-payload-helper.d.ts.map +1 -1
- package/dist/esm/src/utils/pb-payload-helper.js +49 -0
- package/dist/esm/src/utils/pb-payload-helper.js.map +1 -1
- package/package.json +3 -3
- package/src/client/puppet-service.ts +94 -1
- package/src/package-json.ts +3 -3
- package/src/server/puppet-implementation.ts +86 -1
- package/src/utils/pb-payload-helper.ts +52 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juzi/wechaty-puppet-service",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.107",
|
|
4
4
|
"description": "Puppet Service for Wechaty",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@chatie/eslint-config": "^1.0.4",
|
|
52
52
|
"@chatie/semver": "^0.4.7",
|
|
53
53
|
"@chatie/tsconfig": "^4.6.3",
|
|
54
|
-
"@juzi/wechaty-puppet": "^1.0.
|
|
54
|
+
"@juzi/wechaty-puppet": "^1.0.105",
|
|
55
55
|
"@juzi/wechaty-puppet-mock": "^1.0.1",
|
|
56
56
|
"@swc/core": "1.3.39",
|
|
57
57
|
"@types/google-protobuf": "^3.15.5",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"@juzi/wechaty-puppet": "^1.0.84"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@juzi/wechaty-grpc": "^1.0.
|
|
76
|
+
"@juzi/wechaty-grpc": "^1.0.93",
|
|
77
77
|
"clone-class": "^1.1.1",
|
|
78
78
|
"ducks": "^1.0.2",
|
|
79
79
|
"file-box": "^1.5.5",
|
|
@@ -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, 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
|
|
|
@@ -1942,6 +1985,56 @@ class PuppetService extends PUPPET.Puppet {
|
|
|
1942
1985
|
return payload
|
|
1943
1986
|
}
|
|
1944
1987
|
|
|
1988
|
+
override async batchRoomMemberRawPayload (roomId: string, contactIdList: string[]): Promise<Map<string, PUPPET.payloads.RoomMember>> {
|
|
1989
|
+
log.verbose('PuppetService', 'batchRoomMemberRawPayload(%s, %s)', roomId, contactIdList)
|
|
1990
|
+
|
|
1991
|
+
const result = new Map<string, PUPPET.payloads.RoomMember>()
|
|
1992
|
+
const contactIdSet = new Set<string>(contactIdList)
|
|
1993
|
+
let needGetSet = new Set<string>()
|
|
1994
|
+
const cachedPayload = await this._payloadStore.roomMember?.get(roomId) || {}
|
|
1995
|
+
if (Object.keys(cachedPayload).length > 0) {
|
|
1996
|
+
for (const contactId of contactIdSet) {
|
|
1997
|
+
const cachedRoomMemberPayload = cachedPayload[contactId]
|
|
1998
|
+
if (cachedRoomMemberPayload) {
|
|
1999
|
+
result.set(contactId, cachedRoomMemberPayload)
|
|
2000
|
+
} else {
|
|
2001
|
+
needGetSet.add(contactId)
|
|
2002
|
+
}
|
|
2003
|
+
}
|
|
2004
|
+
} else {
|
|
2005
|
+
needGetSet = contactIdSet
|
|
2006
|
+
}
|
|
2007
|
+
|
|
2008
|
+
if (needGetSet.size > 0) {
|
|
2009
|
+
try {
|
|
2010
|
+
const request = new grpcPuppet.BatchRoomMemberPayloadRequest()
|
|
2011
|
+
request.setId(roomId)
|
|
2012
|
+
request.setMemberIdsList(Array.from(needGetSet))
|
|
2013
|
+
|
|
2014
|
+
const response = await util.promisify(
|
|
2015
|
+
this.grpcManager.client.batchRoomMemberPayload
|
|
2016
|
+
.bind(this.grpcManager.client),
|
|
2017
|
+
)(request)
|
|
2018
|
+
|
|
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
|
|
2025
|
+
}
|
|
2026
|
+
await this._payloadStore.roomMember?.set(roomId, cachedPayload)
|
|
2027
|
+
} catch (e) {
|
|
2028
|
+
log.error('PuppetService', 'batchRoomMemberRawPayload(%s, %s) error: %s, use one by one method', roomId, needGetSet, e)
|
|
2029
|
+
for (const contactId of needGetSet) {
|
|
2030
|
+
const payload = await this.roomMemberRawPayload(roomId, contactId)
|
|
2031
|
+
result.set(contactId, payload)
|
|
2032
|
+
}
|
|
2033
|
+
}
|
|
2034
|
+
}
|
|
2035
|
+
return result
|
|
2036
|
+
}
|
|
2037
|
+
|
|
1945
2038
|
override async roomAnnounce (roomId: string) : Promise<string>
|
|
1946
2039
|
override async roomAnnounce (roomId: string, text: string) : Promise<void>
|
|
1947
2040
|
|
package/src/package-json.ts
CHANGED
|
@@ -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.
|
|
7
|
+
"version": "1.0.107",
|
|
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.
|
|
58
|
+
"@juzi/wechaty-puppet": "^1.0.105",
|
|
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.
|
|
80
|
+
"@juzi/wechaty-grpc": "^1.0.93",
|
|
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
|
|
|
@@ -1437,7 +1488,7 @@ function puppetImplementation (
|
|
|
1437
1488
|
const roomId = call.request.getId()
|
|
1438
1489
|
|
|
1439
1490
|
const fileBox = await puppet.roomAvatar(roomId)
|
|
1440
|
-
const serializedFileBox = await serializeFileBox(fileBox)
|
|
1491
|
+
const serializedFileBox = await serializeFileBox(fileBox!)
|
|
1441
1492
|
|
|
1442
1493
|
const response = new grpcPuppet.RoomAvatarResponse()
|
|
1443
1494
|
response.setFileBox(serializedFileBox)
|
|
@@ -1653,6 +1704,40 @@ function puppetImplementation (
|
|
|
1653
1704
|
}
|
|
1654
1705
|
},
|
|
1655
1706
|
|
|
1707
|
+
batchRoomMemberPayload: async (call, callback) => {
|
|
1708
|
+
log.verbose('PuppetServiceImpl', 'batchRoomMemberPayload()')
|
|
1709
|
+
|
|
1710
|
+
try {
|
|
1711
|
+
const roomId = call.request.getId()
|
|
1712
|
+
const contactIdList = call.request.getMemberIdsList()
|
|
1713
|
+
|
|
1714
|
+
const payloadMap = await puppet.batchRoomMemberPayload(roomId, contactIdList)
|
|
1715
|
+
|
|
1716
|
+
const response = new grpcPuppet.BatchRoomMemberPayloadResponse()
|
|
1717
|
+
|
|
1718
|
+
const payloads: grpcPuppet.RoomMemberPayloadResponse[] = []
|
|
1719
|
+
for (const [ _, payload ] of payloadMap.entries()) {
|
|
1720
|
+
const pb = new grpcPuppet.RoomMemberPayloadResponse()
|
|
1721
|
+
pb.setAvatar(payload.avatar)
|
|
1722
|
+
pb.setId(payload.id)
|
|
1723
|
+
pb.setInviterId(payload.inviterId || '')
|
|
1724
|
+
pb.setName(payload.name)
|
|
1725
|
+
pb.setRoomAlias(payload.roomAlias || '')
|
|
1726
|
+
pb.setAdditionalInfo(payload.additionalInfo || '')
|
|
1727
|
+
pb.setJoinScene(payload.joinScene || PUPPET.types.RoomMemberJoinScene.Unknown)
|
|
1728
|
+
pb.setJoinTime(payload.joinTime || 0)
|
|
1729
|
+
payloads.push(pb)
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
response.setMemberPayloadsList(payloads)
|
|
1733
|
+
|
|
1734
|
+
return callback(null, response)
|
|
1735
|
+
|
|
1736
|
+
} catch (e) {
|
|
1737
|
+
return grpcError('batchRoomMemberPayload', e, callback)
|
|
1738
|
+
}
|
|
1739
|
+
},
|
|
1740
|
+
|
|
1656
1741
|
roomPayload: async (call, callback) => {
|
|
1657
1742
|
log.verbose('PuppetServiceImpl', 'roomPayload()')
|
|
1658
1743
|
|
|
@@ -374,3 +374,55 @@ export const chatHistoryPayloadToPb = async (grpcPuppet: grpcPuppet, chatHistory
|
|
|
374
374
|
|
|
375
375
|
return list
|
|
376
376
|
}
|
|
377
|
+
|
|
378
|
+
export const roomMemberPbToPayload = (pb: puppet.RoomMemberPayloadResponse) => {
|
|
379
|
+
const payload: PUPPET.payloads.RoomMember = {
|
|
380
|
+
avatar : pb.getAvatar(),
|
|
381
|
+
id : pb.getId(),
|
|
382
|
+
inviterId : pb.getInviterId(),
|
|
383
|
+
name : pb.getName(),
|
|
384
|
+
roomAlias : pb.getRoomAlias(),
|
|
385
|
+
additionalInfo: pb.getAdditionalInfo(),
|
|
386
|
+
joinScene : pb.getJoinScene(),
|
|
387
|
+
joinTime : pb.getJoinTime(),
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
return payload
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
export const contactPbToPayload = (pb: puppet.ContactPayloadResponse) => {
|
|
394
|
+
const payload: PUPPET.payloads.Contact = {
|
|
395
|
+
address : pb.getAddress(),
|
|
396
|
+
alias : pb.getAlias(),
|
|
397
|
+
avatar : pb.getAvatar(),
|
|
398
|
+
city : pb.getCity(),
|
|
399
|
+
corporation : pb.getCorporation(),
|
|
400
|
+
coworker : pb.getCoworker(),
|
|
401
|
+
description : pb.getDescription(),
|
|
402
|
+
friend : pb.getFriend(),
|
|
403
|
+
gender : pb.getGender() as number,
|
|
404
|
+
/**
|
|
405
|
+
* Huan(202203): rename `getWeixin()` to `getHandle()` in v2.0.0
|
|
406
|
+
* @link https://github.com/wechaty/grpc/issues/174
|
|
407
|
+
*/
|
|
408
|
+
handle : pb.getWeixin(),
|
|
409
|
+
id : pb.getId(),
|
|
410
|
+
name : pb.getName(),
|
|
411
|
+
phone : pb.getPhonesList(),
|
|
412
|
+
province : pb.getProvince(),
|
|
413
|
+
signature : pb.getSignature(),
|
|
414
|
+
star : pb.getStar(),
|
|
415
|
+
title : pb.getTitle(),
|
|
416
|
+
type : pb.getType() as number,
|
|
417
|
+
/**
|
|
418
|
+
* `weixin` is deprecated, will be removed after Dec 31, 2022
|
|
419
|
+
* use `handle` instead.
|
|
420
|
+
*/
|
|
421
|
+
weixin : pb.getWeixin(),
|
|
422
|
+
additionalInfo: pb.getAdditionalInfo(),
|
|
423
|
+
tags : pb.getTagIdsList(),
|
|
424
|
+
realName : pb.getRealName(),
|
|
425
|
+
aka : pb.getAka(),
|
|
426
|
+
}
|
|
427
|
+
return payload
|
|
428
|
+
}
|