@juzi/wechaty-puppet-service 1.0.44 → 1.0.46
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 +3 -0
- package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
- package/dist/cjs/src/client/puppet-service.js +41 -69
- package/dist/cjs/src/client/puppet-service.js.map +1 -1
- package/dist/cjs/src/package-json.d.ts.map +1 -1
- package/dist/cjs/src/package-json.js +4 -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 +39 -61
- package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
- package/dist/cjs/src/utils/pb-payload-helper.d.ts +6 -2
- package/dist/cjs/src/utils/pb-payload-helper.d.ts.map +1 -1
- package/dist/cjs/src/utils/pb-payload-helper.js +170 -1
- package/dist/cjs/src/utils/pb-payload-helper.js.map +1 -1
- package/dist/esm/src/client/puppet-service.d.ts +3 -0
- package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
- package/dist/esm/src/client/puppet-service.js +42 -70
- package/dist/esm/src/client/puppet-service.js.map +1 -1
- package/dist/esm/src/package-json.d.ts.map +1 -1
- package/dist/esm/src/package-json.js +4 -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 +40 -62
- package/dist/esm/src/server/puppet-implementation.js.map +1 -1
- package/dist/esm/src/utils/pb-payload-helper.d.ts +6 -2
- package/dist/esm/src/utils/pb-payload-helper.d.ts.map +1 -1
- package/dist/esm/src/utils/pb-payload-helper.js +143 -0
- package/dist/esm/src/utils/pb-payload-helper.js.map +1 -1
- package/package.json +4 -3
- package/src/client/puppet-service.ts +56 -66
- package/src/package-json.ts +4 -3
- package/src/server/puppet-implementation.ts +50 -62
- package/src/utils/pb-payload-helper.ts +143 -2
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.46",
|
|
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.50",
|
|
55
55
|
"@juzi/wechaty-puppet-mock": "^1.0.1",
|
|
56
56
|
"@types/google-protobuf": "^3.15.5",
|
|
57
57
|
"@types/lru-cache": "^7.5.0",
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
"@types/temp": "^0.9.1",
|
|
60
60
|
"@types/uuid": "^8.3.4",
|
|
61
61
|
"@types/ws": "^8.5.3",
|
|
62
|
+
"esquery": "1.4.0",
|
|
62
63
|
"get-port": "^6.1.2",
|
|
63
64
|
"temp": "^0.9.4",
|
|
64
65
|
"typed-emitter": "^1.5.0-from-event",
|
|
@@ -69,7 +70,7 @@
|
|
|
69
70
|
"@juzi/wechaty-puppet": "^1.0.46"
|
|
70
71
|
},
|
|
71
72
|
"dependencies": {
|
|
72
|
-
"@juzi/wechaty-grpc": "^1.0.
|
|
73
|
+
"@juzi/wechaty-grpc": "^1.0.47",
|
|
73
74
|
"@juzi/wechaty-redux": "^1.0.1",
|
|
74
75
|
"clone-class": "^1.1.1",
|
|
75
76
|
"ducks": "^1.0.2",
|
|
@@ -58,7 +58,8 @@ import { packageJson } from '../package-json.js'
|
|
|
58
58
|
|
|
59
59
|
import { GrpcManager } from './grpc-manager.js'
|
|
60
60
|
import { PayloadStore } from './payload-store.js'
|
|
61
|
-
import { channelPayloadToPb, channelPbToPayload,
|
|
61
|
+
import { channelPayloadToPb, channelPbToPayload, postPayloadToPb, urlLinkPbToPayload } from '../utils/pb-payload-helper.js'
|
|
62
|
+
import type { MessageBroadcastTargets, MessageBroadcastTargetType } from '@juzi/wechaty-puppet/dist/esm/src/schemas/message.js'
|
|
62
63
|
|
|
63
64
|
export type PuppetServiceOptions = PUPPET.PuppetOptions & {
|
|
64
65
|
authority? : string
|
|
@@ -715,24 +716,24 @@ class PuppetService extends PUPPET.Puppet {
|
|
|
715
716
|
if (payload.id) {
|
|
716
717
|
throw new Error('cannot modify contactId')
|
|
717
718
|
}
|
|
718
|
-
if (payload.gender) { request.setGender(payload.gender) }
|
|
719
|
-
if (payload.type) { request.setType(payload.type) }
|
|
720
|
-
if (payload.name) { request.setName(payload.name) }
|
|
721
|
-
if (payload.avatar) { request.setAvatar(payload.avatar) }
|
|
722
|
-
if (payload.address) { request.setAddress(payload.address) }
|
|
723
|
-
if (payload.alias) { request.setAlias(payload.alias) }
|
|
724
|
-
if (payload.city) { request.setCity(payload.city) }
|
|
725
|
-
if (payload.friend) { request.setFriend(payload.friend) }
|
|
726
|
-
if (payload.province) { request.setProvince(payload.province) }
|
|
727
|
-
if (payload.star) { request.setStar(payload.star) }
|
|
728
|
-
if (payload.weixin) { request.setWeixin(payload.weixin) }
|
|
729
|
-
if (payload.corporation) { request.setCorporation(payload.corporation) }
|
|
730
|
-
if (payload.title) { request.setTitle(payload.title) }
|
|
731
|
-
if (payload.description) { request.setDescription(payload.description) }
|
|
732
|
-
if (payload.coworker) { request.setCoworker(payload.coworker) }
|
|
733
|
-
if (payload.phone) { request.setPhonesList(payload.phone) }
|
|
734
|
-
if (payload.additionalInfo) { request.setAdditionalInfo(payload.additionalInfo) }
|
|
735
|
-
if (payload.tags) { request.setTagIdsList(payload.tags) }
|
|
719
|
+
if (typeof payload.gender !== 'undefined') { request.setGender(payload.gender) }
|
|
720
|
+
if (typeof payload.type !== 'undefined') { request.setType(payload.type) }
|
|
721
|
+
if (typeof payload.name !== 'undefined') { request.setName(payload.name) }
|
|
722
|
+
if (typeof payload.avatar !== 'undefined') { request.setAvatar(payload.avatar) }
|
|
723
|
+
if (typeof payload.address !== 'undefined') { request.setAddress(payload.address) }
|
|
724
|
+
if (typeof payload.alias !== 'undefined') { request.setAlias(payload.alias) }
|
|
725
|
+
if (typeof payload.city !== 'undefined') { request.setCity(payload.city) }
|
|
726
|
+
if (typeof payload.friend !== 'undefined') { request.setFriend(payload.friend) }
|
|
727
|
+
if (typeof payload.province !== 'undefined') { request.setProvince(payload.province) }
|
|
728
|
+
if (typeof payload.star !== 'undefined') { request.setStar(payload.star) }
|
|
729
|
+
if (typeof payload.weixin !== 'undefined') { request.setWeixin(payload.weixin) }
|
|
730
|
+
if (typeof payload.corporation !== 'undefined') { request.setCorporation(payload.corporation) }
|
|
731
|
+
if (typeof payload.title !== 'undefined') { request.setTitle(payload.title) }
|
|
732
|
+
if (typeof payload.description !== 'undefined') { request.setDescription(payload.description) }
|
|
733
|
+
if (typeof payload.coworker !== 'undefined') { request.setCoworker(payload.coworker) }
|
|
734
|
+
if (typeof payload.phone !== 'undefined') { request.setPhonesList(payload.phone) }
|
|
735
|
+
if (typeof payload.additionalInfo !== 'undefined') { request.setAdditionalInfo(payload.additionalInfo) }
|
|
736
|
+
if (typeof payload.tags !== 'undefined') { request.setTagIdsList(payload.tags) }
|
|
736
737
|
|
|
737
738
|
await util.promisify(
|
|
738
739
|
this.grpcManager.client.contactPayloadModify
|
|
@@ -1364,6 +1365,41 @@ class PuppetService extends PUPPET.Puppet {
|
|
|
1364
1365
|
return payload
|
|
1365
1366
|
}
|
|
1366
1367
|
|
|
1368
|
+
override async getMessageBroadcastTarget (): Promise<MessageBroadcastTargets> {
|
|
1369
|
+
log.verbose('PuppetService', 'getMessageBroadcastTarget()')
|
|
1370
|
+
|
|
1371
|
+
const request = new grpcPuppet.GetMessageBroadcastTargetRequest()
|
|
1372
|
+
|
|
1373
|
+
const response = await util.promisify(
|
|
1374
|
+
this.grpcManager.client.getMessageBroadcastTarget.bind(this.grpcManager.client),
|
|
1375
|
+
)(request)
|
|
1376
|
+
|
|
1377
|
+
return {
|
|
1378
|
+
contactIds: response.getContactIdsList(),
|
|
1379
|
+
roomIds: response.getRoomIdsList(),
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
override async createMessageBroadcast (targets: string[], type: MessageBroadcastTargetType, content: PUPPET.payloads.Post): Promise<string | void> {
|
|
1384
|
+
log.verbose('PuppetService', 'createMessageBroadcast()')
|
|
1385
|
+
|
|
1386
|
+
if (!PUPPET.payloads.isPostClient(content)) {
|
|
1387
|
+
throw new Error('can only create broadcast with client post')
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
const request = new grpcPuppet.CreateMessageBroadcastRequest()
|
|
1391
|
+
const post = await postPayloadToPb(grpcPuppet, content, this.serializeFileBox.bind(this))
|
|
1392
|
+
request.setContent(post)
|
|
1393
|
+
request.setTargetIdsList(targets)
|
|
1394
|
+
request.setType(type)
|
|
1395
|
+
|
|
1396
|
+
const response = await util.promisify(
|
|
1397
|
+
this.grpcManager.client.createMessageBroadcast.bind(this.grpcManager.client),
|
|
1398
|
+
)(request)
|
|
1399
|
+
|
|
1400
|
+
return response.getId()
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1367
1403
|
/**
|
|
1368
1404
|
*
|
|
1369
1405
|
* Room
|
|
@@ -2206,53 +2242,7 @@ class PuppetService extends PUPPET.Puppet {
|
|
|
2206
2242
|
throw new Error('can only publish client post now')
|
|
2207
2243
|
}
|
|
2208
2244
|
const request = new grpcPuppet.MomentPublishRequest()
|
|
2209
|
-
const post =
|
|
2210
|
-
post.setType(grpcPuppet.PostType.POST_TYPE_MOMENT)
|
|
2211
|
-
for (const item of payload.sayableList) {
|
|
2212
|
-
const sayable = new grpcPuppet.PostSayable()
|
|
2213
|
-
switch (item.type) {
|
|
2214
|
-
case PUPPET.types.Sayable.Text:
|
|
2215
|
-
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_TEXT)
|
|
2216
|
-
sayable.setText(item.payload.text)
|
|
2217
|
-
sayable.setMentionIdListList(item.payload.mentions)
|
|
2218
|
-
break
|
|
2219
|
-
case PUPPET.types.Sayable.Attachment: {
|
|
2220
|
-
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_FILE)
|
|
2221
|
-
const serializedFileBox = typeof item.payload.filebox === 'string' ? item.payload.filebox : await this.serializeFileBox(item.payload.filebox)
|
|
2222
|
-
sayable.setFileBox(serializedFileBox)
|
|
2223
|
-
break
|
|
2224
|
-
}
|
|
2225
|
-
case PUPPET.types.Sayable.Url: {
|
|
2226
|
-
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_URL)
|
|
2227
|
-
const urlLinkPayload = item.payload
|
|
2228
|
-
const pbUrlLinkPayload = urlLinkPayloadToPb(grpcPuppet, urlLinkPayload)
|
|
2229
|
-
sayable.setUrlLink(pbUrlLinkPayload)
|
|
2230
|
-
break
|
|
2231
|
-
}
|
|
2232
|
-
case PUPPET.types.Sayable.Channel: {
|
|
2233
|
-
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_CHANNEL)
|
|
2234
|
-
const channelPayload = item.payload
|
|
2235
|
-
const pbChannelPayload = channelPayloadToPb(grpcPuppet, channelPayload)
|
|
2236
|
-
sayable.setChannel(pbChannelPayload)
|
|
2237
|
-
break
|
|
2238
|
-
}
|
|
2239
|
-
default:
|
|
2240
|
-
throw new Error(`postPublish unsupported type ${item.type}`)
|
|
2241
|
-
}
|
|
2242
|
-
post.addSayableList(sayable)
|
|
2243
|
-
}
|
|
2244
|
-
if (payload.rootId) { post.setRootId(payload.rootId) }
|
|
2245
|
-
if (payload.parentId) { post.setParentId(payload.parentId) }
|
|
2246
|
-
if (payload.location) {
|
|
2247
|
-
const location = new grpcPuppet.LocationPayload()
|
|
2248
|
-
location.setAccuracy(payload.location.accuracy)
|
|
2249
|
-
location.setAddress(payload.location.address)
|
|
2250
|
-
location.setName(payload.location.name)
|
|
2251
|
-
location.setLatitude(payload.location.latitude)
|
|
2252
|
-
location.setLongitude(payload.location.longitude)
|
|
2253
|
-
post.setLocation(location)
|
|
2254
|
-
}
|
|
2255
|
-
post.setVisibleListList(payload.visibleList || [])
|
|
2245
|
+
const post = await postPayloadToPb(grpcPuppet, payload, this.serializeFileBox.bind(this))
|
|
2256
2246
|
request.setPost(post)
|
|
2257
2247
|
|
|
2258
2248
|
const result = await util.promisify(
|
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.46",
|
|
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.50",
|
|
59
59
|
"@juzi/wechaty-puppet-mock": "^1.0.1",
|
|
60
60
|
"@types/google-protobuf": "^3.15.5",
|
|
61
61
|
"@types/lru-cache": "^7.5.0",
|
|
@@ -63,6 +63,7 @@ export const packageJson: PackageJson = {
|
|
|
63
63
|
"@types/temp": "^0.9.1",
|
|
64
64
|
"@types/uuid": "^8.3.4",
|
|
65
65
|
"@types/ws": "^8.5.3",
|
|
66
|
+
"esquery": "1.4.0",
|
|
66
67
|
"get-port": "^6.1.2",
|
|
67
68
|
"temp": "^0.9.4",
|
|
68
69
|
"typed-emitter": "^1.5.0-from-event",
|
|
@@ -73,7 +74,7 @@ export const packageJson: PackageJson = {
|
|
|
73
74
|
"@juzi/wechaty-puppet": "^1.0.46"
|
|
74
75
|
},
|
|
75
76
|
"dependencies": {
|
|
76
|
-
"@juzi/wechaty-grpc": "^1.0.
|
|
77
|
+
"@juzi/wechaty-grpc": "^1.0.47",
|
|
77
78
|
"@juzi/wechaty-redux": "^1.0.1",
|
|
78
79
|
"clone-class": "^1.1.1",
|
|
79
80
|
"ducks": "^1.0.2",
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
import { log } from '../config.js'
|
|
44
44
|
import { grpcError } from './grpc-error.js'
|
|
45
45
|
import { EventStreamManager } from './event-stream-manager.js'
|
|
46
|
-
import { channelPayloadToPb,
|
|
46
|
+
import { channelPayloadToPb, postPbToPayload, urlLinkPayloadToPb } from '../utils/pb-payload-helper.js'
|
|
47
47
|
|
|
48
48
|
function puppetImplementation (
|
|
49
49
|
puppet : PUPPET.impls.PuppetInterface,
|
|
@@ -1100,6 +1100,54 @@ function puppetImplementation (
|
|
|
1100
1100
|
}
|
|
1101
1101
|
},
|
|
1102
1102
|
|
|
1103
|
+
getMessageBroadcastTarget: async (call, callback) => {
|
|
1104
|
+
log.verbose('PuppetServiceImpl', 'getMessageBroadcastTarget()')
|
|
1105
|
+
|
|
1106
|
+
void call
|
|
1107
|
+
try {
|
|
1108
|
+
const payload = await puppet.getMessageBroadcastTarget()
|
|
1109
|
+
|
|
1110
|
+
const response = new grpcPuppet.GetMessageBroadcastTargetResponse()
|
|
1111
|
+
response.setContactIdsList(payload.contactIds || [])
|
|
1112
|
+
response.setRoomIdsList(payload.roomIds || [])
|
|
1113
|
+
|
|
1114
|
+
return callback(null, response)
|
|
1115
|
+
} catch (e) {
|
|
1116
|
+
return grpcError('getMessageBroadcastTarget', e, callback)
|
|
1117
|
+
}
|
|
1118
|
+
},
|
|
1119
|
+
|
|
1120
|
+
createMessageBroadcast: async (call, callback) => {
|
|
1121
|
+
log.verbose('PuppetServiceImpl', 'createMessageBroadcast()')
|
|
1122
|
+
|
|
1123
|
+
try {
|
|
1124
|
+
const targets = call.request.getTargetIdsList()
|
|
1125
|
+
const type = call.request.getType()
|
|
1126
|
+
const post = call.request.getContent()
|
|
1127
|
+
|
|
1128
|
+
if (!post) {
|
|
1129
|
+
throw new Error('no post found')
|
|
1130
|
+
}
|
|
1131
|
+
if (post.getType() !== grpcPuppet.PostType.POST_TYPE_BROADCAST) {
|
|
1132
|
+
throw new Error('cannot create broadcast with non-broadcast post')
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
const payload = postPbToPayload(post, FileBoxUuid)
|
|
1136
|
+
|
|
1137
|
+
const id = await puppet.createMessageBroadcast(targets, type, payload)
|
|
1138
|
+
|
|
1139
|
+
const response = new grpcPuppet.CreateMessageBroadcastResponse()
|
|
1140
|
+
if (id) {
|
|
1141
|
+
response.setId(id)
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
return callback(null, response)
|
|
1145
|
+
|
|
1146
|
+
} catch (e) {
|
|
1147
|
+
return grpcError('createMessageBroadcast', e, callback)
|
|
1148
|
+
}
|
|
1149
|
+
},
|
|
1150
|
+
|
|
1103
1151
|
roomAdd: async (call, callback) => {
|
|
1104
1152
|
log.verbose('PuppetServiceImpl', 'roomAdd()')
|
|
1105
1153
|
|
|
@@ -1764,67 +1812,7 @@ function puppetImplementation (
|
|
|
1764
1812
|
if (type !== grpcPuppet.PostType.POST_TYPE_MOMENT) {
|
|
1765
1813
|
throw new Error('cannot publish non-moment post')
|
|
1766
1814
|
}
|
|
1767
|
-
const payload
|
|
1768
|
-
type: PUPPET.types.Post.Moment,
|
|
1769
|
-
sayableList: [],
|
|
1770
|
-
rootId: post.getRootId(),
|
|
1771
|
-
parentId: post.getParentId(),
|
|
1772
|
-
visibleList: post.getVisibleListList(),
|
|
1773
|
-
}
|
|
1774
|
-
const sayableList = post.getSayableListList()
|
|
1775
|
-
for (const sayable of sayableList) {
|
|
1776
|
-
let sayablePayload: PUPPET.payloads.Sayable | undefined
|
|
1777
|
-
switch (sayable.getType()) {
|
|
1778
|
-
case grpcPuppet.SayableType.SAYABLE_TYPE_TEXT:
|
|
1779
|
-
sayablePayload = PUPPET.payloads.sayable.text(sayable.getText() || '', sayable.getMentionIdListList())
|
|
1780
|
-
break
|
|
1781
|
-
case grpcPuppet.SayableType.SAYABLE_TYPE_FILE: {
|
|
1782
|
-
const fileJsonStr = sayable.getFileBox()
|
|
1783
|
-
if (!fileJsonStr) {
|
|
1784
|
-
break
|
|
1785
|
-
}
|
|
1786
|
-
const file = FileBoxUuid.fromJSON(fileJsonStr)
|
|
1787
|
-
sayablePayload = PUPPET.payloads.sayable.attachment(file)
|
|
1788
|
-
break
|
|
1789
|
-
}
|
|
1790
|
-
case grpcPuppet.SayableType.SAYABLE_TYPE_URL: {
|
|
1791
|
-
const urlLinkPayloadPb = sayable.getUrlLink()
|
|
1792
|
-
if (!urlLinkPayloadPb) {
|
|
1793
|
-
break
|
|
1794
|
-
}
|
|
1795
|
-
const urlLinkPayload = urlLinkPbToPayload(urlLinkPayloadPb)
|
|
1796
|
-
sayablePayload = PUPPET.payloads.sayable.url(urlLinkPayload)
|
|
1797
|
-
break
|
|
1798
|
-
}
|
|
1799
|
-
case grpcPuppet.SayableType.SAYABLE_TYPE_CHANNEL: {
|
|
1800
|
-
const channelPayloadPb = sayable.getChannel()
|
|
1801
|
-
if (!channelPayloadPb) {
|
|
1802
|
-
break
|
|
1803
|
-
}
|
|
1804
|
-
const channelPayload = channelPbToPayload(channelPayloadPb!)
|
|
1805
|
-
sayablePayload = PUPPET.payloads.sayable.channel(channelPayload)
|
|
1806
|
-
break
|
|
1807
|
-
}
|
|
1808
|
-
default:
|
|
1809
|
-
throw new Error(`unsupported postSayableType type ${sayable.getType()}`)
|
|
1810
|
-
}
|
|
1811
|
-
if (sayablePayload) {
|
|
1812
|
-
payload.sayableList.push(sayablePayload)
|
|
1813
|
-
} else {
|
|
1814
|
-
throw new Error(`unable to fetch sayable from ${JSON.stringify(sayable.toObject())}`)
|
|
1815
|
-
}
|
|
1816
|
-
}
|
|
1817
|
-
|
|
1818
|
-
const location = post.getLocation()
|
|
1819
|
-
if (location) {
|
|
1820
|
-
payload.location = {
|
|
1821
|
-
name: location.getName() || '',
|
|
1822
|
-
accuracy: location.getAccuracy() || 15,
|
|
1823
|
-
address: location.getAddress() || '',
|
|
1824
|
-
latitude: location.getLatitude(),
|
|
1825
|
-
longitude: location.getLatitude(),
|
|
1826
|
-
}
|
|
1827
|
-
}
|
|
1815
|
+
const payload = postPbToPayload(post, FileBoxUuid)
|
|
1828
1816
|
|
|
1829
1817
|
const momentId = await puppet.postPublish(payload)
|
|
1830
1818
|
const response = new grpcPuppet.MomentPublishResponse()
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
2
|
puppet,
|
|
3
3
|
} from '@juzi/wechaty-grpc'
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as PUPPET from '@juzi/wechaty-puppet'
|
|
6
|
+
import type { FileBox, FileBoxInterface } from 'file-box'
|
|
6
7
|
|
|
7
8
|
type grpcPuppet = typeof puppet
|
|
8
9
|
|
|
@@ -21,6 +22,14 @@ export const miniProgramPayloadToPb = (grpcPuppet: grpcPuppet, miniProgramPayloa
|
|
|
21
22
|
return pbMiniProgramPayload
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
export const miniProgramPbToPayload = (miniProgramPayloadPb: puppet.MiniProgramPayload) => {
|
|
26
|
+
const _miniProgramPayloadPb = miniProgramPayloadPb.toObject()
|
|
27
|
+
const miniProgramPayload: PUPPET.payloads.MiniProgram = {
|
|
28
|
+
..._miniProgramPayloadPb,
|
|
29
|
+
}
|
|
30
|
+
return miniProgramPayload
|
|
31
|
+
}
|
|
32
|
+
|
|
24
33
|
export const urlLinkPayloadToPb = (grpcPuppet: grpcPuppet, urlLinkPayload: PUPPET.payloads.UrlLink) => {
|
|
25
34
|
const pbUrlLinkPayload = new grpcPuppet.UrlLinkPayload()
|
|
26
35
|
pbUrlLinkPayload.setUrl(urlLinkPayload.url)
|
|
@@ -60,3 +69,135 @@ export const channelPbToPayload = (channelPayloadPb: puppet.ChannelPayload) => {
|
|
|
60
69
|
}
|
|
61
70
|
return channelPayload
|
|
62
71
|
}
|
|
72
|
+
|
|
73
|
+
export const postPayloadToPb = async (grpcPuppet: grpcPuppet, payload: PUPPET.payloads.PostClient, serializeFileBox: (filebox: FileBoxInterface) => Promise<string>) => {
|
|
74
|
+
const pb = new grpcPuppet.PostPayloadClient()
|
|
75
|
+
pb.setType(payload.type || 0)
|
|
76
|
+
for (const item of payload.sayableList) {
|
|
77
|
+
const sayable = new grpcPuppet.PostSayable()
|
|
78
|
+
switch (item.type) {
|
|
79
|
+
case PUPPET.types.Sayable.Text:
|
|
80
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_TEXT)
|
|
81
|
+
sayable.setText(item.payload.text)
|
|
82
|
+
sayable.setMentionIdListList(item.payload.mentions)
|
|
83
|
+
break
|
|
84
|
+
case PUPPET.types.Sayable.Attachment: {
|
|
85
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_FILE)
|
|
86
|
+
const serializedFileBox = typeof item.payload.filebox === 'string' ? item.payload.filebox : (await serializeFileBox(item.payload.filebox))
|
|
87
|
+
sayable.setFileBox(serializedFileBox)
|
|
88
|
+
break
|
|
89
|
+
}
|
|
90
|
+
case PUPPET.types.Sayable.Url: {
|
|
91
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_URL)
|
|
92
|
+
const urlLinkPayload = item.payload
|
|
93
|
+
const pbUrlLinkPayload = urlLinkPayloadToPb(grpcPuppet, urlLinkPayload)
|
|
94
|
+
sayable.setUrlLink(pbUrlLinkPayload)
|
|
95
|
+
break
|
|
96
|
+
}
|
|
97
|
+
case PUPPET.types.Sayable.Channel: {
|
|
98
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_CHANNEL)
|
|
99
|
+
const channelPayload = item.payload
|
|
100
|
+
const pbChannelPayload = channelPayloadToPb(grpcPuppet, channelPayload)
|
|
101
|
+
sayable.setChannel(pbChannelPayload)
|
|
102
|
+
break
|
|
103
|
+
}
|
|
104
|
+
case PUPPET.types.Sayable.MiniProgram: {
|
|
105
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_MINIPROGRAM)
|
|
106
|
+
const miniProgramPayload = item.payload
|
|
107
|
+
const pbMiniProgramPayload = miniProgramPayloadToPb(grpcPuppet, miniProgramPayload)
|
|
108
|
+
sayable.setMiniProgram(pbMiniProgramPayload)
|
|
109
|
+
break
|
|
110
|
+
}
|
|
111
|
+
default:
|
|
112
|
+
throw new Error(`postPublish unsupported type ${item.type}`)
|
|
113
|
+
}
|
|
114
|
+
pb.addSayableList(sayable)
|
|
115
|
+
}
|
|
116
|
+
if (payload.rootId) { pb.setRootId(payload.rootId) }
|
|
117
|
+
if (payload.parentId) { pb.setParentId(payload.parentId) }
|
|
118
|
+
if (payload.location) {
|
|
119
|
+
const location = new grpcPuppet.LocationPayload()
|
|
120
|
+
location.setAccuracy(payload.location.accuracy)
|
|
121
|
+
location.setAddress(payload.location.address)
|
|
122
|
+
location.setName(payload.location.name)
|
|
123
|
+
location.setLatitude(payload.location.latitude)
|
|
124
|
+
location.setLongitude(payload.location.longitude)
|
|
125
|
+
pb.setLocation(location)
|
|
126
|
+
}
|
|
127
|
+
pb.setVisibleListList(payload.visibleList || [])
|
|
128
|
+
return pb
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export const postPbToPayload = (post: puppet.PostPayloadClient, FileBoxUuid: typeof FileBox) => {
|
|
132
|
+
const payload: PUPPET.payloads.PostClient = {
|
|
133
|
+
type: post.getType(),
|
|
134
|
+
sayableList: [],
|
|
135
|
+
rootId: post.getRootId(),
|
|
136
|
+
parentId: post.getParentId(),
|
|
137
|
+
visibleList: post.getVisibleListList(),
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const sayableList = post.getSayableListList()
|
|
141
|
+
for (const sayable of sayableList) {
|
|
142
|
+
let sayablePayload: PUPPET.payloads.Sayable | undefined
|
|
143
|
+
switch (sayable.getType()) {
|
|
144
|
+
case puppet.SayableType.SAYABLE_TYPE_TEXT:
|
|
145
|
+
sayablePayload = PUPPET.payloads.sayable.text(sayable.getText() || '', sayable.getMentionIdListList())
|
|
146
|
+
break
|
|
147
|
+
case puppet.SayableType.SAYABLE_TYPE_FILE: {
|
|
148
|
+
const fileJsonStr = sayable.getFileBox()
|
|
149
|
+
if (!fileJsonStr) {
|
|
150
|
+
break
|
|
151
|
+
}
|
|
152
|
+
const file = FileBoxUuid.fromJSON(fileJsonStr)
|
|
153
|
+
sayablePayload = PUPPET.payloads.sayable.attachment(file)
|
|
154
|
+
break
|
|
155
|
+
}
|
|
156
|
+
case puppet.SayableType.SAYABLE_TYPE_URL: {
|
|
157
|
+
const urlLinkPayloadPb = sayable.getUrlLink()
|
|
158
|
+
if (!urlLinkPayloadPb) {
|
|
159
|
+
break
|
|
160
|
+
}
|
|
161
|
+
const urlLinkPayload = urlLinkPbToPayload(urlLinkPayloadPb)
|
|
162
|
+
sayablePayload = PUPPET.payloads.sayable.url(urlLinkPayload)
|
|
163
|
+
break
|
|
164
|
+
}
|
|
165
|
+
case puppet.SayableType.SAYABLE_TYPE_CHANNEL: {
|
|
166
|
+
const channelPayloadPb = sayable.getChannel()
|
|
167
|
+
if (!channelPayloadPb) {
|
|
168
|
+
break
|
|
169
|
+
}
|
|
170
|
+
const channelPayload = channelPbToPayload(channelPayloadPb!)
|
|
171
|
+
sayablePayload = PUPPET.payloads.sayable.channel(channelPayload)
|
|
172
|
+
break
|
|
173
|
+
}
|
|
174
|
+
case puppet.SayableType.SAYABLE_TYPE_MINIPROGRAM: {
|
|
175
|
+
const miniProgramPayloadPb = sayable.getMiniProgram()
|
|
176
|
+
if (!miniProgramPayloadPb) {
|
|
177
|
+
break
|
|
178
|
+
}
|
|
179
|
+
const miniProgramPayload = miniProgramPbToPayload(miniProgramPayloadPb)
|
|
180
|
+
sayablePayload = PUPPET.payloads.sayable.miniProgram(miniProgramPayload)
|
|
181
|
+
break
|
|
182
|
+
}
|
|
183
|
+
default:
|
|
184
|
+
throw new Error(`unsupported postSayableType type ${sayable.getType()}`)
|
|
185
|
+
}
|
|
186
|
+
if (sayablePayload) {
|
|
187
|
+
payload.sayableList.push(sayablePayload)
|
|
188
|
+
} else {
|
|
189
|
+
throw new Error(`unable to fetch sayable from ${JSON.stringify(sayable.toObject())}`)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const location = post.getLocation()
|
|
193
|
+
if (location) {
|
|
194
|
+
payload.location = {
|
|
195
|
+
name: location.getName() || '',
|
|
196
|
+
accuracy: location.getAccuracy() || 15,
|
|
197
|
+
address: location.getAddress() || '',
|
|
198
|
+
latitude: location.getLatitude(),
|
|
199
|
+
longitude: location.getLatitude(),
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return payload
|
|
203
|
+
}
|