@juzi/wechaty-puppet-service 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 (602) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +166 -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 +156 -0
  6. package/dist/cjs/examples/ding-dong-bot.js.map +1 -0
  7. package/dist/cjs/package.json +3 -0
  8. package/dist/cjs/src/auth/auth-impl-token.d.ts +4 -0
  9. package/dist/cjs/src/auth/auth-impl-token.d.ts.map +1 -0
  10. package/dist/cjs/src/auth/auth-impl-token.js +81 -0
  11. package/dist/cjs/src/auth/auth-impl-token.js.map +1 -0
  12. package/dist/cjs/src/auth/auth-impl-token.spec.d.ts +3 -0
  13. package/dist/cjs/src/auth/auth-impl-token.spec.d.ts.map +1 -0
  14. package/dist/cjs/src/auth/auth-impl-token.spec.js +65 -0
  15. package/dist/cjs/src/auth/auth-impl-token.spec.js.map +1 -0
  16. package/dist/cjs/src/auth/ca.d.ts +46 -0
  17. package/dist/cjs/src/auth/ca.d.ts.map +1 -0
  18. package/dist/cjs/src/auth/ca.js +135 -0
  19. package/dist/cjs/src/auth/ca.js.map +1 -0
  20. package/dist/cjs/src/auth/ca.spec.d.ts +3 -0
  21. package/dist/cjs/src/auth/ca.spec.d.ts.map +1 -0
  22. package/dist/cjs/src/auth/ca.spec.js +115 -0
  23. package/dist/cjs/src/auth/ca.spec.js.map +1 -0
  24. package/dist/cjs/src/auth/call-cred.d.ts +9 -0
  25. package/dist/cjs/src/auth/call-cred.d.ts.map +1 -0
  26. package/dist/cjs/src/auth/call-cred.js +17 -0
  27. package/dist/cjs/src/auth/call-cred.js.map +1 -0
  28. package/dist/cjs/src/auth/call-cred.spec.d.ts +3 -0
  29. package/dist/cjs/src/auth/call-cred.spec.d.ts.map +1 -0
  30. package/dist/cjs/src/auth/call-cred.spec.js +18 -0
  31. package/dist/cjs/src/auth/call-cred.spec.js.map +1 -0
  32. package/dist/cjs/src/auth/env-vars.d.ts +13 -0
  33. package/dist/cjs/src/auth/env-vars.d.ts.map +1 -0
  34. package/dist/cjs/src/auth/env-vars.js +29 -0
  35. package/dist/cjs/src/auth/env-vars.js.map +1 -0
  36. package/dist/cjs/src/auth/grpc-js.d.ts +7 -0
  37. package/dist/cjs/src/auth/grpc-js.d.ts.map +1 -0
  38. package/dist/cjs/src/auth/grpc-js.js +10 -0
  39. package/dist/cjs/src/auth/grpc-js.js.map +1 -0
  40. package/dist/cjs/src/auth/mod.d.ts +5 -0
  41. package/dist/cjs/src/auth/mod.d.ts.map +1 -0
  42. package/dist/cjs/src/auth/mod.js +10 -0
  43. package/dist/cjs/src/auth/mod.js.map +1 -0
  44. package/dist/cjs/src/auth/mokey-patch-header-authorization.d.ts +11 -0
  45. package/dist/cjs/src/auth/mokey-patch-header-authorization.d.ts.map +1 -0
  46. package/dist/cjs/src/auth/mokey-patch-header-authorization.js +32 -0
  47. package/dist/cjs/src/auth/mokey-patch-header-authorization.js.map +1 -0
  48. package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.d.ts +3 -0
  49. package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.d.ts.map +1 -0
  50. package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.js +19 -0
  51. package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.js.map +1 -0
  52. package/dist/cjs/src/client/duck/actions.d.ts +6 -0
  53. package/dist/cjs/src/client/duck/actions.d.ts.map +1 -0
  54. package/dist/cjs/src/client/duck/actions.js +54 -0
  55. package/dist/cjs/src/client/duck/actions.js.map +1 -0
  56. package/dist/cjs/src/client/duck/epic-recover.d.ts +36 -0
  57. package/dist/cjs/src/client/duck/epic-recover.d.ts.map +1 -0
  58. package/dist/cjs/src/client/duck/epic-recover.js +41 -0
  59. package/dist/cjs/src/client/duck/epic-recover.js.map +1 -0
  60. package/dist/cjs/src/client/duck/epic-recover.spec.d.ts +3 -0
  61. package/dist/cjs/src/client/duck/epic-recover.spec.d.ts.map +1 -0
  62. package/dist/cjs/src/client/duck/epic-recover.spec.js +131 -0
  63. package/dist/cjs/src/client/duck/epic-recover.spec.js.map +1 -0
  64. package/dist/cjs/src/client/duck/epics.d.ts +4 -0
  65. package/dist/cjs/src/client/duck/epics.d.ts.map +1 -0
  66. package/dist/cjs/src/client/duck/epics.js +36 -0
  67. package/dist/cjs/src/client/duck/epics.js.map +1 -0
  68. package/dist/cjs/src/client/duck/mod.d.ts +29 -0
  69. package/dist/cjs/src/client/duck/mod.d.ts.map +1 -0
  70. package/dist/cjs/src/client/duck/mod.js +63 -0
  71. package/dist/cjs/src/client/duck/mod.js.map +1 -0
  72. package/dist/cjs/src/client/duck/operations.d.ts +23 -0
  73. package/dist/cjs/src/client/duck/operations.d.ts.map +1 -0
  74. package/dist/cjs/src/client/duck/operations.js +30 -0
  75. package/dist/cjs/src/client/duck/operations.js.map +1 -0
  76. package/dist/cjs/src/client/duck/reducers.d.ts +59 -0
  77. package/dist/cjs/src/client/duck/reducers.d.ts.map +1 -0
  78. package/dist/cjs/src/client/duck/reducers.js +51 -0
  79. package/dist/cjs/src/client/duck/reducers.js.map +1 -0
  80. package/dist/cjs/src/client/duck/selectors.d.ts +21 -0
  81. package/dist/cjs/src/client/duck/selectors.d.ts.map +1 -0
  82. package/dist/cjs/src/client/duck/selectors.js +23 -0
  83. package/dist/cjs/src/client/duck/selectors.js.map +1 -0
  84. package/dist/cjs/src/client/duck/tests.spec.d.ts +3 -0
  85. package/dist/cjs/src/client/duck/tests.spec.d.ts.map +1 -0
  86. package/dist/cjs/src/client/duck/tests.spec.js +49 -0
  87. package/dist/cjs/src/client/duck/tests.spec.js.map +1 -0
  88. package/dist/cjs/src/client/duck/types.d.ts +21 -0
  89. package/dist/cjs/src/client/duck/types.d.ts.map +1 -0
  90. package/dist/cjs/src/client/duck/types.js +24 -0
  91. package/dist/cjs/src/client/duck/types.js.map +1 -0
  92. package/dist/cjs/src/client/duck/utils.d.ts +21 -0
  93. package/dist/cjs/src/client/duck/utils.d.ts.map +1 -0
  94. package/dist/cjs/src/client/duck/utils.js +3 -0
  95. package/dist/cjs/src/client/duck/utils.js.map +1 -0
  96. package/dist/cjs/src/client/grpc-manager.d.ts +29 -0
  97. package/dist/cjs/src/client/grpc-manager.d.ts.map +1 -0
  98. package/dist/cjs/src/client/grpc-manager.js +359 -0
  99. package/dist/cjs/src/client/grpc-manager.js.map +1 -0
  100. package/dist/cjs/src/client/grpc-manager.spec.d.ts +3 -0
  101. package/dist/cjs/src/client/grpc-manager.spec.d.ts.map +1 -0
  102. package/dist/cjs/src/client/grpc-manager.spec.js +19 -0
  103. package/dist/cjs/src/client/grpc-manager.spec.js.map +1 -0
  104. package/dist/cjs/src/client/payload-store.d.ts +26 -0
  105. package/dist/cjs/src/client/payload-store.d.ts.map +1 -0
  106. package/dist/cjs/src/client/payload-store.js +118 -0
  107. package/dist/cjs/src/client/payload-store.js.map +1 -0
  108. package/dist/cjs/src/client/payload-store.spec.d.ts +3 -0
  109. package/dist/cjs/src/client/payload-store.spec.d.ts.map +1 -0
  110. package/dist/cjs/src/client/payload-store.spec.js +17 -0
  111. package/dist/cjs/src/client/payload-store.spec.js.map +1 -0
  112. package/dist/cjs/src/client/puppet-service.d.ts +161 -0
  113. package/dist/cjs/src/client/puppet-service.d.ts.map +1 -0
  114. package/dist/cjs/src/client/puppet-service.js +1384 -0
  115. package/dist/cjs/src/client/puppet-service.js.map +1 -0
  116. package/dist/cjs/src/client/puppet-service.spec.d.ts +3 -0
  117. package/dist/cjs/src/client/puppet-service.spec.d.ts.map +1 -0
  118. package/dist/cjs/src/client/puppet-service.spec.js +55 -0
  119. package/dist/cjs/src/client/puppet-service.spec.js.map +1 -0
  120. package/dist/cjs/src/config.d.ts +20 -0
  121. package/dist/cjs/src/config.d.ts.map +1 -0
  122. package/dist/cjs/src/config.js +49 -0
  123. package/dist/cjs/src/config.js.map +1 -0
  124. package/dist/cjs/src/deprecated/chunk-pb.d.ts +15 -0
  125. package/dist/cjs/src/deprecated/chunk-pb.d.ts.map +1 -0
  126. package/dist/cjs/src/deprecated/chunk-pb.js +60 -0
  127. package/dist/cjs/src/deprecated/chunk-pb.js.map +1 -0
  128. package/dist/cjs/src/deprecated/chunk-pb.spec.d.ts +3 -0
  129. package/dist/cjs/src/deprecated/chunk-pb.spec.d.ts.map +1 -0
  130. package/dist/cjs/src/deprecated/chunk-pb.spec.js +144 -0
  131. package/dist/cjs/src/deprecated/chunk-pb.spec.js.map +1 -0
  132. package/dist/cjs/src/deprecated/conversation-id-file-box.d.ts +21 -0
  133. package/dist/cjs/src/deprecated/conversation-id-file-box.d.ts.map +1 -0
  134. package/dist/cjs/src/deprecated/conversation-id-file-box.js +43 -0
  135. package/dist/cjs/src/deprecated/conversation-id-file-box.js.map +1 -0
  136. package/dist/cjs/src/deprecated/conversation-id-file-box.spec.d.ts +3 -0
  137. package/dist/cjs/src/deprecated/conversation-id-file-box.spec.d.ts.map +1 -0
  138. package/dist/cjs/src/deprecated/conversation-id-file-box.spec.js +94 -0
  139. package/dist/cjs/src/deprecated/conversation-id-file-box.spec.js.map +1 -0
  140. package/dist/cjs/src/deprecated/file-box-chunk.d.ts +14 -0
  141. package/dist/cjs/src/deprecated/file-box-chunk.d.ts.map +1 -0
  142. package/dist/cjs/src/deprecated/file-box-chunk.js +67 -0
  143. package/dist/cjs/src/deprecated/file-box-chunk.js.map +1 -0
  144. package/dist/cjs/src/deprecated/file-box-chunk.spec.d.ts +3 -0
  145. package/dist/cjs/src/deprecated/file-box-chunk.spec.d.ts.map +1 -0
  146. package/dist/cjs/src/deprecated/file-box-chunk.spec.js +134 -0
  147. package/dist/cjs/src/deprecated/file-box-chunk.spec.js.map +1 -0
  148. package/dist/cjs/src/deprecated/file-box-pb.d.ts +15 -0
  149. package/dist/cjs/src/deprecated/file-box-pb.d.ts.map +1 -0
  150. package/dist/cjs/src/deprecated/file-box-pb.js +26 -0
  151. package/dist/cjs/src/deprecated/file-box-pb.js.map +1 -0
  152. package/dist/cjs/src/deprecated/file-box-pb.spec.d.ts +3 -0
  153. package/dist/cjs/src/deprecated/file-box-pb.spec.d.ts.map +1 -0
  154. package/dist/cjs/src/deprecated/file-box-pb.spec.js +18 -0
  155. package/dist/cjs/src/deprecated/file-box-pb.spec.js.map +1 -0
  156. package/dist/cjs/src/deprecated/file-box-pb.type.d.ts +15 -0
  157. package/dist/cjs/src/deprecated/file-box-pb.type.d.ts.map +1 -0
  158. package/dist/cjs/src/deprecated/file-box-pb.type.js +3 -0
  159. package/dist/cjs/src/deprecated/file-box-pb.type.js.map +1 -0
  160. package/dist/cjs/src/deprecated/mod.d.ts +3 -0
  161. package/dist/cjs/src/deprecated/mod.d.ts.map +1 -0
  162. package/dist/cjs/src/deprecated/mod.js +10 -0
  163. package/dist/cjs/src/deprecated/mod.js.map +1 -0
  164. package/dist/cjs/src/deprecated/next-data.d.ts +7 -0
  165. package/dist/cjs/src/deprecated/next-data.d.ts.map +1 -0
  166. package/dist/cjs/src/deprecated/next-data.js +26 -0
  167. package/dist/cjs/src/deprecated/next-data.js.map +1 -0
  168. package/dist/cjs/src/deprecated/serialize-file-box.d.ts +6 -0
  169. package/dist/cjs/src/deprecated/serialize-file-box.d.ts.map +1 -0
  170. package/dist/cjs/src/deprecated/serialize-file-box.js +22 -0
  171. package/dist/cjs/src/deprecated/serialize-file-box.js.map +1 -0
  172. package/dist/cjs/src/env-vars.d.ts +5 -0
  173. package/dist/cjs/src/env-vars.d.ts.map +1 -0
  174. package/dist/cjs/src/env-vars.js +88 -0
  175. package/dist/cjs/src/env-vars.js.map +1 -0
  176. package/dist/cjs/src/env-vars.spec.d.ts +3 -0
  177. package/dist/cjs/src/env-vars.spec.d.ts.map +1 -0
  178. package/dist/cjs/src/env-vars.spec.js +21 -0
  179. package/dist/cjs/src/env-vars.spec.js.map +1 -0
  180. package/dist/cjs/src/event-type-rev.d.ts +11 -0
  181. package/dist/cjs/src/event-type-rev.d.ts.map +1 -0
  182. package/dist/cjs/src/event-type-rev.js +17 -0
  183. package/dist/cjs/src/event-type-rev.js.map +1 -0
  184. package/dist/cjs/src/file-box-helper/mod.d.ts +4 -0
  185. package/dist/cjs/src/file-box-helper/mod.d.ts.map +1 -0
  186. package/dist/cjs/src/file-box-helper/mod.js +8 -0
  187. package/dist/cjs/src/file-box-helper/mod.js.map +1 -0
  188. package/dist/cjs/src/file-box-helper/normalize-filebox.d.ts +6 -0
  189. package/dist/cjs/src/file-box-helper/normalize-filebox.d.ts.map +1 -0
  190. package/dist/cjs/src/file-box-helper/normalize-filebox.js +76 -0
  191. package/dist/cjs/src/file-box-helper/normalize-filebox.js.map +1 -0
  192. package/dist/cjs/src/file-box-helper/normalize-filebox.spec.d.ts +3 -0
  193. package/dist/cjs/src/file-box-helper/normalize-filebox.spec.d.ts.map +1 -0
  194. package/dist/cjs/src/file-box-helper/normalize-filebox.spec.js +35 -0
  195. package/dist/cjs/src/file-box-helper/normalize-filebox.spec.js.map +1 -0
  196. package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.d.ts +6 -0
  197. package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.d.ts.map +1 -0
  198. package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.js +45 -0
  199. package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.js.map +1 -0
  200. package/dist/cjs/src/file-box-helper/uuidify-file-box-local.d.ts +5 -0
  201. package/dist/cjs/src/file-box-helper/uuidify-file-box-local.d.ts.map +1 -0
  202. package/dist/cjs/src/file-box-helper/uuidify-file-box-local.js +19 -0
  203. package/dist/cjs/src/file-box-helper/uuidify-file-box-local.js.map +1 -0
  204. package/dist/cjs/src/mod.d.ts +8 -0
  205. package/dist/cjs/src/mod.d.ts.map +1 -0
  206. package/dist/cjs/src/mod.js +13 -0
  207. package/dist/cjs/src/mod.js.map +1 -0
  208. package/dist/cjs/src/mod.spec.d.ts +3 -0
  209. package/dist/cjs/src/mod.spec.d.ts.map +1 -0
  210. package/dist/cjs/src/mod.spec.js +32 -0
  211. package/dist/cjs/src/mod.spec.js.map +1 -0
  212. package/dist/cjs/src/package-json.d.ts +6 -0
  213. package/dist/cjs/src/package-json.d.ts.map +1 -0
  214. package/dist/cjs/src/package-json.js +101 -0
  215. package/dist/cjs/src/package-json.js.map +1 -0
  216. package/dist/cjs/src/package-json.spec.d.ts +3 -0
  217. package/dist/cjs/src/package-json.spec.d.ts.map +1 -0
  218. package/dist/cjs/src/package-json.spec.js +10 -0
  219. package/dist/cjs/src/package-json.spec.js.map +1 -0
  220. package/dist/cjs/src/pure-functions/timestamp.d.ts +8 -0
  221. package/dist/cjs/src/pure-functions/timestamp.d.ts.map +1 -0
  222. package/dist/cjs/src/pure-functions/timestamp.js +23 -0
  223. package/dist/cjs/src/pure-functions/timestamp.js.map +1 -0
  224. package/dist/cjs/src/server/event-stream-manager.d.ts +40 -0
  225. package/dist/cjs/src/server/event-stream-manager.d.ts.map +1 -0
  226. package/dist/cjs/src/server/event-stream-manager.js +344 -0
  227. package/dist/cjs/src/server/event-stream-manager.js.map +1 -0
  228. package/dist/cjs/src/server/grpc-error.d.ts +5 -0
  229. package/dist/cjs/src/server/grpc-error.d.ts.map +1 -0
  230. package/dist/cjs/src/server/grpc-error.js +12 -0
  231. package/dist/cjs/src/server/grpc-error.js.map +1 -0
  232. package/dist/cjs/src/server/health-implementation.d.ts +5 -0
  233. package/dist/cjs/src/server/health-implementation.d.ts.map +1 -0
  234. package/dist/cjs/src/server/health-implementation.js +55 -0
  235. package/dist/cjs/src/server/health-implementation.js.map +1 -0
  236. package/dist/cjs/src/server/puppet-implementation.d.ts +6 -0
  237. package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -0
  238. package/dist/cjs/src/server/puppet-implementation.js +1226 -0
  239. package/dist/cjs/src/server/puppet-implementation.js.map +1 -0
  240. package/dist/cjs/src/server/puppet-server.d.ts +23 -0
  241. package/dist/cjs/src/server/puppet-server.d.ts.map +1 -0
  242. package/dist/cjs/src/server/puppet-server.js +159 -0
  243. package/dist/cjs/src/server/puppet-server.js.map +1 -0
  244. package/dist/cjs/src/server/puppet-server.spec.d.ts +3 -0
  245. package/dist/cjs/src/server/puppet-server.spec.d.ts.map +1 -0
  246. package/dist/cjs/src/server/puppet-server.spec.js +15 -0
  247. package/dist/cjs/src/server/puppet-server.spec.js.map +1 -0
  248. package/dist/cjs/tests/grpc-client.spec.d.ts +3 -0
  249. package/dist/cjs/tests/grpc-client.spec.d.ts.map +1 -0
  250. package/dist/cjs/tests/grpc-client.spec.js +137 -0
  251. package/dist/cjs/tests/grpc-client.spec.js.map +1 -0
  252. package/dist/cjs/tests/grpc-stream.spec.d.ts +15 -0
  253. package/dist/cjs/tests/grpc-stream.spec.d.ts.map +1 -0
  254. package/dist/cjs/tests/grpc-stream.spec.js +67 -0
  255. package/dist/cjs/tests/grpc-stream.spec.js.map +1 -0
  256. package/dist/cjs/tests/integration.spec.d.ts +3 -0
  257. package/dist/cjs/tests/integration.spec.d.ts.map +1 -0
  258. package/dist/cjs/tests/integration.spec.js +70 -0
  259. package/dist/cjs/tests/integration.spec.js.map +1 -0
  260. package/dist/cjs/tests/performance.spec.d.ts +14 -0
  261. package/dist/cjs/tests/performance.spec.d.ts.map +1 -0
  262. package/dist/cjs/tests/performance.spec.js +129 -0
  263. package/dist/cjs/tests/performance.spec.js.map +1 -0
  264. package/dist/cjs/tests/ready-event.spec.d.ts +3 -0
  265. package/dist/cjs/tests/ready-event.spec.d.ts.map +1 -0
  266. package/dist/cjs/tests/ready-event.spec.js +80 -0
  267. package/dist/cjs/tests/ready-event.spec.js.map +1 -0
  268. package/dist/cjs/tests/uuid-file-box.spec.d.ts +3 -0
  269. package/dist/cjs/tests/uuid-file-box.spec.d.ts.map +1 -0
  270. package/dist/cjs/tests/uuid-file-box.spec.js +77 -0
  271. package/dist/cjs/tests/uuid-file-box.spec.js.map +1 -0
  272. package/dist/esm/examples/ding-dong-bot.d.ts +2 -0
  273. package/dist/esm/examples/ding-dong-bot.d.ts.map +1 -0
  274. package/dist/esm/examples/ding-dong-bot.js +131 -0
  275. package/dist/esm/examples/ding-dong-bot.js.map +1 -0
  276. package/dist/esm/src/auth/auth-impl-token.d.ts +4 -0
  277. package/dist/esm/src/auth/auth-impl-token.d.ts.map +1 -0
  278. package/dist/esm/src/auth/auth-impl-token.js +78 -0
  279. package/dist/esm/src/auth/auth-impl-token.js.map +1 -0
  280. package/dist/esm/src/auth/auth-impl-token.spec.d.ts +3 -0
  281. package/dist/esm/src/auth/auth-impl-token.spec.d.ts.map +1 -0
  282. package/dist/esm/src/auth/auth-impl-token.spec.js +63 -0
  283. package/dist/esm/src/auth/auth-impl-token.spec.js.map +1 -0
  284. package/dist/esm/src/auth/ca.d.ts +46 -0
  285. package/dist/esm/src/auth/ca.d.ts.map +1 -0
  286. package/dist/esm/src/auth/ca.js +129 -0
  287. package/dist/esm/src/auth/ca.js.map +1 -0
  288. package/dist/esm/src/auth/ca.spec.d.ts +3 -0
  289. package/dist/esm/src/auth/ca.spec.d.ts.map +1 -0
  290. package/dist/esm/src/auth/ca.spec.js +87 -0
  291. package/dist/esm/src/auth/ca.spec.js.map +1 -0
  292. package/dist/esm/src/auth/call-cred.d.ts +9 -0
  293. package/dist/esm/src/auth/call-cred.d.ts.map +1 -0
  294. package/dist/esm/src/auth/call-cred.js +13 -0
  295. package/dist/esm/src/auth/call-cred.js.map +1 -0
  296. package/dist/esm/src/auth/call-cred.spec.d.ts +3 -0
  297. package/dist/esm/src/auth/call-cred.spec.d.ts.map +1 -0
  298. package/dist/esm/src/auth/call-cred.spec.js +16 -0
  299. package/dist/esm/src/auth/call-cred.spec.js.map +1 -0
  300. package/dist/esm/src/auth/env-vars.d.ts +13 -0
  301. package/dist/esm/src/auth/env-vars.d.ts.map +1 -0
  302. package/dist/esm/src/auth/env-vars.js +21 -0
  303. package/dist/esm/src/auth/env-vars.js.map +1 -0
  304. package/dist/esm/src/auth/grpc-js.d.ts +7 -0
  305. package/dist/esm/src/auth/grpc-js.d.ts.map +1 -0
  306. package/dist/esm/src/auth/grpc-js.js +4 -0
  307. package/dist/esm/src/auth/grpc-js.js.map +1 -0
  308. package/dist/esm/src/auth/mod.d.ts +5 -0
  309. package/dist/esm/src/auth/mod.d.ts.map +1 -0
  310. package/dist/esm/src/auth/mod.js +5 -0
  311. package/dist/esm/src/auth/mod.js.map +1 -0
  312. package/dist/esm/src/auth/mokey-patch-header-authorization.d.ts +11 -0
  313. package/dist/esm/src/auth/mokey-patch-header-authorization.d.ts.map +1 -0
  314. package/dist/esm/src/auth/mokey-patch-header-authorization.js +29 -0
  315. package/dist/esm/src/auth/mokey-patch-header-authorization.js.map +1 -0
  316. package/dist/esm/src/auth/monkey-patch-header-authorization.spec.d.ts +3 -0
  317. package/dist/esm/src/auth/monkey-patch-header-authorization.spec.d.ts.map +1 -0
  318. package/dist/esm/src/auth/monkey-patch-header-authorization.spec.js +17 -0
  319. package/dist/esm/src/auth/monkey-patch-header-authorization.spec.js.map +1 -0
  320. package/dist/esm/src/client/duck/actions.d.ts +6 -0
  321. package/dist/esm/src/client/duck/actions.d.ts.map +1 -0
  322. package/dist/esm/src/client/duck/actions.js +28 -0
  323. package/dist/esm/src/client/duck/actions.js.map +1 -0
  324. package/dist/esm/src/client/duck/epic-recover.d.ts +36 -0
  325. package/dist/esm/src/client/duck/epic-recover.d.ts.map +1 -0
  326. package/dist/esm/src/client/duck/epic-recover.js +36 -0
  327. package/dist/esm/src/client/duck/epic-recover.js.map +1 -0
  328. package/dist/esm/src/client/duck/epic-recover.spec.d.ts +3 -0
  329. package/dist/esm/src/client/duck/epic-recover.spec.d.ts.map +1 -0
  330. package/dist/esm/src/client/duck/epic-recover.spec.js +126 -0
  331. package/dist/esm/src/client/duck/epic-recover.spec.js.map +1 -0
  332. package/dist/esm/src/client/duck/epics.d.ts +4 -0
  333. package/dist/esm/src/client/duck/epics.d.ts.map +1 -0
  334. package/dist/esm/src/client/duck/epics.js +33 -0
  335. package/dist/esm/src/client/duck/epics.js.map +1 -0
  336. package/dist/esm/src/client/duck/mod.d.ts +29 -0
  337. package/dist/esm/src/client/duck/mod.d.ts.map +1 -0
  338. package/dist/esm/src/client/duck/mod.js +29 -0
  339. package/dist/esm/src/client/duck/mod.js.map +1 -0
  340. package/dist/esm/src/client/duck/operations.d.ts +23 -0
  341. package/dist/esm/src/client/duck/operations.d.ts.map +1 -0
  342. package/dist/esm/src/client/duck/operations.js +4 -0
  343. package/dist/esm/src/client/duck/operations.js.map +1 -0
  344. package/dist/esm/src/client/duck/reducers.d.ts +59 -0
  345. package/dist/esm/src/client/duck/reducers.d.ts.map +1 -0
  346. package/dist/esm/src/client/duck/reducers.js +26 -0
  347. package/dist/esm/src/client/duck/reducers.js.map +1 -0
  348. package/dist/esm/src/client/duck/selectors.d.ts +21 -0
  349. package/dist/esm/src/client/duck/selectors.d.ts.map +1 -0
  350. package/dist/esm/src/client/duck/selectors.js +22 -0
  351. package/dist/esm/src/client/duck/selectors.js.map +1 -0
  352. package/dist/esm/src/client/duck/tests.spec.d.ts +3 -0
  353. package/dist/esm/src/client/duck/tests.spec.d.ts.map +1 -0
  354. package/dist/esm/src/client/duck/tests.spec.js +24 -0
  355. package/dist/esm/src/client/duck/tests.spec.js.map +1 -0
  356. package/dist/esm/src/client/duck/types.d.ts +21 -0
  357. package/dist/esm/src/client/duck/types.d.ts.map +1 -0
  358. package/dist/esm/src/client/duck/types.js +21 -0
  359. package/dist/esm/src/client/duck/types.js.map +1 -0
  360. package/dist/esm/src/client/duck/utils.d.ts +21 -0
  361. package/dist/esm/src/client/duck/utils.d.ts.map +1 -0
  362. package/dist/esm/src/client/duck/utils.js +2 -0
  363. package/dist/esm/src/client/duck/utils.js.map +1 -0
  364. package/dist/esm/src/client/grpc-manager.d.ts +29 -0
  365. package/dist/esm/src/client/grpc-manager.d.ts.map +1 -0
  366. package/dist/esm/src/client/grpc-manager.js +353 -0
  367. package/dist/esm/src/client/grpc-manager.js.map +1 -0
  368. package/dist/esm/src/client/grpc-manager.spec.d.ts +3 -0
  369. package/dist/esm/src/client/grpc-manager.spec.d.ts.map +1 -0
  370. package/dist/esm/src/client/grpc-manager.spec.js +17 -0
  371. package/dist/esm/src/client/grpc-manager.spec.js.map +1 -0
  372. package/dist/esm/src/client/payload-store.d.ts +26 -0
  373. package/dist/esm/src/client/payload-store.d.ts.map +1 -0
  374. package/dist/esm/src/client/payload-store.js +112 -0
  375. package/dist/esm/src/client/payload-store.js.map +1 -0
  376. package/dist/esm/src/client/payload-store.spec.d.ts +3 -0
  377. package/dist/esm/src/client/payload-store.spec.d.ts.map +1 -0
  378. package/dist/esm/src/client/payload-store.spec.js +15 -0
  379. package/dist/esm/src/client/payload-store.spec.js.map +1 -0
  380. package/dist/esm/src/client/puppet-service.d.ts +161 -0
  381. package/dist/esm/src/client/puppet-service.d.ts.map +1 -0
  382. package/dist/esm/src/client/puppet-service.js +1357 -0
  383. package/dist/esm/src/client/puppet-service.js.map +1 -0
  384. package/dist/esm/src/client/puppet-service.spec.d.ts +3 -0
  385. package/dist/esm/src/client/puppet-service.spec.d.ts.map +1 -0
  386. package/dist/esm/src/client/puppet-service.spec.js +50 -0
  387. package/dist/esm/src/client/puppet-service.spec.js.map +1 -0
  388. package/dist/esm/src/config.d.ts +20 -0
  389. package/dist/esm/src/config.d.ts.map +1 -0
  390. package/dist/esm/src/config.js +20 -0
  391. package/dist/esm/src/config.js.map +1 -0
  392. package/dist/esm/src/deprecated/chunk-pb.d.ts +15 -0
  393. package/dist/esm/src/deprecated/chunk-pb.d.ts.map +1 -0
  394. package/dist/esm/src/deprecated/chunk-pb.js +56 -0
  395. package/dist/esm/src/deprecated/chunk-pb.js.map +1 -0
  396. package/dist/esm/src/deprecated/chunk-pb.spec.d.ts +3 -0
  397. package/dist/esm/src/deprecated/chunk-pb.spec.d.ts.map +1 -0
  398. package/dist/esm/src/deprecated/chunk-pb.spec.js +142 -0
  399. package/dist/esm/src/deprecated/chunk-pb.spec.js.map +1 -0
  400. package/dist/esm/src/deprecated/conversation-id-file-box.d.ts +21 -0
  401. package/dist/esm/src/deprecated/conversation-id-file-box.d.ts.map +1 -0
  402. package/dist/esm/src/deprecated/conversation-id-file-box.js +39 -0
  403. package/dist/esm/src/deprecated/conversation-id-file-box.js.map +1 -0
  404. package/dist/esm/src/deprecated/conversation-id-file-box.spec.d.ts +3 -0
  405. package/dist/esm/src/deprecated/conversation-id-file-box.spec.d.ts.map +1 -0
  406. package/dist/esm/src/deprecated/conversation-id-file-box.spec.js +92 -0
  407. package/dist/esm/src/deprecated/conversation-id-file-box.spec.js.map +1 -0
  408. package/dist/esm/src/deprecated/file-box-chunk.d.ts +14 -0
  409. package/dist/esm/src/deprecated/file-box-chunk.d.ts.map +1 -0
  410. package/dist/esm/src/deprecated/file-box-chunk.js +63 -0
  411. package/dist/esm/src/deprecated/file-box-chunk.js.map +1 -0
  412. package/dist/esm/src/deprecated/file-box-chunk.spec.d.ts +3 -0
  413. package/dist/esm/src/deprecated/file-box-chunk.spec.d.ts.map +1 -0
  414. package/dist/esm/src/deprecated/file-box-chunk.spec.js +132 -0
  415. package/dist/esm/src/deprecated/file-box-chunk.spec.js.map +1 -0
  416. package/dist/esm/src/deprecated/file-box-pb.d.ts +15 -0
  417. package/dist/esm/src/deprecated/file-box-pb.d.ts.map +1 -0
  418. package/dist/esm/src/deprecated/file-box-pb.js +22 -0
  419. package/dist/esm/src/deprecated/file-box-pb.js.map +1 -0
  420. package/dist/esm/src/deprecated/file-box-pb.spec.d.ts +3 -0
  421. package/dist/esm/src/deprecated/file-box-pb.spec.d.ts.map +1 -0
  422. package/dist/esm/src/deprecated/file-box-pb.spec.js +16 -0
  423. package/dist/esm/src/deprecated/file-box-pb.spec.js.map +1 -0
  424. package/dist/esm/src/deprecated/file-box-pb.type.d.ts +15 -0
  425. package/dist/esm/src/deprecated/file-box-pb.type.d.ts.map +1 -0
  426. package/dist/esm/src/deprecated/file-box-pb.type.js +2 -0
  427. package/dist/esm/src/deprecated/file-box-pb.type.js.map +1 -0
  428. package/dist/esm/src/deprecated/mod.d.ts +3 -0
  429. package/dist/esm/src/deprecated/mod.d.ts.map +1 -0
  430. package/dist/esm/src/deprecated/mod.js +3 -0
  431. package/dist/esm/src/deprecated/mod.js.map +1 -0
  432. package/dist/esm/src/deprecated/next-data.d.ts +7 -0
  433. package/dist/esm/src/deprecated/next-data.d.ts.map +1 -0
  434. package/dist/esm/src/deprecated/next-data.js +23 -0
  435. package/dist/esm/src/deprecated/next-data.js.map +1 -0
  436. package/dist/esm/src/deprecated/serialize-file-box.d.ts +6 -0
  437. package/dist/esm/src/deprecated/serialize-file-box.d.ts.map +1 -0
  438. package/dist/esm/src/deprecated/serialize-file-box.js +18 -0
  439. package/dist/esm/src/deprecated/serialize-file-box.js.map +1 -0
  440. package/dist/esm/src/env-vars.d.ts +5 -0
  441. package/dist/esm/src/env-vars.d.ts.map +1 -0
  442. package/dist/esm/src/env-vars.js +83 -0
  443. package/dist/esm/src/env-vars.js.map +1 -0
  444. package/dist/esm/src/env-vars.spec.d.ts +3 -0
  445. package/dist/esm/src/env-vars.spec.d.ts.map +1 -0
  446. package/dist/esm/src/env-vars.spec.js +19 -0
  447. package/dist/esm/src/env-vars.spec.js.map +1 -0
  448. package/dist/esm/src/event-type-rev.d.ts +11 -0
  449. package/dist/esm/src/event-type-rev.d.ts.map +1 -0
  450. package/dist/esm/src/event-type-rev.js +14 -0
  451. package/dist/esm/src/event-type-rev.js.map +1 -0
  452. package/dist/esm/src/file-box-helper/mod.d.ts +4 -0
  453. package/dist/esm/src/file-box-helper/mod.d.ts.map +1 -0
  454. package/dist/esm/src/file-box-helper/mod.js +4 -0
  455. package/dist/esm/src/file-box-helper/mod.js.map +1 -0
  456. package/dist/esm/src/file-box-helper/normalize-filebox.d.ts +6 -0
  457. package/dist/esm/src/file-box-helper/normalize-filebox.d.ts.map +1 -0
  458. package/dist/esm/src/file-box-helper/normalize-filebox.js +72 -0
  459. package/dist/esm/src/file-box-helper/normalize-filebox.js.map +1 -0
  460. package/dist/esm/src/file-box-helper/normalize-filebox.spec.d.ts +3 -0
  461. package/dist/esm/src/file-box-helper/normalize-filebox.spec.d.ts.map +1 -0
  462. package/dist/esm/src/file-box-helper/normalize-filebox.spec.js +33 -0
  463. package/dist/esm/src/file-box-helper/normalize-filebox.spec.js.map +1 -0
  464. package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.d.ts +6 -0
  465. package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.d.ts.map +1 -0
  466. package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.js +42 -0
  467. package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.js.map +1 -0
  468. package/dist/esm/src/file-box-helper/uuidify-file-box-local.d.ts +5 -0
  469. package/dist/esm/src/file-box-helper/uuidify-file-box-local.d.ts.map +1 -0
  470. package/dist/esm/src/file-box-helper/uuidify-file-box-local.js +16 -0
  471. package/dist/esm/src/file-box-helper/uuidify-file-box-local.js.map +1 -0
  472. package/dist/esm/src/mod.d.ts +8 -0
  473. package/dist/esm/src/mod.d.ts.map +1 -0
  474. package/dist/esm/src/mod.js +7 -0
  475. package/dist/esm/src/mod.js.map +1 -0
  476. package/dist/esm/src/mod.spec.d.ts +3 -0
  477. package/dist/esm/src/mod.spec.d.ts.map +1 -0
  478. package/dist/esm/src/mod.spec.js +7 -0
  479. package/dist/esm/src/mod.spec.js.map +1 -0
  480. package/dist/esm/src/package-json.d.ts +6 -0
  481. package/dist/esm/src/package-json.d.ts.map +1 -0
  482. package/dist/esm/src/package-json.js +98 -0
  483. package/dist/esm/src/package-json.js.map +1 -0
  484. package/dist/esm/src/package-json.spec.d.ts +3 -0
  485. package/dist/esm/src/package-json.spec.d.ts.map +1 -0
  486. package/dist/esm/src/package-json.spec.js +8 -0
  487. package/dist/esm/src/package-json.spec.js.map +1 -0
  488. package/dist/esm/src/pure-functions/timestamp.d.ts +8 -0
  489. package/dist/esm/src/pure-functions/timestamp.d.ts.map +1 -0
  490. package/dist/esm/src/pure-functions/timestamp.js +19 -0
  491. package/dist/esm/src/pure-functions/timestamp.js.map +1 -0
  492. package/dist/esm/src/server/event-stream-manager.d.ts +40 -0
  493. package/dist/esm/src/server/event-stream-manager.d.ts.map +1 -0
  494. package/dist/esm/src/server/event-stream-manager.js +318 -0
  495. package/dist/esm/src/server/event-stream-manager.js.map +1 -0
  496. package/dist/esm/src/server/grpc-error.d.ts +5 -0
  497. package/dist/esm/src/server/grpc-error.d.ts.map +1 -0
  498. package/dist/esm/src/server/grpc-error.js +8 -0
  499. package/dist/esm/src/server/grpc-error.js.map +1 -0
  500. package/dist/esm/src/server/health-implementation.d.ts +5 -0
  501. package/dist/esm/src/server/health-implementation.d.ts.map +1 -0
  502. package/dist/esm/src/server/health-implementation.js +52 -0
  503. package/dist/esm/src/server/health-implementation.js.map +1 -0
  504. package/dist/esm/src/server/puppet-implementation.d.ts +6 -0
  505. package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -0
  506. package/dist/esm/src/server/puppet-implementation.js +1200 -0
  507. package/dist/esm/src/server/puppet-implementation.js.map +1 -0
  508. package/dist/esm/src/server/puppet-server.d.ts +23 -0
  509. package/dist/esm/src/server/puppet-server.d.ts.map +1 -0
  510. package/dist/esm/src/server/puppet-server.js +152 -0
  511. package/dist/esm/src/server/puppet-server.js.map +1 -0
  512. package/dist/esm/src/server/puppet-server.spec.d.ts +3 -0
  513. package/dist/esm/src/server/puppet-server.spec.d.ts.map +1 -0
  514. package/dist/esm/src/server/puppet-server.spec.js +13 -0
  515. package/dist/esm/src/server/puppet-server.spec.js.map +1 -0
  516. package/dist/esm/tests/grpc-client.spec.d.ts +3 -0
  517. package/dist/esm/tests/grpc-client.spec.d.ts.map +1 -0
  518. package/dist/esm/tests/grpc-client.spec.js +132 -0
  519. package/dist/esm/tests/grpc-client.spec.js.map +1 -0
  520. package/dist/esm/tests/grpc-stream.spec.d.ts +15 -0
  521. package/dist/esm/tests/grpc-stream.spec.d.ts.map +1 -0
  522. package/dist/esm/tests/grpc-stream.spec.js +62 -0
  523. package/dist/esm/tests/grpc-stream.spec.js.map +1 -0
  524. package/dist/esm/tests/integration.spec.d.ts +3 -0
  525. package/dist/esm/tests/integration.spec.d.ts.map +1 -0
  526. package/dist/esm/tests/integration.spec.js +65 -0
  527. package/dist/esm/tests/integration.spec.js.map +1 -0
  528. package/dist/esm/tests/performance.spec.d.ts +14 -0
  529. package/dist/esm/tests/performance.spec.d.ts.map +1 -0
  530. package/dist/esm/tests/performance.spec.js +104 -0
  531. package/dist/esm/tests/performance.spec.js.map +1 -0
  532. package/dist/esm/tests/ready-event.spec.d.ts +3 -0
  533. package/dist/esm/tests/ready-event.spec.d.ts.map +1 -0
  534. package/dist/esm/tests/ready-event.spec.js +52 -0
  535. package/dist/esm/tests/ready-event.spec.js.map +1 -0
  536. package/dist/esm/tests/uuid-file-box.spec.d.ts +3 -0
  537. package/dist/esm/tests/uuid-file-box.spec.d.ts.map +1 -0
  538. package/dist/esm/tests/uuid-file-box.spec.js +49 -0
  539. package/dist/esm/tests/uuid-file-box.spec.js.map +1 -0
  540. package/package.json +97 -0
  541. package/src/auth/README.md +10 -0
  542. package/src/auth/auth-impl-token.spec.ts +81 -0
  543. package/src/auth/auth-impl-token.ts +108 -0
  544. package/src/auth/ca.spec.ts +116 -0
  545. package/src/auth/ca.ts +137 -0
  546. package/src/auth/call-cred.spec.ts +25 -0
  547. package/src/auth/call-cred.ts +22 -0
  548. package/src/auth/env-vars.ts +32 -0
  549. package/src/auth/grpc-js.ts +29 -0
  550. package/src/auth/mod.ts +9 -0
  551. package/src/auth/mokey-patch-header-authorization.ts +45 -0
  552. package/src/auth/monkey-patch-header-authorization.spec.ts +26 -0
  553. package/src/client/duck/actions.ts +31 -0
  554. package/src/client/duck/epic-recover.spec.ts +180 -0
  555. package/src/client/duck/epic-recover.ts +109 -0
  556. package/src/client/duck/epics.ts +53 -0
  557. package/src/client/duck/mod.ts +38 -0
  558. package/src/client/duck/operations.ts +28 -0
  559. package/src/client/duck/reducers.ts +36 -0
  560. package/src/client/duck/selectors.ts +27 -0
  561. package/src/client/duck/tests.spec.ts +25 -0
  562. package/src/client/duck/types.ts +20 -0
  563. package/src/client/duck/utils.ts +20 -0
  564. package/src/client/grpc-manager.spec.ts +20 -0
  565. package/src/client/grpc-manager.ts +440 -0
  566. package/src/client/payload-store.spec.ts +19 -0
  567. package/src/client/payload-store.ts +153 -0
  568. package/src/client/puppet-service.spec.ts +59 -0
  569. package/src/client/puppet-service.ts +1938 -0
  570. package/src/config.ts +31 -0
  571. package/src/deprecated/chunk-pb.spec.ts +210 -0
  572. package/src/deprecated/chunk-pb.ts +75 -0
  573. package/src/deprecated/conversation-id-file-box.spec.ts +131 -0
  574. package/src/deprecated/conversation-id-file-box.ts +72 -0
  575. package/src/deprecated/file-box-chunk.spec.ts +184 -0
  576. package/src/deprecated/file-box-chunk.ts +87 -0
  577. package/src/deprecated/file-box-pb.spec.ts +31 -0
  578. package/src/deprecated/file-box-pb.ts +41 -0
  579. package/src/deprecated/file-box-pb.type.ts +16 -0
  580. package/src/deprecated/mod.ts +8 -0
  581. package/src/deprecated/next-data.ts +35 -0
  582. package/src/deprecated/serialize-file-box.ts +24 -0
  583. package/src/env-vars.spec.ts +23 -0
  584. package/src/env-vars.ts +100 -0
  585. package/src/event-type-rev.ts +19 -0
  586. package/src/file-box-helper/mod.ts +11 -0
  587. package/src/file-box-helper/normalize-filebox.spec.ts +47 -0
  588. package/src/file-box-helper/normalize-filebox.ts +90 -0
  589. package/src/file-box-helper/uuidify-file-box-grpc.ts +83 -0
  590. package/src/file-box-helper/uuidify-file-box-local.ts +31 -0
  591. package/src/mod.spec.ts +9 -0
  592. package/src/mod.ts +25 -0
  593. package/src/package-json.spec.ts +10 -0
  594. package/src/package-json.ts +101 -0
  595. package/src/pure-functions/timestamp.ts +28 -0
  596. package/src/server/event-stream-manager.ts +383 -0
  597. package/src/server/grpc-error.ts +23 -0
  598. package/src/server/health-implementation.ts +78 -0
  599. package/src/server/puppet-implementation.ts +1539 -0
  600. package/src/server/puppet-server.spec.ts +21 -0
  601. package/src/server/puppet-server.ts +239 -0
  602. package/src/typings.d.ts +68 -0
