@emmvish/stable-request 2.8.4 → 3.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 +1 -1
- package/README.md +1153 -2319
- package/dist/constants/index.d.ts +0 -10
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +0 -113
- package/dist/constants/index.js.map +1 -1
- package/dist/core/index.d.ts +0 -5
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +0 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/stable-request.d.ts.map +1 -1
- package/dist/core/stable-request.js +22 -7
- package/dist/core/stable-request.js.map +1 -1
- package/dist/enums/index.d.ts +0 -37
- package/dist/enums/index.d.ts.map +1 -1
- package/dist/enums/index.js +0 -43
- package/dist/enums/index.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -3
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +100 -1135
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utilities/index.d.ts +0 -18
- package/dist/utilities/index.d.ts.map +1 -1
- package/dist/utilities/index.js +0 -18
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/infrastructure-persistence.d.ts +0 -1
- package/dist/utilities/infrastructure-persistence.d.ts.map +1 -1
- package/dist/utilities/infrastructure-persistence.js +12 -15
- package/dist/utilities/infrastructure-persistence.js.map +1 -1
- package/dist/utilities/metrics-aggregator.d.ts +2 -13
- package/dist/utilities/metrics-aggregator.d.ts.map +1 -1
- package/dist/utilities/metrics-aggregator.js +9 -251
- package/dist/utilities/metrics-aggregator.js.map +1 -1
- package/dist/utilities/metrics-validator.d.ts +6 -76
- package/dist/utilities/metrics-validator.d.ts.map +1 -1
- package/dist/utilities/metrics-validator.js +12 -181
- package/dist/utilities/metrics-validator.js.map +1 -1
- package/dist/utilities/validate-trial-mode-probabilities.js +2 -2
- package/dist/utilities/validate-trial-mode-probabilities.js.map +1 -1
- package/package.json +20 -24
- package/dist/core/stable-api-gateway.d.ts +0 -4
- package/dist/core/stable-api-gateway.d.ts.map +0 -1
- package/dist/core/stable-api-gateway.js +0 -136
- package/dist/core/stable-api-gateway.js.map +0 -1
- package/dist/core/stable-function.d.ts +0 -11
- package/dist/core/stable-function.d.ts.map +0 -1
- package/dist/core/stable-function.js +0 -340
- package/dist/core/stable-function.js.map +0 -1
- package/dist/core/stable-scheduler.d.ts +0 -71
- package/dist/core/stable-scheduler.d.ts.map +0 -1
- package/dist/core/stable-scheduler.js +0 -768
- package/dist/core/stable-scheduler.js.map +0 -1
- package/dist/core/stable-workflow-graph.d.ts +0 -3
- package/dist/core/stable-workflow-graph.d.ts.map +0 -1
- package/dist/core/stable-workflow-graph.js +0 -5
- package/dist/core/stable-workflow-graph.js.map +0 -1
- package/dist/core/stable-workflow.d.ts +0 -3
- package/dist/core/stable-workflow.d.ts.map +0 -1
- package/dist/core/stable-workflow.js +0 -362
- package/dist/core/stable-workflow.js.map +0 -1
- package/dist/stable-runner/index.d.ts +0 -2
- package/dist/stable-runner/index.d.ts.map +0 -1
- package/dist/stable-runner/index.js +0 -324
- package/dist/stable-runner/index.js.map +0 -1
- package/dist/utilities/concurrency-limiter.d.ts +0 -46
- package/dist/utilities/concurrency-limiter.d.ts.map +0 -1
- package/dist/utilities/concurrency-limiter.js +0 -172
- package/dist/utilities/concurrency-limiter.js.map +0 -1
- package/dist/utilities/execute-branch-workflow.d.ts +0 -3
- package/dist/utilities/execute-branch-workflow.d.ts.map +0 -1
- package/dist/utilities/execute-branch-workflow.js +0 -730
- package/dist/utilities/execute-branch-workflow.js.map +0 -1
- package/dist/utilities/execute-concurrently.d.ts +0 -3
- package/dist/utilities/execute-concurrently.d.ts.map +0 -1
- package/dist/utilities/execute-concurrently.js +0 -258
- package/dist/utilities/execute-concurrently.js.map +0 -1
- package/dist/utilities/execute-gateway-item.d.ts +0 -6
- package/dist/utilities/execute-gateway-item.d.ts.map +0 -1
- package/dist/utilities/execute-gateway-item.js +0 -127
- package/dist/utilities/execute-gateway-item.js.map +0 -1
- package/dist/utilities/execute-non-linear-workflow.d.ts +0 -3
- package/dist/utilities/execute-non-linear-workflow.d.ts.map +0 -1
- package/dist/utilities/execute-non-linear-workflow.js +0 -483
- package/dist/utilities/execute-non-linear-workflow.js.map +0 -1
- package/dist/utilities/execute-phase.d.ts +0 -3
- package/dist/utilities/execute-phase.d.ts.map +0 -1
- package/dist/utilities/execute-phase.js +0 -129
- package/dist/utilities/execute-phase.js.map +0 -1
- package/dist/utilities/execute-sequentially.d.ts +0 -3
- package/dist/utilities/execute-sequentially.d.ts.map +0 -1
- package/dist/utilities/execute-sequentially.js +0 -49
- package/dist/utilities/execute-sequentially.js.map +0 -1
- package/dist/utilities/execute-with-timeout.d.ts +0 -6
- package/dist/utilities/execute-with-timeout.d.ts.map +0 -1
- package/dist/utilities/execute-with-timeout.js +0 -28
- package/dist/utilities/execute-with-timeout.js.map +0 -1
- package/dist/utilities/execute-workflow-graph.d.ts +0 -3
- package/dist/utilities/execute-workflow-graph.d.ts.map +0 -1
- package/dist/utilities/execute-workflow-graph.js +0 -429
- package/dist/utilities/execute-workflow-graph.js.map +0 -1
- package/dist/utilities/extract-common-request-config-options.d.ts +0 -3
- package/dist/utilities/extract-common-request-config-options.d.ts.map +0 -1
- package/dist/utilities/extract-common-request-config-options.js +0 -12
- package/dist/utilities/extract-common-request-config-options.js.map +0 -1
- package/dist/utilities/fn-exec.d.ts +0 -3
- package/dist/utilities/fn-exec.d.ts.map +0 -1
- package/dist/utilities/fn-exec.js +0 -66
- package/dist/utilities/fn-exec.js.map +0 -1
- package/dist/utilities/function-cache-manager.d.ts +0 -32
- package/dist/utilities/function-cache-manager.d.ts.map +0 -1
- package/dist/utilities/function-cache-manager.js +0 -172
- package/dist/utilities/function-cache-manager.js.map +0 -1
- package/dist/utilities/prepare-api-function-options.d.ts +0 -3
- package/dist/utilities/prepare-api-function-options.d.ts.map +0 -1
- package/dist/utilities/prepare-api-function-options.js +0 -51
- package/dist/utilities/prepare-api-function-options.js.map +0 -1
- package/dist/utilities/prepare-api-request-data.d.ts +0 -3
- package/dist/utilities/prepare-api-request-data.d.ts.map +0 -1
- package/dist/utilities/prepare-api-request-data.js +0 -15
- package/dist/utilities/prepare-api-request-data.js.map +0 -1
- package/dist/utilities/prepare-api-request-options.d.ts +0 -3
- package/dist/utilities/prepare-api-request-options.d.ts.map +0 -1
- package/dist/utilities/prepare-api-request-options.js +0 -22
- package/dist/utilities/prepare-api-request-options.js.map +0 -1
- package/dist/utilities/rate-limiter.d.ts +0 -49
- package/dist/utilities/rate-limiter.d.ts.map +0 -1
- package/dist/utilities/rate-limiter.js +0 -197
- package/dist/utilities/rate-limiter.js.map +0 -1
- package/dist/utilities/validate-workflow-graph.d.ts +0 -7
- package/dist/utilities/validate-workflow-graph.d.ts.map +0 -1
- package/dist/utilities/validate-workflow-graph.js +0 -235
- package/dist/utilities/validate-workflow-graph.js.map +0 -1
- package/dist/utilities/workflow-graph-builder.d.ts +0 -37
- package/dist/utilities/workflow-graph-builder.d.ts.map +0 -1
- package/dist/utilities/workflow-graph-builder.js +0 -225
- package/dist/utilities/workflow-graph-builder.js.map +0 -1
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
import { RETRY_STRATEGIES, CircuitBreakerState } from '../enums/index.js';
|
|
2
|
-
import { CircuitBreaker, CircuitBreakerOpenError, executeWithPersistence, executeWithTimeout, TimeoutError, formatLogContext, getGlobalFunctionCacheManager, getNewDelayTime, delay, fnExec, safelyStringify, validateTrialModeProbabilities, MetricsAggregator, MetricsValidator, RateLimiter, ConcurrencyLimiter } from '../utilities/index.js';
|
|
3
|
-
export async function stableFunction(options) {
|
|
4
|
-
const { preExecution = {
|
|
5
|
-
preExecutionHook: ({ inputParams, commonBuffer }) => { },
|
|
6
|
-
preExecutionHookParams: {},
|
|
7
|
-
applyPreExecutionConfigOverride: false,
|
|
8
|
-
continueOnPreExecutionHookFailure: false,
|
|
9
|
-
}, commonBuffer = {}, executionContext, throwOnFailedErrorAnalysis = false } = options;
|
|
10
|
-
let preExecutionResult;
|
|
11
|
-
try {
|
|
12
|
-
preExecutionResult = await executeWithPersistence(preExecution?.preExecutionHook, {
|
|
13
|
-
inputParams: preExecution?.preExecutionHookParams,
|
|
14
|
-
commonBuffer,
|
|
15
|
-
stableFunctionOptions: options
|
|
16
|
-
}, options.statePersistence, executionContext || {}, commonBuffer);
|
|
17
|
-
if (preExecution?.applyPreExecutionConfigOverride) {
|
|
18
|
-
const finalOptions = {
|
|
19
|
-
...options,
|
|
20
|
-
...preExecutionResult
|
|
21
|
-
};
|
|
22
|
-
Object.assign(options, finalOptions);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
if (!preExecution?.continueOnPreExecutionHookFailure) {
|
|
27
|
-
if (throwOnFailedErrorAnalysis) {
|
|
28
|
-
throw e;
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
success: false,
|
|
32
|
-
error: e.message || 'Pre-execution hook failed',
|
|
33
|
-
metrics: {
|
|
34
|
-
totalAttempts: 0,
|
|
35
|
-
successfulAttempts: 0,
|
|
36
|
-
failedAttempts: 0,
|
|
37
|
-
totalExecutionTime: 0,
|
|
38
|
-
averageAttemptTime: 0
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const { fn, args, responseAnalyzer = ({ data, trialMode = { enabled: false } }) => true, returnResult = false, attempts: givenAttempts = 1, performAllAttempts = false, wait = 1000, maxAllowedWait = 60000, retryStrategy = RETRY_STRATEGIES.FIXED, logAllErrors = false, handleErrors = ({ fn, args, errorLog, maxSerializableChars = 1000, executionContext }) => console.error(`${formatLogContext(executionContext)}stable-request:\n`, `Function: ${fn.name || 'anonymous'}\n`, 'Args:\n', safelyStringify(args, maxSerializableChars), '\nError log:\n', safelyStringify(errorLog, maxSerializableChars)), logAllSuccessfulAttempts = false, handleSuccessfulAttemptData = ({ fn, args, successfulAttemptData, maxSerializableChars = 1000, executionContext }) => console.info(`${formatLogContext(executionContext)}stable-request:\n`, `Function: ${fn.name || 'anonymous'}\n`, 'Args:\n', safelyStringify(args, maxSerializableChars), '\nSuccessful attempt:\n', safelyStringify(successfulAttemptData, maxSerializableChars)), maxSerializableChars = 1000, finalErrorAnalyzer = ({ fn, args, error, trialMode = { enabled: false } }) => false, trialMode = { enabled: false }, hookParams = {}, cache, circuitBreaker, jitter = 0, statePersistence, rateLimit, maxConcurrentRequests, executionTimeout } = options;
|
|
44
|
-
let attempts = givenAttempts;
|
|
45
|
-
const functionStartTime = Date.now();
|
|
46
|
-
const errorLogs = [];
|
|
47
|
-
const successfulAttemptsList = [];
|
|
48
|
-
let totalAttemptsMade = 0;
|
|
49
|
-
let successfulAttemptsCount = 0;
|
|
50
|
-
const buildResult = (success, data, error) => {
|
|
51
|
-
const totalExecutionTime = Date.now() - functionStartTime;
|
|
52
|
-
const failedAttemptsCount = totalAttemptsMade - successfulAttemptsCount;
|
|
53
|
-
const result = {
|
|
54
|
-
success,
|
|
55
|
-
...(data !== undefined && { data }),
|
|
56
|
-
...(error && { error }),
|
|
57
|
-
...(errorLogs.length > 0 && { errorLogs }),
|
|
58
|
-
...(successfulAttemptsList.length > 0 && { successfulAttempts: successfulAttemptsList }),
|
|
59
|
-
metrics: {
|
|
60
|
-
totalAttempts: totalAttemptsMade,
|
|
61
|
-
successfulAttempts: successfulAttemptsCount,
|
|
62
|
-
failedAttempts: failedAttemptsCount,
|
|
63
|
-
totalExecutionTime,
|
|
64
|
-
averageAttemptTime: totalAttemptsMade > 0 ? totalExecutionTime / totalAttemptsMade : 0,
|
|
65
|
-
infrastructureMetrics: {
|
|
66
|
-
...(circuitBreakerInstance && { circuitBreaker: MetricsAggregator.extractCircuitBreakerMetrics(circuitBreakerInstance) }),
|
|
67
|
-
...(cache && getGlobalFunctionCacheManager() && { cache: MetricsAggregator.extractFunctionCacheMetrics(getGlobalFunctionCacheManager()) }),
|
|
68
|
-
...(rateLimiterInstance && { rateLimiter: MetricsAggregator.extractRateLimiterMetrics(rateLimiterInstance) }),
|
|
69
|
-
...(concurrencyLimiterInstance && { concurrencyLimiter: MetricsAggregator.extractConcurrencyLimiterMetrics(concurrencyLimiterInstance) })
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
if (options.metricsGuardrails && result.metrics) {
|
|
74
|
-
result.metrics.validation = MetricsValidator.validateRequestMetrics(result.metrics, options.metricsGuardrails);
|
|
75
|
-
}
|
|
76
|
-
return result;
|
|
77
|
-
};
|
|
78
|
-
let circuitBreakerInstance = null;
|
|
79
|
-
if (circuitBreaker) {
|
|
80
|
-
circuitBreakerInstance = circuitBreaker instanceof CircuitBreaker
|
|
81
|
-
? circuitBreaker
|
|
82
|
-
: new CircuitBreaker(circuitBreaker);
|
|
83
|
-
}
|
|
84
|
-
let rateLimiterInstance = null;
|
|
85
|
-
if (rateLimit && rateLimit.maxRequests > 0 && rateLimit.windowMs > 0) {
|
|
86
|
-
rateLimiterInstance = new RateLimiter(rateLimit.maxRequests, rateLimit.windowMs);
|
|
87
|
-
}
|
|
88
|
-
let concurrencyLimiterInstance = null;
|
|
89
|
-
if (maxConcurrentRequests && maxConcurrentRequests > 0) {
|
|
90
|
-
concurrencyLimiterInstance = new ConcurrencyLimiter(maxConcurrentRequests);
|
|
91
|
-
}
|
|
92
|
-
const executeFunction = async () => {
|
|
93
|
-
try {
|
|
94
|
-
validateTrialModeProbabilities(trialMode);
|
|
95
|
-
let res = {
|
|
96
|
-
ok: false,
|
|
97
|
-
isRetryable: true,
|
|
98
|
-
timestamp: new Date().toISOString(),
|
|
99
|
-
executionTime: 0
|
|
100
|
-
};
|
|
101
|
-
const maxAttempts = attempts;
|
|
102
|
-
let lastSuccessfulAttemptData = undefined;
|
|
103
|
-
let hadAtLeastOneSuccess = false;
|
|
104
|
-
do {
|
|
105
|
-
attempts--;
|
|
106
|
-
const currentAttempt = maxAttempts - attempts;
|
|
107
|
-
totalAttemptsMade = currentAttempt;
|
|
108
|
-
if (circuitBreakerInstance) {
|
|
109
|
-
const cbConfig = circuitBreakerInstance.getState().config;
|
|
110
|
-
if (cbConfig.trackIndividualAttempts || currentAttempt === 1) {
|
|
111
|
-
const canExecute = await circuitBreakerInstance.canExecute();
|
|
112
|
-
if (!canExecute) {
|
|
113
|
-
throw new CircuitBreakerOpenError(`${formatLogContext(executionContext)}stable-request: Circuit breaker is ${circuitBreakerInstance.getState().state}. Function execution blocked at attempt ${currentAttempt}.`);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
const executeAttempt = async () => {
|
|
119
|
-
return await fnExec(fn, args, returnResult, maxSerializableChars, trialMode, cache, executionContext);
|
|
120
|
-
};
|
|
121
|
-
if (rateLimiterInstance && concurrencyLimiterInstance) {
|
|
122
|
-
res = await rateLimiterInstance.execute(() => concurrencyLimiterInstance.execute(executeAttempt));
|
|
123
|
-
}
|
|
124
|
-
else if (rateLimiterInstance) {
|
|
125
|
-
res = await rateLimiterInstance.execute(executeAttempt);
|
|
126
|
-
}
|
|
127
|
-
else if (concurrencyLimiterInstance) {
|
|
128
|
-
res = await concurrencyLimiterInstance.execute(executeAttempt);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
res = await executeAttempt();
|
|
132
|
-
}
|
|
133
|
-
if (res.fromCache && res.ok) {
|
|
134
|
-
if (trialMode.enabled) {
|
|
135
|
-
console.info(`${formatLogContext(executionContext)}stable-request: Response served from cache:\n`, safelyStringify(res?.data, maxSerializableChars));
|
|
136
|
-
}
|
|
137
|
-
return buildResult(true, returnResult ? res?.data : true);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
catch (attemptError) {
|
|
141
|
-
if (attemptError instanceof CircuitBreakerOpenError) {
|
|
142
|
-
throw attemptError;
|
|
143
|
-
}
|
|
144
|
-
if (circuitBreakerInstance && circuitBreakerInstance.getState().config.trackIndividualAttempts) {
|
|
145
|
-
circuitBreakerInstance.recordAttemptFailure();
|
|
146
|
-
if (circuitBreakerInstance.getState().state === CircuitBreakerState.OPEN) {
|
|
147
|
-
throw new CircuitBreakerOpenError(`${formatLogContext(executionContext)}stable-request: Circuit breaker opened after attempt ${currentAttempt}. No further retries.`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
throw attemptError;
|
|
151
|
-
}
|
|
152
|
-
const originalResOk = res.ok;
|
|
153
|
-
let performNextAttempt = false;
|
|
154
|
-
if (res.ok) {
|
|
155
|
-
try {
|
|
156
|
-
performNextAttempt = !(await executeWithPersistence(responseAnalyzer, {
|
|
157
|
-
fn,
|
|
158
|
-
args,
|
|
159
|
-
data: res?.data,
|
|
160
|
-
trialMode,
|
|
161
|
-
params: hookParams?.responseAnalyzerParams,
|
|
162
|
-
preExecutionResult,
|
|
163
|
-
commonBuffer,
|
|
164
|
-
executionContext
|
|
165
|
-
}, statePersistence, executionContext || {}, commonBuffer));
|
|
166
|
-
}
|
|
167
|
-
catch (e) {
|
|
168
|
-
console.error(`${formatLogContext(executionContext)}stable-request: Unable to analyze the response returned on attempt #${currentAttempt}. Response: ${safelyStringify(res?.data, maxSerializableChars)}`);
|
|
169
|
-
console.error(`${formatLogContext(executionContext)}stable-request: Error message provided by your responseAnalyzer: ${safelyStringify(e.message, maxSerializableChars)}`);
|
|
170
|
-
performNextAttempt = true;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
if (circuitBreakerInstance && circuitBreakerInstance.getState().config.trackIndividualAttempts) {
|
|
174
|
-
if (res.ok && !performNextAttempt) {
|
|
175
|
-
circuitBreakerInstance.recordAttemptSuccess();
|
|
176
|
-
}
|
|
177
|
-
else if (!res.ok || performNextAttempt) {
|
|
178
|
-
circuitBreakerInstance.recordAttemptFailure();
|
|
179
|
-
if (circuitBreakerInstance.getState().state === CircuitBreakerState.OPEN) {
|
|
180
|
-
throw new CircuitBreakerOpenError(`${formatLogContext(executionContext)}stable-request: Circuit breaker opened after attempt ${currentAttempt}/${maxAttempts}. Blocking further retries.`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if ((!res.ok || (res.ok && performNextAttempt)) && logAllErrors) {
|
|
185
|
-
const errorLog = {
|
|
186
|
-
timestamp: res.timestamp,
|
|
187
|
-
attempt: `${currentAttempt}/${maxAttempts}`,
|
|
188
|
-
error: res?.error ??
|
|
189
|
-
`${formatLogContext(executionContext)}stable-request: The response did not match your expectations! Response: ${safelyStringify(res?.data, maxSerializableChars)}`,
|
|
190
|
-
isRetryable: res.isRetryable,
|
|
191
|
-
executionTime: res.executionTime
|
|
192
|
-
};
|
|
193
|
-
errorLogs.push(errorLog);
|
|
194
|
-
try {
|
|
195
|
-
await executeWithPersistence(handleErrors, {
|
|
196
|
-
fn,
|
|
197
|
-
args,
|
|
198
|
-
errorLog,
|
|
199
|
-
maxSerializableChars,
|
|
200
|
-
params: hookParams?.handleErrorsParams,
|
|
201
|
-
preExecutionResult,
|
|
202
|
-
commonBuffer,
|
|
203
|
-
executionContext
|
|
204
|
-
}, statePersistence, executionContext || {}, commonBuffer);
|
|
205
|
-
}
|
|
206
|
-
catch (e) {
|
|
207
|
-
console.error(`${formatLogContext(executionContext)}stable-request: Unable to report errors due to issues with error handler! Error message provided by your handleErrors: ${safelyStringify(e.message, maxSerializableChars)}`);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
if (res.ok && !performNextAttempt) {
|
|
211
|
-
hadAtLeastOneSuccess = true;
|
|
212
|
-
lastSuccessfulAttemptData = res?.data;
|
|
213
|
-
successfulAttemptsCount++;
|
|
214
|
-
if (logAllSuccessfulAttempts) {
|
|
215
|
-
const successfulAttemptLog = {
|
|
216
|
-
attempt: `${currentAttempt}/${maxAttempts}`,
|
|
217
|
-
timestamp: res.timestamp,
|
|
218
|
-
data: res?.data,
|
|
219
|
-
executionTime: res.executionTime
|
|
220
|
-
};
|
|
221
|
-
successfulAttemptsList.push(successfulAttemptLog);
|
|
222
|
-
try {
|
|
223
|
-
await executeWithPersistence(handleSuccessfulAttemptData, {
|
|
224
|
-
fn,
|
|
225
|
-
args,
|
|
226
|
-
successfulAttemptData: successfulAttemptLog,
|
|
227
|
-
maxSerializableChars,
|
|
228
|
-
params: hookParams?.handleSuccessfulAttemptDataParams,
|
|
229
|
-
preExecutionResult,
|
|
230
|
-
commonBuffer,
|
|
231
|
-
executionContext
|
|
232
|
-
}, statePersistence, executionContext || {}, commonBuffer);
|
|
233
|
-
}
|
|
234
|
-
catch (e) {
|
|
235
|
-
console.error(`${formatLogContext(executionContext)}stable-request: Unable to report successful attempts due to issues with successful attempt data handler! Error message provided by your handleSuccessfulAttemptData: ${safelyStringify(e.message, maxSerializableChars)}`);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
if (performNextAttempt && res.isRetryable) {
|
|
240
|
-
res.ok = false;
|
|
241
|
-
}
|
|
242
|
-
if (attempts > 0 &&
|
|
243
|
-
((!originalResOk && res.isRetryable) ||
|
|
244
|
-
(originalResOk && performNextAttempt) ||
|
|
245
|
-
performAllAttempts)) {
|
|
246
|
-
await delay(getNewDelayTime(retryStrategy, wait, currentAttempt, jitter), maxAllowedWait);
|
|
247
|
-
}
|
|
248
|
-
} while (attempts > 0 &&
|
|
249
|
-
((res.isRetryable && !res.ok) || performAllAttempts));
|
|
250
|
-
if (performAllAttempts && hadAtLeastOneSuccess) {
|
|
251
|
-
if (trialMode.enabled) {
|
|
252
|
-
console.info(`${formatLogContext(executionContext)}stable-request: Final response (performAllAttempts mode):\n`, safelyStringify(lastSuccessfulAttemptData, maxSerializableChars));
|
|
253
|
-
}
|
|
254
|
-
return buildResult(true, returnResult ? lastSuccessfulAttemptData : true);
|
|
255
|
-
}
|
|
256
|
-
else if (res.ok) {
|
|
257
|
-
if (trialMode.enabled) {
|
|
258
|
-
const finalResponse = res?.data ?? lastSuccessfulAttemptData;
|
|
259
|
-
console.info(`${formatLogContext(executionContext)}stable-request: Final response:\n`, safelyStringify(finalResponse, maxSerializableChars));
|
|
260
|
-
}
|
|
261
|
-
return buildResult(true, returnResult ? (res?.data ?? lastSuccessfulAttemptData) : true);
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
const finalError = new Error(safelyStringify({
|
|
265
|
-
error: res?.error,
|
|
266
|
-
'Function': fn.name || 'anonymous',
|
|
267
|
-
'Args': args,
|
|
268
|
-
}, maxSerializableChars));
|
|
269
|
-
let errorAnalysisResult = false;
|
|
270
|
-
try {
|
|
271
|
-
errorAnalysisResult = await executeWithPersistence(finalErrorAnalyzer, {
|
|
272
|
-
fn,
|
|
273
|
-
args,
|
|
274
|
-
error: finalError,
|
|
275
|
-
trialMode,
|
|
276
|
-
params: hookParams?.finalErrorAnalyzerParams,
|
|
277
|
-
preExecutionResult,
|
|
278
|
-
commonBuffer,
|
|
279
|
-
executionContext
|
|
280
|
-
}, statePersistence, executionContext || {}, commonBuffer);
|
|
281
|
-
}
|
|
282
|
-
catch (errorAnalysisError) {
|
|
283
|
-
console.error(`${formatLogContext(executionContext)}stable-request: Unable to analyze the final error returned. Error message provided by your finalErrorAnalyzer: ${safelyStringify(errorAnalysisError.message, maxSerializableChars)}`);
|
|
284
|
-
}
|
|
285
|
-
if (throwOnFailedErrorAnalysis && !errorAnalysisResult) {
|
|
286
|
-
throw finalError;
|
|
287
|
-
}
|
|
288
|
-
return buildResult(false, undefined, res?.error || 'Function execution failed');
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
catch (e) {
|
|
292
|
-
if (trialMode.enabled) {
|
|
293
|
-
console.error(`${formatLogContext(executionContext)}stable-request: Final error:\n`, e.message);
|
|
294
|
-
}
|
|
295
|
-
let errorAnalysisResult = false;
|
|
296
|
-
try {
|
|
297
|
-
errorAnalysisResult = await executeWithPersistence(finalErrorAnalyzer, {
|
|
298
|
-
fn,
|
|
299
|
-
args,
|
|
300
|
-
error: e,
|
|
301
|
-
trialMode,
|
|
302
|
-
params: hookParams?.finalErrorAnalyzerParams,
|
|
303
|
-
preExecutionResult,
|
|
304
|
-
commonBuffer,
|
|
305
|
-
executionContext
|
|
306
|
-
}, statePersistence, executionContext || {}, commonBuffer);
|
|
307
|
-
}
|
|
308
|
-
catch (errorAnalysisError) {
|
|
309
|
-
console.error(`${formatLogContext(executionContext)}stable-request: Unable to analyze the final error returned. Error message provided by your finalErrorAnalyzer: ${safelyStringify(errorAnalysisError.message, maxSerializableChars)}`);
|
|
310
|
-
}
|
|
311
|
-
if (!errorAnalysisResult) {
|
|
312
|
-
if (throwOnFailedErrorAnalysis) {
|
|
313
|
-
throw e;
|
|
314
|
-
}
|
|
315
|
-
return buildResult(false, undefined, e.message || 'Function execution failed');
|
|
316
|
-
}
|
|
317
|
-
else {
|
|
318
|
-
return buildResult(false, undefined, e.message || 'Function execution failed');
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
};
|
|
322
|
-
try {
|
|
323
|
-
if (executionTimeout && executionTimeout > 0) {
|
|
324
|
-
return await executeWithTimeout(executeFunction(), executionTimeout, `${formatLogContext(executionContext)}stable-request: Function execution exceeded timeout of ${executionTimeout}ms`);
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
327
|
-
return await executeFunction();
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
catch (e) {
|
|
331
|
-
if (e instanceof TimeoutError) {
|
|
332
|
-
return buildResult(false, undefined, e.message);
|
|
333
|
-
}
|
|
334
|
-
if (throwOnFailedErrorAnalysis) {
|
|
335
|
-
throw e;
|
|
336
|
-
}
|
|
337
|
-
return buildResult(false, undefined, e.message || 'Function execution failed');
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
//# sourceMappingURL=stable-function.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stable-function.js","sourceRoot":"","sources":["../../src/core/stable-function.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import type { SchedulerConfig, SchedulerRetryConfig, SchedulerSchedule, SchedulerMetrics, MetricsValidationResult, SchedulerState, SchedulerJobHandler, SchedulerSharedInfrastructure } from '../types/index.js';
|
|
2
|
-
import { CircuitBreaker, RateLimiter, ConcurrencyLimiter, CacheManager } from '../utilities/index.js';
|
|
3
|
-
export declare class StableScheduler<TJob extends {
|
|
4
|
-
id?: string;
|
|
5
|
-
schedule?: SchedulerSchedule;
|
|
6
|
-
retry?: SchedulerRetryConfig;
|
|
7
|
-
executionTimeoutMs?: number;
|
|
8
|
-
}> {
|
|
9
|
-
private readonly config;
|
|
10
|
-
private readonly handler;
|
|
11
|
-
private readonly jobs;
|
|
12
|
-
private readonly queue;
|
|
13
|
-
private readonly queued;
|
|
14
|
-
private timer;
|
|
15
|
-
private persistTimer;
|
|
16
|
-
private persistQueued;
|
|
17
|
-
private runningCount;
|
|
18
|
-
private completed;
|
|
19
|
-
private failed;
|
|
20
|
-
private dropped;
|
|
21
|
-
private sequence;
|
|
22
|
-
private schedulerStartTime;
|
|
23
|
-
private totalExecutionTimeMs;
|
|
24
|
-
private totalQueueDelayMs;
|
|
25
|
-
constructor(config: SchedulerConfig, handler: SchedulerJobHandler<TJob>);
|
|
26
|
-
addJobs(jobs: TJob[]): void;
|
|
27
|
-
setJobs(jobs: TJob[]): void;
|
|
28
|
-
addJob(job: TJob): string;
|
|
29
|
-
start(): void;
|
|
30
|
-
stop(): void;
|
|
31
|
-
tick(): void;
|
|
32
|
-
getStats(): {
|
|
33
|
-
queued: number;
|
|
34
|
-
running: number;
|
|
35
|
-
completed: number;
|
|
36
|
-
failed: number;
|
|
37
|
-
dropped: number;
|
|
38
|
-
totalJobs: number;
|
|
39
|
-
};
|
|
40
|
-
getSharedInfrastructure(): SchedulerSharedInfrastructure | undefined;
|
|
41
|
-
getInfrastructureMetrics(): {
|
|
42
|
-
circuitBreaker?: ReturnType<CircuitBreaker['getState']>;
|
|
43
|
-
rateLimiter?: ReturnType<RateLimiter['getState']>;
|
|
44
|
-
concurrencyLimiter?: ReturnType<ConcurrencyLimiter['getState']>;
|
|
45
|
-
cacheManager?: ReturnType<CacheManager['getStats']>;
|
|
46
|
-
};
|
|
47
|
-
getMetrics(): {
|
|
48
|
-
metrics: SchedulerMetrics;
|
|
49
|
-
validation?: MetricsValidationResult;
|
|
50
|
-
};
|
|
51
|
-
private buildInfrastructureMetrics;
|
|
52
|
-
private validateInfrastructureMetrics;
|
|
53
|
-
getState(): SchedulerState<TJob>;
|
|
54
|
-
restoreState(state?: SchedulerState<TJob>): Promise<boolean>;
|
|
55
|
-
private dispatch;
|
|
56
|
-
private getRetryConfig;
|
|
57
|
-
private getExecutionTimeoutMs;
|
|
58
|
-
private scheduleRetryIfEnabled;
|
|
59
|
-
private withTimeout;
|
|
60
|
-
private initializeSchedule;
|
|
61
|
-
private updateNextRun;
|
|
62
|
-
private parseTimestamp;
|
|
63
|
-
private getNextCronTime;
|
|
64
|
-
private parseCronField;
|
|
65
|
-
private isValidInteger;
|
|
66
|
-
private getCronDateParts;
|
|
67
|
-
private createId;
|
|
68
|
-
private generateUuid;
|
|
69
|
-
private persistStateIfEnabled;
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=stable-scheduler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stable-scheduler.d.ts","sourceRoot":"","sources":["../../src/core/stable-scheduler.ts"],"names":[],"mappings":"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"}
|