@emmvish/stable-infra 1.0.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.
- package/LICENSE +21 -0
- package/README.md +2520 -0
- package/dist/constants/index.d.ts +15 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +136 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/stable-api-gateway.d.ts +4 -0
- package/dist/core/stable-api-gateway.d.ts.map +1 -0
- package/dist/core/stable-api-gateway.js +146 -0
- package/dist/core/stable-api-gateway.js.map +1 -0
- package/dist/core/stable-buffer.d.ts +23 -0
- package/dist/core/stable-buffer.d.ts.map +1 -0
- package/dist/core/stable-buffer.js +127 -0
- package/dist/core/stable-buffer.js.map +1 -0
- package/dist/core/stable-function.d.ts +11 -0
- package/dist/core/stable-function.d.ts.map +1 -0
- package/dist/core/stable-function.js +355 -0
- package/dist/core/stable-function.js.map +1 -0
- package/dist/core/stable-request.d.ts +3 -0
- package/dist/core/stable-request.d.ts.map +1 -0
- package/dist/core/stable-request.js +313 -0
- package/dist/core/stable-request.js.map +1 -0
- package/dist/core/stable-scheduler.d.ts +71 -0
- package/dist/core/stable-scheduler.d.ts.map +1 -0
- package/dist/core/stable-scheduler.js +782 -0
- package/dist/core/stable-scheduler.js.map +1 -0
- package/dist/core/stable-workflow-graph.d.ts +3 -0
- package/dist/core/stable-workflow-graph.d.ts.map +1 -0
- package/dist/core/stable-workflow-graph.js +5 -0
- package/dist/core/stable-workflow-graph.js.map +1 -0
- package/dist/core/stable-workflow.d.ts +3 -0
- package/dist/core/stable-workflow.d.ts.map +1 -0
- package/dist/core/stable-workflow.js +374 -0
- package/dist/core/stable-workflow.js.map +1 -0
- package/dist/enums/index.d.ts +84 -0
- package/dist/enums/index.d.ts.map +1 -0
- package/dist/enums/index.js +99 -0
- package/dist/enums/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/stable-runner/index.d.ts +2 -0
- package/dist/stable-runner/index.d.ts.map +1 -0
- package/dist/stable-runner/index.js +324 -0
- package/dist/stable-runner/index.js.map +1 -0
- package/dist/types/index.d.ts +1482 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utilities/buffer-utils.d.ts +4 -0
- package/dist/utilities/buffer-utils.d.ts.map +1 -0
- package/dist/utilities/buffer-utils.js +13 -0
- package/dist/utilities/buffer-utils.js.map +1 -0
- package/dist/utilities/cache-manager.d.ts +54 -0
- package/dist/utilities/cache-manager.d.ts.map +1 -0
- package/dist/utilities/cache-manager.js +288 -0
- package/dist/utilities/cache-manager.js.map +1 -0
- package/dist/utilities/circuit-breaker.d.ts +78 -0
- package/dist/utilities/circuit-breaker.d.ts.map +1 -0
- package/dist/utilities/circuit-breaker.js +350 -0
- package/dist/utilities/circuit-breaker.js.map +1 -0
- package/dist/utilities/concurrency-limiter.d.ts +46 -0
- package/dist/utilities/concurrency-limiter.d.ts.map +1 -0
- package/dist/utilities/concurrency-limiter.js +172 -0
- package/dist/utilities/concurrency-limiter.js.map +1 -0
- package/dist/utilities/delay.d.ts +2 -0
- package/dist/utilities/delay.d.ts.map +1 -0
- package/dist/utilities/delay.js +8 -0
- package/dist/utilities/delay.js.map +1 -0
- package/dist/utilities/execute-branch-workflow.d.ts +3 -0
- package/dist/utilities/execute-branch-workflow.d.ts.map +1 -0
- package/dist/utilities/execute-branch-workflow.js +736 -0
- package/dist/utilities/execute-branch-workflow.js.map +1 -0
- package/dist/utilities/execute-concurrently.d.ts +3 -0
- package/dist/utilities/execute-concurrently.d.ts.map +1 -0
- package/dist/utilities/execute-concurrently.js +258 -0
- package/dist/utilities/execute-concurrently.js.map +1 -0
- package/dist/utilities/execute-gateway-item.d.ts +6 -0
- package/dist/utilities/execute-gateway-item.d.ts.map +1 -0
- package/dist/utilities/execute-gateway-item.js +129 -0
- package/dist/utilities/execute-gateway-item.js.map +1 -0
- package/dist/utilities/execute-non-linear-workflow.d.ts +3 -0
- package/dist/utilities/execute-non-linear-workflow.d.ts.map +1 -0
- package/dist/utilities/execute-non-linear-workflow.js +486 -0
- package/dist/utilities/execute-non-linear-workflow.js.map +1 -0
- package/dist/utilities/execute-phase.d.ts +3 -0
- package/dist/utilities/execute-phase.d.ts.map +1 -0
- package/dist/utilities/execute-phase.js +132 -0
- package/dist/utilities/execute-phase.js.map +1 -0
- package/dist/utilities/execute-sequentially.d.ts +3 -0
- package/dist/utilities/execute-sequentially.d.ts.map +1 -0
- package/dist/utilities/execute-sequentially.js +49 -0
- package/dist/utilities/execute-sequentially.js.map +1 -0
- package/dist/utilities/execute-with-persistence.d.ts +3 -0
- package/dist/utilities/execute-with-persistence.d.ts.map +1 -0
- package/dist/utilities/execute-with-persistence.js +60 -0
- package/dist/utilities/execute-with-persistence.js.map +1 -0
- package/dist/utilities/execute-with-timeout.d.ts +6 -0
- package/dist/utilities/execute-with-timeout.d.ts.map +1 -0
- package/dist/utilities/execute-with-timeout.js +28 -0
- package/dist/utilities/execute-with-timeout.js.map +1 -0
- package/dist/utilities/execute-workflow-graph.d.ts +3 -0
- package/dist/utilities/execute-workflow-graph.d.ts.map +1 -0
- package/dist/utilities/execute-workflow-graph.js +439 -0
- package/dist/utilities/execute-workflow-graph.js.map +1 -0
- package/dist/utilities/extract-common-request-config-options.d.ts +3 -0
- package/dist/utilities/extract-common-request-config-options.d.ts.map +1 -0
- package/dist/utilities/extract-common-request-config-options.js +12 -0
- package/dist/utilities/extract-common-request-config-options.js.map +1 -0
- package/dist/utilities/fn-exec.d.ts +3 -0
- package/dist/utilities/fn-exec.d.ts.map +1 -0
- package/dist/utilities/fn-exec.js +66 -0
- package/dist/utilities/fn-exec.js.map +1 -0
- package/dist/utilities/format-log-context.d.ts +3 -0
- package/dist/utilities/format-log-context.d.ts.map +1 -0
- package/dist/utilities/format-log-context.js +19 -0
- package/dist/utilities/format-log-context.js.map +1 -0
- package/dist/utilities/function-cache-manager.d.ts +32 -0
- package/dist/utilities/function-cache-manager.d.ts.map +1 -0
- package/dist/utilities/function-cache-manager.js +172 -0
- package/dist/utilities/function-cache-manager.js.map +1 -0
- package/dist/utilities/generate-axios-request-config.d.ts +12 -0
- package/dist/utilities/generate-axios-request-config.d.ts.map +1 -0
- package/dist/utilities/generate-axios-request-config.js +14 -0
- package/dist/utilities/generate-axios-request-config.js.map +1 -0
- package/dist/utilities/get-new-delay-time.d.ts +3 -0
- package/dist/utilities/get-new-delay-time.d.ts.map +1 -0
- package/dist/utilities/get-new-delay-time.js +26 -0
- package/dist/utilities/get-new-delay-time.js.map +1 -0
- package/dist/utilities/hash-utils.d.ts +4 -0
- package/dist/utilities/hash-utils.d.ts.map +1 -0
- package/dist/utilities/hash-utils.js +24 -0
- package/dist/utilities/hash-utils.js.map +1 -0
- package/dist/utilities/index.d.ts +37 -0
- package/dist/utilities/index.d.ts.map +1 -0
- package/dist/utilities/index.js +37 -0
- package/dist/utilities/index.js.map +1 -0
- package/dist/utilities/infrastructure-persistence.d.ts +14 -0
- package/dist/utilities/infrastructure-persistence.d.ts.map +1 -0
- package/dist/utilities/infrastructure-persistence.js +87 -0
- package/dist/utilities/infrastructure-persistence.js.map +1 -0
- package/dist/utilities/is-retryable-error.d.ts +4 -0
- package/dist/utilities/is-retryable-error.d.ts.map +1 -0
- package/dist/utilities/is-retryable-error.js +22 -0
- package/dist/utilities/is-retryable-error.js.map +1 -0
- package/dist/utilities/metrics-aggregator.d.ts +19 -0
- package/dist/utilities/metrics-aggregator.d.ts.map +1 -0
- package/dist/utilities/metrics-aggregator.js +300 -0
- package/dist/utilities/metrics-aggregator.js.map +1 -0
- package/dist/utilities/metrics-validator.d.ts +98 -0
- package/dist/utilities/metrics-validator.d.ts.map +1 -0
- package/dist/utilities/metrics-validator.js +324 -0
- package/dist/utilities/metrics-validator.js.map +1 -0
- package/dist/utilities/prepare-api-function-options.d.ts +3 -0
- package/dist/utilities/prepare-api-function-options.d.ts.map +1 -0
- package/dist/utilities/prepare-api-function-options.js +51 -0
- package/dist/utilities/prepare-api-function-options.js.map +1 -0
- package/dist/utilities/prepare-api-request-data.d.ts +3 -0
- package/dist/utilities/prepare-api-request-data.d.ts.map +1 -0
- package/dist/utilities/prepare-api-request-data.js +15 -0
- package/dist/utilities/prepare-api-request-data.js.map +1 -0
- package/dist/utilities/prepare-api-request-options.d.ts +3 -0
- package/dist/utilities/prepare-api-request-options.d.ts.map +1 -0
- package/dist/utilities/prepare-api-request-options.js +22 -0
- package/dist/utilities/prepare-api-request-options.js.map +1 -0
- package/dist/utilities/rate-limiter.d.ts +49 -0
- package/dist/utilities/rate-limiter.d.ts.map +1 -0
- package/dist/utilities/rate-limiter.js +197 -0
- package/dist/utilities/rate-limiter.js.map +1 -0
- package/dist/utilities/req-fn.d.ts +4 -0
- package/dist/utilities/req-fn.d.ts.map +1 -0
- package/dist/utilities/req-fn.js +94 -0
- package/dist/utilities/req-fn.js.map +1 -0
- package/dist/utilities/safely-execute-unknown-function.d.ts +2 -0
- package/dist/utilities/safely-execute-unknown-function.d.ts.map +1 -0
- package/dist/utilities/safely-execute-unknown-function.js +8 -0
- package/dist/utilities/safely-execute-unknown-function.js.map +1 -0
- package/dist/utilities/safely-stringify.d.ts +4 -0
- package/dist/utilities/safely-stringify.d.ts.map +1 -0
- package/dist/utilities/safely-stringify.js +13 -0
- package/dist/utilities/safely-stringify.js.map +1 -0
- package/dist/utilities/stable-buffer-replay.d.ts +3 -0
- package/dist/utilities/stable-buffer-replay.d.ts.map +1 -0
- package/dist/utilities/stable-buffer-replay.js +94 -0
- package/dist/utilities/stable-buffer-replay.js.map +1 -0
- package/dist/utilities/validate-trial-mode-probabilities.d.ts +3 -0
- package/dist/utilities/validate-trial-mode-probabilities.d.ts.map +1 -0
- package/dist/utilities/validate-trial-mode-probabilities.js +13 -0
- package/dist/utilities/validate-trial-mode-probabilities.js.map +1 -0
- package/dist/utilities/validate-workflow-graph.d.ts +7 -0
- package/dist/utilities/validate-workflow-graph.d.ts.map +1 -0
- package/dist/utilities/validate-workflow-graph.js +235 -0
- package/dist/utilities/validate-workflow-graph.js.map +1 -0
- package/dist/utilities/workflow-graph-builder.d.ts +37 -0
- package/dist/utilities/workflow-graph-builder.d.ts.map +1 -0
- package/dist/utilities/workflow-graph-builder.js +225 -0
- package/dist/utilities/workflow-graph-builder.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { InfrastructurePersistenceCoordinator } from './infrastructure-persistence.js';
|
|
2
|
+
export class RateLimiter {
|
|
3
|
+
maxRequests;
|
|
4
|
+
windowMs;
|
|
5
|
+
tokens;
|
|
6
|
+
lastRefillTime;
|
|
7
|
+
queue = [];
|
|
8
|
+
totalRequests = 0;
|
|
9
|
+
throttledRequests = 0;
|
|
10
|
+
completedRequests = 0;
|
|
11
|
+
peakQueueLength = 0;
|
|
12
|
+
totalQueueWaitTime = 0;
|
|
13
|
+
peakRequestRate = 0;
|
|
14
|
+
requestsInCurrentWindow = 0;
|
|
15
|
+
windowStartTime = Date.now();
|
|
16
|
+
persistence;
|
|
17
|
+
persistenceCoordinator;
|
|
18
|
+
initialized = false;
|
|
19
|
+
constructor(maxRequestsOrConfig, windowMs, persistence) {
|
|
20
|
+
if (typeof maxRequestsOrConfig === 'object') {
|
|
21
|
+
this.maxRequests = Math.max(1, Math.floor(maxRequestsOrConfig.maxRequests));
|
|
22
|
+
this.windowMs = Math.max(100, maxRequestsOrConfig.windowMs);
|
|
23
|
+
this.persistence = maxRequestsOrConfig.persistence;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.maxRequests = Math.max(1, Math.floor(maxRequestsOrConfig));
|
|
27
|
+
this.windowMs = Math.max(100, windowMs);
|
|
28
|
+
this.persistence = persistence;
|
|
29
|
+
}
|
|
30
|
+
this.persistenceCoordinator = this.persistence
|
|
31
|
+
? new InfrastructurePersistenceCoordinator(this.persistence, 'rate-limiter')
|
|
32
|
+
: undefined;
|
|
33
|
+
this.tokens = this.maxRequests;
|
|
34
|
+
this.lastRefillTime = Date.now();
|
|
35
|
+
}
|
|
36
|
+
async initialize() {
|
|
37
|
+
if (this.initialized)
|
|
38
|
+
return;
|
|
39
|
+
if (this.persistenceCoordinator) {
|
|
40
|
+
try {
|
|
41
|
+
const persistedState = await this.persistenceCoordinator.load();
|
|
42
|
+
if (persistedState) {
|
|
43
|
+
this.restoreState(persistedState);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.warn('stable-infra: Unable to load rate limiter state from persistence.');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
this.initialized = true;
|
|
51
|
+
}
|
|
52
|
+
restoreState(persistedState) {
|
|
53
|
+
this.tokens = persistedState.tokens;
|
|
54
|
+
this.lastRefillTime = persistedState.lastRefillTime;
|
|
55
|
+
this.totalRequests = persistedState.totalRequests;
|
|
56
|
+
this.throttledRequests = persistedState.throttledRequests;
|
|
57
|
+
this.completedRequests = persistedState.completedRequests;
|
|
58
|
+
this.peakQueueLength = persistedState.peakQueueLength;
|
|
59
|
+
this.totalQueueWaitTime = persistedState.totalQueueWaitTime;
|
|
60
|
+
this.peakRequestRate = persistedState.peakRequestRate;
|
|
61
|
+
this.requestsInCurrentWindow = persistedState.requestsInCurrentWindow;
|
|
62
|
+
this.windowStartTime = persistedState.windowStartTime;
|
|
63
|
+
}
|
|
64
|
+
getPersistedState() {
|
|
65
|
+
return {
|
|
66
|
+
tokens: this.tokens,
|
|
67
|
+
lastRefillTime: this.lastRefillTime,
|
|
68
|
+
totalRequests: this.totalRequests,
|
|
69
|
+
throttledRequests: this.throttledRequests,
|
|
70
|
+
completedRequests: this.completedRequests,
|
|
71
|
+
peakQueueLength: this.peakQueueLength,
|
|
72
|
+
totalQueueWaitTime: this.totalQueueWaitTime,
|
|
73
|
+
peakRequestRate: this.peakRequestRate,
|
|
74
|
+
requestsInCurrentWindow: this.requestsInCurrentWindow,
|
|
75
|
+
windowStartTime: this.windowStartTime
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async persistState() {
|
|
79
|
+
if (this.persistenceCoordinator) {
|
|
80
|
+
try {
|
|
81
|
+
await this.persistenceCoordinator.store(this.getPersistedState());
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.warn('stable-infra: Unable to store rate limiter state to persistence.');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
refillTokens() {
|
|
89
|
+
const now = Date.now();
|
|
90
|
+
const elapsed = now - this.lastRefillTime;
|
|
91
|
+
if (elapsed >= this.windowMs) {
|
|
92
|
+
const windowsPassed = Math.floor(elapsed / this.windowMs);
|
|
93
|
+
this.tokens = Math.min(this.maxRequests, this.tokens + (windowsPassed * this.maxRequests));
|
|
94
|
+
this.lastRefillTime = now;
|
|
95
|
+
this.requestsInCurrentWindow = 0;
|
|
96
|
+
this.windowStartTime = now;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async acquire() {
|
|
100
|
+
this.totalRequests++;
|
|
101
|
+
this.refillTokens();
|
|
102
|
+
if (this.tokens > 0) {
|
|
103
|
+
this.tokens--;
|
|
104
|
+
this.requestsInCurrentWindow++;
|
|
105
|
+
this.peakRequestRate = Math.max(this.peakRequestRate, this.requestsInCurrentWindow);
|
|
106
|
+
this.persistState();
|
|
107
|
+
return Promise.resolve();
|
|
108
|
+
}
|
|
109
|
+
this.throttledRequests++;
|
|
110
|
+
const queueStartTime = Date.now();
|
|
111
|
+
return new Promise((resolve) => {
|
|
112
|
+
this.queue.push(() => {
|
|
113
|
+
this.totalQueueWaitTime += (Date.now() - queueStartTime);
|
|
114
|
+
resolve();
|
|
115
|
+
});
|
|
116
|
+
this.peakQueueLength = Math.max(this.peakQueueLength, this.queue.length);
|
|
117
|
+
this.persistState();
|
|
118
|
+
this.scheduleRefill();
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
scheduleRefill() {
|
|
122
|
+
const now = Date.now();
|
|
123
|
+
const timeUntilRefill = this.windowMs - (now - this.lastRefillTime);
|
|
124
|
+
if (timeUntilRefill > 0) {
|
|
125
|
+
setTimeout(() => {
|
|
126
|
+
this.refillTokens();
|
|
127
|
+
this.processQueue();
|
|
128
|
+
}, timeUntilRefill);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
processQueue() {
|
|
132
|
+
while (this.queue.length > 0 && this.tokens > 0) {
|
|
133
|
+
const next = this.queue.shift();
|
|
134
|
+
if (next) {
|
|
135
|
+
this.tokens--;
|
|
136
|
+
next();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (this.queue.length > 0) {
|
|
140
|
+
this.scheduleRefill();
|
|
141
|
+
}
|
|
142
|
+
this.persistState();
|
|
143
|
+
}
|
|
144
|
+
async execute(fn) {
|
|
145
|
+
await this.acquire();
|
|
146
|
+
try {
|
|
147
|
+
const result = await fn();
|
|
148
|
+
this.completedRequests++;
|
|
149
|
+
this.persistState();
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
this.completedRequests++;
|
|
154
|
+
this.persistState();
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async executeAll(fns) {
|
|
159
|
+
return Promise.all(fns.map(fn => this.execute(fn)));
|
|
160
|
+
}
|
|
161
|
+
getState() {
|
|
162
|
+
this.refillTokens();
|
|
163
|
+
const throttleRate = this.totalRequests > 0
|
|
164
|
+
? (this.throttledRequests / this.totalRequests) * 100
|
|
165
|
+
: 0;
|
|
166
|
+
const averageQueueWaitTime = this.throttledRequests > 0
|
|
167
|
+
? this.totalQueueWaitTime / this.throttledRequests
|
|
168
|
+
: 0;
|
|
169
|
+
const currentRate = this.requestsInCurrentWindow / ((Date.now() - this.windowStartTime) / 1000);
|
|
170
|
+
return {
|
|
171
|
+
availableTokens: this.tokens,
|
|
172
|
+
queueLength: this.queue.length,
|
|
173
|
+
maxRequests: this.maxRequests,
|
|
174
|
+
windowMs: this.windowMs,
|
|
175
|
+
totalRequests: this.totalRequests,
|
|
176
|
+
throttledRequests: this.throttledRequests,
|
|
177
|
+
completedRequests: this.completedRequests,
|
|
178
|
+
throttleRate: throttleRate,
|
|
179
|
+
peakQueueLength: this.peakQueueLength,
|
|
180
|
+
averageQueueWaitTime: averageQueueWaitTime,
|
|
181
|
+
peakRequestRate: this.peakRequestRate,
|
|
182
|
+
currentRequestRate: currentRate,
|
|
183
|
+
requestsInCurrentWindow: this.requestsInCurrentWindow
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
let globalRateLimiter = null;
|
|
188
|
+
export function getGlobalRateLimiter(maxRequests, windowMs) {
|
|
189
|
+
if (!globalRateLimiter && maxRequests !== undefined && windowMs !== undefined) {
|
|
190
|
+
globalRateLimiter = new RateLimiter(maxRequests, windowMs);
|
|
191
|
+
}
|
|
192
|
+
return globalRateLimiter;
|
|
193
|
+
}
|
|
194
|
+
export function resetGlobalRateLimiter() {
|
|
195
|
+
globalRateLimiter = null;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/utilities/rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { ReqFnResponse, TRIAL_MODE_OPTIONS, CacheConfig, ExecutionContext } from '../types/index.js';
|
|
3
|
+
export declare function reqFn<RequestDataType = any, ResponseDataType = any>(reqData: AxiosRequestConfig<RequestDataType>, resReq?: boolean, maxSerializableChars?: number, trialMode?: TRIAL_MODE_OPTIONS, cacheConfig?: CacheConfig, executionContext?: ExecutionContext): Promise<ReqFnResponse<ResponseDataType>>;
|
|
4
|
+
//# sourceMappingURL=req-fn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"req-fn.d.ts","sourceRoot":"","sources":["../../src/utilities/req-fn.ts"],"names":[],"mappings":"AAAA,OAAc,EAAc,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAMrG,wBAAsB,KAAK,CAAC,eAAe,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EACvE,OAAO,EAAE,kBAAkB,CAAC,eAAe,CAAC,EAC5C,MAAM,UAAQ,EACd,oBAAoB,SAAO,EAC3B,SAAS,GAAE,kBAAuC,EAClD,WAAW,CAAC,EAAE,WAAW,EACzB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAqG1C"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { safelyStringify } from './safely-stringify.js';
|
|
3
|
+
import { isRetryableError } from './is-retryable-error.js';
|
|
4
|
+
import { getGlobalCacheManager } from './cache-manager.js';
|
|
5
|
+
import { formatLogContext } from './format-log-context.js';
|
|
6
|
+
export async function reqFn(reqData, resReq = false, maxSerializableChars = 1000, trialMode = { enabled: false }, cacheConfig, executionContext) {
|
|
7
|
+
const startTime = Date.now();
|
|
8
|
+
let stopTime = 0;
|
|
9
|
+
const timestamp = new Date(startTime).toISOString();
|
|
10
|
+
let cacheManager = null;
|
|
11
|
+
if (cacheConfig?.enabled) {
|
|
12
|
+
cacheManager = getGlobalCacheManager(cacheConfig);
|
|
13
|
+
const cached = cacheManager.get(reqData);
|
|
14
|
+
if (cached) {
|
|
15
|
+
return {
|
|
16
|
+
ok: true,
|
|
17
|
+
isRetryable: true,
|
|
18
|
+
data: resReq ? cached.data : undefined,
|
|
19
|
+
timestamp: new Date(cached.timestamp).toISOString(),
|
|
20
|
+
executionTime: 0,
|
|
21
|
+
statusCode: cached.status,
|
|
22
|
+
fromCache: true
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
if (trialMode.enabled) {
|
|
28
|
+
const trialCondition = Math.random() <= (trialMode?.reqFailureProbability ?? 0);
|
|
29
|
+
if (trialCondition) {
|
|
30
|
+
console.error(`${formatLogContext(executionContext)}stable-infra: Request failed in trial mode.\nRequest data:\n`, safelyStringify(reqData, maxSerializableChars));
|
|
31
|
+
throw new Error('stable-infra: Request failed in trial mode.');
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
stopTime = Date.now();
|
|
35
|
+
return {
|
|
36
|
+
ok: true,
|
|
37
|
+
isRetryable: true,
|
|
38
|
+
timestamp,
|
|
39
|
+
executionTime: stopTime - startTime,
|
|
40
|
+
statusCode: 200,
|
|
41
|
+
...(resReq && { data: { trialMode } }),
|
|
42
|
+
fromCache: false
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const res = await axios.request(reqData);
|
|
47
|
+
stopTime = Date.now();
|
|
48
|
+
if (cacheManager) {
|
|
49
|
+
cacheManager.set(reqData, res.data, res.status, res.statusText, res.headers);
|
|
50
|
+
}
|
|
51
|
+
return resReq
|
|
52
|
+
? {
|
|
53
|
+
ok: true,
|
|
54
|
+
isRetryable: true,
|
|
55
|
+
data: res?.data,
|
|
56
|
+
timestamp,
|
|
57
|
+
executionTime: stopTime - startTime,
|
|
58
|
+
statusCode: res?.status || 200,
|
|
59
|
+
fromCache: false
|
|
60
|
+
}
|
|
61
|
+
: {
|
|
62
|
+
ok: true,
|
|
63
|
+
isRetryable: true,
|
|
64
|
+
timestamp,
|
|
65
|
+
executionTime: stopTime - startTime,
|
|
66
|
+
statusCode: res?.status || 200,
|
|
67
|
+
fromCache: false
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
stopTime = Date.now();
|
|
72
|
+
if (axios.isCancel(e)) {
|
|
73
|
+
return {
|
|
74
|
+
ok: false,
|
|
75
|
+
error: 'stable-infra: Request was cancelled.',
|
|
76
|
+
isRetryable: false,
|
|
77
|
+
timestamp,
|
|
78
|
+
executionTime: stopTime - startTime,
|
|
79
|
+
statusCode: e?.response?.status || 0,
|
|
80
|
+
fromCache: false
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
ok: false,
|
|
85
|
+
error: `stable-infra: ${e?.response?.data ?? e?.message}`,
|
|
86
|
+
isRetryable: isRetryableError(e, trialMode),
|
|
87
|
+
timestamp,
|
|
88
|
+
executionTime: stopTime - startTime,
|
|
89
|
+
statusCode: e?.response?.status || 0,
|
|
90
|
+
fromCache: false
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=req-fn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"req-fn.js","sourceRoot":"","sources":["../../src/utilities/req-fn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safely-execute-unknown-function.d.ts","sourceRoot":"","sources":["../../src/utilities/safely-execute-unknown-function.ts"],"names":[],"mappings":"AAAA,wBAAsB,4BAA4B,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,gBAM7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safely-execute-unknown-function.js","sourceRoot":"","sources":["../../src/utilities/safely-execute-unknown-function.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,CAAW,EAAE,GAAG,IAAW;IAC5E,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1B,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;QAC9B,MAAM,MAAM,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safely-stringify.d.ts","sourceRoot":"","sources":["../../src/utilities/safely-stringify.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAAE,SAAS,SAAO,GAAG,MAAM,CAUtF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function safelyStringify(data, maxLength = 1000) {
|
|
2
|
+
try {
|
|
3
|
+
const str = JSON.stringify(data);
|
|
4
|
+
if (maxLength < 0) {
|
|
5
|
+
maxLength = 1000;
|
|
6
|
+
}
|
|
7
|
+
return str.length > maxLength ? str.slice(0, maxLength) + '...' : str;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return '[Unserializable data]';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=safely-stringify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safely-stringify.js","sourceRoot":"","sources":["../../src/utilities/safely-stringify.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,IAA4B,EAAE,SAAS,GAAG,IAAI;IAC5E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,uBAAuB,CAAC;IACjC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stable-buffer-replay.d.ts","sourceRoot":"","sources":["../../src/utilities/stable-buffer-replay.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,yBAAyB,EACzB,wBAAwB,EAGzB,MAAM,mBAAmB,CAAC;AAsC3B,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CA8EnC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { StableBuffer } from '../core/stable-buffer.js';
|
|
2
|
+
import { isStableBuffer } from './buffer-utils.js';
|
|
3
|
+
const resolveBuffer = (buffer, initialState) => {
|
|
4
|
+
if (isStableBuffer(buffer)) {
|
|
5
|
+
return buffer;
|
|
6
|
+
}
|
|
7
|
+
if (buffer && typeof buffer === 'object') {
|
|
8
|
+
return new StableBuffer({ initialState: buffer });
|
|
9
|
+
}
|
|
10
|
+
return new StableBuffer({ initialState: initialState ?? {} });
|
|
11
|
+
};
|
|
12
|
+
const resolveTimestamp = (value) => {
|
|
13
|
+
if (!value)
|
|
14
|
+
return 0;
|
|
15
|
+
const parsed = Date.parse(value);
|
|
16
|
+
return Number.isNaN(parsed) ? 0 : parsed;
|
|
17
|
+
};
|
|
18
|
+
const orderLogs = (logs) => {
|
|
19
|
+
return [...logs].sort((a, b) => {
|
|
20
|
+
const byStarted = resolveTimestamp(a.startedAt) - resolveTimestamp(b.startedAt);
|
|
21
|
+
if (byStarted !== 0)
|
|
22
|
+
return byStarted;
|
|
23
|
+
const byQueued = resolveTimestamp(a.queuedAt) - resolveTimestamp(b.queuedAt);
|
|
24
|
+
if (byQueued !== 0)
|
|
25
|
+
return byQueued;
|
|
26
|
+
return (a.transactionId || '').localeCompare(b.transactionId || '');
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const resolveHookHandler = (handlerMap, hookName) => {
|
|
30
|
+
if (!hookName)
|
|
31
|
+
return undefined;
|
|
32
|
+
return handlerMap[hookName];
|
|
33
|
+
};
|
|
34
|
+
export async function replayStableBufferTransactions(options) {
|
|
35
|
+
const { logs, handlers, buffer, initialState, allowUnknownHooks = false, dedupe = true, activityFilter, sort = true, onApply, onSkip, onError } = options;
|
|
36
|
+
const resolvedBuffer = resolveBuffer(buffer, initialState);
|
|
37
|
+
const orderedLogs = sort ? orderLogs(logs) : logs;
|
|
38
|
+
const appliedIds = new Set();
|
|
39
|
+
let applied = 0;
|
|
40
|
+
let skipped = 0;
|
|
41
|
+
const errors = [];
|
|
42
|
+
for (const log of orderedLogs) {
|
|
43
|
+
if (activityFilter && !activityFilter(log)) {
|
|
44
|
+
skipped += 1;
|
|
45
|
+
onSkip?.(log, 'filtered');
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (dedupe && log.transactionId && appliedIds.has(log.transactionId)) {
|
|
49
|
+
skipped += 1;
|
|
50
|
+
onSkip?.(log, 'duplicate');
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const handler = resolveHookHandler(handlers, log.hookName);
|
|
54
|
+
if (!handler) {
|
|
55
|
+
if (!allowUnknownHooks) {
|
|
56
|
+
const error = new Error(`No replay handler registered for hook '${log.hookName ?? 'unknown'}'`);
|
|
57
|
+
errors.push({ log, error });
|
|
58
|
+
onError?.(log, error);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
skipped += 1;
|
|
62
|
+
onSkip?.(log, 'missing-handler');
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const transactionOptions = {
|
|
66
|
+
activity: 'replay',
|
|
67
|
+
hookName: log.hookName,
|
|
68
|
+
hookParams: log.hookParams,
|
|
69
|
+
workflowId: log.workflowId,
|
|
70
|
+
branchId: log.branchId,
|
|
71
|
+
phaseId: log.phaseId,
|
|
72
|
+
requestId: log.requestId
|
|
73
|
+
};
|
|
74
|
+
try {
|
|
75
|
+
await resolvedBuffer.run((state) => handler(state, log), transactionOptions);
|
|
76
|
+
applied += 1;
|
|
77
|
+
if (dedupe && log.transactionId) {
|
|
78
|
+
appliedIds.add(log.transactionId);
|
|
79
|
+
}
|
|
80
|
+
onApply?.(log);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
errors.push({ log, error });
|
|
84
|
+
onError?.(log, error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
buffer: resolvedBuffer,
|
|
89
|
+
applied,
|
|
90
|
+
skipped,
|
|
91
|
+
errors
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=stable-buffer-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stable-buffer-replay.js","sourceRoot":"","sources":["../../src/utilities/stable-buffer-replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-trial-mode-probabilities.d.ts","sourceRoot":"","sources":["../../src/utilities/validate-trial-mode-probabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,kBAAkB,QAe3E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function validateTrialModeProbabilities(trialMode) {
|
|
2
|
+
if (trialMode.enabled) {
|
|
3
|
+
const reqFailureProbability = trialMode.reqFailureProbability ?? 0;
|
|
4
|
+
const retryFailureProbability = trialMode.retryFailureProbability ?? 0;
|
|
5
|
+
if (reqFailureProbability < 0 || reqFailureProbability > 1) {
|
|
6
|
+
throw new Error('stable-infra: Unable to proceed as request failure probability must be between 0 and 1.');
|
|
7
|
+
}
|
|
8
|
+
if (retryFailureProbability < 0 || retryFailureProbability > 1) {
|
|
9
|
+
throw new Error('stable-infra: Unable to proceed as retry failure probability must be between 0 and 1.');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=validate-trial-mode-probabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-trial-mode-probabilities.js","sourceRoot":"","sources":["../../src/utilities/validate-trial-mode-probabilities.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,8BAA8B,CAAC,SAA6B;IAC1E,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,qBAAqB,GAAG,SAAS,CAAC,qBAAqB,IAAI,CAAC,CAAC;QACnE,MAAM,uBAAuB,GAAG,SAAS,CAAC,uBAAuB,IAAI,CAAC,CAAC;QACvE,IAAI,qBAAqB,GAAG,CAAC,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;QACJ,CAAC;QACD,IAAI,uBAAuB,GAAG,CAAC,IAAI,uBAAuB,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { WorkflowGraph, WorkflowGraphValidationResult } from '../types/index.js';
|
|
2
|
+
export declare function validateWorkflowGraph<RequestDataType = any, ResponseDataType = any, FunctionArgsType extends any[] = any, FunctionReturnType = any>(graph: WorkflowGraph<RequestDataType, ResponseDataType, FunctionArgsType, FunctionReturnType>): WorkflowGraphValidationResult;
|
|
3
|
+
export declare function detectCycles<RequestDataType = any, ResponseDataType = any, FunctionArgsType extends any[] = any[], FunctionReturnType = any>(graph: WorkflowGraph<RequestDataType, ResponseDataType, FunctionArgsType, FunctionReturnType>): string[][];
|
|
4
|
+
export declare function detectUnreachableNodes<RequestDataType = any, ResponseDataType = any, FunctionArgsType extends any[] = any[], FunctionReturnType = any>(graph: WorkflowGraph<RequestDataType, ResponseDataType, FunctionArgsType, FunctionReturnType>): string[];
|
|
5
|
+
export declare function detectOrphanNodes<RequestDataType = any, ResponseDataType = any, FunctionArgsType extends any[] = any[], FunctionReturnType = any>(graph: WorkflowGraph<RequestDataType, ResponseDataType, FunctionArgsType, FunctionReturnType>): string[];
|
|
6
|
+
export declare function calculateGraphDepth<RequestDataType = any, ResponseDataType = any, FunctionArgsType extends any[] = any[], FunctionReturnType = any>(graph: WorkflowGraph<RequestDataType, ResponseDataType, FunctionArgsType, FunctionReturnType>): number;
|
|
7
|
+
//# sourceMappingURL=validate-workflow-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-workflow-graph.d.ts","sourceRoot":"","sources":["../../src/utilities/validate-workflow-graph.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,6BAA6B,EAE9B,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,qBAAqB,CAAC,eAAe,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,gBAAgB,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,kBAAkB,GAAG,GAAG,EACjJ,KAAK,EAAE,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,GAC5F,6BAA6B,CA0D/B;AAiED,wBAAgB,YAAY,CAAC,eAAe,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,gBAAgB,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,kBAAkB,GAAG,GAAG,EAC1I,KAAK,EAAE,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,GAC5F,MAAM,EAAE,EAAE,CAyCZ;AAED,wBAAgB,sBAAsB,CAAC,eAAe,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,gBAAgB,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,kBAAkB,GAAG,GAAG,EACpJ,KAAK,EAAE,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,GAC5F,MAAM,EAAE,CAoDV;AAED,wBAAgB,iBAAiB,CAAC,eAAe,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,gBAAgB,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,kBAAkB,GAAG,GAAG,EAC/I,KAAK,EAAE,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,GAC5F,MAAM,EAAE,CA+BV;AAED,wBAAgB,mBAAmB,CAAC,eAAe,GAAG,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,gBAAgB,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,kBAAkB,GAAG,GAAG,EACjJ,KAAK,EAAE,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,GAC5F,MAAM,CA4BR"}
|