@@ -0,0 +1,1357 @@
1
+ /**
2
+ * Wechaty Open Source Software - https://github.com/wechaty
3
+ *
4
+ * @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
5
+ * Wechaty Contributors <https://github.com/wechaty>.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ *
19
+ */
20
+ import util from 'util';
21
+ import * as PUPPET from '@juzi/wechaty-puppet';
22
+ import { StringValue, puppet as grpcPuppet, } from '@juzi/wechaty-grpc';
23
+ import { puppet$, Duck as PuppetDuck, } from 'wechaty-redux';
24
+ import { Ducks,
25
+ // Bundle,
26
+ } from 'ducks';
27
+ // import type { Subscription } from 'rxjs'
28
+ /**
29
+ * Deprecated. Will be removed after Dec 31, 2022
30
+ */
31
+ import { packConversationIdFileBoxToPb, unpackFileBoxFromPb, } from '../deprecated/mod.js';
32
+ import { serializeFileBox } from '../deprecated/serialize-file-box.js';
33
+ import { millisecondsFromTimestamp } from '../pure-functions/timestamp.js';
34
+ import { uuidifyFileBoxGrpc, normalizeFileBoxUuid, } from '../file-box-helper/mod.js';
35
+ import { envVars, log, VERSION, } from '../config.js';
36
+ import { EventTypeRev, } from '../event-type-rev.js';
37
+ import { packageJson } from '../package-json.js';
38
+ import { GrpcManager } from './grpc-manager.js';
39
+ import { PayloadStore } from './payload-store.js';
40
+ class PuppetService extends PUPPET.Puppet {
41
+ options;
42
+ static VERSION = VERSION;
43
+ _cleanupCallbackList;
44
+ _payloadStore;
45
+ /**
46
+ * Wechaty Redux
47
+ */
48
+ _ducks;
49
+ _store;
50
+ _grpcManager;
51
+ get grpcManager() {
52
+ if (!this._grpcManager) {
53
+ throw new Error('no grpc manager');
54
+ }
55
+ return this._grpcManager;
56
+ }
57
+ /**
58
+ * UUIDify:
59
+ * We need to clone a FileBox
60
+ * to set uuid loader/saver with this grpc client
61
+ */
62
+ FileBoxUuid;
63
+ constructor(options = {}) {
64
+ super(options);
65
+ this.options = options;
66
+ this._payloadStore = new PayloadStore({
67
+ token: envVars.WECHATY_PUPPET_SERVICE_TOKEN(this.options.token),
68
+ });
69
+ this.hookPayloadStore();
70
+ this._ducks = new Ducks({ puppet: PuppetDuck });
71
+ this._store = this._ducks.configureStore();
72
+ this._cleanupCallbackList = [];
73
+ this.FileBoxUuid = uuidifyFileBoxGrpc(() => this.grpcManager.client);
74
+ }
75
+ async serializeFileBox(fileBox) {
76
+ /**
77
+ * 1. if the fileBox is one of type `Url`, `QRCode`, `Uuid`, etc,
78
+ * then it can be serialized by `fileBox.toString()`
79
+ * 2. if the fileBox is one of type `Stream`, `Buffer`, `File`, etc,
80
+ * then it need to be convert to type `Uuid`
81
+ * before serialized by `fileBox.toString()`
82
+ */
83
+ const normalizedFileBox = await normalizeFileBoxUuid(this.FileBoxUuid)(fileBox);
84
+ return JSON.stringify(normalizedFileBox);
85
+ }
86
+ name() {
87
+ return packageJson.name || 'wechaty-puppet-service';
88
+ }
89
+ version() {
90
+ return packageJson.version || '0.0.0';
91
+ }
92
+ async onStart() {
93
+ log.verbose('PuppetService', 'onStart()');
94
+ if (this._grpcManager) {
95
+ log.warn('PuppetService', 'onStart() found this.grpc is already existed. dropped.');
96
+ this._grpcManager = undefined;
97
+ }
98
+ log.verbose('PuppetService', 'start() instanciating GrpcManager ...');
99
+ const grpcManager = new GrpcManager(this.options);
100
+ log.verbose('PuppetService', 'start() instanciating GrpcManager ... done');
101
+ /**
102
+ * Huan(202108): when we started the event stream,
103
+ * the `this.grpc` need to be available for all listeners.
104
+ */
105
+ this._grpcManager = grpcManager;
106
+ log.verbose('PuppetService', 'start() setting up bridge grpc event stream ...');
107
+ this.bridgeGrpcEventStream(grpcManager);
108
+ log.verbose('PuppetService', 'start() setting up bridge grpc event stream ... done');
109
+ log.verbose('PuppetService', 'start() starting grpc manager...');
110
+ await grpcManager.start();
111
+ log.verbose('PuppetService', 'start() starting grpc manager... done');
112
+ /**
113
+ * Ducks management
114
+ */
115
+ const subscription = puppet$(this)
116
+ .subscribe(this._store.dispatch);
117
+ this._cleanupCallbackList.push(() => subscription.unsubscribe());
118
+ log.verbose('PuppetService', 'onStart() ... done');
119
+ }
120
+ async onStop() {
121
+ log.verbose('PuppetService', 'onStop()');
122
+ this._cleanupCallbackList.map(setImmediate);
123
+ this._cleanupCallbackList.length = 0;
124
+ if (this._grpcManager) {
125
+ log.verbose('PuppetService', 'onStop() stopping grpc manager ...');
126
+ const grpcManager = this._grpcManager;
127
+ this._grpcManager = undefined;
128
+ await grpcManager.stop();
129
+ log.verbose('PuppetService', 'onStop() stopping grpc manager ... done');
130
+ }
131
+ log.verbose('PuppetService', 'onStop() ... done');
132
+ }
133
+ hookPayloadStore() {
134
+ log.verbose('PuppetService', 'hookPayloadStore()');
135
+ this.on('login', async ({ contactId }) => {
136
+ try {
137
+ log.verbose('PuppetService', 'hookPayloadStore() this.on(login) contactId: "%s"', contactId);
138
+ await this._payloadStore.start(contactId);
139
+ }
140
+ catch (e) {
141
+ log.verbose('PuppetService', 'hookPayloadStore() this.on(login) rejection "%s"', e.message);
142
+ }
143
+ });
144
+ this.on('logout', async ({ contactId }) => {
145
+ log.verbose('PuppetService', 'hookPayloadStore() this.on(logout) contactId: "%s"', contactId);
146
+ try {
147
+ await this._payloadStore.stop();
148
+ }
149
+ catch (e) {
150
+ log.verbose('PuppetService', 'hookPayloadStore() this.on(logout) rejection "%s"', e.message);
151
+ }
152
+ });
153
+ }
154
+ bridgeGrpcEventStream(client) {
155
+ log.verbose('PuppetService', 'bridgeGrpcEventStream(client)');
156
+ client
157
+ .on('data', this.onGrpcStreamEvent.bind(this))
158
+ .on('end', () => {
159
+ log.verbose('PuppetService', 'bridgeGrpcEventStream() eventStream.on(end)');
160
+ })
161
+ .on('error', (e) => {
162
+ this.emit('error', e);
163
+ // https://github.com/wechaty/wechaty-puppet-service/issues/16
164
+ // log.verbose('PuppetService', 'bridgeGrpcEventStream() eventStream.on(error) %s', e)
165
+ // const reason = 'bridgeGrpcEventStream() eventStream.on(error) ' + e
166
+ /**
167
+ * Huan(202110): simple reset puppet when grpc client has error? (or not?)
168
+ */
169
+ // this.wrapAsync(this.reset())
170
+ // /**
171
+ // * The `Puppet` class have a throttleQueue for receiving the `reset` events
172
+ // * and it's the `Puppet` class's duty for call the `puppet.reset()` to reset the puppet.
173
+ // */
174
+ // if (this.state.on()) {
175
+ // this.emit('reset', { data: reason })
176
+ // }
177
+ })
178
+ .on('cancel', (...args) => {
179
+ log.verbose('PuppetService', 'bridgeGrpcEventStream() eventStream.on(cancel), %s', JSON.stringify(args));
180
+ });
181
+ }
182
+ onGrpcStreamEvent(event) {
183
+ const type = event.getType();
184
+ const payload = event.getPayload();
185
+ log.verbose('PuppetService', 'onGrpcStreamEvent({type:%s(%s), payload(len:%s)})', EventTypeRev[type], type, payload.length);
186
+ log.silly('PuppetService', 'onGrpcStreamEvent({type:%s(%s), payload:"%s"})', EventTypeRev[type], type, payload);
187
+ if (type !== grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT) {
188
+ this.emit('heartbeat', {
189
+ data: `onGrpcStreamEvent(${EventTypeRev[type]})`,
190
+ });
191
+ }
192
+ switch (type) {
193
+ case grpcPuppet.EventType.EVENT_TYPE_DONG:
194
+ this.emit('dong', JSON.parse(payload));
195
+ break;
196
+ case grpcPuppet.EventType.EVENT_TYPE_ERROR:
197
+ this.emit('error', JSON.parse(payload));
198
+ break;
199
+ case grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT:
200
+ this.emit('heartbeat', JSON.parse(payload));
201
+ break;
202
+ case grpcPuppet.EventType.EVENT_TYPE_FRIENDSHIP:
203
+ this.emit('friendship', JSON.parse(payload));
204
+ break;
205
+ case grpcPuppet.EventType.EVENT_TYPE_LOGIN:
206
+ {
207
+ const loginPayload = JSON.parse(payload);
208
+ (async () => this.login(loginPayload.contactId))().catch(e => log.error('PuppetService', 'onGrpcStreamEvent() this.login() rejection %s', e.message));
209
+ }
210
+ break;
211
+ case grpcPuppet.EventType.EVENT_TYPE_LOGOUT:
212
+ {
213
+ const logoutPayload = JSON.parse(payload);
214
+ (async () => this.logout(logoutPayload.data))().catch(e => log.error('PuppetService', 'onGrpcStreamEvent() this.logout() rejection %s', e.message));
215
+ }
216
+ break;
217
+ case grpcPuppet.EventType.EVENT_TYPE_DIRTY:
218
+ this.emit('dirty', JSON.parse(payload));
219
+ break;
220
+ case grpcPuppet.EventType.EVENT_TYPE_MESSAGE:
221
+ this.emit('message', JSON.parse(payload));
222
+ break;
223
+ case grpcPuppet.EventType.EVENT_TYPE_POST:
224
+ this.emit('post', JSON.parse(payload));
225
+ break;
226
+ case grpcPuppet.EventType.EVENT_TYPE_READY:
227
+ this.emit('ready', JSON.parse(payload));
228
+ break;
229
+ case grpcPuppet.EventType.EVENT_TYPE_ROOM_INVITE:
230
+ this.emit('room-invite', JSON.parse(payload));
231
+ break;
232
+ case grpcPuppet.EventType.EVENT_TYPE_ROOM_JOIN:
233
+ this.emit('room-join', JSON.parse(payload));
234
+ break;
235
+ case grpcPuppet.EventType.EVENT_TYPE_ROOM_LEAVE:
236
+ this.emit('room-leave', JSON.parse(payload));
237
+ break;
238
+ case grpcPuppet.EventType.EVENT_TYPE_ROOM_TOPIC:
239
+ this.emit('room-topic', JSON.parse(payload));
240
+ break;
241
+ case grpcPuppet.EventType.EVENT_TYPE_SCAN:
242
+ this.emit('scan', JSON.parse(payload));
243
+ break;
244
+ case grpcPuppet.EventType.EVENT_TYPE_RESET:
245
+ log.warn('PuppetService', 'onGrpcStreamEvent() got an EventType.EVENT_TYPE_RESET ?');
246
+ // the `reset` event should be dealed not send out
247
+ break;
248
+ case grpcPuppet.EventType.EVENT_TYPE_UNSPECIFIED:
249
+ log.error('PuppetService', 'onGrpcStreamEvent() got an EventType.EVENT_TYPE_UNSPECIFIED ?');
250
+ break;
251
+ default:
252
+ // Huan(202003): in default, the `type` type should be `never`, please check.
253
+ throw new Error('eventType ' + type + ' unsupported! (code should not reach here)');
254
+ }
255
+ }
256
+ async logout(reason) {
257
+ log.verbose('PuppetService', 'logout(%s)', reason ? `"${reason}"` : '');
258
+ await super.logout(reason);
259
+ try {
260
+ await util.promisify(this.grpcManager.client.logout
261
+ .bind(this.grpcManager.client))(new grpcPuppet.LogoutRequest());
262
+ }
263
+ catch (e) {
264
+ log.silly('PuppetService', 'logout() no grpc client');
265
+ }
266
+ }
267
+ ding(data) {
268
+ log.silly('PuppetService', 'ding(%s)', data);
269
+ const request = new grpcPuppet.DingRequest();
270
+ request.setData(data || '');
271
+ this.grpcManager.client.ding(request, (error, _response) => {
272
+ if (error) {
273
+ log.error('PuppetService', 'ding() rejection: %s', error);
274
+ }
275
+ });
276
+ }
277
+ /**
278
+ *
279
+ * Huan(202111) Issue #158 - Refactoring the 'dirty' event, dirtyPayload(),
280
+ * and XXXPayloadDirty() methods logic & spec
281
+ *
282
+ * @see https://github.com/wechaty/puppet/issues/158
283
+ *
284
+ */
285
+ async dirtyPayload(type, id) {
286
+ log.verbose('PuppetService', 'dirtyPayload(%s, %s)', type, id);
287
+ const request = new grpcPuppet.DirtyPayloadRequest();
288
+ request.setId(id);
289
+ request.setType(type);
290
+ try {
291
+ await util.promisify(this.grpcManager.client.dirtyPayload
292
+ .bind(this.grpcManager.client))(request);
293
+ }
294
+ catch (e) {
295
+ log.error('PuppetService', 'dirtyPayload() rejection: %s', e && e.message);
296
+ throw e;
297
+ }
298
+ }
299
+ /**
300
+ * `onDirty()` is called when the puppet emit `dirty` event.
301
+ * the event listener will be registered in `start()` from the `PuppetAbstract` class
302
+ */
303
+ onDirty({ payloadType, payloadId, }) {
304
+ log.verbose('PuppetService', 'onDirty(%s<%s>, %s)', PUPPET.types.Dirty[payloadType], payloadType, payloadId);
305
+ const dirtyMap = {
306
+ [PUPPET.types.Dirty.Contact]: async (id) => this._payloadStore.contact?.delete(id),
307
+ [PUPPET.types.Dirty.Friendship]: async (_) => { },
308
+ [PUPPET.types.Dirty.Message]: async (_) => { },
309
+ [PUPPET.types.Dirty.Post]: async (_) => { },
310
+ [PUPPET.types.Dirty.Room]: async (id) => this._payloadStore.room?.delete(id),
311
+ [PUPPET.types.Dirty.RoomMember]: async (id) => this._payloadStore.roomMember?.delete(id),
312
+ [PUPPET.types.Dirty.Unspecified]: async (id) => { throw new Error('Unspecified type with id: ' + id); },
313
+ };
314
+ const dirtyFuncSync = this.wrapAsync(dirtyMap[payloadType]);
315
+ dirtyFuncSync(payloadId);
316
+ /**
317
+ * We need to call `super.onDirty()` to clean the `PuppetAbstract` LRUCache
318
+ */
319
+ super.onDirty({ payloadId, payloadType });
320
+ }
321
+ async contactAlias(contactId, alias) {
322
+ log.verbose('PuppetService', 'contactAlias(%s, %s)', contactId, alias);
323
+ /**
324
+ * Get alias
325
+ */
326
+ if (typeof alias === 'undefined') {
327
+ const request = new grpcPuppet.ContactAliasRequest();
328
+ request.setId(contactId);
329
+ const response = await util.promisify(this.grpcManager.client.contactAlias
330
+ .bind(this.grpcManager.client))(request);
331
+ const result = response.getAlias();
332
+ if (result) {
333
+ return result;
334
+ }
335
+ {
336
+ // DEPRECATED, will be removed after Dec 31, 2022
337
+ const aliasWrapper = response.getAliasStringValueDeprecated();
338
+ if (!aliasWrapper) {
339
+ throw new Error('can not get aliasWrapper');
340
+ }
341
+ return aliasWrapper.getValue();
342
+ }
343
+ }
344
+ /**
345
+ * Set alias
346
+ */
347
+ const request = new grpcPuppet.ContactAliasRequest();
348
+ request.setId(contactId);
349
+ request.setAlias(alias || ''); // null -> '', in server, we treat '' as null
350
+ {
351
+ // DEPRECATED, will be removed after Dec 31, 2022
352
+ const aliasWrapper = new StringValue();
353
+ aliasWrapper.setValue(alias || ''); // null -> '', in server, we treat '' as null
354
+ request.setAliasStringValueDeprecated(aliasWrapper);
355
+ }
356
+ await util.promisify(this.grpcManager.client.contactAlias
357
+ .bind(this.grpcManager.client))(request);
358
+ }
359
+ async contactPhone(contactId, phoneList) {
360
+ log.verbose('PuppetService', 'contactPhone(%s, %s)', contactId, phoneList);
361
+ const request = new grpcPuppet.ContactPhoneRequest();
362
+ request.setContactId(contactId);
363
+ request.setPhonesList(phoneList);
364
+ await util.promisify(this.grpcManager.client.contactPhone
365
+ .bind(this.grpcManager.client))(request);
366
+ }
367
+ async contactCorporationRemark(contactId, corporationRemark) {
368
+ log.verbose('PuppetService', 'contactCorporationRemark(%s, %s)', contactId, corporationRemark);
369
+ const request = new grpcPuppet.ContactCorporationRemarkRequest();
370
+ request.setContactId(contactId);
371
+ if (corporationRemark) {
372
+ request.setCorporationRemark(corporationRemark);
373
+ }
374
+ {
375
+ // DEPRECATED, will be removed after Dec 31, 2022
376
+ const corporationRemarkWrapper = new StringValue();
377
+ if (corporationRemark) {
378
+ corporationRemarkWrapper.setValue(corporationRemark);
379
+ request.setCorporationRemarkStringValueDeprecated(corporationRemarkWrapper);
380
+ }
381
+ }
382
+ await util.promisify(this.grpcManager.client.contactCorporationRemark
383
+ .bind(this.grpcManager.client))(request);
384
+ }
385
+ async contactDescription(contactId, description) {
386
+ log.verbose('PuppetService', 'contactDescription(%s, %s)', contactId, description);
387
+ const request = new grpcPuppet.ContactDescriptionRequest();
388
+ request.setContactId(contactId);
389
+ if (description) {
390
+ request.setDescription(description);
391
+ }
392
+ {
393
+ // DEPRECATED, will be removed after Dec 31, 2022
394
+ const descriptionWrapper = new StringValue();
395
+ if (description) {
396
+ descriptionWrapper.setValue(description);
397
+ request.setDescriptionStringValueDeprecated(descriptionWrapper);
398
+ }
399
+ }
400
+ await util.promisify(this.grpcManager.client.contactDescription
401
+ .bind(this.grpcManager.client))(request);
402
+ }
403
+ async contactList() {
404
+ log.verbose('PuppetService', 'contactList()');
405
+ const response = await util.promisify(this.grpcManager.client.contactList
406
+ .bind(this.grpcManager.client))(new grpcPuppet.ContactListRequest());
407
+ return response.getIdsList();
408
+ }
409
+ async contactAvatar(contactId, fileBox) {
410
+ log.verbose('PuppetService', 'contactAvatar(%s)', contactId);
411
+ /**
412
+ * 1. set
413
+ */
414
+ if (fileBox) {
415
+ const request = new grpcPuppet.ContactAvatarRequest();
416
+ request.setId(contactId);
417
+ const serializedFileBox = await this.serializeFileBox(fileBox);
418
+ request.setFileBox(serializedFileBox);
419
+ {
420
+ // DEPRECATED, will be removed after Dec 31, 2022
421
+ const fileboxWrapper = new StringValue();
422
+ fileboxWrapper.setValue(await serializeFileBox(fileBox));
423
+ request.setFileboxStringValueDeprecated(fileboxWrapper);
424
+ }
425
+ await util.promisify(this.grpcManager.client.contactAvatar
426
+ .bind(this.grpcManager.client))(request);
427
+ return;
428
+ }
429
+ /**
430
+ * 2. get
431
+ */
432
+ const request = new grpcPuppet.ContactAvatarRequest();
433
+ request.setId(contactId);
434
+ const response = await util.promisify(this.grpcManager.client.contactAvatar
435
+ .bind(this.grpcManager.client))(request);
436
+ let jsonText;
437
+ jsonText = response.getFileBox();
438
+ {
439
+ // DEPRECATED, will be removed after Dec 31, 2022
440
+ const deprecated = true;
441
+ void deprecated;
442
+ if (!jsonText) {
443
+ const textWrapper = response.getFileboxStringValueDeprecated();
444
+ if (!textWrapper) {
445
+ throw new Error('can not get textWrapper');
446
+ }
447
+ jsonText = textWrapper.getValue();
448
+ }
449
+ }
450
+ return this.FileBoxUuid.fromJSON(jsonText);
451
+ }
452
+ async contactRawPayload(id) {
453
+ log.verbose('PuppetService', 'contactRawPayload(%s)', id);
454
+ const cachedPayload = await this._payloadStore.contact?.get(id);
455
+ if (cachedPayload) {
456
+ log.silly('PuppetService', 'contactRawPayload(%s) cache HIT', id);
457
+ return cachedPayload;
458
+ }
459
+ const request = new grpcPuppet.ContactPayloadRequest();
460
+ request.setId(id);
461
+ const response = await util.promisify(this.grpcManager.client.contactPayload
462
+ .bind(this.grpcManager.client))(request);
463
+ const payload = {
464
+ address: response.getAddress(),
465
+ alias: response.getAlias(),
466
+ avatar: response.getAvatar(),
467
+ city: response.getCity(),
468
+ corporation: response.getCorporation(),
469
+ coworker: response.getCoworker(),
470
+ description: response.getDescription(),
471
+ friend: response.getFriend(),
472
+ gender: response.getGender(),
473
+ /**
474
+ * Huan(202203): rename `getWeixin()` to `getHandle()` in v2.0.0
475
+ * @link https://github.com/wechaty/grpc/issues/174
476
+ */
477
+ handle: response.getWeixin(),
478
+ id: response.getId(),
479
+ name: response.getName(),
480
+ phone: response.getPhonesList(),
481
+ province: response.getProvince(),
482
+ signature: response.getSignature(),
483
+ star: response.getStar(),
484
+ title: response.getTitle(),
485
+ type: response.getType(),
486
+ /**
487
+ * `weixin` is deprecated, will be removed after Dec 31, 2022
488
+ * use `handle` instead.
489
+ */
490
+ weixin: response.getWeixin(),
491
+ };
492
+ await this._payloadStore.contact?.set(id, payload);
493
+ log.silly('PuppetService', 'contactRawPayload(%s) cache SET', id);
494
+ return payload;
495
+ }
496
+ async contactRawPayloadParser(payload) {
497
+ // log.silly('PuppetService', 'contactRawPayloadParser({id:%s})', payload.id)
498
+ // passthrough
499
+ return payload;
500
+ }
501
+ async contactSelfName(name) {
502
+ log.verbose('PuppetService', 'contactSelfName(%s)', name);
503
+ const request = new grpcPuppet.ContactSelfNameRequest();
504
+ request.setName(name);
505
+ await util.promisify(this.grpcManager.client.contactSelfName
506
+ .bind(this.grpcManager.client))(request);
507
+ }
508
+ async contactSelfQRCode() {
509
+ log.verbose('PuppetService', 'contactSelfQRCode()');
510
+ const response = await util.promisify(this.grpcManager.client.contactSelfQRCode
511
+ .bind(this.grpcManager.client))(new grpcPuppet.ContactSelfQRCodeRequest());
512
+ return response.getQrcode();
513
+ }
514
+ async contactSelfSignature(signature) {
515
+ log.verbose('PuppetService', 'contactSelfSignature(%s)', signature);
516
+ const request = new grpcPuppet.ContactSelfSignatureRequest();
517
+ request.setSignature(signature);
518
+ await util.promisify(this.grpcManager.client.contactSelfSignature
519
+ .bind(this.grpcManager.client))(request);
520
+ }
521
+ /**
522
+ *
523
+ * Conversation
524
+ *
525
+ */
526
+ conversationReadMark(conversationId, hasRead = true) {
527
+ log.verbose('PuppetService', 'conversationMarkRead(%s, %s)', conversationId, hasRead);
528
+ return PUPPET.throwUnsupportedError('not implemented. See https://github.com/wechaty/wechaty-puppet/pull/132');
529
+ }
530
+ /**
531
+ *
532
+ * Message
533
+ *
534
+ */
535
+ async messageMiniProgram(messageId) {
536
+ log.verbose('PuppetService', 'messageMiniProgram(%s)', messageId);
537
+ const request = new grpcPuppet.MessageMiniProgramRequest();
538
+ request.setId(messageId);
539
+ const response = await util.promisify(this.grpcManager.client.messageMiniProgram
540
+ .bind(this.grpcManager.client))(request);
541
+ let miniProgramPayload = response.getMiniProgram()?.toObject();
542
+ if (!miniProgramPayload) {
543
+ /**
544
+ * Deprecated: will be removed after Dec 22, 2022
545
+ */
546
+ const jsonText = response.getMiniProgramDeprecated();
547
+ miniProgramPayload = JSON.parse(jsonText);
548
+ }
549
+ const payload = {
550
+ ...miniProgramPayload,
551
+ };
552
+ return payload;
553
+ }
554
+ async messageLocation(messageId) {
555
+ log.verbose('PuppetService', 'messageLocation(%s)', messageId);
556
+ const request = new grpcPuppet.MessageLocationRequest();
557
+ request.setId(messageId);
558
+ const response = await util.promisify(this.grpcManager.client.messageLocation
559
+ .bind(this.grpcManager.client))(request);
560
+ const locationPayload = response.getLocation();
561
+ const payload = {
562
+ accuracy: 0,
563
+ address: 'NOADDRESS',
564
+ latitude: 0,
565
+ longitude: 0,
566
+ name: 'NONAME',
567
+ ...locationPayload,
568
+ };
569
+ return payload;
570
+ }
571
+ async messageImage(messageId, imageType) {
572
+ log.verbose('PuppetService', 'messageImage(%s, %s[%s])', messageId, imageType, PUPPET.types.Image[imageType]);
573
+ try {
574
+ const request = new grpcPuppet.MessageImageRequest();
575
+ request.setId(messageId);
576
+ request.setType(imageType);
577
+ const response = await util.promisify(this.grpcManager.client.messageImage
578
+ .bind(this.grpcManager.client))(request);
579
+ const jsonText = response.getFileBox();
580
+ if (jsonText) {
581
+ return this.FileBoxUuid.fromJSON(jsonText);
582
+ }
583
+ }
584
+ catch (e) {
585
+ log.verbose('PuppetService', 'messageImage() rejection %s', e.message);
586
+ }
587
+ {
588
+ // Deprecated. Will be removed after Dec 31, 2022
589
+ const request = new grpcPuppet.MessageImageStreamRequest();
590
+ request.setId(messageId);
591
+ request.setType(imageType);
592
+ const pbStream = this.grpcManager.client.messageImageStream(request);
593
+ const fileBox = await unpackFileBoxFromPb(pbStream);
594
+ // const fileBoxChunkStream = unpackFileBoxChunk(stream)
595
+ // return unpackFileBox(fileBoxChunkStream)
596
+ return fileBox;
597
+ }
598
+ }
599
+ async messageContact(messageId) {
600
+ log.verbose('PuppetService', 'messageContact(%s)', messageId);
601
+ const request = new grpcPuppet.MessageContactRequest();
602
+ request.setId(messageId);
603
+ const response = await util.promisify(this.grpcManager.client.messageContact
604
+ .bind(this.grpcManager.client))(request);
605
+ const contactId = response.getId();
606
+ return contactId;
607
+ }
608
+ async messageSendMiniProgram(conversationId, miniProgramPayload) {
609
+ log.verbose('PuppetService', 'messageSendMiniProgram(%s, "%s")', conversationId, JSON.stringify(miniProgramPayload));
610
+ const request = new grpcPuppet.MessageSendMiniProgramRequest();
611
+ request.setConversationId(conversationId);
612
+ const pbMiniProgramPayload = new grpcPuppet.MiniProgramPayload();
613
+ if (miniProgramPayload.appid) {
614
+ pbMiniProgramPayload.setAppid(miniProgramPayload.appid);
615
+ }
616
+ if (miniProgramPayload.description) {
617
+ pbMiniProgramPayload.setDescription(miniProgramPayload.description);
618
+ }
619
+ if (miniProgramPayload.iconUrl) {
620
+ pbMiniProgramPayload.setIconUrl(miniProgramPayload.iconUrl);
621
+ }
622
+ if (miniProgramPayload.pagePath) {
623
+ pbMiniProgramPayload.setPagePath(miniProgramPayload.pagePath);
624
+ }
625
+ if (miniProgramPayload.shareId) {
626
+ pbMiniProgramPayload.setShareId(miniProgramPayload.shareId);
627
+ }
628
+ if (miniProgramPayload.thumbKey) {
629
+ pbMiniProgramPayload.setThumbKey(miniProgramPayload.thumbKey);
630
+ }
631
+ if (miniProgramPayload.thumbUrl) {
632
+ pbMiniProgramPayload.setThumbUrl(miniProgramPayload.thumbUrl);
633
+ }
634
+ if (miniProgramPayload.title) {
635
+ pbMiniProgramPayload.setTitle(miniProgramPayload.title);
636
+ }
637
+ if (miniProgramPayload.username) {
638
+ pbMiniProgramPayload.setUsername(miniProgramPayload.username);
639
+ }
640
+ request.setMiniProgram(pbMiniProgramPayload);
641
+ /**
642
+ * Deprecated: will be removed after Dec 31, 2022
643
+ */
644
+ request.setMiniProgramDeprecated(JSON.stringify(miniProgramPayload));
645
+ const response = await util.promisify(this.grpcManager.client.messageSendMiniProgram
646
+ .bind(this.grpcManager.client))(request);
647
+ const messageId = response.getId();
648
+ if (messageId) {
649
+ return messageId;
650
+ }
651
+ {
652
+ /**
653
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
654
+ */
655
+ const messageIdWrapper = response.getIdStringValueDeprecated();
656
+ if (messageIdWrapper) {
657
+ return messageIdWrapper.getValue();
658
+ }
659
+ }
660
+ }
661
+ async messageSendLocation(conversationId, locationPayload) {
662
+ log.verbose('PuppetService', 'messageSendLocation(%s)', conversationId, JSON.stringify(locationPayload));
663
+ const request = new grpcPuppet.MessageSendLocationRequest();
664
+ request.setConversationId(conversationId);
665
+ const pbLocationPayload = new grpcPuppet.LocationPayload();
666
+ pbLocationPayload.setAccuracy(locationPayload.accuracy);
667
+ pbLocationPayload.setAddress(locationPayload.address);
668
+ pbLocationPayload.setLatitude(locationPayload.latitude);
669
+ pbLocationPayload.setLongitude(locationPayload.longitude);
670
+ pbLocationPayload.setName(locationPayload.name);
671
+ request.setLocation(pbLocationPayload);
672
+ const response = await util.promisify(this.grpcManager.client.messageSendLocation
673
+ .bind(this.grpcManager.client))(request);
674
+ const id = response.getId();
675
+ if (id) {
676
+ return id;
677
+ }
678
+ }
679
+ async messageRecall(messageId) {
680
+ log.verbose('PuppetService', 'messageRecall(%s)', messageId);
681
+ const request = new grpcPuppet.MessageRecallRequest();
682
+ request.setId(messageId);
683
+ const response = await util.promisify(this.grpcManager.client.messageRecall
684
+ .bind(this.grpcManager.client))(request);
685
+ return response.getSuccess();
686
+ }
687
+ async messageFile(id) {
688
+ log.verbose('PuppetService', 'messageFile(%s)', id);
689
+ try {
690
+ const request = new grpcPuppet.MessageFileRequest();
691
+ request.setId(id);
692
+ const response = await util.promisify(this.grpcManager.client.messageFile
693
+ .bind(this.grpcManager.client))(request);
694
+ const jsonText = response.getFileBox();
695
+ if (jsonText) {
696
+ return this.FileBoxUuid.fromJSON(jsonText);
697
+ }
698
+ }
699
+ catch (e) {
700
+ log.warn('PuppetService', 'messageFile() rejection: %s', e.message);
701
+ log.warn('PuppetService', [
702
+ 'This might because you are using Wechaty v1.x with a Puppet Service v0.x',
703
+ 'Contact your Wechaty Puppet Service provided to report this problem',
704
+ 'Related issues:',
705
+ ' - https://github.com/wechaty/puppet-service/issues/179',
706
+ ' - https://github.com/wechaty/puppet-service/pull/170',
707
+ ].join('\n'));
708
+ }
709
+ {
710
+ // Deprecated. `MessageFileStream` Will be removed after Dec 31, 2022
711
+ const request = new grpcPuppet.MessageFileStreamRequest();
712
+ request.setId(id);
713
+ const pbStream = this.grpcManager.client.messageFileStream(request);
714
+ // const fileBoxChunkStream = unpackFileBoxChunk(pbStream)
715
+ // return unpackFileBox(fileBoxChunkStream)
716
+ const fileBox = await unpackFileBoxFromPb(pbStream);
717
+ return fileBox;
718
+ }
719
+ }
720
+ async messageForward(conversationId, messageId) {
721
+ log.verbose('PuppetService', 'messageForward(%s, %s)', conversationId, messageId);
722
+ const request = new grpcPuppet.MessageForwardRequest();
723
+ request.setConversationId(conversationId);
724
+ request.setMessageId(messageId);
725
+ const response = await util.promisify(this.grpcManager.client.messageForward
726
+ .bind(this.grpcManager.client))(request);
727
+ const forwardedMessageId = response.getId();
728
+ if (forwardedMessageId) {
729
+ return forwardedMessageId;
730
+ }
731
+ {
732
+ /**
733
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
734
+ */
735
+ const messageIdWrapper = response.getIdStringValueDeprecated();
736
+ if (messageIdWrapper) {
737
+ return messageIdWrapper.getValue();
738
+ }
739
+ }
740
+ }
741
+ async messageRawPayload(id) {
742
+ log.verbose('PuppetService', 'messageRawPayload(%s)', id);
743
+ // const cachedPayload = await this.payloadStore.message?.get(id)
744
+ // if (cachedPayload) {
745
+ // log.silly('PuppetService', 'messageRawPayload(%s) cache HIT', id)
746
+ // return cachedPayload
747
+ // }
748
+ const request = new grpcPuppet.MessagePayloadRequest();
749
+ request.setId(id);
750
+ const response = await util.promisify(this.grpcManager.client.messagePayload
751
+ .bind(this.grpcManager.client))(request);
752
+ let timestamp;
753
+ const receiveTime = response.getReceiveTime();
754
+ if (receiveTime) {
755
+ timestamp = millisecondsFromTimestamp(receiveTime);
756
+ }
757
+ else {
758
+ // Deprecated: will be removed after Dec 31, 2022
759
+ timestamp = response.getTimestampDeprecated();
760
+ }
761
+ const payload = {
762
+ filename: response.getFilename(),
763
+ id: response.getId(),
764
+ listenerId: response.getListenerId(),
765
+ mentionIdList: response.getMentionIdsList(),
766
+ roomId: response.getRoomId(),
767
+ talkerId: response.getTalkerId(),
768
+ text: response.getText(),
769
+ timestamp,
770
+ type: response.getType(),
771
+ };
772
+ // log.silly('PuppetService', 'messageRawPayload(%s) cache SET', id)
773
+ // await this.payloadStore.message?.set(id, payload)
774
+ return payload;
775
+ }
776
+ async messageRawPayloadParser(payload) {
777
+ // log.silly('PuppetService', 'messagePayload({id:%s})', payload.id)
778
+ // passthrough
779
+ return payload;
780
+ }
781
+ async messageSendText(conversationId, text, mentionIdList) {
782
+ log.verbose('PuppetService', 'messageSend(%s, %s)', conversationId, text);
783
+ const request = new grpcPuppet.MessageSendTextRequest();
784
+ request.setConversationId(conversationId);
785
+ request.setText(text);
786
+ if (typeof mentionIdList !== 'undefined') {
787
+ request.setMentionalIdsList(mentionIdList);
788
+ }
789
+ const response = await util.promisify(this.grpcManager.client.messageSendText
790
+ .bind(this.grpcManager.client))(request);
791
+ const messageId = response.getId();
792
+ if (messageId) {
793
+ return messageId;
794
+ }
795
+ {
796
+ /**
797
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
798
+ */
799
+ const messageIdWrapper = response.getIdStringValueDeprecated();
800
+ if (messageIdWrapper) {
801
+ return messageIdWrapper.getValue();
802
+ }
803
+ }
804
+ }
805
+ async messageSendFile(conversationId, fileBox) {
806
+ log.verbose('PuppetService', 'messageSendFile(%s, %s)', conversationId, fileBox);
807
+ try {
808
+ const request = new grpcPuppet.MessageSendFileRequest();
809
+ request.setConversationId(conversationId);
810
+ const serializedFileBox = await this.serializeFileBox(fileBox);
811
+ request.setFileBox(serializedFileBox);
812
+ const response = await util.promisify(this.grpcManager.client.messageSendFile
813
+ .bind(this.grpcManager.client))(request);
814
+ const messageId = response.getId();
815
+ if (messageId) {
816
+ return messageId;
817
+ }
818
+ else {
819
+ /**
820
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
821
+ */
822
+ const messageIdWrapper = response.getIdStringValueDeprecated();
823
+ if (messageIdWrapper) {
824
+ return messageIdWrapper.getValue();
825
+ }
826
+ }
827
+ return; // void
828
+ }
829
+ catch (e) {
830
+ log.verbose('PuppetService', 'messageSendFile() rejection: %s', e.message);
831
+ }
832
+ /**
833
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
834
+ * The old server will not support `Upload` gRPC method,
835
+ * which I'm expecting the above code will throw a exception,
836
+ * then the below code will be executed.
837
+ */
838
+ return this.messageSendFileStream(conversationId, fileBox);
839
+ }
840
+ async messageSendContact(conversationId, contactId) {
841
+ log.verbose('PuppetService', 'messageSend("%s", %s)', conversationId, contactId);
842
+ const request = new grpcPuppet.MessageSendContactRequest();
843
+ request.setConversationId(conversationId);
844
+ request.setContactId(contactId);
845
+ const response = await util.promisify(this.grpcManager.client.messageSendContact
846
+ .bind(this.grpcManager.client))(request);
847
+ const messageId = response.getId();
848
+ if (messageId) {
849
+ return messageId;
850
+ }
851
+ {
852
+ /**
853
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
854
+ */
855
+ const messageIdWrapper = response.getIdStringValueDeprecated();
856
+ if (messageIdWrapper) {
857
+ return messageIdWrapper.getValue();
858
+ }
859
+ }
860
+ }
861
+ async messageSendUrl(conversationId, urlLinkPayload) {
862
+ log.verbose('PuppetService', 'messageSendUrl("%s", %s)', conversationId, JSON.stringify(urlLinkPayload));
863
+ const request = new grpcPuppet.MessageSendUrlRequest();
864
+ request.setConversationId(conversationId);
865
+ const pbUrlLinkPayload = new grpcPuppet.UrlLinkPayload();
866
+ pbUrlLinkPayload.setUrl(urlLinkPayload.url);
867
+ pbUrlLinkPayload.setTitle(urlLinkPayload.title);
868
+ if (urlLinkPayload.description) {
869
+ pbUrlLinkPayload.setDescription(urlLinkPayload.description);
870
+ }
871
+ if (urlLinkPayload.thumbnailUrl) {
872
+ pbUrlLinkPayload.setThumbnailUrl(urlLinkPayload.thumbnailUrl);
873
+ }
874
+ request.setUrlLink(pbUrlLinkPayload);
875
+ // Deprecated: will be removed after Dec 31, 2022
876
+ request.setUrlLinkDeprecated(JSON.stringify(urlLinkPayload));
877
+ const response = await util.promisify(this.grpcManager.client.messageSendUrl
878
+ .bind(this.grpcManager.client))(request);
879
+ const messageId = response.getId();
880
+ if (messageId) {
881
+ return messageId;
882
+ }
883
+ {
884
+ /**
885
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
886
+ */
887
+ const messageIdWrapper = response.getIdStringValueDeprecated();
888
+ if (messageIdWrapper) {
889
+ return messageIdWrapper.getValue();
890
+ }
891
+ }
892
+ }
893
+ async messageUrl(messageId) {
894
+ log.verbose('PuppetService', 'messageUrl(%s)', messageId);
895
+ const request = new grpcPuppet.MessageUrlRequest();
896
+ request.setId(messageId);
897
+ const response = await util.promisify(this.grpcManager.client.messageUrl
898
+ .bind(this.grpcManager.client))(request);
899
+ let pbUrlLinkPayload = response.getUrlLink()?.toObject();
900
+ if (!pbUrlLinkPayload) {
901
+ // Deprecated: will be removed after Dec 31, 2022
902
+ const jsonText = response.getUrlLinkDeprecated();
903
+ pbUrlLinkPayload = JSON.parse(jsonText);
904
+ }
905
+ const payload = {
906
+ title: 'NOTITLE',
907
+ url: 'NOURL',
908
+ ...pbUrlLinkPayload,
909
+ };
910
+ return payload;
911
+ }
912
+ /**
913
+ *
914
+ * Room
915
+ *
916
+ */
917
+ async roomRawPayload(id) {
918
+ log.verbose('PuppetService', 'roomRawPayload(%s)', id);
919
+ const cachedPayload = await this._payloadStore.room?.get(id);
920
+ if (cachedPayload) {
921
+ log.silly('PuppetService', 'roomRawPayload(%s) cache HIT', id);
922
+ return cachedPayload;
923
+ }
924
+ const request = new grpcPuppet.RoomPayloadRequest();
925
+ request.setId(id);
926
+ const response = await util.promisify(this.grpcManager.client.roomPayload
927
+ .bind(this.grpcManager.client))(request);
928
+ const payload = {
929
+ adminIdList: response.getAdminIdsList(),
930
+ avatar: response.getAvatar(),
931
+ handle: response.getHandle(),
932
+ id: response.getId(),
933
+ memberIdList: response.getMemberIdsList(),
934
+ ownerId: response.getOwnerId(),
935
+ topic: response.getTopic(),
936
+ };
937
+ await this._payloadStore.room?.set(id, payload);
938
+ log.silly('PuppetService', 'roomRawPayload(%s) cache SET', id);
939
+ return payload;
940
+ }
941
+ async roomRawPayloadParser(payload) {
942
+ // log.silly('PuppetService', 'roomRawPayloadParser({id:%s})', payload.id)
943
+ // passthrough
944
+ return payload;
945
+ }
946
+ async roomList() {
947
+ log.verbose('PuppetService', 'roomList()');
948
+ const response = await util.promisify(this.grpcManager.client.roomList
949
+ .bind(this.grpcManager.client))(new grpcPuppet.RoomListRequest());
950
+ return response.getIdsList();
951
+ }
952
+ async roomDel(roomId, contactId) {
953
+ log.verbose('PuppetService', 'roomDel(%s, %s)', roomId, contactId);
954
+ const request = new grpcPuppet.RoomDelRequest();
955
+ request.setId(roomId);
956
+ request.setContactId(contactId);
957
+ await util.promisify(this.grpcManager.client.roomDel
958
+ .bind(this.grpcManager.client))(request);
959
+ }
960
+ async roomAvatar(roomId) {
961
+ log.verbose('PuppetService', 'roomAvatar(%s)', roomId);
962
+ const request = new grpcPuppet.RoomAvatarRequest();
963
+ request.setId(roomId);
964
+ const response = await util.promisify(this.grpcManager.client.roomAvatar
965
+ .bind(this.grpcManager.client))(request);
966
+ const jsonText = response.getFileBox();
967
+ return this.FileBoxUuid.fromJSON(jsonText);
968
+ }
969
+ async roomAdd(roomId, contactId, inviteOnly) {
970
+ log.verbose('PuppetService', 'roomAdd(%s, %s)', roomId, contactId);
971
+ const request = new grpcPuppet.RoomAddRequest();
972
+ request.setId(roomId);
973
+ request.setContactId(contactId);
974
+ request.setInviteOnly(inviteOnly);
975
+ await util.promisify(this.grpcManager.client.roomAdd
976
+ .bind(this.grpcManager.client))(request);
977
+ }
978
+ async roomTopic(roomId, topic) {
979
+ log.verbose('PuppetService', 'roomTopic(%s, %s)', roomId, topic);
980
+ /**
981
+ * Get
982
+ */
983
+ if (typeof topic === 'undefined') {
984
+ const request = new grpcPuppet.RoomTopicRequest();
985
+ request.setId(roomId);
986
+ const response = await util.promisify(this.grpcManager.client.roomTopic
987
+ .bind(this.grpcManager.client))(request);
988
+ const result = response.getTopic();
989
+ if (result) {
990
+ return result;
991
+ }
992
+ {
993
+ // DEPRECATED, will be removed after Dec 31, 2022
994
+ const topicWrapper = response.getTopicStringValueDeprecated();
995
+ if (topicWrapper) {
996
+ return topicWrapper.getValue();
997
+ }
998
+ }
999
+ return '';
1000
+ }
1001
+ /**
1002
+ * Set
1003
+ */
1004
+ const request = new grpcPuppet.RoomTopicRequest();
1005
+ request.setId(roomId);
1006
+ request.setTopic(topic);
1007
+ {
1008
+ // DEPRECATED, will be removed after Dec 31, 2022
1009
+ const topicWrapper = new StringValue();
1010
+ topicWrapper.setValue(topic);
1011
+ request.setTopicStringValueDeprecated(topicWrapper);
1012
+ }
1013
+ await util.promisify(this.grpcManager.client.roomTopic
1014
+ .bind(this.grpcManager.client))(request);
1015
+ }
1016
+ async roomCreate(contactIdList, topic) {
1017
+ log.verbose('PuppetService', 'roomCreate(%s, %s)', contactIdList, topic);
1018
+ const request = new grpcPuppet.RoomCreateRequest();
1019
+ request.setContactIdsList(contactIdList);
1020
+ request.setTopic(topic);
1021
+ const response = await util.promisify(this.grpcManager.client.roomCreate
1022
+ .bind(this.grpcManager.client))(request);
1023
+ return response.getId();
1024
+ }
1025
+ async roomQuit(roomId) {
1026
+ log.verbose('PuppetService', 'roomQuit(%s)', roomId);
1027
+ const request = new grpcPuppet.RoomQuitRequest();
1028
+ request.setId(roomId);
1029
+ await util.promisify(this.grpcManager.client.roomQuit
1030
+ .bind(this.grpcManager.client))(request);
1031
+ }
1032
+ async roomQRCode(roomId) {
1033
+ log.verbose('PuppetService', 'roomQRCode(%s)', roomId);
1034
+ const request = new grpcPuppet.RoomQRCodeRequest();
1035
+ request.setId(roomId);
1036
+ const response = await util.promisify(this.grpcManager.client.roomQRCode
1037
+ .bind(this.grpcManager.client))(request);
1038
+ return response.getQrcode();
1039
+ }
1040
+ async roomMemberList(roomId) {
1041
+ log.verbose('PuppetService', 'roomMemberList(%s)', roomId);
1042
+ const request = new grpcPuppet.RoomMemberListRequest();
1043
+ request.setId(roomId);
1044
+ const response = await util.promisify(this.grpcManager.client.roomMemberList
1045
+ .bind(this.grpcManager.client))(request);
1046
+ return response.getMemberIdsList();
1047
+ }
1048
+ async roomMemberRawPayload(roomId, contactId) {
1049
+ log.verbose('PuppetService', 'roomMemberRawPayload(%s, %s)', roomId, contactId);
1050
+ const cachedPayload = await this._payloadStore.roomMember?.get(roomId);
1051
+ const cachedRoomMemberPayload = cachedPayload && cachedPayload[contactId];
1052
+ if (cachedRoomMemberPayload) {
1053
+ log.silly('PuppetService', 'roomMemberRawPayload(%s, %s) cache HIT', roomId, contactId);
1054
+ return cachedRoomMemberPayload;
1055
+ }
1056
+ const request = new grpcPuppet.RoomMemberPayloadRequest();
1057
+ request.setId(roomId);
1058
+ request.setMemberId(contactId);
1059
+ const response = await util.promisify(this.grpcManager.client.roomMemberPayload
1060
+ .bind(this.grpcManager.client))(request);
1061
+ const payload = {
1062
+ avatar: response.getAvatar(),
1063
+ id: response.getId(),
1064
+ inviterId: response.getInviterId(),
1065
+ name: response.getName(),
1066
+ roomAlias: response.getRoomAlias(),
1067
+ };
1068
+ await this._payloadStore.roomMember?.set(roomId, {
1069
+ ...cachedPayload,
1070
+ [contactId]: payload,
1071
+ });
1072
+ log.silly('PuppetService', 'roomMemberRawPayload(%s, %s) cache SET', roomId, contactId);
1073
+ return payload;
1074
+ }
1075
+ async roomMemberRawPayloadParser(payload) {
1076
+ // log.silly('PuppetService', 'roomMemberRawPayloadParser({id:%s})', payload.id)
1077
+ // passthrough
1078
+ return payload;
1079
+ }
1080
+ async roomAnnounce(roomId, text) {
1081
+ log.verbose('PuppetService', 'roomAnnounce(%s%s)', roomId, typeof text === 'undefined'
1082
+ ? ''
1083
+ : `, ${text}`);
1084
+ /**
1085
+ * Set
1086
+ */
1087
+ if (text) {
1088
+ const request = new grpcPuppet.RoomAnnounceRequest();
1089
+ request.setId(roomId);
1090
+ request.setText(text);
1091
+ {
1092
+ // DEPRECATED, will be removed after Dec 31, 2022
1093
+ const textWrapper = new StringValue();
1094
+ textWrapper.setValue(text);
1095
+ request.setTextStringValueDeprecated(textWrapper);
1096
+ }
1097
+ await util.promisify(this.grpcManager.client.roomAnnounce
1098
+ .bind(this.grpcManager.client))(request);
1099
+ return;
1100
+ }
1101
+ /**
1102
+ * Get
1103
+ */
1104
+ const request = new grpcPuppet.RoomAnnounceRequest();
1105
+ request.setId(roomId);
1106
+ const response = await util.promisify(this.grpcManager.client.roomAnnounce
1107
+ .bind(this.grpcManager.client))(request);
1108
+ const result = response.getText();
1109
+ if (result) {
1110
+ return result;
1111
+ }
1112
+ {
1113
+ // DEPRECATED, will be removed after Dec 31, 2022
1114
+ const textWrapper = response.getTextStringValueDeprecated();
1115
+ if (textWrapper) {
1116
+ return textWrapper.getValue();
1117
+ }
1118
+ }
1119
+ return '';
1120
+ }
1121
+ async roomInvitationAccept(roomInvitationId) {
1122
+ log.verbose('PuppetService', 'roomInvitationAccept(%s)', roomInvitationId);
1123
+ const request = new grpcPuppet.RoomInvitationAcceptRequest();
1124
+ request.setId(roomInvitationId);
1125
+ await util.promisify(this.grpcManager.client.roomInvitationAccept
1126
+ .bind(this.grpcManager.client))(request);
1127
+ }
1128
+ async roomInvitationRawPayload(id) {
1129
+ log.verbose('PuppetService', 'roomInvitationRawPayload(%s)', id);
1130
+ const request = new grpcPuppet.RoomInvitationPayloadRequest();
1131
+ request.setId(id);
1132
+ const response = await util.promisify(this.grpcManager.client.roomInvitationPayload
1133
+ .bind(this.grpcManager.client))(request);
1134
+ let timestamp;
1135
+ const receiveTime = response.getReceiveTime();
1136
+ if (receiveTime) {
1137
+ timestamp = millisecondsFromTimestamp(receiveTime);
1138
+ }
1139
+ {
1140
+ // Deprecated: will be removed after Dec 31, 2022
1141
+ const deprecated = true;
1142
+ void deprecated;
1143
+ if (!receiveTime) {
1144
+ timestamp = response.getTimestampUint64Deprecated();
1145
+ }
1146
+ }
1147
+ // FIXME: how to set it better?
1148
+ timestamp ??= 0;
1149
+ const payload = {
1150
+ avatar: response.getAvatar(),
1151
+ id: response.getId(),
1152
+ invitation: response.getInvitation(),
1153
+ inviterId: response.getInviterId(),
1154
+ memberCount: response.getMemberCount(),
1155
+ memberIdList: response.getMemberIdsList(),
1156
+ receiverId: response.getReceiverId(),
1157
+ timestamp,
1158
+ topic: response.getTopic(),
1159
+ };
1160
+ return payload;
1161
+ }
1162
+ async roomInvitationRawPayloadParser(payload) {
1163
+ // log.silly('PuppetService', 'roomInvitationRawPayloadParser({id:%s})', payload.id)
1164
+ // passthrough
1165
+ return payload;
1166
+ }
1167
+ /**
1168
+ *
1169
+ * Friendship
1170
+ *
1171
+ */
1172
+ async friendshipSearchPhone(phone) {
1173
+ log.verbose('PuppetService', 'friendshipSearchPhone(%s)', phone);
1174
+ const request = new grpcPuppet.FriendshipSearchPhoneRequest();
1175
+ request.setPhone(phone);
1176
+ const response = await util.promisify(this.grpcManager.client.friendshipSearchPhone
1177
+ .bind(this.grpcManager.client))(request);
1178
+ const contactId = response.getContactId();
1179
+ if (contactId) {
1180
+ return contactId;
1181
+ }
1182
+ {
1183
+ // DEPRECATED, will be removed after Dec 31, 2022
1184
+ const contactIdWrapper = response.getContactIdStringValueDeprecated();
1185
+ if (contactIdWrapper) {
1186
+ return contactIdWrapper.getValue();
1187
+ }
1188
+ }
1189
+ return null;
1190
+ }
1191
+ async friendshipSearchHandle(handle) {
1192
+ log.verbose('PuppetService', 'friendshipSearchHandle(%s)', handle);
1193
+ const request = new grpcPuppet.FriendshipSearchHandleRequest();
1194
+ /**
1195
+ * TODO: use `setHandle()` in v2.0.0
1196
+ * @link https://github.com/wechaty/grpc/issues/174
1197
+ */
1198
+ request.setWeixin(handle);
1199
+ const response = await util.promisify(this.grpcManager.client.friendshipSearchHandle
1200
+ .bind(this.grpcManager.client))(request);
1201
+ const contactId = response.getContactId();
1202
+ if (contactId) {
1203
+ return contactId;
1204
+ }
1205
+ {
1206
+ // DEPRECATED, will be removed after Dec 31, 2022
1207
+ const contactIdWrapper = response.getContactIdStringValueDeprecated();
1208
+ if (contactIdWrapper) {
1209
+ return contactIdWrapper.getValue();
1210
+ }
1211
+ }
1212
+ return null;
1213
+ }
1214
+ async friendshipRawPayload(id) {
1215
+ log.verbose('PuppetService', 'friendshipRawPayload(%s)', id);
1216
+ const request = new grpcPuppet.FriendshipPayloadRequest();
1217
+ request.setId(id);
1218
+ const response = await util.promisify(this.grpcManager.client.friendshipPayload
1219
+ .bind(this.grpcManager.client))(request);
1220
+ const payload = {
1221
+ contactId: response.getContactId(),
1222
+ hello: response.getHello(),
1223
+ id,
1224
+ scene: response.getScene(),
1225
+ stranger: response.getStranger(),
1226
+ ticket: response.getTicket(),
1227
+ type: response.getType(),
1228
+ }; // FIXME: Huan(202002)
1229
+ return payload;
1230
+ }
1231
+ async friendshipRawPayloadParser(payload) {
1232
+ // log.silly('PuppetService', 'friendshipRawPayloadParser({id:%s})', payload.id)
1233
+ // passthrough
1234
+ return payload;
1235
+ }
1236
+ async friendshipAdd(contactId, options) {
1237
+ log.verbose('PuppetService', 'friendshipAdd(%s, %s)', contactId, JSON.stringify(options));
1238
+ const request = new grpcPuppet.FriendshipAddRequest();
1239
+ request.setContactId(contactId);
1240
+ // FIXME: for backward compatibility, need to be removed after all puppet has updated.
1241
+ if (typeof options === 'string') {
1242
+ request.setHello(options);
1243
+ }
1244
+ else {
1245
+ request.setHello(options.hello);
1246
+ const referrer = new grpcPuppet.Referrer();
1247
+ if (options.contactId) {
1248
+ referrer.setContactId(options.contactId);
1249
+ }
1250
+ if (options.roomId) {
1251
+ referrer.setRoomId(options.roomId);
1252
+ }
1253
+ request.setReferrer(referrer);
1254
+ {
1255
+ // Deprecated: will be removed after Dec 31, 2022
1256
+ const contactIdWrapper = new StringValue();
1257
+ contactIdWrapper.setValue(options.contactId || '');
1258
+ const roomIdWrapper = new StringValue();
1259
+ roomIdWrapper.setValue(options.roomId || '');
1260
+ request.setSourceRoomIdStringValueDeprecated(roomIdWrapper);
1261
+ request.setSourceContactIdStringValueDeprecated(contactIdWrapper);
1262
+ }
1263
+ }
1264
+ await util.promisify(this.grpcManager.client.friendshipAdd
1265
+ .bind(this.grpcManager.client))(request);
1266
+ }
1267
+ async friendshipAccept(friendshipId) {
1268
+ log.verbose('PuppetService', 'friendshipAccept(%s)', friendshipId);
1269
+ const request = new grpcPuppet.FriendshipAcceptRequest();
1270
+ request.setId(friendshipId);
1271
+ await util.promisify(this.grpcManager.client.friendshipAccept
1272
+ .bind(this.grpcManager.client))(request);
1273
+ }
1274
+ /**
1275
+ *
1276
+ * Tag
1277
+ *
1278
+ */
1279
+ // add a tag for a Contact. Create it first if it not exist.
1280
+ async tagContactAdd(id, contactId) {
1281
+ log.verbose('PuppetService', 'tagContactAdd(%s, %s)', id, contactId);
1282
+ const request = new grpcPuppet.TagContactAddRequest();
1283
+ request.setId(id);
1284
+ request.setContactId(contactId);
1285
+ await util.promisify(this.grpcManager.client.tagContactAdd
1286
+ .bind(this.grpcManager.client))(request);
1287
+ }
1288
+ // remove a tag from the Contact
1289
+ async tagContactRemove(id, contactId) {
1290
+ log.verbose('PuppetService', 'tagContactRemove(%s, %s)', id, contactId);
1291
+ const request = new grpcPuppet.TagContactRemoveRequest();
1292
+ request.setId(id);
1293
+ request.setContactId(contactId);
1294
+ await util.promisify(this.grpcManager.client.tagContactRemove
1295
+ .bind(this.grpcManager.client))(request);
1296
+ }
1297
+ // delete a tag from Wechat
1298
+ async tagContactDelete(id) {
1299
+ log.verbose('PuppetService', 'tagContactDelete(%s)', id);
1300
+ const request = new grpcPuppet.TagContactDeleteRequest();
1301
+ request.setId(id);
1302
+ await util.promisify(this.grpcManager.client.tagContactDelete
1303
+ .bind(this.grpcManager.client))(request);
1304
+ }
1305
+ // get tags from a specific Contact
1306
+ async tagContactList(contactId) {
1307
+ log.verbose('PuppetService', 'tagContactList(%s)', contactId);
1308
+ const request = new grpcPuppet.TagContactListRequest();
1309
+ if (typeof contactId !== 'undefined') {
1310
+ request.setContactId(contactId);
1311
+ {
1312
+ /**
1313
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
1314
+ */
1315
+ const contactIdWrapper = new StringValue();
1316
+ contactIdWrapper.setValue(contactId);
1317
+ request.setContactIdStringValueDeprecated(contactIdWrapper);
1318
+ }
1319
+ }
1320
+ const response = await util.promisify(this.grpcManager.client.tagContactList
1321
+ .bind(this.grpcManager.client))(request);
1322
+ return response.getIdsList();
1323
+ }
1324
+ /**
1325
+ * @deprecated Will be removed in v2.0
1326
+ */
1327
+ async messageSendFileStream(conversationId, file) {
1328
+ const request = await packConversationIdFileBoxToPb(grpcPuppet.MessageSendFileStreamRequest)(conversationId, file);
1329
+ const response = await new Promise((resolve, reject) => {
1330
+ const stream = this.grpcManager.client.messageSendFileStream((err, response) => {
1331
+ if (err) {
1332
+ reject(err);
1333
+ }
1334
+ else {
1335
+ resolve(response);
1336
+ }
1337
+ });
1338
+ request.pipe(stream); // Huan(202203): FIXME: as unknown as
1339
+ });
1340
+ const messageId = response.getId();
1341
+ if (messageId) {
1342
+ return messageId;
1343
+ }
1344
+ {
1345
+ /**
1346
+ * Huan(202110): Deprecated: will be removed after Dec 31, 2022
1347
+ */
1348
+ const messageIdWrapper = response.getIdStringValueDeprecated();
1349
+ if (messageIdWrapper) {
1350
+ return messageIdWrapper.getValue();
1351
+ }
1352
+ }
1353
+ }
1354
+ }
1355
+ export { PuppetService, };
1356
+ export default PuppetService;
1357
+ //# sourceMappingURL=puppet-service.js.map