wechaty-puppet-matrix 0.0.4

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 (352) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +14 -0
  3. package/dist/cjs/package.json +3 -0
  4. package/dist/cjs/src/cleanup.d.ts +4 -0
  5. package/dist/cjs/src/cleanup.d.ts.map +1 -0
  6. package/dist/cjs/src/cleanup.js +31 -0
  7. package/dist/cjs/src/config.d.ts +5 -0
  8. package/dist/cjs/src/config.d.ts.map +1 -0
  9. package/dist/cjs/src/config.js +10 -0
  10. package/dist/cjs/src/engine-schema.d.ts +76 -0
  11. package/dist/cjs/src/engine-schema.d.ts.map +1 -0
  12. package/dist/cjs/src/engine-schema.js +14 -0
  13. package/dist/cjs/src/matrix/cache-manager.d.ts +58 -0
  14. package/dist/cjs/src/matrix/cache-manager.d.ts.map +1 -0
  15. package/dist/cjs/src/matrix/cache-manager.js +286 -0
  16. package/dist/cjs/src/matrix/events/event-friendship.d.ts +6 -0
  17. package/dist/cjs/src/matrix/events/event-friendship.d.ts.map +1 -0
  18. package/dist/cjs/src/matrix/events/event-friendship.js +109 -0
  19. package/dist/cjs/src/matrix/events/event-message.d.ts +6 -0
  20. package/dist/cjs/src/matrix/events/event-message.d.ts.map +1 -0
  21. package/dist/cjs/src/matrix/events/event-message.js +5 -0
  22. package/dist/cjs/src/matrix/events/event-room-invite.d.ts +6 -0
  23. package/dist/cjs/src/matrix/events/event-room-invite.d.ts.map +1 -0
  24. package/dist/cjs/src/matrix/events/event-room-invite.js +55 -0
  25. package/dist/cjs/src/matrix/events/event-room-join.d.ts +6 -0
  26. package/dist/cjs/src/matrix/events/event-room-join.d.ts.map +1 -0
  27. package/dist/cjs/src/matrix/events/event-room-join.js +127 -0
  28. package/dist/cjs/src/matrix/events/event-room-leave.d.ts +8 -0
  29. package/dist/cjs/src/matrix/events/event-room-leave.d.ts.map +1 -0
  30. package/dist/cjs/src/matrix/events/event-room-leave.js +83 -0
  31. package/dist/cjs/src/matrix/events/event-room-topic.d.ts +6 -0
  32. package/dist/cjs/src/matrix/events/event-room-topic.d.ts.map +1 -0
  33. package/dist/cjs/src/matrix/events/event-room-topic.js +56 -0
  34. package/dist/cjs/src/matrix/events/event.d.ts +28 -0
  35. package/dist/cjs/src/matrix/events/event.d.ts.map +1 -0
  36. package/dist/cjs/src/matrix/events/event.js +42 -0
  37. package/dist/cjs/src/matrix/events/mod.d.ts +3 -0
  38. package/dist/cjs/src/matrix/events/mod.d.ts.map +1 -0
  39. package/dist/cjs/src/matrix/events/mod.js +21 -0
  40. package/dist/cjs/src/matrix/messages/message-appmsg.d.ts +57 -0
  41. package/dist/cjs/src/matrix/messages/message-appmsg.d.ts.map +1 -0
  42. package/dist/cjs/src/matrix/messages/message-appmsg.js +60 -0
  43. package/dist/cjs/src/matrix/messages/message-audio.d.ts +32 -0
  44. package/dist/cjs/src/matrix/messages/message-audio.d.ts.map +1 -0
  45. package/dist/cjs/src/matrix/messages/message-audio.js +17 -0
  46. package/dist/cjs/src/matrix/messages/message-emotion.d.ts +13 -0
  47. package/dist/cjs/src/matrix/messages/message-emotion.d.ts.map +1 -0
  48. package/dist/cjs/src/matrix/messages/message-emotion.js +32 -0
  49. package/dist/cjs/src/matrix/messages/message-image.d.ts +33 -0
  50. package/dist/cjs/src/matrix/messages/message-image.d.ts.map +1 -0
  51. package/dist/cjs/src/matrix/messages/message-image.js +14 -0
  52. package/dist/cjs/src/matrix/messages/message-miniprogram.d.ts +4 -0
  53. package/dist/cjs/src/matrix/messages/message-miniprogram.d.ts.map +1 -0
  54. package/dist/cjs/src/matrix/messages/message-miniprogram.js +21 -0
  55. package/dist/cjs/src/matrix/messages/message-sysmsg.d.ts +18 -0
  56. package/dist/cjs/src/matrix/messages/message-sysmsg.d.ts.map +1 -0
  57. package/dist/cjs/src/matrix/messages/message-sysmsg.js +76 -0
  58. package/dist/cjs/src/matrix/messages/message-video.d.ts +43 -0
  59. package/dist/cjs/src/matrix/messages/message-video.d.ts.map +1 -0
  60. package/dist/cjs/src/matrix/messages/message-video.js +20 -0
  61. package/dist/cjs/src/matrix/messages/sysmsg/message-pat.d.ts +14 -0
  62. package/dist/cjs/src/matrix/messages/sysmsg/message-pat.d.ts.map +1 -0
  63. package/dist/cjs/src/matrix/messages/sysmsg/message-pat.js +11 -0
  64. package/dist/cjs/src/matrix/messages/sysmsg/message-revokemsg.d.ts +19 -0
  65. package/dist/cjs/src/matrix/messages/sysmsg/message-revokemsg.d.ts.map +1 -0
  66. package/dist/cjs/src/matrix/messages/sysmsg/message-revokemsg.js +48 -0
  67. package/dist/cjs/src/matrix/messages/sysmsg/message-sysmsgtemplate.d.ts +59 -0
  68. package/dist/cjs/src/matrix/messages/sysmsg/message-sysmsgtemplate.d.ts.map +1 -0
  69. package/dist/cjs/src/matrix/messages/sysmsg/message-sysmsgtemplate.js +61 -0
  70. package/dist/cjs/src/matrix/messages/sysmsg/message-todo.d.ts +31 -0
  71. package/dist/cjs/src/matrix/messages/sysmsg/message-todo.d.ts.map +1 -0
  72. package/dist/cjs/src/matrix/messages/sysmsg/message-todo.js +16 -0
  73. package/dist/cjs/src/matrix/schema-mapper/contact.d.ts +4 -0
  74. package/dist/cjs/src/matrix/schema-mapper/contact.d.ts.map +1 -0
  75. package/dist/cjs/src/matrix/schema-mapper/contact.js +62 -0
  76. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-appmsg.d.ts +3 -0
  77. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-appmsg.d.ts.map +1 -0
  78. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-appmsg.js +100 -0
  79. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-refermsg.d.ts +3 -0
  80. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-refermsg.d.ts.map +1 -0
  81. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-refermsg.js +67 -0
  82. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-room.d.ts +3 -0
  83. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-room.d.ts.map +1 -0
  84. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-room.js +40 -0
  85. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-single-chat.d.ts +3 -0
  86. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-single-chat.d.ts.map +1 -0
  87. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-single-chat.js +11 -0
  88. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-sysmsg.d.ts +3 -0
  89. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-sysmsg.d.ts.map +1 -0
  90. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-sysmsg.js +41 -0
  91. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-type.d.ts +3 -0
  92. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-type.d.ts.map +1 -0
  93. package/dist/cjs/src/matrix/schema-mapper/message/message-parser-type.js +65 -0
  94. package/dist/cjs/src/matrix/schema-mapper/message/message-parser.d.ts +13 -0
  95. package/dist/cjs/src/matrix/schema-mapper/message/message-parser.d.ts.map +1 -0
  96. package/dist/cjs/src/matrix/schema-mapper/message/message-parser.js +20 -0
  97. package/dist/cjs/src/matrix/schema-mapper/message/mod.d.ts +3 -0
  98. package/dist/cjs/src/matrix/schema-mapper/message/mod.d.ts.map +1 -0
  99. package/dist/cjs/src/matrix/schema-mapper/message/mod.js +17 -0
  100. package/dist/cjs/src/matrix/schema-mapper/message.d.ts +6 -0
  101. package/dist/cjs/src/matrix/schema-mapper/message.d.ts.map +1 -0
  102. package/dist/cjs/src/matrix/schema-mapper/message.js +47 -0
  103. package/dist/cjs/src/matrix/schema-mapper/room.d.ts +6 -0
  104. package/dist/cjs/src/matrix/schema-mapper/room.d.ts.map +1 -0
  105. package/dist/cjs/src/matrix/schema-mapper/room.js +27 -0
  106. package/dist/cjs/src/matrix/service/request.d.ts +290 -0
  107. package/dist/cjs/src/matrix/service/request.d.ts.map +1 -0
  108. package/dist/cjs/src/matrix/service/request.js +1315 -0
  109. package/dist/cjs/src/matrix/types.d.ts +34 -0
  110. package/dist/cjs/src/matrix/types.d.ts.map +1 -0
  111. package/dist/cjs/src/matrix/types.js +30 -0
  112. package/dist/cjs/src/matrix/utils/cached-promise.d.ts +5 -0
  113. package/dist/cjs/src/matrix/utils/cached-promise.d.ts.map +1 -0
  114. package/dist/cjs/src/matrix/utils/cached-promise.js +22 -0
  115. package/dist/cjs/src/matrix/utils/image-decrypt.d.ts +7 -0
  116. package/dist/cjs/src/matrix/utils/image-decrypt.d.ts.map +1 -0
  117. package/dist/cjs/src/matrix/utils/image-decrypt.js +158 -0
  118. package/dist/cjs/src/matrix/utils/index.d.ts +4 -0
  119. package/dist/cjs/src/matrix/utils/index.d.ts.map +1 -0
  120. package/dist/cjs/src/matrix/utils/index.js +32 -0
  121. package/dist/cjs/src/matrix/utils/is-type.d.ts +9 -0
  122. package/dist/cjs/src/matrix/utils/is-type.d.ts.map +1 -0
  123. package/dist/cjs/src/matrix/utils/is-type.js +72 -0
  124. package/dist/cjs/src/matrix/utils/regex.d.ts +3 -0
  125. package/dist/cjs/src/matrix/utils/regex.d.ts.map +1 -0
  126. package/dist/cjs/src/matrix/utils/regex.js +14 -0
  127. package/dist/cjs/src/matrix/utils/runner.d.ts +3 -0
  128. package/dist/cjs/src/matrix/utils/runner.d.ts.map +1 -0
  129. package/dist/cjs/src/matrix/utils/runner.js +12 -0
  130. package/dist/cjs/src/matrix/utils/string.d.ts +2 -0
  131. package/dist/cjs/src/matrix/utils/string.d.ts.map +1 -0
  132. package/dist/cjs/src/matrix/utils/string.js +7 -0
  133. package/dist/cjs/src/matrix/utils/xml-to-json.d.ts +5 -0
  134. package/dist/cjs/src/matrix/utils/xml-to-json.d.ts.map +1 -0
  135. package/dist/cjs/src/matrix/utils/xml-to-json.js +51 -0
  136. package/dist/cjs/src/mod.d.ts +5 -0
  137. package/dist/cjs/src/mod.d.ts.map +1 -0
  138. package/dist/cjs/src/mod.js +9 -0
  139. package/dist/cjs/src/package-json.d.ts +3 -0
  140. package/dist/cjs/src/package-json.d.ts.map +1 -0
  141. package/dist/cjs/src/package-json.js +4 -0
  142. package/dist/cjs/src/package-json.spec.d.ts +3 -0
  143. package/dist/cjs/src/package-json.spec.d.ts.map +1 -0
  144. package/dist/cjs/src/package-json.spec.js +9 -0
  145. package/dist/cjs/src/puppet-matrix.d.ts +114 -0
  146. package/dist/cjs/src/puppet-matrix.d.ts.map +1 -0
  147. package/dist/cjs/src/puppet-matrix.js +1037 -0
  148. package/dist/cjs/tests/integration.spec.d.ts +3 -0
  149. package/dist/cjs/tests/integration.spec.d.ts.map +1 -0
  150. package/dist/cjs/tests/integration.spec.js +7 -0
  151. package/dist/cjs/tests/tap.spec.d.ts +3 -0
  152. package/dist/cjs/tests/tap.spec.d.ts.map +1 -0
  153. package/dist/cjs/tests/tap.spec.js +32 -0
  154. package/dist/esm/src/cleanup.d.ts +4 -0
  155. package/dist/esm/src/cleanup.d.ts.map +1 -0
  156. package/dist/esm/src/cleanup.js +24 -0
  157. package/dist/esm/src/config.d.ts +5 -0
  158. package/dist/esm/src/config.d.ts.map +1 -0
  159. package/dist/esm/src/config.js +5 -0
  160. package/dist/esm/src/engine-schema.d.ts +76 -0
  161. package/dist/esm/src/engine-schema.d.ts.map +1 -0
  162. package/dist/esm/src/engine-schema.js +11 -0
  163. package/dist/esm/src/matrix/cache-manager.d.ts +58 -0
  164. package/dist/esm/src/matrix/cache-manager.d.ts.map +1 -0
  165. package/dist/esm/src/matrix/cache-manager.js +279 -0
  166. package/dist/esm/src/matrix/events/event-friendship.d.ts +6 -0
  167. package/dist/esm/src/matrix/events/event-friendship.d.ts.map +1 -0
  168. package/dist/esm/src/matrix/events/event-friendship.js +84 -0
  169. package/dist/esm/src/matrix/events/event-message.d.ts +6 -0
  170. package/dist/esm/src/matrix/events/event-message.d.ts.map +1 -0
  171. package/dist/esm/src/matrix/events/event-message.js +3 -0
  172. package/dist/esm/src/matrix/events/event-room-invite.d.ts +6 -0
  173. package/dist/esm/src/matrix/events/event-room-invite.d.ts.map +1 -0
  174. package/dist/esm/src/matrix/events/event-room-invite.js +53 -0
  175. package/dist/esm/src/matrix/events/event-room-join.d.ts +6 -0
  176. package/dist/esm/src/matrix/events/event-room-join.d.ts.map +1 -0
  177. package/dist/esm/src/matrix/events/event-room-join.js +125 -0
  178. package/dist/esm/src/matrix/events/event-room-leave.d.ts +8 -0
  179. package/dist/esm/src/matrix/events/event-room-leave.d.ts.map +1 -0
  180. package/dist/esm/src/matrix/events/event-room-leave.js +79 -0
  181. package/dist/esm/src/matrix/events/event-room-topic.d.ts +6 -0
  182. package/dist/esm/src/matrix/events/event-room-topic.d.ts.map +1 -0
  183. package/dist/esm/src/matrix/events/event-room-topic.js +54 -0
  184. package/dist/esm/src/matrix/events/event.d.ts +28 -0
  185. package/dist/esm/src/matrix/events/event.d.ts.map +1 -0
  186. package/dist/esm/src/matrix/events/event.js +37 -0
  187. package/dist/esm/src/matrix/events/mod.d.ts +3 -0
  188. package/dist/esm/src/matrix/events/mod.d.ts.map +1 -0
  189. package/dist/esm/src/matrix/events/mod.js +14 -0
  190. package/dist/esm/src/matrix/messages/message-appmsg.d.ts +57 -0
  191. package/dist/esm/src/matrix/messages/message-appmsg.d.ts.map +1 -0
  192. package/dist/esm/src/matrix/messages/message-appmsg.js +56 -0
  193. package/dist/esm/src/matrix/messages/message-audio.d.ts +32 -0
  194. package/dist/esm/src/matrix/messages/message-audio.d.ts.map +1 -0
  195. package/dist/esm/src/matrix/messages/message-audio.js +14 -0
  196. package/dist/esm/src/matrix/messages/message-emotion.d.ts +13 -0
  197. package/dist/esm/src/matrix/messages/message-emotion.d.ts.map +1 -0
  198. package/dist/esm/src/matrix/messages/message-emotion.js +28 -0
  199. package/dist/esm/src/matrix/messages/message-image.d.ts +33 -0
  200. package/dist/esm/src/matrix/messages/message-image.d.ts.map +1 -0
  201. package/dist/esm/src/matrix/messages/message-image.js +11 -0
  202. package/dist/esm/src/matrix/messages/message-miniprogram.d.ts +4 -0
  203. package/dist/esm/src/matrix/messages/message-miniprogram.d.ts.map +1 -0
  204. package/dist/esm/src/matrix/messages/message-miniprogram.js +18 -0
  205. package/dist/esm/src/matrix/messages/message-sysmsg.d.ts +18 -0
  206. package/dist/esm/src/matrix/messages/message-sysmsg.d.ts.map +1 -0
  207. package/dist/esm/src/matrix/messages/message-sysmsg.js +69 -0
  208. package/dist/esm/src/matrix/messages/message-video.d.ts +43 -0
  209. package/dist/esm/src/matrix/messages/message-video.d.ts.map +1 -0
  210. package/dist/esm/src/matrix/messages/message-video.js +17 -0
  211. package/dist/esm/src/matrix/messages/sysmsg/message-pat.d.ts +14 -0
  212. package/dist/esm/src/matrix/messages/sysmsg/message-pat.d.ts.map +1 -0
  213. package/dist/esm/src/matrix/messages/sysmsg/message-pat.js +8 -0
  214. package/dist/esm/src/matrix/messages/sysmsg/message-revokemsg.d.ts +19 -0
  215. package/dist/esm/src/matrix/messages/sysmsg/message-revokemsg.d.ts.map +1 -0
  216. package/dist/esm/src/matrix/messages/sysmsg/message-revokemsg.js +43 -0
  217. package/dist/esm/src/matrix/messages/sysmsg/message-sysmsgtemplate.d.ts +59 -0
  218. package/dist/esm/src/matrix/messages/sysmsg/message-sysmsgtemplate.d.ts.map +1 -0
  219. package/dist/esm/src/matrix/messages/sysmsg/message-sysmsgtemplate.js +56 -0
  220. package/dist/esm/src/matrix/messages/sysmsg/message-todo.d.ts +31 -0
  221. package/dist/esm/src/matrix/messages/sysmsg/message-todo.d.ts.map +1 -0
  222. package/dist/esm/src/matrix/messages/sysmsg/message-todo.js +13 -0
  223. package/dist/esm/src/matrix/schema-mapper/contact.d.ts +4 -0
  224. package/dist/esm/src/matrix/schema-mapper/contact.d.ts.map +1 -0
  225. package/dist/esm/src/matrix/schema-mapper/contact.js +36 -0
  226. package/dist/esm/src/matrix/schema-mapper/message/message-parser-appmsg.d.ts +3 -0
  227. package/dist/esm/src/matrix/schema-mapper/message/message-parser-appmsg.d.ts.map +1 -0
  228. package/dist/esm/src/matrix/schema-mapper/message/message-parser-appmsg.js +73 -0
  229. package/dist/esm/src/matrix/schema-mapper/message/message-parser-refermsg.d.ts +3 -0
  230. package/dist/esm/src/matrix/schema-mapper/message/message-parser-refermsg.d.ts.map +1 -0
  231. package/dist/esm/src/matrix/schema-mapper/message/message-parser-refermsg.js +40 -0
  232. package/dist/esm/src/matrix/schema-mapper/message/message-parser-room.d.ts +3 -0
  233. package/dist/esm/src/matrix/schema-mapper/message/message-parser-room.d.ts.map +1 -0
  234. package/dist/esm/src/matrix/schema-mapper/message/message-parser-room.js +36 -0
  235. package/dist/esm/src/matrix/schema-mapper/message/message-parser-single-chat.d.ts +3 -0
  236. package/dist/esm/src/matrix/schema-mapper/message/message-parser-single-chat.d.ts.map +1 -0
  237. package/dist/esm/src/matrix/schema-mapper/message/message-parser-single-chat.js +7 -0
  238. package/dist/esm/src/matrix/schema-mapper/message/message-parser-sysmsg.d.ts +3 -0
  239. package/dist/esm/src/matrix/schema-mapper/message/message-parser-sysmsg.d.ts.map +1 -0
  240. package/dist/esm/src/matrix/schema-mapper/message/message-parser-sysmsg.js +37 -0
  241. package/dist/esm/src/matrix/schema-mapper/message/message-parser-type.d.ts +3 -0
  242. package/dist/esm/src/matrix/schema-mapper/message/message-parser-type.d.ts.map +1 -0
  243. package/dist/esm/src/matrix/schema-mapper/message/message-parser-type.js +38 -0
  244. package/dist/esm/src/matrix/schema-mapper/message/message-parser.d.ts +13 -0
  245. package/dist/esm/src/matrix/schema-mapper/message/message-parser.d.ts.map +1 -0
  246. package/dist/esm/src/matrix/schema-mapper/message/message-parser.js +15 -0
  247. package/dist/esm/src/matrix/schema-mapper/message/mod.d.ts +3 -0
  248. package/dist/esm/src/matrix/schema-mapper/message/mod.d.ts.map +1 -0
  249. package/dist/esm/src/matrix/schema-mapper/message/mod.js +14 -0
  250. package/dist/esm/src/matrix/schema-mapper/message.d.ts +6 -0
  251. package/dist/esm/src/matrix/schema-mapper/message.d.ts.map +1 -0
  252. package/dist/esm/src/matrix/schema-mapper/message.js +21 -0
  253. package/dist/esm/src/matrix/schema-mapper/room.d.ts +6 -0
  254. package/dist/esm/src/matrix/schema-mapper/room.d.ts.map +1 -0
  255. package/dist/esm/src/matrix/schema-mapper/room.js +22 -0
  256. package/dist/esm/src/matrix/service/request.d.ts +290 -0
  257. package/dist/esm/src/matrix/service/request.d.ts.map +1 -0
  258. package/dist/esm/src/matrix/service/request.js +1286 -0
  259. package/dist/esm/src/matrix/types.d.ts +34 -0
  260. package/dist/esm/src/matrix/types.d.ts.map +1 -0
  261. package/dist/esm/src/matrix/types.js +27 -0
  262. package/dist/esm/src/matrix/utils/cached-promise.d.ts +5 -0
  263. package/dist/esm/src/matrix/utils/cached-promise.d.ts.map +1 -0
  264. package/dist/esm/src/matrix/utils/cached-promise.js +18 -0
  265. package/dist/esm/src/matrix/utils/image-decrypt.d.ts +7 -0
  266. package/dist/esm/src/matrix/utils/image-decrypt.d.ts.map +1 -0
  267. package/dist/esm/src/matrix/utils/image-decrypt.js +153 -0
  268. package/dist/esm/src/matrix/utils/index.d.ts +4 -0
  269. package/dist/esm/src/matrix/utils/index.d.ts.map +1 -0
  270. package/dist/esm/src/matrix/utils/index.js +24 -0
  271. package/dist/esm/src/matrix/utils/is-type.d.ts +9 -0
  272. package/dist/esm/src/matrix/utils/is-type.d.ts.map +1 -0
  273. package/dist/esm/src/matrix/utils/is-type.js +62 -0
  274. package/dist/esm/src/matrix/utils/regex.d.ts +3 -0
  275. package/dist/esm/src/matrix/utils/regex.d.ts.map +1 -0
  276. package/dist/esm/src/matrix/utils/regex.js +11 -0
  277. package/dist/esm/src/matrix/utils/runner.d.ts +3 -0
  278. package/dist/esm/src/matrix/utils/runner.d.ts.map +1 -0
  279. package/dist/esm/src/matrix/utils/runner.js +9 -0
  280. package/dist/esm/src/matrix/utils/string.d.ts +2 -0
  281. package/dist/esm/src/matrix/utils/string.d.ts.map +1 -0
  282. package/dist/esm/src/matrix/utils/string.js +3 -0
  283. package/dist/esm/src/matrix/utils/xml-to-json.d.ts +5 -0
  284. package/dist/esm/src/matrix/utils/xml-to-json.d.ts.map +1 -0
  285. package/dist/esm/src/matrix/utils/xml-to-json.js +45 -0
  286. package/dist/esm/src/mod.d.ts +5 -0
  287. package/dist/esm/src/mod.d.ts.map +1 -0
  288. package/dist/esm/src/mod.js +4 -0
  289. package/dist/esm/src/package-json.d.ts +3 -0
  290. package/dist/esm/src/package-json.d.ts.map +1 -0
  291. package/dist/esm/src/package-json.js +1 -0
  292. package/dist/esm/src/package-json.spec.d.ts +3 -0
  293. package/dist/esm/src/package-json.spec.d.ts.map +1 -0
  294. package/dist/esm/src/package-json.spec.js +7 -0
  295. package/dist/esm/src/puppet-matrix.d.ts +114 -0
  296. package/dist/esm/src/puppet-matrix.d.ts.map +1 -0
  297. package/dist/esm/src/puppet-matrix.js +1007 -0
  298. package/dist/esm/tests/integration.spec.d.ts +3 -0
  299. package/dist/esm/tests/integration.spec.d.ts.map +1 -0
  300. package/dist/esm/tests/integration.spec.js +5 -0
  301. package/dist/esm/tests/tap.spec.d.ts +3 -0
  302. package/dist/esm/tests/tap.spec.d.ts.map +1 -0
  303. package/dist/esm/tests/tap.spec.js +7 -0
  304. package/package.json +98 -0
  305. package/src/cleanup.ts +36 -0
  306. package/src/config.ts +15 -0
  307. package/src/engine-schema.ts +171 -0
  308. package/src/matrix/cache-manager.ts +359 -0
  309. package/src/matrix/events/event-friendship.ts +116 -0
  310. package/src/matrix/events/event-message.ts +7 -0
  311. package/src/matrix/events/event-room-invite.ts +64 -0
  312. package/src/matrix/events/event-room-join.ts +200 -0
  313. package/src/matrix/events/event-room-leave.ts +111 -0
  314. package/src/matrix/events/event-room-topic.ts +73 -0
  315. package/src/matrix/events/event.ts +60 -0
  316. package/src/matrix/events/mod.ts +16 -0
  317. package/src/matrix/messages/message-appmsg.ts +131 -0
  318. package/src/matrix/messages/message-audio.ts +48 -0
  319. package/src/matrix/messages/message-emotion.ts +68 -0
  320. package/src/matrix/messages/message-image.ts +46 -0
  321. package/src/matrix/messages/message-miniprogram.ts +45 -0
  322. package/src/matrix/messages/message-sysmsg.ts +106 -0
  323. package/src/matrix/messages/message-video.ts +62 -0
  324. package/src/matrix/messages/sysmsg/message-pat.ts +22 -0
  325. package/src/matrix/messages/sysmsg/message-revokemsg.ts +70 -0
  326. package/src/matrix/messages/sysmsg/message-sysmsgtemplate.ts +133 -0
  327. package/src/matrix/messages/sysmsg/message-todo.ts +45 -0
  328. package/src/matrix/schema-mapper/contact.ts +37 -0
  329. package/src/matrix/schema-mapper/message/message-parser-appmsg.ts +78 -0
  330. package/src/matrix/schema-mapper/message/message-parser-refermsg.ts +53 -0
  331. package/src/matrix/schema-mapper/message/message-parser-room.ts +62 -0
  332. package/src/matrix/schema-mapper/message/message-parser-single-chat.ts +12 -0
  333. package/src/matrix/schema-mapper/message/message-parser-sysmsg.ts +62 -0
  334. package/src/matrix/schema-mapper/message/message-parser-type.ts +48 -0
  335. package/src/matrix/schema-mapper/message/message-parser.ts +35 -0
  336. package/src/matrix/schema-mapper/message/mod.ts +17 -0
  337. package/src/matrix/schema-mapper/message.ts +30 -0
  338. package/src/matrix/schema-mapper/room.ts +28 -0
  339. package/src/matrix/service/request.ts +1944 -0
  340. package/src/matrix/types.ts +37 -0
  341. package/src/matrix/utils/cached-promise.ts +25 -0
  342. package/src/matrix/utils/image-decrypt.ts +198 -0
  343. package/src/matrix/utils/index.ts +34 -0
  344. package/src/matrix/utils/is-type.ts +72 -0
  345. package/src/matrix/utils/regex.ts +15 -0
  346. package/src/matrix/utils/runner.ts +12 -0
  347. package/src/matrix/utils/string.ts +3 -0
  348. package/src/matrix/utils/xml-to-json.ts +59 -0
  349. package/src/mod.ts +10 -0
  350. package/src/package-json.spec.ts +10 -0
  351. package/src/package-json.ts +11 -0
  352. package/src/puppet-matrix.ts +1402 -0
