@corva/ui 3.63.0-8 → 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.
@@ -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(e){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;
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rateLimiter.test.d.ts.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: RateLimiterConfig): void;
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,EAAE,iBAAiB,GAAG,IAAI;IAU7C,uDAAuD;IACvD,OAAO,IAAI,IAAI;CAIhB;AAED,eAAO,MAAM,sBAAsB,aAAoB,CAAC"}
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(e){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};
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
@@ -231,7 +231,7 @@ const validateDsn = (dsn) => {
231
231
 
232
232
  const MCP_SERVER_VERSION = '1.3.0';
233
233
 
234
- var version = "3.63.0-8";
234
+ var version = "3.63.0-9";
235
235
 
236
236
  const CORVA_UI_VERSION = version;
237
237
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corva/ui",
3
- "version": "3.63.0-8",
3
+ "version": "3.63.0-9",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "description": "Shared components/utils for Corva ui projects",
6
6
  "keywords": [