@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,440 @@
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 EventEmitter from 'events'
22
+ import crypto from 'crypto'
23
+
24
+ import { log } from '@juzi/wechaty-puppet'
25
+ import {
26
+ grpc,
27
+ puppet,
28
+ } from '@juzi/wechaty-grpc'
29
+ import {
30
+ timeoutPromise,
31
+ } from 'gerror'
32
+ import {
33
+ WechatyToken,
34
+ WechatyResolver,
35
+ } from 'wechaty-token'
36
+
37
+ import {
38
+ GRPC_OPTIONS,
39
+ envVars,
40
+ } from '../config.js'
41
+
42
+ import { callCredToken } from '../auth/mod.js'
43
+ import { GrpcStatus } from '../auth/grpc-js.js'
44
+ import {
45
+ TLS_CA_CERT,
46
+ TLS_INSECURE_SERVER_CERT_COMMON_NAME,
47
+ } from '../auth/ca.js'
48
+
49
+ import type { PuppetServiceOptions } from './puppet-service.js'
50
+
51
+ /**
52
+ * Huan(202108): register `wechaty` schema for gRPC service discovery
53
+ * so that we can use `wechaty:///SNI_UUIDv4` for gRPC address
54
+ *
55
+ * See: https://github.com/wechaty/wechaty-puppet-service/issues/155
56
+ */
57
+ WechatyResolver.setup()
58
+
59
+ class GrpcManager extends EventEmitter {
60
+
61
+ protected _client? : puppet.PuppetClient
62
+ get client () : puppet.PuppetClient {
63
+ if (!this._client) {
64
+ throw new Error('NO CLIENT')
65
+ }
66
+ return this._client
67
+ }
68
+
69
+ eventStream? : grpc.ClientReadableStream<puppet.EventResponse>
70
+
71
+ /**
72
+ * gRPC settings
73
+ */
74
+ caCert : Buffer
75
+ disableTls : boolean
76
+ endpoint : string
77
+ serverName : string
78
+ token : WechatyToken
79
+
80
+ constructor (private options: PuppetServiceOptions) {
81
+ super()
82
+ log.verbose('GrpcManager', 'constructor(%s)', JSON.stringify(options))
83
+
84
+ this.caCert = Buffer.from(
85
+ envVars.WECHATY_PUPPET_SERVICE_TLS_CA_CERT(this.options.tls?.caCert) || TLS_CA_CERT,
86
+ )
87
+ log.verbose('GrpcManager', 'constructor() tlsRootCert(hash): "%s"',
88
+ crypto.createHash('sha256')
89
+ .update(this.caCert)
90
+ .digest('hex'),
91
+ )
92
+
93
+ /**
94
+ * Token will be used in the gRPC resolver (in endpoint)
95
+ */
96
+ this.token = new WechatyToken(
97
+ envVars.WECHATY_PUPPET_SERVICE_TOKEN(this.options.token),
98
+ )
99
+ log.verbose('GrpcManager', 'constructor() token: "%s"', this.token)
100
+
101
+ this.endpoint = envVars.WECHATY_PUPPET_SERVICE_ENDPOINT(this.options.endpoint)
102
+ /**
103
+ * Wechaty Token Discovery-able URL
104
+ * See: wechaty-token / https://github.com/wechaty/wechaty-puppet-service/issues/155
105
+ */
106
+ || [
107
+ 'wechaty://',
108
+ envVars.WECHATY_PUPPET_SERVICE_AUTHORITY(this.options.authority),
109
+ '/',
110
+ this.token,
111
+ ].join('')
112
+ log.verbose('GrpcManager', 'constructor() endpoint: "%s"', this.endpoint)
113
+
114
+ /**
115
+ * Disable TLS
116
+ */
117
+ this.disableTls = envVars.WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT(this.options.tls?.disable)
118
+ log.verbose('GrpcManager', 'constructor() disableTls: "%s"', this.disableTls)
119
+
120
+ /**
121
+ * for Node.js TLS SNI
122
+ * https://en.wikipedia.org/wiki/Server_Name_Indication
123
+ */
124
+ const serverNameIndication = envVars.WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME(this.options.tls?.serverName)
125
+ /**
126
+ * Huan(202108): we use SNI from token
127
+ * if there is
128
+ * neither override from environment variable: `WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME`
129
+ * nor set from: `options.tls.serverName`
130
+ */
131
+ || this.token.sni
132
+
133
+ if (!serverNameIndication) {
134
+ throw new Error([
135
+ 'Wechaty Puppet Service requires a SNI as prefix of the token from version 0.30 and later.',
136
+ `You can add the "${TLS_INSECURE_SERVER_CERT_COMMON_NAME}_" prefix to your token`,
137
+ `like: "${TLS_INSECURE_SERVER_CERT_COMMON_NAME}_${this.token}"`,
138
+ 'and try again.',
139
+ ].join('\n'))
140
+ }
141
+
142
+ this.serverName = serverNameIndication
143
+ log.verbose('GrpcManager', 'constructor() serverName(SNI): "%s"', this.serverName)
144
+ }
145
+
146
+ async start (): Promise<void> {
147
+ log.verbose('GrpcManager', 'start()')
148
+
149
+ /**
150
+ * 1. Init grpc client
151
+ */
152
+ log.verbose('GrpcManager', 'start() initializing client ...')
153
+ await this.initClient()
154
+ log.verbose('GrpcManager', 'start() initializing client ... done')
155
+
156
+ /**
157
+ * 2. Connect to stream
158
+ */
159
+ log.verbose('GrpcManager', 'start() starting stream ...')
160
+ await this.startStream()
161
+ log.verbose('GrpcManager', 'start() starting stream ... done')
162
+
163
+ /**
164
+ * 3. Start the puppet
165
+ */
166
+ log.verbose('GrpcManager', 'start() calling grpc server: start() ...')
167
+ await util.promisify(
168
+ this.client.start
169
+ .bind(this.client),
170
+ )(new puppet.StartRequest())
171
+ log.verbose('GrpcManager', 'start() calling grpc server: start() ... done')
172
+
173
+ log.verbose('GrpcManager', 'start() ... done')
174
+ }
175
+
176
+ async stop (): Promise<void> {
177
+ log.verbose('GrpcManager', 'stop()')
178
+
179
+ /**
180
+ * 1. Disconnect from stream
181
+ */
182
+ log.verbose('GrpcManager', 'stop() stop stream ...')
183
+ this.stopStream()
184
+ log.verbose('GrpcManager', 'stop() stop stream ... done')
185
+
186
+ /**
187
+ * 2. Stop the puppet
188
+ */
189
+ try {
190
+ log.verbose('GrpcManager', 'stop() stop client ...')
191
+ await util.promisify(
192
+ this.client.stop
193
+ .bind(this.client),
194
+ )(new puppet.StopRequest())
195
+ log.verbose('GrpcManager', 'stop() stop client ... done')
196
+ } catch (e) {
197
+ this.emit('error', e)
198
+ }
199
+
200
+ /**
201
+ * 3. Destroy grpc client
202
+ */
203
+ try {
204
+ log.verbose('GrpcManager', 'stop() destroy client ...')
205
+ this.destroyClient()
206
+ log.verbose('GrpcManager', 'stop() destroy client ... done')
207
+ } catch (e) {
208
+ this.emit('error', e)
209
+ }
210
+
211
+ log.verbose('GrpcManager', 'stop() ... done')
212
+ }
213
+
214
+ protected async initClient (): Promise<void> {
215
+ log.verbose('GrpcManager', 'initClient()')
216
+
217
+ /**
218
+ * Huan(202108): for maximum compatible with the non-tls community servers/clients,
219
+ * we introduced the WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_{SERVER,CLIENT} environment variables.
220
+ * if it has been set, then we will run under HTTP instead of HTTPS
221
+ */
222
+ let credential
223
+ if (this.disableTls) {
224
+ log.warn('GrpcManager', 'initClient() TLS: disabled (INSECURE)')
225
+ credential = grpc.credentials.createInsecure()
226
+ } else {
227
+ log.verbose('GrpcManager', 'initClient() TLS: enabled')
228
+ const callCred = callCredToken(this.token.token)
229
+ const channelCred = grpc.credentials.createSsl(this.caCert)
230
+ const combCreds = grpc.credentials.combineChannelCredentials(channelCred, callCred)
231
+
232
+ credential = combCreds
233
+ }
234
+
235
+ const clientOptions: grpc.ChannelOptions = {
236
+ ...GRPC_OPTIONS,
237
+ 'grpc.ssl_target_name_override': this.serverName,
238
+ }
239
+
240
+ {
241
+ // Deprecated: this block will be removed after Dec 21, 2022.
242
+
243
+ /**
244
+ * Huan(202108): `grpc.default_authority` is a workaround
245
+ * for compatiblity with the non-tls community servers/clients.
246
+ *
247
+ * See: https://github.com/wechaty/wechaty-puppet-service/pull/78
248
+ */
249
+ const grpcDefaultAuthority = this.token.token
250
+ clientOptions['grpc.default_authority'] = grpcDefaultAuthority
251
+ }
252
+
253
+ if (this._client) {
254
+ log.warn('GrpcManager', 'initClient() this.#client exists? Old client has been dropped.')
255
+ this._client = undefined
256
+ }
257
+
258
+ this._client = new puppet.PuppetClient(
259
+ this.endpoint,
260
+ credential,
261
+ clientOptions,
262
+ )
263
+
264
+ log.verbose('GrpcManager', 'initClient() ... done')
265
+ }
266
+
267
+ protected destroyClient (): void {
268
+ log.verbose('GrpcManager', 'destroyClient()')
269
+
270
+ if (!this._client) {
271
+ log.warn('GrpcManager', 'destroyClient() this.#client not exist')
272
+ return
273
+ }
274
+
275
+ const client = this._client
276
+ /**
277
+ * Huan(202108): we should set `this.client` to `undefined` at the current event loop
278
+ * to prevent the future usage of the old client.
279
+ */
280
+ this._client = undefined
281
+
282
+ try {
283
+ client.close()
284
+ } catch (e) {
285
+ log.error('GrpcManager', 'destroyClient() client.close() rejection: %s\n%s', e && (e as Error).message, (e as Error).stack)
286
+ }
287
+ }
288
+
289
+ protected async startStream (): Promise<void> {
290
+ log.verbose('GrpcManager', 'startStream()')
291
+
292
+ if (this.eventStream) {
293
+ log.verbose('GrpcManager', 'startStream() this.eventStream exists, dropped.')
294
+ this.eventStream = undefined
295
+ }
296
+
297
+ log.verbose('GrpcManager', 'startStream() grpc -> event() ...')
298
+ const eventStream = this.client.event(new puppet.EventRequest())
299
+ log.verbose('GrpcManager', 'startStream() grpc -> event() ... done')
300
+
301
+ /**
302
+ * Store the event data from the stream when we test connection,
303
+ * and re-emit the event data when we have finished testing the connection
304
+ */
305
+ let peekedData: undefined | puppet.EventResponse
306
+
307
+ /**
308
+ * Huan(202108): future must be placed before other listenser registration
309
+ * because the on('data') will start drain the stream
310
+ */
311
+ const future = new Promise<void>((resolve, reject) => eventStream
312
+ /**
313
+ * Huan(202108): we need a `heartbeat` event to confirm the connection is alive
314
+ * for our wechaty-puppet-service server code, when the gRPC event stream is opened,
315
+ * it will emit a `heartbeat` event as early as possible.
316
+ *
317
+ * However, the `heartbeat` event is not guaranteed to be emitted,
318
+ * if the puppet service provider is coming from the community, like:
319
+ * - paimon
320
+ *
321
+ * So we also need a timeout for compatible with those providers
322
+ * in case of they are not following this special protocol.
323
+ */
324
+ .once('data', (resp: puppet.EventResponse) => {
325
+ peekedData = resp
326
+ resolve()
327
+ })
328
+ /**
329
+ * Any of the following events will be emitted means that there's a problem.
330
+ */
331
+ .once('cancel', reject)
332
+ .once('end', reject)
333
+ .once('error', reject)
334
+ /**
335
+ * The `status` event is import when we connect a gRPC stream.
336
+ *
337
+ * Huan(202108): according to the unit tests (tests/grpc-client.spec.ts)
338
+ * 1. If client TLS is not ok (client no-tls but server TLS is required)
339
+ * then status will be:
340
+ * { code: 14, details: 'Connection dropped' }
341
+ * 2. If client TLS is ok but the client token is invalid,
342
+ * then status will be:
343
+ * { code: 16, details: 'Invalid Wechaty TOKEN "0.XXX"' }
344
+ */
345
+ .once('status', status => {
346
+ // console.info('once(status)', status)
347
+ status.code === GrpcStatus.OK
348
+ ? resolve()
349
+ : reject(new Error('once(status)'))
350
+ }),
351
+ /**
352
+ * Huan(202108): `metadata` event will be fired
353
+ * when the TLS connection is OK
354
+ * even if the token is invalid
355
+ *
356
+ * Conclusion: we MUST NOT listen on `metadata` for `resolve`.
357
+ */
358
+ // .once('metadata', (...args) => console.info('once(metadata)', ...args))
359
+ )
360
+
361
+ /**
362
+ * Huan(202108): the `heartbeat` event is not guaranteed to be emitted
363
+ * if a puppet service provider is coming from the community, it might not follow the protocol specification.
364
+ * So we need a timeout for compatible with those providers
365
+ */
366
+ log.verbose('GrpcManager', 'startStream() grpc -> event peeking data or timeout ...')
367
+ try {
368
+ await timeoutPromise(future, 5 * 1000) // 5 seconds
369
+ } catch (_) {
370
+ log.verbose('GrpcManager', 'startStream() grpc -> event peeking data or timeout ... timeout')
371
+ }
372
+ log.verbose('GrpcManager', 'startStream() grpc -> event peeking data or timeout ... data peeked')
373
+
374
+ /**
375
+ * Bridge the events
376
+ * Huan(202108): adding the below event listeners
377
+ * must be after the `await future` above,
378
+ * so that if there's any `error` event,
379
+ * it will be triggered already.
380
+ */
381
+ log.verbose('GrpcManager', 'startStream() initializing event stream ...')
382
+ eventStream
383
+ .on('cancel', (...args) => this.emit('cancel', ...args))
384
+ .on('data', (...args) => this.emit('data', ...args))
385
+ .on('end', (...args) => this.emit('end', ...args))
386
+ .on('error', (...args) => this.emit('error', ...args))
387
+ .on('metadata', (...args) => this.emit('metadata', ...args))
388
+ .on('status', (...args) => this.emit('status', ...args))
389
+
390
+ this.eventStream = eventStream
391
+ log.verbose('GrpcManager', 'startStream() initializing event stream ... done')
392
+
393
+ /**
394
+ * Re-emit the peeked data if there's any
395
+ */
396
+ if (peekedData) {
397
+ log.verbose('GrpcManager', 'startStream() sending back the peeked data ...')
398
+ this.emit('data', peekedData)
399
+ peekedData = undefined
400
+ log.verbose('GrpcManager', 'startStream() sending back the peeked data ... done')
401
+ }
402
+
403
+ log.verbose('GrpcManager', 'startStream() ... done')
404
+ }
405
+
406
+ protected stopStream (): void {
407
+ log.verbose('GrpcManager', 'stopStream()')
408
+
409
+ if (!this.eventStream) {
410
+ log.verbose('GrpcManager', 'stopStream() no eventStream when stop, skip destroy.')
411
+ return
412
+ }
413
+ /**
414
+ * Huan(202108): we should set `this.eventStream` to `undefined` at the current event loop
415
+ * to prevent the future usage of the old eventStream.
416
+ */
417
+ const eventStream = this.eventStream
418
+ this.eventStream = undefined
419
+
420
+ /**
421
+ * Huan(202003):
422
+ * destroy() will be enough to terminate a stream call.
423
+ * cancel() is not needed.
424
+ */
425
+ // this.eventStream.cancel()
426
+
427
+ try {
428
+ log.verbose('GrpcManager', 'stopStream() destroying event stream ...')
429
+ eventStream.destroy()
430
+ log.verbose('GrpcManager', 'stopStream() destroying event stream ... done')
431
+ } catch (e) {
432
+ this.emit('error', e)
433
+ }
434
+ }
435
+
436
+ }
437
+
438
+ export {
439
+ GrpcManager,
440
+ }
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+
3
+ import { test } from 'tstest'
4
+
5
+ import { PayloadStore } from './payload-store.js'
6
+
7
+ test('PayloadStore perfect restart', async t => {
8
+ const token = Math.random().toString(36)
9
+ const store = new PayloadStore({ token })
10
+
11
+ for (let i = 0; i < 3; i++) {
12
+ const accountId = Math.random().toString(36)
13
+ await store.start(accountId)
14
+ await store.stop()
15
+ t.pass('start/stop-ed at #' + i)
16
+ }
17
+
18
+ await store.destroy()
19
+ })
@@ -0,0 +1,153 @@
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 path from 'path'
21
+ import os from 'os'
22
+ import fs from 'fs'
23
+
24
+ import semverPkg from 'semver'
25
+
26
+ import type * as PUPPET from '@juzi/wechaty-puppet'
27
+
28
+ import { FlashStore } from 'flash-store'
29
+
30
+ import {
31
+ VERSION,
32
+ log,
33
+ } from '../config.js'
34
+
35
+ const { major, minor } = semverPkg
36
+
37
+ interface PayloadStoreOptions {
38
+ token: string
39
+ }
40
+
41
+ interface StoreRoomMemberPayload {
42
+ [roomMemberContactId: string]: PUPPET.payloads.RoomMember
43
+ }
44
+
45
+ class PayloadStore {
46
+
47
+ // public message? : LRU<string, MessagePayload>
48
+
49
+ public contact? : FlashStore<string, PUPPET.payloads.Contact>
50
+ public roomMember? : FlashStore<string, StoreRoomMemberPayload>
51
+ public room? : FlashStore<string, PUPPET.payloads.Room>
52
+
53
+ protected storeDir: string
54
+ protected accountId?: string
55
+
56
+ constructor (private options: PayloadStoreOptions) {
57
+ log.verbose('PayloadStore', 'constructor(%s)', JSON.stringify(options))
58
+
59
+ this.storeDir = path.join(
60
+ os.homedir(),
61
+ '.wechaty',
62
+ 'wechaty-puppet-service',
63
+ this.options.token,
64
+ `v${major(VERSION)}.${minor(VERSION)}`,
65
+ )
66
+ log.silly('PayloadStore', 'constructor() storeDir: "%s"', this.storeDir)
67
+ }
68
+
69
+ /**
70
+ * When starting the store, we need to know the accountId
71
+ * so that we can save the payloads under a specific account folder.
72
+ */
73
+ async start (accountId: string): Promise<void> {
74
+ log.verbose('PayloadStore', 'start(%s)', accountId)
75
+
76
+ if (this.accountId) {
77
+ throw new Error('PayloadStore should be stop() before start() again.')
78
+ }
79
+ this.accountId = accountId
80
+
81
+ const accountDir = path.join(this.storeDir, accountId)
82
+
83
+ if (!fs.existsSync(accountDir)) {
84
+ fs.mkdirSync(accountDir, { recursive: true })
85
+ }
86
+
87
+ this.contact = new FlashStore(path.join(accountDir, 'contact-payload'))
88
+ this.roomMember = new FlashStore(path.join(accountDir, 'room-member-payload'))
89
+ this.room = new FlashStore(path.join(accountDir, 'room-payload'))
90
+
91
+ /**
92
+ * LRU
93
+ *
94
+ * Huan(202108): the Wechaty Puppet has LRU cache already,
95
+ * there's no need to do it again.
96
+ *
97
+ * We can focus on providing a persistent store for the performance.
98
+ */
99
+ // const lruOptions: LRU.Options<string, MessagePayload> = {
100
+ // dispose (key, val) {
101
+ // log.silly('PayloadStore', `constructor() lruOptions.dispose(${key}, ${JSON.stringify(val)})`)
102
+ // },
103
+ // max : 1000, // 1000 messages
104
+ // maxAge : 60 * 60 * 1000, // 1 hour
105
+ // }
106
+ // this.message = new LRU(lruOptions)
107
+ }
108
+
109
+ async stop (): Promise<void> {
110
+ log.verbose('PayloadStore', 'stop()')
111
+
112
+ const contactStore = this.contact
113
+ const roomMemberStore = this.roomMember
114
+ const roomStore = this.room
115
+ /**
116
+ * Huan(202108): we must set all the instances of the store to underfined
117
+ * in the current event loop as soon as possible
118
+ * to prevent the future store calls.
119
+ */
120
+ this.contact = undefined
121
+ this.roomMember = undefined
122
+ this.room = undefined
123
+
124
+ // LRU
125
+ // this.message = undefined
126
+
127
+ // clear accountId
128
+ this.accountId = undefined
129
+
130
+ await contactStore?.close()
131
+ await roomMemberStore?.close()
132
+ await roomStore?.close()
133
+ }
134
+
135
+ async destroy (): Promise<void> {
136
+ log.verbose('PayloadStore', 'destroy()')
137
+ if (this.accountId) {
138
+ throw new Error('Can not destroy() a start()-ed store. Call stop() to stop it first')
139
+ }
140
+
141
+ /**
142
+ * Huan(202108): `fs.rm` was introduced from Node.js v14.14
143
+ * https://nodejs.org/api/fs.html#fs_fspromises_rm_path_options
144
+ */
145
+ await fs.promises.rmdir(this.storeDir, {
146
+ // force: true,
147
+ recursive: true,
148
+ })
149
+ }
150
+
151
+ }
152
+
153
+ export { PayloadStore }
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+
3
+ import { test } from 'tstest'
4
+ import getPort from 'get-port'
5
+
6
+ import { PuppetMock } from 'wechaty-puppet-mock'
7
+
8
+ import { PuppetService } from './puppet-service.js'
9
+ import { PuppetServer } from '../mod.js'
10
+
11
+ test('version()', async t => {
12
+ const puppet = new PuppetService({
13
+ token: 'test',
14
+ })
15
+ t.ok(puppet.version())
16
+ })
17
+
18
+ /**
19
+ * Huan(202003):
20
+ * need to setup a test server to provide test token for Puppet Service
21
+ */
22
+ test('PuppetService restart without problem', async t => {
23
+ const TOKEN = 'insecure_token'
24
+ const PORT = await getPort()
25
+ const ENDPOINT = '0.0.0.0:' + PORT
26
+
27
+ const puppet = new PuppetMock() as any
28
+ const serverOptions = {
29
+ endpoint: ENDPOINT,
30
+ puppet: puppet,
31
+ token: TOKEN,
32
+ } as const
33
+
34
+ const puppetServer = new PuppetServer(serverOptions)
35
+ await puppetServer.start()
36
+
37
+ /**
38
+ * Puppet Service Client
39
+ */
40
+ const puppetOptions = {
41
+ endpoint: ENDPOINT,
42
+ token: TOKEN,
43
+ } as const
44
+
45
+ const puppetService = new PuppetService(puppetOptions)
46
+
47
+ try {
48
+ for (let i = 0; i < 3; i++) {
49
+ await puppetService.start()
50
+ await puppetService.stop()
51
+ t.pass('start/stop-ed at #' + i)
52
+ }
53
+ t.pass('PuppetService() start/restart successed.')
54
+ } catch (e) {
55
+ t.fail(e as any)
56
+ }
57
+
58
+ await puppetServer.stop()
59
+ })