Skip to content

Commit 2dd3058

Browse files
committed
Make token class name clearer
1 parent ff97262 commit 2dd3058

3 files changed

Lines changed: 17 additions & 17 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ const conservativeBucket = new AIMDBucket({
333333

334334
## API Reference
335335

336-
### AIMDBucket
336+
### `AIMDBucket`
337337

338338
#### Constructor
339339

@@ -343,12 +343,12 @@ new AIMDBucket(config?: AIMDBucketConfig)
343343

344344
#### Methods
345345

346-
- `acquire(): Promise<Token>` - Acquire a token for making a request
346+
- `acquire(): Promise<AIMDBucketToken>` - Acquire a token for making a request
347347
- `getCurrentRate(): number` - Get current rate limit (tokens per second)
348348
- `getStatistics(): AIMDBucketStatistics` - Get current statistics
349349
- `shutdown(): Promise<void>` - Gracefully shut down the bucket
350350

351-
### Token
351+
### `AIMDBucketToken`
352352

353353
#### Methods
354354

spec/aimd-bucket.spec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2-
import { AIMDBucket, AIMDBucketConfig, Token } from "../src/index";
2+
import { AIMDBucket, AIMDBucketConfig, AIMDBucketToken } from "../src/index";
33

44
describe("AIMDBucket", () => {
55
let bucket: AIMDBucket;
@@ -46,7 +46,7 @@ describe("AIMDBucket", () => {
4646

4747
it("should acquire tokens immediately when bucket has capacity", async () => {
4848
const token = await bucket.acquire();
49-
expect(token).toBeInstanceOf(Token);
49+
expect(token).toBeInstanceOf(AIMDBucketToken);
5050
expect(token.isExpired()).toBe(false);
5151
});
5252

@@ -63,7 +63,7 @@ describe("AIMDBucket", () => {
6363

6464
// Now we should be able to acquire more
6565
const additionalToken = await bucket.acquire();
66-
expect(additionalToken).toBeInstanceOf(Token);
66+
expect(additionalToken).toBeInstanceOf(AIMDBucketToken);
6767
});
6868

6969
it("should process multiple pending requests in order", async () => {
@@ -77,14 +77,14 @@ describe("AIMDBucket", () => {
7777
const newTokens = await Promise.all([bucket.acquire(), bucket.acquire(), bucket.acquire()]);
7878

7979
expect(newTokens).toHaveLength(3);
80-
newTokens.forEach((token) => expect(token).toBeInstanceOf(Token));
80+
newTokens.forEach((token) => expect(token).toBeInstanceOf(AIMDBucketToken));
8181
});
8282

8383
it("should support concurrent token acquisition", async () => {
8484
const promises = Array.from({ length: 5 }, () => bucket.acquire());
8585
const tokens = await Promise.all(promises);
8686
expect(tokens).toHaveLength(5);
87-
tokens.forEach((token) => expect(token).toBeInstanceOf(Token));
87+
tokens.forEach((token) => expect(token).toBeInstanceOf(AIMDBucketToken));
8888
});
8989

9090
it("should respect maxRate limit", async () => {
@@ -537,7 +537,7 @@ describe("AIMDBucket", () => {
537537
// Should still be able to acquire more after timeout
538538
await vi.advanceTimersByTimeAsync(10000);
539539
const newToken = await bucket.acquire();
540-
expect(newToken).toBeInstanceOf(Token);
540+
expect(newToken).toBeInstanceOf(AIMDBucketToken);
541541
});
542542

543543
it("should handle configuration edge cases", () => {
@@ -593,7 +593,7 @@ describe("AIMDBucket", () => {
593593
const additionalTokens = await Promise.all([bucket.acquire(), bucket.acquire(), bucket.acquire()]);
594594

595595
expect(additionalTokens).toHaveLength(3);
596-
additionalTokens.forEach((token) => expect(token).toBeInstanceOf(Token));
596+
additionalTokens.forEach((token) => expect(token).toBeInstanceOf(AIMDBucketToken));
597597

598598
const finalStats = bucket.getStatistics();
599599
expect(finalStats.tokensIssued).toBe(initialStats.tokensIssued + 13);
@@ -603,7 +603,7 @@ describe("AIMDBucket", () => {
603603

604604
describe("Token", () => {
605605
let bucket: AIMDBucket;
606-
let token: Token;
606+
let token: AIMDBucketToken;
607607

608608
beforeEach(async () => {
609609
vi.useFakeTimers();

src/index.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export interface AIMDBucketStatistics {
3939
* One token that has been successfully acquired from the bucket
4040
* Expected to be completed once as either a success, failure, rate limited, or timeout
4141
*/
42-
export class Token {
42+
export class AIMDBucketToken {
4343
private completed = false;
4444
private expired = false;
4545
private timeoutHandle?: NodeJS.Timeout;
@@ -126,7 +126,7 @@ export class AIMDBucket {
126126
private lastRefill = Date.now();
127127
private recentOutcomes: Array<{ timestamp: number; outcome: "success" | "failure" | "rateLimited" | "timeout" }> = [];
128128
private tokensIssued = 0; // Only track total issued for reporting
129-
private pending: { resolve: (token: Token) => void; reject: (error: Error) => void; timestamp: number }[] = [];
129+
private pending: { resolve: (token: AIMDBucketToken) => void; reject: (error: Error) => void; timestamp: number }[] = [];
130130
private isShutdown = false;
131131

132132
private config: Required<AIMDBucketConfig>;
@@ -152,7 +152,7 @@ export class AIMDBucket {
152152
* Acquire a token to make a request
153153
* @returns Promise that resolves to a Token when one becomes available
154154
*/
155-
async acquire(): Promise<Token> {
155+
async acquire(): Promise<AIMDBucketToken> {
156156
if (this.isShutdown) {
157157
throw new Error("Bucket has been shut down");
158158
}
@@ -163,7 +163,7 @@ export class AIMDBucket {
163163
// capacity is available now, immediately issue a token
164164
this.tokens--;
165165
this.tokensIssued++;
166-
return new Token(this, this.config.tokenTimeoutMs);
166+
return new AIMDBucketToken(this, this.config.tokenTimeoutMs);
167167
} else {
168168
// capacity is not available now, return a promise for a future token
169169
const span = tracer.startSpan("token-bucket.wait", {
@@ -176,7 +176,7 @@ export class AIMDBucket {
176176

177177
return new Promise((resolve, reject) => {
178178
this.pending.push({
179-
resolve: (token: Token) => {
179+
resolve: (token: AIMDBucketToken) => {
180180
span.end();
181181
resolve(token);
182182
},
@@ -286,7 +286,7 @@ export class AIMDBucket {
286286
const request = this.pending.shift()!;
287287
this.tokens--;
288288
this.tokensIssued++;
289-
request.resolve(new Token(this, this.config.tokenTimeoutMs));
289+
request.resolve(new AIMDBucketToken(this, this.config.tokenTimeoutMs));
290290
}
291291
}
292292

0 commit comments

Comments
 (0)