@@ -0,0 +1,1037 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.VERSION = exports.PuppetMatrix = void 0;
30
+ const wechaty_puppet_1 = require("@juzi/wechaty-puppet");
31
+ const PUPPET = __importStar(require("@juzi/wechaty-puppet"));
32
+ const file_box_1 = require("file-box");
33
+ const request_js_1 = __importDefault(require("./matrix/service/request.js"));
34
+ const date_fns_1 = require("date-fns");
35
+ const index_js_1 = require("./matrix/utils/index.js");
36
+ const path_1 = __importDefault(require("path"));
37
+ const cache_manager_js_1 = require("./matrix/cache-manager.js");
38
+ const is_type_js_1 = require("./matrix/utils/is-type.js");
39
+ const message_appmsg_js_1 = require("./matrix/messages/message-appmsg.js");
40
+ const message_miniprogram_js_1 = require("./matrix/messages/message-miniprogram.js");
41
+ const message_emotion_js_1 = require("./matrix/messages/message-emotion.js");
42
+ const message_image_js_1 = require("./matrix/messages/message-image.js");
43
+ const message_audio_js_1 = require("./matrix/messages/message-audio.js");
44
+ const message_video_js_1 = require("./matrix/messages/message-video.js");
45
+ const cached_promise_js_1 = require("./matrix/utils/cached-promise.js");
46
+ const message_js_1 = require("./matrix/schema-mapper/message.js");
47
+ const contact_js_1 = require("./matrix/schema-mapper/contact.js");
48
+ const room_js_1 = require("./matrix/schema-mapper/room.js");
49
+ const mod_js_1 = require("./matrix/events/mod.js");
50
+ const cleanup_js_1 = require("./cleanup.js");
51
+ const package_json_js_1 = require("./package-json.js");
52
+ const xml_to_json_js_1 = require("./matrix/utils/xml-to-json.js");
53
+ const VERSION = package_json_js_1.packageJson.version || '0.0.0';
54
+ exports.VERSION = VERSION;
55
+ const PRE = '[PuppetMatrix]';
56
+ const SEARCH_CONTACT_PREFIX = '$search$-';
57
+ const STRANGER_SUFFIX = '@stranger';
58
+ class PuppetMatrix extends PUPPET.Puppet {
59
+ options;
60
+ _cacheMgr;
61
+ _client;
62
+ _self;
63
+ _qrcodeTicket;
64
+ _printVersion = true;
65
+ _heartBeatTimer;
66
+ _qrcodeInterval;
67
+ _qrcodeStatuasInterval;
68
+ static VERSION = VERSION;
69
+ constructor(options = {}) {
70
+ super(options);
71
+ this.options = options;
72
+ this.options.engine = request_js_1.default;
73
+ if (!this.options.token) {
74
+ const token = process.env['WECHATY_PUPPET_MATRIX_TOKEN'] || '';
75
+ if (token) {
76
+ this.options.token = token;
77
+ }
78
+ }
79
+ }
80
+ get client() {
81
+ return this._client;
82
+ }
83
+ async onStart() {
84
+ wechaty_puppet_1.log.verbose(PRE, 'onStart()');
85
+ await this._startClient();
86
+ }
87
+ async _startClient() {
88
+ if (!this._client) {
89
+ this._client = await this.options.engine.create(this.options);
90
+ }
91
+ await this._startPuppetHeart(true);
92
+ if (this._client) {
93
+ this._client.on('login', this.wrapAsync(async ({ robotInfo }) => {
94
+ wechaty_puppet_1.log.info(PRE, `login success: ${robotInfo.name}`);
95
+ await this.onLogin(robotInfo);
96
+ }));
97
+ this._client.on('message', this.wrapAsync(async (message) => {
98
+ await this._onPushMessage(message);
99
+ }));
100
+ this._client.on('contact', this.wrapAsync(async ({ contactInfo }) => {
101
+ await this._cacheMgr.setContact(contactInfo.wxid, contactInfo);
102
+ await this._cacheMgr?.setFriendshipRawPayload(contactInfo.wxid, {
103
+ id: contactInfo.wxid,
104
+ contactId: contactInfo.wxid,
105
+ timestamp: (0, date_fns_1.getUnixTime)(Date.now()),
106
+ type: PUPPET.types.Friendship.Confirm,
107
+ });
108
+ this.emit('friendship', {
109
+ friendshipId: contactInfo.wxid,
110
+ type: PUPPET.types.Friendship.Confirm,
111
+ });
112
+ }));
113
+ this._client.on('update-contacts', this.wrapAsync(async (contactList) => {
114
+ for (const contact of contactList) {
115
+ await this._onPushContact(contact);
116
+ }
117
+ }));
118
+ this._client.on('room-leave', this.wrapAsync(async ({ roomId, leaveIds }) => {
119
+ const payload = {
120
+ roomId,
121
+ removeeIdList: leaveIds,
122
+ removerId: this._self?.wxid,
123
+ timestamp: (0, date_fns_1.getUnixTime)(Date.now()),
124
+ };
125
+ for (const leaveId of leaveIds) {
126
+ await this._cacheMgr?.deleteSingleRoomMember(roomId, leaveId);
127
+ const roomInfo = await this._cacheMgr?.getRoom(roomId);
128
+ if (roomInfo && roomInfo.chatroommemberList) {
129
+ roomInfo.chatroommemberList = roomInfo.chatroommemberList.filter(member => member !== leaveId);
130
+ await this._cacheMgr?.setRoom(roomId, roomInfo);
131
+ }
132
+ }
133
+ this.emit('room-leave', payload);
134
+ }));
135
+ this._client.on('room-join', this.wrapAsync(async ({ roomId, inviterId, joinIds, joinUsers }) => {
136
+ const payload = {
137
+ inviteeIdList: joinIds,
138
+ inviterId,
139
+ roomId,
140
+ timestamp: (0, date_fns_1.getUnixTime)(Date.now()),
141
+ };
142
+ for (const joinUser of joinUsers) {
143
+ await this._cacheMgr?.updateSingleRoomMember(roomId, joinUser);
144
+ const roomInfo = await this._cacheMgr?.getRoom(roomId);
145
+ if (roomInfo && roomInfo.chatroommemberList) {
146
+ roomInfo.chatroommemberList.push(joinUser.wxid);
147
+ await this._cacheMgr?.setRoom(roomId, roomInfo);
148
+ }
149
+ }
150
+ wechaty_puppet_1.log.info(PRE, 'room-join-----: %s', JSON.stringify(payload));
151
+ this.emit('room-join', payload);
152
+ }));
153
+ this._client.on('logout', this.wrapAsync(async (message) => {
154
+ wechaty_puppet_1.log.info(PRE, 'Logout event: %s', message);
155
+ await this.logout(message);
156
+ }));
157
+ }
158
+ (0, cleanup_js_1.addRunningPuppet)(this);
159
+ void this.checkIsLogin();
160
+ if (this._printVersion) {
161
+ this._printVersion = false;
162
+ wechaty_puppet_1.log.info(`
163
+ ============================================================
164
+ Welcome to Wechaty Matrix puppet!
165
+
166
+ - puppet-Matrix version: ${VERSION}
167
+ ============================================================
168
+ `);
169
+ }
170
+ }
171
+ async checkIsLogin() {
172
+ const info = await this._client?.getSelfInfo();
173
+ if (info) {
174
+ wechaty_puppet_1.log.info(PRE, `login success: ${info.name}`);
175
+ await this.onLogin(info);
176
+ }
177
+ else {
178
+ if (this._qrcodeInterval) {
179
+ clearInterval(this._qrcodeInterval);
180
+ this._qrcodeInterval = null;
181
+ }
182
+ await this._getQrcode();
183
+ this._qrcodeInterval = setInterval(async () => {
184
+ await this._getQrcode();
185
+ }, 200000);
186
+ }
187
+ }
188
+ getQrcodeTicket(authurl) {
189
+ if (!authurl || !authurl.startsWith('http'))
190
+ return '';
191
+ const url = new URL(authurl);
192
+ const searchParams = new URLSearchParams(url.search.slice(1));
193
+ return searchParams.get('ticket') || '';
194
+ }
195
+ async _getQrcode() {
196
+ const qrcode = await this._client?.getQrcode();
197
+ if (qrcode) {
198
+ if (this._qrcodeStatuasInterval) {
199
+ clearInterval(this._qrcodeStatuasInterval);
200
+ this._qrcodeStatuasInterval = null;
201
+ }
202
+ this._qrcodeStatuasInterval = setInterval(async () => {
203
+ const scanStatus = await this._client?.getQrcodeStatus();
204
+ if (scanStatus.uuid === qrcode.uuid) {
205
+ if (scanStatus.authUrl) {
206
+ this._qrcodeTicket = this.getQrcodeTicket(scanStatus.authUrl);
207
+ this.emit('verify-code', scanStatus.uuid, '', 1, 1);
208
+ }
209
+ await this.onQrCodeEvent(scanStatus.status, qrcode.qrcodeUrl);
210
+ }
211
+ }, 8000);
212
+ }
213
+ }
214
+ async enterVerifyCode(id, code) {
215
+ wechaty_puppet_1.log.verbose(PRE, 'enterVerifyCode(%s, %s)', id, code);
216
+ if (this._qrcodeTicket) {
217
+ await this._client?.verifyLoginUrl(this._qrcodeTicket, code);
218
+ return;
219
+ }
220
+ wechaty_puppet_1.log.error(PRE, 'enterVerifyCode(%s, %s) error, no qrcodeTicket', id, code);
221
+ }
222
+ async onQrCodeEvent(status, url) {
223
+ const ScanStatusName = {
224
+ [PUPPET.types.ScanStatus.Unknown]: 'Unknown',
225
+ [PUPPET.types.ScanStatus.Cancel]: 'Cancel',
226
+ [PUPPET.types.ScanStatus.Waiting]: 'Waiting',
227
+ [PUPPET.types.ScanStatus.Scanned]: 'Scanned',
228
+ [PUPPET.types.ScanStatus.Confirmed]: 'Confirmed',
229
+ [PUPPET.types.ScanStatus.Timeout]: 'Timeout',
230
+ };
231
+ let scanStatus = PUPPET.types.ScanStatus.Unknown;
232
+ switch (status) {
233
+ case 0:
234
+ scanStatus = PUPPET.types.ScanStatus.Waiting;
235
+ break;
236
+ case 1:
237
+ scanStatus = PUPPET.types.ScanStatus.Scanned;
238
+ break;
239
+ case 2:
240
+ scanStatus = PUPPET.types.ScanStatus.Confirmed;
241
+ break;
242
+ case 3:
243
+ scanStatus = PUPPET.types.ScanStatus.Cancel;
244
+ break;
245
+ case 4:
246
+ scanStatus = PUPPET.types.ScanStatus.Timeout;
247
+ break;
248
+ }
249
+ wechaty_puppet_1.log.silly(PRE, `scan event, status: ${ScanStatusName[scanStatus]}${url ? ', with qrcode: ' + url : ''}`);
250
+ this.emit('scan', {
251
+ qrcode: url,
252
+ status: scanStatus,
253
+ });
254
+ if (status === 4 || status === 3) {
255
+ await this.checkIsLogin();
256
+ }
257
+ }
258
+ async onLogin(user) {
259
+ try {
260
+ if (!this._client) {
261
+ this._client = await this.options.engine.create(this.options);
262
+ }
263
+ if (!this._cacheMgr) {
264
+ this._cacheMgr = new cache_manager_js_1.CacheManager(user.wxid);
265
+ await this._cacheMgr.init();
266
+ await this._cacheMgr.setContact(user.wxid, user);
267
+ }
268
+ if (this._qrcodeInterval) {
269
+ clearInterval(this._qrcodeInterval);
270
+ this._qrcodeInterval = null;
271
+ }
272
+ if (this._qrcodeStatuasInterval) {
273
+ clearInterval(this._qrcodeStatuasInterval);
274
+ this._qrcodeStatuasInterval = null;
275
+ }
276
+ this._self = user;
277
+ await super.login(user.wxid);
278
+ void this._client?.pushLoginNotify();
279
+ await this.ready();
280
+ }
281
+ catch (e) {
282
+ wechaty_puppet_1.log.error('error login', e);
283
+ }
284
+ }
285
+ async ready() {
286
+ try {
287
+ await this._client?.getContactList(1, 100);
288
+ await (0, index_js_1.delay)(2000);
289
+ await this._client?.getGroupList(1, 100);
290
+ await (0, index_js_1.delay)(2000);
291
+ await this._client?.getOfficeList(1, 100);
292
+ wechaty_puppet_1.log.silly(PRE, 'on ready');
293
+ setTimeout(() => {
294
+ this.emit('ready', {
295
+ data: 'ready',
296
+ });
297
+ }, 10000);
298
+ }
299
+ catch (e) {
300
+ wechaty_puppet_1.log.error('ready error', e);
301
+ }
302
+ }
303
+ async onStop() {
304
+ await this._stopClient();
305
+ }
306
+ async _stopClient() {
307
+ this.__currentUserId = undefined;
308
+ this.__currentUserId = undefined;
309
+ if (this._cacheMgr) {
310
+ wechaty_puppet_1.log.info(PRE, 'colse cache');
311
+ await this._cacheMgr.close();
312
+ this._cacheMgr = undefined;
313
+ }
314
+ (0, cleanup_js_1.removeRunningPuppet)(this);
315
+ this._stopPuppetHeart();
316
+ }
317
+ async logout(reason) {
318
+ if (!this.isLoggedIn) {
319
+ return;
320
+ }
321
+ await this._client?.logout();
322
+ await super.logout(reason);
323
+ void this.checkIsLogin();
324
+ }
325
+ ding(data) {
326
+ const eventDongPayload = {
327
+ data: data ? data : 'ding-dong',
328
+ };
329
+ this.emit('dong', eventDongPayload);
330
+ }
331
+ async contactSelfName(name) {
332
+ return PUPPET.throwUnsupportedError(name);
333
+ }
334
+ async contactSelfQRCode() {
335
+ return this._client?.getUserQrcode() || '';
336
+ }
337
+ async contactSelfSignature(signature) {
338
+ return PUPPET.throwUnsupportedError(signature);
339
+ }
340
+ async contactPhone(contactId, phoneList) {
341
+ return PUPPET.throwUnsupportedError(contactId, phoneList);
342
+ }
343
+ async contactAlias(contactId, alias) {
344
+ const contact = await this.contactRawPayload(contactId);
345
+ if (alias) {
346
+ if (contact) {
347
+ if (contact.wxid.indexOf(STRANGER_SUFFIX) !== -1) {
348
+ await this._cacheMgr.setContactStrangerAlias(contact.wxid, alias);
349
+ if (contactId.startsWith(SEARCH_CONTACT_PREFIX)) {
350
+ const searchContact = await this._cacheMgr?.getContactSearch(contactId);
351
+ if (searchContact) {
352
+ searchContact.remark = alias;
353
+ await this._cacheMgr.setContactSearch(contactId, searchContact);
354
+ }
355
+ }
356
+ }
357
+ else {
358
+ await this._client?.setContactAlias(contactId, alias);
359
+ contact.remark = alias;
360
+ await this._updateContactCache(contact);
361
+ }
362
+ }
363
+ }
364
+ else {
365
+ return contact && contact.remark;
366
+ }
367
+ }
368
+ async contactAvatar(contactId, file) {
369
+ if (file) {
370
+ return PUPPET.throwUnsupportedError('set avatar is not unsupported');
371
+ }
372
+ const contact = await this.contactRawPayload(contactId);
373
+ if (contact && contact.avatar) {
374
+ return file_box_1.FileBox.fromUrl(contact.avatar, { name: `avatar-${contactId}.jpg` });
375
+ }
376
+ }
377
+ async contactList() {
378
+ return this._cacheMgr.getContactIds();
379
+ }
380
+ async contactCorporationRemark(contactId, corporationRemark) {
381
+ return PUPPET.throwUnsupportedError(contactId, corporationRemark);
382
+ }
383
+ async contactDescription(contactId, description) {
384
+ return PUPPET.throwUnsupportedError(contactId, description);
385
+ }
386
+ async contactDelete(contactId) {
387
+ const contact = await this._refreshContact(contactId);
388
+ if (contact && contact.isFriend === 2) {
389
+ wechaty_puppet_1.log.warn(`can not delete contact which is not a friend:: ${contactId}`);
390
+ return;
391
+ }
392
+ await this._client?.removeContact(contactId);
393
+ await this._refreshContact(contactId, 2);
394
+ }
395
+ async tagContactTagAdd(tagIds, contactIds) {
396
+ return PUPPET.throwUnsupportedError(tagIds, contactIds);
397
+ }
398
+ async tagContactTagRemove(tagIds, contactIds) {
399
+ return PUPPET.throwUnsupportedError(tagIds, contactIds);
400
+ }
401
+ async tagTagDelete(tagIdList) {
402
+ return PUPPET.throwUnsupportedError(tagIdList);
403
+ }
404
+ async tagTagContactList(contactId) {
405
+ return PUPPET.throwUnsupportedError(contactId);
406
+ }
407
+ async friendshipAccept(friendshipId) {
408
+ const friendship = (await this.friendshipRawPayload(friendshipId));
409
+ const userName = friendship.contactId;
410
+ if ((0, is_type_js_1.isIMContactId)(userName)) {
411
+ await this._refreshContact(userName);
412
+ }
413
+ await this._client?.confirmFriendship(userName, friendship.scene, friendship.ticket);
414
+ }
415
+ async friendshipAdd(contactId, option) {
416
+ let stranger;
417
+ let ticket;
418
+ let addContactScene;
419
+ const cachedContactSearch = await this._cacheMgr.getContactSearch(contactId);
420
+ if (cachedContactSearch) {
421
+ stranger = cachedContactSearch.isFriend || undefined;
422
+ ticket = cachedContactSearch.ticket || '';
423
+ addContactScene = cachedContactSearch.scene;
424
+ }
425
+ else {
426
+ const contactPayload = await this.contactRawPayload(contactId);
427
+ const contactAlias = contactPayload?.remark;
428
+ if (!contactAlias) {
429
+ const roomIds = await this._findRoomIdForWxid(contactId);
430
+ if (!roomIds.length) {
431
+ throw new Error(`Can not find room for contact while adding friendship: ${contactId}`);
432
+ }
433
+ const res = await this._client?.searchContact([contactId]);
434
+ if (res) {
435
+ await this._updateContactCache(res);
436
+ }
437
+ addContactScene = '14';
438
+ }
439
+ const res = await this.contactRawPayload(contactId);
440
+ if (res?.isFriend === 1) {
441
+ throw new Error(`contact:${contactId} is already a friend`);
442
+ }
443
+ ticket = '';
444
+ addContactScene = '6';
445
+ }
446
+ let hello;
447
+ if (stranger === 1) {
448
+ throw new Error(`contact:${contactId} is already a friend`);
449
+ }
450
+ if (option) {
451
+ if (typeof option === 'string') {
452
+ hello = option;
453
+ }
454
+ else {
455
+ hello = option.hello;
456
+ }
457
+ }
458
+ await this._client?.addFriendByWxid({ content: hello, ticket, scene: addContactScene, wxid: contactId });
459
+ }
460
+ async friendshipSearchPhone(phone) {
461
+ return this._friendshipSearch(phone, '15');
462
+ }
463
+ async friendshipSearchHandle(qq) {
464
+ return this._friendshipSearch(qq, '1');
465
+ }
466
+ async _friendshipSearch(id, scene) {
467
+ const cachedContactSearch = await this._cacheMgr.getContactSearch(id);
468
+ if (cachedContactSearch) {
469
+ return id;
470
+ }
471
+ const res = await this._client?.searchStranger(id);
472
+ const searchId = `${SEARCH_CONTACT_PREFIX}${id}`;
473
+ if (res) {
474
+ await this._cacheMgr.setContactSearch(searchId, { ...res, scene });
475
+ }
476
+ return searchId;
477
+ }
478
+ async _findRoomIdForWxid(wxid) {
479
+ const ret = [];
480
+ const roomIds = (await this._cacheMgr?.getRoomIds()) || [];
481
+ for (const roomId of roomIds) {
482
+ const roomMember = await this._cacheMgr?.getRoomMember(roomId);
483
+ if (!roomMember) {
484
+ continue;
485
+ }
486
+ const roomMemberIds = Object.keys(roomMember);
487
+ if (roomMemberIds.indexOf(wxid) !== -1) {
488
+ ret.push(roomId);
489
+ }
490
+ }
491
+ return ret;
492
+ }
493
+ async messageContact(messageId) {
494
+ wechaty_puppet_1.log.verbose('PuppetWeChat', 'messageContact(%s)', messageId);
495
+ return PUPPET.throwUnsupportedError(messageId);
496
+ }
497
+ async messageFile(messageId) {
498
+ const messagePayload = await this.messageRawPayload(messageId);
499
+ const message = await this.messageRawPayloadParser(messagePayload);
500
+ switch (message.type) {
501
+ case PUPPET.types.Message.Image:
502
+ return this._getMessageImageFileBox(messageId, messagePayload);
503
+ case PUPPET.types.Message.Audio:
504
+ return this._getMessageAudioFileBox(messageId, messagePayload);
505
+ case PUPPET.types.Message.Video: {
506
+ return this._getMessageVideoFileBox(messageId, messagePayload);
507
+ }
508
+ case PUPPET.types.Message.Attachment:
509
+ return this._getMessageFileFileBox(messageId, messagePayload);
510
+ case PUPPET.types.Message.Emoticon: {
511
+ const emotionPayload = await (0, message_emotion_js_1.parseEmotionMessagePayload)(messagePayload);
512
+ const emoticonBox = file_box_1.FileBox.fromUrl(emotionPayload.cdnurl, { name: `message-${messageId}-emoticon.jpg` });
513
+ emoticonBox.metadata = {
514
+ payload: emotionPayload,
515
+ type: 'emoticon',
516
+ };
517
+ return emoticonBox;
518
+ }
519
+ case PUPPET.types.Message.MiniProgram:
520
+ return PUPPET.throwUnsupportedError(messageId);
521
+ case PUPPET.types.Message.Url:
522
+ return PUPPET.throwUnsupportedError(messageId);
523
+ default:
524
+ throw new Error(`Can not get file for message: ${messageId}`);
525
+ }
526
+ }
527
+ async messageImage(messageId) {
528
+ const messagePayload = await this.messageRawPayload(messageId);
529
+ return this._getMessageImageFileBox(messageId, messagePayload);
530
+ }
531
+ async messageMiniProgram(messageId) {
532
+ const messagePayload = await this.messageRawPayload(messageId);
533
+ const message = await this.messageRawPayloadParser(messagePayload);
534
+ if (message.type !== PUPPET.types.Message.MiniProgram) {
535
+ throw new Error('message is not mini program, can not get MiniProgramPayload');
536
+ }
537
+ return (0, message_miniprogram_js_1.parseMiniProgramMessagePayload)(messagePayload);
538
+ }
539
+ async messageUrl(messageId) {
540
+ const rawPayload = await this.messageRawPayload(messageId);
541
+ const payload = await this.messageRawPayloadParser(rawPayload);
542
+ if (payload.type !== PUPPET.types.Message.Url) {
543
+ throw new Error('Can not get url from non url payload');
544
+ }
545
+ const appPayload = await (0, message_appmsg_js_1.parseAppmsgMessagePayload)(rawPayload.msg);
546
+ return {
547
+ description: appPayload.des,
548
+ thumbnailUrl: appPayload.thumburl,
549
+ title: appPayload.title,
550
+ url: appPayload.url,
551
+ };
552
+ }
553
+ async messageSendContact(toUserId, contactId) {
554
+ wechaty_puppet_1.log.verbose('PuppetWeChat', 'messageSend("%s", %s)', toUserId, contactId);
555
+ const contactPayload = await this.contactRawPayload(contactId);
556
+ const xmlObj = {
557
+ msg: {
558
+ antispamticket: '',
559
+ bigheadimgurl: contactPayload?.avatar,
560
+ brandFlags: '0',
561
+ certflag: '0',
562
+ city: contactPayload?.city,
563
+ fullpy: contactPayload?.name,
564
+ imagestatus: '3',
565
+ nickname: contactPayload?.name,
566
+ province: contactPayload?.province,
567
+ regionCode: 'CN_Shanghai',
568
+ scene: '17',
569
+ sex: contactPayload?.sex,
570
+ smallheadimgurl: contactPayload?.avatar,
571
+ username: contactPayload?.ticket,
572
+ },
573
+ };
574
+ const xml = (0, xml_to_json_js_1.JsonToXml)(xmlObj);
575
+ const res = await this._client?.sendContactCard(toUserId, xml, this._self?.wxid);
576
+ if (res) {
577
+ await this._cacheMgr?.setMessage(res.id, res);
578
+ return res.id;
579
+ }
580
+ }
581
+ async messageSendFile(conversationId, fileBox) {
582
+ const metadata = fileBox.metadata;
583
+ const fileType = fileBox.mediaType && fileBox.mediaType !== 'application/octet-stream'
584
+ ? fileBox.mediaType
585
+ : path_1.default.extname(fileBox.name);
586
+ const fileUrl = fileBox.remoteUrl || '';
587
+ if (metadata.type === 'emoticon') {
588
+ PUPPET.throwUnsupportedError(conversationId, fileBox);
589
+ }
590
+ else if (fileBox.mediaType.startsWith('image/')) {
591
+ if (fileUrl) {
592
+ const msgInfo = await this._client?.sendUrlImg(conversationId, fileUrl, this._self?.wxid);
593
+ if (msgInfo) {
594
+ await this._cacheMgr?.setMessage(msgInfo.id, msgInfo);
595
+ return msgInfo.id;
596
+ }
597
+ }
598
+ }
599
+ else if (fileBox.mediaType === 'audio/silk') {
600
+ PUPPET.throwUnsupportedError(conversationId, fileBox);
601
+ }
602
+ else if (fileType.includes('video/mp4') || fileType.includes('.mp4')) {
603
+ const msgInfo = await this._client?.sendVideo(conversationId, fileUrl, this._self?.wxid);
604
+ if (msgInfo) {
605
+ await this._cacheMgr?.setMessage(msgInfo.id, msgInfo);
606
+ return msgInfo.id;
607
+ }
608
+ }
609
+ else {
610
+ if (fileUrl) {
611
+ const msgInfo = await this._client?.sendCloudFile(conversationId, fileUrl, this._self?.wxid);
612
+ if (msgInfo) {
613
+ await this._cacheMgr?.setMessage(msgInfo.id, msgInfo);
614
+ return msgInfo.id;
615
+ }
616
+ }
617
+ }
618
+ }
619
+ async messageSendMiniProgram(toUserName, mpPayload) {
620
+ const miniProgram = {
621
+ appid: mpPayload.appid,
622
+ contactId: toUserName,
623
+ content: mpPayload.description,
624
+ username: mpPayload.username,
625
+ pagePath: mpPayload.pagePath,
626
+ thumbUrl: mpPayload.thumbUrl,
627
+ iconUrl: mpPayload.iconUrl,
628
+ title: mpPayload.title,
629
+ };
630
+ if (!mpPayload.thumbUrl) {
631
+ wechaty_puppet_1.log.warn(PRE, 'no thumb image found while sending mimi program');
632
+ }
633
+ const res = await this._client?.sendMiniProgram(miniProgram, this._self?.wxid);
634
+ if (res) {
635
+ await this._cacheMgr?.setMessage(res.id, res);
636
+ return res.id;
637
+ }
638
+ }
639
+ async messageSendText(conversationId, text, mentionIdList) {
640
+ if (mentionIdList && mentionIdList.length) {
641
+ const msgInfo = await this._client?.sendAtText(conversationId, text, mentionIdList, this._self?.wxid);
642
+ if (msgInfo) {
643
+ await this._cacheMgr?.setMessage(msgInfo.id, msgInfo);
644
+ return msgInfo.id;
645
+ }
646
+ }
647
+ const msgInfo = await this._client?.sendText(conversationId, text, this._self?.wxid);
648
+ if (msgInfo) {
649
+ await this._cacheMgr?.setMessage(msgInfo.id, msgInfo);
650
+ return msgInfo.id;
651
+ }
652
+ }
653
+ async messageSendUrl(conversationId, urlLinkPayload) {
654
+ const urlCard = {
655
+ contactId: conversationId,
656
+ content: urlLinkPayload.description,
657
+ jumpUrl: urlLinkPayload.url,
658
+ imageUrl: urlLinkPayload.thumbnailUrl,
659
+ title: urlLinkPayload.title,
660
+ };
661
+ if (!urlLinkPayload.thumbnailUrl) {
662
+ wechaty_puppet_1.log.warn(PRE, 'no thumb image found while sending mimi program');
663
+ }
664
+ const msgInfo = await this._client?.sendShareCard(urlCard, this._self?.wxid);
665
+ if (msgInfo) {
666
+ await this._cacheMgr?.setMessage(msgInfo.id, msgInfo);
667
+ return msgInfo.id;
668
+ }
669
+ }
670
+ async messageSendPost(conversationId, postPayload) {
671
+ const msgType = postPayload.sayableList[0];
672
+ if (msgType.type !== 'Text') {
673
+ throw new Error(`Wrong Post!!! please check your Post payload to make sure it right ${conversationId}`);
674
+ }
675
+ }
676
+ async messageRecall(messageId) {
677
+ return PUPPET.throwUnsupportedError(messageId);
678
+ }
679
+ async messageForward(toUserName, messageId) {
680
+ const messagePayload = await this.messageRawPayload(messageId);
681
+ const message = await this.messageRawPayloadParser(messagePayload);
682
+ switch (message.type) {
683
+ case PUPPET.types.Message.Text:
684
+ await this.messageSendText(toUserName, message.text);
685
+ break;
686
+ case PUPPET.types.Message.Image: {
687
+ const imageFileBox = await this.messageImage(messageId);
688
+ await this.messageSendFile(toUserName, imageFileBox);
689
+ break;
690
+ }
691
+ case PUPPET.types.Message.Audio: {
692
+ const audioFileBox = await this.messageFile(messageId);
693
+ await this.messageSendFile(toUserName, audioFileBox);
694
+ break;
695
+ }
696
+ case PUPPET.types.Message.Video: {
697
+ const videoFileBox = await this.messageFile(messageId);
698
+ await this.messageSendFile(toUserName, videoFileBox);
699
+ break;
700
+ }
701
+ default:
702
+ throw new Error(`Message forwarding is unsupported for messageId:${messageId}, type:${message.type}`);
703
+ }
704
+ }
705
+ async roomAdd(roomId, contactId) {
706
+ let type = 1;
707
+ if (roomId) {
708
+ const ret = await this.roomRawPayload(roomId);
709
+ if (ret && ret.memberNum && ret.memberNum > 38) {
710
+ type = 2;
711
+ }
712
+ }
713
+ await this._client?.inviteToGroup(roomId, contactId, type);
714
+ }
715
+ async roomAvatar(roomId) {
716
+ const chatroom = await this.roomRawPayload(roomId);
717
+ if (chatroom && chatroom.avatar) {
718
+ return file_box_1.FileBox.fromUrl(chatroom.avatar);
719
+ }
720
+ else {
721
+ return file_box_1.FileBox.fromBuffer(Buffer.from(new ArrayBuffer(0)), 'room-avatar.jpg');
722
+ }
723
+ }
724
+ async roomCreate(contactIdList, topic) {
725
+ return PUPPET.throwUnsupportedError(contactIdList, topic);
726
+ }
727
+ async roomDel(roomId, contactId) {
728
+ return PUPPET.throwUnsupportedError(roomId, contactId);
729
+ }
730
+ async roomList() {
731
+ return this._cacheMgr.getRoomIds();
732
+ }
733
+ async roomQRCode(roomId) {
734
+ return PUPPET.throwUnsupportedError(roomId);
735
+ }
736
+ async roomQuit(roomId) {
737
+ return this._client?.roomQuit(roomId);
738
+ }
739
+ async roomTopic(roomId, topic) {
740
+ await this._client?.setGroupName(roomId, topic);
741
+ }
742
+ async roomAnnounce(roomId, text) {
743
+ if (text !== undefined) {
744
+ await this._client?.sendAnnouncement(roomId, text);
745
+ }
746
+ return '';
747
+ }
748
+ async roomMemberList(roomId) {
749
+ const roomMemberMap = await this._getRoomMemberList(roomId);
750
+ return Object.values(roomMemberMap).map((m) => m.wxid);
751
+ }
752
+ async roomInvitationAccept(roomInvitationId) {
753
+ return PUPPET.throwUnsupportedError(roomInvitationId);
754
+ }
755
+ async contactRawPayloadParser(payload) {
756
+ return (0, contact_js_1.engineContactToWechaty)(payload);
757
+ }
758
+ async contactRawPayload(id) {
759
+ wechaty_puppet_1.log.silly(PRE, 'contactRawPayload(%s) @ %s', id, this);
760
+ if (id.startsWith(SEARCH_CONTACT_PREFIX)) {
761
+ const searchContact = await this._cacheMgr?.getContactSearch(id);
762
+ return searchContact;
763
+ }
764
+ let ret = await this._cacheMgr.getContact(id);
765
+ if (!ret) {
766
+ ret = await (0, cached_promise_js_1.CachedPromiseFunc)(`contactRawPayload-${id}`, async () => {
767
+ const contact = await this._refreshContact(id);
768
+ return contact;
769
+ });
770
+ return ret;
771
+ }
772
+ return ret;
773
+ }
774
+ async messageRawPayloadParser(payload) {
775
+ return (0, message_js_1.engineMessageToWechaty)(this, payload);
776
+ }
777
+ async messageRawPayload(id) {
778
+ const ret = await this._cacheMgr.getMessage(id);
779
+ if (!ret) {
780
+ throw new Error(`can not find message in cache for messageId: ${id}`);
781
+ }
782
+ return ret;
783
+ }
784
+ async roomRawPayloadParser(payload) {
785
+ return (0, room_js_1.engineRoomToWechaty)(payload);
786
+ }
787
+ async roomRawPayload(id) {
788
+ let ret = await this._cacheMgr.getRoom(id);
789
+ if (!ret) {
790
+ const contact = await this._refreshContact(id);
791
+ ret = contact;
792
+ }
793
+ return ret;
794
+ }
795
+ async roomMemberRawPayload(roomId, contactId) {
796
+ const roomMemberMap = await this._getRoomMemberList(roomId);
797
+ if (roomMemberMap[contactId]) {
798
+ return roomMemberMap[contactId];
799
+ }
800
+ const newMap = await this._getRoomMemberList(roomId, true);
801
+ return newMap[contactId];
802
+ }
803
+ async roomMemberRawPayloadParser(rawPayload) {
804
+ return (0, room_js_1.engineRoomMemberToWechaty)(rawPayload);
805
+ }
806
+ async roomInvitationRawPayload(roomInvitationId) {
807
+ return PUPPET.throwUnsupportedError(roomInvitationId);
808
+ }
809
+ async roomInvitationRawPayloadParser(rawPayload) {
810
+ return PUPPET.throwUnsupportedError(rawPayload);
811
+ }
812
+ async friendshipRawPayloadParser(rawPayload) {
813
+ return rawPayload;
814
+ }
815
+ async friendshipRawPayload(id) {
816
+ const ret = await this._cacheMgr.getFriendshipRawPayload(id);
817
+ if (!ret) {
818
+ throw new Error(`Can not find friendship for id: ${id}`);
819
+ }
820
+ return ret;
821
+ }
822
+ async syncRoom() {
823
+ if (this.state.active() !== true) {
824
+ throw new Error('Can not sync contact before login');
825
+ }
826
+ await this._client?.getGroupList(1, 100);
827
+ }
828
+ async _getRoomMemberList(roomId, force) {
829
+ if (!this._cacheMgr) {
830
+ return {};
831
+ }
832
+ let ret = await this._cacheMgr.getRoomMember(roomId);
833
+ if (!ret || (ret && !Object.keys(ret).length) || force) {
834
+ const resMembers = await this._client?.getGroupMembers(roomId) || [];
835
+ const roomMemberMap = {};
836
+ for (const roomMember of resMembers) {
837
+ const hasContact = await this._cacheMgr.hasContact(roomMember.wxid);
838
+ let MemberInfo;
839
+ if (!hasContact) {
840
+ MemberInfo = (0, room_js_1.chatRoomMemberToContact)(roomMember);
841
+ await this._cacheMgr.setContact(MemberInfo.wxid, MemberInfo);
842
+ roomMemberMap[roomMember.wxid] = MemberInfo;
843
+ }
844
+ else {
845
+ MemberInfo = await this._cacheMgr.getContact(roomMember.wxid);
846
+ roomMemberMap[roomMember.wxid] = MemberInfo;
847
+ }
848
+ }
849
+ ret = roomMemberMap;
850
+ await this._updateRoomMember(roomId, roomMemberMap);
851
+ }
852
+ return ret;
853
+ }
854
+ async _updateContactCache(contact) {
855
+ if (!contact.wxid) {
856
+ wechaty_puppet_1.log.warn(PRE, `wxid is required for contact: ${JSON.stringify(contact)}`);
857
+ return;
858
+ }
859
+ if ((0, is_type_js_1.isRoomId)(contact.wxid)) {
860
+ const oldRoomPayload = await this._cacheMgr.getRoom(contact.wxid);
861
+ const roomId = contact.wxid;
862
+ let finalPayload = contact;
863
+ if (oldRoomPayload) {
864
+ finalPayload = Object.assign(oldRoomPayload, contact);
865
+ }
866
+ await this._cacheMgr.setRoom(roomId, finalPayload);
867
+ if (!finalPayload.chatroommemberList || finalPayload.chatroommemberList.length === 0) {
868
+ const map = await this._getRoomMemberList(roomId);
869
+ await this._cacheMgr.setRoom(roomId, Object.assign(finalPayload, { chatroommemberList: Object.keys(map) }));
870
+ }
871
+ }
872
+ else {
873
+ const oldContactPaylod = await this._cacheMgr.getContact(contact.wxid);
874
+ if (oldContactPaylod) {
875
+ await this._cacheMgr.setContact(contact.wxid, Object.assign(oldContactPaylod, contact));
876
+ }
877
+ else {
878
+ await this._cacheMgr.setContact(contact.wxid, contact);
879
+ }
880
+ }
881
+ }
882
+ async _updateRoomMember(roomId, roomMemberMap) {
883
+ if (roomMemberMap) {
884
+ await this._cacheMgr.setRoomMember(roomId, roomMemberMap);
885
+ }
886
+ else {
887
+ await this._cacheMgr.deleteRoomMember(roomId);
888
+ }
889
+ }
890
+ async _updateRoom(roomId) {
891
+ if (!roomId) {
892
+ wechaty_puppet_1.log.warn(PRE, 'roomid is required for updateRoom');
893
+ return;
894
+ }
895
+ let contact = await this._client?.searchContact([roomId]);
896
+ if (contact) {
897
+ const memeberMap = await this._getRoomMemberList(contact.wxid, true);
898
+ const chatroommemberList = Object.values(memeberMap).map(item => item.wxid);
899
+ contact = { ...contact, memberNum: Object.keys(memeberMap).length, chatroommemberList };
900
+ await this._onPushContact(contact);
901
+ }
902
+ }
903
+ async _onPushContact(contact) {
904
+ wechaty_puppet_1.log.silly(PRE, `on push contact: ${JSON.stringify(contact)}`);
905
+ await this._updateContactCache(contact);
906
+ if (contact.wxid) {
907
+ const aliasToSet = await this._cacheMgr.getContactStrangerAlias(contact.wxid);
908
+ if (aliasToSet) {
909
+ await this.contactAlias(contact.wxid, aliasToSet);
910
+ await this._cacheMgr.deleteContactStrangerAlias(contact.wxid);
911
+ }
912
+ }
913
+ }
914
+ async _onPushMessage(message) {
915
+ const messageId = message.id;
916
+ wechaty_puppet_1.log.silly(PRE, `on push original message: ${JSON.stringify(message)}`);
917
+ if (await this._cacheMgr.hasMessage(messageId)) {
918
+ return;
919
+ }
920
+ await this._cacheMgr.setMessage(message.id, message);
921
+ const event = await (0, mod_js_1.parseEvent)(this, message);
922
+ wechaty_puppet_1.log.info('event-------', JSON.stringify(event));
923
+ switch (event.type) {
924
+ case mod_js_1.EventType.Message:
925
+ this.emit('message', {
926
+ messageId,
927
+ });
928
+ break;
929
+ case mod_js_1.EventType.Friendship: {
930
+ await this._cacheMgr?.setFriendshipRawPayload(event.payload.contactId, event.payload);
931
+ this.emit('friendship', {
932
+ friendshipId: event.payload.contactId,
933
+ type: event.payload.type,
934
+ });
935
+ break;
936
+ }
937
+ case mod_js_1.EventType.RoomInvite: {
938
+ const roomInvite = event.payload;
939
+ await this._cacheMgr.setRoomInvitation(messageId, roomInvite);
940
+ this.emit('room-invite', {
941
+ roomInvitationId: messageId,
942
+ });
943
+ break;
944
+ }
945
+ case mod_js_1.EventType.RoomJoin: {
946
+ break;
947
+ }
948
+ case mod_js_1.EventType.RoomLeave: {
949
+ break;
950
+ }
951
+ case mod_js_1.EventType.RoomTopic: {
952
+ break;
953
+ }
954
+ }
955
+ }
956
+ async _refreshContact(wxid, isFriend) {
957
+ const contact = await this._client?.searchContactDetail([wxid]);
958
+ if (contact && !contact.wxid) {
959
+ contact.wxid = wxid;
960
+ await this._updateContactCache({ ...contact, isFriend });
961
+ return contact;
962
+ }
963
+ else if (contact) {
964
+ return contact;
965
+ }
966
+ return undefined;
967
+ }
968
+ async _startPuppetHeart(firstTime = true) {
969
+ if (firstTime && this._heartBeatTimer) {
970
+ return;
971
+ }
972
+ this.emit('heartbeat', { data: 'heartbeat@matrix' });
973
+ this._heartBeatTimer = setTimeout(async () => {
974
+ await this._startPuppetHeart(false);
975
+ return undefined;
976
+ }, 15 * 1000);
977
+ }
978
+ _stopPuppetHeart() {
979
+ if (!this._heartBeatTimer) {
980
+ return;
981
+ }
982
+ clearTimeout(this._heartBeatTimer);
983
+ this._heartBeatTimer = undefined;
984
+ }
985
+ async _getMessageImageFileBox(messageId, messagePayload) {
986
+ const imageInfo = await (0, message_image_js_1.parseImageMessagePayload)(messagePayload);
987
+ if (!imageInfo.file_id) {
988
+ wechaty_puppet_1.log.error(`Can not get file for message: ${messageId}`);
989
+ }
990
+ const url = await this._client?.downloadImage(imageInfo);
991
+ return file_box_1.FileBox.fromUrl(url);
992
+ }
993
+ async _getMessageAudioFileBox(messageId, messagePayload) {
994
+ const audioInfo = await (0, message_audio_js_1.parseAudioMessagePayload)(messagePayload);
995
+ if (!audioInfo.length) {
996
+ wechaty_puppet_1.log.error(`Can not get file for message: ${messageId}`);
997
+ }
998
+ const url = await this._client?.downloadAudio(messageId, audioInfo);
999
+ return file_box_1.FileBox.fromUrl(url);
1000
+ }
1001
+ async _getMessageVideoFileBox(messageId, messagePayload) {
1002
+ const videoInfo = await (0, message_video_js_1.parseVideoMessagePayload)(messagePayload);
1003
+ if (!videoInfo.file_id) {
1004
+ wechaty_puppet_1.log.error(`Can not get file for message: ${messageId}`);
1005
+ }
1006
+ const url = await this._client?.downloadVideo(videoInfo);
1007
+ wechaty_puppet_1.log.info(PRE, '_getMessageVideoFileBox(): %s', url);
1008
+ return file_box_1.FileBox.fromUrl(url);
1009
+ }
1010
+ async _getMessageFileFileBox(messageId, messagePayload) {
1011
+ const appPayload = await (0, message_appmsg_js_1.parseAppmsgMessagePayload)(messagePayload.msg);
1012
+ if (!appPayload.appattach?.attachid) {
1013
+ wechaty_puppet_1.log.error(`Can not get file for message: ${messageId}`);
1014
+ }
1015
+ const appattach = appPayload.appattach;
1016
+ const params = {
1017
+ aes_key: appattach?.aeskey || '',
1018
+ file_id: appattach?.attachid || '',
1019
+ file_name: appPayload.title,
1020
+ file_size: appattach?.totallen || '',
1021
+ };
1022
+ const url = await this._client?.downloadFile(params);
1023
+ if (!url) {
1024
+ wechaty_puppet_1.log.error(`Can not get file url: ${JSON.stringify(params)}`);
1025
+ }
1026
+ return file_box_1.FileBox.fromUrl(url, { name: appPayload.title });
1027
+ }
1028
+ async syncContact() {
1029
+ if (!this.currentUserId) {
1030
+ throw new Error('Can not sync contact before login');
1031
+ }
1032
+ wechaty_puppet_1.log.info('syncContact');
1033
+ await this._client.syncContact();
1034
+ }
1035
+ }
1036
+ exports.PuppetMatrix = PuppetMatrix;
1037
+ exports.default = PuppetMatrix;