@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,14 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+ /**
3
+ * Software performance testing
4
+ * https://en.wikipedia.org/wiki/Software_performance_testing#Testing_types
5
+ *
6
+ * 负载测试,并发测试和压力测试,这三者之前的区别和联系?
7
+ * https://www.zhihu.com/question/269215477/answer/350162604
8
+ *
9
+ * NodeJS: How Is Logging Enabled for the @grpc/grpc.js Package
10
+ * https://stackoverflow.com/a/60935367/1123955
11
+ * GRPC_VERBOSITY=DEBUG GRPC_TRACE=all
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=performance.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.spec.d.ts","sourceRoot":"","sources":["../../../tests/performance.spec.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+ /**
3
+ * Software performance testing
4
+ * https://en.wikipedia.org/wiki/Software_performance_testing#Testing_types
5
+ *
6
+ * 负载测试,并发测试和压力测试,这三者之前的区别和联系?
7
+ * https://www.zhihu.com/question/269215477/answer/350162604
8
+ *
9
+ * NodeJS: How Is Logging Enabled for the @grpc/grpc.js Package
10
+ * https://stackoverflow.com/a/60935367/1123955
11
+ * GRPC_VERBOSITY=DEBUG GRPC_TRACE=all
12
+ */
13
+ import { test, sinon, } from 'tstest';
14
+ import * as PUPPET from '@juzi/wechaty-puppet';
15
+ import { PuppetMock, } from 'wechaty-puppet-mock';
16
+ import { PuppetService, PuppetServer, } from '../src/mod.js';
17
+ import { log } from '../src/config.js';
18
+ const idToName = (id) => {
19
+ return `name of ${id}`;
20
+ };
21
+ class PuppetTest extends PuppetMock {
22
+ constructor(...args) {
23
+ super(...args);
24
+ }
25
+ async contactRawPayload(id) {
26
+ log.verbose('PuppetTest', 'contactRawPayload(%s)', id);
27
+ const rawPayload = {
28
+ avatar: '',
29
+ gender: PUPPET.types.ContactGender.Male,
30
+ id,
31
+ name: idToName(id),
32
+ phone: [],
33
+ type: PUPPET.types.Contact.Individual,
34
+ };
35
+ await new Promise(resolve => {
36
+ process.stdout.write(',');
37
+ setTimeout(() => {
38
+ process.stdout.write('.');
39
+ resolve();
40
+ }, 1000);
41
+ });
42
+ return rawPayload;
43
+ }
44
+ }
45
+ test.skip('stress testing', async (t) => {
46
+ const TOKEN = 'test_token';
47
+ const ENDPOINT = '0.0.0.0:8788';
48
+ // const DING = 'ding_data'
49
+ /**
50
+ * Puppet in Service
51
+ */
52
+ const puppet = new PuppetTest();
53
+ const spy = sinon.spy(puppet, 'contactRawPayload');
54
+ /**
55
+ * Puppet Server
56
+ */
57
+ const serverOptions = {
58
+ endpoint: ENDPOINT,
59
+ puppet: puppet,
60
+ token: TOKEN,
61
+ };
62
+ const puppetServer = new PuppetServer(serverOptions);
63
+ await puppetServer.start();
64
+ /**
65
+ * Puppet Service Client
66
+ */
67
+ const puppetOptions = {
68
+ endpoint: ENDPOINT,
69
+ token: TOKEN,
70
+ };
71
+ const puppetService = new PuppetService(puppetOptions);
72
+ await puppetService.start();
73
+ let COUNTER = 0;
74
+ const dongList = [];
75
+ puppetService.on('dong', payload => {
76
+ dongList.push(payload.data || '');
77
+ });
78
+ const timer = setInterval(() => {
79
+ puppetService.ding(`interval ${COUNTER++}`);
80
+ }, 10);
81
+ const CONCURRENCY = 1000;
82
+ const concurrencyList = [
83
+ ...Array(CONCURRENCY).keys(),
84
+ ].map(String);
85
+ const resultList = await Promise.all(concurrencyList.map(id => puppetService.contactPayload(id)));
86
+ console.info();
87
+ clearInterval(timer);
88
+ const actualNameList = resultList.map(payload => payload.name);
89
+ const EXPECTED_RESULT_LIST = concurrencyList.map(idToName);
90
+ t.equal(spy.callCount, CONCURRENCY, `should be called ${CONCURRENCY} times`);
91
+ t.same(actualNameList, EXPECTED_RESULT_LIST, `should get the right result with a huge concurrency ${CONCURRENCY}`);
92
+ t.ok(dongList.length > 10, `dongList should receive many dong data (actual: ${dongList.length})`);
93
+ t.equal(dongList[0], 'interval 0', 'dongList should get the first response from counter 0');
94
+ /**
95
+ * Stop
96
+ * 1. Puppet in Service
97
+ * 2. Puppet Service Server
98
+ * 3. Puppet Service Client
99
+ *
100
+ */
101
+ await puppetService.stop();
102
+ await puppetServer.stop();
103
+ });
104
+ //# sourceMappingURL=performance.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.spec.js","sourceRoot":"","sources":["../../../tests/performance.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+ export {};
3
+ //# sourceMappingURL=ready-event.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ready-event.spec.d.ts","sourceRoot":"","sources":["../../../tests/ready-event.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+ import { test } from 'tstest';
3
+ import PuppetMock from 'wechaty-puppet-mock';
4
+ import getPort from 'get-port';
5
+ import PuppetService, { PuppetServer, } from '../src/mod.js';
6
+ const NIL_UUID_V4 = '00000000-0000-0000-0000-000000000000';
7
+ test('ready event test', async (t) => {
8
+ const PORT = await getPort();
9
+ const TOKEN = `insecure_${NIL_UUID_V4}`;
10
+ const ENDPOINT = `0.0.0.0:${PORT}`;
11
+ /**
12
+ * Puppet Server
13
+ */
14
+ const puppet = new PuppetMock();
15
+ // set ready to true before service starts
16
+ puppet.readyIndicator.value(true);
17
+ puppet.__currentUserId = 'logged in';
18
+ const serverOptions = {
19
+ endpoint: ENDPOINT,
20
+ puppet: puppet,
21
+ token: TOKEN,
22
+ };
23
+ const puppetServer = new PuppetServer(serverOptions);
24
+ await puppetServer.start();
25
+ /**
26
+ * Puppet Service Client
27
+ */
28
+ const puppetOptions = {
29
+ endpoint: ENDPOINT,
30
+ token: TOKEN,
31
+ };
32
+ // check if ready event is emited on this ready-ed puppet
33
+ const puppetService = new PuppetService(puppetOptions);
34
+ const eventList = [];
35
+ const loginFuture = new Promise(resolve => puppetService.once('login', () => {
36
+ eventList.push('login');
37
+ resolve();
38
+ }));
39
+ const readyFuture = new Promise(resolve => puppetService.once('ready', () => {
40
+ eventList.push('ready');
41
+ resolve();
42
+ }));
43
+ await Promise.all([
44
+ puppetService.start(),
45
+ loginFuture,
46
+ readyFuture,
47
+ ]);
48
+ t.same(eventList, ['login', 'ready'], 'should have `login` event first then `ready`');
49
+ await puppetService.stop();
50
+ await puppetServer.stop();
51
+ });
52
+ //# sourceMappingURL=ready-event.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ready-event.spec.js","sourceRoot":"","sources":["../../../tests/ready-event.spec.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAI7B,OAAO,UAAU,MAAM,qBAAqB,CAAA;AAC5C,OAAO,OAAO,MAAM,UAAU,CAAA;AAE9B,OAAO,aAAa,EAAE,EACpB,YAAY,GAEb,MAAM,eAAe,CAAA;AAEtB,MAAM,WAAW,GAAG,sCAAsC,CAAA;AAE1D,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,YAAY,WAAW,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,WAAW,IAAI,EAAE,CAAA;IAElC;;OAEG;IACH,MAAM,MAAM,GAAG,IAAI,UAAU,EAAS,CAAA;IAEtC,0CAA0C;IAC1C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAChC;IAAC,MAAc,CAAC,eAAe,GAAG,WAAW,CAAA;IAC9C,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,KAAK;KACU,CAAA;IAExB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAA;IAEpD,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;IAE1B;;OAEG;IACH,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,KAAK;KACI,CAAA;IAElB,yDAAyD;IACzD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAA;IACtD,MAAM,SAAS,GAAU,EAAE,CAAA;IAE3B,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAChF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAC,CAAA;IACH,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAChF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAC,CAAA;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,aAAa,CAAC,KAAK,EAAE;QACrB,WAAW;QACX,WAAW;KACZ,CAAC,CAAA;IAEF,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,8CAA8C,CAAC,CAAA;IAErF,MAAM,aAAa,CAAC,IAAI,EAAE,CAAA;IAC1B,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+ export {};
3
+ //# sourceMappingURL=uuid-file-box.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid-file-box.spec.d.ts","sourceRoot":"","sources":["../../../tests/uuid-file-box.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+ import { test } from 'tstest';
3
+ import * as path from 'path';
4
+ import * as fs from 'fs';
5
+ import PuppetMock from 'wechaty-puppet-mock';
6
+ import getPort from 'get-port';
7
+ import temp from 'temp';
8
+ import { FileBox } from 'file-box';
9
+ import PuppetService, { PuppetServer } from '../src/mod.js';
10
+ const NIL_UUID_V4 = '00000000-0000-0000-0000-000000000000';
11
+ const __dirname = path.resolve();
12
+ test('message file test', async (t) => {
13
+ const PORT = await getPort();
14
+ const TOKEN = `insecure_${NIL_UUID_V4}`;
15
+ const ENDPOINT = `0.0.0.0:${PORT}`;
16
+ const FILE = path.join(__dirname, 'tests', 'fixtures', 'smoke-testing.ts');
17
+ const EXPECTED_SIZE = fs.statSync(FILE).size;
18
+ /**
19
+ * Puppet Server
20
+ */
21
+ const puppet = new PuppetMock();
22
+ puppet.messageFile = async () => FileBox.fromFile(FILE);
23
+ const serverOptions = {
24
+ endpoint: ENDPOINT,
25
+ puppet: puppet,
26
+ token: TOKEN,
27
+ };
28
+ const puppetServer = new PuppetServer(serverOptions);
29
+ await puppetServer.start();
30
+ /**
31
+ * Puppet Service Client
32
+ */
33
+ const puppetOptions = {
34
+ endpoint: ENDPOINT,
35
+ token: TOKEN,
36
+ };
37
+ const puppetService = new PuppetService(puppetOptions);
38
+ await puppetService.start();
39
+ const file = await puppetService.messageFile('sb');
40
+ const tmpFolder = temp.mkdirSync('test');
41
+ const tmpFile = path.join(tmpFolder, 'uuid-file.dat');
42
+ await file.toFile(tmpFile);
43
+ const fileSize = fs.statSync(tmpFile).size;
44
+ t.equal(fileSize, EXPECTED_SIZE, 'should save file with the correct size');
45
+ fs.rmSync(tmpFile);
46
+ await puppetService.stop();
47
+ await puppetServer.stop();
48
+ });
49
+ //# sourceMappingURL=uuid-file-box.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid-file-box.spec.js","sourceRoot":"","sources":["../../../tests/uuid-file-box.spec.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAsB,QAAQ,CAAA;AAC7C,OAAO,KAAK,IAAI,MAAqB,MAAM,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAuB,IAAI,CAAA;AAEzC,OAAO,UAAU,MAAoB,qBAAqB,CAAA;AAC1D,OAAO,OAAO,MAAuB,UAAU,CAAA;AAC/C,OAAO,IAAI,MAA0B,MAAM,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAmB,UAAU,CAAA;AAE/C,OAAO,aAAa,EAAE,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAA;AAEhF,MAAM,WAAW,GAAG,sCAAsC,CAAA;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;AAEhC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,YAAY,WAAW,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,WAAW,IAAI,EAAE,CAAA;IAElC,MAAM,IAAI,GAAY,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAA;IACnF,MAAM,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;IAE5C;;OAEG;IACH,MAAM,MAAM,GAAG,IAAI,UAAU,EAAS,CAAA;IACtC,MAAM,CAAC,WAAW,GAAG,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEvD,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,KAAK;KACU,CAAA;IAExB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAA;IACpD,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;IAE1B;;OAEG;IACH,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,KAAK;KACI,CAAA;IAElB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAA;IACtD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;IAE3B,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAElD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;IAErD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAA;IAE1C,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,wCAAwC,CAAC,CAAA;IAE1E,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,MAAM,aAAa,CAAC,IAAI,EAAE,CAAA;IAC1B,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAA"}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "@juzi/wechaty-puppet-service",
3
+ "version": "1.0.0",
4
+ "description": "Puppet Service for Wechaty",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./dist/esm/src/mod.js",
9
+ "require": "./dist/cjs/src/mod.js"
10
+ }
11
+ },
12
+ "typings": "./dist/esm/src/mod.d.ts",
13
+ "engines": {
14
+ "node": ">=16",
15
+ "npm": ">=7"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc && tsc -p tsconfig.cjs.json",
19
+ "clean": "shx rm -fr dist/*",
20
+ "dist": "npm-run-all clean build dist:commonjs",
21
+ "dist:commonjs": "jq -n \"{ type: \\\"commonjs\\\" }\" > dist/cjs/package.json",
22
+ "lint": "npm-run-all lint:es lint:ts lint:md",
23
+ "lint:md": "markdownlint README.md",
24
+ "lint:ts": "tsc --isolatedModules --noEmit",
25
+ "start": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/ding-dong-bot.ts",
26
+ "test": "npm run lint && npm run test:unit",
27
+ "test:pack": "bash -x scripts/npm-pack-testing.sh",
28
+ "test:unit": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" TAP_TIMEOUT=60 tap \"src/**/*.spec.ts\" \"tests/**/*.spec.ts\"",
29
+ "lint:es": "eslint --ignore-pattern fixtures/ \"src/**/*.ts\" \"tests/**/*.ts\""
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/juzibot/wechaty-puppet-service.git"
34
+ },
35
+ "keywords": [
36
+ "chatie",
37
+ "wechaty",
38
+ "chatbot",
39
+ "bot",
40
+ "grpc",
41
+ "wechat",
42
+ "sdk"
43
+ ],
44
+ "author": "Huan LI <zixia@zixia.net>",
45
+ "license": "Apache-2.0",
46
+ "bugs": {
47
+ "url": "https://github.com/juzibot/wechaty-puppet-service/issues"
48
+ },
49
+ "homepage": "https://github.com/juzibot/wechaty-puppet-service#readme",
50
+ "devDependencies": {
51
+ "@chatie/eslint-config": "^1.0.4",
52
+ "@chatie/semver": "^0.4.7",
53
+ "@chatie/tsconfig": "^4.6.3",
54
+ "@types/google-protobuf": "^3.15.5",
55
+ "@types/lru-cache": "^7.5.0",
56
+ "@types/semver": "^7.3.9",
57
+ "@types/temp": "^0.9.1",
58
+ "@types/uuid": "^8.3.4",
59
+ "@types/ws": "^8.5.3",
60
+ "get-port": "^6.1.2",
61
+ "temp": "^0.9.4",
62
+ "typed-emitter": "^1.5.0-from-event",
63
+ "utility-types": "^3.10.0",
64
+ "wechaty-puppet-mock": "^1.18.2",
65
+ "why-is-node-running": "^2.2.1"
66
+ },
67
+ "peerDependencies": {
68
+ "@juzi/wechaty-puppet": "1.0.0"
69
+ },
70
+ "dependencies": {
71
+ "clone-class": "^1.1.1",
72
+ "ducks": "^1.0.2",
73
+ "file-box": "^1.5.5",
74
+ "flash-store": "^1.3.4",
75
+ "gerror": "^1.0.16",
76
+ "redux-observable": "^2.0.0",
77
+ "rxjs": "^7.5.5",
78
+ "semver": "^7.3.5",
79
+ "stronger-typed-streams": "^0.2.0",
80
+ "uuid": "^8.3.2",
81
+ "@juzi/wechaty-grpc": "1.0.0",
82
+ "wechaty-redux": "^1.20.2",
83
+ "wechaty-token": "^1.0.6"
84
+ },
85
+ "publishConfig": {
86
+ "access": "public",
87
+ "tag": "latest"
88
+ },
89
+ "files": [
90
+ "bin/",
91
+ "dist/",
92
+ "src/"
93
+ ],
94
+ "tap": {
95
+ "check-coverage": false
96
+ }
97
+ }
@@ -0,0 +1,10 @@
1
+ # Auth for Wechaty Puppet Service gRPC
2
+
3
+ 1. OpenSSL CA generation script: <https://github.com/wechaty/dotenv/blob/main/ca/generate.sh>
4
+ 1. Common Name (CN) is very important because it will be used as Server Name Indication (SNI) in TLS handshake.
5
+
6
+ ## Monkey Patch
7
+
8
+ We need to copy http2 header `:authority` to metadata.
9
+
10
+ See: <monkey-patch-header-authorization.ts>
@@ -0,0 +1,81 @@
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 {
9
+ GrpcStatus,
10
+ Metadata,
11
+ UntypedServiceImplementation,
12
+ } from './grpc-js.js'
13
+
14
+ import { authImplToken } from './auth-impl-token.js'
15
+
16
+ test('authImplToken()', async t => {
17
+ const sandbox = sinon.createSandbox()
18
+ const spy = sandbox.spy()
19
+
20
+ const TOKEN = 'UUIDv4'
21
+ const IMPL: UntypedServiceImplementation = {
22
+ spy,
23
+ }
24
+
25
+ const implWithAuth = authImplToken(TOKEN)(IMPL)
26
+ const validMetadata = new Metadata()
27
+ validMetadata.add('Authorization', 'Wechaty ' + TOKEN)
28
+
29
+ const TEST_LIST = [
30
+ { // Valid Token Request
31
+ call: {
32
+ metadata: validMetadata,
33
+ } as any,
34
+ callback: sandbox.spy(),
35
+ ok: true,
36
+ },
37
+ { // Invalid request for Callback
38
+ call: {
39
+ metadata: new Metadata(),
40
+ } as any,
41
+ callback: sandbox.spy(),
42
+ ok: false,
43
+ },
44
+ { // Invalid request for Stream
45
+ call: {
46
+ emit: sandbox.spy(),
47
+ metadata: new Metadata(),
48
+ } as any,
49
+ callback: undefined,
50
+ ok: false,
51
+ },
52
+ ] as const
53
+
54
+ const method = implWithAuth['spy']!
55
+
56
+ for (const { call, callback, ok } of TEST_LIST) {
57
+ spy.resetHistory()
58
+
59
+ method(call, callback as any)
60
+
61
+ if (ok) {
62
+ t.ok(spy.calledOnce, 'should call IMPL handler')
63
+ continue
64
+ }
65
+
66
+ /**
67
+ * not ok
68
+ */
69
+ t.ok(spy.notCalled, 'should not call IMPL handler')
70
+ if (callback) {
71
+ t.equal(callback.args[0]![0].code, GrpcStatus.UNAUTHENTICATED, 'should return UNAUTHENTICATED')
72
+ } else {
73
+ t.equal(call.emit.args[0][0], 'error', 'should emit error')
74
+ t.equal(call.emit.args[0][1].code, GrpcStatus.UNAUTHENTICATED, 'should emit UNAUTHENTICATED')
75
+ }
76
+
77
+ // console.info(spy.args)
78
+ // console.info(callback?.args)
79
+ }
80
+ sandbox.restore()
81
+ })
@@ -0,0 +1,108 @@
1
+ import { log } from '@juzi/wechaty-puppet'
2
+
3
+ import {
4
+ StatusBuilder,
5
+ UntypedHandleCall,
6
+ sendUnaryData,
7
+ Metadata,
8
+ ServerUnaryCall,
9
+ GrpcStatus,
10
+ UntypedServiceImplementation,
11
+ } from './grpc-js.js'
12
+
13
+ import { monkeyPatchMetadataFromHttp2Headers } from './mokey-patch-header-authorization.js'
14
+
15
+ /**
16
+ * Huan(202108): Monkey patch to support
17
+ * copy `:authority` from header to metadata
18
+ */
19
+ monkeyPatchMetadataFromHttp2Headers(Metadata)
20
+
21
+ /**
22
+ * Huan(202108): wrap handle calls with authorization
23
+ *
24
+ * See:
25
+ * https://grpc.io/docs/guides/auth/#with-server-authentication-ssltls-and-a-custom-header-with-token
26
+ */
27
+ const authWrapHandlerToken = (validToken: string) => (handler: UntypedHandleCall) => {
28
+ log.verbose('wechaty-puppet-service',
29
+ 'auth/auth-impl-token.ts authWrapHandlerToken(%s)(%s)',
30
+ validToken,
31
+ handler.name,
32
+ )
33
+
34
+ return function (
35
+ call: ServerUnaryCall<any, any>,
36
+ cb?: sendUnaryData<any>,
37
+ ) {
38
+ // console.info('wrapAuthHandler internal')
39
+
40
+ const authorization = call.metadata.get('authorization')[0]
41
+ // console.info('authorization', authorization)
42
+
43
+ let errMsg = ''
44
+ if (typeof authorization === 'string') {
45
+ if (authorization.startsWith('Wechaty ')) {
46
+ const token = authorization.substring(8 /* 'Wechaty '.length */)
47
+ if (token === validToken) {
48
+
49
+ return handler(
50
+ call as any,
51
+ cb as any,
52
+ )
53
+
54
+ } else {
55
+ errMsg = `Invalid Wechaty TOKEN "${token}"`
56
+ }
57
+ } else {
58
+ const type = authorization.split(/\s+/)[0]
59
+ errMsg = `Invalid authorization type: "${type}"`
60
+ }
61
+ } else {
62
+ errMsg = 'No Authorization found.'
63
+ }
64
+
65
+ /**
66
+ * Not authorized
67
+ */
68
+ const error = new StatusBuilder()
69
+ .withCode(GrpcStatus.UNAUTHENTICATED)
70
+ .withDetails(errMsg)
71
+ .withMetadata(call.metadata)
72
+ .build()
73
+
74
+ if (cb) {
75
+ /**
76
+ * Callback:
77
+ * handleUnaryCall
78
+ * handleClientStreamingCall
79
+ */
80
+ cb(error)
81
+ } else if ('emit' in call) {
82
+ /**
83
+ * Stream:
84
+ * handleServerStreamingCall
85
+ * handleBidiStreamingCall
86
+ */
87
+ call.emit('error', error)
88
+ } else {
89
+ throw new Error('no callback and call is not emit-able')
90
+ }
91
+ }
92
+ }
93
+
94
+ const authImplToken = <T extends UntypedServiceImplementation>(validToken: string) => (
95
+ serviceImpl: T,
96
+ ) => {
97
+ log.verbose('wechaty-puppet-service', 'authImplToken()')
98
+
99
+ for (const [key, val] of Object.entries(serviceImpl)) {
100
+ // any: https://stackoverflow.com/q/59572522/1123955
101
+ (serviceImpl as any)[key] = authWrapHandlerToken(validToken)(val)
102
+ }
103
+ return serviceImpl
104
+ }
105
+
106
+ export {
107
+ authImplToken,
108
+ }
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+
3
+ import {
4
+ test,
5
+ } from 'tstest'
6
+
7
+ import https from 'https'
8
+
9
+ import * as envVar from './env-vars.js'
10
+ import type { AddressInfo } from 'ws'
11
+
12
+ import {
13
+ TLS_CA_CERT,
14
+ TLS_INSECURE_SERVER_CERT_COMMON_NAME,
15
+ TLS_INSECURE_SERVER_CERT,
16
+ TLS_INSECURE_SERVER_KEY,
17
+ } from './ca.js'
18
+
19
+ test('CA smoke testing', async t => {
20
+
21
+ const ca = envVar.WECHATY_PUPPET_SERVICE_TLS_CA_CERT() || TLS_CA_CERT
22
+ const cert = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT() || TLS_INSECURE_SERVER_CERT
23
+ const key = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY() || TLS_INSECURE_SERVER_KEY
24
+
25
+ const server = https.createServer({
26
+ cert,
27
+ key,
28
+ })
29
+
30
+ const ALIVE = 'Alive!\n'
31
+
32
+ server.on('request', (_req, res) => {
33
+ res.writeHead(200)
34
+ res.end(ALIVE)
35
+ })
36
+
37
+ server.listen()
38
+ const port = (server.address() as AddressInfo).port
39
+
40
+ const reply = await new Promise((resolve, reject) => {
41
+ https.request({
42
+ ca,
43
+ hostname: '127.0.0.1',
44
+ method: 'GET',
45
+ path: '/',
46
+ port,
47
+ servername: TLS_INSECURE_SERVER_CERT_COMMON_NAME,
48
+ }, res => {
49
+ res.on('data', chunk => resolve(chunk.toString()))
50
+ res.on('error', reject)
51
+ }).end()
52
+ })
53
+ server.close()
54
+
55
+ t.equal(reply, ALIVE, 'should get https server reply')
56
+ })
57
+
58
+ test('CA SNI tests', async t => {
59
+
60
+ const ca = envVar.WECHATY_PUPPET_SERVICE_TLS_CA_CERT() || TLS_CA_CERT
61
+ const cert = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT() || TLS_INSECURE_SERVER_CERT
62
+ const key = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY() || TLS_INSECURE_SERVER_KEY
63
+
64
+ const server = https.createServer({
65
+ cert,
66
+ key,
67
+ })
68
+
69
+ server.on('request', (_req, res) => {
70
+ res.writeHead(200)
71
+ res.end(ALIVE)
72
+ })
73
+
74
+ server.listen()
75
+ const port = (server.address() as AddressInfo).port
76
+
77
+ const ALIVE = 'Alive!\n'
78
+ const SNI_TEST_LIST = [
79
+ [
80
+ TLS_INSECURE_SERVER_CERT_COMMON_NAME,
81
+ true,
82
+ ],
83
+ [
84
+ 'invalid-sni',
85
+ false,
86
+ "Hostname/IP does not match certificate's altnames: Host: invalid-sni. is not cert's CN: insecure",
87
+ ],
88
+ ] as const
89
+
90
+ for (const [SNI, EXPECT, MSG] of SNI_TEST_LIST) {
91
+ const result = await new Promise((resolve, reject) => {
92
+ https.request({
93
+ ca,
94
+ hostname: '127.0.0.1',
95
+ method: 'GET',
96
+ path: '/',
97
+ port,
98
+ servername: SNI,
99
+ }, res => {
100
+ res.on('data', chunk => resolve(chunk.toString() === ALIVE))
101
+ res.on('error', reject)
102
+ })
103
+ .on('error', e => {
104
+ // console.info(e.message)
105
+ t.equal(e.message, MSG, 'should get the error for invalid SNI: ' + SNI)
106
+ resolve(false)
107
+ })
108
+ .end()
109
+
110
+ })
111
+
112
+ t.equal(result, EXPECT, 'should check the SNI: ' + SNI)
113
+ }
114
+
115
+ server.close()
116
+ })