@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,8 @@
1
+ export enum EventName {
2
+ SCAN = 'SCAN',
3
+ LOGIN = 'LOGIN',
4
+ READY = 'READY',
5
+ LOGOUT = 'LOGOUT',
6
+ ERROR = 'ERROR',
7
+ RESET = 'RESET',
8
+ }
@@ -0,0 +1,63 @@
1
+ import type { SetOptional } from 'type-fest'
2
+ import type { Contact, MessageMedia, Client as _Client } from '@juzi/whatsapp-web.js'
3
+ declare module '@juzi/whatsapp-web.js' {
4
+ declare namespace WAWebJS {
5
+ export type CreateGroupResult = {
6
+ gid: {
7
+ server: string
8
+ user: string
9
+ _serialized: string
10
+ }
11
+ missingParticipants: Record<string, string>
12
+ }
13
+
14
+ export enum GroupNotificationTypes {
15
+ ADD = 'add',
16
+ INVITE = 'invite',
17
+ REMOVE = 'remove',
18
+ LEAVE = 'leave',
19
+ SUBJECT = 'subject',
20
+ DESCRIPTION = 'description',
21
+ PICTURE = 'picture',
22
+ ANNOUNCE = 'announce',
23
+ RESTRICT = 'restrict',
24
+ CREATE = 'create',
25
+ }
26
+
27
+ /** Message type buttons */
28
+ export class Buttons {
29
+
30
+ body: string | MessageMedia
31
+ buttons: Array<{ body: string}>
32
+ title?: string | null
33
+ footer?: string | null
34
+
35
+ constructor(body: string, buttons: Array<{ body: string}>, title?: string | null, footer?: string | null)
36
+
37
+ }
38
+ export interface Row {
39
+
40
+ title: string
41
+ description?: string
42
+ }
43
+ export interface Section {
44
+
45
+ title: string
46
+ rows: Row []
47
+ }
48
+
49
+ /** Message type List */
50
+ export class List {
51
+
52
+ body: string
53
+ buttonText: string
54
+ sections: Row []
55
+ title?: string | null
56
+ footer?: string | null
57
+ constructor(body: string, buttonText: string, sections: Array<any>, title?: string | null, footer?: string | null)
58
+
59
+ }
60
+
61
+ }
62
+ export = WAWebJS
63
+ }
@@ -0,0 +1 @@
1
+ export * from './event-name.js'
@@ -0,0 +1,31 @@
1
+ import WAWebJS from '@juzi/whatsapp-web.js'
2
+ import type { Class } from 'type-fest'
3
+
4
+ export enum GroupNotificationTypes {
5
+ ADD = 'add',
6
+ INVITE = 'invite',
7
+ REMOVE = 'remove',
8
+ LEAVE = 'leave',
9
+ SUBJECT = 'subject',
10
+ DESCRIPTION = 'description',
11
+ PICTURE = 'picture',
12
+ ANNOUNCE = 'announce',
13
+ RESTRICT = 'restrict',
14
+ CREATE = 'create',
15
+ }
16
+
17
+ // @ts-ignore
18
+ export const ContactClass = WAWebJS.Contact as Class<WAWebJS.Contact>
19
+ // @ts-ignore
20
+ export const MessageClass = WAWebJS.Message as Class<WAWebJS.Message>
21
+
22
+ export const {
23
+ LocalAuth,
24
+ DefaultOptions,
25
+ MessageMedia,
26
+ MessageAck,
27
+ MessageTypes,
28
+ WAState,
29
+ WhatsWebURL,
30
+ Client,
31
+ } = WAWebJS
@@ -0,0 +1,79 @@
1
+ import type { Location } from '@juzi/whatsapp-web.js'
2
+ import type WhatsApp from '@juzi/whatsapp-web.js'
3
+ import type { SetOptional } from 'type-fest'
4
+
5
+ export type {
6
+ Client as WhatsAppClientType,
7
+ ClientInfo,
8
+ ClientInfoPhone,
9
+ ClientOptions,
10
+ ClientSession,
11
+ BatteryInfo,
12
+ CreateGroupResult,
13
+ // GroupNotification,
14
+ ChatTypes,
15
+ Events,
16
+ MessageAck as MessageAckType,
17
+ Status,
18
+ WAState as WAStateType,
19
+ MessageInfo,
20
+ InviteV4Data,
21
+ Message as WhatsAppMessage,
22
+ // MessageId,
23
+ Location,
24
+ Label,
25
+ MessageSendOptions,
26
+ MediaFromURLOptions,
27
+ // MessageMedia,
28
+ MessageContent,
29
+ Contact as WhatsAppContact,
30
+ ContactId,
31
+ BusinessContact,
32
+ PrivateContact,
33
+ Chat,
34
+ MessageSearchOptions,
35
+ ChatId,
36
+ PrivateChat,
37
+ GroupParticipant,
38
+ ChangeParticipantsPermissions,
39
+ ChangeGroupParticipants,
40
+ // GroupChat,
41
+ ProductMetadata,
42
+ Product,
43
+ Order,
44
+ Payment,
45
+ Call,
46
+ Buttons,
47
+ Row,
48
+ List,
49
+ } from '@juzi/whatsapp-web.js'
50
+
51
+ export interface MessageId {
52
+ fromMe: boolean,
53
+ remote: string | {
54
+ server: string
55
+ user: string
56
+ _serialized: string,
57
+ },
58
+ id: string,
59
+ _serialized: string,
60
+ }
61
+ export type WhatsAppContactPayload = {
62
+ avatar: string
63
+ } & Omit<WhatsApp.Contact, 'getProfilePicUrl' | 'getChat' | 'getCountryCode' | 'getFormattedNumber' | 'block' | 'unblock' | 'getAbout'>
64
+ export type WhatsAppMessagePayload = {mentionedIds: string[], location?:Location, orderId?: string, id: MessageId} & Omit<WhatsApp.Message, 'id' | 'orderId' | 'location' | 'mentionedIds' | 'acceptGroupV4Invite' | 'delete' | 'downloadMedia' | 'getChat' | 'getContact' | 'getMentions' | 'getQuotedMessage' | 'reply' | 'forward' | 'star' | 'unstar' | 'getInfo' | 'getOrder' | 'getPayment' | 'duration' | 'rawData' | 'reload'>
65
+ export interface GroupMetadata {
66
+ desc: string
67
+ owner: WhatsApp.ContactId
68
+ participants: WhatsApp.GroupParticipant[]
69
+ }
70
+ export type GroupChat = {groupMetadata:GroupMetadata} & SetOptional<WhatsApp.GroupChat, 'owner'>
71
+ export interface GroupNotificationId {
72
+ fromMe: boolean,
73
+ remote: string,
74
+ id: string,
75
+ participant?: string,
76
+ _serialized: string,
77
+ }
78
+
79
+ export type GroupNotification = {id: GroupNotificationId} & Omit<WhatsApp.GroupNotification, 'id'>
File without changes
@@ -0,0 +1,95 @@
1
+ /* eslint-disable no-case-declarations */
2
+ import {
3
+ GroupNotificationTypes,
4
+ } from '../../schema/whatsapp-interface.js'
5
+ import WhatsAppBase from '../whatsapp-base.js'
6
+
7
+ import type * as PUPPET from '@juzi/wechaty-puppet'
8
+ import type {
9
+ GroupNotification,
10
+ } from '../../schema/whatsapp-type.js'
11
+ import { log } from '../../config.js'
12
+ import {
13
+ genRoomTopicEvent,
14
+ genRoomAnnounce,
15
+ genRoomJoinEvent,
16
+ } from '../../helper/pure-function/room-event-generator.js'
17
+
18
+ const PRE = 'GroupEventHandler'
19
+
20
+ export default class GroupEventHandler extends WhatsAppBase {
21
+
22
+ public async onRoomJoin (notification: GroupNotification) {
23
+ log.info(PRE, `onRoomJoin(${JSON.stringify(notification)})`)
24
+ const roomId = notification.id.remote
25
+ const roomJoinPayload: PUPPET.payloads.EventRoomJoin = {
26
+ inviteeIdList: notification.recipientIds,
27
+ inviterId: notification.author,
28
+ roomId,
29
+ timestamp: notification.timestamp,
30
+ }
31
+ await this.manager.syncRoomMemberList(roomId)
32
+ this.emit('room-join', roomJoinPayload)
33
+ }
34
+
35
+ public async onRoomLeave (notification: GroupNotification) {
36
+ log.info(PRE, `onRoomLeave(${JSON.stringify(notification)})`)
37
+ const { id, recipientIds } = notification
38
+ const roomId = id.remote
39
+ const isLeaveSelf = id.fromMe && recipientIds.length === 1 && recipientIds[0] === this.getBotId()
40
+ const roomLeavePayload: PUPPET.payloads.EventRoomLeave = {
41
+ removeeIdList: notification.recipientIds,
42
+ removerId: notification.author || isLeaveSelf ? this.getBotId() : '',
43
+ roomId,
44
+ timestamp: notification.timestamp,
45
+ }
46
+ const cacheManager = await this.manager.getCacheManager()
47
+ await cacheManager.removeRoomMemberFromList(roomId, notification.recipientIds)
48
+ this.emit('room-leave', roomLeavePayload)
49
+ }
50
+
51
+ public async onRoomUpdate (notification: GroupNotification) {
52
+ log.info(PRE, `onRoomUpdate(${JSON.stringify(notification)})`)
53
+ const roomId = notification.id.remote
54
+ const cacheManager = await this.manager.getCacheManager()
55
+ let roomPayload = await cacheManager.getContactOrRoomRawPayload(roomId)
56
+
57
+ if (!roomPayload) {
58
+ const rawRoom = await this.manager.requestManager.getContactById(roomId)
59
+ const avatar = await rawRoom.getProfilePicUrl()
60
+ roomPayload = Object.assign(rawRoom, { avatar })
61
+ await cacheManager.setContactOrRoomRawPayload(roomId, roomPayload)
62
+ }
63
+ const type = notification.type
64
+ switch (type) {
65
+ case GroupNotificationTypes.SUBJECT:
66
+ const roomTopicPayload = genRoomTopicEvent(notification, roomPayload)
67
+ roomPayload.name = notification.body
68
+ await cacheManager.setContactOrRoomRawPayload(roomId, roomPayload)
69
+ this.emit('room-topic', roomTopicPayload)
70
+ break
71
+ case GroupNotificationTypes.DESCRIPTION:
72
+ const roomChat = await this.manager.getRoomChatById(roomId)
73
+ const roomMetadata = roomChat.groupMetadata
74
+ const description = roomMetadata.desc
75
+ const msgPayload = genRoomAnnounce(notification, description)
76
+ await this.manager.processMessage(msgPayload as any) // FIXME: how to use method of another class which extends from the same base class.
77
+ break
78
+ case GroupNotificationTypes.CREATE:
79
+ const members = await this.manager.syncRoomMemberList(roomId)
80
+ const roomJoinPayload = genRoomJoinEvent(notification, members)
81
+ this.emit('room-join', roomJoinPayload)
82
+ break
83
+ case GroupNotificationTypes.PICTURE:
84
+ const rawRoom = await this.manager.requestManager.getContactById(roomId)
85
+ const avatar = await rawRoom.getProfilePicUrl() || ''
86
+ const roomPayloadInCache = await cacheManager.getContactOrRoomRawPayload(roomId)
87
+ if (roomPayloadInCache) {
88
+ roomPayloadInCache.avatar = avatar
89
+ await cacheManager.setContactOrRoomRawPayload(roomId, roomPayloadInCache)
90
+ }
91
+ break
92
+ }
93
+ }
94
+
95
+ }
@@ -0,0 +1,210 @@
1
+ /* eslint-disable no-case-declarations */
2
+ import * as PUPPET from '@juzi/wechaty-puppet'
3
+ import {
4
+ MIN_BATTERY_VALUE_FOR_LOGOUT,
5
+ DEFAULT_TIMEOUT,
6
+ log,
7
+ STRINGS,
8
+ LANGUAGE,
9
+ } from '../../config.js'
10
+ import { WA_ERROR_TYPE } from '../../exception/error-type.js'
11
+ import WAError from '../../exception/whatsapp-error.js'
12
+ import {
13
+ WAState,
14
+ } from '../../schema/whatsapp-interface.js'
15
+ import WhatsAppBase from '../whatsapp-base.js'
16
+
17
+ import type {
18
+ WhatsAppContact,
19
+ BatteryInfo,
20
+ WAStateType,
21
+ } from '../../schema/whatsapp-type.js'
22
+ import {
23
+ batchProcess,
24
+ isContactId,
25
+ isRoomId,
26
+ } from '../../helper/miscellaneous.js'
27
+
28
+ const PRE = 'LoginEventHandler'
29
+
30
+ export default class LoginEventHandler extends WhatsAppBase { // FIXME: I have no good idea for this class name.
31
+
32
+ protected loadingData: boolean = false
33
+ private qrcodeOrLoginCheckTimer?: NodeJS.Timer
34
+ private hasLogin: boolean = false
35
+ private lastQRCodeTime = Date.now()
36
+
37
+ public onQRCode (qrcode: string) {
38
+ log.info(PRE, `onQRCode(${qrcode})`)
39
+ // NOTE: This event will not be fired if a session is specified.
40
+ this.lastQRCodeTime = Date.now()
41
+ this.hasLogin = false
42
+ this.emit('scan', { qrcode, status: PUPPET.types.ScanStatus.Waiting })
43
+ this.checkQRCodeOrLoginEvent()
44
+ }
45
+
46
+ private checkQRCodeOrLoginEvent () {
47
+ if (this.qrcodeOrLoginCheckTimer) {
48
+ return
49
+ }
50
+ this.qrcodeOrLoginCheckTimer = setInterval(() => {
51
+ if (!this.hasLogin && Date.now() > this.lastQRCodeTime + 2 * 60 * 1000) {
52
+ this.emit('error', 'can not get scan or login event more than 2 mins')
53
+ }
54
+ }, 25 * 1000)
55
+ }
56
+
57
+ public clearQrcodeOrLoginCheckTimer () {
58
+ if (!this.qrcodeOrLoginCheckTimer) {
59
+ return
60
+ }
61
+ clearInterval(this.qrcodeOrLoginCheckTimer)
62
+ }
63
+
64
+ public async onAuthenticated () {
65
+ log.info(PRE, 'onAuthenticated()')
66
+ }
67
+
68
+ public async onAuthFailure (message: string) {
69
+ log.warn(PRE, 'auth_failure: %s', message)
70
+ // avoid reuse invalid session data
71
+ await this.clearSession()
72
+ }
73
+
74
+ public async onWhatsAppReady () {
75
+ log.verbose(PRE, 'onWhatsAppReady()')
76
+ this.hasLogin = true
77
+ this.clearQrcodeOrLoginCheckTimer()
78
+ const contactOrRoomList = await this.manager.syncContactOrRoomList()
79
+ await this.onLogin(contactOrRoomList)
80
+ await this.onReady(contactOrRoomList)
81
+ this.manager.startSchedule()
82
+ }
83
+
84
+ public async onLogin (contactOrRoomList: WhatsAppContact[]) {
85
+ log.verbose(PRE, 'onLogin()')
86
+ const whatsapp = this.getWhatsAppClient()
87
+ try {
88
+ this.botId = whatsapp.info.wid._serialized
89
+ } catch (error) {
90
+ throw WAError(WA_ERROR_TYPE.ERR_INIT, `Can not get bot id from WhatsApp client, current state: ${await whatsapp.getState()}`, JSON.stringify(error))
91
+ }
92
+ log.info(PRE, `WhatsApp Client Info: ${JSON.stringify(whatsapp.info)}`)
93
+
94
+ await this.manager.initCache(this.botId)
95
+ const cacheManager = await this.manager.getCacheManager()
96
+
97
+ const botSelf = await this.manager.requestManager.getContactById(this.botId)
98
+ await cacheManager.setContactOrRoomRawPayload(this.botId, {
99
+ ...botSelf,
100
+ avatar: await this.manager.requestManager.getAvatarUrl(this.botId),
101
+ })
102
+
103
+ const batchSize = 500
104
+ await batchProcess(batchSize, contactOrRoomList, async (contactOrRoom: WhatsAppContact) => {
105
+ const contactOrRoomId = contactOrRoom.id._serialized
106
+ const contactInCache = await cacheManager.getContactOrRoomRawPayload(contactOrRoomId)
107
+ if (contactInCache) {
108
+ return
109
+ }
110
+ const contactWithAvatar = Object.assign(contactOrRoom, { avatar: '' })
111
+ await cacheManager.setContactOrRoomRawPayload(contactOrRoomId, contactWithAvatar)
112
+ })
113
+
114
+ this.emit('login', this.botId)
115
+ log.info(PRE, `onLogin(${this.botId}})`)
116
+ }
117
+
118
+ public async onReady (contactOrRoomList: WhatsAppContact[]) {
119
+ log.verbose(PRE, 'onReady()')
120
+ if (this.loadingData) {
121
+ log.verbose(PRE, 'onReady() loading data are under process.')
122
+ return
123
+ }
124
+ this.loadingData = true
125
+ let friendCount = 0
126
+ let contactCount = 0
127
+ let roomCount = 0
128
+
129
+ const cacheManager = await this.manager.getCacheManager()
130
+ const batchSize = 100
131
+ await batchProcess(batchSize, contactOrRoomList, async (contactOrRoom: WhatsAppContact) => {
132
+ const contactOrRoomId = contactOrRoom.id._serialized
133
+ const avatar = await contactOrRoom.getProfilePicUrl()
134
+ const contactWithAvatar = Object.assign(contactOrRoom, { avatar })
135
+ if (isContactId(contactOrRoomId)) {
136
+ contactCount++
137
+ if (contactOrRoom.isMyContact) {
138
+ friendCount++
139
+ }
140
+ await cacheManager.setContactOrRoomRawPayload(contactOrRoomId, contactWithAvatar)
141
+ } else if (isRoomId(contactOrRoomId)) {
142
+ const memberList = await this.manager.syncRoomMemberList(contactOrRoomId)
143
+ if (memberList.length > 0) {
144
+ roomCount++
145
+ await cacheManager.setContactOrRoomRawPayload(contactOrRoomId, contactWithAvatar)
146
+ } else {
147
+ await cacheManager.deleteContactOrRoom(contactOrRoomId)
148
+ await cacheManager.deleteRoomMemberIdList(contactOrRoomId)
149
+ }
150
+ } else {
151
+ log.warn(PRE, `Unknown contact type: ${JSON.stringify(contactOrRoom)}`)
152
+ }
153
+ await this.manager.processHistoryMessages(contactOrRoom)
154
+ })
155
+
156
+ log.info(PRE, `onReady() all contacts and rooms are ready, friendCount: ${friendCount} contactCount: ${contactCount} roomCount: ${roomCount}`)
157
+ this.emit('ready')
158
+ this.loadingData = false
159
+ }
160
+
161
+ public async onLogout (reason: string = STRINGS[LANGUAGE].LOGOUT_REASON.DEFAULT) {
162
+ log.verbose(PRE, `onLogout(${reason})`)
163
+ await this.clearSession()
164
+ this.hasLogin = false
165
+ this.manager.stopSchedule()
166
+ this.emit('logout', this.getBotId(), reason as string)
167
+ this.baseStop()
168
+ }
169
+
170
+ public async onChangeState (state: WAStateType) {
171
+ log.info(PRE, `onChangeState(${JSON.stringify(state)})`)
172
+ if (!this.botId) {
173
+ throw WAError(WA_ERROR_TYPE.ERR_INIT, 'No login bot id.')
174
+ }
175
+
176
+ switch (state) {
177
+ case WAState.TIMEOUT:
178
+ this.pendingLogoutEmitTimer = setTimeout(() => {
179
+ this.emit('logout', this.getBotId(), STRINGS[LANGUAGE].LOGOUT_REASON.NETWORK_TIMEOUT_IN_PHONE)
180
+ this.pendingLogoutEmitTimer = undefined
181
+ }, DEFAULT_TIMEOUT.TIMEOUT_WAIT_CONNECTED)
182
+ break
183
+ case WAState.CONNECTED:
184
+ this.clearPendingLogoutEmitTimer()
185
+ this.emit('login', this.botId)
186
+ this.loadingData = false
187
+ const contactOrRoomList = await this.manager.syncContactOrRoomList()
188
+ await this.onReady(contactOrRoomList)
189
+ break
190
+ default:
191
+ break
192
+ }
193
+ }
194
+
195
+ /**
196
+ * unsupported events
197
+ * leave logs to for further dev
198
+ */
199
+ public async onChangeBattery (batteryInfo: BatteryInfo) {
200
+ log.verbose(PRE, `onChangeBattery(${JSON.stringify(batteryInfo)})`)
201
+ if (!this.botId) {
202
+ throw WAError(WA_ERROR_TYPE.ERR_INIT, 'No login bot id.')
203
+ }
204
+
205
+ if (batteryInfo.battery <= MIN_BATTERY_VALUE_FOR_LOGOUT && !batteryInfo.plugged) {
206
+ this.emit('logout', this.botId, STRINGS[LANGUAGE].LOGOUT_REASON.BATTERY_LOWER_IN_PHONE)
207
+ }
208
+ }
209
+
210
+ }