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,1315 @@
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.FriendshipType = exports.WechatMessageType = exports.NotifyTypeEnum = void 0;
30
+ const axios_1 = __importDefault(require("axios"));
31
+ const wechaty_puppet_1 = require("@juzi/wechaty-puppet");
32
+ const events_1 = require("events");
33
+ const ws_1 = __importDefault(require("ws"));
34
+ const PUPPET = __importStar(require("@juzi/wechaty-puppet"));
35
+ const date_fns_1 = require("date-fns");
36
+ const xml_to_json_js_1 = require("../utils/xml-to-json.js");
37
+ const is_type_js_1 = require("../utils/is-type.js");
38
+ const PRE = '[PuppetMatrix]';
39
+ var NotifyTypeEnum;
40
+ (function (NotifyTypeEnum) {
41
+ NotifyTypeEnum[NotifyTypeEnum["Ready"] = 1001] = "Ready";
42
+ NotifyTypeEnum[NotifyTypeEnum["LoginQRCodeChange"] = 1002] = "LoginQRCodeChange";
43
+ NotifyTypeEnum[NotifyTypeEnum["UserLogin"] = 1003] = "UserLogin";
44
+ NotifyTypeEnum[NotifyTypeEnum["UserLogout"] = 1004] = "UserLogout";
45
+ NotifyTypeEnum[NotifyTypeEnum["InitFinish"] = 1005] = "InitFinish";
46
+ NotifyTypeEnum[NotifyTypeEnum["HeartBeatError"] = 1006] = "HeartBeatError";
47
+ NotifyTypeEnum[NotifyTypeEnum["SessionTimeout"] = 1007] = "SessionTimeout";
48
+ NotifyTypeEnum[NotifyTypeEnum["LoginFailed"] = 1008] = "LoginFailed";
49
+ NotifyTypeEnum[NotifyTypeEnum["ContactSyncFinish"] = 1009] = "ContactSyncFinish";
50
+ NotifyTypeEnum[NotifyTypeEnum["NewMsg"] = 1010] = "NewMsg";
51
+ NotifyTypeEnum[NotifyTypeEnum["ContactInfoChange"] = 1039] = "ContactInfoChange";
52
+ NotifyTypeEnum[NotifyTypeEnum["FriendAdd"] = 1040] = "FriendAdd";
53
+ NotifyTypeEnum[NotifyTypeEnum["FriendDel"] = 1041] = "FriendDel";
54
+ NotifyTypeEnum[NotifyTypeEnum["RoomAdd"] = 1042] = "RoomAdd";
55
+ NotifyTypeEnum[NotifyTypeEnum["RoomQuit"] = 1043] = "RoomQuit";
56
+ NotifyTypeEnum[NotifyTypeEnum["RoomDelMe"] = 1044] = "RoomDelMe";
57
+ NotifyTypeEnum[NotifyTypeEnum["RoomDisband"] = 1045] = "RoomDisband";
58
+ NotifyTypeEnum[NotifyTypeEnum["RoomMemberAdd"] = 1046] = "RoomMemberAdd";
59
+ NotifyTypeEnum[NotifyTypeEnum["RoomMemberUpdate"] = 1047] = "RoomMemberUpdate";
60
+ NotifyTypeEnum[NotifyTypeEnum["RoomMemberDel"] = 1048] = "RoomMemberDel";
61
+ })(NotifyTypeEnum || (exports.NotifyTypeEnum = NotifyTypeEnum = {}));
62
+ var ContactGender;
63
+ (function (ContactGender) {
64
+ ContactGender[ContactGender["Unknown"] = 0] = "Unknown";
65
+ ContactGender[ContactGender["Male"] = 1] = "Male";
66
+ ContactGender[ContactGender["Female"] = 2] = "Female";
67
+ })(ContactGender || (ContactGender = {}));
68
+ var Status;
69
+ (function (Status) {
70
+ Status["normal"] = "normal";
71
+ Status["offline"] = "offline";
72
+ Status["pending"] = "pending";
73
+ Status["fail"] = "fail";
74
+ })(Status || (Status = {}));
75
+ var WechatMessageType;
76
+ (function (WechatMessageType) {
77
+ WechatMessageType[WechatMessageType["Text"] = 1] = "Text";
78
+ WechatMessageType[WechatMessageType["Image"] = 3] = "Image";
79
+ WechatMessageType[WechatMessageType["Voice"] = 34] = "Voice";
80
+ WechatMessageType[WechatMessageType["VerifyMsg"] = 37] = "VerifyMsg";
81
+ WechatMessageType[WechatMessageType["PossibleFriendMsg"] = 40] = "PossibleFriendMsg";
82
+ WechatMessageType[WechatMessageType["ShareCard"] = 42] = "ShareCard";
83
+ WechatMessageType[WechatMessageType["Video"] = 43] = "Video";
84
+ WechatMessageType[WechatMessageType["Emoticon"] = 47] = "Emoticon";
85
+ WechatMessageType[WechatMessageType["Location"] = 48] = "Location";
86
+ WechatMessageType[WechatMessageType["App"] = 49] = "App";
87
+ WechatMessageType[WechatMessageType["VoipMsg"] = 50] = "VoipMsg";
88
+ WechatMessageType[WechatMessageType["StatusNotify"] = 51] = "StatusNotify";
89
+ WechatMessageType[WechatMessageType["VoipNotify"] = 52] = "VoipNotify";
90
+ WechatMessageType[WechatMessageType["VoipInvite"] = 53] = "VoipInvite";
91
+ WechatMessageType[WechatMessageType["MicroVideo"] = 62] = "MicroVideo";
92
+ WechatMessageType[WechatMessageType["VerifyMsgEnterprise"] = 65] = "VerifyMsgEnterprise";
93
+ WechatMessageType[WechatMessageType["Transfer"] = 2000] = "Transfer";
94
+ WechatMessageType[WechatMessageType["RedEnvelope"] = 2001] = "RedEnvelope";
95
+ WechatMessageType[WechatMessageType["MiniProgram"] = 2002] = "MiniProgram";
96
+ WechatMessageType[WechatMessageType["GroupInvite"] = 2003] = "GroupInvite";
97
+ WechatMessageType[WechatMessageType["File"] = 2004] = "File";
98
+ WechatMessageType[WechatMessageType["SysNotice"] = 9999] = "SysNotice";
99
+ WechatMessageType[WechatMessageType["Sys"] = 10000] = "Sys";
100
+ WechatMessageType[WechatMessageType["SysTemplate"] = 10002] = "SysTemplate";
101
+ })(WechatMessageType || (exports.WechatMessageType = WechatMessageType = {}));
102
+ var FriendshipType;
103
+ (function (FriendshipType) {
104
+ FriendshipType[FriendshipType["Unknown"] = 0] = "Unknown";
105
+ FriendshipType[FriendshipType["Confirm"] = 1] = "Confirm";
106
+ FriendshipType[FriendshipType["Receive"] = 2] = "Receive";
107
+ FriendshipType[FriendshipType["Verify"] = 3] = "Verify";
108
+ FriendshipType[FriendshipType["Delete"] = 4] = "Delete";
109
+ FriendshipType[FriendshipType["Removed"] = 5] = "Removed";
110
+ })(FriendshipType || (exports.FriendshipType = FriendshipType = {}));
111
+ async function getAtWxidList(source) {
112
+ if (source) {
113
+ const json = await (0, xml_to_json_js_1.xmlToJson)(source);
114
+ return (json?.msgsource?.atuserlist?.split(',').filter((item) => item)
115
+ || []);
116
+ }
117
+ return [];
118
+ }
119
+ class Client extends events_1.EventEmitter {
120
+ options;
121
+ socket;
122
+ server;
123
+ tokenInfo;
124
+ hasEmitLogout;
125
+ emit(event, ...args) {
126
+ return super.emit(event, ...args);
127
+ }
128
+ static async create(options) {
129
+ const client = new Client(options);
130
+ await client.initServer();
131
+ return client;
132
+ }
133
+ constructor(options = {}) {
134
+ super();
135
+ this.options = options;
136
+ this.tokenInfo = null;
137
+ this.socket = null;
138
+ this.hasEmitLogout = false;
139
+ }
140
+ async getTokenInfo() {
141
+ try {
142
+ const res = await axios_1.default.get(`https://api-bot.aibotk.com/openapi/v1/token/info?secret=5be06b6f8d42a7&token=${this.options.token}`);
143
+ if (res.data.code === 0) {
144
+ this.tokenInfo = res.data.data;
145
+ return true;
146
+ }
147
+ else {
148
+ wechaty_puppet_1.log.error('Token auth failed, reason: %s', res.data.message);
149
+ return false;
150
+ }
151
+ }
152
+ catch (e) {
153
+ wechaty_puppet_1.log.error('error info: %s', e);
154
+ return false;
155
+ }
156
+ }
157
+ async initServer() {
158
+ await this.getTokenInfo();
159
+ if (!this.socket) {
160
+ const ws = new ws_1.default(`${this.tokenInfo.endpoint}?guid=${this.tokenInfo.guid}`, { perMessageDeflate: true, maxPayload: 100 * 1024 * 1024 });
161
+ ws.on('message', (data) => {
162
+ wechaty_puppet_1.log.silly(PRE, 'initWebSocket() ws.on(message): %s', data);
163
+ try {
164
+ const payload = JSON.parse(data);
165
+ wechaty_puppet_1.log.info(JSON.stringify(payload));
166
+ void this.eventParse(payload);
167
+ }
168
+ catch (e) {
169
+ wechaty_puppet_1.log.warn(PRE, 'initWebSocket() ws.on(message) exception: %s', e);
170
+ this.emit('error', e.message);
171
+ }
172
+ });
173
+ ws.on('message', () => {
174
+ });
175
+ ws.on('error', (e) => {
176
+ if (e.message.indexOf('ECONNREFUSED') !== -1) {
177
+ }
178
+ else {
179
+ wechaty_puppet_1.log.verbose(PRE, 'initWebSocket() ws.on(error) %s', e);
180
+ this.emit('error', e);
181
+ }
182
+ });
183
+ ws.on('close', (code, reason) => {
184
+ wechaty_puppet_1.log.warn(PRE, 'initWebSocket() ws.on(close) code: %s, reason: %s', code, reason);
185
+ });
186
+ await new Promise((resolve, reject) => {
187
+ ws.once('open', () => {
188
+ wechaty_puppet_1.log.silly(PRE, 'initWebSocket() Promise() ws.on(open)');
189
+ return resolve({});
190
+ });
191
+ ws.once('error', (e) => {
192
+ wechaty_puppet_1.log.silly(PRE, 'initWebSocket() Promise() ws.on(error) %s', e);
193
+ return reject(e);
194
+ });
195
+ ws.once('close', (e) => {
196
+ wechaty_puppet_1.log.silly(PRE, 'initWebSocket() Promise() ws.on(close)');
197
+ return reject(e);
198
+ });
199
+ });
200
+ this.socket = ws;
201
+ return;
202
+ }
203
+ if (this.socket) {
204
+ throw new Error('socket had already been opened!');
205
+ }
206
+ }
207
+ async eventParse(eventData) {
208
+ const notifyType = eventData.notify_type;
209
+ const data = eventData.data;
210
+ let robotInfo, msg, contactInfo, atWxidList;
211
+ switch (notifyType) {
212
+ case NotifyTypeEnum.LoginQRCodeChange:
213
+ if (data.authUrl) {
214
+ this.emit('verify-code', {
215
+ ticket: this.getQrcodeTicket(data.authUrl),
216
+ status: PUPPET.types.ScanStatus.Scanned,
217
+ });
218
+ }
219
+ else {
220
+ void this.onQrCodeEvent(data.status, `http://weixin.qq.com/x/${data.uuid}`);
221
+ }
222
+ break;
223
+ case NotifyTypeEnum.UserLogin:
224
+ robotInfo = {
225
+ wxNum: data?.alias,
226
+ wxid: data?.username || '',
227
+ name: data?.nickname || '',
228
+ sex: data?.sex,
229
+ alias: '',
230
+ province: data?.province || '',
231
+ city: data?.city || '',
232
+ country: data?.country || '',
233
+ avatar: data?.big_headimg_url || data?.small_headimg_url || '',
234
+ description: '',
235
+ labelIdlist: '',
236
+ };
237
+ this.emit('login', {
238
+ errorCode: 0,
239
+ errorMessage: 'success',
240
+ wxid: robotInfo.wxid,
241
+ robotInfo,
242
+ });
243
+ break;
244
+ case NotifyTypeEnum.NewMsg:
245
+ if (data.is_chatroom_msg) {
246
+ atWxidList = await getAtWxidList(data.source);
247
+ }
248
+ msg = {
249
+ msg: data.content,
250
+ text: data.content,
251
+ id: data.msg_id,
252
+ atWxidList,
253
+ fromWxid: data.from_username,
254
+ msgType: data.msg_type,
255
+ timeStamp: data.create_time,
256
+ talkerId: !data.is_chatroom_msg
257
+ ? data.from_username
258
+ : data.chatroom_sender,
259
+ listenerId: data.to_username,
260
+ };
261
+ this.emit('message', msg);
262
+ break;
263
+ case NotifyTypeEnum.FriendAdd:
264
+ contactInfo = {
265
+ wxNum: data?.alias,
266
+ wxid: data?.username || '',
267
+ name: data?.nickname || '',
268
+ sex: data?.sex,
269
+ alias: '',
270
+ province: data?.province || '',
271
+ city: data?.city || '',
272
+ country: data?.country || '',
273
+ avatar: data?.big_headimg_url || data?.small_headimg_url || '',
274
+ description: '',
275
+ labelIdlist: data?.labelid_list,
276
+ };
277
+ this.emit('contact', { type: FriendshipType.Confirm, contactInfo });
278
+ break;
279
+ case NotifyTypeEnum.ContactInfoChange:
280
+ contactInfo = {
281
+ wxNum: data?.alias,
282
+ wxid: data?.username || '',
283
+ name: data?.nickname || '',
284
+ sex: data?.sex,
285
+ alias: '',
286
+ province: data?.province || '',
287
+ city: data?.city || '',
288
+ country: data?.country || '',
289
+ avatar: data?.big_headimg_url || data?.small_headimg_url || '',
290
+ description: '',
291
+ labelIdlist: data?.labelid_list,
292
+ };
293
+ this.emit('update-contacts', [contactInfo]);
294
+ break;
295
+ case NotifyTypeEnum.UserLogout:
296
+ this.emit('logout', data.errmsg);
297
+ break;
298
+ case NotifyTypeEnum.RoomMemberAdd:
299
+ this.emit('room-join', {
300
+ roomId: data.room_username,
301
+ inviterId: data.member_list[0]?.invite_username,
302
+ joinIds: data.member_list.map((item) => item.username),
303
+ joinUsers: data.member_list.map((data) => ({
304
+ wxNum: data?.alias,
305
+ wxid: data?.username || '',
306
+ name: data?.nickname || '',
307
+ sex: data?.sex,
308
+ alias: '',
309
+ province: data?.province || '',
310
+ city: data?.city || '',
311
+ country: data?.country || '',
312
+ avatar: data?.big_headimg_url || data?.small_headimg_url || '',
313
+ description: '',
314
+ labelIdlist: data?.labelid_list,
315
+ })),
316
+ });
317
+ break;
318
+ case NotifyTypeEnum.RoomMemberDel:
319
+ this.emit('room-leave', {
320
+ roomId: data.room_username,
321
+ leaveIds: data.member_list.map((item) => item.username),
322
+ });
323
+ break;
324
+ default:
325
+ wechaty_puppet_1.log.info('other data', JSON.stringify(data));
326
+ }
327
+ }
328
+ getQrcodeTicket(authurl) {
329
+ if (!authurl || !authurl.startsWith('http'))
330
+ return '';
331
+ const url = new URL(authurl);
332
+ const searchParams = new URLSearchParams(url.search.slice(1));
333
+ return searchParams.get('ticket') || '';
334
+ }
335
+ async onQrCodeEvent(status, url) {
336
+ const ScanStatusName = {
337
+ [PUPPET.types.ScanStatus.Unknown]: 'Unknown',
338
+ [PUPPET.types.ScanStatus.Cancel]: 'Cancel',
339
+ [PUPPET.types.ScanStatus.Waiting]: 'Waiting',
340
+ [PUPPET.types.ScanStatus.Scanned]: 'Scanned',
341
+ [PUPPET.types.ScanStatus.Confirmed]: 'Confirmed',
342
+ [PUPPET.types.ScanStatus.Timeout]: 'Timeout',
343
+ };
344
+ let scanStatus = PUPPET.types.ScanStatus.Unknown;
345
+ let qrUrl = '';
346
+ switch (status) {
347
+ case 0:
348
+ scanStatus = PUPPET.types.ScanStatus.Waiting;
349
+ qrUrl = url;
350
+ break;
351
+ case 1:
352
+ scanStatus = PUPPET.types.ScanStatus.Scanned;
353
+ break;
354
+ case 2:
355
+ scanStatus = PUPPET.types.ScanStatus.Confirmed;
356
+ break;
357
+ case 3:
358
+ scanStatus = PUPPET.types.ScanStatus.Cancel;
359
+ break;
360
+ case 4:
361
+ scanStatus = PUPPET.types.ScanStatus.Timeout;
362
+ break;
363
+ }
364
+ wechaty_puppet_1.log.silly(PRE, `scan event, status: ${ScanStatusName[scanStatus]}${url ? ', with qrcode: ' + url : ''}`);
365
+ this.emit('scan', {
366
+ qrcode: qrUrl,
367
+ status: scanStatus,
368
+ });
369
+ }
370
+ setEmitLogout(val) {
371
+ this.hasEmitLogout = val;
372
+ if (val) {
373
+ let time = setTimeout(() => {
374
+ this.hasEmitLogout = false;
375
+ clearTimeout(time);
376
+ time = null;
377
+ }, 10000);
378
+ }
379
+ }
380
+ async postData(data) {
381
+ const config = {
382
+ data: {
383
+ guid: this.tokenInfo.guid,
384
+ ...data.data,
385
+ },
386
+ headers: {
387
+ 'Content-Type': 'application/json',
388
+ },
389
+ method: 'POST',
390
+ url: this.tokenInfo.httpServer + data.path,
391
+ timeout: 600000,
392
+ };
393
+ const res = await (0, axios_1.default)(config);
394
+ if (res.data?.errcode === -102) {
395
+ wechaty_puppet_1.log.warn('request error: %s', res.data?.errmsg);
396
+ if (!this.hasEmitLogout) {
397
+ this.setEmitLogout(true);
398
+ this.emit('logout', res.data?.errmsg);
399
+ }
400
+ return {};
401
+ }
402
+ return res.data;
403
+ }
404
+ async getStats() {
405
+ const res = await this.postData({
406
+ path: '/client/get_client_status',
407
+ data: {},
408
+ });
409
+ const { errcode, data } = res;
410
+ if (!errcode) {
411
+ return {
412
+ status: data.status === 1
413
+ ? Status.pending
414
+ : data.status === 2
415
+ ? Status.normal
416
+ : Status.offline,
417
+ };
418
+ }
419
+ else {
420
+ return { status: Status.fail };
421
+ }
422
+ }
423
+ async getQrcode() {
424
+ try {
425
+ const res = await this.postData({
426
+ path: '/login/get_login_qrcode',
427
+ data: {},
428
+ });
429
+ if (res?.qrcode) {
430
+ return {
431
+ base64: `data:image/jpeg;base64,${res?.qrcode?.buffer}`,
432
+ qrcodeUrl: `http://weixin.qq.com/x/${res?.uuid}`,
433
+ uuid: res?.uuid,
434
+ expiredTime: res?.expiredTime,
435
+ };
436
+ }
437
+ wechaty_puppet_1.log.info(PRE, 'getQrcode error:', res?.errmsg);
438
+ return null;
439
+ }
440
+ catch (e) {
441
+ wechaty_puppet_1.log.error(PRE, 'getQrcode(): %s', e);
442
+ return null;
443
+ }
444
+ }
445
+ async getQrcodeStatus() {
446
+ try {
447
+ const res = await this.postData({
448
+ path: '/login/check_login_qrcode',
449
+ data: {},
450
+ });
451
+ if (res?.uuid) {
452
+ return res;
453
+ }
454
+ wechaty_puppet_1.log.info(PRE, 'getQrcodeStatus error:', res?.errmsg);
455
+ return {
456
+ status: 4,
457
+ };
458
+ }
459
+ catch (e) {
460
+ wechaty_puppet_1.log.error(PRE, 'getQrcodeStatus(): %s', e);
461
+ return {
462
+ status: 4,
463
+ };
464
+ }
465
+ }
466
+ async verifyLoginUrl(ticket, pin) {
467
+ try {
468
+ const res = await this.postData({
469
+ path: '/login/verify_login_url',
470
+ data: {
471
+ ticket,
472
+ pin,
473
+ },
474
+ });
475
+ wechaty_puppet_1.log.info(PRE, 'verifyLoginUrl', res);
476
+ }
477
+ catch (e) {
478
+ wechaty_puppet_1.log.error(PRE, 'verifyLoginUrl(): %s', e);
479
+ }
480
+ }
481
+ async pushLoginNotify() {
482
+ await this.postData({
483
+ path: '/login/push_login_url',
484
+ data: {},
485
+ });
486
+ }
487
+ async getSelfInfo() {
488
+ try {
489
+ const res = await this.postData({ path: '/user/get_profile', data: {} });
490
+ if (res.errcode === -102) {
491
+ wechaty_puppet_1.log.info(PRE, 'offline login:', res?.errmsg);
492
+ return false;
493
+ }
494
+ else if (res.userInfo) {
495
+ const contact = res?.userInfo;
496
+ const contactMore = res?.userInfoExt;
497
+ return {
498
+ wxNum: contact.alias,
499
+ wxid: contact?.userName?.string || '',
500
+ name: contact?.nickName?.string || '',
501
+ sex: contact?.sex,
502
+ alias: contact?.remark?.string || '',
503
+ province: contact?.province || '',
504
+ city: contact?.city || '',
505
+ country: contact?.country || '',
506
+ avatar: contactMore?.bigHeadImgUrl || contactMore?.smallHeadImgUrl || '',
507
+ description: contact?.description,
508
+ labelIdlist: contact?.labelIdlist,
509
+ };
510
+ }
511
+ wechaty_puppet_1.log.info(PRE, 'get self info error:(%s)', res?.errmsg);
512
+ return false;
513
+ }
514
+ catch (e) {
515
+ wechaty_puppet_1.log.error(PRE, 'getSelfInfo(): %s', e);
516
+ return false;
517
+ }
518
+ }
519
+ async getUserQrcode() {
520
+ try {
521
+ const res = await this.postData({
522
+ path: '/user/get_qrcode',
523
+ data: {},
524
+ });
525
+ return res.qrcodeUrl;
526
+ }
527
+ catch (e) {
528
+ wechaty_puppet_1.log.error(PRE, 'getUserQrcode(): %s', e);
529
+ return '';
530
+ }
531
+ }
532
+ async logout() {
533
+ try {
534
+ await this.postData({
535
+ path: '/user/logout',
536
+ data: {},
537
+ });
538
+ }
539
+ catch (e) {
540
+ wechaty_puppet_1.log.error(PRE, 'logout(): %s', e);
541
+ }
542
+ }
543
+ async searchContact(contactIds) {
544
+ if (!contactIds.length)
545
+ return;
546
+ try {
547
+ const res = await this.postData({
548
+ path: '/contact/batch_get_contact_brief_info',
549
+ data: {
550
+ username_list: contactIds,
551
+ },
552
+ });
553
+ if (res.contactList?.length === 1) {
554
+ const contactInfo = res.contactList?.length
555
+ ? res.contactList[0]
556
+ : undefined;
557
+ if (contactInfo) {
558
+ const contact = contactInfo.contact;
559
+ return {
560
+ wxNum: contact.alias,
561
+ wxid: contact?.userName?.string || '',
562
+ name: contact?.nickName?.string || '',
563
+ sex: contact?.sex,
564
+ alias: contact?.remark?.string || '',
565
+ province: contact?.province || '',
566
+ city: contact?.city || '',
567
+ country: contact?.country || '',
568
+ avatar: contact?.bigHeadImgUrl || contact?.smallHeadImgUrl || '',
569
+ description: contact?.description,
570
+ labelIdlist: contact?.labelIdlist,
571
+ };
572
+ }
573
+ return undefined;
574
+ }
575
+ else {
576
+ const contacts = res.contactList?.map((contactInfo) => {
577
+ const contact = contactInfo.contact;
578
+ return {
579
+ wxNum: contact.alias,
580
+ wxid: contact?.userName?.string || '',
581
+ name: contact?.nickName?.string || '',
582
+ sex: contact?.sex,
583
+ alias: contact?.remark?.string || '',
584
+ province: contact?.province || '',
585
+ city: contact?.city || '',
586
+ country: contact?.country || '',
587
+ avatar: contact?.bigHeadImgUrl || contact?.smallHeadImgUrl || '',
588
+ description: contact?.description,
589
+ labelIdlist: contact?.labelIdlist,
590
+ };
591
+ }) || [];
592
+ return contacts;
593
+ }
594
+ }
595
+ catch (e) {
596
+ wechaty_puppet_1.log.error(PRE, 'searchContact(%s): %s', contactIds, e);
597
+ return undefined;
598
+ }
599
+ }
600
+ async searchContactDetail(contactIds, roomId) {
601
+ if (!contactIds.length && !roomId)
602
+ return undefined;
603
+ try {
604
+ const data = {};
605
+ if (contactIds.length) {
606
+ data['username_list'] = contactIds;
607
+ }
608
+ if (roomId) {
609
+ data['room_username'] = roomId;
610
+ }
611
+ const res = await this.postData({
612
+ path: '/contact/get_contact',
613
+ data,
614
+ });
615
+ if (res.contactList?.length === 1) {
616
+ const contactInfo = res.contactList.length
617
+ ? res.contactList[0]
618
+ : undefined;
619
+ if (contactInfo) {
620
+ const contact = contactInfo.contact || {};
621
+ return {
622
+ wxNum: contact?.alias,
623
+ wxid: contact?.userName?.string,
624
+ name: contact?.nickName?.string || '',
625
+ sex: contact?.sex || 0,
626
+ alias: contact?.remark?.string || '',
627
+ province: contact?.province || '',
628
+ city: contact?.city || '',
629
+ country: contact?.country || '',
630
+ avatar: contact?.bigHeadImgUrl || contact?.smallHeadImgUrl || '',
631
+ description: contact?.description,
632
+ labelIdlist: contact?.labelIdlist,
633
+ scene: contact?.addContactScene,
634
+ sign: contact?.signature,
635
+ snsBgImg: contact?.snsUserInfo?.snsBgimgId,
636
+ };
637
+ }
638
+ return undefined;
639
+ }
640
+ else {
641
+ return res.contactList?.map((contactInfo) => {
642
+ const contact = contactInfo.contact || {};
643
+ return {
644
+ wxNum: contact?.alias,
645
+ wxid: contact?.userName?.string,
646
+ name: contact?.nickName?.string || '',
647
+ sex: contact?.sex || 0,
648
+ alias: contact?.remark?.string || '',
649
+ province: contact?.province || '',
650
+ city: contact?.city || '',
651
+ country: contact?.country || '',
652
+ avatar: contact?.bigHeadImgUrl || contact?.smallHeadImgUrl || '',
653
+ description: contact?.description,
654
+ labelIdlist: contact?.labelIdlist,
655
+ scene: contact?.addContactScene,
656
+ sign: contact?.signature,
657
+ snsBgImg: contact?.snsUserInfo?.snsBgimgId,
658
+ };
659
+ });
660
+ }
661
+ }
662
+ catch (e) {
663
+ wechaty_puppet_1.log.error(PRE, 'searchContactDetail(%s, %s): %s', contactIds, roomId, e);
664
+ return undefined;
665
+ }
666
+ }
667
+ async syncContact() {
668
+ try {
669
+ const res = await this.postData({
670
+ path: '/contact/init_contact',
671
+ data: {
672
+ contact_seq: 0,
673
+ room_seq: 0,
674
+ },
675
+ });
676
+ const contactUsernameList = res.contactUsernameList || [];
677
+ const contactsInfo = (await this.searchContact(contactUsernameList));
678
+ this.emit('update-contacts', contactsInfo || []);
679
+ }
680
+ catch (e) {
681
+ wechaty_puppet_1.log.error(PRE, 'syncContact(): %s', e);
682
+ }
683
+ }
684
+ async getContactList(page = 1, pageSize = 100) {
685
+ try {
686
+ const res = await this.postData({
687
+ path: '/contact/get_friends',
688
+ data: {
689
+ page_num: page,
690
+ page_size: pageSize,
691
+ },
692
+ });
693
+ const totalPage = res.total_page || 1;
694
+ const contactList = res.contact_list
695
+ .filter((item) => item.username)
696
+ .map((contact) => {
697
+ return {
698
+ isFriend: true,
699
+ wxNum: contact?.alias,
700
+ wxid: contact?.username,
701
+ name: contact?.nickname || '',
702
+ sex: contact?.sex,
703
+ alias: contact?.remark || '',
704
+ province: contact?.province || '',
705
+ city: contact?.city || '',
706
+ country: contact?.country || '',
707
+ avatar: contact?.big_headimg_url || contact?.small_headimg_url || '',
708
+ labelIdlist: contact?.labelIdlist,
709
+ };
710
+ });
711
+ this.emit('update-contacts', contactList);
712
+ if (page < totalPage) {
713
+ await this.getContactList(page + 1, pageSize);
714
+ }
715
+ }
716
+ catch (e) {
717
+ wechaty_puppet_1.log.error(PRE, 'getContactList(): %s', e);
718
+ }
719
+ }
720
+ async getGroupList(page = 1, pageSize = 100) {
721
+ try {
722
+ const res = await this.postData({
723
+ path: '/room/get_chatrooms',
724
+ data: {
725
+ page_num: page,
726
+ page_size: pageSize,
727
+ },
728
+ });
729
+ const totalPage = res.total_page || 1;
730
+ const groupList = res.room_list
731
+ .filter((item) => item.username)
732
+ .map((item) => {
733
+ return {
734
+ wxid: item.username,
735
+ announcement: item?.announcement,
736
+ ownerId: item?.creator,
737
+ name: item?.nickname,
738
+ avatar: item?.headimg_url,
739
+ memberNum: item?.total_member,
740
+ chatroommemberList: [],
741
+ };
742
+ });
743
+ if (groupList.length > 0) {
744
+ this.emit('update-contacts', groupList);
745
+ }
746
+ if (parseInt(page.toString()) < parseInt(totalPage.toString())) {
747
+ await this.getGroupList(parseInt(page.toString()) + 1, pageSize);
748
+ }
749
+ }
750
+ catch (e) {
751
+ wechaty_puppet_1.log.error(PRE, 'getGroupList(): %s', e);
752
+ }
753
+ }
754
+ async getGroupMembersDetail(roomId) {
755
+ try {
756
+ const res = await this.postData({
757
+ path: '/room/get_chatroom_member_detail',
758
+ data: {
759
+ room_username: roomId,
760
+ version: 0,
761
+ },
762
+ });
763
+ const memeberIdList = res?.allMemberUserNameList.map((item) => item.string) || [];
764
+ const allMemberCount = res.allMemberCount;
765
+ const ownerId = res.chatRoomOwner;
766
+ const adminIdList = res?.adminUserNameList.map((item) => item.string) || [];
767
+ const memberList = res?.newChatroomData?.chatRoomMember
768
+ .filter((item) => item.username)
769
+ .map((item) => ({
770
+ wxid: item.username,
771
+ groupNick: item?.nickname,
772
+ avatarMinUrl: item?.smallHeadImgUrl,
773
+ avatarMaxUrl: item?.bigHeadImgUrl,
774
+ avatar: item?.bigHeadImgUrl || item?.smallHeadImgUrl,
775
+ inviterUserName: item?.inviterUserName,
776
+ }));
777
+ return {
778
+ memeberIdList,
779
+ allMemberCount,
780
+ ownerId,
781
+ adminIdList,
782
+ memberList,
783
+ };
784
+ }
785
+ catch (e) {
786
+ wechaty_puppet_1.log.error(PRE, 'getGroupMembers(%s): %s', roomId, e);
787
+ return [];
788
+ }
789
+ }
790
+ async getGroupMembers(roomId, page = 1, pageSize = 100) {
791
+ try {
792
+ const res = await this.postData({
793
+ path: '/room/get_chatroom_members',
794
+ data: {
795
+ room_username: roomId,
796
+ page_num: page,
797
+ page_size: pageSize,
798
+ },
799
+ });
800
+ const totalPage = res.total_page || 1;
801
+ const memberList = res.room_list
802
+ .filter((item) => item.username)
803
+ .map((item) => ({
804
+ wxid: item.username,
805
+ groupNick: item?.nickname,
806
+ avatarMinUrl: item?.small_headimg_url,
807
+ avatarMaxUrl: item?.big_headimg_url,
808
+ avatar: item?.big_headimg_url || item?.small_headimg_url,
809
+ inviterUserName: item?.invite_username,
810
+ country: item?.country,
811
+ province: item?.province,
812
+ city: item?.city,
813
+ displayName: item?.display_name,
814
+ sex: item?.sex,
815
+ wxNum: item?.alias,
816
+ alias: item?.remark,
817
+ }));
818
+ if (page < totalPage) {
819
+ const nextPageContacts = await this.getGroupMembers(roomId, page + 1, pageSize);
820
+ return memberList.concat(nextPageContacts);
821
+ }
822
+ else {
823
+ return memberList;
824
+ }
825
+ }
826
+ catch (e) {
827
+ wechaty_puppet_1.log.error(PRE, 'getGroupMembers(%s): %s', roomId, e);
828
+ return [];
829
+ }
830
+ }
831
+ async getOfficeList(page = 1, pageSize = 100) {
832
+ try {
833
+ const res = await this.postData({
834
+ path: '/contact/get_publics',
835
+ data: {
836
+ page_num: page,
837
+ page_size: pageSize,
838
+ },
839
+ });
840
+ const totalPage = res.total_page || 1;
841
+ const officeList = res.contact_list
842
+ .filter((item) => item.username)
843
+ .map((contact) => {
844
+ return {
845
+ wxNum: contact?.alias,
846
+ wxid: contact?.username,
847
+ name: contact?.nickname || '',
848
+ sex: contact?.sex,
849
+ alias: contact?.remark || '',
850
+ province: contact?.province || '',
851
+ city: contact?.city || '',
852
+ country: contact?.country || '',
853
+ avatar: contact?.big_headimg_url || contact?.small_headimg_url || '',
854
+ labelIdlist: contact?.labelIdlist,
855
+ };
856
+ });
857
+ this.emit('update-contacts', officeList);
858
+ if (page < totalPage) {
859
+ await this.getOfficeList(page + 1, pageSize);
860
+ }
861
+ }
862
+ catch (e) {
863
+ wechaty_puppet_1.log.error(PRE, 'getOfficeList(): %s', e);
864
+ }
865
+ }
866
+ async sendText(contactId, msg, selfId) {
867
+ try {
868
+ const res = await this.postData({
869
+ path: '/msg/send_text',
870
+ data: {
871
+ to_username: contactId,
872
+ content: msg,
873
+ },
874
+ });
875
+ return {
876
+ id: res?.list?.[0].newMsgId || '',
877
+ timeStamp: res?.list?.[0].createTime || '',
878
+ msgType: res?.list?.[0].type || '',
879
+ talkerId: selfId || '',
880
+ text: msg,
881
+ msg,
882
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
883
+ listenerId: contactId,
884
+ };
885
+ }
886
+ catch (e) {
887
+ wechaty_puppet_1.log.error(PRE, 'sendText(%s, %s, %s): %s', contactId, msg, e);
888
+ }
889
+ }
890
+ async sendAtText(contactId, msg, atList, selfId) {
891
+ try {
892
+ const res = await this.postData({
893
+ path: '/msg/send_room_at',
894
+ data: {
895
+ to_username: contactId,
896
+ content: msg,
897
+ at_list: atList,
898
+ },
899
+ });
900
+ return {
901
+ id: res?.list?.[0].newMsgId || '',
902
+ timeStamp: res?.list?.[0].createTime || '',
903
+ msgType: res?.list?.[0].type || '',
904
+ talkerId: selfId || '',
905
+ text: msg,
906
+ msg,
907
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
908
+ listenerId: contactId,
909
+ };
910
+ }
911
+ catch (e) {
912
+ wechaty_puppet_1.log.error(PRE, 'sendText(%s, %s, %s): %s', contactId, msg, atList, e);
913
+ }
914
+ }
915
+ async uploadFile(url, type) {
916
+ return await this.postData({
917
+ path: '/cloud/cdn_upload',
918
+ data: {
919
+ file_type: type,
920
+ url,
921
+ },
922
+ });
923
+ }
924
+ async downloadImage(imageInfo) {
925
+ const params = {
926
+ file_type: 2,
927
+ file_id: imageInfo.file_id,
928
+ aes_key: imageInfo.aes_key,
929
+ file_size: imageInfo.file_size,
930
+ file_name: `/微信图片_${(0, date_fns_1.format)(new Date(), 'yyyyMMddHHmmss')}.png`,
931
+ };
932
+ const res = await this.postData({
933
+ path: '/cloud/cdn_download',
934
+ data: params,
935
+ });
936
+ return encodeURI(res.url) || '';
937
+ }
938
+ async downloadFile(imageInfo) {
939
+ const params = {
940
+ file_type: 5,
941
+ file_id: imageInfo.file_id.replace('@cdn_', ''),
942
+ aes_key: imageInfo.aes_key,
943
+ file_size: imageInfo.file_size,
944
+ file_name: '/' + imageInfo.file_name,
945
+ };
946
+ const res = await this.postData({
947
+ path: '/cloud/cdn_download',
948
+ data: params,
949
+ });
950
+ return encodeURI(res.url) || '';
951
+ }
952
+ async downloadAudio(msgId, voiceInfo, roomId) {
953
+ const params = {
954
+ msg_id: msgId,
955
+ length: voiceInfo.length,
956
+ room_username: roomId,
957
+ file_name: '/voice.mp3',
958
+ to_mp3: true,
959
+ };
960
+ const res = await this.postData({
961
+ path: '/cloud/download_voice',
962
+ data: params,
963
+ });
964
+ return encodeURI(res.url) || '';
965
+ }
966
+ async downloadVideo(videoInfo) {
967
+ const params = {
968
+ file_type: 4,
969
+ file_id: videoInfo.file_id,
970
+ aes_key: videoInfo.aes_key,
971
+ file_size: videoInfo.file_size,
972
+ file_name: `/微信视频_${(0, date_fns_1.format)(new Date(), 'yyyyMMddHHmmss')}.mp4`,
973
+ };
974
+ const res = await this.postData({
975
+ path: '/cloud/cdn_download',
976
+ data: params,
977
+ });
978
+ return encodeURI(res.url) || '';
979
+ }
980
+ async sendUrlImg(contactId, url, selfId) {
981
+ try {
982
+ const fileInfo = await this.uploadFile(url, 2);
983
+ const res = await this.postData({
984
+ path: '/msg/send_image',
985
+ data: {
986
+ to_username: contactId,
987
+ file_id: fileInfo.file_id,
988
+ aes_key: fileInfo.aes_key,
989
+ file_size: fileInfo.file_size,
990
+ big_file_size: 0,
991
+ thumb_file_size: fileInfo.thumb_file_size,
992
+ file_md5: fileInfo.md5,
993
+ thumb_width: fileInfo.thumb_width,
994
+ thumb_height: fileInfo.thumb_height,
995
+ file_crc: fileInfo.file_crc,
996
+ },
997
+ });
998
+ return {
999
+ id: res?.newMsgId || '',
1000
+ timeStamp: res?.createTime || '',
1001
+ msgType: WechatMessageType.Image,
1002
+ talkerId: selfId || '',
1003
+ text: url,
1004
+ msg: url,
1005
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
1006
+ listenerId: contactId,
1007
+ };
1008
+ }
1009
+ catch (e) {
1010
+ wechaty_puppet_1.log.error(PRE, 'sendUrlImg(%s, %s): %s', contactId, url, e);
1011
+ }
1012
+ }
1013
+ async sendVideo(contactId, url, selfId) {
1014
+ try {
1015
+ const fileInfo = await this.uploadFile(url, 4);
1016
+ const res = await this.postData({
1017
+ path: '/msg/send_video',
1018
+ data: {
1019
+ to_username: contactId,
1020
+ file_id: fileInfo.file_id,
1021
+ aes_key: fileInfo.aes_key,
1022
+ file_size: fileInfo.file_size,
1023
+ thumb_file_size: fileInfo.thumb_file_size,
1024
+ file_md5: fileInfo.md5,
1025
+ thumb_file_md5: fileInfo.thumb_file_md5,
1026
+ video_duration: fileInfo.video_duration,
1027
+ file_crc: fileInfo.file_crc,
1028
+ mp4_identify: fileInfo.mp4_identify,
1029
+ },
1030
+ });
1031
+ return {
1032
+ id: res?.newMsgId || '',
1033
+ timeStamp: res?.createTime || (0, date_fns_1.getUnixTime)(new Date()),
1034
+ msgType: WechatMessageType.Image,
1035
+ talkerId: selfId || '',
1036
+ text: url,
1037
+ msg: url,
1038
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
1039
+ listenerId: contactId,
1040
+ };
1041
+ }
1042
+ catch (error) {
1043
+ wechaty_puppet_1.log.error(PRE, 'sendVideo(%s, %s): %s', contactId, url, error);
1044
+ }
1045
+ }
1046
+ async sendCloudFile(contactId, url, selfId) {
1047
+ try {
1048
+ const fileInfo = await this.uploadFile(url, 5);
1049
+ const res = await this.postData({
1050
+ path: '/msg/send_file',
1051
+ data: {
1052
+ to_username: contactId,
1053
+ file_id: fileInfo.file_id,
1054
+ aes_key: fileInfo.aes_key,
1055
+ file_size: fileInfo.file_size,
1056
+ file_md5: fileInfo.md5,
1057
+ file_name: fileInfo.name,
1058
+ file_key: fileInfo.file_key,
1059
+ },
1060
+ });
1061
+ return {
1062
+ id: res?.newMsgId || '',
1063
+ timeStamp: res?.createTime || '',
1064
+ msgType: WechatMessageType.App,
1065
+ talkerId: selfId || '',
1066
+ text: url,
1067
+ msg: url,
1068
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
1069
+ listenerId: contactId,
1070
+ };
1071
+ }
1072
+ catch (error) {
1073
+ wechaty_puppet_1.log.error(PRE, 'sendCloudFile(%s, %s): %s', contactId, url, error);
1074
+ }
1075
+ }
1076
+ async sendShareCard({ contactId, title, content, jumpUrl, imageUrl, }, selfId) {
1077
+ try {
1078
+ const res = await this.postData({
1079
+ path: '/msg/send_link_card',
1080
+ data: {
1081
+ to_username: contactId,
1082
+ title,
1083
+ desc: content,
1084
+ url: jumpUrl,
1085
+ image_url: imageUrl,
1086
+ },
1087
+ });
1088
+ return {
1089
+ id: res?.newMsgId || '',
1090
+ timeStamp: res?.createTime || '',
1091
+ msgType: WechatMessageType.Text,
1092
+ talkerId: selfId || '',
1093
+ text: jumpUrl,
1094
+ msg: jumpUrl,
1095
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
1096
+ listenerId: contactId,
1097
+ };
1098
+ }
1099
+ catch (e) {
1100
+ wechaty_puppet_1.log.error('error info', e);
1101
+ }
1102
+ }
1103
+ async sendMiniProgram({ appid, contactId, title, content, pagePath, username, thumbUrl, iconUrl, }, selfId) {
1104
+ try {
1105
+ const fileInfo = await this.uploadFile(thumbUrl, 2);
1106
+ const res = await this.postData({
1107
+ path: '/msg/send_mini_app',
1108
+ data: {
1109
+ to_username: contactId,
1110
+ appid,
1111
+ username: username && username.endsWith('@app')
1112
+ ? username
1113
+ : username + '@app',
1114
+ title: content,
1115
+ appname: title,
1116
+ page_path: pagePath,
1117
+ appicon: iconUrl,
1118
+ file_id: fileInfo.file_id,
1119
+ aes_key: fileInfo.aes_key,
1120
+ file_size: fileInfo.file_size,
1121
+ file_md5: fileInfo.md5,
1122
+ },
1123
+ });
1124
+ return {
1125
+ id: res?.newMsgId || '',
1126
+ timeStamp: res?.createTime || '',
1127
+ msgType: WechatMessageType.MiniProgram,
1128
+ talkerId: selfId || '',
1129
+ text: appid + '_' + username,
1130
+ msg: appid + '_' + username,
1131
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
1132
+ listenerId: contactId,
1133
+ };
1134
+ }
1135
+ catch (error) {
1136
+ wechaty_puppet_1.log.error(PRE, 'sendMiniProgram(%s, %s): %s', contactId, username, error);
1137
+ }
1138
+ }
1139
+ async sendXml(contactId, xml, selfId) {
1140
+ try {
1141
+ const res = await this.postData({
1142
+ path: '/msg/send_app_msg',
1143
+ data: {
1144
+ to_username: contactId,
1145
+ app_type: 0,
1146
+ appid: '',
1147
+ xml,
1148
+ },
1149
+ });
1150
+ return {
1151
+ id: res?.newMsgId || '',
1152
+ timeStamp: res?.createTime || '',
1153
+ msgType: WechatMessageType.App,
1154
+ talkerId: selfId || '',
1155
+ text: xml,
1156
+ msg: xml,
1157
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
1158
+ listenerId: contactId,
1159
+ };
1160
+ }
1161
+ catch (error) {
1162
+ wechaty_puppet_1.log.error(PRE, 'sendXml(%s, %s): %s', contactId, xml, error);
1163
+ }
1164
+ }
1165
+ async confirmFriendship(contactId, scene, ticket) {
1166
+ const res = await this.postData({
1167
+ path: '/contact/verify_friend',
1168
+ data: {
1169
+ username: contactId,
1170
+ scene: (scene && scene.toString()) || 6,
1171
+ ticket,
1172
+ opcode: 3,
1173
+ },
1174
+ });
1175
+ return res;
1176
+ }
1177
+ async addFriendByWxid({ scene, wxid, content, ticket, }) {
1178
+ await this.postData({
1179
+ path: '/contact/add_friend',
1180
+ data: {
1181
+ scene,
1182
+ username: wxid,
1183
+ verify_content: content,
1184
+ ticket,
1185
+ },
1186
+ });
1187
+ }
1188
+ async searchStranger(content) {
1189
+ const contact = await this.postData({
1190
+ path: '/contact/search_contact',
1191
+ data: {
1192
+ username: content,
1193
+ from_scene: 0,
1194
+ search_scene: 0,
1195
+ },
1196
+ });
1197
+ return {
1198
+ wxNum: contact?.alias || '',
1199
+ wxid: contact?.userName?.string,
1200
+ isFriend: contact?.userName?.string.includes('@stranger')
1201
+ && contact?.userName?.string.includes('v3_')
1202
+ ? 0
1203
+ : 1,
1204
+ name: contact?.nickName?.string || '',
1205
+ sex: contact?.sex,
1206
+ alias: contact?.remark?.string || '',
1207
+ province: contact?.province || '',
1208
+ city: contact?.city || '',
1209
+ country: contact?.country || '',
1210
+ avatar: contact?.bigHeadImgUrl || contact?.smallHeadImgUrl || '',
1211
+ description: contact?.description,
1212
+ labelIdlist: contact?.labelIdlist,
1213
+ scene: contact?.addContactScene,
1214
+ sign: contact?.signature,
1215
+ snsBgImg: contact?.snsUserInfo?.snsBgimgId,
1216
+ ticket: contact?.antispamTicket,
1217
+ };
1218
+ }
1219
+ async inviteToGroup(groupId, contactId, type = 1) {
1220
+ if (type === 1) {
1221
+ await this.postData({
1222
+ path: '/room/add_chatroom_member',
1223
+ data: {
1224
+ room_username: groupId,
1225
+ username_list: [contactId],
1226
+ },
1227
+ });
1228
+ }
1229
+ else {
1230
+ await this.postData({
1231
+ path: '/room/invite_chatroom_member',
1232
+ data: {
1233
+ room_username: groupId,
1234
+ username_list: [contactId],
1235
+ },
1236
+ });
1237
+ }
1238
+ }
1239
+ async removeContact(contactId) {
1240
+ await this.postData({
1241
+ path: '/contact/del_friend',
1242
+ data: {
1243
+ username: contactId,
1244
+ },
1245
+ });
1246
+ }
1247
+ async setContactAlias(contactId, remark) {
1248
+ await this.postData({
1249
+ path: '/contact/modify_remark',
1250
+ data: {
1251
+ username: contactId,
1252
+ remark,
1253
+ },
1254
+ });
1255
+ }
1256
+ async setGroupName(groupId, name) {
1257
+ await this.postData({
1258
+ path: '/room/modify_chatroom_name',
1259
+ data: {
1260
+ room_username: groupId,
1261
+ name,
1262
+ },
1263
+ });
1264
+ }
1265
+ async roomQuit(roomId) {
1266
+ await this.postData({
1267
+ path: '/room/quit_chatroom',
1268
+ data: {
1269
+ room_username: roomId,
1270
+ },
1271
+ });
1272
+ }
1273
+ async sendContactCard(contactId, xml, selfId) {
1274
+ try {
1275
+ const res = await this.postData({
1276
+ path: '/msg/send_share_card_raw',
1277
+ data: {
1278
+ to_username: contactId,
1279
+ xml,
1280
+ },
1281
+ });
1282
+ return {
1283
+ id: res?.newMsgId || '',
1284
+ timeStamp: res?.createTime || '',
1285
+ msgType: WechatMessageType.App,
1286
+ talkerId: selfId || '',
1287
+ text: xml,
1288
+ msg: xml,
1289
+ fromWxid: (0, is_type_js_1.isRoomId)(contactId) ? contactId : '',
1290
+ listenerId: contactId,
1291
+ };
1292
+ }
1293
+ catch (error) {
1294
+ wechaty_puppet_1.log.error(PRE, 'sendContactCard(%s, %s): %s', contactId, xml, error);
1295
+ }
1296
+ }
1297
+ async sendAnnouncement(roomId, content) {
1298
+ try {
1299
+ const res = await this.postData({
1300
+ path: '/room/set_chatroom_announcement',
1301
+ data: {
1302
+ room_username: roomId,
1303
+ announcement: content,
1304
+ },
1305
+ });
1306
+ if (res.baseResponse.ret) {
1307
+ wechaty_puppet_1.log.error('sendAnnouncement error: %s', JSON.stringify(res.baseResponse));
1308
+ }
1309
+ }
1310
+ catch (error) {
1311
+ wechaty_puppet_1.log.error(PRE, 'sendAnnouncement(%s, %s): %s', roomId, content, error);
1312
+ }
1313
+ }
1314
+ }
1315
+ exports.default = Client;