@defai.digital/resilience-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/_contracts.d.ts +11 -0
- package/dist/_contracts.d.ts.map +1 -0
- package/dist/_contracts.js +20 -0
- package/dist/_contracts.js.map +1 -0
- package/dist/circuit-breaker.d.ts +42 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +188 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/loop-guard.d.ts +47 -0
- package/dist/loop-guard.d.ts.map +1 -0
- package/dist/loop-guard.js +164 -0
- package/dist/loop-guard.js.map +1 -0
- package/dist/metrics-collector.d.ts +41 -0
- package/dist/metrics-collector.d.ts.map +1 -0
- package/dist/metrics-collector.js +189 -0
- package/dist/metrics-collector.js.map +1 -0
- package/dist/rate-limiter.d.ts +35 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +189 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/resource-enforcer.d.ts +47 -0
- package/dist/resource-enforcer.d.ts.map +1 -0
- package/dist/resource-enforcer.js +156 -0
- package/dist/resource-enforcer.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Enforcer Implementation
|
|
3
|
+
*
|
|
4
|
+
* Enforces limits on tokens, time, cost, and concurrency.
|
|
5
|
+
*/
|
|
6
|
+
import { type ResourceLimitsConfig, type ResourceUsage, type ResourceCheckResult, type ResourceRequestInfo } from './_contracts.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resource enforcer error
|
|
9
|
+
*/
|
|
10
|
+
export declare class ResourceEnforcerError extends Error {
|
|
11
|
+
readonly code: string;
|
|
12
|
+
readonly limit: string;
|
|
13
|
+
readonly current: number;
|
|
14
|
+
readonly max: number;
|
|
15
|
+
constructor(code: string, message: string, limit: string, current: number, max: number);
|
|
16
|
+
static fromCheckResult(result: ResourceCheckResult & {
|
|
17
|
+
allowed: false;
|
|
18
|
+
}): ResourceEnforcerError;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resource enforcer interface
|
|
22
|
+
*/
|
|
23
|
+
export interface ResourceEnforcer {
|
|
24
|
+
/** Check if request is within limits */
|
|
25
|
+
checkLimits(sessionId: string, request?: ResourceRequestInfo): ResourceCheckResult;
|
|
26
|
+
/** Record resource usage after request */
|
|
27
|
+
recordUsage(sessionId: string, inputTokens: number, outputTokens: number, durationMs: number): void;
|
|
28
|
+
/** Start tracking concurrent request */
|
|
29
|
+
startRequest(sessionId: string): void;
|
|
30
|
+
/** End tracking concurrent request */
|
|
31
|
+
endRequest(sessionId: string): void;
|
|
32
|
+
/** Get current usage for session */
|
|
33
|
+
getUsage(sessionId: string): ResourceUsage;
|
|
34
|
+
/** Reset usage for session */
|
|
35
|
+
resetUsage(sessionId: string): void;
|
|
36
|
+
/** Get all active sessions */
|
|
37
|
+
getActiveSessions(): string[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates a resource enforcer
|
|
41
|
+
*/
|
|
42
|
+
export declare function createResourceEnforcer(config?: Partial<ResourceLimitsConfig>): ResourceEnforcer;
|
|
43
|
+
/**
|
|
44
|
+
* Creates a strict resource enforcer that throws on limit exceeded
|
|
45
|
+
*/
|
|
46
|
+
export declare function createStrictResourceEnforcer(config?: Partial<ResourceLimitsConfig>): ResourceEnforcer;
|
|
47
|
+
//# sourceMappingURL=resource-enforcer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-enforcer.d.ts","sourceRoot":"","sources":["../src/resource-enforcer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAKzB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aAE5B,IAAI,EAAE,MAAM;aAEZ,KAAK,EAAE,MAAM;aACb,OAAO,EAAE,MAAM;aACf,GAAG,EAAE,MAAM;gBAJX,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM;IAM7B,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,mBAAmB,GAAG;QAAE,OAAO,EAAE,KAAK,CAAA;KAAE,GAC/C,qBAAqB;CAiBzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,CAAC;IAEnF,0CAA0C;IAC1C,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,IAAI,CAAC;IAER,wCAAwC;IACxC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,sCAAsC;IACtC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC;IAE3C,8BAA8B;IAC9B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,8BAA8B;IAC9B,iBAAiB,IAAI,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,gBAAgB,CA2IlB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,gBAAgB,CAkBlB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Enforcer Implementation
|
|
3
|
+
*
|
|
4
|
+
* Enforces limits on tokens, time, cost, and concurrency.
|
|
5
|
+
*/
|
|
6
|
+
import { ResourceLimitsErrorCodes, createDefaultResourceLimitsConfig, createResourceUsage, estimateCost, } from './_contracts.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resource enforcer error
|
|
9
|
+
*/
|
|
10
|
+
export class ResourceEnforcerError extends Error {
|
|
11
|
+
code;
|
|
12
|
+
limit;
|
|
13
|
+
current;
|
|
14
|
+
max;
|
|
15
|
+
constructor(code, message, limit, current, max) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.code = code;
|
|
18
|
+
this.limit = limit;
|
|
19
|
+
this.current = current;
|
|
20
|
+
this.max = max;
|
|
21
|
+
this.name = 'ResourceEnforcerError';
|
|
22
|
+
}
|
|
23
|
+
static fromCheckResult(result) {
|
|
24
|
+
const codeMap = {
|
|
25
|
+
'tokens-per-request': ResourceLimitsErrorCodes.TOKENS_PER_REQUEST_EXCEEDED,
|
|
26
|
+
'tokens-per-session': ResourceLimitsErrorCodes.TOKENS_PER_SESSION_EXCEEDED,
|
|
27
|
+
'duration': ResourceLimitsErrorCodes.DURATION_EXCEEDED,
|
|
28
|
+
'cost': ResourceLimitsErrorCodes.COST_EXCEEDED,
|
|
29
|
+
'concurrency': ResourceLimitsErrorCodes.CONCURRENCY_EXCEEDED,
|
|
30
|
+
};
|
|
31
|
+
return new ResourceEnforcerError(codeMap[result.limitType] ?? 'RESOURCE_LIMIT_EXCEEDED', result.reason, result.limitType, result.current, result.max);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates a resource enforcer
|
|
36
|
+
*/
|
|
37
|
+
export function createResourceEnforcer(config) {
|
|
38
|
+
const cfg = { ...createDefaultResourceLimitsConfig(), ...config };
|
|
39
|
+
const usageBySession = new Map();
|
|
40
|
+
function getOrCreateUsage(sessionId) {
|
|
41
|
+
let usage = usageBySession.get(sessionId);
|
|
42
|
+
if (!usage) {
|
|
43
|
+
usage = createResourceUsage(sessionId);
|
|
44
|
+
usageBySession.set(sessionId, usage);
|
|
45
|
+
}
|
|
46
|
+
return usage;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
checkLimits(sessionId, request) {
|
|
50
|
+
const usage = getOrCreateUsage(sessionId);
|
|
51
|
+
// Check concurrency limit
|
|
52
|
+
if (request?.isConcurrent) {
|
|
53
|
+
if (usage.concurrentRequests >= cfg.maxConcurrentRequests) {
|
|
54
|
+
return {
|
|
55
|
+
allowed: false,
|
|
56
|
+
reason: `Concurrent request limit exceeded`,
|
|
57
|
+
limitType: 'concurrency',
|
|
58
|
+
current: usage.concurrentRequests,
|
|
59
|
+
max: cfg.maxConcurrentRequests,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Check tokens per request
|
|
64
|
+
const estimatedRequestTokens = (request?.estimatedInputTokens ?? 0) +
|
|
65
|
+
(request?.estimatedOutputTokens ?? 0);
|
|
66
|
+
if (estimatedRequestTokens > cfg.maxTokensPerRequest) {
|
|
67
|
+
return {
|
|
68
|
+
allowed: false,
|
|
69
|
+
reason: `Estimated tokens (${estimatedRequestTokens}) exceeds per-request limit`,
|
|
70
|
+
limitType: 'tokens-per-request',
|
|
71
|
+
current: estimatedRequestTokens,
|
|
72
|
+
max: cfg.maxTokensPerRequest,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Check tokens per session
|
|
76
|
+
const totalSessionTokens = usage.inputTokens + usage.outputTokens + estimatedRequestTokens;
|
|
77
|
+
if (totalSessionTokens > cfg.maxTokensPerSession) {
|
|
78
|
+
return {
|
|
79
|
+
allowed: false,
|
|
80
|
+
reason: `Session token limit would be exceeded`,
|
|
81
|
+
limitType: 'tokens-per-session',
|
|
82
|
+
current: usage.inputTokens + usage.outputTokens,
|
|
83
|
+
max: cfg.maxTokensPerSession,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Check cost limit
|
|
87
|
+
const estimatedNewCost = estimateCost(request?.estimatedInputTokens ?? 0, request?.estimatedOutputTokens ?? 0, cfg);
|
|
88
|
+
const projectedCost = usage.estimatedCost + estimatedNewCost;
|
|
89
|
+
if (projectedCost > cfg.maxCostPerSession) {
|
|
90
|
+
return {
|
|
91
|
+
allowed: false,
|
|
92
|
+
reason: `Session cost limit would be exceeded`,
|
|
93
|
+
limitType: 'cost',
|
|
94
|
+
current: usage.estimatedCost,
|
|
95
|
+
max: cfg.maxCostPerSession,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Check duration limit
|
|
99
|
+
const elapsed = Date.now() - new Date(usage.startedAt).getTime();
|
|
100
|
+
if (elapsed > cfg.maxDurationMs) {
|
|
101
|
+
return {
|
|
102
|
+
allowed: false,
|
|
103
|
+
reason: `Session duration limit exceeded`,
|
|
104
|
+
limitType: 'duration',
|
|
105
|
+
current: elapsed,
|
|
106
|
+
max: cfg.maxDurationMs,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return { allowed: true };
|
|
110
|
+
},
|
|
111
|
+
recordUsage(sessionId, inputTokens, outputTokens, durationMs) {
|
|
112
|
+
const usage = getOrCreateUsage(sessionId);
|
|
113
|
+
usage.inputTokens += inputTokens;
|
|
114
|
+
usage.outputTokens += outputTokens;
|
|
115
|
+
usage.totalDurationMs += durationMs;
|
|
116
|
+
usage.requestCount++;
|
|
117
|
+
usage.estimatedCost = estimateCost(usage.inputTokens, usage.outputTokens, cfg);
|
|
118
|
+
usage.lastRequestAt = new Date().toISOString();
|
|
119
|
+
},
|
|
120
|
+
startRequest(sessionId) {
|
|
121
|
+
const usage = getOrCreateUsage(sessionId);
|
|
122
|
+
usage.concurrentRequests++;
|
|
123
|
+
},
|
|
124
|
+
endRequest(sessionId) {
|
|
125
|
+
const usage = usageBySession.get(sessionId);
|
|
126
|
+
if (usage && usage.concurrentRequests > 0) {
|
|
127
|
+
usage.concurrentRequests--;
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
getUsage(sessionId) {
|
|
131
|
+
return getOrCreateUsage(sessionId);
|
|
132
|
+
},
|
|
133
|
+
resetUsage(sessionId) {
|
|
134
|
+
usageBySession.delete(sessionId);
|
|
135
|
+
},
|
|
136
|
+
getActiveSessions() {
|
|
137
|
+
return Array.from(usageBySession.keys());
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Creates a strict resource enforcer that throws on limit exceeded
|
|
143
|
+
*/
|
|
144
|
+
export function createStrictResourceEnforcer(config) {
|
|
145
|
+
const enforcer = createResourceEnforcer(config);
|
|
146
|
+
const originalCheck = enforcer.checkLimits.bind(enforcer);
|
|
147
|
+
enforcer.checkLimits = (sessionId, request) => {
|
|
148
|
+
const result = originalCheck(sessionId, request);
|
|
149
|
+
if (!result.allowed) {
|
|
150
|
+
throw ResourceEnforcerError.fromCheckResult(result);
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
};
|
|
154
|
+
return enforcer;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=resource-enforcer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-enforcer.js","sourceRoot":"","sources":["../src/resource-enforcer.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@defai.digital/resilience-domain",
|
|
3
|
+
"version": "13.0.3",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Resilience patterns: circuit breaker, rate limiter, loop guard, resource limits, metrics",
|
|
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/resilience-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
|
+
}
|