@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.
- package/@tencent/aegis-node-sdk/CHANGELOG.md +8 -0
- package/@tencent/aegis-node-sdk/LICENSE +21 -0
- package/@tencent/aegis-node-sdk/README.md +562 -0
- package/@tencent/aegis-node-sdk/lib/aegis.min.js +1 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/config.d.ts +14 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/global.d.ts +1 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/index.d.ts +9 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/constant/report-ignore.d.ts +2 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/core.d.ts +85 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/afterRequestHooks.d.ts +3 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/beforeRequestHooks.d.ts +9 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/hooks/modifyRequestHooks.d.ts +3 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/index.d.ts +9 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/config.d.ts +62 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/env.d.ts +11 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/index.d.ts +4 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/log.d.ts +130 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/interface/send.d.ts +34 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/format.d.ts +2 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/index.d.ts +18 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/length-limit.d.ts +8 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/pv.d.ts +8 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/remove-payload.d.ts +2 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/repeat-limit.d.ts +4 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/report.d.ts +10 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/sample.d.ts +3 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/throttle.d.ts +3 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/index.d.ts +34 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/jwt.d.ts +12 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/ot-js.d.ts +14 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/trace/uuid.d.ts +2 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/whitelist.d.ts +12 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/pipes/write-before.d.ts +3 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/plugin.d.ts +33 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/polyfill.d.ts +0 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/util/destroy.d.ts +2 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/util/event-emitter.d.ts +18 -0
- package/@tencent/aegis-node-sdk/lib/packages/core/src/util/index.d.ts +60 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/index.d.ts +15 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/interface/selector.d.ts +5 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/pipes/batch-report-pipe.d.ts +6 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/protocol/protocol_base.d.ts +18 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/protocol/protocol_http.d.ts +12 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/ip_selector.d.ts +10 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/polaris_selector.d.ts +20 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/selector/selector_base.d.ts +27 -0
- package/@tencent/aegis-node-sdk/lib/packages/node-sdk/src/util/eval_require.d.ts +2 -0
- package/@tencent/aegis-node-sdk/package.json +19 -0
- package/@tencent/polaris/README.md +407 -0
- package/@tencent/polaris/dist/consumer/health.d.ts +126 -0
- package/@tencent/polaris/dist/consumer/health.js +283 -0
- package/@tencent/polaris/dist/consumer/health.js.map +1 -0
- package/@tencent/polaris/dist/consumer/index.d.ts +120 -0
- package/@tencent/polaris/dist/consumer/index.js +348 -0
- package/@tencent/polaris/dist/consumer/index.js.map +1 -0
- package/@tencent/polaris/dist/consumer/monitor.d.ts +145 -0
- package/@tencent/polaris/dist/consumer/monitor.js +343 -0
- package/@tencent/polaris/dist/consumer/monitor.js.map +1 -0
- package/@tencent/polaris/dist/consumer/selector.d.ts +73 -0
- package/@tencent/polaris/dist/consumer/selector.js +316 -0
- package/@tencent/polaris/dist/consumer/selector.js.map +1 -0
- package/@tencent/polaris/dist/errors.d.ts +373 -0
- package/@tencent/polaris/dist/errors.js +154 -0
- package/@tencent/polaris/dist/errors.js.map +1 -0
- package/@tencent/polaris/dist/global.d.ts +16 -0
- package/@tencent/polaris/dist/global.js +18 -0
- package/@tencent/polaris/dist/global.js.map +1 -0
- package/@tencent/polaris/dist/index.d.ts +62 -0
- package/@tencent/polaris/dist/index.js +145 -0
- package/@tencent/polaris/dist/index.js.map +1 -0
- package/@tencent/polaris/dist/instance.d.ts +109 -0
- package/@tencent/polaris/dist/instance.js +38 -0
- package/@tencent/polaris/dist/instance.js.map +1 -0
- package/@tencent/polaris/dist/limiter/bucket.d.ts +51 -0
- package/@tencent/polaris/dist/limiter/bucket.js +152 -0
- package/@tencent/polaris/dist/limiter/bucket.js.map +1 -0
- package/@tencent/polaris/dist/limiter/index.d.ts +73 -0
- package/@tencent/polaris/dist/limiter/index.js +149 -0
- package/@tencent/polaris/dist/limiter/index.js.map +1 -0
- package/@tencent/polaris/dist/limiter/ratelimit.d.ts +27 -0
- package/@tencent/polaris/dist/limiter/ratelimit.js +134 -0
- package/@tencent/polaris/dist/limiter/ratelimit.js.map +1 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/base.d.ts +17 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/base.js +15 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/base.js.map +1 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/global.d.ts +59 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/global.js +397 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/global.js.map +1 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/index.d.ts +3 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/index.js +19 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/index.js.map +1 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/local.d.ts +17 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/local.js +52 -0
- package/@tencent/polaris/dist/limiter/ratelimiter/local.js.map +1 -0
- package/@tencent/polaris/dist/location.d.ts +48 -0
- package/@tencent/polaris/dist/location.js +67 -0
- package/@tencent/polaris/dist/location.js.map +1 -0
- package/@tencent/polaris/dist/logging.d.ts +106 -0
- package/@tencent/polaris/dist/logging.js +130 -0
- package/@tencent/polaris/dist/logging.js.map +1 -0
- package/@tencent/polaris/dist/metadata.d.ts +78 -0
- package/@tencent/polaris/dist/metadata.js +119 -0
- package/@tencent/polaris/dist/metadata.js.map +1 -0
- package/@tencent/polaris/dist/plugins/breaker/polaris.d.ts +47 -0
- package/@tencent/polaris/dist/plugins/breaker/polaris.js +162 -0
- package/@tencent/polaris/dist/plugins/breaker/polaris.js.map +1 -0
- package/@tencent/polaris/dist/plugins/lb/base.d.ts +24 -0
- package/@tencent/polaris/dist/plugins/lb/base.js +32 -0
- package/@tencent/polaris/dist/plugins/lb/base.js.map +1 -0
- package/@tencent/polaris/dist/plugins/lb/edf.d.ts +24 -0
- package/@tencent/polaris/dist/plugins/lb/edf.js +77 -0
- package/@tencent/polaris/dist/plugins/lb/edf.js.map +1 -0
- package/@tencent/polaris/dist/plugins/lb/hashring.d.ts +24 -0
- package/@tencent/polaris/dist/plugins/lb/hashring.js +53 -0
- package/@tencent/polaris/dist/plugins/lb/hashring.js.map +1 -0
- package/@tencent/polaris/dist/plugins/lb/sticky.d.ts +31 -0
- package/@tencent/polaris/dist/plugins/lb/sticky.js +88 -0
- package/@tencent/polaris/dist/plugins/lb/sticky.js.map +1 -0
- package/@tencent/polaris/dist/plugins/lb/swrr.d.ts +25 -0
- package/@tencent/polaris/dist/plugins/lb/swrr.js +72 -0
- package/@tencent/polaris/dist/plugins/lb/swrr.js.map +1 -0
- package/@tencent/polaris/dist/plugins/lb/wr.d.ts +17 -0
- package/@tencent/polaris/dist/plugins/lb/wr.js +50 -0
- package/@tencent/polaris/dist/plugins/lb/wr.js.map +1 -0
- package/@tencent/polaris/dist/plugins/lb/wrr.d.ts +19 -0
- package/@tencent/polaris/dist/plugins/lb/wrr.js +81 -0
- package/@tencent/polaris/dist/plugins/lb/wrr.js.map +1 -0
- package/@tencent/polaris/dist/plugins/logging/console.d.ts +10 -0
- package/@tencent/polaris/dist/plugins/logging/console.js +38 -0
- package/@tencent/polaris/dist/plugins/logging/console.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/local-server/index.d.ts +32 -0
- package/@tencent/polaris/dist/plugins/naming/local-server/index.js +88 -0
- package/@tencent/polaris/dist/plugins/naming/local-server/index.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.d.ts +124 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.js +398 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/base.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.d.ts +27 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.js +287 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/discover.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.d.ts +15 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.js +43 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/index.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.d.ts +28 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.js +249 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/monitor.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.d.ts +19 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.js +222 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/adapter/ratelimit.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.d.ts +26 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.js +99 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/bidi.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.d.ts +60 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.js +259 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/index.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/discover.proto +24 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/monitor.proto +18 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/grpc/pb/ratelimit.proto +12 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.d.ts +39 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.js +115 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/connector/http/index.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/api.proto +24 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/client.proto +22 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/model.proto +28 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/ratelimit.proto +80 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/request.proto +18 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/response.proto +65 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/routing.proto +66 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/service.proto +95 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/discover-pb/types.d.ts +1568 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/index.d.ts +36 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/index.js +51 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/index.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/api.proto +18 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/circuitbreak.proto +67 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/request.proto +82 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/response.proto +11 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdkcache.proto +46 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdkconfiguration.proto +16 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/sdktoken.proto +10 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/monitor-pb/types.d.ts +1102 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.d.ts +29 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.js +77 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/pool.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/api.proto +12 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/ratelimit.proto +28 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/ratelimit-pb/types.d.ts +395 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.d.ts +13 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.js +116 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/rules.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/types.d.ts +67 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/types.js +67 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/types.js.map +1 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.d.ts +99 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.js +217 -0
- package/@tencent/polaris/dist/plugins/naming/polaris-server/utils.js.map +1 -0
- package/@tencent/polaris/dist/plugins/registry/memory.d.ts +10 -0
- package/@tencent/polaris/dist/plugins/registry/memory.js +50 -0
- package/@tencent/polaris/dist/plugins/registry/memory.js.map +1 -0
- package/@tencent/polaris/dist/plugins/router/polaris/nearby.d.ts +51 -0
- package/@tencent/polaris/dist/plugins/router/polaris/nearby.js +145 -0
- package/@tencent/polaris/dist/plugins/router/polaris/nearby.js.map +1 -0
- package/@tencent/polaris/dist/plugins/router/polaris/rule.d.ts +11 -0
- package/@tencent/polaris/dist/plugins/router/polaris/rule.js +174 -0
- package/@tencent/polaris/dist/plugins/router/polaris/rule.js.map +1 -0
- package/@tencent/polaris/dist/plugins/router/trpc/canary.d.ts +25 -0
- package/@tencent/polaris/dist/plugins/router/trpc/canary.js +36 -0
- package/@tencent/polaris/dist/plugins/router/trpc/canary.js.map +1 -0
- package/@tencent/polaris/dist/plugins/router/trpc/env.d.ts +10 -0
- package/@tencent/polaris/dist/plugins/router/trpc/env.js +34 -0
- package/@tencent/polaris/dist/plugins/router/trpc/env.js.map +1 -0
- package/@tencent/polaris/dist/plugins/router/trpc/set.d.ts +56 -0
- package/@tencent/polaris/dist/plugins/router/trpc/set.js +106 -0
- package/@tencent/polaris/dist/plugins/router/trpc/set.js.map +1 -0
- package/@tencent/polaris/dist/plugins/shaping/unirate.d.ts +31 -0
- package/@tencent/polaris/dist/plugins/shaping/unirate.js +124 -0
- package/@tencent/polaris/dist/plugins/shaping/unirate.js.map +1 -0
- package/@tencent/polaris/dist/plugins/shaping/warmup.d.ts +61 -0
- package/@tencent/polaris/dist/plugins/shaping/warmup.js +171 -0
- package/@tencent/polaris/dist/plugins/shaping/warmup.js.map +1 -0
- package/@tencent/polaris/dist/plugins/weight/polaris.d.ts +23 -0
- package/@tencent/polaris/dist/plugins/weight/polaris.js +159 -0
- package/@tencent/polaris/dist/plugins/weight/polaris.js.map +1 -0
- package/@tencent/polaris/dist/plugins.d.ts +619 -0
- package/@tencent/polaris/dist/plugins.js +91 -0
- package/@tencent/polaris/dist/plugins.js.map +1 -0
- package/@tencent/polaris/dist/polaris.d.ts +33 -0
- package/@tencent/polaris/dist/polaris.js +59 -0
- package/@tencent/polaris/dist/polaris.js.map +1 -0
- package/@tencent/polaris/dist/provider/index.d.ts +102 -0
- package/@tencent/polaris/dist/provider/index.js +168 -0
- package/@tencent/polaris/dist/provider/index.js.map +1 -0
- package/@tencent/polaris/dist/registry.d.ts +174 -0
- package/@tencent/polaris/dist/registry.js +660 -0
- package/@tencent/polaris/dist/registry.js.map +1 -0
- package/@tencent/polaris/dist/rules.d.ts +163 -0
- package/@tencent/polaris/dist/rules.js +24 -0
- package/@tencent/polaris/dist/rules.js.map +1 -0
- package/@tencent/polaris/dist/scripts/postinstall.d.ts +1 -0
- package/@tencent/polaris/dist/scripts/postinstall.js +71 -0
- package/@tencent/polaris/dist/scripts/postinstall.js.map +1 -0
- package/@tencent/polaris/dist/service.d.ts +18 -0
- package/@tencent/polaris/dist/service.js +3 -0
- package/@tencent/polaris/dist/service.js.map +1 -0
- package/@tencent/polaris/dist/skeleton.d.ts +87 -0
- package/@tencent/polaris/dist/skeleton.js +282 -0
- package/@tencent/polaris/dist/skeleton.js.map +1 -0
- package/@tencent/polaris/dist/utils.d.ts +36 -0
- package/@tencent/polaris/dist/utils.js +74 -0
- package/@tencent/polaris/dist/utils.js.map +1 -0
- package/@tencent/polaris/dist/weak.d.ts +11 -0
- package/@tencent/polaris/dist/weak.js +44 -0
- package/@tencent/polaris/dist/weak.js.map +1 -0
- package/@tencent/polaris/package.json +114 -0
- package/README.md +61 -0
- package/cursor-setting.png +0 -0
- package/index.js +16 -0
- package/index.js.map +1 -0
- package/mcp-server-prompt.png +0 -0
- package/mcp.json +8 -0
- package/package.json +49 -0
- package/resource/doc/tuicallkit/android/.gitkeep +0 -0
- package/resource/doc/tuicallkit/android/api_TUICallKit.md +610 -0
- package/resource/doc/tuicallkit/android/api_TUICallObserver.md +784 -0
- package/resource/doc/tuicallkit/android/how_to_integrated_android_callkit.md +286 -0
- package/resource/doc/tuicallkit/faq/faq.md +127 -0
- package/resource/doc/tuicallkit/flutter/api_TUICallDefine.md +938 -0
- package/resource/doc/tuicallkit/flutter/api_TUICallKit.md +469 -0
- package/resource/doc/tuicallkit/flutter/api_TUICallObserver.md +897 -0
- package/resource/doc/tuicallkit/flutter/how_to_integrated_flutter_callkit.md +226 -0
- package/resource/doc/tuicallkit/flutter/how_to_run_flutter_callkit_demo.md +101 -0
- package/resource/doc/tuicallkit/iOS/api_TUICallKit.md +398 -0
- package/resource/doc/tuicallkit/iOS/api_TUICallObserver.md +781 -0
- package/resource/doc/tuicallkit/iOS/how_to_integrated_iOS_callkit.md +268 -0
- package/resource/doc/tuicallkit/iOS/how_to_run_iOS_callkit_demo.md +98 -0
- package/resource/doc/tuicallkit/react/.gitkeep +0 -0
- package/resource/doc/tuicallkit/react/api_TUICallKit.md +354 -0
- package/resource/doc/tuicallkit/react/how_to_integrated_react_callkit.md +166 -0
- package/resource/doc/tuicallkit/react/how_to_run_react_callkit_demo.md +61 -0
- package/resource/doc/tuicallkit/vue/.gitkeep +0 -0
- package/resource/doc/tuicallkit/vue/api_TUICallKit.md +354 -0
- package/resource/doc/tuicallkit/vue/how_to_integrated_vue_callkit.md +187 -0
- package/resource/doc/tuicallkit/vue/how_to_run_vue_callkit_demo.md +61 -0
- package/server.js +132 -0
- package/server.js.map +1 -0
- package/streamableHttp.js +74 -0
- 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":"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"}
|