@tencent-rtc/mcp 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 (286) hide show
  1. package/@tencent/aegis-node-sdk/CHANGELOG.md +8 -0
  2. package/@tencent/aegis-node-sdk/LICENSE +21 -0
  3. package/@tencent/aegis-node-sdk/README.md +562 -0
  4. package/@tencent/aegis-node-sdk/lib/aegis.min.js +1 -0
  5. package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/config.d.ts +14 -0
  6. package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/global.d.ts +1 -0
  7. package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/index.d.ts +9 -0
  8. package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/report-ignore.d.ts +2 -0
  9. package/@tencent/aegis-node-sdk/lib/packages/core/src/core.d.ts +85 -0
  10. package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/afterRequestHooks.d.ts +3 -0
  11. package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/beforeRequestHooks.d.ts +9 -0
  12. package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/modifyRequestHooks.d.ts +3 -0
  13. package/@tencent/aegis-node-sdk/lib/packages/core/src/index.d.ts +9 -0
  14. package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/config.d.ts +62 -0
  15. package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/env.d.ts +11 -0
  16. package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/index.d.ts +4 -0
  17. package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/log.d.ts +130 -0
  18. package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/send.d.ts +34 -0
  19. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/format.d.ts +2 -0
  20. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/index.d.ts +18 -0
  21. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/length-limit.d.ts +8 -0
  22. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/pv.d.ts +8 -0
  23. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/remove-payload.d.ts +2 -0
  24. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/repeat-limit.d.ts +4 -0
  25. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/report.d.ts +10 -0
  26. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/sample.d.ts +3 -0
  27. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/throttle.d.ts +3 -0
  28. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/index.d.ts +34 -0
  29. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/jwt.d.ts +12 -0
  30. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/ot-js.d.ts +14 -0
  31. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/uuid.d.ts +2 -0
  32. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/whitelist.d.ts +12 -0
  33. package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/write-before.d.ts +3 -0
  34. package/@tencent/aegis-node-sdk/lib/packages/core/src/plugin.d.ts +33 -0
  35. package/@tencent/aegis-node-sdk/lib/packages/core/src/polyfill.d.ts +0 -0
  36. package/@tencent/aegis-node-sdk/lib/packages/core/src/util/destroy.d.ts +2 -0
  37. package/@tencent/aegis-node-sdk/lib/packages/core/src/util/event-emitter.d.ts +18 -0
  38. package/@tencent/aegis-node-sdk/lib/packages/core/src/util/index.d.ts +60 -0
  39. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/index.d.ts +15 -0
  40. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/interface/selector.d.ts +5 -0
  41. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/pipes/batch-report-pipe.d.ts +6 -0
  42. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/protocol/protocol_base.d.ts +18 -0
  43. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/protocol/protocol_http.d.ts +12 -0
  44. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/ip_selector.d.ts +10 -0
  45. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/polaris_selector.d.ts +20 -0
  46. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/selector_base.d.ts +27 -0
  47. package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/util/eval_require.d.ts +2 -0
  48. package/@tencent/aegis-node-sdk/package.json +19 -0
  49. package/@tencent/polaris/README.md +407 -0
  50. package/@tencent/polaris/dist/consumer/health.d.ts +126 -0
  51. package/@tencent/polaris/dist/consumer/health.js +283 -0
  52. package/@tencent/polaris/dist/consumer/health.js.map +1 -0
  53. package/@tencent/polaris/dist/consumer/index.d.ts +120 -0
  54. package/@tencent/polaris/dist/consumer/index.js +348 -0
  55. package/@tencent/polaris/dist/consumer/index.js.map +1 -0
  56. package/@tencent/polaris/dist/consumer/monitor.d.ts +145 -0
  57. package/@tencent/polaris/dist/consumer/monitor.js +343 -0
  58. package/@tencent/polaris/dist/consumer/monitor.js.map +1 -0
  59. package/@tencent/polaris/dist/consumer/selector.d.ts +73 -0
  60. package/@tencent/polaris/dist/consumer/selector.js +316 -0
  61. package/@tencent/polaris/dist/consumer/selector.js.map +1 -0
  62. package/@tencent/polaris/dist/errors.d.ts +373 -0
  63. package/@tencent/polaris/dist/errors.js +154 -0
  64. package/@tencent/polaris/dist/errors.js.map +1 -0
  65. package/@tencent/polaris/dist/global.d.ts +16 -0
  66. package/@tencent/polaris/dist/global.js +18 -0
  67. package/@tencent/polaris/dist/global.js.map +1 -0
  68. package/@tencent/polaris/dist/index.d.ts +62 -0
  69. package/@tencent/polaris/dist/index.js +145 -0
  70. package/@tencent/polaris/dist/index.js.map +1 -0
  71. package/@tencent/polaris/dist/instance.d.ts +109 -0
  72. package/@tencent/polaris/dist/instance.js +38 -0
  73. package/@tencent/polaris/dist/instance.js.map +1 -0
  74. package/@tencent/polaris/dist/limiter/bucket.d.ts +51 -0
  75. package/@tencent/polaris/dist/limiter/bucket.js +152 -0
  76. package/@tencent/polaris/dist/limiter/bucket.js.map +1 -0
  77. package/@tencent/polaris/dist/limiter/index.d.ts +73 -0
  78. package/@tencent/polaris/dist/limiter/index.js +149 -0
  79. package/@tencent/polaris/dist/limiter/index.js.map +1 -0
  80. package/@tencent/polaris/dist/limiter/ratelimit.d.ts +27 -0
  81. package/@tencent/polaris/dist/limiter/ratelimit.js +134 -0
  82. package/@tencent/polaris/dist/limiter/ratelimit.js.map +1 -0
  83. package/@tencent/polaris/dist/limiter/ratelimiter/base.d.ts +17 -0
  84. package/@tencent/polaris/dist/limiter/ratelimiter/base.js +15 -0
  85. package/@tencent/polaris/dist/limiter/ratelimiter/base.js.map +1 -0
  86. package/@tencent/polaris/dist/limiter/ratelimiter/global.d.ts +59 -0
  87. package/@tencent/polaris/dist/limiter/ratelimiter/global.js +397 -0
  88. package/@tencent/polaris/dist/limiter/ratelimiter/global.js.map +1 -0
  89. package/@tencent/polaris/dist/limiter/ratelimiter/index.d.ts +3 -0
  90. package/@tencent/polaris/dist/limiter/ratelimiter/index.js +19 -0
  91. package/@tencent/polaris/dist/limiter/ratelimiter/index.js.map +1 -0
  92. package/@tencent/polaris/dist/limiter/ratelimiter/local.d.ts +17 -0
  93. package/@tencent/polaris/dist/limiter/ratelimiter/local.js +52 -0
  94. package/@tencent/polaris/dist/limiter/ratelimiter/local.js.map +1 -0
  95. package/@tencent/polaris/dist/location.d.ts +48 -0
  96. package/@tencent/polaris/dist/location.js +67 -0
  97. package/@tencent/polaris/dist/location.js.map +1 -0
  98. package/@tencent/polaris/dist/logging.d.ts +106 -0
  99. package/@tencent/polaris/dist/logging.js +130 -0
  100. package/@tencent/polaris/dist/logging.js.map +1 -0
  101. package/@tencent/polaris/dist/metadata.d.ts +78 -0
  102. package/@tencent/polaris/dist/metadata.js +119 -0
  103. package/@tencent/polaris/dist/metadata.js.map +1 -0
  104. package/@tencent/polaris/dist/plugins/breaker/polaris.d.ts +47 -0
  105. package/@tencent/polaris/dist/plugins/breaker/polaris.js +162 -0
  106. package/@tencent/polaris/dist/plugins/breaker/polaris.js.map +1 -0
  107. package/@tencent/polaris/dist/plugins/lb/base.d.ts +24 -0
  108. package/@tencent/polaris/dist/plugins/lb/base.js +32 -0
  109. package/@tencent/polaris/dist/plugins/lb/base.js.map +1 -0
  110. package/@tencent/polaris/dist/plugins/lb/edf.d.ts +24 -0
  111. package/@tencent/polaris/dist/plugins/lb/edf.js +77 -0
  112. package/@tencent/polaris/dist/plugins/lb/edf.js.map +1 -0
  113. package/@tencent/polaris/dist/plugins/lb/hashring.d.ts +24 -0
  114. package/@tencent/polaris/dist/plugins/lb/hashring.js +53 -0
  115. package/@tencent/polaris/dist/plugins/lb/hashring.js.map +1 -0
  116. package/@tencent/polaris/dist/plugins/lb/sticky.d.ts +31 -0
  117. package/@tencent/polaris/dist/plugins/lb/sticky.js +88 -0
  118. package/@tencent/polaris/dist/plugins/lb/sticky.js.map +1 -0
  119. package/@tencent/polaris/dist/plugins/lb/swrr.d.ts +25 -0
  120. package/@tencent/polaris/dist/plugins/lb/swrr.js +72 -0
  121. package/@tencent/polaris/dist/plugins/lb/swrr.js.map +1 -0
  122. package/@tencent/polaris/dist/plugins/lb/wr.d.ts +17 -0
  123. package/@tencent/polaris/dist/plugins/lb/wr.js +50 -0
  124. package/@tencent/polaris/dist/plugins/lb/wr.js.map +1 -0
  125. package/@tencent/polaris/dist/plugins/lb/wrr.d.ts +19 -0
  126. package/@tencent/polaris/dist/plugins/lb/wrr.js +81 -0
  127. package/@tencent/polaris/dist/plugins/lb/wrr.js.map +1 -0
  128. package/@tencent/polaris/dist/plugins/logging/console.d.ts +10 -0
  129. package/@tencent/polaris/dist/plugins/logging/console.js +38 -0
  130. package/@tencent/polaris/dist/plugins/logging/console.js.map +1 -0
  131. package/@tencent/polaris/dist/plugins/naming/local-server/index.d.ts +32 -0
  132. package/@tencent/polaris/dist/plugins/naming/local-server/index.js +88 -0
  133. package/@tencent/polaris/dist/plugins/naming/local-server/index.js.map +1 -0
  134. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.d.ts +124 -0
  135. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.js +398 -0
  136. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.js.map +1 -0
  137. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.d.ts +27 -0
  138. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.js +287 -0
  139. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.js.map +1 -0
  140. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.d.ts +15 -0
  141. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.js +43 -0
  142. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.js.map +1 -0
  143. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.d.ts +28 -0
  144. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.js +249 -0
  145. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.js.map +1 -0
  146. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.d.ts +19 -0
  147. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.js +222 -0
  148. package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.js.map +1 -0
  149. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.d.ts +26 -0
  150. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.js +99 -0
  151. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.js.map +1 -0
  152. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.d.ts +60 -0
  153. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.js +259 -0
  154. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.js.map +1 -0
  155. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/discover.proto +24 -0
  156. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/monitor.proto +18 -0
  157. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/ratelimit.proto +12 -0
  158. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.d.ts +39 -0
  159. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.js +115 -0
  160. package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.js.map +1 -0
  161. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/api.proto +24 -0
  162. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/client.proto +22 -0
  163. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/model.proto +28 -0
  164. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/ratelimit.proto +80 -0
  165. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/request.proto +18 -0
  166. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/response.proto +65 -0
  167. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/routing.proto +66 -0
  168. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/service.proto +95 -0
  169. package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/types.d.ts +1568 -0
  170. package/@tencent/polaris/dist/plugins/naming/polaris-server/index.d.ts +36 -0
  171. package/@tencent/polaris/dist/plugins/naming/polaris-server/index.js +51 -0
  172. package/@tencent/polaris/dist/plugins/naming/polaris-server/index.js.map +1 -0
  173. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/api.proto +18 -0
  174. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/circuitbreak.proto +67 -0
  175. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/request.proto +82 -0
  176. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/response.proto +11 -0
  177. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdkcache.proto +46 -0
  178. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdkconfiguration.proto +16 -0
  179. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdktoken.proto +10 -0
  180. package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/types.d.ts +1102 -0
  181. package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.d.ts +29 -0
  182. package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.js +77 -0
  183. package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.js.map +1 -0
  184. package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/api.proto +12 -0
  185. package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/ratelimit.proto +28 -0
  186. package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/types.d.ts +395 -0
  187. package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.d.ts +13 -0
  188. package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.js +116 -0
  189. package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.js.map +1 -0
  190. package/@tencent/polaris/dist/plugins/naming/polaris-server/types.d.ts +67 -0
  191. package/@tencent/polaris/dist/plugins/naming/polaris-server/types.js +67 -0
  192. package/@tencent/polaris/dist/plugins/naming/polaris-server/types.js.map +1 -0
  193. package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.d.ts +99 -0
  194. package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.js +217 -0
  195. package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.js.map +1 -0
  196. package/@tencent/polaris/dist/plugins/registry/memory.d.ts +10 -0
  197. package/@tencent/polaris/dist/plugins/registry/memory.js +50 -0
  198. package/@tencent/polaris/dist/plugins/registry/memory.js.map +1 -0
  199. package/@tencent/polaris/dist/plugins/router/polaris/nearby.d.ts +51 -0
  200. package/@tencent/polaris/dist/plugins/router/polaris/nearby.js +145 -0
  201. package/@tencent/polaris/dist/plugins/router/polaris/nearby.js.map +1 -0
  202. package/@tencent/polaris/dist/plugins/router/polaris/rule.d.ts +11 -0
  203. package/@tencent/polaris/dist/plugins/router/polaris/rule.js +174 -0
  204. package/@tencent/polaris/dist/plugins/router/polaris/rule.js.map +1 -0
  205. package/@tencent/polaris/dist/plugins/router/trpc/canary.d.ts +25 -0
  206. package/@tencent/polaris/dist/plugins/router/trpc/canary.js +36 -0
  207. package/@tencent/polaris/dist/plugins/router/trpc/canary.js.map +1 -0
  208. package/@tencent/polaris/dist/plugins/router/trpc/env.d.ts +10 -0
  209. package/@tencent/polaris/dist/plugins/router/trpc/env.js +34 -0
  210. package/@tencent/polaris/dist/plugins/router/trpc/env.js.map +1 -0
  211. package/@tencent/polaris/dist/plugins/router/trpc/set.d.ts +56 -0
  212. package/@tencent/polaris/dist/plugins/router/trpc/set.js +106 -0
  213. package/@tencent/polaris/dist/plugins/router/trpc/set.js.map +1 -0
  214. package/@tencent/polaris/dist/plugins/shaping/unirate.d.ts +31 -0
  215. package/@tencent/polaris/dist/plugins/shaping/unirate.js +124 -0
  216. package/@tencent/polaris/dist/plugins/shaping/unirate.js.map +1 -0
  217. package/@tencent/polaris/dist/plugins/shaping/warmup.d.ts +61 -0
  218. package/@tencent/polaris/dist/plugins/shaping/warmup.js +171 -0
  219. package/@tencent/polaris/dist/plugins/shaping/warmup.js.map +1 -0
  220. package/@tencent/polaris/dist/plugins/weight/polaris.d.ts +23 -0
  221. package/@tencent/polaris/dist/plugins/weight/polaris.js +159 -0
  222. package/@tencent/polaris/dist/plugins/weight/polaris.js.map +1 -0
  223. package/@tencent/polaris/dist/plugins.d.ts +619 -0
  224. package/@tencent/polaris/dist/plugins.js +91 -0
  225. package/@tencent/polaris/dist/plugins.js.map +1 -0
  226. package/@tencent/polaris/dist/polaris.d.ts +33 -0
  227. package/@tencent/polaris/dist/polaris.js +59 -0
  228. package/@tencent/polaris/dist/polaris.js.map +1 -0
  229. package/@tencent/polaris/dist/provider/index.d.ts +102 -0
  230. package/@tencent/polaris/dist/provider/index.js +168 -0
  231. package/@tencent/polaris/dist/provider/index.js.map +1 -0
  232. package/@tencent/polaris/dist/registry.d.ts +174 -0
  233. package/@tencent/polaris/dist/registry.js +660 -0
  234. package/@tencent/polaris/dist/registry.js.map +1 -0
  235. package/@tencent/polaris/dist/rules.d.ts +163 -0
  236. package/@tencent/polaris/dist/rules.js +24 -0
  237. package/@tencent/polaris/dist/rules.js.map +1 -0
  238. package/@tencent/polaris/dist/scripts/postinstall.d.ts +1 -0
  239. package/@tencent/polaris/dist/scripts/postinstall.js +71 -0
  240. package/@tencent/polaris/dist/scripts/postinstall.js.map +1 -0
  241. package/@tencent/polaris/dist/service.d.ts +18 -0
  242. package/@tencent/polaris/dist/service.js +3 -0
  243. package/@tencent/polaris/dist/service.js.map +1 -0
  244. package/@tencent/polaris/dist/skeleton.d.ts +87 -0
  245. package/@tencent/polaris/dist/skeleton.js +282 -0
  246. package/@tencent/polaris/dist/skeleton.js.map +1 -0
  247. package/@tencent/polaris/dist/utils.d.ts +36 -0
  248. package/@tencent/polaris/dist/utils.js +74 -0
  249. package/@tencent/polaris/dist/utils.js.map +1 -0
  250. package/@tencent/polaris/dist/weak.d.ts +11 -0
  251. package/@tencent/polaris/dist/weak.js +44 -0
  252. package/@tencent/polaris/dist/weak.js.map +1 -0
  253. package/@tencent/polaris/package.json +114 -0
  254. package/README.md +61 -0
  255. package/cursor-setting.png +0 -0
  256. package/index.js +16 -0
  257. package/index.js.map +1 -0
  258. package/mcp-server-prompt.png +0 -0
  259. package/mcp.json +8 -0
  260. package/package.json +49 -0
  261. package/resource/doc/tuicallkit/android/.gitkeep +0 -0
  262. package/resource/doc/tuicallkit/android/api_TUICallKit.md +610 -0
  263. package/resource/doc/tuicallkit/android/api_TUICallObserver.md +784 -0
  264. package/resource/doc/tuicallkit/android/how_to_integrated_android_callkit.md +286 -0
  265. package/resource/doc/tuicallkit/faq/faq.md +127 -0
  266. package/resource/doc/tuicallkit/flutter/api_TUICallDefine.md +938 -0
  267. package/resource/doc/tuicallkit/flutter/api_TUICallKit.md +469 -0
  268. package/resource/doc/tuicallkit/flutter/api_TUICallObserver.md +897 -0
  269. package/resource/doc/tuicallkit/flutter/how_to_integrated_flutter_callkit.md +226 -0
  270. package/resource/doc/tuicallkit/flutter/how_to_run_flutter_callkit_demo.md +101 -0
  271. package/resource/doc/tuicallkit/iOS/api_TUICallKit.md +398 -0
  272. package/resource/doc/tuicallkit/iOS/api_TUICallObserver.md +781 -0
  273. package/resource/doc/tuicallkit/iOS/how_to_integrated_iOS_callkit.md +268 -0
  274. package/resource/doc/tuicallkit/iOS/how_to_run_iOS_callkit_demo.md +98 -0
  275. package/resource/doc/tuicallkit/react/.gitkeep +0 -0
  276. package/resource/doc/tuicallkit/react/api_TUICallKit.md +354 -0
  277. package/resource/doc/tuicallkit/react/how_to_integrated_react_callkit.md +166 -0
  278. package/resource/doc/tuicallkit/react/how_to_run_react_callkit_demo.md +61 -0
  279. package/resource/doc/tuicallkit/vue/.gitkeep +0 -0
  280. package/resource/doc/tuicallkit/vue/api_TUICallKit.md +354 -0
  281. package/resource/doc/tuicallkit/vue/how_to_integrated_vue_callkit.md +187 -0
  282. package/resource/doc/tuicallkit/vue/how_to_run_vue_callkit_demo.md +61 -0
  283. package/server.js +132 -0
  284. package/server.js.map +1 -0
  285. package/streamableHttp.js +74 -0
  286. package/streamableHttp.js.map +1 -0
