@emmvish/stable-request 2.7.0 → 2.7.1
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/package.json +1 -1
- package/dist/runner/index.d.ts +0 -2
- package/dist/runner/index.d.ts.map +0 -1
- package/dist/runner/index.js +0 -139
- package/dist/runner/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emmvish/stable-request",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"description": "A production-grade Workflow Execution Engine for Node.js that transforms unreliable API calls into resilient, observable, and sophisticated multi-phase workflows with intelligent retry strategies, circuit breakers, and advanced execution patterns.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/dist/runner/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":""}
|
package/dist/runner/index.js
DELETED
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { promises as fs } from 'node:fs';
|
|
2
|
-
import { statSync } from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { pathToFileURL } from 'node:url';
|
|
5
|
-
import { RunnerJobs } from '../enums/index.js';
|
|
6
|
-
import { stableRequest, stableFunction, stableApiGateway, stableWorkflow, stableWorkflowGraph } from '../core/index.js';
|
|
7
|
-
const CONFIG_PATH = process.env.CONFIG_PATH || '';
|
|
8
|
-
const OUTPUT_PATH_ENV = process.env.OUTPUT_PATH || '';
|
|
9
|
-
const POLL_INTERVAL_MS = Number(process.env.POLL_INTERVAL_MS || 2000);
|
|
10
|
-
const RUN_ON_START = process.env.RUN_ON_START !== 'false';
|
|
11
|
-
const MAX_RUNS = Number(process.env.MAX_RUNS || 0);
|
|
12
|
-
if (!CONFIG_PATH) {
|
|
13
|
-
console.error('stable-request runner: CONFIG_PATH env var is required.');
|
|
14
|
-
process.exit(1);
|
|
15
|
-
}
|
|
16
|
-
let lastMtimeMs = 0;
|
|
17
|
-
let running = false;
|
|
18
|
-
let pending = false;
|
|
19
|
-
let runCount = 0;
|
|
20
|
-
let currentJobId = null;
|
|
21
|
-
const resolveOutputPath = (config) => {
|
|
22
|
-
return config?.outputPath || OUTPUT_PATH_ENV || path.resolve(process.cwd(), 'output', 'result.json');
|
|
23
|
-
};
|
|
24
|
-
const loadConfig = async () => {
|
|
25
|
-
const ext = path.extname(CONFIG_PATH).toLowerCase();
|
|
26
|
-
if (ext === '.json') {
|
|
27
|
-
const raw = await fs.readFile(CONFIG_PATH, 'utf-8');
|
|
28
|
-
return JSON.parse(raw);
|
|
29
|
-
}
|
|
30
|
-
const url = pathToFileURL(CONFIG_PATH);
|
|
31
|
-
url.searchParams.set('t', Date.now().toString());
|
|
32
|
-
const mod = await import(url.toString());
|
|
33
|
-
return (mod.default || mod);
|
|
34
|
-
};
|
|
35
|
-
const writeOutput = async (outputPath, payload) => {
|
|
36
|
-
await fs.mkdir(path.dirname(outputPath), { recursive: true });
|
|
37
|
-
let existing = [];
|
|
38
|
-
try {
|
|
39
|
-
const raw = await fs.readFile(outputPath, 'utf-8');
|
|
40
|
-
existing = raw.trim().length > 0 ? JSON.parse(raw) : [];
|
|
41
|
-
}
|
|
42
|
-
catch (error) {
|
|
43
|
-
existing = [];
|
|
44
|
-
}
|
|
45
|
-
const outputArray = Array.isArray(existing) ? existing : [existing];
|
|
46
|
-
outputArray.push(payload);
|
|
47
|
-
await fs.writeFile(outputPath, JSON.stringify(outputArray, null, 2), 'utf-8');
|
|
48
|
-
};
|
|
49
|
-
const executeJob = async (job) => {
|
|
50
|
-
switch (job.kind) {
|
|
51
|
-
case RunnerJobs.STABLE_REQUEST:
|
|
52
|
-
return stableRequest(job.options);
|
|
53
|
-
case RunnerJobs.STABLE_FUNCTION:
|
|
54
|
-
return stableFunction(job.options);
|
|
55
|
-
case RunnerJobs.STABLE_API_GATEWAY:
|
|
56
|
-
return job.functions
|
|
57
|
-
? stableApiGateway(job.requests, job.functions, job.options)
|
|
58
|
-
: stableApiGateway(job.requests, job.options);
|
|
59
|
-
case RunnerJobs.STABLE_WORKFLOW:
|
|
60
|
-
return stableWorkflow(job.phases, job.options || {});
|
|
61
|
-
case RunnerJobs.STABLE_WORKFLOW_GRAPH:
|
|
62
|
-
return stableWorkflowGraph(job.graph, job.options || {});
|
|
63
|
-
default:
|
|
64
|
-
throw new Error(`stable-request runner: Unsupported job kind: ${job.kind}`);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
const runOnce = async () => {
|
|
68
|
-
if (running) {
|
|
69
|
-
pending = true;
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
running = true;
|
|
73
|
-
const startedAt = new Date().toISOString();
|
|
74
|
-
const startedMs = Date.now();
|
|
75
|
-
try {
|
|
76
|
-
const config = await loadConfig();
|
|
77
|
-
const outputPath = resolveOutputPath(config);
|
|
78
|
-
if (!config.job) {
|
|
79
|
-
throw new Error('stable-request runner: config.job is required.');
|
|
80
|
-
}
|
|
81
|
-
const result = await executeJob(config.job);
|
|
82
|
-
const completedAt = new Date().toISOString();
|
|
83
|
-
if (currentJobId && currentJobId !== config.jobId) {
|
|
84
|
-
console.warn(`stable-request runner: Job ID changed from ${currentJobId} to ${config.jobId}`);
|
|
85
|
-
}
|
|
86
|
-
currentJobId = config.jobId ?? null;
|
|
87
|
-
await writeOutput(outputPath, {
|
|
88
|
-
currentJobId,
|
|
89
|
-
startedAt,
|
|
90
|
-
completedAt,
|
|
91
|
-
durationMs: Date.now() - startedMs,
|
|
92
|
-
result
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
const outputPath = resolveOutputPath();
|
|
97
|
-
await writeOutput(outputPath, {
|
|
98
|
-
currentJobId,
|
|
99
|
-
completedAt: new Date().toISOString(),
|
|
100
|
-
durationMs: Date.now() - startedMs,
|
|
101
|
-
error: {
|
|
102
|
-
message: error?.message || String(error),
|
|
103
|
-
stack: error?.stack
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
finally {
|
|
108
|
-
runCount++;
|
|
109
|
-
running = false;
|
|
110
|
-
if (pending) {
|
|
111
|
-
pending = false;
|
|
112
|
-
await runOnce();
|
|
113
|
-
}
|
|
114
|
-
if (MAX_RUNS > 0 && runCount >= MAX_RUNS) {
|
|
115
|
-
process.exit(0);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
const tick = async () => {
|
|
120
|
-
try {
|
|
121
|
-
const stat = statSync(CONFIG_PATH);
|
|
122
|
-
if (stat.mtimeMs > lastMtimeMs) {
|
|
123
|
-
lastMtimeMs = stat.mtimeMs;
|
|
124
|
-
await runOnce();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
console.error('stable-request runner: unable to read CONFIG_PATH.', error?.message || error);
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
if (RUN_ON_START) {
|
|
132
|
-
runOnce().catch((error) => {
|
|
133
|
-
console.error('stable-request runner: initial run failed.', error);
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
setInterval(tick, Math.max(250, POLL_INTERVAL_MS));
|
|
137
|
-
process.on('SIGINT', () => process.exit(0));
|
|
138
|
-
process.on('SIGTERM', () => process.exit(0));
|
|
139
|
-
//# sourceMappingURL=index.js.map
|
package/dist/runner/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"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"}
|