@juzi/wechaty-puppet-whatsapp 1.0.0

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 (479) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +83 -0
  3. package/dist/cjs/examples/ding-dong-bot.d.ts +2 -0
  4. package/dist/cjs/examples/ding-dong-bot.d.ts.map +1 -0
  5. package/dist/cjs/examples/ding-dong-bot.js +98 -0
  6. package/dist/cjs/examples/ding-dong-bot.js.map +1 -0
  7. package/dist/cjs/package.json +1 -0
  8. package/dist/cjs/src/config.d.ts +41 -0
  9. package/dist/cjs/src/config.d.ts.map +1 -0
  10. package/dist/cjs/src/config.js +58 -0
  11. package/dist/cjs/src/config.js.map +1 -0
  12. package/dist/cjs/src/data/cache-manager.d.ts +83 -0
  13. package/dist/cjs/src/data/cache-manager.d.ts.map +1 -0
  14. package/dist/cjs/src/data/cache-manager.js +303 -0
  15. package/dist/cjs/src/data/cache-manager.js.map +1 -0
  16. package/dist/cjs/src/data/cache-manager.spec.d.ts +2 -0
  17. package/dist/cjs/src/data/cache-manager.spec.d.ts.map +1 -0
  18. package/dist/cjs/src/data/cache-manager.spec.js +32 -0
  19. package/dist/cjs/src/data/cache-manager.spec.js.map +1 -0
  20. package/dist/cjs/src/exception/error-type.d.ts +80 -0
  21. package/dist/cjs/src/exception/error-type.d.ts.map +1 -0
  22. package/dist/cjs/src/exception/error-type.js +61 -0
  23. package/dist/cjs/src/exception/error-type.js.map +1 -0
  24. package/dist/cjs/src/exception/whatsapp-error.d.ts +4 -0
  25. package/dist/cjs/src/exception/whatsapp-error.d.ts.map +1 -0
  26. package/dist/cjs/src/exception/whatsapp-error.js +14 -0
  27. package/dist/cjs/src/exception/whatsapp-error.js.map +1 -0
  28. package/dist/cjs/src/exception/whatsapp-error.spec.d.ts +3 -0
  29. package/dist/cjs/src/exception/whatsapp-error.spec.d.ts.map +1 -0
  30. package/dist/cjs/src/exception/whatsapp-error.spec.js +27 -0
  31. package/dist/cjs/src/exception/whatsapp-error.spec.js.map +1 -0
  32. package/dist/cjs/src/helper/index.d.ts +2 -0
  33. package/dist/cjs/src/helper/index.d.ts.map +1 -0
  34. package/dist/cjs/src/helper/index.js +3 -0
  35. package/dist/cjs/src/helper/index.js.map +1 -0
  36. package/dist/cjs/src/helper/miscellaneous.d.ts +8 -0
  37. package/dist/cjs/src/helper/miscellaneous.d.ts.map +1 -0
  38. package/dist/cjs/src/helper/miscellaneous.js +48 -0
  39. package/dist/cjs/src/helper/miscellaneous.js.map +1 -0
  40. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.d.ts +4 -0
  41. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.d.ts.map +1 -0
  42. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.js +62 -0
  43. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.js.map +1 -0
  44. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.spec.d.ts +2 -0
  45. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.spec.d.ts.map +1 -0
  46. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.spec.js +86 -0
  47. package/dist/cjs/src/helper/pure-function/contact-raw-payload-parser.spec.js.map +1 -0
  48. package/dist/cjs/src/helper/pure-function/convert-function.d.ts +4 -0
  49. package/dist/cjs/src/helper/pure-function/convert-function.d.ts.map +1 -0
  50. package/dist/cjs/src/helper/pure-function/convert-function.js +17 -0
  51. package/dist/cjs/src/helper/pure-function/convert-function.js.map +1 -0
  52. package/dist/cjs/src/helper/pure-function/index.d.ts +5 -0
  53. package/dist/cjs/src/helper/pure-function/index.d.ts.map +1 -0
  54. package/dist/cjs/src/helper/pure-function/index.js +21 -0
  55. package/dist/cjs/src/helper/pure-function/index.js.map +1 -0
  56. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.d.ts +4 -0
  57. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.d.ts.map +1 -0
  58. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.js +136 -0
  59. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.js.map +1 -0
  60. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.spec.d.ts +2 -0
  61. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.spec.d.ts.map +1 -0
  62. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.spec.js +229 -0
  63. package/dist/cjs/src/helper/pure-function/message-raw-payload-parser.spec.js.map +1 -0
  64. package/dist/cjs/src/helper/pure-function/room-event-generator.d.ts +28 -0
  65. package/dist/cjs/src/helper/pure-function/room-event-generator.d.ts.map +1 -0
  66. package/dist/cjs/src/helper/pure-function/room-event-generator.js +59 -0
  67. package/dist/cjs/src/helper/pure-function/room-event-generator.js.map +1 -0
  68. package/dist/cjs/src/helper/pure-function/room-event-generator.spec.d.ts +2 -0
  69. package/dist/cjs/src/helper/pure-function/room-event-generator.spec.d.ts.map +1 -0
  70. package/dist/cjs/src/helper/pure-function/room-event-generator.spec.js +101 -0
  71. package/dist/cjs/src/helper/pure-function/room-event-generator.spec.js.map +1 -0
  72. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.d.ts +4 -0
  73. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.d.ts.map +1 -0
  74. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.js +24 -0
  75. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.js.map +1 -0
  76. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.spec.d.ts +2 -0
  77. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.spec.d.ts.map +1 -0
  78. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.spec.js +68 -0
  79. package/dist/cjs/src/helper/pure-function/room-raw-payload-parser.spec.js.map +1 -0
  80. package/dist/cjs/src/helper/pure-function/vcard-parser.d.ts +28 -0
  81. package/dist/cjs/src/helper/pure-function/vcard-parser.d.ts.map +1 -0
  82. package/dist/cjs/src/helper/pure-function/vcard-parser.js +109 -0
  83. package/dist/cjs/src/helper/pure-function/vcard-parser.js.map +1 -0
  84. package/dist/cjs/src/helper/schedule/schedule-manager.d.ts +19 -0
  85. package/dist/cjs/src/helper/schedule/schedule-manager.d.ts.map +1 -0
  86. package/dist/cjs/src/helper/schedule/schedule-manager.js +49 -0
  87. package/dist/cjs/src/helper/schedule/schedule-manager.js.map +1 -0
  88. package/dist/cjs/src/helper/schedule/schedule-manager.spec.d.ts +2 -0
  89. package/dist/cjs/src/helper/schedule/schedule-manager.spec.d.ts.map +1 -0
  90. package/dist/cjs/src/helper/schedule/schedule-manager.spec.js +45 -0
  91. package/dist/cjs/src/helper/schedule/schedule-manager.spec.js.map +1 -0
  92. package/dist/cjs/src/manager-event.d.ts +18 -0
  93. package/dist/cjs/src/manager-event.d.ts.map +1 -0
  94. package/dist/cjs/src/manager-event.js +3 -0
  95. package/dist/cjs/src/manager-event.js.map +1 -0
  96. package/dist/cjs/src/manager.d.ts +67 -0
  97. package/dist/cjs/src/manager.d.ts.map +1 -0
  98. package/dist/cjs/src/manager.js +270 -0
  99. package/dist/cjs/src/manager.js.map +1 -0
  100. package/dist/cjs/src/manager.spec.d.ts +3 -0
  101. package/dist/cjs/src/manager.spec.d.ts.map +1 -0
  102. package/dist/cjs/src/manager.spec.js +38 -0
  103. package/dist/cjs/src/manager.spec.js.map +1 -0
  104. package/dist/cjs/src/mod.d.ts +5 -0
  105. package/dist/cjs/src/mod.d.ts.map +1 -0
  106. package/dist/cjs/src/mod.js +9 -0
  107. package/dist/cjs/src/mod.js.map +1 -0
  108. package/dist/cjs/src/package-json.d.ts +6 -0
  109. package/dist/cjs/src/package-json.d.ts.map +1 -0
  110. package/dist/cjs/src/package-json.js +93 -0
  111. package/dist/cjs/src/package-json.js.map +1 -0
  112. package/dist/cjs/src/package-json.spec.d.ts +3 -0
  113. package/dist/cjs/src/package-json.spec.d.ts.map +1 -0
  114. package/dist/cjs/src/package-json.spec.js +10 -0
  115. package/dist/cjs/src/package-json.spec.js.map +1 -0
  116. package/dist/cjs/src/puppet-mixin/contact-self.d.ts +5 -0
  117. package/dist/cjs/src/puppet-mixin/contact-self.d.ts.map +1 -0
  118. package/dist/cjs/src/puppet-mixin/contact-self.js +45 -0
  119. package/dist/cjs/src/puppet-mixin/contact-self.js.map +1 -0
  120. package/dist/cjs/src/puppet-mixin/contact.d.ts +16 -0
  121. package/dist/cjs/src/puppet-mixin/contact.d.ts.map +1 -0
  122. package/dist/cjs/src/puppet-mixin/contact.js +124 -0
  123. package/dist/cjs/src/puppet-mixin/contact.js.map +1 -0
  124. package/dist/cjs/src/puppet-mixin/conversation.d.ts +2 -0
  125. package/dist/cjs/src/puppet-mixin/conversation.d.ts.map +1 -0
  126. package/dist/cjs/src/puppet-mixin/conversation.js +35 -0
  127. package/dist/cjs/src/puppet-mixin/conversation.js.map +1 -0
  128. package/dist/cjs/src/puppet-mixin/friendship.d.ts +12 -0
  129. package/dist/cjs/src/puppet-mixin/friendship.d.ts.map +1 -0
  130. package/dist/cjs/src/puppet-mixin/friendship.js +99 -0
  131. package/dist/cjs/src/puppet-mixin/friendship.js.map +1 -0
  132. package/dist/cjs/src/puppet-mixin/message.d.ts +57 -0
  133. package/dist/cjs/src/puppet-mixin/message.d.ts.map +1 -0
  134. package/dist/cjs/src/puppet-mixin/message.js +327 -0
  135. package/dist/cjs/src/puppet-mixin/message.js.map +1 -0
  136. package/dist/cjs/src/puppet-mixin/room.d.ts +42 -0
  137. package/dist/cjs/src/puppet-mixin/room.d.ts.map +1 -0
  138. package/dist/cjs/src/puppet-mixin/room.js +319 -0
  139. package/dist/cjs/src/puppet-mixin/room.js.map +1 -0
  140. package/dist/cjs/src/puppet-mixin/tag.d.ts +5 -0
  141. package/dist/cjs/src/puppet-mixin/tag.d.ts.map +1 -0
  142. package/dist/cjs/src/puppet-mixin/tag.js +50 -0
  143. package/dist/cjs/src/puppet-mixin/tag.js.map +1 -0
  144. package/dist/cjs/src/puppet-whatsapp.d.ts +145 -0
  145. package/dist/cjs/src/puppet-whatsapp.d.ts.map +1 -0
  146. package/dist/cjs/src/puppet-whatsapp.js +309 -0
  147. package/dist/cjs/src/puppet-whatsapp.js.map +1 -0
  148. package/dist/cjs/src/puppet-whatsapp.spec.d.ts +3 -0
  149. package/dist/cjs/src/puppet-whatsapp.spec.d.ts.map +1 -0
  150. package/dist/cjs/src/puppet-whatsapp.spec.js +25 -0
  151. package/dist/cjs/src/puppet-whatsapp.spec.js.map +1 -0
  152. package/dist/cjs/src/request/rate-manager.d.ts +21 -0
  153. package/dist/cjs/src/request/rate-manager.d.ts.map +1 -0
  154. package/dist/cjs/src/request/rate-manager.js +92 -0
  155. package/dist/cjs/src/request/rate-manager.js.map +1 -0
  156. package/dist/cjs/src/request/request-manager.d.ts +54 -0
  157. package/dist/cjs/src/request/request-manager.d.ts.map +1 -0
  158. package/dist/cjs/src/request/request-manager.js +128 -0
  159. package/dist/cjs/src/request/request-manager.js.map +1 -0
  160. package/dist/cjs/src/request/request-pool.d.ts +10 -0
  161. package/dist/cjs/src/request/request-pool.d.ts.map +1 -0
  162. package/dist/cjs/src/request/request-pool.js +47 -0
  163. package/dist/cjs/src/request/request-pool.js.map +1 -0
  164. package/dist/cjs/src/request/request-pool.spec.d.ts +2 -0
  165. package/dist/cjs/src/request/request-pool.spec.d.ts.map +1 -0
  166. package/dist/cjs/src/request/request-pool.spec.js +36 -0
  167. package/dist/cjs/src/request/request-pool.spec.js.map +1 -0
  168. package/dist/cjs/src/schema/event-name.d.ts +9 -0
  169. package/dist/cjs/src/schema/event-name.d.ts.map +1 -0
  170. package/dist/cjs/src/schema/event-name.js +13 -0
  171. package/dist/cjs/src/schema/event-name.js.map +1 -0
  172. package/dist/cjs/src/schema/index.d.ts +2 -0
  173. package/dist/cjs/src/schema/index.d.ts.map +1 -0
  174. package/dist/cjs/src/schema/index.js +18 -0
  175. package/dist/cjs/src/schema/index.js.map +1 -0
  176. package/dist/cjs/src/schema/whatsapp-interface.d.ts +18 -0
  177. package/dist/cjs/src/schema/whatsapp-interface.d.ts.map +1 -0
  178. package/dist/cjs/src/schema/whatsapp-interface.js +26 -0
  179. package/dist/cjs/src/schema/whatsapp-interface.js.map +1 -0
  180. package/dist/cjs/src/schema/whatsapp-type.d.ts +42 -0
  181. package/dist/cjs/src/schema/whatsapp-type.d.ts.map +1 -0
  182. package/dist/cjs/src/schema/whatsapp-type.js +3 -0
  183. package/dist/cjs/src/schema/whatsapp-type.js.map +1 -0
  184. package/dist/cjs/src/whatsapp/event-handler/group-event-handler.d.ts +8 -0
  185. package/dist/cjs/src/whatsapp/event-handler/group-event-handler.d.ts.map +1 -0
  186. package/dist/cjs/src/whatsapp/event-handler/group-event-handler.js +84 -0
  187. package/dist/cjs/src/whatsapp/event-handler/group-event-handler.js.map +1 -0
  188. package/dist/cjs/src/whatsapp/event-handler/login-event-handler.d.ts +24 -0
  189. package/dist/cjs/src/whatsapp/event-handler/login-event-handler.d.ts.map +1 -0
  190. package/dist/cjs/src/whatsapp/event-handler/login-event-handler.js +203 -0
  191. package/dist/cjs/src/whatsapp/event-handler/login-event-handler.js.map +1 -0
  192. package/dist/cjs/src/whatsapp/event-handler/message-event-handler.d.ts +35 -0
  193. package/dist/cjs/src/whatsapp/event-handler/message-event-handler.d.ts.map +1 -0
  194. package/dist/cjs/src/whatsapp/event-handler/message-event-handler.js +203 -0
  195. package/dist/cjs/src/whatsapp/event-handler/message-event-handler.js.map +1 -0
  196. package/dist/cjs/src/whatsapp/whatsapp-base.d.ts +26 -0
  197. package/dist/cjs/src/whatsapp/whatsapp-base.d.ts.map +1 -0
  198. package/dist/cjs/src/whatsapp/whatsapp-base.js +69 -0
  199. package/dist/cjs/src/whatsapp/whatsapp-base.js.map +1 -0
  200. package/dist/cjs/src/whatsapp/whatsapp-manager.d.ts +16 -0
  201. package/dist/cjs/src/whatsapp/whatsapp-manager.d.ts.map +1 -0
  202. package/dist/cjs/src/whatsapp/whatsapp-manager.js +134 -0
  203. package/dist/cjs/src/whatsapp/whatsapp-manager.js.map +1 -0
  204. package/dist/cjs/tests/integration.spec.d.ts +3 -0
  205. package/dist/cjs/tests/integration.spec.d.ts.map +1 -0
  206. package/dist/cjs/tests/integration.spec.js +8 -0
  207. package/dist/cjs/tests/integration.spec.js.map +1 -0
  208. package/dist/cjs/tests/memory-card.spec.d.ts +2 -0
  209. package/dist/cjs/tests/memory-card.spec.d.ts.map +1 -0
  210. package/dist/cjs/tests/memory-card.spec.js +25 -0
  211. package/dist/cjs/tests/memory-card.spec.js.map +1 -0
  212. package/dist/cjs/tests/qrcode.spec.d.ts +2 -0
  213. package/dist/cjs/tests/qrcode.spec.d.ts.map +1 -0
  214. package/dist/cjs/tests/qrcode.spec.js +51 -0
  215. package/dist/cjs/tests/qrcode.spec.js.map +1 -0
  216. package/dist/esm/examples/ding-dong-bot.d.ts +2 -0
  217. package/dist/esm/examples/ding-dong-bot.d.ts.map +1 -0
  218. package/dist/esm/examples/ding-dong-bot.js +93 -0
  219. package/dist/esm/examples/ding-dong-bot.js.map +1 -0
  220. package/dist/esm/src/config.d.ts +41 -0
  221. package/dist/esm/src/config.d.ts.map +1 -0
  222. package/dist/esm/src/config.js +50 -0
  223. package/dist/esm/src/config.js.map +1 -0
  224. package/dist/esm/src/data/cache-manager.d.ts +83 -0
  225. package/dist/esm/src/data/cache-manager.d.ts.map +1 -0
  226. package/dist/esm/src/data/cache-manager.js +273 -0
  227. package/dist/esm/src/data/cache-manager.js.map +1 -0
  228. package/dist/esm/src/data/cache-manager.spec.d.ts +2 -0
  229. package/dist/esm/src/data/cache-manager.spec.d.ts.map +1 -0
  230. package/dist/esm/src/data/cache-manager.spec.js +30 -0
  231. package/dist/esm/src/data/cache-manager.spec.js.map +1 -0
  232. package/dist/esm/src/exception/error-type.d.ts +80 -0
  233. package/dist/esm/src/exception/error-type.d.ts.map +1 -0
  234. package/dist/esm/src/exception/error-type.js +58 -0
  235. package/dist/esm/src/exception/error-type.js.map +1 -0
  236. package/dist/esm/src/exception/whatsapp-error.d.ts +4 -0
  237. package/dist/esm/src/exception/whatsapp-error.d.ts.map +1 -0
  238. package/dist/esm/src/exception/whatsapp-error.js +11 -0
  239. package/dist/esm/src/exception/whatsapp-error.js.map +1 -0
  240. package/dist/esm/src/exception/whatsapp-error.spec.d.ts +3 -0
  241. package/dist/esm/src/exception/whatsapp-error.spec.d.ts.map +1 -0
  242. package/dist/esm/src/exception/whatsapp-error.spec.js +22 -0
  243. package/dist/esm/src/exception/whatsapp-error.spec.js.map +1 -0
  244. package/dist/esm/src/helper/index.d.ts +2 -0
  245. package/dist/esm/src/helper/index.d.ts.map +1 -0
  246. package/dist/esm/src/helper/index.js +2 -0
  247. package/dist/esm/src/helper/index.js.map +1 -0
  248. package/dist/esm/src/helper/miscellaneous.d.ts +8 -0
  249. package/dist/esm/src/helper/miscellaneous.d.ts.map +1 -0
  250. package/dist/esm/src/helper/miscellaneous.js +38 -0
  251. package/dist/esm/src/helper/miscellaneous.js.map +1 -0
  252. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.d.ts +4 -0
  253. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.d.ts.map +1 -0
  254. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.js +35 -0
  255. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.js.map +1 -0
  256. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.spec.d.ts +2 -0
  257. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.spec.d.ts.map +1 -0
  258. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.spec.js +61 -0
  259. package/dist/esm/src/helper/pure-function/contact-raw-payload-parser.spec.js.map +1 -0
  260. package/dist/esm/src/helper/pure-function/convert-function.d.ts +4 -0
  261. package/dist/esm/src/helper/pure-function/convert-function.d.ts.map +1 -0
  262. package/dist/esm/src/helper/pure-function/convert-function.js +12 -0
  263. package/dist/esm/src/helper/pure-function/convert-function.js.map +1 -0
  264. package/dist/esm/src/helper/pure-function/index.d.ts +5 -0
  265. package/dist/esm/src/helper/pure-function/index.d.ts.map +1 -0
  266. package/dist/esm/src/helper/pure-function/index.js +5 -0
  267. package/dist/esm/src/helper/pure-function/index.js.map +1 -0
  268. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.d.ts +4 -0
  269. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.d.ts.map +1 -0
  270. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.js +106 -0
  271. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.js.map +1 -0
  272. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.spec.d.ts +2 -0
  273. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.spec.d.ts.map +1 -0
  274. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.spec.js +227 -0
  275. package/dist/esm/src/helper/pure-function/message-raw-payload-parser.spec.js.map +1 -0
  276. package/dist/esm/src/helper/pure-function/room-event-generator.d.ts +28 -0
  277. package/dist/esm/src/helper/pure-function/room-event-generator.d.ts.map +1 -0
  278. package/dist/esm/src/helper/pure-function/room-event-generator.js +53 -0
  279. package/dist/esm/src/helper/pure-function/room-event-generator.js.map +1 -0
  280. package/dist/esm/src/helper/pure-function/room-event-generator.spec.d.ts +2 -0
  281. package/dist/esm/src/helper/pure-function/room-event-generator.spec.d.ts.map +1 -0
  282. package/dist/esm/src/helper/pure-function/room-event-generator.spec.js +99 -0
  283. package/dist/esm/src/helper/pure-function/room-event-generator.spec.js.map +1 -0
  284. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.d.ts +4 -0
  285. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.d.ts.map +1 -0
  286. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.js +17 -0
  287. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.js.map +1 -0
  288. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.spec.d.ts +2 -0
  289. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.spec.d.ts.map +1 -0
  290. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.spec.js +66 -0
  291. package/dist/esm/src/helper/pure-function/room-raw-payload-parser.spec.js.map +1 -0
  292. package/dist/esm/src/helper/pure-function/vcard-parser.d.ts +28 -0
  293. package/dist/esm/src/helper/pure-function/vcard-parser.d.ts.map +1 -0
  294. package/dist/esm/src/helper/pure-function/vcard-parser.js +102 -0
  295. package/dist/esm/src/helper/pure-function/vcard-parser.js.map +1 -0
  296. package/dist/esm/src/helper/schedule/schedule-manager.d.ts +19 -0
  297. package/dist/esm/src/helper/schedule/schedule-manager.d.ts.map +1 -0
  298. package/dist/esm/src/helper/schedule/schedule-manager.js +43 -0
  299. package/dist/esm/src/helper/schedule/schedule-manager.js.map +1 -0
  300. package/dist/esm/src/helper/schedule/schedule-manager.spec.d.ts +2 -0
  301. package/dist/esm/src/helper/schedule/schedule-manager.spec.d.ts.map +1 -0
  302. package/dist/esm/src/helper/schedule/schedule-manager.spec.js +40 -0
  303. package/dist/esm/src/helper/schedule/schedule-manager.spec.js.map +1 -0
  304. package/dist/esm/src/manager-event.d.ts +18 -0
  305. package/dist/esm/src/manager-event.d.ts.map +1 -0
  306. package/dist/esm/src/manager-event.js +2 -0
  307. package/dist/esm/src/manager-event.js.map +1 -0
  308. package/dist/esm/src/manager.d.ts +67 -0
  309. package/dist/esm/src/manager.d.ts.map +1 -0
  310. package/dist/esm/src/manager.js +264 -0
  311. package/dist/esm/src/manager.js.map +1 -0
  312. package/dist/esm/src/manager.spec.d.ts +3 -0
  313. package/dist/esm/src/manager.spec.d.ts.map +1 -0
  314. package/dist/esm/src/manager.spec.js +33 -0
  315. package/dist/esm/src/manager.spec.js.map +1 -0
  316. package/dist/esm/src/mod.d.ts +5 -0
  317. package/dist/esm/src/mod.d.ts.map +1 -0
  318. package/dist/esm/src/mod.js +5 -0
  319. package/dist/esm/src/mod.js.map +1 -0
  320. package/dist/esm/src/package-json.d.ts +6 -0
  321. package/dist/esm/src/package-json.d.ts.map +1 -0
  322. package/dist/esm/src/package-json.js +90 -0
  323. package/dist/esm/src/package-json.js.map +1 -0
  324. package/dist/esm/src/package-json.spec.d.ts +3 -0
  325. package/dist/esm/src/package-json.spec.d.ts.map +1 -0
  326. package/dist/esm/src/package-json.spec.js +8 -0
  327. package/dist/esm/src/package-json.spec.js.map +1 -0
  328. package/dist/esm/src/puppet-mixin/contact-self.d.ts +5 -0
  329. package/dist/esm/src/puppet-mixin/contact-self.d.ts.map +1 -0
  330. package/dist/esm/src/puppet-mixin/contact-self.js +16 -0
  331. package/dist/esm/src/puppet-mixin/contact-self.js.map +1 -0
  332. package/dist/esm/src/puppet-mixin/contact.d.ts +16 -0
  333. package/dist/esm/src/puppet-mixin/contact.d.ts.map +1 -0
  334. package/dist/esm/src/puppet-mixin/contact.js +87 -0
  335. package/dist/esm/src/puppet-mixin/contact.js.map +1 -0
  336. package/dist/esm/src/puppet-mixin/conversation.d.ts +2 -0
  337. package/dist/esm/src/puppet-mixin/conversation.d.ts.map +1 -0
  338. package/dist/esm/src/puppet-mixin/conversation.js +8 -0
  339. package/dist/esm/src/puppet-mixin/conversation.js.map +1 -0
  340. package/dist/esm/src/puppet-mixin/friendship.d.ts +12 -0
  341. package/dist/esm/src/puppet-mixin/friendship.d.ts.map +1 -0
  342. package/dist/esm/src/puppet-mixin/friendship.js +63 -0
  343. package/dist/esm/src/puppet-mixin/friendship.js.map +1 -0
  344. package/dist/esm/src/puppet-mixin/message.d.ts +57 -0
  345. package/dist/esm/src/puppet-mixin/message.d.ts.map +1 -0
  346. package/dist/esm/src/puppet-mixin/message.js +282 -0
  347. package/dist/esm/src/puppet-mixin/message.js.map +1 -0
  348. package/dist/esm/src/puppet-mixin/room.d.ts +42 -0
  349. package/dist/esm/src/puppet-mixin/room.d.ts.map +1 -0
  350. package/dist/esm/src/puppet-mixin/room.js +273 -0
  351. package/dist/esm/src/puppet-mixin/room.js.map +1 -0
  352. package/dist/esm/src/puppet-mixin/tag.d.ts +5 -0
  353. package/dist/esm/src/puppet-mixin/tag.d.ts.map +1 -0
  354. package/dist/esm/src/puppet-mixin/tag.js +20 -0
  355. package/dist/esm/src/puppet-mixin/tag.js.map +1 -0
  356. package/dist/esm/src/puppet-whatsapp.d.ts +145 -0
  357. package/dist/esm/src/puppet-whatsapp.d.ts.map +1 -0
  358. package/dist/esm/src/puppet-whatsapp.js +280 -0
  359. package/dist/esm/src/puppet-whatsapp.js.map +1 -0
  360. package/dist/esm/src/puppet-whatsapp.spec.d.ts +3 -0
  361. package/dist/esm/src/puppet-whatsapp.spec.d.ts.map +1 -0
  362. package/dist/esm/src/puppet-whatsapp.spec.js +23 -0
  363. package/dist/esm/src/puppet-whatsapp.spec.js.map +1 -0
  364. package/dist/esm/src/request/rate-manager.d.ts +21 -0
  365. package/dist/esm/src/request/rate-manager.d.ts.map +1 -0
  366. package/dist/esm/src/request/rate-manager.js +85 -0
  367. package/dist/esm/src/request/rate-manager.js.map +1 -0
  368. package/dist/esm/src/request/request-manager.d.ts +54 -0
  369. package/dist/esm/src/request/request-manager.d.ts.map +1 -0
  370. package/dist/esm/src/request/request-manager.js +124 -0
  371. package/dist/esm/src/request/request-manager.js.map +1 -0
  372. package/dist/esm/src/request/request-pool.d.ts +10 -0
  373. package/dist/esm/src/request/request-pool.d.ts.map +1 -0
  374. package/dist/esm/src/request/request-pool.js +40 -0
  375. package/dist/esm/src/request/request-pool.js.map +1 -0
  376. package/dist/esm/src/request/request-pool.spec.d.ts +2 -0
  377. package/dist/esm/src/request/request-pool.spec.d.ts.map +1 -0
  378. package/dist/esm/src/request/request-pool.spec.js +34 -0
  379. package/dist/esm/src/request/request-pool.spec.js.map +1 -0
  380. package/dist/esm/src/schema/event-name.d.ts +9 -0
  381. package/dist/esm/src/schema/event-name.d.ts.map +1 -0
  382. package/dist/esm/src/schema/event-name.js +10 -0
  383. package/dist/esm/src/schema/event-name.js.map +1 -0
  384. package/dist/esm/src/schema/index.d.ts +2 -0
  385. package/dist/esm/src/schema/index.d.ts.map +1 -0
  386. package/dist/esm/src/schema/index.js +2 -0
  387. package/dist/esm/src/schema/index.js.map +1 -0
  388. package/dist/esm/src/schema/whatsapp-interface.d.ts +18 -0
  389. package/dist/esm/src/schema/whatsapp-interface.d.ts.map +1 -0
  390. package/dist/esm/src/schema/whatsapp-interface.js +20 -0
  391. package/dist/esm/src/schema/whatsapp-interface.js.map +1 -0
  392. package/dist/esm/src/schema/whatsapp-type.d.ts +42 -0
  393. package/dist/esm/src/schema/whatsapp-type.d.ts.map +1 -0
  394. package/dist/esm/src/schema/whatsapp-type.js +2 -0
  395. package/dist/esm/src/schema/whatsapp-type.js.map +1 -0
  396. package/dist/esm/src/whatsapp/event-handler/group-event-handler.d.ts +8 -0
  397. package/dist/esm/src/whatsapp/event-handler/group-event-handler.d.ts.map +1 -0
  398. package/dist/esm/src/whatsapp/event-handler/group-event-handler.js +78 -0
  399. package/dist/esm/src/whatsapp/event-handler/group-event-handler.js.map +1 -0
  400. package/dist/esm/src/whatsapp/event-handler/login-event-handler.d.ts +24 -0
  401. package/dist/esm/src/whatsapp/event-handler/login-event-handler.d.ts.map +1 -0
  402. package/dist/esm/src/whatsapp/event-handler/login-event-handler.js +174 -0
  403. package/dist/esm/src/whatsapp/event-handler/login-event-handler.js.map +1 -0
  404. package/dist/esm/src/whatsapp/event-handler/message-event-handler.d.ts +35 -0
  405. package/dist/esm/src/whatsapp/event-handler/message-event-handler.d.ts.map +1 -0
  406. package/dist/esm/src/whatsapp/event-handler/message-event-handler.js +197 -0
  407. package/dist/esm/src/whatsapp/event-handler/message-event-handler.js.map +1 -0
  408. package/dist/esm/src/whatsapp/whatsapp-base.d.ts +26 -0
  409. package/dist/esm/src/whatsapp/whatsapp-base.d.ts.map +1 -0
  410. package/dist/esm/src/whatsapp/whatsapp-base.js +63 -0
  411. package/dist/esm/src/whatsapp/whatsapp-base.js.map +1 -0
  412. package/dist/esm/src/whatsapp/whatsapp-manager.d.ts +16 -0
  413. package/dist/esm/src/whatsapp/whatsapp-manager.d.ts.map +1 -0
  414. package/dist/esm/src/whatsapp/whatsapp-manager.js +128 -0
  415. package/dist/esm/src/whatsapp/whatsapp-manager.js.map +1 -0
  416. package/dist/esm/tests/integration.spec.d.ts +3 -0
  417. package/dist/esm/tests/integration.spec.d.ts.map +1 -0
  418. package/dist/esm/tests/integration.spec.js +6 -0
  419. package/dist/esm/tests/integration.spec.js.map +1 -0
  420. package/dist/esm/tests/memory-card.spec.d.ts +2 -0
  421. package/dist/esm/tests/memory-card.spec.d.ts.map +1 -0
  422. package/dist/esm/tests/memory-card.spec.js +23 -0
  423. package/dist/esm/tests/memory-card.spec.js.map +1 -0
  424. package/dist/esm/tests/qrcode.spec.d.ts +2 -0
  425. package/dist/esm/tests/qrcode.spec.d.ts.map +1 -0
  426. package/dist/esm/tests/qrcode.spec.js +26 -0
  427. package/dist/esm/tests/qrcode.spec.js.map +1 -0
  428. package/package.json +89 -0
  429. package/src/config.ts +70 -0
  430. package/src/data/cache-manager.spec.ts +33 -0
  431. package/src/data/cache-manager.ts +331 -0
  432. package/src/exception/error-type.ts +59 -0
  433. package/src/exception/whatsapp-error.spec.ts +26 -0
  434. package/src/exception/whatsapp-error.ts +15 -0
  435. package/src/helper/index.ts +3 -0
  436. package/src/helper/miscellaneous.ts +45 -0
  437. package/src/helper/pure-function/contact-raw-payload-parser.spec.ts +67 -0
  438. package/src/helper/pure-function/contact-raw-payload-parser.ts +36 -0
  439. package/src/helper/pure-function/convert-function.ts +24 -0
  440. package/src/helper/pure-function/index.ts +4 -0
  441. package/src/helper/pure-function/message-raw-payload-parser.spec.ts +243 -0
  442. package/src/helper/pure-function/message-raw-payload-parser.ts +117 -0
  443. package/src/helper/pure-function/room-event-generator.spec.ts +120 -0
  444. package/src/helper/pure-function/room-event-generator.ts +63 -0
  445. package/src/helper/pure-function/room-raw-payload-parser.spec.ts +70 -0
  446. package/src/helper/pure-function/room-raw-payload-parser.ts +19 -0
  447. package/src/helper/pure-function/vcard-parser.ts +128 -0
  448. package/src/helper/schedule/schedule-manager.spec.ts +46 -0
  449. package/src/helper/schedule/schedule-manager.ts +52 -0
  450. package/src/manager-event.ts +18 -0
  451. package/src/manager.spec.ts +40 -0
  452. package/src/manager.ts +297 -0
  453. package/src/mod.ts +8 -0
  454. package/src/package-json.spec.ts +10 -0
  455. package/src/package-json.ts +93 -0
  456. package/src/puppet-mixin/contact-self.ts +20 -0
  457. package/src/puppet-mixin/contact.ts +107 -0
  458. package/src/puppet-mixin/conversation.ts +12 -0
  459. package/src/puppet-mixin/friendship.ts +88 -0
  460. package/src/puppet-mixin/message.ts +311 -0
  461. package/src/puppet-mixin/room.ts +334 -0
  462. package/src/puppet-mixin/tag.ts +34 -0
  463. package/src/puppet-whatsapp.spec.ts +30 -0
  464. package/src/puppet-whatsapp.ts +339 -0
  465. package/src/request/rate-manager.ts +118 -0
  466. package/src/request/request-manager.ts +174 -0
  467. package/src/request/request-pool.spec.ts +36 -0
  468. package/src/request/request-pool.ts +45 -0
  469. package/src/schema/event-name.ts +8 -0
  470. package/src/schema/fix-type.d.ts +63 -0
  471. package/src/schema/index.ts +1 -0
  472. package/src/schema/whatsapp-interface.ts +31 -0
  473. package/src/schema/whatsapp-type.ts +79 -0
  474. package/src/typings.d.ts +0 -0
  475. package/src/whatsapp/event-handler/group-event-handler.ts +95 -0
  476. package/src/whatsapp/event-handler/login-event-handler.ts +210 -0
  477. package/src/whatsapp/event-handler/message-event-handler.ts +230 -0
  478. package/src/whatsapp/whatsapp-base.ts +78 -0
  479. package/src/whatsapp/whatsapp-manager.ts +160 -0
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Wechaty - https://github.com/chatie/wechaty
3
+ *
4
+ * @copyright 2016-2018 Huan LI <zixia@zixia.net>
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ *
18
+ */
19
+ import * as PUPPET from '@juzi/wechaty-puppet'
20
+ import { log } from '@juzi/wechaty-puppet'
21
+ import type { MemoryCard } from 'memory-card'
22
+
23
+ import {
24
+ VERSION,
25
+ } from './config.js'
26
+
27
+ import Manager from './manager.js'
28
+ import type { RequestManagerAPIs } from './request/request-manager.js'
29
+ import type { ClientOptions, WhatsAppClientType } from './schema/whatsapp-type.js'
30
+ import WAError from './exception/whatsapp-error.js'
31
+ import { WA_ERROR_TYPE } from './exception/error-type.js'
32
+ import { EventName } from './schema/event-name.js'
33
+ import { RequestPool } from './request/request-pool.js'
34
+ import { contactSelfQRCode, contactSelfName, contactSelfSignature } from './puppet-mixin/contact-self.js'
35
+ import { contactAlias, contactPhone, contactCorporationRemark, contactDescription, contactList, contactAvatar, contactRawPayloadParser, contactRawPayload } from './puppet-mixin/contact.js'
36
+ import { conversationReadMark } from './puppet-mixin/conversation.js'
37
+ import { friendshipRawPayload, friendshipRawPayloadParser, friendshipSearchPhone, friendshipSearchWeixin, friendshipAdd, friendshipAccept, friendshipSearchHandle } from './puppet-mixin/friendship.js'
38
+ import { messageContact, messageImage, messageRecall, messageFile, messageUrl, messageMiniProgram, messageSendText, messageSendFile, messageSendContact, messageSendUrl, messageSendMiniProgram, messageForward, messageRawPayloadParser, messageRawPayload, messagePost } from './puppet-mixin/message.js'
39
+ import { roomRawPayloadParser, roomRawPayload, roomList, roomDel, roomAvatar, roomAdd, roomTopic, roomCreate, roomQuit, roomQRCode, roomMemberList, roomMemberRawPayload, roomMemberRawPayloadParser, roomAnnounce, roomInvitationAccept, roomInvitationRawPayload, roomInvitationRawPayloadParser } from './puppet-mixin/room.js'
40
+ import { tagContactAdd, tagContactRemove, tagContactDelete, tagContactList } from './puppet-mixin/tag.js'
41
+
42
+ // import { Attachment } from './mock/user/types'
43
+ type ManagerWithRequestManager = Manager & RequestManagerAPIs
44
+
45
+ export type PuppetWhatsAppOptions = PUPPET.PuppetOptions & {
46
+ memory?: MemoryCard
47
+ puppeteerOptions?: ClientOptions
48
+ }
49
+
50
+ const PRE = 'PuppetWhatsapp'
51
+
52
+ class PuppetWhatsapp extends PUPPET.Puppet {
53
+
54
+ static override readonly VERSION = VERSION
55
+
56
+ public manager: ManagerWithRequestManager
57
+
58
+ constructor (
59
+ override options: PuppetWhatsAppOptions = {},
60
+ ) {
61
+ super(options)
62
+ log.verbose(PRE, 'constructor()')
63
+
64
+ this.manager = new Manager(this.options) as ManagerWithRequestManager
65
+ }
66
+
67
+ override version () {
68
+ return VERSION
69
+ }
70
+
71
+ override async onStart (): Promise<void> {
72
+ log.verbose(PRE, 'onStart()')
73
+
74
+ let whatsapp: WhatsAppClientType
75
+ try {
76
+ whatsapp = await this.startManager(this.manager)
77
+ } catch (err) {
78
+ log.error(PRE, `Can not start whatsapp, error: ${(err as Error).message}`)
79
+ throw WAError(WA_ERROR_TYPE.ERR_INIT, `Can not start whatsapp, error: ${(err as Error).message}`)
80
+ }
81
+
82
+ /**
83
+ * Huan(202102): Wait for Puppeteer to be inited before resolve start() for robust state management
84
+ */
85
+ const future = new Promise<void>(resolve => {
86
+ function check () {
87
+ if (whatsapp.pupBrowser) {
88
+ resolve()
89
+ } else {
90
+ setTimeout(check, 100)
91
+ }
92
+ }
93
+
94
+ check()
95
+ })
96
+
97
+ return Promise.race([
98
+ future,
99
+ this.state.stable('inactive'),
100
+ ])
101
+ }
102
+
103
+ private async startManager (manager: Manager) {
104
+ manager.on({
105
+ dirty: this.onDirty.bind(this),
106
+ error: this.onError.bind(this),
107
+ friendship: this.onFriendship.bind(this),
108
+ heartbeat: data => this.emit('heartbeat', {
109
+ data,
110
+ }),
111
+ login: this.onLogin.bind(this),
112
+ logout: this.onLogout.bind(this),
113
+ message: this.onMessage.bind(this),
114
+ ready: this.onReady.bind(this),
115
+ reset: this.onReset.bind(this),
116
+ 'room-invite': this.onRoomInvite.bind(this),
117
+ 'room-join': this.onRoomJoin.bind(this),
118
+ 'room-leave': this.onRoomLeave.bind(this),
119
+ 'room-topic': this.onRoomTopic.bind(this),
120
+ scan: this.onScan.bind(this),
121
+ })
122
+
123
+ const memory = this.memory
124
+ const whatsapp = await this.manager.start(memory)
125
+ return whatsapp
126
+ }
127
+
128
+ override async onStop (): Promise<void> {
129
+ log.verbose(PRE, 'onStop()')
130
+ try {
131
+ await this.stopManager()
132
+ } catch (err) {
133
+ log.error(PRE, `Can not stop, error: ${(err as Error).message}`)
134
+ }
135
+ }
136
+
137
+ private async stopManager () {
138
+ this.manager.off('*')
139
+ await this.manager.stop()
140
+ }
141
+
142
+ /**
143
+ * Event section: onXXX
144
+ */
145
+ private async onLogin (wxid: string): Promise<void> {
146
+ log.verbose(PRE, 'onLogin(%s)', wxid)
147
+
148
+ if (this.isLoggedIn) {
149
+ log.warn(PRE, 'onLogin(%s) already login? NOOP', wxid)
150
+ return
151
+ }
152
+ log.info(PRE, `${EventName.LOGIN}, ${wxid}`)
153
+
154
+ await super.login(wxid)
155
+ // no need to emit login since super.login will do that
156
+ // this.emit('login', { contactId: wxid })
157
+ }
158
+
159
+ private async onLogout (wxid: string, message: string): Promise<void> {
160
+ log.verbose(PRE, 'onLogout(%s, %s)', wxid, message)
161
+
162
+ if (!this.isLoggedIn) {
163
+ log.warn(PRE, 'onLogout(%s) already logged out?', wxid)
164
+ }
165
+ log.info(PRE, `${EventName.LOGOUT}, ${wxid}`)
166
+
167
+ const requestPool = RequestPool.Instance
168
+ requestPool.clearPool()
169
+
170
+ this.emit('logout', { contactId: wxid, data: message })
171
+ }
172
+
173
+ private async onMessage (message: PUPPET.payloads.EventMessage): Promise<void> {
174
+ log.verbose(PRE, 'onMessage(%s)', JSON.stringify(message))
175
+ this.emit('message', message)
176
+ }
177
+
178
+ private async onScan (payload: PUPPET.payloads.EventScan): Promise<void> {
179
+ log.verbose(PRE, 'onScan(%s)', JSON.stringify(payload))
180
+
181
+ log.info(PRE, `${EventName.SCAN}`)
182
+ this.emit('scan', payload)
183
+ }
184
+
185
+ private async onError (e: string) {
186
+ log.info(PRE, `${EventName.ERROR}, ${e}`)
187
+ this.emit('error', {
188
+ data: e,
189
+ })
190
+ }
191
+
192
+ private async onReset (reason: string) {
193
+ log.info(PRE, `${EventName.RESET}, ${reason}`)
194
+ this.emit('reset', { data: reason } as PUPPET.payloads.EventReset)
195
+ }
196
+
197
+ private async onFriendship (payload: PUPPET.payloads.EventFriendship): Promise<void> {
198
+ const contactId = await this.messageContact(payload.friendshipId)
199
+ // NOTE: this function automatically put non-contact into cache
200
+ await this.contactRawPayload(contactId)
201
+ this.emit('friendship', payload)
202
+ }
203
+
204
+ private async onRoomJoin (payload: PUPPET.payloads.EventRoomJoin) {
205
+ const roomId = payload.roomId
206
+ await this.dirtyPayload(PUPPET.types.Payload.Room, roomId)
207
+ this.emit('room-join', payload)
208
+ }
209
+
210
+ private async onRoomLeave (payload: PUPPET.payloads.EventRoomLeave) {
211
+ const roomId = payload.roomId
212
+ await this.dirtyPayload(PUPPET.types.Payload.Room, roomId)
213
+ this.emit('room-leave', payload)
214
+ }
215
+
216
+ private async onRoomTopic (payload: PUPPET.payloads.EventRoomTopic) {
217
+ const roomId = payload.roomId
218
+ await this.dirtyPayload(PUPPET.types.Payload.Room, roomId)
219
+ this.emit('room-topic', payload)
220
+ }
221
+
222
+ private async onRoomInvite (payload: PUPPET.payloads.EventRoomInvite) {
223
+ this.emit('room-invite', payload)
224
+ }
225
+
226
+ private async onReady () {
227
+ log.verbose(PRE, 'onReady()')
228
+
229
+ log.info(PRE, `${EventName.READY}`)
230
+ this.emit('ready', { data: 'ready' })
231
+ }
232
+
233
+ /**
234
+ * Override Methods
235
+ */
236
+
237
+ override async logout () {
238
+ await super.logout()
239
+ if (!this.isLoggedIn) {
240
+ log.verbose(PRE, 'logout() do nothing')
241
+ return
242
+ }
243
+ return this.manager.logout()
244
+ }
245
+
246
+ override ding (data?: string): void {
247
+ log.silly(PRE, 'ding(%s)', data || '')
248
+ setTimeout(() => this.emit('dong', { data: data || '' }), 1000)
249
+ }
250
+
251
+ /**
252
+ * ContactSelf
253
+ */
254
+ override contactSelfQRCode = contactSelfQRCode
255
+ override contactSelfName = contactSelfName
256
+ override contactSelfSignature = contactSelfSignature
257
+
258
+ /**
259
+ * Contact
260
+ */
261
+ override contactAlias = contactAlias
262
+ override contactPhone = contactPhone
263
+ override contactCorporationRemark = contactCorporationRemark
264
+ override contactDescription = contactDescription
265
+ override contactList = contactList
266
+ override contactAvatar = contactAvatar
267
+ override contactRawPayloadParser = contactRawPayloadParser
268
+ override contactRawPayload = contactRawPayload
269
+
270
+ /**
271
+ * Conversation
272
+ */
273
+ override conversationReadMark = conversationReadMark
274
+
275
+ /**
276
+ * Message
277
+ */
278
+ // FIXME: need to implement in wechaty-puppet
279
+ messagePost = messagePost
280
+ override messageContact = messageContact
281
+ override messageImage = messageImage
282
+ override messageRecall = messageRecall
283
+ override messageFile = messageFile
284
+ override messageUrl = messageUrl
285
+ override messageMiniProgram = messageMiniProgram
286
+ override messageSendText = messageSendText
287
+ override messageSendFile = messageSendFile
288
+ override messageSendContact = messageSendContact
289
+ override messageSendUrl = messageSendUrl
290
+ override messageSendMiniProgram = messageSendMiniProgram
291
+ override messageForward = messageForward
292
+
293
+ override messageRawPayloadParser = messageRawPayloadParser
294
+ override messageRawPayload = messageRawPayload
295
+
296
+ /**
297
+ * Room
298
+ */
299
+ override roomRawPayloadParser = roomRawPayloadParser
300
+ override roomRawPayload = roomRawPayload
301
+ override roomList = roomList
302
+ override roomDel = roomDel
303
+ override roomAvatar = roomAvatar
304
+ override roomAdd = roomAdd
305
+ override roomTopic = roomTopic
306
+ override roomCreate = roomCreate
307
+ override roomQuit = roomQuit
308
+ override roomQRCode = roomQRCode
309
+ override roomMemberList = roomMemberList
310
+ override roomMemberRawPayload = roomMemberRawPayload
311
+ override roomMemberRawPayloadParser = roomMemberRawPayloadParser
312
+ override roomAnnounce = roomAnnounce
313
+ override roomInvitationAccept = roomInvitationAccept
314
+ override roomInvitationRawPayload = roomInvitationRawPayload
315
+ override roomInvitationRawPayloadParser = roomInvitationRawPayloadParser
316
+
317
+ /**
318
+ * Friendship
319
+ */
320
+ override friendshipRawPayload = friendshipRawPayload
321
+ override friendshipRawPayloadParser = friendshipRawPayloadParser
322
+ override friendshipSearchPhone = friendshipSearchPhone
323
+ override friendshipSearchWeixin = friendshipSearchWeixin
324
+ override friendshipSearchHandle = friendshipSearchHandle
325
+ override friendshipAdd = friendshipAdd
326
+ override friendshipAccept = friendshipAccept
327
+
328
+ /**
329
+ * Tag
330
+ */
331
+ override tagContactAdd = tagContactAdd
332
+ override tagContactRemove = tagContactRemove
333
+ override tagContactDelete = tagContactDelete
334
+ override tagContactList = tagContactList
335
+
336
+ }
337
+
338
+ export { PuppetWhatsapp }
339
+ export default PuppetWhatsapp
@@ -0,0 +1,118 @@
1
+ import { EventEmitter } from 'events'
2
+ import { log } from '../config.js'
3
+ import { WA_ERROR_TYPE } from '../exception/error-type.js'
4
+ import WAError from '../exception/whatsapp-error.js'
5
+ import { sleep } from '../helper/miscellaneous.js'
6
+
7
+ interface FunctionObj {
8
+ func: () => any,
9
+ resolve: (data: any) => void,
10
+ reject: (e: any) => void,
11
+ delayBefore?: number,
12
+ delayAfter?: number,
13
+ uniqueKey?: string,
14
+ }
15
+
16
+ export interface RateOptions {
17
+ queueId?: string,
18
+ delayBefore?: number,
19
+ delayAfter?: number,
20
+ uniqueKey?: string,
21
+ }
22
+
23
+ type RateManagerEvents = 'error'
24
+
25
+ const MAX_QUEUE_SIZE = 5000
26
+
27
+ export class RateManager extends EventEmitter {
28
+
29
+ private counter = 0
30
+
31
+ public override emit(event: 'error', error: string): boolean
32
+ public override emit(event: never, ...args: never[]): never
33
+ public override emit (event: RateManagerEvents, ...args: any[]): boolean {
34
+ return super.emit(event, ...args)
35
+ }
36
+
37
+ public override on(event: 'error', listener: (error: string) => void): this
38
+ public override on(event: never, listener: never): never
39
+ public override on (event: RateManagerEvents, listener: (...args: any[]) => void): this {
40
+ super.on(event, listener)
41
+ return this
42
+ }
43
+
44
+ private functionQueueMap: { [id: string]: FunctionObj[] } = {}
45
+ private runningMap: { [id: string]: boolean } = {}
46
+
47
+ public getQueueLength (queueId: string) {
48
+ if (!this.functionQueueMap[queueId]) {
49
+ return 0
50
+ }
51
+ return this.functionQueueMap[queueId]!.length
52
+ }
53
+
54
+ public async exec<T> (func: () => T, options: RateOptions = {}) {
55
+ const queueId = options.queueId || 'default'
56
+ const { delayAfter, delayBefore, uniqueKey } = options
57
+
58
+ if (!this.functionQueueMap[queueId]) {
59
+ this.functionQueueMap[queueId] = []
60
+ }
61
+
62
+ if (this.functionQueueMap[queueId]!.length > MAX_QUEUE_SIZE) {
63
+ if (this.counter % MAX_QUEUE_SIZE === 0) {
64
+ log.error(`EXCEED_QUEUE_SIZE: Max queue size for id: ${queueId} reached: ${this.functionQueueMap[queueId]!.length} > ${MAX_QUEUE_SIZE}(max queue size). Drop these tasks.`)
65
+ this.counter = 0
66
+ }
67
+ this.counter++
68
+ }
69
+
70
+ return new Promise<T>((resolve, reject) => {
71
+ this.functionQueueMap[queueId]!.push({ delayAfter, delayBefore, func, reject, resolve, uniqueKey })
72
+ if (!this.runningMap[queueId]) {
73
+ this.runningMap[queueId] = true
74
+ void this.execNext(queueId)
75
+ }
76
+ })
77
+ }
78
+
79
+ private async execNext (queueId: string) {
80
+ const queue = this.functionQueueMap[queueId]
81
+ if (!queue) {
82
+ return
83
+ }
84
+
85
+ const funcObj = queue.shift()
86
+ if (!funcObj) {
87
+ throw WAError(WA_ERROR_TYPE.ERR_RATE_FUNCTION_NOT_FOUND, `can not get funcObj from queue with id: ${queueId}.`)
88
+ }
89
+ const { delayAfter, delayBefore, func, resolve, reject, uniqueKey } = funcObj
90
+ await sleep(delayBefore)
91
+ try {
92
+ const result = await func()
93
+ resolve(result)
94
+ /**
95
+ * If uniqueKey is given, will resolve functions with same key in the queue
96
+ */
97
+ if (uniqueKey) {
98
+ const sameFuncIndexes = queue.map((f, index) => ({ func: f, index }))
99
+ .filter(o => o.func.uniqueKey === uniqueKey)
100
+ .map(o => o.index)
101
+ .sort((a, b) => b - a)
102
+ for (const index of sameFuncIndexes) {
103
+ const [sameFunc] = queue.splice(index, 1)
104
+ sameFunc!.resolve(result)
105
+ }
106
+ }
107
+ } catch (e) {
108
+ reject(e)
109
+ }
110
+ await sleep(delayAfter)
111
+ if (queue.length > 0) {
112
+ await this.execNext(queueId)
113
+ } else {
114
+ delete this.runningMap[queueId]
115
+ }
116
+ }
117
+
118
+ }
@@ -0,0 +1,174 @@
1
+ import type {
2
+ WhatsAppClientType,
3
+ WhatsAppContact,
4
+ InviteV4Data,
5
+ MessageContent,
6
+ MessageSendOptions,
7
+ CreateGroupResult,
8
+ } from '../schema/whatsapp-type.js'
9
+ import { RateManager } from './rate-manager.js'
10
+
11
+ export class RequestManager {
12
+
13
+ private whatsapp: WhatsAppClientType
14
+ private rateManager: RateManager
15
+
16
+ constructor (whatsapp: WhatsAppClientType) {
17
+ this.whatsapp = whatsapp
18
+ this.rateManager = new RateManager()
19
+ }
20
+
21
+ public logout () {
22
+ return this.whatsapp.logout()
23
+ }
24
+
25
+ public acceptPrivateRoomInvite (invitation: InviteV4Data) {
26
+ return this.whatsapp.acceptGroupV4Invite(invitation)
27
+ }
28
+
29
+ public acceptRoomInvite (inviteCode: string) {
30
+ return this.whatsapp.acceptInvite(inviteCode)
31
+ }
32
+
33
+ public archiveChat (chatId: string) {
34
+ return this.whatsapp.archiveChat(chatId)
35
+ }
36
+
37
+ public unarchiveChat (chatId: string) {
38
+ return this.whatsapp.unarchiveChat(chatId)
39
+ }
40
+
41
+ public createRoom (name: string, participants: WhatsAppContact[] | string[]): Promise<CreateGroupResult> {
42
+ return this.whatsapp.createGroup(name, participants) as unknown as Promise<CreateGroupResult>
43
+ }
44
+
45
+ public destroy () {
46
+ return this.whatsapp.destroy()
47
+ }
48
+
49
+ public getBLockedContacts () {
50
+ return this.whatsapp.getBlockedContacts()
51
+ }
52
+
53
+ public getChatById (chatId: string) {
54
+ return this.whatsapp.getChatById(chatId)
55
+ }
56
+
57
+ public getChatLabels (chatId: string) {
58
+ return this.whatsapp.getChatLabels(chatId)
59
+ }
60
+
61
+ public getChats () {
62
+ return this.whatsapp.getChats()
63
+ }
64
+
65
+ public getChatsByLabelId (labelId: string) {
66
+ return this.whatsapp.getChatsByLabelId(labelId)
67
+ }
68
+
69
+ public getContactById (contactId: string) {
70
+ return this.whatsapp.getContactById(contactId)
71
+ }
72
+
73
+ public getContacts () {
74
+ return this.whatsapp.getContacts()
75
+ }
76
+
77
+ public getCountryCode (whatsappId: string) {
78
+ return this.whatsapp.getCountryCode(whatsappId)
79
+ }
80
+
81
+ public getFormattedNumber (whatsappId: string) {
82
+ return this.whatsapp.getFormattedNumber(whatsappId)
83
+ }
84
+
85
+ public getInviteInfo (inviteId: string) {
86
+ return this.whatsapp.getInviteInfo(inviteId)
87
+ }
88
+
89
+ public getLabelById (labelId: string) {
90
+ return this.whatsapp.getLabelById(labelId)
91
+ }
92
+
93
+ public getLabels () {
94
+ return this.whatsapp.getLabels()
95
+ }
96
+
97
+ public getWhatsappIdByNumber (number: string) {
98
+ return this.whatsapp.getNumberId(number)
99
+ }
100
+
101
+ public getAvatarUrl (contactId: string) {
102
+ return this.whatsapp.getProfilePicUrl(contactId)
103
+ }
104
+
105
+ public getState () {
106
+ return this.whatsapp.getState()
107
+ }
108
+
109
+ public getWhatsAppVersion () {
110
+ return this.whatsapp.getWWebVersion()
111
+ }
112
+
113
+ public init () {
114
+ return this.whatsapp.initialize()
115
+ }
116
+
117
+ public isWhatsappUser (contactId: string) {
118
+ return this.whatsapp.isRegisteredUser(contactId)
119
+ }
120
+
121
+ public markChatUnread (chatId: string) {
122
+ return this.whatsapp.markChatUnread(chatId)
123
+ }
124
+
125
+ public muteChat (chatId: string) {
126
+ return this.whatsapp.muteChat(chatId)
127
+ }
128
+
129
+ public unmuteChat (chatId: string) {
130
+ return this.whatsapp.unmuteChat(chatId)
131
+ }
132
+
133
+ public pinChat (chatId: string) {
134
+ return this.whatsapp.pinChat(chatId)
135
+ }
136
+
137
+ public unpinChat (chatId: string) {
138
+ return this.whatsapp.unpinChat(chatId)
139
+ }
140
+
141
+ public resetConnection () {
142
+ return this.whatsapp.resetState()
143
+ }
144
+
145
+ public searchMessage (query: string, options?: { chatId?: string, page?: number, limit?: number }) {
146
+ return this.whatsapp.searchMessages(query, options)
147
+ }
148
+
149
+ public sendMessage (chatId: string, content: MessageContent, options?: MessageSendOptions) {
150
+ return this.rateManager.exec(async () => {
151
+ return this.whatsapp.sendMessage(chatId, content, options)
152
+ }, { delayAfter: 1, queueId: chatId })
153
+ }
154
+
155
+ public sendPresenceAvailable () {
156
+ return this.whatsapp.sendPresenceAvailable()
157
+ }
158
+
159
+ public markChatRead (chatId: string) {
160
+ return this.whatsapp.sendSeen(chatId)
161
+ }
162
+
163
+ public setNickname (name: string) {
164
+ return this.whatsapp.setDisplayName(name)
165
+ }
166
+
167
+ public setStatusMessage (status: string) {
168
+ return this.whatsapp.setStatus(status)
169
+ }
170
+
171
+ }
172
+
173
+ export type RequestManagerAPIs = Pick<RequestManager, {readonly [K in keyof RequestManager]: RequestManager[K] extends Function ? K : never}[keyof RequestManager]>
174
+ export const requestManagerKeys = Object.getOwnPropertyNames(RequestManager.prototype)
@@ -0,0 +1,36 @@
1
+ import { RequestPool } from './request-pool.js'
2
+ import { test } from 'tstest'
3
+
4
+ test('RequestPool request resolve test', async t => {
5
+ try {
6
+ const requestPool = RequestPool.Instance
7
+ t.ok(requestPool instanceof RequestPool)
8
+
9
+ const time = Date.now()
10
+ setTimeout(() => {
11
+ requestPool.resolveRequest('testRequest')
12
+ }, 3000)
13
+ // eslint-disable-next-line promise/always-return
14
+ await requestPool.pushRequest('testRequest')
15
+ t.ok(Math.abs(Date.now() - time - 3000) < 20)
16
+
17
+ t.pass('RequestPool request resolve test pass')
18
+ } catch (e) {
19
+ t.fail(e as any)
20
+ }
21
+ })
22
+
23
+ test('RequestPool clear test', async t => {
24
+ try {
25
+ const requestPool = RequestPool.Instance
26
+ t.ok(requestPool instanceof RequestPool)
27
+
28
+ void requestPool.pushRequest('testRequest')
29
+ requestPool.clearPool()
30
+ // @ts-ignore
31
+ t.ok(Object.getOwnPropertyNames(requestPool.poolMap).length === 0)
32
+ t.pass('testRequest clear test pass')
33
+ } catch (e) {
34
+ t.fail(e as any)
35
+ }
36
+ })
@@ -0,0 +1,45 @@
1
+ import { WA_ERROR_TYPE } from '../exception/error-type.js'
2
+ import WAError from '../exception/whatsapp-error.js'
3
+ export class RequestPool {
4
+
5
+ private static _instance?: RequestPool
6
+ private poolMap: {[id: string]: Function[]} = {}
7
+ private constructor () {}
8
+
9
+ public static get Instance () {
10
+ if (!this._instance) {
11
+ this._instance = new RequestPool()
12
+ }
13
+ return this._instance
14
+ }
15
+
16
+ public pushRequest (id: string, timeout?: number) {
17
+ const callback = new Promise<void>((resolve, reject) => {
18
+ if (!this.poolMap[id]) {
19
+ this.poolMap[id] = []
20
+ }
21
+ this.poolMap[id]!.push(resolve)
22
+ if (timeout) {
23
+ setTimeout(reject, timeout)
24
+ }
25
+ }).catch(() => {
26
+ delete this.poolMap[id]
27
+ throw WAError(WA_ERROR_TYPE.ERR_REQUEST_TIMEOUT, `TIMEOUT when processing request :${id}`)
28
+ })
29
+ return callback
30
+ }
31
+
32
+ public resolveRequest (id: string) {
33
+ const callbacks = this.poolMap[id]
34
+ if (!callbacks || callbacks.length === 0) {
35
+ return
36
+ }
37
+ callbacks.forEach(cb => cb())
38
+ delete this.poolMap[id]
39
+ }
40
+
41
+ public clearPool () {
42
+ this.poolMap = {}
43
+ }
44
+
45
+ }