@zeitar/throttle 1.0.0 → 1.1.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 (162) hide show
  1. package/README.md +17 -0
  2. package/dist/CompoundLimiter.d.ts +0 -1
  3. package/dist/CompoundLimiter.js +0 -1
  4. package/dist/CompoundRateLimiterFactory.d.ts +0 -1
  5. package/dist/CompoundRateLimiterFactory.js +0 -1
  6. package/dist/LimiterInterface.d.ts +0 -1
  7. package/dist/LimiterInterface.js +0 -1
  8. package/dist/LimiterStateInterface.d.ts +0 -1
  9. package/dist/LimiterStateInterface.js +0 -1
  10. package/dist/RateLimit.d.ts +0 -1
  11. package/dist/RateLimit.js +0 -1
  12. package/dist/RateLimiterFactory.d.ts +0 -1
  13. package/dist/RateLimiterFactory.js +0 -1
  14. package/dist/RateLimiterFactoryInterface.d.ts +0 -1
  15. package/dist/RateLimiterFactoryInterface.js +0 -1
  16. package/dist/Reservation.d.ts +0 -1
  17. package/dist/Reservation.js +0 -1
  18. package/dist/errors/InvalidIntervalError.d.ts +0 -1
  19. package/dist/errors/InvalidIntervalError.js +0 -1
  20. package/dist/errors/MaxWaitDurationExceededError.d.ts +0 -1
  21. package/dist/errors/MaxWaitDurationExceededError.js +0 -1
  22. package/dist/errors/RateLimitExceededError.d.ts +0 -1
  23. package/dist/errors/RateLimitExceededError.js +0 -1
  24. package/dist/errors/ReserveNotSupportedError.d.ts +0 -1
  25. package/dist/errors/ReserveNotSupportedError.js +0 -1
  26. package/dist/index.d.ts +0 -1
  27. package/dist/index.js +0 -1
  28. package/dist/policy/FixedWindowLimiter.d.ts +0 -1
  29. package/dist/policy/FixedWindowLimiter.js +0 -1
  30. package/dist/policy/NoLimiter.d.ts +0 -1
  31. package/dist/policy/NoLimiter.js +0 -1
  32. package/dist/policy/Rate.d.ts +0 -1
  33. package/dist/policy/Rate.js +0 -1
  34. package/dist/policy/SlidingWindow.d.ts +0 -1
  35. package/dist/policy/SlidingWindow.js +0 -1
  36. package/dist/policy/SlidingWindowLimiter.d.ts +0 -1
  37. package/dist/policy/SlidingWindowLimiter.js +0 -1
  38. package/dist/policy/TokenBucket.d.ts +0 -1
  39. package/dist/policy/TokenBucket.js +0 -1
  40. package/dist/policy/TokenBucketLimiter.d.ts +0 -1
  41. package/dist/policy/TokenBucketLimiter.js +0 -1
  42. package/dist/policy/Window.d.ts +0 -1
  43. package/dist/policy/Window.js +0 -1
  44. package/dist/storage/InMemoryStorage.d.ts +0 -1
  45. package/dist/storage/InMemoryStorage.js +0 -1
  46. package/dist/storage/LockInterface.d.ts +0 -1
  47. package/dist/storage/LockInterface.js +0 -1
  48. package/dist/storage/StorageInterface.d.ts +0 -1
  49. package/dist/storage/StorageInterface.js +0 -1
  50. package/dist/util/TimeUtil.d.ts +0 -1
  51. package/dist/util/TimeUtil.js +0 -1
  52. package/package.json +1 -2
  53. package/dist/CompoundLimiter.d.ts.map +0 -1
  54. package/dist/CompoundLimiter.js.map +0 -1
  55. package/dist/CompoundRateLimiterFactory.d.ts.map +0 -1
  56. package/dist/CompoundRateLimiterFactory.js.map +0 -1
  57. package/dist/LimiterInterface.d.ts.map +0 -1
  58. package/dist/LimiterInterface.js.map +0 -1
  59. package/dist/LimiterStateInterface.d.ts.map +0 -1
  60. package/dist/LimiterStateInterface.js.map +0 -1
  61. package/dist/RateLimit.d.ts.map +0 -1
  62. package/dist/RateLimit.js.map +0 -1
  63. package/dist/RateLimiterFactory.d.ts.map +0 -1
  64. package/dist/RateLimiterFactory.js.map +0 -1
  65. package/dist/RateLimiterFactoryInterface.d.ts.map +0 -1
  66. package/dist/RateLimiterFactoryInterface.js.map +0 -1
  67. package/dist/Reservation.d.ts.map +0 -1
  68. package/dist/Reservation.js.map +0 -1
  69. package/dist/__tests__/CompoundLimiter.test.d.ts +0 -2
  70. package/dist/__tests__/CompoundLimiter.test.d.ts.map +0 -1
  71. package/dist/__tests__/CompoundLimiter.test.js +0 -231
  72. package/dist/__tests__/CompoundLimiter.test.js.map +0 -1
  73. package/dist/__tests__/CompoundRateLimiterFactory.test.d.ts +0 -2
  74. package/dist/__tests__/CompoundRateLimiterFactory.test.d.ts.map +0 -1
  75. package/dist/__tests__/CompoundRateLimiterFactory.test.js +0 -213
  76. package/dist/__tests__/CompoundRateLimiterFactory.test.js.map +0 -1
  77. package/dist/__tests__/RateLimit.test.d.ts +0 -2
  78. package/dist/__tests__/RateLimit.test.d.ts.map +0 -1
  79. package/dist/__tests__/RateLimit.test.js +0 -108
  80. package/dist/__tests__/RateLimit.test.js.map +0 -1
  81. package/dist/__tests__/RateLimiterFactory.test.d.ts +0 -2
  82. package/dist/__tests__/RateLimiterFactory.test.d.ts.map +0 -1
  83. package/dist/__tests__/RateLimiterFactory.test.js +0 -323
  84. package/dist/__tests__/RateLimiterFactory.test.js.map +0 -1
  85. package/dist/__tests__/Reservation.test.d.ts +0 -2
  86. package/dist/__tests__/Reservation.test.d.ts.map +0 -1
  87. package/dist/__tests__/Reservation.test.js +0 -110
  88. package/dist/__tests__/Reservation.test.js.map +0 -1
  89. package/dist/errors/InvalidIntervalError.d.ts.map +0 -1
  90. package/dist/errors/InvalidIntervalError.js.map +0 -1
  91. package/dist/errors/MaxWaitDurationExceededError.d.ts.map +0 -1
  92. package/dist/errors/MaxWaitDurationExceededError.js.map +0 -1
  93. package/dist/errors/RateLimitExceededError.d.ts.map +0 -1
  94. package/dist/errors/RateLimitExceededError.js.map +0 -1
  95. package/dist/errors/ReserveNotSupportedError.d.ts.map +0 -1
  96. package/dist/errors/ReserveNotSupportedError.js.map +0 -1
  97. package/dist/index.d.ts.map +0 -1
  98. package/dist/index.js.map +0 -1
  99. package/dist/policy/FixedWindowLimiter.d.ts.map +0 -1
  100. package/dist/policy/FixedWindowLimiter.js.map +0 -1
  101. package/dist/policy/NoLimiter.d.ts.map +0 -1
  102. package/dist/policy/NoLimiter.js.map +0 -1
  103. package/dist/policy/Rate.d.ts.map +0 -1
  104. package/dist/policy/Rate.js.map +0 -1
  105. package/dist/policy/SlidingWindow.d.ts.map +0 -1
  106. package/dist/policy/SlidingWindow.js.map +0 -1
  107. package/dist/policy/SlidingWindowLimiter.d.ts.map +0 -1
  108. package/dist/policy/SlidingWindowLimiter.js.map +0 -1
  109. package/dist/policy/TokenBucket.d.ts.map +0 -1
  110. package/dist/policy/TokenBucket.js.map +0 -1
  111. package/dist/policy/TokenBucketLimiter.d.ts.map +0 -1
  112. package/dist/policy/TokenBucketLimiter.js.map +0 -1
  113. package/dist/policy/Window.d.ts.map +0 -1
  114. package/dist/policy/Window.js.map +0 -1
  115. package/dist/policy/__tests__/FixedWindowLimiter.test.d.ts +0 -2
  116. package/dist/policy/__tests__/FixedWindowLimiter.test.d.ts.map +0 -1
  117. package/dist/policy/__tests__/FixedWindowLimiter.test.js +0 -180
  118. package/dist/policy/__tests__/FixedWindowLimiter.test.js.map +0 -1
  119. package/dist/policy/__tests__/NoLimiter.test.d.ts +0 -2
  120. package/dist/policy/__tests__/NoLimiter.test.d.ts.map +0 -1
  121. package/dist/policy/__tests__/NoLimiter.test.js +0 -40
  122. package/dist/policy/__tests__/NoLimiter.test.js.map +0 -1
  123. package/dist/policy/__tests__/Rate.test.d.ts +0 -2
  124. package/dist/policy/__tests__/Rate.test.d.ts.map +0 -1
  125. package/dist/policy/__tests__/Rate.test.js +0 -162
  126. package/dist/policy/__tests__/Rate.test.js.map +0 -1
  127. package/dist/policy/__tests__/SlidingWindow.test.d.ts +0 -2
  128. package/dist/policy/__tests__/SlidingWindow.test.d.ts.map +0 -1
  129. package/dist/policy/__tests__/SlidingWindow.test.js +0 -257
  130. package/dist/policy/__tests__/SlidingWindow.test.js.map +0 -1
  131. package/dist/policy/__tests__/SlidingWindowLimiter.test.d.ts +0 -2
  132. package/dist/policy/__tests__/SlidingWindowLimiter.test.d.ts.map +0 -1
  133. package/dist/policy/__tests__/SlidingWindowLimiter.test.js +0 -201
  134. package/dist/policy/__tests__/SlidingWindowLimiter.test.js.map +0 -1
  135. package/dist/policy/__tests__/TokenBucket.test.d.ts +0 -2
  136. package/dist/policy/__tests__/TokenBucket.test.d.ts.map +0 -1
  137. package/dist/policy/__tests__/TokenBucket.test.js +0 -171
  138. package/dist/policy/__tests__/TokenBucket.test.js.map +0 -1
  139. package/dist/policy/__tests__/TokenBucketLimiter.test.d.ts +0 -2
  140. package/dist/policy/__tests__/TokenBucketLimiter.test.d.ts.map +0 -1
  141. package/dist/policy/__tests__/TokenBucketLimiter.test.js +0 -175
  142. package/dist/policy/__tests__/TokenBucketLimiter.test.js.map +0 -1
  143. package/dist/policy/__tests__/Window.test.d.ts +0 -2
  144. package/dist/policy/__tests__/Window.test.d.ts.map +0 -1
  145. package/dist/policy/__tests__/Window.test.js +0 -193
  146. package/dist/policy/__tests__/Window.test.js.map +0 -1
  147. package/dist/storage/InMemoryStorage.d.ts.map +0 -1
  148. package/dist/storage/InMemoryStorage.js.map +0 -1
  149. package/dist/storage/LockInterface.d.ts.map +0 -1
  150. package/dist/storage/LockInterface.js.map +0 -1
  151. package/dist/storage/StorageInterface.d.ts.map +0 -1
  152. package/dist/storage/StorageInterface.js.map +0 -1
  153. package/dist/storage/__tests__/InMemoryStorage.test.d.ts +0 -2
  154. package/dist/storage/__tests__/InMemoryStorage.test.d.ts.map +0 -1
  155. package/dist/storage/__tests__/InMemoryStorage.test.js +0 -154
  156. package/dist/storage/__tests__/InMemoryStorage.test.js.map +0 -1
  157. package/dist/util/TimeUtil.d.ts.map +0 -1
  158. package/dist/util/TimeUtil.js.map +0 -1
  159. package/dist/util/__tests__/TimeUtil.test.d.ts +0 -2
  160. package/dist/util/__tests__/TimeUtil.test.d.ts.map +0 -1
  161. package/dist/util/__tests__/TimeUtil.test.js +0 -132
  162. package/dist/util/__tests__/TimeUtil.test.js.map +0 -1
