@corva/ui 3.63.0-7 → 3.63.0-9
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/cjs-bundle/clients/api/rateLimiter.js +1 -1
- package/clients/api/__tests__/rateLimiter.test.d.ts +2 -0
- package/clients/api/__tests__/rateLimiter.test.d.ts.map +1 -0
- package/clients/api/rateLimiter.d.ts +1 -1
- package/clients/api/rateLimiter.d.ts.map +1 -1
- package/clients/api/rateLimiter.js +1 -1
- package/mcp-server/server.mjs +1 -1
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/classCallCheck"),t=require("@babel/runtime/helpers/createClass"),i=require("@babel/runtime/helpers/defineProperty"),r=require("./constants.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=u(e),n=u(t),a=u(i);function s(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function l(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?s(Object(i),!0).forEach((function(t){a.default(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):s(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var c=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o.default(this,e),a.default(this,"buckets",new Map),a.default(this,"config",void 0),this.config=l(l(l({},r.DEFAULT_CONFIG),t),{},{defaults:l(l({},r.DEFAULT_CONFIG.defaults),t.defaults),overrides:l(l({},r.DEFAULT_CONFIG.overrides),t.overrides)})}return n.default(e,[{key:"log",value:function(){if(this.config.debug){for(var e,t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];(e=console).log.apply(e,["[RateLimiter]"].concat(i))}}},{key:"getOrCreateBucket",value:function(e,t,i){var r=this.buckets.get(e);if(!r){var u=l(l({},this.config.defaults),this.config.overrides[t]),o=u.maxTokens,n=u.refillRate,a=u.queueTimeout,s=u.maxQueueSize,c={appKey:t,appInstanceId:i,tokens:o,maxTokens:o,refillRate:n,queueTimeout:a,lastRefill:Date.now(),lastActivity:Date.now(),queue:[],refillTimer:null,maxQueueSize:s};return this.buckets.set(e,c),this.startRefillTimer(e,c),this.log("Bucket created",c),c}return r}},{key:"refill",value:function(e){var t=Date.now(),i=(t-e.lastRefill)/1e3*e.refillRate;i>0&&(e.tokens=Math.min(e.maxTokens,e.tokens+i),e.lastRefill=t)}},{key:"startRefillTimer",value:function(e,t){var i=this;t.refillTimer=setInterval((function(){i.refill(t),i.drainQueue(t),i.cleanupIdleIfNeeded(e,t)}),200)}},{key:"drainQueue",value:function(e){for(;e.queue.length>0&&e.tokens>=1;){e.tokens-=1,e.lastActivity=Date.now();var t=e.queue.shift();clearTimeout(null==t?void 0:t.timeoutId),null==t||t.resolve()}}},{key:"cleanupIdleIfNeeded",value:function(e,t){t.queue.length>0||Date.now()-t.lastActivity>=r.IDLE_CLEANUP_AFTER_MS&&(this.destroyBucket(t),this.buckets.delete(e))}},{key:"destroyBucket",value:function(e){e.refillTimer&&clearInterval(e.refillTimer),e.queue.forEach((function(e){clearTimeout(e.timeoutId),e.reject(new Error("[RateLimiter] Destroyed while request was queued"))})),e.queue=[]}},{key:"acquire",value:function(e,t){var i=this;if(!this.config.enabled)return Promise.resolve();var r="".concat(e,"|").concat(t),u=this.getOrCreateBucket(r,e,String(t));if(this.log("Request. Bucket:",r,"Tokens:",u.tokens),this.refill(u),u.tokens>=1)return u.tokens-=1,u.lastActivity=Date.now(),Promise.resolve();var o=u.queue.length+1,n={id:r,appKey:u.appKey,appInstanceId:u.appInstanceId,maxTokens:u.maxTokens,queueLength:o,queueTimeout:u.queueTimeout,refillRate:u.refillRate};return this.log("Bucket limit reached",n),function(e){var t=window[Symbol.for("corvaAPI.rateLimiterReport")];t?t({message:"[RateLimiter] Rate limit reached",bucket:e}):console.warn("[RateLimiter] Reporter not found")}(n),void 0!==u.maxQueueSize&&o>u.maxQueueSize?(this.log("Queue size limit exceeded",n),Promise.reject(new Error('[RateLimiter] Queue size limit exceeded for "'.concat(r,'". Limit: ').concat(u.maxQueueSize)))):new Promise((function(e,t){var o={};o.resolve=e,o.reject=t,o.timeoutId=setTimeout((function(){var e=u.queue.indexOf(o);-1!==e&&u.queue.splice(e,1),i.log("Queue timeout exceeded",n),t(new Error('[RateLimiter] Queue timeout exceeded for "'.concat(r,'" after ').concat(u.queueTimeout,"ms")))}),u.queueTimeout),u.queue.push(o)}))}},{key:"updateConfig",value:function(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/classCallCheck"),t=require("@babel/runtime/helpers/createClass"),i=require("@babel/runtime/helpers/defineProperty"),r=require("./constants.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=u(e),n=u(t),a=u(i);function s(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function l(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?s(Object(i),!0).forEach((function(t){a.default(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):s(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}var c=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o.default(this,e),a.default(this,"buckets",new Map),a.default(this,"config",void 0),this.config=l(l(l({},r.DEFAULT_CONFIG),t),{},{defaults:l(l({},r.DEFAULT_CONFIG.defaults),t.defaults),overrides:l(l({},r.DEFAULT_CONFIG.overrides),t.overrides)})}return n.default(e,[{key:"log",value:function(){if(this.config.debug){for(var e,t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];(e=console).log.apply(e,["[RateLimiter]"].concat(i))}}},{key:"getOrCreateBucket",value:function(e,t,i){var r=this.buckets.get(e);if(!r){var u=l(l({},this.config.defaults),this.config.overrides[t]),o=u.maxTokens,n=u.refillRate,a=u.queueTimeout,s=u.maxQueueSize,c={appKey:t,appInstanceId:i,tokens:o,maxTokens:o,refillRate:n,queueTimeout:a,lastRefill:Date.now(),lastActivity:Date.now(),queue:[],refillTimer:null,maxQueueSize:s};return this.buckets.set(e,c),this.startRefillTimer(e,c),this.log("Bucket created",c),c}return r}},{key:"refill",value:function(e){var t=Date.now(),i=(t-e.lastRefill)/1e3*e.refillRate;i>0&&(e.tokens=Math.min(e.maxTokens,e.tokens+i),e.lastRefill=t)}},{key:"startRefillTimer",value:function(e,t){var i=this;t.refillTimer=setInterval((function(){i.refill(t),i.drainQueue(t),i.cleanupIdleIfNeeded(e,t)}),200)}},{key:"drainQueue",value:function(e){for(;e.queue.length>0&&e.tokens>=1;){e.tokens-=1,e.lastActivity=Date.now();var t=e.queue.shift();clearTimeout(null==t?void 0:t.timeoutId),null==t||t.resolve()}}},{key:"cleanupIdleIfNeeded",value:function(e,t){t.queue.length>0||Date.now()-t.lastActivity>=r.IDLE_CLEANUP_AFTER_MS&&(this.destroyBucket(t),this.buckets.delete(e))}},{key:"destroyBucket",value:function(e){e.refillTimer&&clearInterval(e.refillTimer),e.queue.forEach((function(e){clearTimeout(e.timeoutId),e.reject(new Error("[RateLimiter] Destroyed while request was queued"))})),e.queue=[]}},{key:"acquire",value:function(e,t){var i=this;if(!this.config.enabled)return Promise.resolve();var r="".concat(e,"|").concat(t),u=this.getOrCreateBucket(r,e,String(t));if(this.log("Request. Bucket:",r,"Tokens:",u.tokens),this.refill(u),u.tokens>=1)return u.tokens-=1,u.lastActivity=Date.now(),Promise.resolve();var o=u.queue.length+1,n={id:r,appKey:u.appKey,appInstanceId:u.appInstanceId,maxTokens:u.maxTokens,queueLength:o,queueTimeout:u.queueTimeout,refillRate:u.refillRate};return this.log("Bucket limit reached",n),function(e){var t=window[Symbol.for("corvaAPI.rateLimiterReport")];t?t({message:"[RateLimiter] Rate limit reached",bucket:e}):console.warn("[RateLimiter] Reporter not found")}(n),void 0!==u.maxQueueSize&&o>u.maxQueueSize?(this.log("Queue size limit exceeded",n),Promise.reject(new Error('[RateLimiter] Queue size limit exceeded for "'.concat(r,'". Limit: ').concat(u.maxQueueSize)))):new Promise((function(e,t){var o={};o.resolve=e,o.reject=t,o.timeoutId=setTimeout((function(){var e=u.queue.indexOf(o);-1!==e&&u.queue.splice(e,1),i.log("Queue timeout exceeded",n),t(new Error('[RateLimiter] Queue timeout exceeded for "'.concat(r,'" after ').concat(u.queueTimeout,"ms")))}),u.queueTimeout),u.queue.push(o)}))}},{key:"updateConfig",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=l(l(l({},this.config),e),{},{defaults:l(l({},this.config.defaults),e.defaults),overrides:l(l({},this.config.overrides),e.overrides)}),this.log("Config updated",e)}},{key:"destroy",value:function(){this.buckets.forEach(this.destroyBucket),this.buckets.clear()}}]),e}(),f=new c;exports.RateLimiter=c,exports.apiRequestsRateLimiter=f;
|
|
2
2
|
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.test.d.ts","sourceRoot":"","sources":["../../../../src/clients/api/__tests__/rateLimiter.test.ts"],"names":[],"mappings":""}
|
|
@@ -17,7 +17,7 @@ export declare class RateLimiter {
|
|
|
17
17
|
* Rejects if the queue timeout elapses before a token is available.
|
|
18
18
|
*/
|
|
19
19
|
acquire(appKey: string, appInstanceId: string | number): Promise<void>;
|
|
20
|
-
updateConfig(config
|
|
20
|
+
updateConfig(config?: RateLimiterConfig): void;
|
|
21
21
|
/** Clear all timers and reject all queued requests. */
|
|
22
22
|
destroy(): void;
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../src/clients/api/rateLimiter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EAIN,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAgBrB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,OAAO,CAAC,MAAM,CAA8B;gBAEhC,MAAM,GAAE,iBAAsB;IAS1C,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOtB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;IAkClF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW5B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUxD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWhC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY3D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAanC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqEtE,YAAY,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../src/clients/api/rateLimiter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,MAAM,EAIN,iBAAiB,EAElB,MAAM,aAAa,CAAC;AAgBrB,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,OAAO,CAAC,MAAM,CAA8B;gBAEhC,MAAM,GAAE,iBAAsB;IAS1C,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE;IAOtB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;IAkClF,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAW5B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAUxD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAWhC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY3D,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAanC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqEtE,YAAY,CAAC,MAAM,GAAE,iBAAsB,GAAG,IAAI;IAUlD,uDAAuD;IACvD,OAAO,IAAI,IAAI;CAIhB;AAED,eAAO,MAAM,sBAAsB,aAAoB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"@babel/runtime/helpers/classCallCheck";import t from"@babel/runtime/helpers/createClass";import i from"@babel/runtime/helpers/defineProperty";import{IDLE_CLEANUP_AFTER_MS as r,DEFAULT_CONFIG as o}from"./constants.js";function u(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function n(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var a=function(){function u(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,u),i(this,"buckets",new Map),i(this,"config",void 0),this.config=n(n(n({},o),t),{},{defaults:n(n({},o.defaults),t.defaults),overrides:n(n({},o.overrides),t.overrides)})}return t(u,[{key:"log",value:function(){if(this.config.debug){for(var e,t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];(e=console).log.apply(e,["[RateLimiter]"].concat(i))}}},{key:"getOrCreateBucket",value:function(e,t,i){var r=this.buckets.get(e);if(!r){var o=n(n({},this.config.defaults),this.config.overrides[t]),u=o.maxTokens,a=o.refillRate,s=o.queueTimeout,l=o.maxQueueSize,c={appKey:t,appInstanceId:i,tokens:u,maxTokens:u,refillRate:a,queueTimeout:s,lastRefill:Date.now(),lastActivity:Date.now(),queue:[],refillTimer:null,maxQueueSize:l};return this.buckets.set(e,c),this.startRefillTimer(e,c),this.log("Bucket created",c),c}return r}},{key:"refill",value:function(e){var t=Date.now(),i=(t-e.lastRefill)/1e3*e.refillRate;i>0&&(e.tokens=Math.min(e.maxTokens,e.tokens+i),e.lastRefill=t)}},{key:"startRefillTimer",value:function(e,t){var i=this;t.refillTimer=setInterval((function(){i.refill(t),i.drainQueue(t),i.cleanupIdleIfNeeded(e,t)}),200)}},{key:"drainQueue",value:function(e){for(;e.queue.length>0&&e.tokens>=1;){e.tokens-=1,e.lastActivity=Date.now();var t=e.queue.shift();clearTimeout(null==t?void 0:t.timeoutId),null==t||t.resolve()}}},{key:"cleanupIdleIfNeeded",value:function(e,t){t.queue.length>0||Date.now()-t.lastActivity>=r&&(this.destroyBucket(t),this.buckets.delete(e))}},{key:"destroyBucket",value:function(e){e.refillTimer&&clearInterval(e.refillTimer),e.queue.forEach((function(e){clearTimeout(e.timeoutId),e.reject(new Error("[RateLimiter] Destroyed while request was queued"))})),e.queue=[]}},{key:"acquire",value:function(e,t){var i=this;if(!this.config.enabled)return Promise.resolve();var r="".concat(e,"|").concat(t),o=this.getOrCreateBucket(r,e,String(t));if(this.log("Request. Bucket:",r,"Tokens:",o.tokens),this.refill(o),o.tokens>=1)return o.tokens-=1,o.lastActivity=Date.now(),Promise.resolve();var u=o.queue.length+1,n={id:r,appKey:o.appKey,appInstanceId:o.appInstanceId,maxTokens:o.maxTokens,queueLength:u,queueTimeout:o.queueTimeout,refillRate:o.refillRate};return this.log("Bucket limit reached",n),function(e){var t=window[Symbol.for("corvaAPI.rateLimiterReport")];t?t({message:"[RateLimiter] Rate limit reached",bucket:e}):console.warn("[RateLimiter] Reporter not found")}(n),void 0!==o.maxQueueSize&&u>o.maxQueueSize?(this.log("Queue size limit exceeded",n),Promise.reject(new Error('[RateLimiter] Queue size limit exceeded for "'.concat(r,'". Limit: ').concat(o.maxQueueSize)))):new Promise((function(e,t){var u={};u.resolve=e,u.reject=t,u.timeoutId=setTimeout((function(){var e=o.queue.indexOf(u);-1!==e&&o.queue.splice(e,1),i.log("Queue timeout exceeded",n),t(new Error('[RateLimiter] Queue timeout exceeded for "'.concat(r,'" after ').concat(o.queueTimeout,"ms")))}),o.queueTimeout),o.queue.push(u)}))}},{key:"updateConfig",value:function(
|
|
1
|
+
import e from"@babel/runtime/helpers/classCallCheck";import t from"@babel/runtime/helpers/createClass";import i from"@babel/runtime/helpers/defineProperty";import{IDLE_CLEANUP_AFTER_MS as r,DEFAULT_CONFIG as o}from"./constants.js";function u(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function n(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?u(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var a=function(){function u(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e(this,u),i(this,"buckets",new Map),i(this,"config",void 0),this.config=n(n(n({},o),t),{},{defaults:n(n({},o.defaults),t.defaults),overrides:n(n({},o.overrides),t.overrides)})}return t(u,[{key:"log",value:function(){if(this.config.debug){for(var e,t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];(e=console).log.apply(e,["[RateLimiter]"].concat(i))}}},{key:"getOrCreateBucket",value:function(e,t,i){var r=this.buckets.get(e);if(!r){var o=n(n({},this.config.defaults),this.config.overrides[t]),u=o.maxTokens,a=o.refillRate,s=o.queueTimeout,l=o.maxQueueSize,c={appKey:t,appInstanceId:i,tokens:u,maxTokens:u,refillRate:a,queueTimeout:s,lastRefill:Date.now(),lastActivity:Date.now(),queue:[],refillTimer:null,maxQueueSize:l};return this.buckets.set(e,c),this.startRefillTimer(e,c),this.log("Bucket created",c),c}return r}},{key:"refill",value:function(e){var t=Date.now(),i=(t-e.lastRefill)/1e3*e.refillRate;i>0&&(e.tokens=Math.min(e.maxTokens,e.tokens+i),e.lastRefill=t)}},{key:"startRefillTimer",value:function(e,t){var i=this;t.refillTimer=setInterval((function(){i.refill(t),i.drainQueue(t),i.cleanupIdleIfNeeded(e,t)}),200)}},{key:"drainQueue",value:function(e){for(;e.queue.length>0&&e.tokens>=1;){e.tokens-=1,e.lastActivity=Date.now();var t=e.queue.shift();clearTimeout(null==t?void 0:t.timeoutId),null==t||t.resolve()}}},{key:"cleanupIdleIfNeeded",value:function(e,t){t.queue.length>0||Date.now()-t.lastActivity>=r&&(this.destroyBucket(t),this.buckets.delete(e))}},{key:"destroyBucket",value:function(e){e.refillTimer&&clearInterval(e.refillTimer),e.queue.forEach((function(e){clearTimeout(e.timeoutId),e.reject(new Error("[RateLimiter] Destroyed while request was queued"))})),e.queue=[]}},{key:"acquire",value:function(e,t){var i=this;if(!this.config.enabled)return Promise.resolve();var r="".concat(e,"|").concat(t),o=this.getOrCreateBucket(r,e,String(t));if(this.log("Request. Bucket:",r,"Tokens:",o.tokens),this.refill(o),o.tokens>=1)return o.tokens-=1,o.lastActivity=Date.now(),Promise.resolve();var u=o.queue.length+1,n={id:r,appKey:o.appKey,appInstanceId:o.appInstanceId,maxTokens:o.maxTokens,queueLength:u,queueTimeout:o.queueTimeout,refillRate:o.refillRate};return this.log("Bucket limit reached",n),function(e){var t=window[Symbol.for("corvaAPI.rateLimiterReport")];t?t({message:"[RateLimiter] Rate limit reached",bucket:e}):console.warn("[RateLimiter] Reporter not found")}(n),void 0!==o.maxQueueSize&&u>o.maxQueueSize?(this.log("Queue size limit exceeded",n),Promise.reject(new Error('[RateLimiter] Queue size limit exceeded for "'.concat(r,'". Limit: ').concat(o.maxQueueSize)))):new Promise((function(e,t){var u={};u.resolve=e,u.reject=t,u.timeoutId=setTimeout((function(){var e=o.queue.indexOf(u);-1!==e&&o.queue.splice(e,1),i.log("Queue timeout exceeded",n),t(new Error('[RateLimiter] Queue timeout exceeded for "'.concat(r,'" after ').concat(o.queueTimeout,"ms")))}),o.queueTimeout),o.queue.push(u)}))}},{key:"updateConfig",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.config=n(n(n({},this.config),e),{},{defaults:n(n({},this.config.defaults),e.defaults),overrides:n(n({},this.config.overrides),e.overrides)}),this.log("Config updated",e)}},{key:"destroy",value:function(){this.buckets.forEach(this.destroyBucket),this.buckets.clear()}}]),u}(),s=new a;export{a as RateLimiter,s as apiRequestsRateLimiter};
|
|
2
2
|
//# sourceMappingURL=rateLimiter.js.map
|
package/mcp-server/server.mjs
CHANGED