@@ -0,0 +1,106 @@
1
+ import { TraceLoggingPlugin } from "./plugins";
2
+ export declare enum LogVerbosity {
3
+ NONE = 0,
4
+ ERROR = 1,
5
+ INFO = 2,
6
+ DEBUG = 3
7
+ }
8
+ export declare const enum TraceCategory {
9
+ Plugins = "Plugins",
10
+ Consumer = "Consumer",
11
+ Provider = "Provider",
12
+ Limiter = "Limiter"
13
+ }
14
+ /**
15
+ * 1. background: 日志信息的获取与组装一般较为消耗性能。
16
+ * 2. case: 在正式环境中,一般配置的日志级别较高(≥ ERROR),组装好的日志最终由于级别不足而未输出。
17
+ * 3. optimization: 将耗时的处理过程(日志获取与组装)包装在闭包内,仅在最终确定需要输出(日志级别满足)时才执行,以优化性能。
18
+ */
19
+ export declare type LoggingFunc = (logging: (message?: unknown, ...optionalParams: unknown[]) => void) => void;
20
+ declare const kDefaultOptions: {
21
+ /**
22
+ * 日志级别
23
+ */
24
+ logVerbosity: LogVerbosity;
25
+ /**
26
+ * 跟踪日志开关环境变量名
27
+ */
28
+ tracingEnv: string;
29
+ /**
30
+ * 日志级别环境变量名
31
+ */
32
+ verbosityEnv: string;
33
+ /**
34
+ * 日志前缀
35
+ * 不影响跟踪日志
36
+ */
37
+ prefix: unknown;
38
+ };
39
+ export declare type LoggerOptions = typeof kDefaultOptions;
40
+ export declare type Logger = Required<DefaultLogger>;
41
+ export declare class DefaultLogger {
42
+ private readonly loggers;
43
+ tracingEnabled: boolean;
44
+ private readonly options;
45
+ private transactionId;
46
+ constructor(loggers: TraceLoggingPlugin[], options?: Partial<LoggerOptions>);
47
+ /**
48
+ * 开启追踪日志
49
+ */
50
+ enableTracing(): void;
51
+ /**
52
+ * 关闭追踪日志
53
+ */
54
+ disableTracing(): void;
55
+ /**
56
+ * 跟踪 ID 生成器
57
+ * 每次取值均不重复
58
+ */
59
+ get transaction(): string;
60
+ /**
61
+ * 跟踪日志
62
+ * @param category 类别
63
+ * @param klass 类名
64
+ * @param method 方法名
65
+ * @param transaction 跟踪 ID
66
+ * @param message 日志内容(可选)
67
+ * @param optionalParams 附加参数
68
+ */
69
+ trace(category: TraceCategory, klass: string, method: string, transaction?: unknown, message?: unknown, ...optionalParams: unknown[]): void;
70
+ setVerbosity(verbosity: LogVerbosity): void;
71
+ /**
72
+ * 输出 debug 级别日志
73
+ * @param logging 日志生成函数
74
+ */
75
+ debug(logging: LoggingFunc): void;
76
+ /**
77
+ * 输出 debug 级别日志
78
+ * @param message 日志内容(可选)
79
+ * @param optionalParams 附加参数
80
+ */
81
+ debug(message?: unknown, ...optionalParams: unknown[]): void;
82
+ /**
83
+ * 输出 info 级别日志
84
+ * @param logging 日志生成函数
85
+ */
86
+ info(logging: LoggingFunc): void;
87
+ /**
88
+ * 输出 info 级别日志
89
+ * @param message 日志内容(可选)
90
+ * @param optionalParams 附加参数
91
+ */
92
+ info(message?: unknown, ...optionalParams: unknown[]): void;
93
+ /**
94
+ * 输出 error 级别日志
95
+ * @param logging 日志生成函数
96
+ */
97
+ error(logging: LoggingFunc): void;
98
+ /**
99
+ * 输出 error 级别日志
100
+ * @param message 日志内容(可选)
101
+ * @param optionalParams 附加参数
102
+ */
103
+ error(message?: unknown, ...optionalParams: unknown[]): void;
104
+ private log;
105
+ }
106
+ export {};
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultLogger = exports.LogVerbosity = void 0;
4
+ const utils_1 = require("./utils");
5
+ var LogVerbosity;
6
+ (function (LogVerbosity) {
7
+ LogVerbosity[LogVerbosity["NONE"] = 0] = "NONE";
8
+ LogVerbosity[LogVerbosity["ERROR"] = 1] = "ERROR";
9
+ LogVerbosity[LogVerbosity["INFO"] = 2] = "INFO";
10
+ LogVerbosity[LogVerbosity["DEBUG"] = 3] = "DEBUG";
11
+ })(LogVerbosity = exports.LogVerbosity || (exports.LogVerbosity = {}));
12
+ const isLoggingFunc = (arg) => typeof arg === "function";
13
+ const kDefaultOptions = {
14
+ /**
15
+ * 日志级别
16
+ */
17
+ logVerbosity: LogVerbosity.ERROR,
18
+ /**
19
+ * 跟踪日志开关环境变量名
20
+ */
21
+ tracingEnv: "POLARIS_LOGGING_TRACING",
22
+ /**
23
+ * 日志级别环境变量名
24
+ */
25
+ verbosityEnv: "POLARIS_LOGGING_VERBOSITY",
26
+ /**
27
+ * 日志前缀
28
+ * 不影响跟踪日志
29
+ */
30
+ prefix: `[${utils_1.kModuleName}@${utils_1.kModuleVersion}]`
31
+ };
32
+ class DefaultLogger {
33
+ constructor(loggers, options) {
34
+ this.loggers = loggers;
35
+ this.tracingEnabled = false;
36
+ this.transactionId = 0;
37
+ this.options = Object.assign(Object.assign({}, kDefaultOptions), options);
38
+ /**
39
+ * 配置优先级大于环境变量
40
+ */
41
+ if ((options === null || options === void 0 ? void 0 : options.logVerbosity) === undefined) {
42
+ const verbosity = process.env[this.options.verbosityEnv];
43
+ if (typeof verbosity === "string") {
44
+ const severity = LogVerbosity[verbosity];
45
+ switch (typeof severity) {
46
+ case "string": {
47
+ this.options.logVerbosity = LogVerbosity[severity];
48
+ break;
49
+ }
50
+ case "number": {
51
+ this.options.logVerbosity = severity;
52
+ break;
53
+ }
54
+ default: {
55
+ break;
56
+ }
57
+ }
58
+ }
59
+ }
60
+ if ((0, utils_1.on)(process.env[this.options.tracingEnv])) {
61
+ this.tracingEnabled = true;
62
+ }
63
+ }
64
+ // #region tracing
65
+ /**
66
+ * 开启追踪日志
67
+ */
68
+ enableTracing() {
69
+ this.tracingEnabled = true;
70
+ }
71
+ /**
72
+ * 关闭追踪日志
73
+ */
74
+ disableTracing() {
75
+ this.tracingEnabled = false;
76
+ }
77
+ /**
78
+ * 跟踪 ID 生成器
79
+ * 每次取值均不重复
80
+ */
81
+ get transaction() {
82
+ if (this.tracingEnabled) {
83
+ return (this.transactionId++).toString(); // eslint-disable-line no-plusplus
84
+ }
85
+ return "";
86
+ }
87
+ /**
88
+ * 跟踪日志
89
+ * @param category 类别
90
+ * @param klass 类名
91
+ * @param method 方法名
92
+ * @param transaction 跟踪 ID
93
+ * @param message 日志内容(可选)
94
+ * @param optionalParams 附加参数
95
+ */
96
+ trace(category, klass, method, transaction, message, ...optionalParams) {
97
+ if (this.tracingEnabled) {
98
+ const { loggers } = this;
99
+ const tracer = `Polaris::${category}:${klass}.${method}`;
100
+ loggers.forEach(logger => process.nextTick(logger.trace.bind(logger), tracer, transaction, message, ...optionalParams));
101
+ }
102
+ }
103
+ // #endregion
104
+ // #region log
105
+ setVerbosity(verbosity) {
106
+ this.options.logVerbosity = verbosity;
107
+ }
108
+ debug(message, ...optionalParams) {
109
+ this.log(LogVerbosity.DEBUG, message, optionalParams);
110
+ }
111
+ info(message, ...optionalParams) {
112
+ this.log(LogVerbosity.INFO, message, optionalParams);
113
+ }
114
+ error(message, ...optionalParams) {
115
+ this.log(LogVerbosity.ERROR, message, optionalParams);
116
+ }
117
+ log(severity, message, ...optionalParams) {
118
+ if (severity <= this.options.logVerbosity) {
119
+ const { loggers, options: { prefix } } = this;
120
+ if (optionalParams.length === 1 && isLoggingFunc(message)) {
121
+ loggers.forEach(logger => process.nextTick(message, logger.log.bind(logger, severity, prefix)));
122
+ }
123
+ else {
124
+ loggers.forEach(logger => process.nextTick(logger.log.bind(logger), severity, prefix, message, ...optionalParams));
125
+ }
126
+ }
127
+ }
128
+ }
129
+ exports.DefaultLogger = DefaultLogger;
130
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * 元数据
3
+ */
4
+ export declare type Metadata = Record<string, string>;
5
+ /**
6
+ * 元数据匹配条件,实际值来源
7
+ */
8
+ export declare enum MetadataDynamicValueSource {
9
+ /**
10
+ * 来源于 `Payload` 字段
11
+ */
12
+ Payload = 0,
13
+ /**
14
+ * 来源于请求传入的值
15
+ */
16
+ Parameter = 1,
17
+ /**
18
+ * 来源于配置或环境变量中获取的值
19
+ */
20
+ Variable = 2
21
+ }
22
+ /**
23
+ * 元数据匹配条件
24
+ */
25
+ export declare type MetadataDynamicValue = {
26
+ /**
27
+ * 实际值来源
28
+ */
29
+ source: MetadataDynamicValueSource.Payload | MetadataDynamicValueSource.Variable;
30
+ /**
31
+ * 换取实际值所需信息
32
+ */
33
+ payload: string | RegExp;
34
+ } | {
35
+ /**
36
+ * 实际值来源
37
+ */
38
+ source: MetadataDynamicValueSource.Parameter;
39
+ };
40
+ /**
41
+ * @deprecated 使用 MetadataDynamicValue 替代
42
+ */
43
+ export declare type MetadataDeprecatedValue = string | RegExp;
44
+ /**
45
+ * 元数据匹配条件
46
+ */
47
+ export declare type MetadataCondition = Record<string, MetadataDeprecatedValue | MetadataDynamicValue>;
48
+ /**
49
+ * 判断两个元数据是否匹配条件
50
+ *
51
+ * @param val 元数据
52
+ * @param cond 元数据匹配条件
53
+ * @param variables 变量列表
54
+ * @param parameters 参数列表
55
+ * @returns 是否匹配
56
+ */
57
+ export declare function isMetadataMatch(val: Metadata, cond: MetadataCondition, variables: Record<string, string>, parameters: Record<string, string>): boolean;
58
+ /**
59
+ * 判断两个元数据是否匹配条件
60
+ *
61
+ * @param val 元数据
62
+ * @param cond 元数据匹配条件
63
+ * @param variables 变量列表
64
+ * @returns 如不匹配返回 `false`,否则返回所匹配到的参数列表
65
+ */
66
+ export declare function isMetadataMatch(val: Metadata, cond: MetadataCondition, variables: Record<string, string>): Record<string, string> | false;
67
+ /**
68
+ * 判断元数据是否为空
69
+ * @param metadata 元数据
70
+ */
71
+ export declare function isEmptyMetadata(metadata: Metadata): boolean;
72
+ /**
73
+ * 找到两个元数据相交的部分
74
+ * @param a 元数据 A
75
+ * @param b 元数据 B
76
+ * @returns 交集
77
+ */
78
+ export declare function intersectionMetadata(a: Metadata, b: Metadata): Metadata;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.intersectionMetadata = exports.isEmptyMetadata = exports.isMetadataMatch = exports.MetadataDynamicValueSource = void 0;
4
+ const errors_1 = require("./errors");
5
+ const utils_1 = require("./utils");
6
+ // #region MedataCondition
7
+ /**
8
+ * 元数据匹配条件,实际值来源
9
+ */
10
+ var MetadataDynamicValueSource;
11
+ (function (MetadataDynamicValueSource) {
12
+ /**
13
+ * 来源于 `Payload` 字段
14
+ */
15
+ MetadataDynamicValueSource[MetadataDynamicValueSource["Payload"] = 0] = "Payload";
16
+ /**
17
+ * 来源于请求传入的值
18
+ */
19
+ MetadataDynamicValueSource[MetadataDynamicValueSource["Parameter"] = 1] = "Parameter";
20
+ /**
21
+ * 来源于配置或环境变量中获取的值
22
+ */
23
+ MetadataDynamicValueSource[MetadataDynamicValueSource["Variable"] = 2] = "Variable";
24
+ })(MetadataDynamicValueSource = exports.MetadataDynamicValueSource || (exports.MetadataDynamicValueSource = {}));
25
+ // #endregion
26
+ // #region isMetadataMatch
27
+ const isContainsPairs = (dict, key, value) => Object.keys(dict).some(name => key.test(name) && dict[name] === value);
28
+ function isMetadataMatch(val, cond, variables, parameters) {
29
+ let matches;
30
+ if (parameters === undefined) {
31
+ matches = Object.create(null);
32
+ }
33
+ const result = Object.keys(cond).every((key) => {
34
+ const value = val[key];
35
+ const condition = cond[key];
36
+ switch (typeof condition) {
37
+ case "string": {
38
+ return value === condition;
39
+ }
40
+ case "object": {
41
+ if (condition instanceof RegExp) {
42
+ return condition.test(value);
43
+ }
44
+ switch (condition.source) {
45
+ case MetadataDynamicValueSource.Payload: {
46
+ const { payload } = condition;
47
+ if (typeof payload === "string") {
48
+ return value === payload;
49
+ }
50
+ if (payload instanceof RegExp) {
51
+ return payload.test(value);
52
+ }
53
+ break;
54
+ }
55
+ case MetadataDynamicValueSource.Parameter: {
56
+ if (parameters === undefined) {
57
+ if (value !== undefined) {
58
+ matches[key] = value;
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+ return parameters[key] === value;
64
+ }
65
+ case MetadataDynamicValueSource.Variable: {
66
+ const { payload } = condition;
67
+ if (typeof payload === "string") {
68
+ return variables[payload] === value || process.env[payload] === value;
69
+ }
70
+ if (payload instanceof RegExp) {
71
+ return isContainsPairs(variables, payload, value) || isContainsPairs(process.env, payload, value);
72
+ }
73
+ break;
74
+ }
75
+ default: {
76
+ (0, utils_1.UNREACHABLE)();
77
+ }
78
+ }
79
+ throw new errors_1.ArgumentError(`|payload| fields expected [string|RegExp] type, but reveived ${typeof condition.payload}`);
80
+ }
81
+ default: {
82
+ throw new errors_1.ArgumentError(`MetadataConditionValue expected [string|RegExp|object] type, but reveived ${typeof condition}`);
83
+ }
84
+ }
85
+ });
86
+ if (result && parameters === undefined) {
87
+ return matches;
88
+ }
89
+ return result;
90
+ }
91
+ exports.isMetadataMatch = isMetadataMatch;
92
+ // #endregion
93
+ /**
94
+ * 判断元数据是否为空
95
+ * @param metadata 元数据
96
+ */
97
+ function isEmptyMetadata(metadata) {
98
+ return Object.keys(metadata).length === 0;
99
+ }
100
+ exports.isEmptyMetadata = isEmptyMetadata;
101
+ /**
102
+ * 找到两个元数据相交的部分
103
+ * @param a 元数据 A
104
+ * @param b 元数据 B
105
+ * @returns 交集
106
+ */
107
+ function intersectionMetadata(a, b) {
108
+ const intersection = {};
109
+ Object.keys(a).forEach((key) => {
110
+ const valueB = b[key];
111
+ const valueA = a[key];
112
+ if (valueA === valueB) {
113
+ intersection[key] = valueA;
114
+ }
115
+ });
116
+ return intersection;
117
+ }
118
+ exports.intersectionMetadata = intersectionMetadata;
119
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { ComputedStat, StatusChangeRequest } from "../../consumer";
2
+ import { Instance } from "../../instance";
3
+ import { CircuitBreakerPlugin, PluginType } from "../../plugins";
4
+ declare const kDefaultOptions: {
5
+ /**
6
+ * 连续失败统计周期
7
+ */
8
+ continuousWindow: number;
9
+ /**
10
+ * 连续失败次数阈值
11
+ */
12
+ continuousErrors: number;
13
+ /**
14
+ * 触发熔断的最低请求阈值
15
+ */
16
+ fuseThreshold: number;
17
+ /**
18
+ * 熔断错误率阈值
19
+ */
20
+ fuseRate: number;
21
+ /**
22
+ * 半开恢复 `HalfClose` ---> `Normal` 所需的最小成功请求数
23
+ * 值不能大于探活任务的最大探测次数
24
+ */
25
+ halfClose2Normal: number;
26
+ /**
27
+ * 半开熔断 `HalfClose` ---> `Fused` 所需的最小失败请求数
28
+ * 值不能大于探活任务的最大探测次数
29
+ */
30
+ halfClose2Fused: number;
31
+ };
32
+ export declare type PolarisCircuitBreakerOptions = typeof kDefaultOptions;
33
+ export declare class PolarisCircuitBreaker implements CircuitBreakerPlugin {
34
+ readonly type = PluginType.CircuitBreaker;
35
+ readonly name: string;
36
+ private readonly options;
37
+ private disposed;
38
+ private readonly periodStat;
39
+ private realtimeStat;
40
+ private timer;
41
+ constructor(options?: Partial<PolarisCircuitBreakerOptions>);
42
+ dispose(): void;
43
+ get isDisposed(): boolean;
44
+ period(namespace: string, service: string, instances: Instance[], stat: ComputedStat): Map<Instance, StatusChangeRequest>;
45
+ realtime(namespace: string, service: string, instance: Instance, success: boolean): StatusChangeRequest | undefined;
46
+ }
47
+ export {};
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PolarisCircuitBreaker = void 0;
4
+ const plugins_1 = require("../../plugins");
5
+ const utils_1 = require("../../utils");
6
+ const kDefaultOptions = {
7
+ /**
8
+ * 连续失败统计周期
9
+ */
10
+ continuousWindow: 1 * utils_1.kMinutes,
11
+ /**
12
+ * 连续失败次数阈值
13
+ */
14
+ continuousErrors: 10,
15
+ /**
16
+ * 触发熔断的最低请求阈值
17
+ */
18
+ fuseThreshold: 10,
19
+ /**
20
+ * 熔断错误率阈值
21
+ */
22
+ fuseRate: 0.5,
23
+ /**
24
+ * 半开恢复 `HalfClose` ---> `Normal` 所需的最小成功请求数
25
+ * 值不能大于探活任务的最大探测次数
26
+ */
27
+ halfClose2Normal: 2,
28
+ /**
29
+ * 半开熔断 `HalfClose` ---> `Fused` 所需的最小失败请求数
30
+ * 值不能大于探活任务的最大探测次数
31
+ */
32
+ halfClose2Fused: 2
33
+ };
34
+ class PolarisCircuitBreaker {
35
+ // #endregion
36
+ constructor(options) {
37
+ this.type = plugins_1.PluginType.CircuitBreaker;
38
+ this.name = "PolarisCircuitBreaker";
39
+ this.disposed = false;
40
+ this.periodStat = new WeakMap();
41
+ // #region realtime
42
+ this.realtimeStat = new WeakMap();
43
+ this.timer = null;
44
+ this.options = Object.assign(Object.assign({}, kDefaultOptions), options);
45
+ }
46
+ // #region dispose
47
+ dispose() {
48
+ if (this.timer) {
49
+ clearTimeout(this.timer);
50
+ this.timer = null;
51
+ }
52
+ this.disposed = true;
53
+ }
54
+ get isDisposed() {
55
+ return this.disposed;
56
+ }
57
+ // #endregion
58
+ period(namespace, service, instances, stat) {
59
+ const changeList = new Map();
60
+ stat.summaryStat.forEach((computed, instance) => {
61
+ let errCalls = 0;
62
+ let succCalls = 0;
63
+ computed.forEach(({ count }, { success }) => {
64
+ if (success) {
65
+ succCalls += count;
66
+ }
67
+ else {
68
+ errCalls += count;
69
+ }
70
+ });
71
+ switch (instance.status) {
72
+ case 0 /* Normal */: {
73
+ const rspCalls = errCalls + succCalls;
74
+ if (rspCalls > this.options.fuseThreshold) {
75
+ /*
76
+ * 为防止用户漏报了调用结果导致计算的成功率为 0,
77
+ * 使用 `1 - errRate(k)` 作为成功率。
78
+ */
79
+ const succRate = 1 - (errCalls / rspCalls);
80
+ if (succRate <= this.options.fuseRate) {
81
+ /** `Normal` ---> `Fused` */
82
+ changeList.set(instance, {
83
+ status: 3 /* Fused */,
84
+ reason: `[${this.name}] [period], succRate(${succRate}) <= fuseRate(${this.options.fuseRate})`
85
+ });
86
+ }
87
+ }
88
+ break;
89
+ }
90
+ case 2 /* HalfClose */: {
91
+ let callStat = this.periodStat.get(instance);
92
+ if (!callStat) {
93
+ callStat = {
94
+ succCalls,
95
+ errCalls
96
+ };
97
+ this.periodStat.set(instance, callStat);
98
+ }
99
+ else {
100
+ callStat.succCalls += succCalls;
101
+ callStat.errCalls += errCalls;
102
+ }
103
+ if (callStat.succCalls >= this.options.halfClose2Normal) {
104
+ /** `HalfClose` ---> `Normal` */
105
+ changeList.set(instance, {
106
+ status: 0 /* Normal */,
107
+ reason: `[${this.name}] [period], succCalls(${callStat.succCalls}) >= halfClose2Normal(${this.options.halfClose2Normal})`
108
+ });
109
+ this.periodStat.delete(instance);
110
+ }
111
+ else if (callStat.errCalls >= this.options.halfClose2Fused) {
112
+ /** `HalfClose` ---> `Fused` */
113
+ changeList.set(instance, {
114
+ status: 3 /* Fused */,
115
+ reason: `[${this.name}] [period], errCalls(${callStat.errCalls}) >= halfClose2Fused(${this.options.halfClose2Fused})`
116
+ });
117
+ this.periodStat.delete(instance);
118
+ }
119
+ break;
120
+ }
121
+ case 1 /* HalfOpen */: {
122
+ break;
123
+ }
124
+ case 3 /* Fused */: // [[fallthrough]]
125
+ default: {
126
+ (0, utils_1.UNREACHABLE)();
127
+ }
128
+ }
129
+ });
130
+ return changeList;
131
+ }
132
+ realtime(namespace, service, instance, success) {
133
+ /**
134
+ * 为了性能考虑所有实时熔断流程采用同一定时器驱动
135
+ * tradeoff: 第一个统计周期中的统计数据可能是不精确的。
136
+ */
137
+ if (!this.timer) {
138
+ this.timer = setTimeout(() => {
139
+ this.realtimeStat = new WeakMap();
140
+ this.timer = null;
141
+ }, this.options.continuousWindow).unref();
142
+ }
143
+ let count = this.realtimeStat.get(instance);
144
+ if (success) {
145
+ if (count !== undefined) {
146
+ this.realtimeStat.delete(instance);
147
+ }
148
+ return;
149
+ }
150
+ count = (count || 0) + 1;
151
+ if (count >= this.options.continuousErrors) {
152
+ this.realtimeStat.delete(instance);
153
+ return {
154
+ status: 3 /* Fused */,
155
+ reason: `[${this.name}] [realtime], found ${count} times failed >= continuousErrors(${this.options.continuousErrors})`
156
+ };
157
+ }
158
+ this.realtimeStat.set(instance, count);
159
+ }
160
+ }
161
+ exports.PolarisCircuitBreaker = PolarisCircuitBreaker;
162
+ //# sourceMappingURL=polaris.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polaris.js","sourceRoot":"","sources":["../../../src/plugins/breaker/polaris.ts"],"names":[],"mappings":";;;AAEA,2CAAiE;AACjE,uCAAoD;AAEpD,MAAM,eAAe,GAAG;IACtB;;OAEG;IACH,gBAAgB,EAAE,CAAC,GAAG,gBAAQ;IAE9B;;OAEG;IACH,gBAAgB,EAAE,EAAE;IAEpB;;OAEG;IACH,aAAa,EAAE,EAAE;IAEjB;;OAEG;IACH,QAAQ,EAAE,GAAG;IAEb;;;OAGG;IACH,gBAAgB,EAAE,CAAC;IAEnB;;;OAGG;IACH,eAAe,EAAE,CAAC;CACnB,CAAC;AAIF,MAAa,qBAAqB;IAahC,aAAa;IAEb,YAAY,OAA+C;QAdlD,SAAI,GAAG,oBAAU,CAAC,cAAc,CAAC;QACjC,SAAI,GAAW,uBAAuB,CAAC;QAExC,aAAQ,GAAG,KAAK,CAAC;QACR,eAAU,GAGtB,IAAI,OAAO,EAAE,CAAC;QAEnB,mBAAmB;QACX,iBAAY,GAA8B,IAAI,OAAO,EAAE,CAAC;QACxD,UAAK,GAA0B,IAAI,CAAC;QAI1C,IAAI,CAAC,OAAO,mCACP,eAAe,GACf,OAAO,CACX,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,OAAO;QACL,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,aAAa;IAEb,MAAM,CACJ,SAAiB,EAAE,OAAe,EAAE,SAAqB,EAAE,IAAkB;QAE7E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiC,CAAC;QAE5D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC1C,IAAI,OAAO,EAAE;oBACX,SAAS,IAAI,KAAK,CAAC;iBACpB;qBAAM;oBACL,QAAQ,IAAI,KAAK,CAAC;iBACnB;YACH,CAAC,CAAC,CAAC;YACH,QAAQ,QAAQ,CAAC,MAAM,EAAE;gBACvB,mBAA0B,CAAC,CAAC;oBAC1B,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;oBACtC,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;wBACzC;;;2BAGG;wBACH,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;wBAC3C,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;4BACrC,4BAA4B;4BAC5B,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;gCACvB,MAAM,eAAsB;gCAC5B,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,wBAAwB,QAAQ,iBAAiB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;6BAC/F,CAAC,CAAC;yBACJ;qBACF;oBAED,MAAM;iBACP;gBACD,sBAA6B,CAAC,CAAC;oBAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAE7C,IAAI,CAAC,QAAQ,EAAE;wBACb,QAAQ,GAAG;4BACT,SAAS;4BACT,QAAQ;yBACT,CAAC;wBACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;qBACzC;yBAAM;wBACL,QAAQ,CAAC,SAAS,IAAI,SAAS,CAAC;wBAChC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC;qBAC/B;oBAED,IAAI,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;wBACvD,gCAAgC;wBAChC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;4BACvB,MAAM,gBAAuB;4BAC7B,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,yBAAyB,QAAQ,CAAC,SAAS,yBAAyB,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG;yBAC1H,CAAC,CAAC;wBACH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;qBAClC;yBAAM,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;wBAC5D,+BAA+B;wBAC/B,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE;4BACvB,MAAM,eAAsB;4BAC5B,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,wBAAwB,QAAQ,CAAC,QAAQ,wBAAwB,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG;yBACtH,CAAC,CAAC;wBACH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;qBAClC;oBAED,MAAM;iBACP;gBACD,qBAA4B,CAAC,CAAC;oBAC5B,MAAM;iBACP;gBACD,mBAA0B,CAAC,kBAAkB;gBAC7C,OAAO,CAAC,CAAC;oBACP,IAAA,mBAAW,GAAE,CAAC;iBACf;aACF;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,SAAiB,EAAE,OAAe,EAAE,QAAkB,EAAE,OAAgB;QAC/E;;;WAGG;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,EAAoB,CAAC;gBACpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;SAC3C;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE5C,IAAI,OAAO,EAAE;YACX,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACpC;YACD,OAAO;SACR;QAED,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAC1C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO;gBACL,MAAM,eAAsB;gBAC5B,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,uBAAuB,KAAK,qCAAqC,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG;aACvH,CAAC;SACH;QAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;CACF;AApJD,sDAoJC"}