@juzi/wechaty-puppet-service 1.0.23 → 1.0.26
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 +13 -0
- package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
- package/dist/cjs/src/client/puppet-service.js +188 -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/server/puppet-implementation.d.ts.map +1 -1
- package/dist/cjs/src/server/puppet-implementation.js +236 -0
- package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
- package/dist/cjs/src/utils/pb-payload-helper.d.ts +8 -0
- package/dist/cjs/src/utils/pb-payload-helper.d.ts.map +1 -0
- package/dist/cjs/src/utils/pb-payload-helper.js +94 -0
- package/dist/cjs/src/utils/pb-payload-helper.js.map +1 -0
- package/dist/esm/src/client/puppet-service.d.ts +13 -0
- package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
- package/dist/esm/src/client/puppet-service.js +188 -0
- package/dist/esm/src/client/puppet-service.js.map +1 -1
- package/dist/esm/src/package-json.js +3 -3
- package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -1
- package/dist/esm/src/server/puppet-implementation.js +236 -0
- package/dist/esm/src/server/puppet-implementation.js.map +1 -1
- package/dist/esm/src/utils/pb-payload-helper.d.ts +8 -0
- package/dist/esm/src/utils/pb-payload-helper.d.ts.map +1 -0
- package/dist/esm/src/utils/pb-payload-helper.js +86 -0
- package/dist/esm/src/utils/pb-payload-helper.js.map +1 -0
- package/package.json +3 -3
- package/src/client/puppet-service.ts +236 -0
- package/src/package-json.ts +3 -3
- package/src/server/puppet-implementation.ts +244 -0
- package/src/utils/pb-payload-helper.ts +60 -0
|
@@ -68,6 +68,7 @@ import { packageJson } from '../package-json.js'
|
|
|
68
68
|
|
|
69
69
|
import { GrpcManager } from './grpc-manager.js'
|
|
70
70
|
import { PayloadStore } from './payload-store.js'
|
|
71
|
+
import { channelPayloadToPb, channelPbToPayload, urlLinkPayloadToPb, urlLinkPbToPayload } from '../utils/pb-payload-helper.js'
|
|
71
72
|
|
|
72
73
|
export type PuppetServiceOptions = PUPPET.PuppetOptions & {
|
|
73
74
|
authority? : string
|
|
@@ -2195,6 +2196,241 @@ class PuppetService extends PUPPET.Puppet {
|
|
|
2195
2196
|
return payload
|
|
2196
2197
|
}
|
|
2197
2198
|
|
|
2199
|
+
/**
|
|
2200
|
+
*
|
|
2201
|
+
* Post & Moment Section
|
|
2202
|
+
*
|
|
2203
|
+
*/
|
|
2204
|
+
|
|
2205
|
+
override async postPublish (payload: PUPPET.payloads.Post): Promise<void | string> {
|
|
2206
|
+
log.verbose('PuppetService', 'postPublish(%s)', JSON.stringify(payload))
|
|
2207
|
+
|
|
2208
|
+
if (!PUPPET.payloads.isPostClient(payload)) {
|
|
2209
|
+
throw new Error('can only publish client post now')
|
|
2210
|
+
}
|
|
2211
|
+
const request = new grpcPuppet.MomentPublishRequest()
|
|
2212
|
+
const post = new grpcPuppet.PostPayloadClient()
|
|
2213
|
+
post.setType(grpcPuppet.PostType.POST_TYPE_MOMENT)
|
|
2214
|
+
for (const item of payload.sayableList) {
|
|
2215
|
+
const sayable = new grpcPuppet.PostSayable()
|
|
2216
|
+
switch (item.type) {
|
|
2217
|
+
case PUPPET.types.Sayable.Text:
|
|
2218
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_TEXT)
|
|
2219
|
+
sayable.setText(item.payload.text)
|
|
2220
|
+
sayable.setMentionIdListList(item.payload.mentions)
|
|
2221
|
+
break
|
|
2222
|
+
case PUPPET.types.Sayable.Attachment: {
|
|
2223
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_FILE)
|
|
2224
|
+
const serializedFileBox = typeof item.payload.filebox === 'string' ? item.payload.filebox : await this.serializeFileBox(item.payload.filebox)
|
|
2225
|
+
sayable.setFileBox(serializedFileBox)
|
|
2226
|
+
break
|
|
2227
|
+
}
|
|
2228
|
+
case PUPPET.types.Sayable.Url: {
|
|
2229
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_URL)
|
|
2230
|
+
const urlLinkPayload = item.payload
|
|
2231
|
+
const pbUrlLinkPayload = urlLinkPayloadToPb(grpcPuppet, urlLinkPayload)
|
|
2232
|
+
sayable.setUrlLink(pbUrlLinkPayload)
|
|
2233
|
+
break
|
|
2234
|
+
}
|
|
2235
|
+
case PUPPET.types.Sayable.Channel: {
|
|
2236
|
+
sayable.setType(grpcPuppet.SayableType.SAYABLE_TYPE_CHANNEL)
|
|
2237
|
+
const channelPayload = item.payload
|
|
2238
|
+
const pbChannelPayload = channelPayloadToPb(grpcPuppet, channelPayload)
|
|
2239
|
+
sayable.setChannel(pbChannelPayload)
|
|
2240
|
+
break
|
|
2241
|
+
}
|
|
2242
|
+
default:
|
|
2243
|
+
throw new Error(`postPublish unsupported type ${item.type}`)
|
|
2244
|
+
}
|
|
2245
|
+
post.addSayableList(sayable)
|
|
2246
|
+
}
|
|
2247
|
+
request.setPost(post)
|
|
2248
|
+
|
|
2249
|
+
const result = await util.promisify(
|
|
2250
|
+
this.grpcManager.client.momentPublish
|
|
2251
|
+
.bind(this.grpcManager.client),
|
|
2252
|
+
)(request)
|
|
2253
|
+
|
|
2254
|
+
const momentId = result.getMomentId()
|
|
2255
|
+
|
|
2256
|
+
return momentId
|
|
2257
|
+
}
|
|
2258
|
+
|
|
2259
|
+
override async momentSignature (text?: string): Promise<void | string> {
|
|
2260
|
+
log.verbose('PuppetService', 'momentSignature(%s)', text)
|
|
2261
|
+
|
|
2262
|
+
const request = new grpcPuppet.MomentSignatureRequest()
|
|
2263
|
+
if (text) {
|
|
2264
|
+
request.setText(text)
|
|
2265
|
+
}
|
|
2266
|
+
|
|
2267
|
+
const response = await util.promisify(
|
|
2268
|
+
this.grpcManager.client.momentSignature
|
|
2269
|
+
.bind(this.grpcManager.client),
|
|
2270
|
+
)(request)
|
|
2271
|
+
|
|
2272
|
+
const signature = response.getText()
|
|
2273
|
+
|
|
2274
|
+
return signature
|
|
2275
|
+
}
|
|
2276
|
+
|
|
2277
|
+
override async momentCoverage (cover?: FileBoxInterface | undefined): Promise<void | FileBoxInterface> {
|
|
2278
|
+
log.verbose('PuppetService', 'momentCoverage(%s)', JSON.stringify(cover))
|
|
2279
|
+
|
|
2280
|
+
const request = new grpcPuppet.MomentCoverageRequest()
|
|
2281
|
+
if (cover) {
|
|
2282
|
+
const serializedFileBox = await this.serializeFileBox(cover)
|
|
2283
|
+
request.setFileBox(serializedFileBox)
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
const response = await util.promisify(
|
|
2287
|
+
this.grpcManager.client.momentCoverage
|
|
2288
|
+
.bind(this.grpcManager.client),
|
|
2289
|
+
)(request)
|
|
2290
|
+
|
|
2291
|
+
const jsonText = response.getFileBox()
|
|
2292
|
+
if (jsonText) {
|
|
2293
|
+
return this.FileBoxUuid.fromJSON(jsonText)
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
|
|
2297
|
+
override async postPayloadSayable (postId: string, sayableId: string): Promise<PUPPET.payloads.Sayable> {
|
|
2298
|
+
log.verbose('PuppetService', 'postPayloadSayable(%s, %s)', postId, sayableId)
|
|
2299
|
+
|
|
2300
|
+
const request = new grpcPuppet.PostPayloadSayableRequest()
|
|
2301
|
+
request.setPostId(postId)
|
|
2302
|
+
request.setSayableId(sayableId)
|
|
2303
|
+
|
|
2304
|
+
const response = await util.promisify(
|
|
2305
|
+
this.grpcManager.client.postPayloadSayable
|
|
2306
|
+
.bind(this.grpcManager.client),
|
|
2307
|
+
)(request)
|
|
2308
|
+
|
|
2309
|
+
const sayable = response.getSayable()
|
|
2310
|
+
let sayablePayload: PUPPET.payloads.Sayable | undefined
|
|
2311
|
+
|
|
2312
|
+
if (sayable) {
|
|
2313
|
+
switch (sayable.getType()) {
|
|
2314
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_TEXT:
|
|
2315
|
+
sayablePayload = PUPPET.payloads.sayable.text(sayable.getText() || '', sayable.getMentionIdListList())
|
|
2316
|
+
break
|
|
2317
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_FILE: {
|
|
2318
|
+
const fileJsonStr = sayable.getFileBox()
|
|
2319
|
+
if (!fileJsonStr) {
|
|
2320
|
+
break
|
|
2321
|
+
}
|
|
2322
|
+
const file = this.FileBoxUuid.fromJSON(fileJsonStr)
|
|
2323
|
+
sayablePayload = PUPPET.payloads.sayable.attachment(file)
|
|
2324
|
+
break
|
|
2325
|
+
}
|
|
2326
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_URL: {
|
|
2327
|
+
const urlLinkPayloadPb = sayable.getUrlLink()
|
|
2328
|
+
if (!urlLinkPayloadPb) {
|
|
2329
|
+
break
|
|
2330
|
+
}
|
|
2331
|
+
const urlLinkPayload = urlLinkPbToPayload(urlLinkPayloadPb)
|
|
2332
|
+
sayablePayload = PUPPET.payloads.sayable.url(urlLinkPayload)
|
|
2333
|
+
break
|
|
2334
|
+
}
|
|
2335
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_CHANNEL: {
|
|
2336
|
+
const channelPayloadPb = sayable.getChannel()
|
|
2337
|
+
if (!channelPayloadPb) {
|
|
2338
|
+
break
|
|
2339
|
+
}
|
|
2340
|
+
const channelPayload = channelPbToPayload(channelPayloadPb!)
|
|
2341
|
+
sayablePayload = PUPPET.payloads.sayable.channel(channelPayload)
|
|
2342
|
+
break
|
|
2343
|
+
}
|
|
2344
|
+
default:
|
|
2345
|
+
throw new Error(`unsupported postSayableType type ${sayable.getType()}`)
|
|
2346
|
+
}
|
|
2347
|
+
}
|
|
2348
|
+
if (!sayablePayload) {
|
|
2349
|
+
throw new Error(`cannot get sayable ${sayableId} from post ${postId}`)
|
|
2350
|
+
} else {
|
|
2351
|
+
return sayablePayload
|
|
2352
|
+
}
|
|
2353
|
+
}
|
|
2354
|
+
|
|
2355
|
+
override async postRawPayload (id: string): Promise<PUPPET.payloads.Post> {
|
|
2356
|
+
log.verbose('PuppetService', 'postRawPayload(%s)', id)
|
|
2357
|
+
|
|
2358
|
+
const request = new grpcPuppet.PostPayloadRequest()
|
|
2359
|
+
request.setPostId(id)
|
|
2360
|
+
|
|
2361
|
+
const response = await util.promisify(
|
|
2362
|
+
this.grpcManager.client.postPayload
|
|
2363
|
+
.bind(this.grpcManager.client),
|
|
2364
|
+
)(request)
|
|
2365
|
+
|
|
2366
|
+
const postPb = response.getPost()
|
|
2367
|
+
if (!postPb) {
|
|
2368
|
+
throw new Error(`failed to get post for id ${id}`)
|
|
2369
|
+
}
|
|
2370
|
+
const timestamp = postPb.getTimestamp()
|
|
2371
|
+
const payload: PUPPET.payloads.PostServer = {
|
|
2372
|
+
id,
|
|
2373
|
+
parentId: postPb.getParentId(),
|
|
2374
|
+
rootId: postPb.getRootId(),
|
|
2375
|
+
type: postPb.getType() || PUPPET.types.Post.Unspecified,
|
|
2376
|
+
sayableList: [],
|
|
2377
|
+
contactId: postPb.getContactId(),
|
|
2378
|
+
timestamp: timestamp ? millisecondsFromTimestamp(timestamp) : Date.now(),
|
|
2379
|
+
counter: {
|
|
2380
|
+
children: postPb.getChildren(),
|
|
2381
|
+
descendant: postPb.getDescendant(),
|
|
2382
|
+
taps: {
|
|
2383
|
+
[PUPPET.types.Tap.Like]: postPb.getLike(),
|
|
2384
|
+
},
|
|
2385
|
+
},
|
|
2386
|
+
}
|
|
2387
|
+
const sayablePbList = postPb.getSayableListList()
|
|
2388
|
+
for (const sayablePb of sayablePbList) {
|
|
2389
|
+
payload.sayableList.push(sayablePb.getId())
|
|
2390
|
+
}
|
|
2391
|
+
return payload
|
|
2392
|
+
}
|
|
2393
|
+
|
|
2394
|
+
override async postRawPayloadParser (payload: PUPPET.payloads.Post): Promise<PUPPET.payloads.Post> {
|
|
2395
|
+
// log.silly('PuppetService', 'postRawPayloadParser({id:%s})', payload.id)
|
|
2396
|
+
// passthrough
|
|
2397
|
+
return payload
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2400
|
+
override async postComment (postId: string, text: string, mentionIdList?: string[] | undefined): Promise<string | void> {
|
|
2401
|
+
log.verbose('PuppetService', 'postComment(%s, %s, %s)', postId, text, JSON.stringify(mentionIdList))
|
|
2402
|
+
|
|
2403
|
+
const request = new grpcPuppet.PostCommentRequest()
|
|
2404
|
+
request.setPostId(postId)
|
|
2405
|
+
request.setText(text)
|
|
2406
|
+
request.setMentionIdListList(mentionIdList || [])
|
|
2407
|
+
|
|
2408
|
+
const response = await util.promisify(
|
|
2409
|
+
this.grpcManager.client.postComment
|
|
2410
|
+
.bind(this.grpcManager.client),
|
|
2411
|
+
)(request)
|
|
2412
|
+
|
|
2413
|
+
const commentId = response.getCommentId()
|
|
2414
|
+
|
|
2415
|
+
return commentId
|
|
2416
|
+
}
|
|
2417
|
+
|
|
2418
|
+
override async postLike (postId: string): Promise<string | void> {
|
|
2419
|
+
log.verbose('PuppetService', 'postLike(%s)', postId)
|
|
2420
|
+
|
|
2421
|
+
const request = new grpcPuppet.PostLikeRequest()
|
|
2422
|
+
request.setPostId(postId)
|
|
2423
|
+
|
|
2424
|
+
const response = await util.promisify(
|
|
2425
|
+
this.grpcManager.client.postLike
|
|
2426
|
+
.bind(this.grpcManager.client),
|
|
2427
|
+
)(request)
|
|
2428
|
+
|
|
2429
|
+
const tapId = response.getTapId()
|
|
2430
|
+
|
|
2431
|
+
return tapId
|
|
2432
|
+
}
|
|
2433
|
+
|
|
2198
2434
|
/**
|
|
2199
2435
|
* @deprecated Will be removed in v2.0
|
|
2200
2436
|
*/
|
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.26",
|
|
8
8
|
"description": "Puppet Service for Wechaty",
|
|
9
9
|
"type": "module",
|
|
10
10
|
"exports": {
|
|
@@ -69,10 +69,10 @@ export const packageJson: PackageJson = {
|
|
|
69
69
|
"why-is-node-running": "^2.2.1"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
|
-
"@juzi/wechaty-puppet": "^1.0.
|
|
72
|
+
"@juzi/wechaty-puppet": "^1.0.33"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@juzi/wechaty-grpc": "^1.0.
|
|
75
|
+
"@juzi/wechaty-grpc": "^1.0.24",
|
|
76
76
|
"@juzi/wechaty-redux": "^1.0.1",
|
|
77
77
|
"clone-class": "^1.1.1",
|
|
78
78
|
"ducks": "^1.0.2",
|
|
@@ -47,6 +47,7 @@ import {
|
|
|
47
47
|
import { log } from '../config.js'
|
|
48
48
|
import { grpcError } from './grpc-error.js'
|
|
49
49
|
import { EventStreamManager } from './event-stream-manager.js'
|
|
50
|
+
import { channelPayloadToPb, channelPbToPayload, urlLinkPayloadToPb, urlLinkPbToPayload } from '../utils/pb-payload-helper.js'
|
|
50
51
|
|
|
51
52
|
function puppetImplementation (
|
|
52
53
|
puppet : PUPPET.impls.PuppetInterface,
|
|
@@ -1746,6 +1747,249 @@ function puppetImplementation (
|
|
|
1746
1747
|
}
|
|
1747
1748
|
},
|
|
1748
1749
|
|
|
1750
|
+
/**
|
|
1751
|
+
*
|
|
1752
|
+
* Post & Moment
|
|
1753
|
+
*
|
|
1754
|
+
*/
|
|
1755
|
+
|
|
1756
|
+
momentPublish: async (call, callback) => {
|
|
1757
|
+
log.verbose('PuppetServiceImpl', 'momentPublish()')
|
|
1758
|
+
|
|
1759
|
+
try {
|
|
1760
|
+
const post = call.request.getPost()
|
|
1761
|
+
if (!post) {
|
|
1762
|
+
throw new Error('no post found')
|
|
1763
|
+
}
|
|
1764
|
+
const type = post.getType()
|
|
1765
|
+
if (type !== grpcPuppet.PostType.POST_TYPE_MOMENT) {
|
|
1766
|
+
throw new Error('cannot publish non-moment post')
|
|
1767
|
+
}
|
|
1768
|
+
const payload: PUPPET.payloads.PostClient = {
|
|
1769
|
+
type: PUPPET.types.Post.Moment,
|
|
1770
|
+
sayableList: [],
|
|
1771
|
+
}
|
|
1772
|
+
const sayableList = post.getSayableListList()
|
|
1773
|
+
for (const sayable of sayableList) {
|
|
1774
|
+
let sayablePayload: PUPPET.payloads.Sayable | undefined
|
|
1775
|
+
switch (sayable.getType()) {
|
|
1776
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_TEXT:
|
|
1777
|
+
sayablePayload = PUPPET.payloads.sayable.text(sayable.getText() || '', sayable.getMentionIdListList())
|
|
1778
|
+
break
|
|
1779
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_FILE: {
|
|
1780
|
+
const fileJsonStr = sayable.getFileBox()
|
|
1781
|
+
if (!fileJsonStr) {
|
|
1782
|
+
break
|
|
1783
|
+
}
|
|
1784
|
+
const file = FileBoxUuid.fromJSON(fileJsonStr)
|
|
1785
|
+
sayablePayload = PUPPET.payloads.sayable.attachment(file)
|
|
1786
|
+
break
|
|
1787
|
+
}
|
|
1788
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_URL: {
|
|
1789
|
+
const urlLinkPayloadPb = sayable.getUrlLink()
|
|
1790
|
+
if (!urlLinkPayloadPb) {
|
|
1791
|
+
break
|
|
1792
|
+
}
|
|
1793
|
+
const urlLinkPayload = urlLinkPbToPayload(urlLinkPayloadPb)
|
|
1794
|
+
sayablePayload = PUPPET.payloads.sayable.url(urlLinkPayload)
|
|
1795
|
+
break
|
|
1796
|
+
}
|
|
1797
|
+
case grpcPuppet.SayableType.SAYABLE_TYPE_CHANNEL: {
|
|
1798
|
+
const channelPayloadPb = sayable.getChannel()
|
|
1799
|
+
if (!channelPayloadPb) {
|
|
1800
|
+
break
|
|
1801
|
+
}
|
|
1802
|
+
const channelPayload = channelPbToPayload(channelPayloadPb!)
|
|
1803
|
+
sayablePayload = PUPPET.payloads.sayable.channel(channelPayload)
|
|
1804
|
+
break
|
|
1805
|
+
}
|
|
1806
|
+
default:
|
|
1807
|
+
throw new Error(`unsupported postSayableType type ${sayable.getType()}`)
|
|
1808
|
+
}
|
|
1809
|
+
if (sayablePayload) {
|
|
1810
|
+
payload.sayableList.push(sayablePayload)
|
|
1811
|
+
} else {
|
|
1812
|
+
throw new Error(`unable to fetch sayable from ${JSON.stringify(sayable.toObject())}`)
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
|
|
1816
|
+
const momentId = await puppet.postPublish(payload)
|
|
1817
|
+
const response = new grpcPuppet.MomentPublishResponse()
|
|
1818
|
+
if (momentId) {
|
|
1819
|
+
response.setMomentId(momentId)
|
|
1820
|
+
}
|
|
1821
|
+
|
|
1822
|
+
return callback(null, response)
|
|
1823
|
+
|
|
1824
|
+
} catch (e) {
|
|
1825
|
+
return grpcError('momentPublish', e, callback)
|
|
1826
|
+
}
|
|
1827
|
+
|
|
1828
|
+
},
|
|
1829
|
+
|
|
1830
|
+
postComment: async (call, callback) => {
|
|
1831
|
+
log.verbose('PuppetServiceImpl', 'postComment()')
|
|
1832
|
+
|
|
1833
|
+
try {
|
|
1834
|
+
const postId = call.request.getPostId()
|
|
1835
|
+
const mentionIdList = call.request.getMentionIdListList()
|
|
1836
|
+
const text = call.request.getText()
|
|
1837
|
+
|
|
1838
|
+
const result = await puppet.postComment(postId, text, mentionIdList)
|
|
1839
|
+
const response = new grpcPuppet.PostCommentResponse()
|
|
1840
|
+
if (result) { response.setCommentId(result) }
|
|
1841
|
+
|
|
1842
|
+
return callback(null, response)
|
|
1843
|
+
} catch (e) {
|
|
1844
|
+
return grpcError('postComment', e, callback)
|
|
1845
|
+
}
|
|
1846
|
+
},
|
|
1847
|
+
|
|
1848
|
+
postLike: async (call, callback) => {
|
|
1849
|
+
log.verbose('PuppetServiceImpl', 'postLike()')
|
|
1850
|
+
|
|
1851
|
+
try {
|
|
1852
|
+
const postId = call.request.getPostId()
|
|
1853
|
+
|
|
1854
|
+
const tapId = await puppet.postLike(postId)
|
|
1855
|
+
const response = new grpcPuppet.PostLikeResponse()
|
|
1856
|
+
if (tapId) { response.setTapId(tapId) }
|
|
1857
|
+
|
|
1858
|
+
return callback(null, response)
|
|
1859
|
+
} catch (e) {
|
|
1860
|
+
return grpcError('postLike', e, callback)
|
|
1861
|
+
}
|
|
1862
|
+
},
|
|
1863
|
+
|
|
1864
|
+
momentSignature: async (call, callback) => {
|
|
1865
|
+
log.verbose('PuppetServiceImpl', 'momentSignature()')
|
|
1866
|
+
|
|
1867
|
+
try {
|
|
1868
|
+
const signature = call.request.getText()
|
|
1869
|
+
const result = await puppet.momentSignature(signature || undefined)
|
|
1870
|
+
|
|
1871
|
+
const response = new grpcPuppet.MomentSignatureResponse()
|
|
1872
|
+
if (result) {
|
|
1873
|
+
response.setText(result)
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
return callback(null, response)
|
|
1877
|
+
} catch (e) {
|
|
1878
|
+
return grpcError('momentSignature', e, callback)
|
|
1879
|
+
}
|
|
1880
|
+
},
|
|
1881
|
+
|
|
1882
|
+
momentCoverage: async (call, callback) => {
|
|
1883
|
+
log.verbose('PuppetServiceImpl', 'momentCoverage()')
|
|
1884
|
+
|
|
1885
|
+
try {
|
|
1886
|
+
const fileJsonStr = call.request.getFileBox()
|
|
1887
|
+
|
|
1888
|
+
const response = new grpcPuppet.MomentCoverageResponse()
|
|
1889
|
+
|
|
1890
|
+
if (fileJsonStr) {
|
|
1891
|
+
const file = FileBoxUuid.fromJSON(fileJsonStr)
|
|
1892
|
+
await puppet.momentCoverage(file)
|
|
1893
|
+
} else {
|
|
1894
|
+
const file = await puppet.momentCoverage()
|
|
1895
|
+
if (file) {
|
|
1896
|
+
response.setFileBox(await serializeFileBox(file))
|
|
1897
|
+
} else {
|
|
1898
|
+
throw new Error('fail to get moment coverage')
|
|
1899
|
+
}
|
|
1900
|
+
}
|
|
1901
|
+
|
|
1902
|
+
return callback(null, response)
|
|
1903
|
+
} catch (e) {
|
|
1904
|
+
return grpcError('momentCoverage', e, callback)
|
|
1905
|
+
}
|
|
1906
|
+
},
|
|
1907
|
+
|
|
1908
|
+
postPayload: async (call, callback) => {
|
|
1909
|
+
log.verbose('PuppetServiceImpl', 'postPayloadSayable()')
|
|
1910
|
+
|
|
1911
|
+
try {
|
|
1912
|
+
const postId = call.request.getPostId()
|
|
1913
|
+
const postPayload = await puppet.postPayload(postId) as PUPPET.payloads.PostServer
|
|
1914
|
+
|
|
1915
|
+
const response = new grpcPuppet.PostPayloadResponse()
|
|
1916
|
+
const postPayloadPb = new grpcPuppet.PostPayloadServer()
|
|
1917
|
+
if (postPayload.parentId) { postPayloadPb.setParentId(postPayload.parentId) }
|
|
1918
|
+
if (postPayload.rootId) { postPayloadPb.setRootId(postPayload.rootId) }
|
|
1919
|
+
if (postPayload.type) {
|
|
1920
|
+
postPayloadPb.setType(postPayload.type)
|
|
1921
|
+
} else {
|
|
1922
|
+
postPayloadPb.setType(grpcPuppet.PostType.POST_TYPE_UNSPECIFIED)
|
|
1923
|
+
}
|
|
1924
|
+
if (postPayload.contactId) { postPayloadPb.setContactId(postPayload.contactId) }
|
|
1925
|
+
postPayloadPb.setTimestamp(timestampFromMilliseconds(postPayload.timestamp))
|
|
1926
|
+
if (postPayload.counter.children) { postPayloadPb.setChildren(postPayload.counter.children) }
|
|
1927
|
+
if (postPayload.counter.descendant) { postPayloadPb.setDescendant(postPayload.counter.descendant) }
|
|
1928
|
+
if (postPayload.counter.taps && postPayload.counter.taps[PUPPET.types.Tap.Like]) {
|
|
1929
|
+
postPayloadPb.setLike(postPayload.counter.taps[PUPPET.types.Tap.Like]!)
|
|
1930
|
+
}
|
|
1931
|
+
const sayablePbList = []
|
|
1932
|
+
for (const sayable of postPayload.sayableList) {
|
|
1933
|
+
const sayablePb = new grpcPuppet.PostSayable()
|
|
1934
|
+
sayablePb.setId(sayable)
|
|
1935
|
+
sayablePbList.push(sayablePb)
|
|
1936
|
+
}
|
|
1937
|
+
postPayloadPb.setSayableListList(sayablePbList)
|
|
1938
|
+
response.setPost(postPayloadPb)
|
|
1939
|
+
|
|
1940
|
+
return callback(null, response)
|
|
1941
|
+
} catch (e) {
|
|
1942
|
+
return grpcError('postPayloadSayable', e, callback)
|
|
1943
|
+
}
|
|
1944
|
+
|
|
1945
|
+
},
|
|
1946
|
+
|
|
1947
|
+
postPayloadSayable: async (call, callback) => {
|
|
1948
|
+
log.verbose('PuppetServiceImpl', 'postPayloadSayable()')
|
|
1949
|
+
|
|
1950
|
+
try {
|
|
1951
|
+
const postId = call.request.getPostId()
|
|
1952
|
+
const sayableId = call.request.getSayableId()
|
|
1953
|
+
|
|
1954
|
+
const result = await puppet.postPayloadSayable(postId, sayableId)
|
|
1955
|
+
const response = new grpcPuppet.PostPayloadSayableResponse()
|
|
1956
|
+
const sayablePb = new grpcPuppet.PostSayable()
|
|
1957
|
+
switch (result.type) {
|
|
1958
|
+
case PUPPET.types.Sayable.Text:
|
|
1959
|
+
sayablePb.setType(grpcPuppet.SayableType.SAYABLE_TYPE_TEXT)
|
|
1960
|
+
sayablePb.setText(result.payload.text)
|
|
1961
|
+
sayablePb.setMentionIdListList(result.payload.mentions)
|
|
1962
|
+
break
|
|
1963
|
+
case PUPPET.types.Sayable.Attachment: {
|
|
1964
|
+
sayablePb.setType(grpcPuppet.SayableType.SAYABLE_TYPE_FILE)
|
|
1965
|
+
const serializedFileBox = typeof result.payload.filebox === 'string' ? result.payload.filebox : await serializeFileBox(result.payload.filebox)
|
|
1966
|
+
sayablePb.setFileBox(serializedFileBox)
|
|
1967
|
+
break
|
|
1968
|
+
}
|
|
1969
|
+
case PUPPET.types.Sayable.Url: {
|
|
1970
|
+
sayablePb.setType(grpcPuppet.SayableType.SAYABLE_TYPE_URL)
|
|
1971
|
+
const urlLinkPayload = result.payload
|
|
1972
|
+
const pbUrlLinkPayload = urlLinkPayloadToPb(grpcPuppet, urlLinkPayload)
|
|
1973
|
+
sayablePb.setUrlLink(pbUrlLinkPayload)
|
|
1974
|
+
break
|
|
1975
|
+
}
|
|
1976
|
+
case PUPPET.types.Sayable.Channel: {
|
|
1977
|
+
sayablePb.setType(grpcPuppet.SayableType.SAYABLE_TYPE_CHANNEL)
|
|
1978
|
+
const channelPayload = result.payload
|
|
1979
|
+
const pbChannelPayload = channelPayloadToPb(grpcPuppet, channelPayload)
|
|
1980
|
+
sayablePb.setChannel(pbChannelPayload)
|
|
1981
|
+
break
|
|
1982
|
+
}
|
|
1983
|
+
default:
|
|
1984
|
+
throw new Error(`postPayloadSayable unsupported type ${result.type}`)
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1987
|
+
return callback(null, response)
|
|
1988
|
+
} catch (e) {
|
|
1989
|
+
return grpcError('postPayloadSayable', e, callback)
|
|
1990
|
+
}
|
|
1991
|
+
},
|
|
1992
|
+
|
|
1749
1993
|
download: async (call) => {
|
|
1750
1994
|
log.verbose('PuppetServiceImpl', 'download()')
|
|
1751
1995
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
puppet,
|
|
3
|
+
} from '@juzi/wechaty-grpc'
|
|
4
|
+
|
|
5
|
+
import type * as PUPPET from '@juzi/wechaty-puppet'
|
|
6
|
+
|
|
7
|
+
type grpcPuppet = typeof puppet
|
|
8
|
+
|
|
9
|
+
export const miniProgramPayloadToPb = (grpcPuppet: grpcPuppet, miniProgramPayload: PUPPET.payloads.MiniProgram) => {
|
|
10
|
+
const pbMiniProgramPayload = new grpcPuppet.MiniProgramPayload()
|
|
11
|
+
if (miniProgramPayload.appid) { pbMiniProgramPayload.setAppid(miniProgramPayload.appid) }
|
|
12
|
+
if (miniProgramPayload.description) { pbMiniProgramPayload.setDescription(miniProgramPayload.description) }
|
|
13
|
+
if (miniProgramPayload.iconUrl) { pbMiniProgramPayload.setIconUrl(miniProgramPayload.iconUrl) }
|
|
14
|
+
if (miniProgramPayload.pagePath) { pbMiniProgramPayload.setPagePath(miniProgramPayload.pagePath) }
|
|
15
|
+
if (miniProgramPayload.shareId) { pbMiniProgramPayload.setShareId(miniProgramPayload.shareId) }
|
|
16
|
+
if (miniProgramPayload.thumbKey) { pbMiniProgramPayload.setThumbKey(miniProgramPayload.thumbKey) }
|
|
17
|
+
if (miniProgramPayload.thumbUrl) { pbMiniProgramPayload.setThumbUrl(miniProgramPayload.thumbUrl) }
|
|
18
|
+
if (miniProgramPayload.title) { pbMiniProgramPayload.setTitle(miniProgramPayload.title) }
|
|
19
|
+
if (miniProgramPayload.username) { pbMiniProgramPayload.setUsername(miniProgramPayload.username) }
|
|
20
|
+
|
|
21
|
+
return pbMiniProgramPayload
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const urlLinkPayloadToPb = (grpcPuppet: grpcPuppet, urlLinkPayload: PUPPET.payloads.UrlLink) => {
|
|
25
|
+
const pbUrlLinkPayload = new grpcPuppet.UrlLinkPayload()
|
|
26
|
+
pbUrlLinkPayload.setUrl(urlLinkPayload.url)
|
|
27
|
+
pbUrlLinkPayload.setTitle(urlLinkPayload.title)
|
|
28
|
+
if (urlLinkPayload.description) { pbUrlLinkPayload.setDescription(urlLinkPayload.description) }
|
|
29
|
+
if (urlLinkPayload.thumbnailUrl) { pbUrlLinkPayload.setThumbnailUrl(urlLinkPayload.thumbnailUrl) }
|
|
30
|
+
return pbUrlLinkPayload
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const urlLinkPbToPayload = (urlLinkPayloadPb: puppet.UrlLinkPayload) => {
|
|
34
|
+
const _urlLinkPayloadPb = urlLinkPayloadPb.toObject()
|
|
35
|
+
const urlLinkPayload: PUPPET.payloads.UrlLink = {
|
|
36
|
+
..._urlLinkPayloadPb,
|
|
37
|
+
}
|
|
38
|
+
return urlLinkPayload
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const channelPayloadToPb = (grpcPuppet: grpcPuppet, channelPayload: PUPPET.payloads.Channel) => {
|
|
42
|
+
const pbChannelPayload = new grpcPuppet.ChannelPayload()
|
|
43
|
+
if (channelPayload.avatar) { pbChannelPayload.setAvatar(channelPayload.avatar) }
|
|
44
|
+
if (channelPayload.coverUrl) { pbChannelPayload.setCoverUrl(channelPayload.coverUrl) }
|
|
45
|
+
if (channelPayload.desc) { pbChannelPayload.setDesc(channelPayload.desc) }
|
|
46
|
+
if (channelPayload.extras) { pbChannelPayload.setExtras(channelPayload.extras) }
|
|
47
|
+
if (channelPayload.feedType) { pbChannelPayload.setFeedType(channelPayload.feedType) }
|
|
48
|
+
if (channelPayload.nickname) { pbChannelPayload.setNickname(channelPayload.nickname) }
|
|
49
|
+
if (channelPayload.thumbUrl) { pbChannelPayload.setThumbUrl(channelPayload.thumbUrl) }
|
|
50
|
+
if (channelPayload.url) { pbChannelPayload.setUrl(channelPayload.url) }
|
|
51
|
+
return pbChannelPayload
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export const channelPbToPayload = (channelPayloadPb: puppet.ChannelPayload) => {
|
|
55
|
+
const _channelPayloadPb = channelPayloadPb.toObject()
|
|
56
|
+
const channelPayload: PUPPET.payloads.Channel = {
|
|
57
|
+
..._channelPayloadPb,
|
|
58
|
+
}
|
|
59
|
+
return channelPayload
|
|
60
|
+
}
|