@juzi/wechaty-puppet-service 1.0.74 → 1.0.75

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 (29) hide show
  1. package/dist/cjs/src/client/puppet-service.d.ts +2 -1
  2. package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
  3. package/dist/cjs/src/client/puppet-service.js +22 -5
  4. package/dist/cjs/src/client/puppet-service.js.map +1 -1
  5. package/dist/cjs/src/package-json.js +4 -4
  6. package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -1
  7. package/dist/cjs/src/server/puppet-implementation.js +21 -0
  8. package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
  9. package/dist/cjs/src/utils/pb-payload-helper.d.ts +4 -0
  10. package/dist/cjs/src/utils/pb-payload-helper.d.ts.map +1 -1
  11. package/dist/cjs/src/utils/pb-payload-helper.js +126 -8
  12. package/dist/cjs/src/utils/pb-payload-helper.js.map +1 -1
  13. package/dist/esm/src/client/puppet-service.d.ts +2 -1
  14. package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
  15. package/dist/esm/src/client/puppet-service.js +23 -6
  16. package/dist/esm/src/client/puppet-service.js.map +1 -1
  17. package/dist/esm/src/package-json.js +4 -4
  18. package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -1
  19. package/dist/esm/src/server/puppet-implementation.js +22 -1
  20. package/dist/esm/src/server/puppet-implementation.js.map +1 -1
  21. package/dist/esm/src/utils/pb-payload-helper.d.ts +4 -0
  22. package/dist/esm/src/utils/pb-payload-helper.d.ts.map +1 -1
  23. package/dist/esm/src/utils/pb-payload-helper.js +121 -7
  24. package/dist/esm/src/utils/pb-payload-helper.js.map +1 -1
  25. package/package.json +4 -4
  26. package/src/client/puppet-service.ts +31 -6
  27. package/src/package-json.ts +4 -4
  28. package/src/server/puppet-implementation.ts +28 -1
  29. package/src/utils/pb-payload-helper.ts +134 -7
