@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.
@@ -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
+ }