@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
package/src/auth/ca.ts ADDED
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Wechaty Certificate Authority Repo:
3
+ * https://github.com/wechaty/dotenv/tree/main/ca
4
+ *
5
+ * The SSL_ROOT_CERT is a root certificate generated by and for wechaty community.
6
+ *
7
+ * Because it's the default root cert for the puppet service,
8
+ * so all the Polyglot Wechaty SDK should set this cert to be trusted by default.
9
+ *
10
+ * Update:
11
+ * - Huan(202108): init, expired in 3650 days (after 2031/07)
12
+ */
13
+ const TLS_CA_CERT = `-----BEGIN CERTIFICATE-----
14
+ MIIFxTCCA62gAwIBAgIUYddLAoa8JnLzJ80l2u5vGuFsaEIwDQYJKoZIhvcNAQEL
15
+ BQAwcjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDVNhbiBGcmFuY2lzY28xEjAQBgNV
16
+ BAcMCVBhbG8gQWx0bzEQMA4GA1UECgwHV2VjaGF0eTELMAkGA1UECwwCQ0ExGDAW
17
+ BgNVBAMMD3dlY2hhdHktcm9vdC1jYTAeFw0yMTA4MDkxNTQ4NTJaFw0zMTA4MDcx
18
+ NTQ4NTJaMHIxCzAJBgNVBAYTAlVTMRYwFAYDVQQIDA1TYW4gRnJhbmNpc2NvMRIw
19
+ EAYDVQQHDAlQYWxvIEFsdG8xEDAOBgNVBAoMB1dlY2hhdHkxCzAJBgNVBAsMAkNB
20
+ MRgwFgYDVQQDDA93ZWNoYXR5LXJvb3QtY2EwggIiMA0GCSqGSIb3DQEBAQUAA4IC
21
+ DwAwggIKAoICAQDulLjOZhzQ58TSQ7TfWNYgdtWhlc+5L9MnKb1nznVRhzAkZo3Q
22
+ rPLRW/HDjlv2OEbt4nFLaQgaMmc1oJTUVGDBDlrzesI/lJh7z4eA/B0z8eW7f6Cw
23
+ /TGc8lgzHvq7UIE507QYPhvfSejfW4Prw+90HJnuodriPdMGS0n9AR37JPdQm6sD
24
+ iMFeEvhHmM2SXRo/o7bll8UDZi81DoFu0XuTCx0esfCX1W5QWEmAJ5oAdjWxJ23C
25
+ lxI1+EjwBQKXGqp147VP9+pwpYW5Xxpy870kctPBHKjCAti8Bfo+Y6dyWz2UAd4w
26
+ 4BFRD+18C/TgX+ECl1s9fsHMY15JitcSGgAIz8gQX1OelECaTMRTQfNaSnNW4LdS
27
+ sXMQEI9WxAU/W47GCQFmwcJeZvimqDF1QtflHSaARD3O8tlbduYqTR81LJ63bPoy
28
+ 9e1pdB6w2bVOTlHunE0YaGSJERALVc1xz40QpPGcZ52mNCb3PBg462RQc77yv/QB
29
+ x/P2RC1y0zDUF2tP9J29gTatWq6+D4MhfEk2flZNyzAgJbDuT6KAIJGzOB1ZJ/MG
30
+ o1gS13eTuZYw24LElrhd1PrR6OHK+lkyYzqUPYMulUg4HzaZIDclfHKwAC4lecKm
31
+ zC5q9jJB4m4SKMKdzxvpIOfdahoqsZMg34l4AavWRqPTpwEU0C0dboNA/QIDAQAB
32
+ o1MwUTAdBgNVHQ4EFgQU0rey3QPklTOgdhMJ9VIA6KbZ5bAwHwYDVR0jBBgwFoAU
33
+ 0rey3QPklTOgdhMJ9VIA6KbZ5bAwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
34
+ AQsFAAOCAgEAx2uyShx9kLoB1AJ8x7Vf95v6PX95L/4JkJ1WwzJ9Dlf3BcCI7VH7
35
+ Fp1dnQ6Ig7mFqSBDBAUUBWAptAnuqIDcgehI6XAEKxW8ZZRxD877pUNwZ/45tSC4
36
+ b5U5y9uaiNK7oC3LlDCsB0291b3KSOtevMeDFoh12LcliXAkdIGGTccUxrH+Cyij
37
+ cBOc+EKGJFBdLqcjLDU4M6QdMMMFOdfXyAOSpYuWGYqrxqvxQjAjvianEyMpNZWM
38
+ lajggJqiPhfF67sZTB2yzvRTmtHdUq7x+iNOVonOBcCHu31aGxa9Py91XEr9jaIQ
39
+ EBdl6sycLxKo8mxF/5tyUOns9+919aWNqTOUBmI15D68bqhhOVNyvsb7aVURIt5y
40
+ 6A7Sj4gSBR9P22Ba6iFZgbvfLn0zKLzjlBonUGlSPf3rSIYUkawICtDyYPvK5mi3
41
+ mANgIChMiOw6LYCPmmUVVAWU/tDy36kr9ZV9YTIZRYAkWswsJB340whjuzvZUVaG
42
+ DgW45GPR6bGIwlFZeqCwXLput8Z3C8Sw9bE9vjlB2ZCpjPLmWV/WbDlH3J3uDjgt
43
+ 9PoALW0sOPhHfYklH4/rrmsSWMYTUuGS/HqxrEER1vpIOOb0hIiAWENDT/mruq22
44
+ VqO8MHX9ebjInSxPmhYOlrSZrOgEcogyMB4Z0SOtKVqPnkWmdR5hatU=
45
+ -----END CERTIFICATE-----`
46
+
47
+ /**
48
+ * Huan(202108): This private key is NOT SAFE!
49
+ *
50
+ * WARNING: This CA is not safe for production.
51
+ * **use environment variables to set your safe CA data**
52
+ *
53
+ * Our system use this private key for server by default for convience.
54
+ * However, everyone can get this key and use it to see the traffic between client and server.
55
+ *
56
+ * For security, we should not use this key in production
57
+ * by setting it manually by
58
+ * either the environment variable `WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY`
59
+ * or `options.tlsServerKey`
60
+ *
61
+ * So does the below `TLS_SERVER_CERT_UNSAFE`
62
+ */
63
+ const TLS_INSECURE_SERVER_KEY = `-----BEGIN RSA PRIVATE KEY-----
64
+ MIIEpAIBAAKCAQEAtdFTXAKLW16uqNokJmSowbGtwnCvsPSqIHcdbKgdcuNpaJsZ
65
+ DTeBP0/XHFvnXcekHOyzncYgluxijzMSD1S8AKo3c2fROgem+E+WMSLYAZSTV48p
66
+ uzTRLoypvfhKfqxsrmpct2F6tRTIQ/EABOs0TYP0dY3Nd8NkCEWBmv7ioPDek/a4
67
+ esdisN7R1Ea6jx7ToegSwjkP9aFr2XHxyqR5wjJn/Q6nYZC9A90CKdxJ2WpXtluT
68
+ xFfFfqOhR/1te5/LpqXtqxo2yOwu8k67fHub1FyLu9sAYhcsuSjHVHxbK3nPf0mN
69
+ Gt0RiSwRj84qzbpfwrjMYrAJ3EqKrlxZurmX0wIDAQABAoIBAAcG+SbUPligtzV1
70
+ gPIu78rUuDeMrW20dyLcF7oMYV8AZSGS5Qv6ujcdOd4xuyaHwdMQXvzZHIdYyZJp
71
+ UehfyQhpi80dFRweEZkFUnPBugGNoYg/00gWCYO4EhNylkaBGY5ANCcuUFTRYdAm
72
+ b27BPHtGf1tPyMI5PhOHxDOeaFn6BKB1pcG4mQ+CNieadYxjgPcInh6mAqgJ40cR
73
+ ncWgLgSdChijLlVLW9lFVA+OAqv57vT3xW+Op1r7nBiigj67tka57spZTIEhrLXI
74
+ ZFMyRKQXlxh/l82vLmnYAhvSp/hHbARLwWfQ/znsFvTc/HXvXPocpZ2B9f0tlZ0W
75
+ dqOHSwkCgYEA3zJYAC5Afw3UKuAyApWOyI3AX+noq6ze8B3jFWEPmNdJrZpjLpzp
76
+ mntnWC8Wq0t821uiQXYlGUzF/pIg0rzVdPbc2VTdwKl+iptuCn3fC+LCTJKroRLq
77
+ 2a6GDhtmV2g0SEaNdbJt1Zfwr0KyXLNwK+ZdJxhS44vfTCRB4YBsFw0CgYEA0Ioe
78
+ pcRBEyCJud8ZJnSN/HiOQ9kCIsnd8Pk4D7q+DGWY6lLGQddhlkp9Ah7yRIGJVg91
79
+ D6t5BfpiU8DRGFiEGMo+XWEKjLfRTxg03lBQYACJc2crgFRuG8GFuO/WQ1b9ihR5
80
+ nsdLc9cGIm6rFXaUsnLIN9IJhJg4BmFD1U9usl8CgYEArIN+D02wnkOzDRzSqrqs
81
+ bQlbewcRxrfMbS28moa2Bn3Ivf1J0fqIeNYPL9Ldo7KqI+Z0yEIoNKDpnHWYFyrL
82
+ lidE1lrJN6QKYdn3OPbHUqmHYqYvMEWt7mj9xqOY+9BYMNEPf7xVNrXE28IimJI9
83
+ DkF1GMWtM6GmC3Uu0rxvT3UCgYEAgroCylGDpbThAXa8cmHgXCNKs3eHIj2/dn8U
84
+ SK/80RKjUEkBZWbaEvew87Jols9JQ3y/GkqYvEmgd/ZIXWWnsU6e17Ssg1f7ywRW
85
+ qAJa0EOl5oUHPRQwTg/7ftpCS8Zte7CoKQOv5fcmLlGHyBWk01Sm9G8jbk5p2H4C
86
+ ouZ/cysCgYBqZHm6eg0tjwFPJJWgmAMdNvBlnIuW1t5dwa7B2F6ONveUTBBAxGLc
87
+ ZBVdEBseBPki5i7M7eNKNTEA3EM+Cfsfsp5U/S8ntDmzzaMoBhb+jBRor39l3+iG
88
+ qXI72DDvrh802t6KO9W6CQIfpVcxLeOy82RfUP1pHQ/sMPkx89Fd5A==
89
+ -----END RSA PRIVATE KEY-----`
90
+
91
+ const TLS_INSECURE_SERVER_CERT = `-----BEGIN CERTIFICATE-----
92
+ MIIEVTCCAj0CAQEwDQYJKoZIhvcNAQELBQAwcjELMAkGA1UEBhMCVVMxFjAUBgNV
93
+ BAgMDVNhbiBGcmFuY2lzY28xEjAQBgNVBAcMCVBhbG8gQWx0bzEQMA4GA1UECgwH
94
+ V2VjaGF0eTELMAkGA1UECwwCQ0ExGDAWBgNVBAMMD3dlY2hhdHktcm9vdC1jYTAe
95
+ Fw0yMTA4MjQxODMwMjBaFw0zMTA4MjIxODMwMjBaMG8xCzAJBgNVBAYTAlVTMRYw
96
+ FAYDVQQIDA1TYW4gRnJhbmNpc2NvMRIwEAYDVQQHDAlQYWxvIEFsdG8xEDAOBgNV
97
+ BAoMB1dlY2hhdHkxDzANBgNVBAsMBlB1cHBldDERMA8GA1UEAwwIaW5zZWN1cmUw
98
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC10VNcAotbXq6o2iQmZKjB
99
+ sa3CcK+w9Kogdx1sqB1y42lomxkNN4E/T9ccW+ddx6Qc7LOdxiCW7GKPMxIPVLwA
100
+ qjdzZ9E6B6b4T5YxItgBlJNXjym7NNEujKm9+Ep+rGyualy3YXq1FMhD8QAE6zRN
101
+ g/R1jc13w2QIRYGa/uKg8N6T9rh6x2Kw3tHURrqPHtOh6BLCOQ/1oWvZcfHKpHnC
102
+ Mmf9DqdhkL0D3QIp3EnZale2W5PEV8V+o6FH/W17n8umpe2rGjbI7C7yTrt8e5vU
103
+ XIu72wBiFyy5KMdUfFsrec9/SY0a3RGJLBGPzirNul/CuMxisAncSoquXFm6uZfT
104
+ AgMBAAEwDQYJKoZIhvcNAQELBQADggIBALyPgW0VLlQfkgsNovyLg+zkF7oJZCvM
105
+ HS7m43abZb1H1xUH6Kd/sUFTQCAAPop/n4773iH0KggWtoPjkid1G1s/UWK6A0F1
106
+ IxRp0DYLgZfL/U+PQxe175ViYRLPUKj1YwagjX6HvM5bUMEYDnIypEH2UFIrD39J
107
+ 69Q6M8hZ85oFDAo2hRqrjJo66c3+ygmXSCFIL64gsVLZkK3SHRAv3R90+blNgmo5
108
+ Yvh2xqvGuspd1Y3yzeOQreimJkMeDr/t/xucws1TK7fqMjlk/36W4S95xT7EYykf
109
+ rQ+1cDIJvGdVU/lod0/lWcOvqMtyf6wIjzFJaGAoqS5QT2IeeXQYbhq9bZIBQzth
110
+ IfvfdHuijUqOhT8LX8TYXPWVR/UEKItqktdvA7PXuHUdDxU3ldcXsjA+m9jVO81i
111
+ gIOUJQuBR/tImNnLFaTooO6RB71lBB1XCo8HvWPu47MPjxuf/Y+1frPzuP8LFMWj
112
+ bjw0QcwFUik8v+mSiPHhOIfzp0EQlFtlncTr+k0MFuRKokl0Yrs8jXOt30JC4tKS
113
+ GKXupLWnWE3Z15L9uk9zSAskL2T8LwnctaiMP0+mzf8gWchxUaHkk0yGj4gtNVyU
114
+ iJZfrWYwBY9y4SUjp6A7pLspw+i+jIO/EmcX2jbFt1LaajRgEw+uGvNMXhHqtsHC
115
+ WqE+fOGDBUET
116
+ -----END CERTIFICATE-----`
117
+
118
+ /**
119
+ * Common Name:
120
+ * - Server Name Indication (SNI)
121
+ * - Case insensitive
122
+ *
123
+ * Wechaty Token format: `${SNI}/${UUIDv4}`
124
+ *
125
+ * Huan(202108): the CA generated by Wechaty Puppet Service
126
+ * default set to this value:
127
+ *
128
+ * grpc.ssl_target_name_override: 'insecure'
129
+ */
130
+ const TLS_INSECURE_SERVER_CERT_COMMON_NAME = 'insecure' // case insensitive
131
+
132
+ export {
133
+ TLS_CA_CERT,
134
+ TLS_INSECURE_SERVER_CERT_COMMON_NAME,
135
+ TLS_INSECURE_SERVER_CERT,
136
+ TLS_INSECURE_SERVER_KEY,
137
+ }
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+
3
+ import {
4
+ test,
5
+ sinon,
6
+ } from 'tstest'
7
+
8
+ import { metaGeneratorToken } from './call-cred.js'
9
+
10
+ test('metaGeneratorToken()', async t => {
11
+ const TOKEN = 'UUIDv4'
12
+ const EXPECTED_AUTHORIZATION = `Wechaty ${TOKEN}`
13
+
14
+ const sandbox = sinon.createSandbox()
15
+ const spy = sandbox.spy()
16
+
17
+ const metaGenerator = metaGeneratorToken(TOKEN)
18
+
19
+ metaGenerator({} as any, spy)
20
+ t.equal(spy.args[0]![0], null, 'should no error')
21
+
22
+ const metadata = spy.args[0]![1]
23
+ const authorization = metadata.get('Authorization')[0]
24
+ t.equal(authorization, EXPECTED_AUTHORIZATION, 'should generate authorization in metadata')
25
+ })
@@ -0,0 +1,22 @@
1
+ import {
2
+ credentials,
3
+ CallMetadataGenerator,
4
+ Metadata,
5
+ } from './grpc-js.js'
6
+
7
+ /**
8
+ * With server authentication SSL/TLS and a custom header with token
9
+ * https://grpc.io/docs/guides/auth/#with-server-authentication-ssltls-and-a-custom-header-with-token-1
10
+ */
11
+ const metaGeneratorToken: (token: string) => CallMetadataGenerator = token => (_params, callback) => {
12
+ const meta = new Metadata()
13
+ meta.add('authorization', `Wechaty ${token}`)
14
+ callback(null, meta)
15
+ }
16
+
17
+ const callCredToken = (token: string) => credentials.createFromMetadataGenerator(metaGeneratorToken(token))
18
+
19
+ export {
20
+ callCredToken,
21
+ metaGeneratorToken,
22
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Environment variables containing newlines in Node?
3
+ * `replace(/\\n/g, '\n')`
4
+ * https://stackoverflow.com/a/36439803/1123955
5
+ */
6
+ const WECHATY_PUPPET_SERVICE_TLS_CA_CERT = (v?: string) => v
7
+ || process.env['WECHATY_PUPPET_SERVICE_TLS_CA_CERT']?.replace(/\\n/g, '\n')
8
+
9
+ const WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT = (v?: string) => v
10
+ || process.env['WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT']?.replace(/\\n/g, '\n')
11
+
12
+ const WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY = (v?: string) => v
13
+ || process.env['WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY']?.replace(/\\n/g, '\n')
14
+
15
+ const WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME = (v?: string) => v
16
+ || process.env['WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME']?.replace(/\\n/g, '\n')
17
+
18
+ const WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER = (v?: boolean) => typeof v === 'undefined'
19
+ ? process.env['WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER'] === 'true'
20
+ : v
21
+ const WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT = (v?: boolean) => typeof v === 'undefined'
22
+ ? process.env['WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT'] === 'true'
23
+ : v
24
+
25
+ export {
26
+ WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT,
27
+ WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER,
28
+ WECHATY_PUPPET_SERVICE_TLS_CA_CERT,
29
+ WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT,
30
+ WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY,
31
+ WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME,
32
+ }
@@ -0,0 +1,29 @@
1
+ import {
2
+ credentials,
3
+ StatusBuilder,
4
+ UntypedHandleCall,
5
+ Metadata,
6
+ UntypedServiceImplementation,
7
+ } from '@grpc/grpc-js'
8
+ import type {
9
+ sendUnaryData,
10
+ ServerUnaryCall,
11
+ } from '@grpc/grpc-js/build/src/server-call.js'
12
+ import type {
13
+ CallMetadataGenerator,
14
+ } from '@grpc/grpc-js/build/src/call-credentials.js'
15
+ import { Status as GrpcStatus } from '@grpc/grpc-js/build/src/constants.js'
16
+
17
+ export type {
18
+ UntypedServiceImplementation,
19
+ UntypedHandleCall,
20
+ sendUnaryData,
21
+ ServerUnaryCall,
22
+ CallMetadataGenerator,
23
+ }
24
+ export {
25
+ credentials,
26
+ GrpcStatus,
27
+ Metadata,
28
+ StatusBuilder,
29
+ }
@@ -0,0 +1,9 @@
1
+ import { authImplToken } from './auth-impl-token.js'
2
+ import { monkeyPatchMetadataFromHttp2Headers } from './mokey-patch-header-authorization.js'
3
+ import { callCredToken } from './call-cred.js'
4
+
5
+ export {
6
+ authImplToken,
7
+ callCredToken,
8
+ monkeyPatchMetadataFromHttp2Headers,
9
+ }
@@ -0,0 +1,45 @@
1
+ import type http2 from 'http2'
2
+
3
+ import { log } from '@juzi/wechaty-puppet'
4
+
5
+ import type {
6
+ Metadata,
7
+ } from './grpc-js.js'
8
+
9
+ /**
10
+ * Huan(202108): This is for compatible with old clients (version v0.26 or before)
11
+ * for non-tls authorization:
12
+ * use the HTTP2 header `:authority` as the token.
13
+ *
14
+ * This feature is planed to be removed after Dec 31, 2022
15
+ */
16
+ function monkeyPatchMetadataFromHttp2Headers (
17
+ MetadataClass: typeof Metadata,
18
+ ): () => void {
19
+ log.verbose('wechaty-puppet-service', 'monkeyPatchMetadataFromHttp2Headers()')
20
+
21
+ const fromHttp2Headers = MetadataClass.fromHttp2Headers
22
+ MetadataClass.fromHttp2Headers = function (
23
+ headers: http2.IncomingHttpHeaders,
24
+ ): Metadata {
25
+ const metadata = fromHttp2Headers.call(MetadataClass, headers)
26
+
27
+ if (metadata.get('authorization').length <= 0) {
28
+ const authority = headers[':authority']
29
+ const authorization = `Wechaty ${authority}`
30
+ metadata.set('authorization', authorization)
31
+ }
32
+ return metadata
33
+ }
34
+
35
+ /**
36
+ * un-monkey-patch
37
+ */
38
+ return () => {
39
+ MetadataClass.fromHttp2Headers = fromHttp2Headers
40
+ }
41
+ }
42
+
43
+ export {
44
+ monkeyPatchMetadataFromHttp2Headers,
45
+ }
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+
3
+ import { test } from 'tstest'
4
+ import type http2 from 'http2'
5
+
6
+ import {
7
+ Metadata,
8
+ } from './grpc-js.js'
9
+
10
+ import { monkeyPatchMetadataFromHttp2Headers } from './mokey-patch-header-authorization.js'
11
+
12
+ test('monkeyPatchMetadataFromHttp2Headers', async t => {
13
+ const AUTHORITY = '__authority__'
14
+ const headers: http2.IncomingHttpHeaders = {
15
+ ':authority': AUTHORITY,
16
+ }
17
+
18
+ const dispose = monkeyPatchMetadataFromHttp2Headers(Metadata)
19
+ const meta = Metadata.fromHttp2Headers(headers)
20
+
21
+ const authorization = meta.get('authorization')[0]
22
+ const EXPECTED = `Wechaty ${AUTHORITY}`
23
+ t.equal(authorization, EXPECTED, 'should get authority from metadata')
24
+
25
+ dispose()
26
+ })
@@ -0,0 +1,31 @@
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
+ /* eslint-disable sort-keys */
21
+ import {
22
+ createAction,
23
+ } from 'typesafe-actions'
24
+
25
+ import * as types from './types.js'
26
+
27
+ /**
28
+ * Bug compatible & workaround for Ducks API
29
+ * https://github.com/huan/ducks/issues/2
30
+ */
31
+ export const nop = createAction(types.NOP)()
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+ /* eslint-disable func-call-spacing */
3
+
4
+ import { test } from 'tstest'
5
+
6
+ import {
7
+ TestScheduler,
8
+ } from 'rxjs/testing'
9
+ import {
10
+ throttleTime,
11
+ } from 'rxjs/operators'
12
+ import PuppetMock from 'wechaty-puppet-mock'
13
+
14
+ import {
15
+ Duck as PuppetDuck,
16
+ } from 'wechaty-redux'
17
+
18
+ import {
19
+ epicRecoverReset$,
20
+ epicRecoverDing$,
21
+ monitorHeartbeat$,
22
+ } from './epic-recover.js'
23
+
24
+ /**
25
+ * RxJS Marble Testing
26
+ *
27
+ * - https://rxjs.dev/guide/testing/marble-testing
28
+ * - https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/testing/marble-testing.md
29
+ *
30
+ */
31
+ test('Example: marble testing', async t => {
32
+ const testScheduler = new TestScheduler(t.same)
33
+
34
+ testScheduler.run(helpers => {
35
+ const { cold, time, expectObservable, expectSubscriptions } = helpers
36
+ const e1 = cold('-a--b--c---|')
37
+ const e1subs = ' ^----------!'
38
+ const t = time('---| ') // t = 3
39
+ const expected = ' -a-----c---|'
40
+
41
+ expectObservable(e1.pipe(throttleTime(t))).toBe(expected)
42
+ expectSubscriptions(e1.subscriptions).toBe(e1subs)
43
+ })
44
+ })
45
+
46
+ test('Example 2: marble subscribe time frame testing', async t => {
47
+ const testScheduler = new TestScheduler(t.same)
48
+
49
+ testScheduler.run(helpers => {
50
+ const { hot, expectObservable, expectSubscriptions } = helpers
51
+ const source = hot(' --a--b--c--d--e--f')
52
+ const subscription = '-----^------!-'
53
+ const expected = ' -----b--c--d--'
54
+ expectObservable(source, subscription).toBe(expected)
55
+ void expectSubscriptions
56
+ // expectSubscriptions(source.subscriptions).toBe(subscription)
57
+ })
58
+ })
59
+
60
+ test('Example 3: subscribe with unsubscribe / complete', async t => {
61
+ const testScheduler = new TestScheduler(t.same)
62
+
63
+ testScheduler.run(({ hot, expectObservable }) => {
64
+ const values = {
65
+ a: 0,
66
+ b: 1,
67
+ c: 2,
68
+ }
69
+ const source = hot(' 10ms a 9ms b 9ms c-|', values)
70
+ const subscription1 = ' 20ms ^ 9ms -!-'
71
+ const subscription2 = ' 30ms ^--'
72
+ const expected1 = ' 20ms b 9ms c--'
73
+ const expected2 = ' 30ms c-|'
74
+ expectObservable(source, subscription1).toBe(expected1, values)
75
+ expectObservable(source, subscription2).toBe(expected2, values)
76
+ })
77
+ })
78
+
79
+ test('Example 4: play ground', async t => {
80
+ const testScheduler = new TestScheduler(t.same)
81
+
82
+ testScheduler.run(helpers => {
83
+ const { hot, cold, expectObservable } = helpers
84
+ void hot
85
+ void cold
86
+ const TIMEOUT = 15
87
+ const source = hot(`-----a-----h------h ${TIMEOUT}ms --`)
88
+ const sub = ` ------^-------!---- ${TIMEOUT}ms --`
89
+ const expected = ` -----------h------- ${TIMEOUT}ms --`
90
+
91
+ expectObservable(source, sub).toBe(expected)
92
+ })
93
+ })
94
+
95
+ test('monitorHeartbeat$() emit once after lost heartbeat', async t => {
96
+ const testScheduler = new TestScheduler(t.same)
97
+
98
+ const puppet = new PuppetMock() as any
99
+
100
+ const TIMEOUT = 15
101
+
102
+ testScheduler.run(helpers => {
103
+ const { hot, expectObservable, expectSubscriptions } = helpers
104
+
105
+ const marble = {
106
+ a: PuppetDuck.actions.STATE_ACTIVATED_EVENT (puppet.id, true),
107
+ d: PuppetDuck.actions.DONG_RECEIVED_EVENT (puppet.id, { data: 'dong' }),
108
+ e: PuppetDuck.actions.ERROR_RECEIVED_EVENT (puppet.id, { gerror: `monitorHeartbeat$() TIMEOUT(${TIMEOUT})` }),
109
+ h: PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT(puppet.id, { data: 'heartbeat' }),
110
+ }
111
+
112
+ const puppet$ = hot(` -a----h----h ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT - 1}ms h ${TIMEOUT}ms ${TIMEOUT - 1}ms d ${TIMEOUT}ms ------`, marble)
113
+ const subscription = `^----------- ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms -----!`
114
+ const expected = ` ------------ ${TIMEOUT - 1}ms e ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT - 1}ms e ${TIMEOUT}ms ${TIMEOUT - 1}ms e ------`
115
+
116
+ expectObservable(
117
+ monitorHeartbeat$(TIMEOUT)(puppet$),
118
+ subscription,
119
+ ).toBe(expected, marble)
120
+
121
+ void expectSubscriptions
122
+ // expectSubscriptions(puppet$.subscriptions).toBe(sub)
123
+ })
124
+ })
125
+
126
+ test('epicRecoverDing$() emit periodly', async t => {
127
+ const testScheduler = new TestScheduler(t.same)
128
+
129
+ const puppet = new PuppetMock() as any
130
+
131
+ const TIMEOUT = 15
132
+
133
+ testScheduler.run(helpers => {
134
+ const { hot, expectObservable } = helpers
135
+
136
+ const marble = {
137
+ a: PuppetDuck.actions.STATE_ACTIVATED_EVENT (puppet.id, true),
138
+ d: PuppetDuck.actions.DONG_RECEIVED_EVENT (puppet.id, { data: 'dong' }),
139
+ h: PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT(puppet.id, { data: 'heartbeat' }),
140
+ i: PuppetDuck.actions.DING_COMMAND (puppet.id, 'epicRecoverDing$'),
141
+ }
142
+
143
+ const puppet$ = hot(` -a----h----h ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT - 1}ms h ${TIMEOUT - 1}ms h ${TIMEOUT - 1}ms d ${TIMEOUT - 1}ms d ------`, marble)
144
+ const subscription = `^----------- ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms -----!`
145
+ const expected = ` ------------ ${TIMEOUT - 1}ms i ${TIMEOUT - 1}ms i ${TIMEOUT - 1}ms i ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ------`
146
+
147
+ expectObservable(
148
+ epicRecoverDing$(TIMEOUT)(puppet$),
149
+ subscription,
150
+ ).toBe(expected, marble)
151
+ })
152
+ })
153
+
154
+ test('epicRecoverReset$() emit periodly', async t => {
155
+ const testScheduler = new TestScheduler(t.same)
156
+
157
+ const puppet = new PuppetMock() as any
158
+
159
+ const TIMEOUT = 60
160
+
161
+ testScheduler.run(helpers => {
162
+ const { hot, expectObservable } = helpers
163
+
164
+ const marble = {
165
+ a: PuppetDuck.actions.STATE_ACTIVATED_EVENT (puppet.id, true),
166
+ d: PuppetDuck.actions.DONG_RECEIVED_EVENT (puppet.id, { data: 'dong' }),
167
+ h: PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT(puppet.id, { data: 'heartbeat' }),
168
+ r: PuppetDuck.actions.RESET_COMMAND (puppet.id, 'epicRecoverReset$'),
169
+ }
170
+
171
+ const puppet$ = hot(` -a----h----h ${TIMEOUT}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2 - 1}ms h ${TIMEOUT - 1}ms h ${TIMEOUT - 1}ms d ${TIMEOUT - 1}ms d ------`, marble)
172
+ const subscription = `^----------- ${TIMEOUT}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms -----!`
173
+ const expected = ` ------------ ${TIMEOUT - 1}ms r ${TIMEOUT * 2 - 1}ms r ${TIMEOUT * 2 - 1}ms r ${TIMEOUT * 2}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ------`
174
+
175
+ expectObservable(
176
+ epicRecoverReset$(TIMEOUT)(puppet$),
177
+ subscription,
178
+ ).toBe(expected, marble)
179
+ })
180
+ })
@@ -0,0 +1,109 @@
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 {
21
+ Observable,
22
+ interval,
23
+ timer,
24
+ } from 'rxjs'
25
+ import {
26
+ debounce,
27
+ filter,
28
+ map,
29
+ switchMap,
30
+ takeUntil,
31
+ tap,
32
+ } from 'rxjs/operators'
33
+ import {
34
+ isActionOf,
35
+ } from 'typesafe-actions'
36
+ import type {
37
+ // type Action,
38
+ AnyAction,
39
+ } from 'redux'
40
+ import {
41
+ Duck as PuppetDuck,
42
+ } from 'wechaty-redux'
43
+ import { log } from '@juzi/wechaty-puppet'
44
+
45
+ const stateActive$ = (action$: Observable<AnyAction>) => action$.pipe(
46
+ filter(isActionOf(PuppetDuck.actions.STATE_ACTIVATED_EVENT)),
47
+ filter(action => action.payload.state === true),
48
+ )
49
+
50
+ const stateInactive$ = (action$: Observable<AnyAction>) => action$.pipe(
51
+ filter(isActionOf(PuppetDuck.actions.STATE_INACTIVATED_EVENT)),
52
+ )
53
+
54
+ const heartbeat$ = (action$: Observable<AnyAction>) => action$.pipe(
55
+ filter(isActionOf([
56
+ PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT,
57
+ PuppetDuck.actions.DONG_RECEIVED_EVENT,
58
+ ])),
59
+ )
60
+
61
+ // Emit once when an active puppet lost heartbeat after a timeout period
62
+ const monitorHeartbeat$ = (timeoutMilliseconds: number) =>
63
+ (action$: Observable<AnyAction>) =>
64
+ stateActive$(action$).pipe(
65
+ switchMap(action => heartbeat$(action$).pipe(
66
+ debounce(() => interval(timeoutMilliseconds)),
67
+ tap(() => log.verbose('PuppetService', 'monitorHeartbeat$() %d seconds TIMEOUT',
68
+ Math.floor(timeoutMilliseconds / 1000),
69
+ )),
70
+ map(() => PuppetDuck.actions.ERROR_RECEIVED_EVENT(
71
+ action.meta.puppetId,
72
+ { gerror: `monitorHeartbeat$() TIMEOUT(${timeoutMilliseconds})` },
73
+ )),
74
+ )),
75
+ )
76
+
77
+ const epicRecoverDing$ = (timeoutMilliseconds: number) =>
78
+ (action$: Observable<AnyAction>) =>
79
+ monitorHeartbeat$(timeoutMilliseconds)(action$).pipe(
80
+ switchMap(action => timer(0, Math.floor(timeoutMilliseconds)).pipe(
81
+ tap(n => log.verbose('PuppetService', 'epicRecoverDing$() actions.ding() emitted #%d', n)),
82
+ map(() => PuppetDuck.actions.DING_COMMAND(
83
+ action.meta.puppetId,
84
+ 'epicRecoverDing$',
85
+ )),
86
+ takeUntil(heartbeat$(action$)),
87
+ takeUntil(stateInactive$(action$)),
88
+ )),
89
+ )
90
+
91
+ const epicRecoverReset$ = (timeoutMilliseconds: number) =>
92
+ (action$: Observable<AnyAction>) =>
93
+ monitorHeartbeat$(timeoutMilliseconds)(action$).pipe(
94
+ switchMap(action => timer(0, timeoutMilliseconds * 2).pipe(
95
+ tap(n => log.verbose('PuppetService', 'epicRecoverReset$() actions.reset() emitted #%d', n)),
96
+ map(() => PuppetDuck.actions.RESET_COMMAND(
97
+ action.meta.puppetId,
98
+ 'epicRecoverReset$',
99
+ )),
100
+ takeUntil(heartbeat$(action$)),
101
+ takeUntil(stateInactive$(action$)),
102
+ )),
103
+ )
104
+
105
+ export {
106
+ monitorHeartbeat$,
107
+ epicRecoverReset$,
108
+ epicRecoverDing$,
109
+ }