@@ -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, postPayloadToPb, urlLinkPbToPayload } from '../utils/pb-payload-helper.js'
53
+ import { OptionalBooleanUnwrapper, OptionalBooleanWrapper, callRecordPbToPayload, channelPayloadToPb, channelPbToPayload, chatHistoryPbToPayload, postPayloadToPb, 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'
@@ -1021,6 +1021,24 @@ class PuppetService extends PUPPET.Puppet {
1021
1021
  return payload
1022
1022
  }
1023
1023
 
1024
+ override async messageChatHistory (
1025
+ messageId: string,
1026
+ ): Promise<PUPPET.payloads.ChatHistory[]> {
1027
+ log.verbose('PuppetService', 'messageChatHistory(%s)', messageId)
1028
+
1029
+ const request = new grpcPuppet.MessageChatHistoryRequest()
1030
+ request.setId(messageId)
1031
+
1032
+ const response = await util.promisify(
1033
+ this.grpcManager.client.messageChatHistory
1034
+ .bind(this.grpcManager.client),
1035
+ )(request)
1036
+
1037
+ const payload = chatHistoryPbToPayload(this.FileBoxUuid, response.getChatHistoryListList()!)
1038
+
1039
+ return payload
1040
+ }
1041
+
1024
1042
  override async messageSendMiniProgram (
1025
1043
  conversationId : string,
1026
1044
  miniProgramPayload : PUPPET.payloads.MiniProgram,
@@ -1183,22 +1201,29 @@ class PuppetService extends PUPPET.Puppet {
1183
1201
 
1184
1202
  override async messageForward (
1185
1203
  conversationId: string,
1186
- messageId: string,
1204
+ messageIds: string | string[],
1187
1205
  ): Promise<string | void> {
1188
- log.verbose('PuppetService', 'messageForward(%s, %s)', conversationId, messageId)
1206
+ log.verbose('PuppetService', 'messageForward(%s, %s)', conversationId, messageIds)
1189
1207
 
1190
1208
  const request = new grpcPuppet.MessageForwardRequest()
1191
1209
  request.setConversationId(conversationId)
1192
- request.setMessageId(messageId)
1210
+ if (Array.isArray(messageIds)) {
1211
+ request.setMessageIdsList(messageIds)
1212
+ if (messageIds.length === 1) {
1213
+ request.setMessageId(messageIds[0] as string)
1214
+ }
1215
+ } else {
1216
+ request.setMessageId(messageIds)
1217
+ }
1193
1218
 
1194
- log.info('PuppetService', `messageForward(${conversationId}, ${messageId}) about to call grpc`)
1219
+ log.info('PuppetService', `messageForward(${conversationId}, ${messageIds}) about to call grpc`)
1195
1220
  const response = await util.promisify(
1196
1221
  this.grpcManager.client.messageForward
1197
1222
  .bind(this.grpcManager.client),
1198
1223
  )(request)
1199
1224
 
1200
1225
  const forwardedMessageId = response.getId()
1201
- log.info('PuppetService', `messageForward(${conversationId}, ${messageId}) grpc called, messageId: ${forwardedMessageId}`)
1226
+ log.info('PuppetService', `messageForward(${conversationId}, ${messageIds}) grpc called, messageId: ${forwardedMessageId}`)
1202
1227
 
1203
1228
  if (forwardedMessageId) {
1204
1229
  return forwardedMessageId
@@ -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.74",
7
+ "version": "1.0.75",
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.64",
58
+ "@juzi/wechaty-puppet": "^1.0.66",
59
59
  "@juzi/wechaty-puppet-mock": "^1.0.1",
60
60
  "@swc/core": "1.3.39",
61
61
  "@types/google-protobuf": "^3.15.5",
@@ -72,10 +72,10 @@ export const packageJson: PackageJson = {
72
72
  "why-is-node-running": "^2.2.1"
73
73
  },
74
74
  "peerDependencies": {
75
- "@juzi/wechaty-puppet": "^1.0.62"
75
+ "@juzi/wechaty-puppet": "^1.0.66"
76
76
  },
77
77
  "dependencies": {
78
- "@juzi/wechaty-grpc": "^1.0.67",
78
+ "@juzi/wechaty-grpc": "^1.0.68",
79
79
  "clone-class": "^1.1.1",
80
80
  "ducks": "^1.0.2",
81
81
  "file-box": "^1.5.5",
@@ -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 { OptionalBooleanUnwrapper, OptionalBooleanWrapper, callRecordPayloadToPb, channelPayloadToPb, postPbToPayload, urlLinkPayloadToPb } from '../utils/pb-payload-helper.js'
46
+ import { OptionalBooleanUnwrapper, OptionalBooleanWrapper, callRecordPayloadToPb, channelPayloadToPb, chatHistoryPayloadToPb, postPbToPayload, urlLinkPayloadToPb } from '../utils/pb-payload-helper.js'
47
47
 
48
48
  function puppetImplementation (
49
49
  puppet : PUPPET.impls.PuppetInterface,
@@ -701,8 +701,14 @@ function puppetImplementation (
701
701
  try {
702
702
  const conversationId = call.request.getConversationId()
703
703
  const messageId = call.request.getMessageId()
704
+ const messageIds = call.request.getMessageIdsList()
704
705
 
705
706
  const id = await puppet.messageForward(conversationId, messageId)
707
+ if (messageIds.length > 1) {
708
+ await puppet.messageForward(conversationId, messageIds)
709
+ } else {
710
+ await puppet.messageForward(conversationId, messageId || messageId[0] || '')
711
+ }
706
712
 
707
713
  const response = new grpcPuppet.MessageForwardResponse()
708
714
  if (id) {
@@ -843,6 +849,27 @@ function puppetImplementation (
843
849
  }
844
850
  },
845
851
 
852
+ messageChatHistory: async (call, callback) => {
853
+ log.verbose('PuppetServiceImpl', 'messageChatHistory()')
854
+
855
+ try {
856
+ const id = call.request.getId()
857
+
858
+ const payloadList = await puppet.messageChatHistory(id)
859
+
860
+ const response = new grpcPuppet.MessageChatHistoryResponse()
861
+
862
+ const pbChatHistoryPayloadList = await chatHistoryPayloadToPb(grpcPuppet, payloadList, serializeFileBox)
863
+
864
+ response.setChatHistoryListList(pbChatHistoryPayloadList)
865
+
866
+ return callback(null, response)
867
+
868
+ } catch (e) {
869
+ return grpcError('messageMiniProgram', e, callback)
870
+ }
871
+ },
872
+
846
873
  messagePayload: async (call, callback) => {
847
874
  log.verbose('PuppetServiceImpl', 'messagePayload()')
848
875
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-case-declarations */
1
2
  import {
2
3
  puppet,
3
4
  } from '@juzi/wechaty-grpc'
@@ -39,6 +40,25 @@ export const urlLinkPayloadToPb = (grpcPuppet: grpcPuppet, urlLinkPayload: PUPPE
39
40
  return pbUrlLinkPayload
40
41
  }
41
42
 
43
+ export const locationPayloadToPb = (grpcPuppet: grpcPuppet, locationPayload: PUPPET.payloads.Location) => {
44
+ const pbLocationPayload = new grpcPuppet.LocationPayload()
45
+ pbLocationPayload.setLatitude(locationPayload.latitude)
46
+ pbLocationPayload.setLongitude(locationPayload.longitude)
47
+ pbLocationPayload.setAccuracy(locationPayload.accuracy)
48
+ pbLocationPayload.setAddress(locationPayload.address)
49
+ pbLocationPayload.setName(locationPayload.name)
50
+ return pbLocationPayload
51
+ }
52
+
53
+ export const locationPbToPayload = (locationPayloadPb: puppet.LocationPayload) => {
54
+ const _locationPayloadPb = locationPayloadPb.toObject()
55
+ const payload: PUPPET.payloads.Location = {
56
+ ..._locationPayloadPb,
57
+ }
58
+
59
+ return payload
60
+ }
61
+
42
62
  export const urlLinkPbToPayload = (urlLinkPayloadPb: puppet.UrlLinkPayload) => {
43
63
  const _urlLinkPayloadPb = urlLinkPayloadPb.toObject()
44
64
  const urlLinkPayload: PUPPET.payloads.UrlLink = {
@@ -116,13 +136,8 @@ export const postPayloadToPb = async (grpcPuppet: grpcPuppet, payload: PUPPET.pa
116
136
  if (payload.rootId) { pb.setRootId(payload.rootId) }
117
137
  if (payload.parentId) { pb.setParentId(payload.parentId) }
118
138
  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)
139
+ const pbLocationPayload = locationPayloadToPb(grpcPuppet, payload.location)
140
+ pb.setLocation(pbLocationPayload)
126
141
  }
127
142
  pb.setVisibleListList(payload.visibleList || [])
128
143
  return pb
@@ -243,3 +258,115 @@ export const callRecordPayloadToPb = (grpcPuppet: grpcPuppet, callRecordPayload:
243
258
 
244
259
  return pbCallRecordPayload
245
260
  }
261
+
262
+ export const chatHistoryPbToPayload = (FileBoxUuid: typeof FileBox, chatHistoryPb: puppet.ChatHistoryPayload[]) => {
263
+ const chatHistoryPayloadList: PUPPET.payloads.ChatHistory[] = []
264
+ for (const payload of chatHistoryPb) {
265
+ const jsonText = payload.getAvatar()
266
+
267
+ const chatHistoryContent = payload.getMessage()
268
+
269
+ if (!chatHistoryContent) {
270
+ continue
271
+ }
272
+
273
+ let message: any
274
+ switch (chatHistoryContent.getType()) {
275
+ case puppet.ChatHistoryContentType.TEXT:
276
+ message = chatHistoryContent.getText()!
277
+ break
278
+ case puppet.ChatHistoryContentType.FILE:
279
+ message = chatHistoryContent.getFileBox()!
280
+ break
281
+ case puppet.ChatHistoryContentType.LOCATION:
282
+ message = locationPbToPayload(chatHistoryContent.getLocation()!)
283
+ break
284
+ case puppet.ChatHistoryContentType.URL:
285
+ message = urlLinkPbToPayload(chatHistoryContent.getUrlLink()!)
286
+ break
287
+ case puppet.ChatHistoryContentType.MINI_PROGRAM:
288
+ message = miniProgramPbToPayload(chatHistoryContent.getMiniProgram()!)
289
+ break
290
+ case puppet.ChatHistoryContentType.CHANNEL:
291
+ message = channelPbToPayload(chatHistoryContent.getChannel()!)
292
+ break
293
+ case puppet.ChatHistoryContentType.CHAT_HISTORY:
294
+ message = chatHistoryPbToPayload(FileBoxUuid, chatHistoryContent.getChatHistoryList()!)
295
+ break
296
+ default:
297
+ throw new Error(`Invalid chat history content type: ${chatHistoryContent.getType()}`)
298
+ }
299
+
300
+ const chatHistoryPayload: PUPPET.payloads.ChatHistory = {
301
+ type: payload.getType(),
302
+ avatar: FileBoxUuid.fromJSON(jsonText),
303
+ senderName: payload.getSenderName(),
304
+ corpName: payload.getCorpName(),
305
+ time: payload.getTime(),
306
+ message,
307
+ }
308
+ chatHistoryPayloadList.push(chatHistoryPayload)
309
+ }
310
+ return chatHistoryPayloadList
311
+ }
312
+
313
+ export const chatHistoryPayloadToPb = async (grpcPuppet: grpcPuppet, chatHistoryPayloadList: PUPPET.payloads.ChatHistory[], serializeFileBox: (fileBox: FileBoxInterface) => Promise<string>) => {
314
+ const list = []
315
+ for (const chatHistoryPayload of chatHistoryPayloadList) {
316
+ const pbChatHistoryPayload = new grpcPuppet.ChatHistoryPayload()
317
+
318
+ pbChatHistoryPayload.setType(chatHistoryPayload.type)
319
+ const avatarSerializedFileBox = await serializeFileBox(chatHistoryPayload.avatar)
320
+ pbChatHistoryPayload.setAvatar(avatarSerializedFileBox)
321
+ pbChatHistoryPayload.setSenderName(chatHistoryPayload.senderName)
322
+ pbChatHistoryPayload.setCorpName(chatHistoryPayload.corpName)
323
+ pbChatHistoryPayload.setTime(chatHistoryPayload.time)
324
+
325
+ const pbChatHistoryContent = new grpcPuppet.ChatHistoryContent()
326
+ switch (chatHistoryPayload.type) {
327
+ case PUPPET.types.Message.Text:
328
+ case PUPPET.types.Message.Contact:
329
+ pbChatHistoryContent.setType(grpcPuppet.ChatHistoryContentType.TEXT)
330
+ pbChatHistoryContent.setText(chatHistoryPayload.message)
331
+ break
332
+ case PUPPET.types.Message.Image:
333
+ case PUPPET.types.Message.Attachment:
334
+ case PUPPET.types.Message.Video:
335
+ pbChatHistoryContent.setType(grpcPuppet.ChatHistoryContentType.FILE)
336
+ pbChatHistoryContent.setFileBox(await serializeFileBox(chatHistoryPayload.message))
337
+ break
338
+ case PUPPET.types.Message.Location:
339
+ pbChatHistoryContent.setType(grpcPuppet.ChatHistoryContentType.LOCATION)
340
+ const pbLocationPayload = locationPayloadToPb(grpcPuppet, chatHistoryPayload.message)
341
+ pbChatHistoryContent.setLocation(pbLocationPayload)
342
+ break
343
+ case PUPPET.types.Message.Url:
344
+ pbChatHistoryContent.setType(grpcPuppet.ChatHistoryContentType.URL)
345
+ const pbUrlLinkPayload = urlLinkPayloadToPb(grpcPuppet, chatHistoryPayload.message)
346
+ pbChatHistoryContent.setUrlLink(pbUrlLinkPayload)
347
+ break
348
+ case PUPPET.types.Message.MiniProgram:
349
+ pbChatHistoryContent.setType(grpcPuppet.ChatHistoryContentType.MINI_PROGRAM)
350
+ const pbMiniProgramPayload = miniProgramPayloadToPb(grpcPuppet, chatHistoryPayload.message)
351
+ pbChatHistoryContent.setMiniProgram(pbMiniProgramPayload)
352
+ break
353
+ case PUPPET.types.Message.Channel:
354
+ pbChatHistoryContent.setType(grpcPuppet.ChatHistoryContentType.CHANNEL)
355
+ const pbChannelPayload = channelPayloadToPb(grpcPuppet, chatHistoryPayload.message)
356
+ pbChatHistoryContent.setChannel(pbChannelPayload)
357
+ break
358
+ case PUPPET.types.Message.ChatHistory:
359
+ pbChatHistoryContent.setType(grpcPuppet.ChatHistoryContentType.CHAT_HISTORY)
360
+ const pbChatHistoryPayload = await chatHistoryPayloadToPb(grpcPuppet, chatHistoryPayload.message, serializeFileBox)
361
+ pbChatHistoryContent.setChatHistoryList(pbChatHistoryPayload)
362
+ break
363
+ default:
364
+ throw new Error(`ChatHistoryContent unsupported type ${chatHistoryPayload.type}`)
365
+ }
366
+ pbChatHistoryPayload.setMessage(pbChatHistoryContent)
367
+
368
+ list.push(pbChatHistoryPayload)
369
+ }
370
+
371
+ return list
372
+ }