@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,93 @@
1
+ /**
2
+ * This file was auto generated from scripts/generate-version.sh
3
+ */
4
+ import type { PackageJson } from 'type-fest'
5
+ export const packageJson: PackageJson = {
6
+ "name": "@juzi/wechaty-puppet-whatsapp",
7
+ "version": "1.0.0",
8
+ "description": "Wechaty Puppet for WhatsApp",
9
+ "type": "module",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/esm/src/mod.js",
13
+ "require": "./dist/cjs/src/mod.js"
14
+ }
15
+ },
16
+ "typings": "./dist/esm/src/mod.d.ts",
17
+ "engines": {
18
+ "node": ">=16",
19
+ "npm": ">=7"
20
+ },
21
+ "scripts": {
22
+ "clean": "shx rm -fr dist/*",
23
+ "dist": "npm-run-all clean build fixup",
24
+ "build": "tsc && tsc -p tsconfig.cjs.json",
25
+ "fixup": "shx echo '{\"type\": \"commonjs\"}' > dist/cjs/package.json",
26
+ "start": "cross-env NODE_OPTIONS='--no-warnings --loader=ts-node/esm' node examples/ding-dong-bot.ts",
27
+ "lint": "npm-run-all lint:es lint:ts lint:md",
28
+ "lint:md": "markdownlint README.md",
29
+ "lint:ts": "tsc --isolatedModules --noEmit",
30
+ "lint:es": "eslint \"src/**/*.ts\" \"tests/**/*.spec.ts\" --ignore-pattern tests/fixtures/",
31
+ "test": "npm-run-all lint test:unit",
32
+ "test:pack": "bash -x scripts/npm-pack-testing.sh",
33
+ "test:unit": "tap --node-arg=--loader=ts-node/esm --node-arg=--no-warnings 'src/**/*.spec.ts' 'tests/**/*.spec.ts'"
34
+ },
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/juzibot/puppet-whatsapp.git"
38
+ },
39
+ "keywords": [
40
+ "chatie",
41
+ "wechaty",
42
+ "chatbot",
43
+ "bot",
44
+ "wechat",
45
+ "sdk",
46
+ "puppet",
47
+ "mock"
48
+ ],
49
+ "author": "Huan LI <zixia@zixia.net>",
50
+ "license": "Apache-2.0",
51
+ "bugs": {
52
+ "url": "https://github.com/juzibot/puppet-whatsapp/issues"
53
+ },
54
+ "homepage": "https://github.com/juzibot/puppet-whatsapp#readme",
55
+ "devDependencies": {
56
+ "@chatie/eslint-config": "^1.0.4",
57
+ "@chatie/semver": "^0.4.7",
58
+ "@chatie/tsconfig": "^4.6.3",
59
+ "@types/cuid": "^2.0.1",
60
+ "@types/fs-extra": "^9.0.13",
61
+ "@types/mime": "^2.0.3",
62
+ "@types/node-schedule": "^1.3.2",
63
+ "@types/qrcode-terminal": "^0.12.0",
64
+ "qrcode-terminal": "^0.12.0",
65
+ "tstest": "^1.2.8"
66
+ },
67
+ "peerDependencies": {
68
+ "@juzi/wechaty-puppet": "1.0.0"
69
+ },
70
+ "dependencies": {
71
+ "@juzi/whatsapp-web.js": "^1.16.10",
72
+ "ee-ts": "^1.0.2",
73
+ "flash-store": "^1.0.6",
74
+ "fs-extra": "^10.0.1",
75
+ "gerror": "^1.0.16",
76
+ "mime": "^3.0.0",
77
+ "node-schedule": "^2.1.0",
78
+ "rxjs": "^7.5.5",
79
+ "type-fest": "^2.12.2"
80
+ },
81
+ "files": [
82
+ "bin/",
83
+ "dist/",
84
+ "src/"
85
+ ],
86
+ "tap": {
87
+ "check-coverage": false
88
+ },
89
+ "publishConfig": {
90
+ "access": "public",
91
+ "tag": "next"
92
+ }
93
+ } as any
@@ -0,0 +1,20 @@
1
+ import * as PUPPET from '@juzi/wechaty-puppet'
2
+ import { log } from '../config.js'
3
+ import type PuppetWhatsApp from '../puppet-whatsapp.js'
4
+
5
+ const PRE = 'MIXIN_CONTACT_SELF'
6
+
7
+ export async function contactSelfQRCode (this: PuppetWhatsApp): Promise<string> {
8
+ log.verbose(PRE, 'contactSelfQRCode()')
9
+ return PUPPET.throwUnsupportedError()
10
+ }
11
+
12
+ export async function contactSelfName (this: PuppetWhatsApp, name: string): Promise<void> {
13
+ log.verbose(PRE, 'contactSelfName(%s)', name)
14
+ await this.manager.setNickname(name)
15
+ }
16
+
17
+ export async function contactSelfSignature (this: PuppetWhatsApp, signature: string): Promise<void> {
18
+ log.verbose(PRE, 'contactSelfSignature(%s)', signature)
19
+ await this.manager.setStatusMessage(signature)
20
+ }
@@ -0,0 +1,107 @@
1
+ /* eslint-disable no-redeclare */
2
+ import * as PUPPET from '@juzi/wechaty-puppet'
3
+
4
+ import {
5
+ FileBox,
6
+ log,
7
+ } from '../config.js'
8
+ import { WA_ERROR_TYPE } from '../exception/error-type.js'
9
+ import WAError from '../exception/whatsapp-error.js'
10
+ import type PuppetWhatsApp from '../puppet-whatsapp.js'
11
+ import type { WhatsAppContactPayload } from '../schema/whatsapp-type.js'
12
+ import { isContactId } from '../helper/miscellaneous.js'
13
+
14
+ import { parserContactRawPayload } from '../helper/pure-function/contact-raw-payload-parser.js'
15
+
16
+ const PRE = 'MIXIN_CONTACT'
17
+
18
+ export async function contactAlias(this: PuppetWhatsApp, contactId: string): Promise<string>;
19
+ export async function contactAlias(this: PuppetWhatsApp, contactId: string, alias: string | null): Promise<void>;
20
+ export async function contactAlias (this: PuppetWhatsApp, contactId: string, alias?: string | null): Promise<void | string> {
21
+ log.verbose(PRE, 'contactAlias(%s, %s)', contactId, alias)
22
+ return PUPPET.throwUnsupportedError()
23
+ }
24
+
25
+ export async function contactPhone(this: PuppetWhatsApp, contactId: string): Promise<string[]>
26
+ export async function contactPhone(this: PuppetWhatsApp, contactId: string, phoneList: string[]): Promise<void>
27
+
28
+ export async function contactPhone (this: PuppetWhatsApp, contactId: string, phoneList?: string[]): Promise<string[] | void> {
29
+ log.verbose(PRE, 'contactPhone(%s, %s)', contactId, phoneList)
30
+ if (typeof phoneList === 'undefined') {
31
+ const cacheManager = await this.manager.getCacheManager()
32
+ const contact = await cacheManager.getContactOrRoomRawPayload(contactId)
33
+ if (contact) {
34
+ return [contact!.number]
35
+ } else {
36
+ return []
37
+ }
38
+ }
39
+ }
40
+
41
+ export async function contactCorporationRemark (this: PuppetWhatsApp, contactId: string, corporationRemark: string) {
42
+ log.verbose(PRE, 'contactCorporationRemark(%s, %s)', contactId, corporationRemark)
43
+ return PUPPET.throwUnsupportedError()
44
+ }
45
+
46
+ export async function contactDescription (this: PuppetWhatsApp, contactId: string, description: string) {
47
+ log.verbose(PRE, 'contactDescription(%s, %s)', contactId, description)
48
+ return PUPPET.throwUnsupportedError()
49
+ }
50
+
51
+ export async function contactList (this: PuppetWhatsApp): Promise<string[]> {
52
+ log.verbose(PRE, 'contactList()')
53
+ const cacheManager = await this.manager.getCacheManager()
54
+ const contactIdList = await cacheManager.getContactIdList()
55
+ return contactIdList
56
+ }
57
+
58
+ export async function contactAvatar(this: PuppetWhatsApp, contactId: string): Promise<FileBox>
59
+ export async function contactAvatar(this: PuppetWhatsApp, contactId: string, file: FileBox): Promise<void>
60
+
61
+ export async function contactAvatar (this: PuppetWhatsApp, contactId: string, file?: FileBox): Promise<void | FileBox> {
62
+ log.verbose(PRE, 'contactAvatar(%s)', contactId)
63
+
64
+ if (file) {
65
+ return PUPPET.throwUnsupportedError()
66
+ }
67
+ let avatar: string = ''
68
+ const con = await this.manager.getContactById(contactId)
69
+ try {
70
+ avatar = await con.getProfilePicUrl()
71
+ } catch (err) {
72
+ log.error(PRE, 'contactAvatar(%s) error:%s', contactId, (err as Error).message)
73
+ }
74
+ if (avatar) {
75
+ return FileBox.fromUrl(avatar)
76
+ }
77
+ }
78
+
79
+ export async function contactRawPayload (this: PuppetWhatsApp, id: string): Promise<WhatsAppContactPayload> {
80
+ log.verbose(PRE, 'contactRawPayload(%s)', id)
81
+ if (!isContactId(id)) {
82
+ throw WAError(WA_ERROR_TYPE.ERR_CONTACT_NOT_FOUND, `please check contact id: ${id} again.`)
83
+ }
84
+ const cacheManager = await this.manager.getCacheManager()
85
+ const contact = await cacheManager.getContactOrRoomRawPayload(id)
86
+ if (contact) {
87
+ return contact
88
+ } else {
89
+ const rawContact = await this.manager.getContactById(id)
90
+ const avatar = await rawContact.getProfilePicUrl() || ''
91
+ const contact = Object.assign(rawContact, { avatar })
92
+ await cacheManager.setContactOrRoomRawPayload(id, contact)
93
+ return contact
94
+ }
95
+ }
96
+
97
+ export async function contactRawPayloadParser (this: PuppetWhatsApp, contactPayload: WhatsAppContactPayload): Promise<PUPPET.payloads.Contact> {
98
+ try {
99
+ const userName = this.manager.getWhatsAppClient().info.pushname
100
+ const result = parserContactRawPayload(contactPayload, userName)
101
+ log.verbose(PRE, 'contactRawPayloadParser whatsAppPayload(%s) result(%s)', JSON.stringify(contactPayload), JSON.stringify(result))
102
+ return result
103
+ } catch (error) {
104
+ log.error(PRE, `contactRawPayloadParser(${contactPayload.id._serialized}) failed, error message: ${(error as Error).message}`)
105
+ throw WAError(WA_ERROR_TYPE.ERR_CONTACT_NOT_FOUND, `contactRawPayloadParser(${contactPayload.id._serialized}) failed, error message: ${(error as Error).message}`)
106
+ }
107
+ }
@@ -0,0 +1,12 @@
1
+ import * as PUPPET from '@juzi/wechaty-puppet'
2
+ import { log } from '../config.js'
3
+
4
+ const PRE = 'MIXIN_CONVERSATION'
5
+
6
+ export async function conversationReadMark (
7
+ conversationId: string,
8
+ hasRead?: boolean,
9
+ ): Promise<void | boolean> {
10
+ log.verbose(PRE, 'conversationReadMark(%s, %s)', conversationId, hasRead)
11
+ return PUPPET.throwUnsupportedError()
12
+ }
@@ -0,0 +1,88 @@
1
+ import * as PUPPET from '@juzi/wechaty-puppet'
2
+ import { LANGUAGE, log, STRINGS } from '../config.js'
3
+ import { WA_ERROR_TYPE } from '../exception/error-type.js'
4
+ import WAError from '../exception/whatsapp-error.js'
5
+ import type PuppetWhatsApp from '../puppet-whatsapp.js'
6
+ import type { WhatsAppMessagePayload } from '../schema/whatsapp-type.js'
7
+
8
+ const PRE = 'MIXIN_FRIENDSHIP'
9
+
10
+ export type FriendshipRawPayload = WhatsAppMessagePayload
11
+
12
+ export async function friendshipRawPayload (this: PuppetWhatsApp, id: string): Promise<FriendshipRawPayload> {
13
+ const cache = await this.manager.getCacheManager()
14
+ const message = await cache.getMessageRawPayload(id)
15
+ if (!message) {
16
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, 'Message not found', `messageId: ${id}`)
17
+ }
18
+ return message
19
+ }
20
+
21
+ export async function friendshipRawPayloadParser (rawPayload: FriendshipRawPayload): Promise<PUPPET.payloads.Friendship> {
22
+ return {
23
+ contactId: rawPayload.from,
24
+ hello: rawPayload.body,
25
+ id: rawPayload.id.id,
26
+ timestamp: rawPayload.timestamp,
27
+ type: PUPPET.types.Friendship.Confirm,
28
+ }
29
+ }
30
+
31
+ export async function friendshipSearchPhone (
32
+ this: PuppetWhatsApp,
33
+ phone: string,
34
+ ): Promise<null | string> {
35
+ log.verbose(PRE, 'friendshipSearchPhone(%s)', phone)
36
+ const contactId = `${phone}@c.us`
37
+ const isUser = await this.manager.isWhatsappUser(contactId)
38
+ if (!isUser) {
39
+ throw WAError(WA_ERROR_TYPE.ERR_CONTACT_NOT_FOUND, 'Not a registered user on WhatsApp.', `contactId: ${contactId}`)
40
+ }
41
+ return contactId
42
+ }
43
+
44
+ export async function friendshipSearchWeixin (
45
+ weixin: string,
46
+ ): Promise<null | string> {
47
+ log.verbose(PRE, 'friendshipSearchWeixin(%s)', weixin)
48
+ return PUPPET.throwUnsupportedError()
49
+ }
50
+
51
+ export async function friendshipSearchHandle (
52
+ handle: string,
53
+ ): Promise<null | string> {
54
+ log.verbose(PRE, 'friendshipSearchHandle(%s)', handle)
55
+ return PUPPET.throwUnsupportedError()
56
+ }
57
+
58
+ export async function friendshipAdd (
59
+ this: PuppetWhatsApp,
60
+ contactId: string,
61
+ option?: PUPPET.types.FriendshipAddOptions,
62
+ ): Promise<void> {
63
+ let hello: string = ''
64
+ if (typeof (option) === 'object') {
65
+ hello = option.hello || ''
66
+ } else {
67
+ hello = option || ''
68
+ }
69
+ if (hello.length === 0) {
70
+ hello = STRINGS[LANGUAGE].DEFAULT_HELLO_MESSAGE
71
+ }
72
+ log.verbose(PRE, 'friendshipAdd(%s, %s)', contactId, JSON.stringify(option))
73
+ const isUser = await this.manager.isWhatsappUser(contactId)
74
+ if (!isUser) {
75
+ throw WAError(WA_ERROR_TYPE.ERR_CONTACT_NOT_FOUND, 'Not a registered user on WhatsApp.', `contactId: ${contactId}`)
76
+ }
77
+
78
+ await this.contactRawPayload(contactId)
79
+
80
+ await this.messageSendText(contactId, hello)
81
+ }
82
+
83
+ export async function friendshipAccept (
84
+ friendshipId: string,
85
+ ): Promise<void> {
86
+ log.verbose(PRE, 'friendshipAccept(%s)', friendshipId)
87
+ return PUPPET.throwUnsupportedError()
88
+ }
@@ -0,0 +1,311 @@
1
+ import * as PUPPET from '@juzi/wechaty-puppet'
2
+ import * as path from 'path'
3
+ import mime from 'mime'
4
+ import type PuppetWhatsApp from '../puppet-whatsapp.js'
5
+ import type {
6
+ MessageContent,
7
+ WhatsAppMessagePayload,
8
+ MessageSendOptions,
9
+ } from '../schema/whatsapp-type.js'
10
+ import {
11
+ MessageMedia,
12
+ MessageTypes as WhatsAppMessageType,
13
+ } from '../schema/whatsapp-interface.js'
14
+ import { WA_ERROR_TYPE } from '../exception/error-type.js'
15
+ import WAError from '../exception/whatsapp-error.js'
16
+ import {
17
+ DEFAULT_TIMEOUT,
18
+ FileBox,
19
+ log,
20
+ } from '../config.js'
21
+ import { convertMessagePayloadToClass } from '../helper/pure-function/convert-function.js'
22
+ import { parserMessageRawPayload } from '../helper/pure-function/message-raw-payload-parser.js'
23
+ import { parseVcard } from '../helper/pure-function/vcard-parser.js'
24
+ import { RequestPool } from '../request/request-pool.js'
25
+
26
+ const PRE = 'MIXIN_MESSAGE'
27
+
28
+ /**
29
+ * Get contact message
30
+ * @param messageId message Id
31
+ * @returns contact name
32
+ */
33
+ export async function messageContact (this: PuppetWhatsApp, messageId: string): Promise<string> {
34
+ log.verbose(PRE, 'messageContact(%s)', messageId)
35
+ const cacheManager = await this.manager.getCacheManager()
36
+ const msg = await cacheManager.getMessageRawPayload(messageId)
37
+ if (!msg) {
38
+ log.error(PRE, 'Message %s not found', messageId)
39
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Message ${messageId} not found`)
40
+ }
41
+ if (msg.type !== WhatsAppMessageType.CONTACT_CARD) {
42
+ log.error(PRE, 'Message %s is not contact type', messageId)
43
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_MATCH, `Message ${messageId} is not contact type`)
44
+ }
45
+ if (!msg.vCards[0]) {
46
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_MATCH, `Message ${messageId} has no vCards info, detail: ${JSON.stringify(msg)}`)
47
+ }
48
+ try {
49
+ const vcard = parseVcard(msg.vCards[0])
50
+ return vcard.TEL![0]!.waid
51
+ } catch (error) {
52
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_CONTACT, `Can not parse contact card from message: ${messageId}, error: ${(error as Error).message}`)
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Recall message
58
+ * @param messageId message id
59
+ * @returns { Promise<boolean> }
60
+ */
61
+ export async function messageRecall (this: PuppetWhatsApp, messageId: string): Promise<boolean> {
62
+ log.verbose(PRE, 'messageRecall(%s)', messageId)
63
+ const cacheManager = await this.manager.getCacheManager()
64
+ const msg = await cacheManager.getMessageRawPayload(messageId)
65
+ if (!msg) {
66
+ log.error(PRE, 'Message %s not found', messageId)
67
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Message ${messageId} not found`)
68
+ }
69
+ const msgObj = convertMessagePayloadToClass(this.manager.getWhatsAppClient(), msg)
70
+ try {
71
+ await msgObj.delete(true)
72
+ return true
73
+ } catch (err) {
74
+ log.error(PRE, `Can not recall this message: ${messageId}, error: ${(err as Error).message}`)
75
+ return false
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Get moment detail image or video from message
81
+ * @param messageId message id
82
+ * @param imageType image size to get (may not apply to WhatsApp)
83
+ * @returns the image or video
84
+ */
85
+ export async function messagePost (this: PuppetWhatsApp, messageId: string, imageType: PUPPET.types.Image) {
86
+ log.verbose(PRE, 'messagePost(%s, %s)', messageId, PUPPET.types.Image[imageType])
87
+ const cacheManager = await this.manager.getCacheManager()
88
+ const msg = await cacheManager.getMessageRawPayload(messageId)
89
+ if (!msg) {
90
+ log.error(PRE, 'Message %s not found', messageId)
91
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Message ${messageId} Not Found`)
92
+ }
93
+
94
+ if (!msg.hasMedia) {
95
+ log.error(PRE, 'Message %s does not contain any media', messageId)
96
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_MATCH, `Message ${messageId} does not contain any media`)
97
+ }
98
+
99
+ if (msg.type === WhatsAppMessageType.IMAGE) {
100
+ return this.messageImage(messageId, imageType)
101
+ } else if (msg.type === WhatsAppMessageType.VIDEO) {
102
+ return this.messageFile(messageId)
103
+ } else {
104
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_MATCH, `Post message ${messageId} with wrong message type: ${msg.type}`)
105
+ }
106
+
107
+ }
108
+
109
+ /**
110
+ * Get image from message
111
+ * @param messageId message id
112
+ * @param imageType image size to get (may not apply to WhatsApp)
113
+ * @returns the image
114
+ */
115
+ export async function messageImage (this: PuppetWhatsApp, messageId: string, imageType: PUPPET.types.Image): Promise<FileBox> {
116
+ log.verbose(PRE, 'messageImage(%s, %s)', messageId, PUPPET.types.Image[imageType])
117
+ const cacheManager = await this.manager.getCacheManager()
118
+ const msg = await cacheManager.getMessageRawPayload(messageId)
119
+ if (!msg) {
120
+ log.error(PRE, 'Message %s not found', messageId)
121
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Message ${messageId} Not Found`)
122
+ }
123
+ if (msg.type !== WhatsAppMessageType.IMAGE || (!msg.hasMedia && !msg.body)) {
124
+ log.error(PRE, 'Message %s does not contain any media', messageId)
125
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_MATCH, `Message ${messageId} does not contain any media`)
126
+ }
127
+ try {
128
+ switch (imageType) {
129
+ case PUPPET.types.Image.HD:
130
+ case PUPPET.types.Image.Artwork:
131
+ if (msg.hasMedia) {
132
+ return downloadMedia.call(this, msg)
133
+ } else {
134
+ return FileBox.fromBase64(msg.body, 'thumbnail.jpg')
135
+ }
136
+ case PUPPET.types.Image.Thumbnail:
137
+ default:
138
+ if (msg.body) {
139
+ return FileBox.fromBase64(msg.body, 'thumbnail.jpg')
140
+ } else {
141
+ return downloadMedia.call(this, msg)
142
+ }
143
+ }
144
+ } catch (error) {
145
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_IMAGE, `Message ${messageId} does not contain any media`)
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Get the file attached to the message
151
+ * @param messageId message id
152
+ * @returns the file that attached to the message
153
+ */
154
+ export async function messageFile (this: PuppetWhatsApp, messageId: string): Promise<FileBox> {
155
+ log.verbose(PRE, 'messageFile(%s)', messageId)
156
+ const cacheManager = await this.manager.getCacheManager()
157
+ const msg = await cacheManager.getMessageRawPayload(messageId)
158
+ if (!msg) {
159
+ log.error(PRE, 'Message %s not found', messageId)
160
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Message ${messageId} Not Found`)
161
+ }
162
+ if (!msg.hasMedia) {
163
+ log.error(PRE, 'Message %s does not contain any media', messageId)
164
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_MATCH, `Message ${messageId} does not contain any media`)
165
+ }
166
+ try {
167
+ return downloadMedia.call(this, msg)
168
+ } catch (error) {
169
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_FILE, `Message ${messageId} does not contain any media`)
170
+ }
171
+ }
172
+
173
+ async function downloadMedia (this: PuppetWhatsApp, msg: WhatsAppMessagePayload) {
174
+ const msgObj = convertMessagePayloadToClass(this.manager.getWhatsAppClient(), msg)
175
+ const media = await msgObj.downloadMedia()
176
+ const filenameExtension = mime.getExtension(media.mimetype)
177
+ const fileBox = FileBox.fromBase64(media.data, media.filename ?? `unknown_name.${filenameExtension}`)
178
+ fileBox.mimeType = media.mimetype
179
+ return fileBox
180
+ }
181
+
182
+ /**
183
+ * Get url in the message
184
+ * @param messageId message id
185
+ * @returns url in the message
186
+ */
187
+ export async function messageUrl (this: PuppetWhatsApp, messageId: string): Promise<PUPPET.payloads.UrlLink> {
188
+ log.verbose(PRE, 'messageUrl(%s)', messageId)
189
+ const cacheManager = await this.manager.getCacheManager()
190
+ const msg = await cacheManager.getMessageRawPayload(messageId)
191
+ if (!msg) {
192
+ log.error(PRE, 'Message %s not found', messageId)
193
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Message ${messageId} Not Found`)
194
+ }
195
+ if (msg.links.length === 0) {
196
+ log.error(PRE, 'Message %s is does not contain links', messageId)
197
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_MATCH, `Message ${messageId} does not contain any link message.`)
198
+ }
199
+ try {
200
+ return {
201
+ description: msg.description || 'NO_DESCRIPTION',
202
+ title: msg.title || 'NO_TITLE',
203
+ url: msg.links[0]?.link || msg.body,
204
+ }
205
+ } catch (error) {
206
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_URL_LINK, `Get link message: ${messageId} failed, error: ${(error as Error).message}`)
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Not supported for WhatsApp
212
+ * @param messageId message id
213
+ */
214
+ export async function messageMiniProgram (this: PuppetWhatsApp, messageId: string): Promise<PUPPET.payloads.MiniProgram> {
215
+ log.verbose(PRE, 'messageMiniProgram(%s)', messageId)
216
+ return PUPPET.throwUnsupportedError()
217
+ }
218
+
219
+ export async function messageSend (this: PuppetWhatsApp, conversationId: string, content: MessageContent, options?: MessageSendOptions, timeout = DEFAULT_TIMEOUT.MESSAGE_SEND): Promise<string> {
220
+ log.verbose(PRE, 'messageSend(%s, %s)', conversationId, typeof content)
221
+
222
+ const msg = await this.manager.sendMessage(conversationId, content, options)
223
+ const messageId = msg.id.id
224
+ const requestPool = RequestPool.Instance
225
+ await requestPool.pushRequest(messageId, timeout)
226
+ return messageId
227
+ }
228
+
229
+ export async function messageSendText (this: PuppetWhatsApp, conversationId: string, text: string, mentions?: string[]): Promise<void | string> {
230
+ log.verbose(PRE, 'messageSendText(%s, %s)', conversationId, text)
231
+ if (mentions) {
232
+ const contacts = await Promise.all(mentions.map((v) => (
233
+ this.manager.getContactById(v)
234
+ )))
235
+ return messageSend.call(this, conversationId, text, { mentions: contacts }, DEFAULT_TIMEOUT.MESSAGE_SEND_TEXT)
236
+ } else {
237
+ return messageSend.call(this, conversationId, text, {}, DEFAULT_TIMEOUT.MESSAGE_SEND_TEXT)
238
+ }
239
+ }
240
+
241
+ export async function messageSendFile (this: PuppetWhatsApp, conversationId: string, file: FileBox, options?: MessageSendOptions): Promise<void | string> {
242
+ log.verbose(PRE, 'messageSendFile(%s, %s)', conversationId, file.name)
243
+ await file.ready()
244
+ const type = (file.mediaType && file.mediaType !== 'application/octet-stream')
245
+ ? file.mediaType.replace(/;.*$/, '')
246
+ : path.extname(file.name)
247
+ log.silly(PRE, `message type: ${type}, filename: ${file.name}`)
248
+ const fileBoxJsonObject: any = file.toJSON() // FIXME: need import FileBoxJsonObject from file-box
249
+ const remoteUrl = fileBoxJsonObject.remoteUrl
250
+ let msgContent
251
+ if (remoteUrl) {
252
+ msgContent = await MessageMedia.fromUrl(remoteUrl, { filename: file.name })
253
+ } else {
254
+ const fileData = await file.toBase64()
255
+ msgContent = new MessageMedia(file.mediaType!, fileData, file.name)
256
+ }
257
+ return messageSend.call(this, conversationId, msgContent, options, DEFAULT_TIMEOUT.MESSAGE_SEND_FILE)
258
+ }
259
+
260
+ export async function messageSendContact (this: PuppetWhatsApp, conversationId: string, contactId: string, options?: MessageSendOptions): Promise<void> {
261
+ log.verbose(PRE, 'messageSendContact(%s, %s)', conversationId, contactId)
262
+
263
+ const contact = await this.manager.getContactById(contactId)
264
+ await messageSend.call(this, conversationId, contact, options, DEFAULT_TIMEOUT.MESSAGE_SEND_TEXT)
265
+ }
266
+
267
+ export async function messageSendUrl (
268
+ this: PuppetWhatsApp,
269
+ conversationId: string,
270
+ urlLinkPayload: PUPPET.payloads.UrlLink,
271
+ ): Promise<string> {
272
+ log.verbose(PRE, 'messageSendUrl(%s, %s)', conversationId, JSON.stringify(urlLinkPayload))
273
+ return messageSend.call(this, conversationId, urlLinkPayload.url, {}, DEFAULT_TIMEOUT.MESSAGE_SEND_TEXT)
274
+ }
275
+
276
+ export async function messageSendMiniProgram (this: PuppetWhatsApp, conversationId: string, miniProgramPayload: PUPPET.payloads.MiniProgram): Promise<void> {
277
+ log.verbose(PRE, 'messageSendMiniProgram(%s, %s)', conversationId, JSON.stringify(miniProgramPayload))
278
+ return PUPPET.throwUnsupportedError()
279
+ }
280
+
281
+ export async function messageForward (this: PuppetWhatsApp, conversationId: string, messageId: string): Promise<void> {
282
+ log.verbose(PRE, 'messageForward(%s, %s)', conversationId, messageId)
283
+ const cacheManager = await this.manager.getCacheManager()
284
+ const msg = await cacheManager.getMessageRawPayload(messageId)
285
+ if (!msg) {
286
+ log.error(PRE, 'Message %s not found', messageId)
287
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Message ${messageId} not found`)
288
+ }
289
+ const msgObj = convertMessagePayloadToClass(this.manager.getWhatsAppClient(), msg)
290
+ try {
291
+ await msgObj.forward(conversationId)
292
+ } catch (error) {
293
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_FORWARD, `Forward message: ${messageId} failed, error: ${(error as Error).message}`)
294
+ }
295
+ }
296
+
297
+ export async function messageRawPayload (this: PuppetWhatsApp, id: string): Promise<WhatsAppMessagePayload> {
298
+ log.verbose(PRE, 'messageRawPayload(%s)', id)
299
+ const cacheManager = await this.manager.getCacheManager()
300
+ const msg = await cacheManager.getMessageRawPayload(id)
301
+ if (!msg) {
302
+ throw WAError(WA_ERROR_TYPE.ERR_MSG_NOT_FOUND, `Can not find this message: ${id}`)
303
+ }
304
+ return msg
305
+ }
306
+
307
+ export async function messageRawPayloadParser (this: PuppetWhatsApp, whatsAppPayload: WhatsAppMessagePayload): Promise<PUPPET.payloads.Message> {
308
+ const result = parserMessageRawPayload(whatsAppPayload)
309
+ log.verbose(PRE, 'messageRawPayloadParser whatsAppPayload(%s) result(%s)', JSON.stringify(whatsAppPayload), JSON.stringify(result))
310
+ return result
311
+ }