@defai.digital/provider-domain 13.0.3
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/LICENSE +214 -0
- package/dist/circuit-breaker.d.ts +51 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +168 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/health-monitor.d.ts +60 -0
- package/dist/health-monitor.d.ts.map +1 -0
- package/dist/health-monitor.js +301 -0
- package/dist/health-monitor.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/provider-manager.d.ts +76 -0
- package/dist/provider-manager.d.ts.map +1 -0
- package/dist/provider-manager.js +186 -0
- package/dist/provider-manager.js.map +1 -0
- package/dist/rate-limiter.d.ts +53 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +197 -0
- package/dist/rate-limiter.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiter Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements token bucket rate limiting for provider request management.
|
|
5
|
+
* Prevents API quota exhaustion through intelligent request throttling.
|
|
6
|
+
*
|
|
7
|
+
* Invariants:
|
|
8
|
+
* - INV-RL-001: Token bucket refills at configured rate
|
|
9
|
+
* - INV-RL-002: Requests consume tokens based on type
|
|
10
|
+
* - INV-RL-003: Strategy applied when limit reached
|
|
11
|
+
*/
|
|
12
|
+
import { type ProviderRateLimitConfig as RateLimitConfig, type ProviderRateLimitState as RateLimitState, type ProviderRateLimitEvent as RateLimitEvent } from '@defai.digital/contracts';
|
|
13
|
+
/**
|
|
14
|
+
* Rate limiter instance for a single provider
|
|
15
|
+
*/
|
|
16
|
+
export interface RateLimiter {
|
|
17
|
+
/** Get current state */
|
|
18
|
+
getState(): RateLimitState;
|
|
19
|
+
/** Check if request is allowed without consuming */
|
|
20
|
+
canRequest(tokens?: number): boolean;
|
|
21
|
+
/** Try to consume tokens, returns true if allowed */
|
|
22
|
+
tryConsume(tokens?: number): boolean;
|
|
23
|
+
/** Wait for tokens to become available */
|
|
24
|
+
waitForTokens(tokens?: number): Promise<void>;
|
|
25
|
+
/** Get time until next token available (ms) */
|
|
26
|
+
getWaitTime(tokens?: number): number;
|
|
27
|
+
/** Record external rate limit (from API response) */
|
|
28
|
+
recordExternalLimit(retryAfterMs?: number): void;
|
|
29
|
+
/** Get event history */
|
|
30
|
+
getEvents(): RateLimitEvent[];
|
|
31
|
+
/** Reset the rate limiter */
|
|
32
|
+
reset(): void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Rate limit event listener
|
|
36
|
+
*/
|
|
37
|
+
export type RateLimitEventListener = (event: RateLimitEvent) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Creates a rate limiter for a provider
|
|
40
|
+
*/
|
|
41
|
+
export declare function createRateLimiter(providerId: string, config?: Partial<RateLimitConfig>): RateLimiter;
|
|
42
|
+
/**
|
|
43
|
+
* Rate limit error
|
|
44
|
+
*/
|
|
45
|
+
export declare class RateLimitError extends Error {
|
|
46
|
+
readonly code: string;
|
|
47
|
+
readonly providerId: string;
|
|
48
|
+
readonly retryAfterMs?: number | undefined;
|
|
49
|
+
constructor(code: string, providerId: string, retryAfterMs?: number | undefined, message?: string);
|
|
50
|
+
static exceeded(providerId: string, retryAfterMs?: number): RateLimitError;
|
|
51
|
+
static quotaExhausted(providerId: string): RateLimitError;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,KAAK,uBAAuB,IAAI,eAAe,EAC/C,KAAK,sBAAsB,IAAI,cAAc,EAC7C,KAAK,sBAAsB,IAAI,cAAc,EAM9C,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,QAAQ,IAAI,cAAc,CAAC;IAE3B,oDAAoD;IACpD,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAErC,qDAAqD;IACrD,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAErC,0CAA0C;IAC1C,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C,+CAA+C;IAC/C,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAErC,qDAAqD;IACrD,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjD,wBAAwB;IACxB,SAAS,IAAI,cAAc,EAAE,CAAC;IAE9B,6BAA6B;IAC7B,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;AAErE;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,WAAW,CAqNb;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;aAErB,IAAI,EAAE,MAAM;aACZ,UAAU,EAAE,MAAM;aAClB,YAAY,CAAC,EAAE,MAAM;gBAFrB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,YAAA,EACrC,OAAO,CAAC,EAAE,MAAM;IAMlB,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc;IAQ1E,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc;CAQ1D"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiter Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements token bucket rate limiting for provider request management.
|
|
5
|
+
* Prevents API quota exhaustion through intelligent request throttling.
|
|
6
|
+
*
|
|
7
|
+
* Invariants:
|
|
8
|
+
* - INV-RL-001: Token bucket refills at configured rate
|
|
9
|
+
* - INV-RL-002: Requests consume tokens based on type
|
|
10
|
+
* - INV-RL-003: Strategy applied when limit reached
|
|
11
|
+
*/
|
|
12
|
+
import { createDefaultProviderRateLimitConfig as createDefaultRateLimitConfig, createInitialProviderRateLimitState as createInitialRateLimitState, ProviderRateLimitErrorCodes as RateLimitErrorCodes, } from '@defai.digital/contracts';
|
|
13
|
+
/**
|
|
14
|
+
* Creates a rate limiter for a provider
|
|
15
|
+
*/
|
|
16
|
+
export function createRateLimiter(providerId, config = {}) {
|
|
17
|
+
const cfg = { ...createDefaultRateLimitConfig(), ...config };
|
|
18
|
+
let internalState = createInitialRateLimitState(cfg);
|
|
19
|
+
// Backoff tracking
|
|
20
|
+
let currentBackoffMs = cfg.backoffBaseMs;
|
|
21
|
+
let consecutiveLimits = 0;
|
|
22
|
+
const events = [];
|
|
23
|
+
const listeners = [];
|
|
24
|
+
function emitEvent(type, details) {
|
|
25
|
+
const event = {
|
|
26
|
+
eventId: crypto.randomUUID(),
|
|
27
|
+
type,
|
|
28
|
+
providerId,
|
|
29
|
+
timestamp: new Date().toISOString(),
|
|
30
|
+
details,
|
|
31
|
+
};
|
|
32
|
+
events.push(event);
|
|
33
|
+
listeners.forEach((listener) => { listener(event); });
|
|
34
|
+
}
|
|
35
|
+
// INV-RL-001: Token bucket refills at configured rate
|
|
36
|
+
function refillTokens() {
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
const lastRefill = new Date(internalState.lastRefillTime).getTime();
|
|
39
|
+
const elapsed = now - lastRefill;
|
|
40
|
+
const minutesFraction = elapsed / 60000;
|
|
41
|
+
// Calculate tokens to add
|
|
42
|
+
const requestsToAdd = cfg.requestsPerMinute * minutesFraction;
|
|
43
|
+
const tokensToAdd = cfg.tokensPerMinute * minutesFraction;
|
|
44
|
+
// Add tokens up to burst limit
|
|
45
|
+
const maxRequests = cfg.requestsPerMinute * cfg.burstMultiplier;
|
|
46
|
+
const maxTokens = cfg.tokensPerMinute * cfg.burstMultiplier;
|
|
47
|
+
internalState.requestTokens = Math.min(internalState.requestTokens + requestsToAdd, maxRequests);
|
|
48
|
+
internalState.outputTokens = Math.min(internalState.outputTokens + tokensToAdd, maxTokens);
|
|
49
|
+
internalState.lastRefillTime = new Date(now).toISOString();
|
|
50
|
+
if (requestsToAdd > 0 || tokensToAdd > 0) {
|
|
51
|
+
emitEvent('rateLimit.refilled', { requestsToAdd, tokensToAdd });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function updateState() {
|
|
55
|
+
const prevState = internalState.state;
|
|
56
|
+
let newState = 'normal';
|
|
57
|
+
if (internalState.nextAllowedTime) {
|
|
58
|
+
const nextAllowed = new Date(internalState.nextAllowedTime).getTime();
|
|
59
|
+
if (Date.now() < nextAllowed) {
|
|
60
|
+
newState = 'blocked';
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
internalState.nextAllowedTime = undefined;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (newState === 'normal' &&
|
|
67
|
+
(internalState.requestTokens < 1 || internalState.outputTokens < 1)) {
|
|
68
|
+
newState = 'throttled';
|
|
69
|
+
}
|
|
70
|
+
if (prevState !== newState) {
|
|
71
|
+
internalState.state = newState;
|
|
72
|
+
emitEvent('rateLimit.stateChanged', { previousState: prevState, newState });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// INV-RL-003: Apply strategy when limit reached
|
|
76
|
+
function applyBackoff() {
|
|
77
|
+
consecutiveLimits++;
|
|
78
|
+
currentBackoffMs = Math.min(cfg.backoffBaseMs * Math.pow(cfg.backoffMultiplier, consecutiveLimits - 1), cfg.maxBackoffMs);
|
|
79
|
+
internalState.nextAllowedTime = new Date(Date.now() + currentBackoffMs).toISOString();
|
|
80
|
+
internalState.state = 'blocked';
|
|
81
|
+
emitEvent('rateLimit.stateChanged', {
|
|
82
|
+
reason: 'backoff',
|
|
83
|
+
backoffMs: currentBackoffMs,
|
|
84
|
+
consecutiveLimits,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
getState() {
|
|
89
|
+
refillTokens();
|
|
90
|
+
updateState();
|
|
91
|
+
return { ...internalState };
|
|
92
|
+
},
|
|
93
|
+
canRequest(tokens = 1) {
|
|
94
|
+
refillTokens();
|
|
95
|
+
updateState();
|
|
96
|
+
if (internalState.state === 'blocked') {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
// INV-RL-002: Check both request and token budgets
|
|
100
|
+
return internalState.requestTokens >= 1 && internalState.outputTokens >= tokens;
|
|
101
|
+
},
|
|
102
|
+
tryConsume(tokens = 1) {
|
|
103
|
+
refillTokens();
|
|
104
|
+
updateState();
|
|
105
|
+
if (internalState.state === 'blocked') {
|
|
106
|
+
emitEvent('rateLimit.rejected', { tokens, reason: 'blocked' });
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (internalState.requestTokens >= 1 && internalState.outputTokens >= tokens) {
|
|
110
|
+
internalState.requestTokens -= 1;
|
|
111
|
+
internalState.outputTokens -= tokens;
|
|
112
|
+
internalState.requestCount++;
|
|
113
|
+
internalState.tokenCount += tokens;
|
|
114
|
+
// Success resets backoff
|
|
115
|
+
if (consecutiveLimits > 0) {
|
|
116
|
+
consecutiveLimits = 0;
|
|
117
|
+
currentBackoffMs = cfg.backoffBaseMs;
|
|
118
|
+
}
|
|
119
|
+
emitEvent('rateLimit.acquired', { tokens });
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
// Rate limited locally
|
|
123
|
+
if (cfg.strategy === 'backoff') {
|
|
124
|
+
applyBackoff();
|
|
125
|
+
}
|
|
126
|
+
emitEvent('rateLimit.rejected', { tokens, reason: 'exhausted' });
|
|
127
|
+
return false;
|
|
128
|
+
},
|
|
129
|
+
async waitForTokens(tokens = 1) {
|
|
130
|
+
const waitTime = this.getWaitTime(tokens);
|
|
131
|
+
if (waitTime > 0) {
|
|
132
|
+
await new Promise((resolve) => setTimeout(resolve, waitTime));
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
getWaitTime(tokens = 1) {
|
|
136
|
+
refillTokens();
|
|
137
|
+
updateState();
|
|
138
|
+
// Check if blocked
|
|
139
|
+
if (internalState.nextAllowedTime) {
|
|
140
|
+
const blockWait = new Date(internalState.nextAllowedTime).getTime() - Date.now();
|
|
141
|
+
if (blockWait > 0)
|
|
142
|
+
return blockWait;
|
|
143
|
+
}
|
|
144
|
+
// Calculate time to refill needed tokens
|
|
145
|
+
if (internalState.requestTokens >= 1 && internalState.outputTokens >= tokens) {
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
const requestsNeeded = Math.max(0, 1 - internalState.requestTokens);
|
|
149
|
+
const tokensNeeded = Math.max(0, tokens - internalState.outputTokens);
|
|
150
|
+
const requestRefillTime = (requestsNeeded / cfg.requestsPerMinute) * 60000;
|
|
151
|
+
const tokenRefillTime = (tokensNeeded / cfg.tokensPerMinute) * 60000;
|
|
152
|
+
return Math.max(requestRefillTime, tokenRefillTime);
|
|
153
|
+
},
|
|
154
|
+
recordExternalLimit(retryAfterMs) {
|
|
155
|
+
const backoffTime = retryAfterMs ?? cfg.backoffBaseMs;
|
|
156
|
+
internalState.nextAllowedTime = new Date(Date.now() + backoffTime).toISOString();
|
|
157
|
+
internalState.state = 'blocked';
|
|
158
|
+
consecutiveLimits++;
|
|
159
|
+
emitEvent('rateLimit.stateChanged', {
|
|
160
|
+
reason: 'external',
|
|
161
|
+
retryAfterMs: backoffTime,
|
|
162
|
+
consecutiveLimits,
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
getEvents() {
|
|
166
|
+
return [...events];
|
|
167
|
+
},
|
|
168
|
+
reset() {
|
|
169
|
+
internalState = createInitialRateLimitState(cfg);
|
|
170
|
+
currentBackoffMs = cfg.backoffBaseMs;
|
|
171
|
+
consecutiveLimits = 0;
|
|
172
|
+
events.length = 0;
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Rate limit error
|
|
178
|
+
*/
|
|
179
|
+
export class RateLimitError extends Error {
|
|
180
|
+
code;
|
|
181
|
+
providerId;
|
|
182
|
+
retryAfterMs;
|
|
183
|
+
constructor(code, providerId, retryAfterMs, message) {
|
|
184
|
+
super(message ?? `Rate limit exceeded for provider ${providerId}`);
|
|
185
|
+
this.code = code;
|
|
186
|
+
this.providerId = providerId;
|
|
187
|
+
this.retryAfterMs = retryAfterMs;
|
|
188
|
+
this.name = 'RateLimitError';
|
|
189
|
+
}
|
|
190
|
+
static exceeded(providerId, retryAfterMs) {
|
|
191
|
+
return new RateLimitError(RateLimitErrorCodes.RATE_LIMITED, providerId, retryAfterMs);
|
|
192
|
+
}
|
|
193
|
+
static quotaExhausted(providerId) {
|
|
194
|
+
return new RateLimitError(RateLimitErrorCodes.TOKEN_LIMIT, providerId, undefined, `API quota exhausted for provider ${providerId}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@defai.digital/provider-domain",
|
|
3
|
+
"version": "13.0.3",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Provider resilience domain for AutomatosX - circuit breaker, rate limiting, health monitoring",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"author": "DEFAI Private Limited",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/defai-digital/automatosx.git",
|
|
11
|
+
"directory": "packages/core/provider-domain"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/defai-digital/automatosx#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/defai-digital/automatosx/issues"
|
|
16
|
+
},
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20.0.0"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@defai.digital/contracts": "13.0.3"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc --build",
|
|
39
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
40
|
+
}
|
|
41
|
+
}
|