@@ -1,257 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const SlidingWindow_1 = require("../SlidingWindow");
4
- describe('SlidingWindow', () => {
5
- describe('constructor', () => {
6
- it('should create a sliding window with default values', () => {
7
- const window = new SlidingWindow_1.SlidingWindow('test', 60);
8
- expect(window.getId()).toBe('test');
9
- expect(window.getInterval()).toBe(60);
10
- expect(window.getCurrentWindowHitCount()).toBe(0);
11
- expect(window.getPreviousWindowHitCount()).toBe(0);
12
- });
13
- it('should accept custom hit counts', () => {
14
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 20);
15
- expect(window.getCurrentWindowHitCount()).toBe(10);
16
- expect(window.getPreviousWindowHitCount()).toBe(20);
17
- });
18
- it('should accept custom window end time', () => {
19
- const windowEndAt = 2000;
20
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0, windowEndAt);
21
- expect(window.getWindowEndAt()).toBe(windowEndAt);
22
- });
23
- it('should calculate default window end time', () => {
24
- const beforeCreation = Date.now() / 1000;
25
- const window = new SlidingWindow_1.SlidingWindow('test', 60);
26
- const afterCreation = Date.now() / 1000;
27
- const windowEndAt = window.getWindowEndAt();
28
- expect(windowEndAt).toBeGreaterThanOrEqual(beforeCreation + 60);
29
- expect(windowEndAt).toBeLessThanOrEqual(afterCreation + 60);
30
- });
31
- });
32
- describe('add', () => {
33
- it('should add hits to current window', () => {
34
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0);
35
- window.add(5);
36
- expect(window.getCurrentWindowHitCount()).toBe(5);
37
- window.add(3);
38
- expect(window.getCurrentWindowHitCount()).toBe(8);
39
- });
40
- it('should not affect previous window hits', () => {
41
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 20);
42
- window.add(5);
43
- expect(window.getCurrentWindowHitCount()).toBe(15);
44
- expect(window.getPreviousWindowHitCount()).toBe(20);
45
- });
46
- });
47
- describe('getHitCount (sliding calculation)', () => {
48
- it('should return current hits when at window start', () => {
49
- const now = 1000;
50
- const windowEndAt = now + 60;
51
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 20, windowEndAt);
52
- // At window start (0% into window)
53
- const count = window.getHitCount(now);
54
- // (20 * (1 - 0)) + 10 = 20 + 10 = 30
55
- expect(count).toBe(30);
56
- });
57
- it('should calculate sliding count at 50% into window', () => {
58
- const now = 1000;
59
- const windowEndAt = now + 60;
60
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 20, windowEndAt);
61
- // At 50% into window
62
- const count = window.getHitCount(now + 30);
63
- // (20 * (1 - 0.5)) + 10 = 10 + 10 = 20
64
- expect(count).toBe(20);
65
- });
66
- it('should return only current hits at window end', () => {
67
- const now = 1000;
68
- const windowEndAt = now + 60;
69
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 20, windowEndAt);
70
- // At window end (100% into window)
71
- const count = window.getHitCount(now + 60);
72
- // Past window end, returns current hits
73
- expect(count).toBe(10);
74
- });
75
- it('should handle zero previous window hits', () => {
76
- const now = 1000;
77
- const windowEndAt = now + 60;
78
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 0, windowEndAt);
79
- const count = window.getHitCount(now + 30);
80
- // (0 * 0.5) + 10 = 10
81
- expect(count).toBe(10);
82
- });
83
- it('should handle zero current window hits', () => {
84
- const now = 1000;
85
- const windowEndAt = now + 60;
86
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 20, windowEndAt);
87
- const count = window.getHitCount(now + 30);
88
- // (20 * 0.5) + 0 = 10
89
- expect(count).toBe(10);
90
- });
91
- it('should floor the result', () => {
92
- const now = 1000;
93
- const windowEndAt = now + 60;
94
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 1, 10, windowEndAt);
95
- // At 25% into window
96
- const count = window.getHitCount(now + 15);
97
- // (10 * 0.75) + 1 = 7.5 + 1 = 8.5, floored to 8
98
- expect(count).toBe(8);
99
- });
100
- it('should use current time when not provided', () => {
101
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 20);
102
- const count = window.getHitCount();
103
- expect(count).toBeGreaterThanOrEqual(0);
104
- });
105
- });
106
- describe('isExpired', () => {
107
- it('should not be expired during current window', () => {
108
- const now = 1000;
109
- const windowEndAt = now + 60;
110
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0, windowEndAt);
111
- expect(window.isExpired(now + 30)).toBe(false);
112
- expect(window.isExpired(now + 59)).toBe(false);
113
- });
114
- it('should not be expired right after window end', () => {
115
- const now = 1000;
116
- const windowEndAt = now + 60;
117
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0, windowEndAt);
118
- expect(window.isExpired(now + 60)).toBe(false);
119
- expect(window.isExpired(now + 100)).toBe(false);
120
- });
121
- it('should be expired after window end plus interval', () => {
122
- const now = 1000;
123
- const windowEndAt = now + 60;
124
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0, windowEndAt);
125
- // Expired after windowEndAt + interval
126
- expect(window.isExpired(now + 120)).toBe(true);
127
- expect(window.isExpired(now + 130)).toBe(true);
128
- });
129
- it('should use current time when not provided', () => {
130
- const futureWindowEndAt = (Date.now() / 1000) + 1000;
131
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0, futureWindowEndAt);
132
- expect(window.isExpired()).toBe(false);
133
- });
134
- });
135
- describe('createFromPreviousWindow', () => {
136
- it('should create new window with previous hits preserved', () => {
137
- const now = 1000;
138
- const oldWindow = new SlidingWindow_1.SlidingWindow('test', 60, 50, 30, now + 60);
139
- const newWindow = SlidingWindow_1.SlidingWindow.createFromPreviousWindow('test', 60, oldWindow, now + 70);
140
- expect(newWindow.getCurrentWindowHitCount()).toBe(0);
141
- expect(newWindow.getPreviousWindowHitCount()).toBe(50); // Old current becomes new previous
142
- expect(newWindow.getWindowEndAt()).toBe(now + 70 + 60);
143
- });
144
- it('should set correct window end time', () => {
145
- const now = 2000;
146
- const oldWindow = new SlidingWindow_1.SlidingWindow('test', 120, 25, 10, now);
147
- const newWindow = SlidingWindow_1.SlidingWindow.createFromPreviousWindow('test', 120, oldWindow, now);
148
- expect(newWindow.getWindowEndAt()).toBe(now + 120);
149
- });
150
- });
151
- describe('calculateTimeForTokens', () => {
152
- it('should return 0 when tokens are available', () => {
153
- const now = 1000;
154
- const windowEndAt = now + 60;
155
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 0, windowEndAt);
156
- // maxSize 100, used 10, have 90 available, need 50
157
- expect(window.calculateTimeForTokens(100, 50, now + 30)).toBe(0);
158
- });
159
- it('should calculate wait time when tokens not available', () => {
160
- const now = 1000;
161
- const windowEndAt = now + 60;
162
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 90, 20, windowEndAt);
163
- // At 50% into window: (20 * 0.5) + 90 = 100 used
164
- // maxSize 100, all used, need to wait for window end
165
- const waitTime = window.calculateTimeForTokens(100, 10, now + 30);
166
- expect(waitTime).toBe(30); // 30 seconds until window ends
167
- });
168
- it('should handle exact availability', () => {
169
- const now = 1000;
170
- const windowEndAt = now + 60;
171
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 50, 0, windowEndAt);
172
- // maxSize 100, used 50, have exactly 50 available
173
- expect(window.calculateTimeForTokens(100, 50, now)).toBe(0);
174
- });
175
- it('should use current time when not provided', () => {
176
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 90, 0);
177
- const waitTime = window.calculateTimeForTokens(100, 50);
178
- expect(waitTime).toBeGreaterThanOrEqual(0);
179
- });
180
- });
181
- describe('getExpirationTime', () => {
182
- it('should calculate expiration as window end plus interval', () => {
183
- const windowEndAt = 1000;
184
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0, windowEndAt);
185
- expect(window.getExpirationTime()).toBe(1060); // ceil(1000 + 60)
186
- });
187
- it('should round up expiration time', () => {
188
- const windowEndAt = 1000.5;
189
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 0, 0, windowEndAt);
190
- expect(window.getExpirationTime()).toBe(1061); // ceil(1000.5 + 60)
191
- });
192
- });
193
- describe('toJSON and fromJSON', () => {
194
- it('should serialize to JSON', () => {
195
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 10, 20, 2000);
196
- const json = window.toJSON();
197
- expect(json).toEqual({
198
- id: 'test',
199
- hitCount: 10,
200
- hitCountForLastWindow: 20,
201
- windowEndAt: 2000,
202
- intervalInSeconds: 60,
203
- });
204
- });
205
- it('should deserialize from JSON', () => {
206
- const json = {
207
- id: 'test-window',
208
- hitCount: 15,
209
- hitCountForLastWindow: 25,
210
- windowEndAt: 3000,
211
- intervalInSeconds: 120,
212
- };
213
- const window = SlidingWindow_1.SlidingWindow.fromJSON(json);
214
- expect(window.getId()).toBe('test-window');
215
- expect(window.getCurrentWindowHitCount()).toBe(15);
216
- expect(window.getPreviousWindowHitCount()).toBe(25);
217
- expect(window.getWindowEndAt()).toBe(3000);
218
- expect(window.getInterval()).toBe(120);
219
- });
220
- it('should round-trip serialize/deserialize', () => {
221
- const window = new SlidingWindow_1.SlidingWindow('round-trip', 300, 100, 200, 5000);
222
- const json = window.toJSON();
223
- const restored = SlidingWindow_1.SlidingWindow.fromJSON(json);
224
- expect(restored.getId()).toBe(window.getId());
225
- expect(restored.getCurrentWindowHitCount()).toBe(window.getCurrentWindowHitCount());
226
- expect(restored.getPreviousWindowHitCount()).toBe(window.getPreviousWindowHitCount());
227
- expect(restored.getWindowEndAt()).toBe(window.getWindowEndAt());
228
- expect(restored.getInterval()).toBe(window.getInterval());
229
- });
230
- });
231
- describe('edge cases', () => {
232
- it('should handle interval of 1 second', () => {
233
- const now = 1000;
234
- const windowEndAt = now + 1;
235
- const window = new SlidingWindow_1.SlidingWindow('test', 1, 5, 10, windowEndAt);
236
- const count = window.getHitCount(now + 0.5);
237
- // (10 * 0.5) + 5 = 10
238
- expect(count).toBe(10);
239
- });
240
- it('should handle very large intervals', () => {
241
- const now = 1000;
242
- const window = new SlidingWindow_1.SlidingWindow('test', 86400, 100, 200, now + 86400);
243
- const count = window.getHitCount(now + 43200); // 50% into day
244
- // (200 * 0.5) + 100 = 200
245
- expect(count).toBe(200);
246
- });
247
- it('should handle time past window end', () => {
248
- const now = 1000;
249
- const windowEndAt = now + 60;
250
- const window = new SlidingWindow_1.SlidingWindow('test', 60, 50, 30, windowEndAt);
251
- // Past window end
252
- const count = window.getHitCount(now + 100);
253
- expect(count).toBe(50); // Just current window hits
254
- });
255
- });
256
- });
257
- //# sourceMappingURL=SlidingWindow.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SlidingWindow.test.js","sourceRoot":"","sources":["../../../src/policy/__tests__/SlidingWindow.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SlidingWindowLimiter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SlidingWindowLimiter.test.d.ts","sourceRoot":"","sources":["../../../src/policy/__tests__/SlidingWindowLimiter.test.ts"],"names":[],"mappings":""}
@@ -1,201 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const SlidingWindowLimiter_1 = require("../SlidingWindowLimiter");
4
- const InMemoryStorage_1 = require("../../storage/InMemoryStorage");
5
- const MaxWaitDurationExceededError_1 = require("../../errors/MaxWaitDurationExceededError");
6
- describe('SlidingWindowLimiter', () => {
7
- let storage;
8
- beforeEach(() => {
9
- storage = new InMemoryStorage_1.InMemoryStorage();
10
- });
11
- describe('consume', () => {
12
- it('should accept requests within limit', async () => {
13
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
14
- const result = await limiter.consume(5);
15
- expect(result.isAccepted()).toBe(true);
16
- expect(result.getRemainingTokens()).toBe(5);
17
- expect(result.getLimit()).toBe(10);
18
- });
19
- it('should reject requests when limit exceeded', async () => {
20
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
21
- await limiter.consume(10);
22
- const result = await limiter.consume(1);
23
- expect(result.isAccepted()).toBe(false);
24
- expect(result.getRemainingTokens()).toBe(0);
25
- });
26
- it('should track hits within window', async () => {
27
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
28
- const r1 = await limiter.consume(3);
29
- const r2 = await limiter.consume(2);
30
- const r3 = await limiter.consume(4);
31
- expect(r1.getRemainingTokens()).toBe(7);
32
- expect(r2.getRemainingTokens()).toBe(5);
33
- expect(r3.getRemainingTokens()).toBe(1);
34
- });
35
- it('should smooth requests across window boundaries', async () => {
36
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
37
- // Use up the limit
38
- await limiter.consume(10);
39
- // Should be rate limited now
40
- const result = await limiter.consume(1);
41
- expect(result.isAccepted()).toBe(false);
42
- });
43
- it('should provide retry time when rate limited', async () => {
44
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
45
- await limiter.consume(10);
46
- const result = await limiter.consume(1);
47
- expect(result.isAccepted()).toBe(false);
48
- expect(result.getRetryAfter().getTime()).toBeGreaterThan(Date.now());
49
- });
50
- it('should transition to new window correctly', async () => {
51
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
52
- // Use some tokens
53
- await limiter.consume(8);
54
- // Should still have tokens available
55
- const result = await limiter.consume(1);
56
- expect(result.isAccepted()).toBe(true);
57
- expect(result.getRemainingTokens()).toBe(1);
58
- });
59
- it('should create fresh window when expired', async () => {
60
- jest.useFakeTimers();
61
- const now = 1000;
62
- jest.setSystemTime(now * 1000);
63
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
64
- await limiter.consume(10);
65
- // Move past expiration (window end + interval)
66
- jest.setSystemTime((now + 130) * 1000);
67
- const result = await limiter.consume(10);
68
- expect(result.isAccepted()).toBe(true);
69
- expect(result.getRemainingTokens()).toBe(0);
70
- jest.useRealTimers();
71
- });
72
- });
73
- describe('reserve', () => {
74
- it('should reserve tokens when available', async () => {
75
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
76
- const reservation = await limiter.reserve(5);
77
- expect(reservation.getWaitDuration()).toBe(0);
78
- expect(reservation.getRateLimit().isAccepted()).toBe(true);
79
- expect(reservation.getRateLimit().getRemainingTokens()).toBe(5);
80
- });
81
- it('should calculate wait time when tokens not available', async () => {
82
- jest.useFakeTimers();
83
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
84
- await limiter.consume(10);
85
- const reservation = await limiter.reserve(5);
86
- expect(reservation.getWaitDuration()).toBeGreaterThan(0);
87
- expect(reservation.getRateLimit().isAccepted()).toBe(true);
88
- jest.useRealTimers();
89
- });
90
- it('should throw error when exceeding maxTime', async () => {
91
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
92
- await limiter.consume(10);
93
- await expect(limiter.reserve(5, 1)).rejects.toThrow(MaxWaitDurationExceededError_1.MaxWaitDurationExceededError);
94
- });
95
- it('should throw error when requesting more than limit', async () => {
96
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
97
- await expect(limiter.reserve(15)).rejects.toThrow('Cannot reserve 15 tokens, limit is 10');
98
- });
99
- });
100
- describe('reset', () => {
101
- it('should reset the limiter state', async () => {
102
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
103
- await limiter.consume(10);
104
- await limiter.reset();
105
- const result = await limiter.consume(10);
106
- expect(result.isAccepted()).toBe(true);
107
- });
108
- it('should start fresh after reset', async () => {
109
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
110
- await limiter.consume(5);
111
- await limiter.reset();
112
- const result = await limiter.consume(1);
113
- expect(result.getRemainingTokens()).toBe(9);
114
- });
115
- });
116
- describe('multiple limiters', () => {
117
- it('should maintain separate state for different IDs', async () => {
118
- const limiter1 = new SlidingWindowLimiter_1.SlidingWindowLimiter('user1', 10, 60, storage);
119
- const limiter2 = new SlidingWindowLimiter_1.SlidingWindowLimiter('user2', 10, 60, storage);
120
- await limiter1.consume(8);
121
- await limiter2.consume(3);
122
- const r1 = await limiter1.consume(1);
123
- const r2 = await limiter2.consume(1);
124
- expect(r1.getRemainingTokens()).toBe(1);
125
- expect(r2.getRemainingTokens()).toBe(6);
126
- });
127
- });
128
- describe('sliding window behavior', () => {
129
- it('should smoothly distribute capacity across windows', async () => {
130
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 100, 60, storage);
131
- // Fill partial window
132
- await limiter.consume(50);
133
- // Should still have capacity
134
- const result = await limiter.consume(20);
135
- expect(result.isAccepted()).toBe(true);
136
- expect(result.getRemainingTokens()).toBe(30);
137
- });
138
- it('should prevent bursts at window boundaries', async () => {
139
- jest.useFakeTimers();
140
- const now = 1000;
141
- jest.setSystemTime(now * 1000);
142
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
143
- // Use 10 tokens
144
- await limiter.consume(10);
145
- // Just after window end (1 second into new window)
146
- jest.setSystemTime((now + 61) * 1000);
147
- // Previous: 10 * (1 - 1/60) ≈ 9.83, Current: 0
148
- // Available: ~0
149
- const result = await limiter.consume(5);
150
- expect(result.isAccepted()).toBe(false);
151
- jest.useRealTimers();
152
- });
153
- });
154
- describe('edge cases', () => {
155
- it('should handle limit of 1', async () => {
156
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 1, 60, storage);
157
- const r1 = await limiter.consume(1);
158
- const r2 = await limiter.consume(1);
159
- expect(r1.isAccepted()).toBe(true);
160
- expect(r2.isAccepted()).toBe(false);
161
- });
162
- it('should handle small intervals', async () => {
163
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 1, storage);
164
- await limiter.consume(5);
165
- const result = await limiter.consume(3);
166
- expect(result.isAccepted()).toBe(true);
167
- expect(result.getRemainingTokens()).toBe(2);
168
- });
169
- it('should handle default parameters', async () => {
170
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
171
- const result = await limiter.consume(); // Default 1 token
172
- expect(result.isAccepted()).toBe(true);
173
- expect(result.getRemainingTokens()).toBe(9);
174
- });
175
- it('should handle very large intervals', async () => {
176
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 1000, 86400, storage); // 1 day
177
- await limiter.consume(500);
178
- const result = await limiter.consume(400);
179
- expect(result.isAccepted()).toBe(true);
180
- expect(result.getRemainingTokens()).toBe(100);
181
- });
182
- });
183
- describe('window state transitions', () => {
184
- it('should handle multiple window transitions', async () => {
185
- jest.useFakeTimers();
186
- const now = 1000;
187
- jest.setSystemTime(now * 1000);
188
- const limiter = new SlidingWindowLimiter_1.SlidingWindowLimiter('test', 10, 60, storage);
189
- await limiter.consume(5);
190
- // First transition
191
- jest.setSystemTime((now + 70) * 1000);
192
- await limiter.consume(3);
193
- // Second transition
194
- jest.setSystemTime((now + 140) * 1000);
195
- const result = await limiter.consume(2);
196
- expect(result.isAccepted()).toBe(true);
197
- jest.useRealTimers();
198
- });
199
- });
200
- });
201
- //# sourceMappingURL=SlidingWindowLimiter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SlidingWindowLimiter.test.js","sourceRoot":"","sources":["../../../src/policy/__tests__/SlidingWindowLimiter.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TokenBucket.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TokenBucket.test.d.ts","sourceRoot":"","sources":["../../../src/policy/__tests__/TokenBucket.test.ts"],"names":[],"mappings":""}