stelo 1.0.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/LICENSE +184 -0
- package/README.md +853 -0
- package/dist/accessibility.d.ts +227 -0
- package/dist/accessibility.d.ts.map +1 -0
- package/dist/accessibility.js +602 -0
- package/dist/accessibility.js.map +1 -0
- package/dist/agent.d.ts +870 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1107 -0
- package/dist/agent.js.map +1 -0
- package/dist/audio-stream.d.ts +114 -0
- package/dist/audio-stream.d.ts.map +1 -0
- package/dist/audio-stream.js +167 -0
- package/dist/audio-stream.js.map +1 -0
- package/dist/clipboard.d.ts +99 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +352 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/config.d.ts +183 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +477 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +213 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +387 -0
- package/dist/context.js.map +1 -0
- package/dist/cortex.d.ts +548 -0
- package/dist/cortex.d.ts.map +1 -0
- package/dist/cortex.js +1479 -0
- package/dist/cortex.js.map +1 -0
- package/dist/errors.d.ts +133 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +278 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +227 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +429 -0
- package/dist/events.js.map +1 -0
- package/dist/executor.d.ts +212 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +545 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +159 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +533 -0
- package/dist/integration.js.map +1 -0
- package/dist/keyboard.d.ts +276 -0
- package/dist/keyboard.d.ts.map +1 -0
- package/dist/keyboard.js +404 -0
- package/dist/keyboard.js.map +1 -0
- package/dist/logger.d.ts +198 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +516 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware.d.ts +183 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +493 -0
- package/dist/middleware.js.map +1 -0
- package/dist/monitor.d.ts +136 -0
- package/dist/monitor.d.ts.map +1 -0
- package/dist/monitor.js +341 -0
- package/dist/monitor.js.map +1 -0
- package/dist/mouse.d.ts +290 -0
- package/dist/mouse.d.ts.map +1 -0
- package/dist/mouse.js +466 -0
- package/dist/mouse.js.map +1 -0
- package/dist/plugin.d.ts +157 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +409 -0
- package/dist/plugin.js.map +1 -0
- package/dist/process.d.ts +106 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +326 -0
- package/dist/process.js.map +1 -0
- package/dist/recorder.d.ts +100 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +258 -0
- package/dist/recorder.js.map +1 -0
- package/dist/safety.d.ts +59 -0
- package/dist/safety.d.ts.map +1 -0
- package/dist/safety.js +98 -0
- package/dist/safety.js.map +1 -0
- package/dist/scheduler.d.ts +152 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +615 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/screen.d.ts +96 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +154 -0
- package/dist/screen.js.map +1 -0
- package/dist/session.d.ts +209 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +479 -0
- package/dist/session.js.map +1 -0
- package/dist/stream.d.ts +168 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +298 -0
- package/dist/stream.js.map +1 -0
- package/dist/telemetry.d.ts +223 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +433 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +165 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/bezier.d.ts +51 -0
- package/dist/utils/bezier.d.ts.map +1 -0
- package/dist/utils/bezier.js +117 -0
- package/dist/utils/bezier.js.map +1 -0
- package/dist/utils/helpers.d.ts +90 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +143 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validation.d.ts +254 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +478 -0
- package/dist/validation.js.map +1 -0
- package/dist/vision.d.ts +719 -0
- package/dist/vision.d.ts.map +1 -0
- package/dist/vision.js +1197 -0
- package/dist/vision.js.map +1 -0
- package/dist/window.d.ts +80 -0
- package/dist/window.d.ts.map +1 -0
- package/dist/window.js +170 -0
- package/dist/window.js.map +1 -0
- package/dist/workflow.d.ts +224 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +578 -0
- package/dist/workflow.js.map +1 -0
- package/index.d.ts +840 -0
- package/index.js +495 -0
- package/package.json +91 -0
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Stelo — Telemetry & Observability
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Enterprise-grade monitoring, metrics, and event hooks for production systems.
|
|
6
|
+
// ============================================================================
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.CircuitBreaker = exports.telemetry = void 0;
|
|
9
|
+
exports.getCircuitBreakers = getCircuitBreakers;
|
|
10
|
+
// Internal state
|
|
11
|
+
let telemetryEnabled = false;
|
|
12
|
+
let metricsEnabled = false;
|
|
13
|
+
const eventHandlers = [];
|
|
14
|
+
const metricsHandlers = [];
|
|
15
|
+
const operationTimings = [];
|
|
16
|
+
const startTime = Date.now();
|
|
17
|
+
let totalOps = 0;
|
|
18
|
+
let successOps = 0;
|
|
19
|
+
let failureOps = 0;
|
|
20
|
+
/**
|
|
21
|
+
* Generate a unique event ID
|
|
22
|
+
*/
|
|
23
|
+
function generateEventId() {
|
|
24
|
+
return `ax-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Telemetry system for enterprise observability
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { telemetry } from 'stelo';
|
|
32
|
+
*
|
|
33
|
+
* // Enable telemetry
|
|
34
|
+
* telemetry.enable();
|
|
35
|
+
*
|
|
36
|
+
* // Subscribe to events
|
|
37
|
+
* telemetry.onEvent((event) => {
|
|
38
|
+
* console.log(`[${event.severity}] ${event.operation}: ${event.success}`);
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* // Get performance metrics
|
|
42
|
+
* const metrics = telemetry.getMetrics();
|
|
43
|
+
* console.log(`Ops/sec: ${metrics.opsPerSecond}`);
|
|
44
|
+
*
|
|
45
|
+
* // Run health checks
|
|
46
|
+
* const health = await telemetry.healthCheck();
|
|
47
|
+
* console.log(`System status: ${health.status}`);
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
exports.telemetry = {
|
|
51
|
+
/**
|
|
52
|
+
* Enable telemetry collection
|
|
53
|
+
*/
|
|
54
|
+
enable() {
|
|
55
|
+
telemetryEnabled = true;
|
|
56
|
+
},
|
|
57
|
+
/**
|
|
58
|
+
* Disable telemetry collection
|
|
59
|
+
*/
|
|
60
|
+
disable() {
|
|
61
|
+
telemetryEnabled = false;
|
|
62
|
+
},
|
|
63
|
+
/**
|
|
64
|
+
* Check if telemetry is enabled
|
|
65
|
+
*/
|
|
66
|
+
isEnabled() {
|
|
67
|
+
return telemetryEnabled;
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* Enable metrics collection
|
|
71
|
+
*/
|
|
72
|
+
enableMetrics() {
|
|
73
|
+
metricsEnabled = true;
|
|
74
|
+
},
|
|
75
|
+
/**
|
|
76
|
+
* Disable metrics collection
|
|
77
|
+
*/
|
|
78
|
+
disableMetrics() {
|
|
79
|
+
metricsEnabled = false;
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Subscribe to telemetry events
|
|
83
|
+
*/
|
|
84
|
+
onEvent(handler) {
|
|
85
|
+
eventHandlers.push(handler);
|
|
86
|
+
return () => {
|
|
87
|
+
const idx = eventHandlers.indexOf(handler);
|
|
88
|
+
if (idx >= 0)
|
|
89
|
+
eventHandlers.splice(idx, 1);
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
/**
|
|
93
|
+
* Subscribe to periodic metrics updates
|
|
94
|
+
*/
|
|
95
|
+
onMetrics(handler) {
|
|
96
|
+
metricsHandlers.push(handler);
|
|
97
|
+
return () => {
|
|
98
|
+
const idx = metricsHandlers.indexOf(handler);
|
|
99
|
+
if (idx >= 0)
|
|
100
|
+
metricsHandlers.splice(idx, 1);
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* Emit a telemetry event
|
|
105
|
+
* @internal Used by Stelo internals
|
|
106
|
+
*/
|
|
107
|
+
emit(category, operation, success, options) {
|
|
108
|
+
if (!telemetryEnabled && !metricsEnabled)
|
|
109
|
+
return;
|
|
110
|
+
totalOps++;
|
|
111
|
+
if (success) {
|
|
112
|
+
successOps++;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
failureOps++;
|
|
116
|
+
}
|
|
117
|
+
if (options?.durationMs !== undefined) {
|
|
118
|
+
operationTimings.push(options.durationMs);
|
|
119
|
+
// Keep only last 1000 timings for percentile calculations
|
|
120
|
+
if (operationTimings.length > 1000) {
|
|
121
|
+
operationTimings.shift();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!telemetryEnabled)
|
|
125
|
+
return;
|
|
126
|
+
const event = {
|
|
127
|
+
id: generateEventId(),
|
|
128
|
+
timestamp: new Date().toISOString(),
|
|
129
|
+
severity: options?.severity ?? (success ? 'info' : 'error'),
|
|
130
|
+
category,
|
|
131
|
+
operation,
|
|
132
|
+
success,
|
|
133
|
+
durationMs: options?.durationMs,
|
|
134
|
+
error: options?.error,
|
|
135
|
+
metadata: options?.metadata,
|
|
136
|
+
};
|
|
137
|
+
for (const handler of eventHandlers) {
|
|
138
|
+
try {
|
|
139
|
+
handler(event);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Telemetry handlers should not throw
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
/**
|
|
147
|
+
* Get current performance metrics
|
|
148
|
+
*/
|
|
149
|
+
getMetrics() {
|
|
150
|
+
const sorted = [...operationTimings].sort((a, b) => a - b);
|
|
151
|
+
const avgDuration = sorted.length > 0
|
|
152
|
+
? sorted.reduce((a, b) => a + b, 0) / sorted.length
|
|
153
|
+
: 0;
|
|
154
|
+
const p95Idx = Math.floor(sorted.length * 0.95);
|
|
155
|
+
const p99Idx = Math.floor(sorted.length * 0.99);
|
|
156
|
+
const uptimeMs = Date.now() - startTime;
|
|
157
|
+
const opsPerSecond = uptimeMs > 0 ? (totalOps / uptimeMs) * 1000 : 0;
|
|
158
|
+
return {
|
|
159
|
+
totalOperations: totalOps,
|
|
160
|
+
successCount: successOps,
|
|
161
|
+
failureCount: failureOps,
|
|
162
|
+
avgDurationMs: Math.round(avgDuration * 100) / 100,
|
|
163
|
+
p95DurationMs: sorted[p95Idx] ?? 0,
|
|
164
|
+
p99DurationMs: sorted[p99Idx] ?? 0,
|
|
165
|
+
opsPerSecond: Math.round(opsPerSecond * 100) / 100,
|
|
166
|
+
activeCircuitBreakers: circuitBreakers
|
|
167
|
+
.filter((cb) => cb.isOpen())
|
|
168
|
+
.map((cb) => cb.name),
|
|
169
|
+
uptimeMs,
|
|
170
|
+
};
|
|
171
|
+
},
|
|
172
|
+
/**
|
|
173
|
+
* Run system health checks
|
|
174
|
+
*/
|
|
175
|
+
async healthCheck() {
|
|
176
|
+
const checks = [];
|
|
177
|
+
const native = require('../index.js');
|
|
178
|
+
// Check 1: Native bindings available
|
|
179
|
+
const bindingStart = performance.now();
|
|
180
|
+
try {
|
|
181
|
+
const platform = native.getPlatform();
|
|
182
|
+
checks.push({
|
|
183
|
+
name: 'native_bindings',
|
|
184
|
+
status: platform ? 'pass' : 'fail',
|
|
185
|
+
message: `Platform: ${platform}`,
|
|
186
|
+
durationMs: Math.round(performance.now() - bindingStart),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
checks.push({
|
|
191
|
+
name: 'native_bindings',
|
|
192
|
+
status: 'fail',
|
|
193
|
+
message: e instanceof Error ? e.message : 'Unknown error',
|
|
194
|
+
durationMs: Math.round(performance.now() - bindingStart),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// Check 2: Screen capture available
|
|
198
|
+
const screenStart = performance.now();
|
|
199
|
+
try {
|
|
200
|
+
const size = native.screenGetSize();
|
|
201
|
+
checks.push({
|
|
202
|
+
name: 'screen_capture',
|
|
203
|
+
status: size.width > 0 ? 'pass' : 'warn',
|
|
204
|
+
message: `Screen: ${size.width}x${size.height}`,
|
|
205
|
+
durationMs: Math.round(performance.now() - screenStart),
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
checks.push({
|
|
210
|
+
name: 'screen_capture',
|
|
211
|
+
status: 'fail',
|
|
212
|
+
message: e instanceof Error ? e.message : 'Unknown error',
|
|
213
|
+
durationMs: Math.round(performance.now() - screenStart),
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
// Check 3: Mouse access
|
|
217
|
+
const mouseStart = performance.now();
|
|
218
|
+
try {
|
|
219
|
+
const pos = native.mouseGetPosition();
|
|
220
|
+
checks.push({
|
|
221
|
+
name: 'mouse_access',
|
|
222
|
+
status: 'pass',
|
|
223
|
+
message: `Position: ${pos.x}, ${pos.y}`,
|
|
224
|
+
durationMs: Math.round(performance.now() - mouseStart),
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
checks.push({
|
|
229
|
+
name: 'mouse_access',
|
|
230
|
+
status: 'fail',
|
|
231
|
+
message: e instanceof Error ? e.message : 'Unknown error',
|
|
232
|
+
durationMs: Math.round(performance.now() - mouseStart),
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
// Check 4: Safety system
|
|
236
|
+
const safetyStart = performance.now();
|
|
237
|
+
try {
|
|
238
|
+
const stopped = native.safetyIsStopped();
|
|
239
|
+
checks.push({
|
|
240
|
+
name: 'safety_system',
|
|
241
|
+
status: stopped ? 'warn' : 'pass',
|
|
242
|
+
message: stopped ? 'Emergency stop active' : 'Operational',
|
|
243
|
+
durationMs: Math.round(performance.now() - safetyStart),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
catch (e) {
|
|
247
|
+
checks.push({
|
|
248
|
+
name: 'safety_system',
|
|
249
|
+
status: 'fail',
|
|
250
|
+
message: e instanceof Error ? e.message : 'Unknown error',
|
|
251
|
+
durationMs: Math.round(performance.now() - safetyStart),
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
// Check 5: Error rate
|
|
255
|
+
const errorRate = totalOps > 0 ? failureOps / totalOps : 0;
|
|
256
|
+
checks.push({
|
|
257
|
+
name: 'error_rate',
|
|
258
|
+
status: errorRate > 0.1 ? 'fail' : errorRate > 0.01 ? 'warn' : 'pass',
|
|
259
|
+
message: `${(errorRate * 100).toFixed(2)}% failure rate`,
|
|
260
|
+
durationMs: 0,
|
|
261
|
+
});
|
|
262
|
+
// Determine overall status
|
|
263
|
+
const hasFailure = checks.some((c) => c.status === 'fail');
|
|
264
|
+
const hasWarn = checks.some((c) => c.status === 'warn');
|
|
265
|
+
return {
|
|
266
|
+
status: hasFailure ? 'unhealthy' : hasWarn ? 'degraded' : 'healthy',
|
|
267
|
+
checks,
|
|
268
|
+
timestamp: new Date().toISOString(),
|
|
269
|
+
};
|
|
270
|
+
},
|
|
271
|
+
/**
|
|
272
|
+
* Reset all metrics
|
|
273
|
+
*/
|
|
274
|
+
resetMetrics() {
|
|
275
|
+
totalOps = 0;
|
|
276
|
+
successOps = 0;
|
|
277
|
+
failureOps = 0;
|
|
278
|
+
operationTimings.length = 0;
|
|
279
|
+
},
|
|
280
|
+
/**
|
|
281
|
+
* Wrap an operation with telemetry tracking
|
|
282
|
+
*/
|
|
283
|
+
track(category, operation, fn, metadata) {
|
|
284
|
+
const start = performance.now();
|
|
285
|
+
try {
|
|
286
|
+
const result = fn();
|
|
287
|
+
const durationMs = performance.now() - start;
|
|
288
|
+
this.emit(category, operation, true, { durationMs, metadata });
|
|
289
|
+
return result;
|
|
290
|
+
}
|
|
291
|
+
catch (e) {
|
|
292
|
+
const durationMs = performance.now() - start;
|
|
293
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
294
|
+
this.emit(category, operation, false, {
|
|
295
|
+
durationMs,
|
|
296
|
+
error: {
|
|
297
|
+
code: 'OPERATION_FAILED',
|
|
298
|
+
message: error.message,
|
|
299
|
+
recoverable: true,
|
|
300
|
+
},
|
|
301
|
+
metadata,
|
|
302
|
+
});
|
|
303
|
+
throw e;
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
/**
|
|
307
|
+
* Wrap an async operation with telemetry tracking
|
|
308
|
+
*/
|
|
309
|
+
async trackAsync(category, operation, fn, metadata) {
|
|
310
|
+
const start = performance.now();
|
|
311
|
+
try {
|
|
312
|
+
const result = await fn();
|
|
313
|
+
const durationMs = performance.now() - start;
|
|
314
|
+
this.emit(category, operation, true, { durationMs, metadata });
|
|
315
|
+
return result;
|
|
316
|
+
}
|
|
317
|
+
catch (e) {
|
|
318
|
+
const durationMs = performance.now() - start;
|
|
319
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
320
|
+
this.emit(category, operation, false, {
|
|
321
|
+
durationMs,
|
|
322
|
+
error: {
|
|
323
|
+
code: 'OPERATION_FAILED',
|
|
324
|
+
message: error.message,
|
|
325
|
+
recoverable: true,
|
|
326
|
+
},
|
|
327
|
+
metadata,
|
|
328
|
+
});
|
|
329
|
+
throw e;
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
/**
|
|
334
|
+
* Circuit breaker for fault tolerance
|
|
335
|
+
*/
|
|
336
|
+
class CircuitBreaker {
|
|
337
|
+
name;
|
|
338
|
+
state = 'closed';
|
|
339
|
+
failureCount = 0;
|
|
340
|
+
successCount = 0;
|
|
341
|
+
lastFailureTime = 0;
|
|
342
|
+
failureThreshold;
|
|
343
|
+
resetTimeoutMs;
|
|
344
|
+
successThreshold;
|
|
345
|
+
constructor(name, options) {
|
|
346
|
+
this.name = name;
|
|
347
|
+
this.failureThreshold = options?.failureThreshold ?? 5;
|
|
348
|
+
this.resetTimeoutMs = options?.resetTimeoutMs ?? 30_000;
|
|
349
|
+
this.successThreshold = options?.successThreshold ?? 2;
|
|
350
|
+
circuitBreakers.push(this);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Get current circuit state
|
|
354
|
+
*/
|
|
355
|
+
getState() {
|
|
356
|
+
if (this.state === 'open') {
|
|
357
|
+
if (Date.now() - this.lastFailureTime >= this.resetTimeoutMs) {
|
|
358
|
+
this.state = 'half-open';
|
|
359
|
+
this.successCount = 0;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return this.state;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Check if circuit is open (blocking)
|
|
366
|
+
*/
|
|
367
|
+
isOpen() {
|
|
368
|
+
return this.getState() === 'open';
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Record a successful operation
|
|
372
|
+
*/
|
|
373
|
+
recordSuccess() {
|
|
374
|
+
if (this.getState() === 'half-open') {
|
|
375
|
+
this.successCount++;
|
|
376
|
+
if (this.successCount >= this.successThreshold) {
|
|
377
|
+
this.state = 'closed';
|
|
378
|
+
this.failureCount = 0;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
else if (this.state === 'closed') {
|
|
382
|
+
this.failureCount = 0;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Record a failed operation
|
|
387
|
+
*/
|
|
388
|
+
recordFailure() {
|
|
389
|
+
this.failureCount++;
|
|
390
|
+
this.lastFailureTime = Date.now();
|
|
391
|
+
if (this.getState() === 'half-open') {
|
|
392
|
+
this.state = 'open';
|
|
393
|
+
}
|
|
394
|
+
else if (this.failureCount >= this.failureThreshold) {
|
|
395
|
+
this.state = 'open';
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Execute an operation with circuit breaker protection
|
|
400
|
+
*/
|
|
401
|
+
async execute(fn) {
|
|
402
|
+
if (this.isOpen()) {
|
|
403
|
+
throw new Error(`Circuit breaker '${this.name}' is open`);
|
|
404
|
+
}
|
|
405
|
+
try {
|
|
406
|
+
const result = await fn();
|
|
407
|
+
this.recordSuccess();
|
|
408
|
+
return result;
|
|
409
|
+
}
|
|
410
|
+
catch (e) {
|
|
411
|
+
this.recordFailure();
|
|
412
|
+
throw e;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Force reset the circuit breaker
|
|
417
|
+
*/
|
|
418
|
+
reset() {
|
|
419
|
+
this.state = 'closed';
|
|
420
|
+
this.failureCount = 0;
|
|
421
|
+
this.successCount = 0;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
exports.CircuitBreaker = CircuitBreaker;
|
|
425
|
+
// Global registry of circuit breakers
|
|
426
|
+
const circuitBreakers = [];
|
|
427
|
+
/**
|
|
428
|
+
* Get all registered circuit breakers
|
|
429
|
+
*/
|
|
430
|
+
function getCircuitBreakers() {
|
|
431
|
+
return [...circuitBreakers];
|
|
432
|
+
}
|
|
433
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../ts/telemetry.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,oCAAoC;AACpC,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;;;AA+jB/E,gDAEC;AAteD,iBAAiB;AACjB,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAC7B,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,MAAM,aAAa,GAAuB,EAAE,CAAC;AAC7C,MAAM,eAAe,GAAqB,EAAE,CAAC;AAC7C,MAAM,gBAAgB,GAAa,EAAE,CAAC;AACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB;;GAEG;AACH,SAAS,eAAe;IACtB,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACU,QAAA,SAAS,GAAG;IACvB;;OAEG;IACH,MAAM;QACJ,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,gBAAgB,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,cAAc,GAAG,IAAI,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAyB;QAC/B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAC;gBAAE,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAuB;QAC/B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC;gBAAE,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,IAAI,CACF,QAA2B,EAC3B,SAAiB,EACjB,OAAgB,EAChB,OAKC;QAED,IAAI,CAAC,gBAAgB,IAAI,CAAC,cAAc;YAAE,OAAO;QAEjD,QAAQ,EAAE,CAAC;QACX,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,UAAU,EAAE,CAAC;QACf,CAAC;QAED,IAAI,OAAO,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;YACtC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC1C,0DAA0D;YAC1D,IAAI,gBAAgB,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBACnC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAE9B,MAAM,KAAK,GAAmB;YAC5B,EAAE,EAAE,eAAe,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC3D,QAAQ;YACR,SAAS;YACT,OAAO;YACP,UAAU,EAAE,OAAO,EAAE,UAAU;YAC/B,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC5B,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,MAAM,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,WAAW,GACf,MAAM,CAAC,MAAM,GAAG,CAAC;YACf,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM;YACnD,CAAC,CAAC,CAAC,CAAC;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,OAAO;YACL,eAAe,EAAE,QAAQ;YACzB,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,UAAU;YACxB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG;YAClD,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAClC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAClC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;YAClD,qBAAqB,EAAE,eAAe;iBACnC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;iBAC3B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACvB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,MAAM,GAAgC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QAEtC,qCAAqC;QACrC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBAClC,OAAO,EAAE,aAAa,QAAQ,EAAE;gBAChC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;aACzD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,iBAAiB;gBACvB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBACzD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;aACzD,CAAC,CAAC;QACL,CAAC;QAED,oCAAoC;QACpC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBACxC,OAAO,EAAE,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/C,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBACzD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,aAAa,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;gBACvC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,cAAc;gBACpB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBACzD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;aACvD,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;gBACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,aAAa;gBAC1D,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBACzD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB;QACtB,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACrE,OAAO,EAAE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;YACxD,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QAEH,2BAA2B;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAExD,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACnE,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QACV,QAAQ,GAAG,CAAC,CAAC;QACb,UAAU,GAAG,CAAC,CAAC;QACf,UAAU,GAAG,CAAC,CAAC;QACf,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CACH,QAA2B,EAC3B,SAAiB,EACjB,EAAW,EACX,QAAkC;QAElC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/D,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;gBACpC,UAAU;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW,EAAE,IAAI;iBAClB;gBACD,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,QAA2B,EAC3B,SAAiB,EACjB,EAAoB,EACpB,QAAkC;QAElC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/D,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;gBACpC,UAAU;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW,EAAE,IAAI;iBAClB;gBACD,QAAQ;aACT,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF,CAAC;AAqBF;;GAEG;AACH,MAAa,cAAc;IAChB,IAAI,CAAS;IACd,KAAK,GAAiB,QAAQ,CAAC;IAC/B,YAAY,GAAG,CAAC,CAAC;IACjB,YAAY,GAAG,CAAC,CAAC;IACjB,eAAe,GAAG,CAAC,CAAC;IACX,gBAAgB,CAAS;IACzB,cAAc,CAAS;IACvB,gBAAgB,CAAS;IAE1C,YAAY,IAAY,EAAE,OAA+B;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,MAAM,CAAC;QACxD,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,IAAI,CAAC,CAAC;QACvD,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC7D,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;gBACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC/C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAElC,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACtB,CAAC;aAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAI,EAAoB;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;CACF;AA7FD,wCA6FC;AAED,sCAAsC;AACtC,MAAM,eAAe,GAAqB,EAAE,CAAC;AAE7C;;GAEG;AACH,SAAgB,kBAAkB;IAChC,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/** Mouse button identifiers */
|
|
2
|
+
export type MouseButton = 'left' | 'right' | 'middle';
|
|
3
|
+
/** Scroll direction */
|
|
4
|
+
export type ScrollDirection = 'up' | 'down' | 'left' | 'right';
|
|
5
|
+
/** Movement curve types for smooth mouse movement */
|
|
6
|
+
export type CurveType = 'linear' | 'bezier' | 'ease-in-out' | 'ease-in' | 'ease-out' | 'humanized';
|
|
7
|
+
/** 2D point with integer coordinates */
|
|
8
|
+
export interface Point {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
}
|
|
12
|
+
/** Screen/display dimensions */
|
|
13
|
+
export interface ScreenSize {
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
}
|
|
17
|
+
/** RGB pixel color */
|
|
18
|
+
export interface PixelColor {
|
|
19
|
+
r: number;
|
|
20
|
+
g: number;
|
|
21
|
+
b: number;
|
|
22
|
+
hex: string;
|
|
23
|
+
}
|
|
24
|
+
/** Display/monitor information */
|
|
25
|
+
export interface DisplayInfo {
|
|
26
|
+
id: number;
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
isPrimary: boolean;
|
|
32
|
+
scaleFactor: number;
|
|
33
|
+
name: string;
|
|
34
|
+
}
|
|
35
|
+
/** Window information */
|
|
36
|
+
export interface WindowInfo {
|
|
37
|
+
id: number;
|
|
38
|
+
title: string;
|
|
39
|
+
x: number;
|
|
40
|
+
y: number;
|
|
41
|
+
width: number;
|
|
42
|
+
height: number;
|
|
43
|
+
isVisible: boolean;
|
|
44
|
+
isMinimized: boolean;
|
|
45
|
+
processId: number;
|
|
46
|
+
processName: string;
|
|
47
|
+
processPath: string;
|
|
48
|
+
}
|
|
49
|
+
/** Screen capture result */
|
|
50
|
+
export interface ScreenCapture {
|
|
51
|
+
/** Raw RGBA pixel data */
|
|
52
|
+
data: Buffer;
|
|
53
|
+
width: number;
|
|
54
|
+
height: number;
|
|
55
|
+
}
|
|
56
|
+
/** Rectangular region */
|
|
57
|
+
export interface Region {
|
|
58
|
+
x: number;
|
|
59
|
+
y: number;
|
|
60
|
+
width: number;
|
|
61
|
+
height: number;
|
|
62
|
+
}
|
|
63
|
+
/** Options for smooth mouse movement */
|
|
64
|
+
export interface SmoothMoveOptions {
|
|
65
|
+
/** Duration in milliseconds (default: 500) */
|
|
66
|
+
duration?: number;
|
|
67
|
+
/** Interpolation curve type (default: 'bezier') */
|
|
68
|
+
curve?: CurveType;
|
|
69
|
+
/** Steps per second — higher = smoother (default: 120) */
|
|
70
|
+
stepsPerSecond?: number;
|
|
71
|
+
}
|
|
72
|
+
/** Options for humanized mouse movement */
|
|
73
|
+
export interface HumanizedMoveOptions {
|
|
74
|
+
/** Duration in milliseconds (default: 800) */
|
|
75
|
+
duration?: number;
|
|
76
|
+
/** Random deviation amount 0.0–1.0 (default: 0.5) */
|
|
77
|
+
jitter?: number;
|
|
78
|
+
/** Enable overshoot and correction (default: true) */
|
|
79
|
+
overshoot?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/** Options for text typing */
|
|
82
|
+
export interface TypeOptions {
|
|
83
|
+
/** Delay between characters in ms (default: 20) */
|
|
84
|
+
delay?: number;
|
|
85
|
+
}
|
|
86
|
+
/** Options for humanized typing */
|
|
87
|
+
export interface HumanizedTypeOptions {
|
|
88
|
+
/** Minimum delay between characters in ms (default: 30) */
|
|
89
|
+
minDelay?: number;
|
|
90
|
+
/** Maximum delay between characters in ms (default: 120) */
|
|
91
|
+
maxDelay?: number;
|
|
92
|
+
}
|
|
93
|
+
/** Options for dragging */
|
|
94
|
+
export interface DragOptions {
|
|
95
|
+
/** Mouse button to use (default: 'left') */
|
|
96
|
+
button?: MouseButton;
|
|
97
|
+
/** Duration of the drag movement in ms (default: 500) */
|
|
98
|
+
duration?: number;
|
|
99
|
+
}
|
|
100
|
+
/** Automation event for recording/playback */
|
|
101
|
+
export type AutomationEvent = {
|
|
102
|
+
type: 'mouseMove';
|
|
103
|
+
x: number;
|
|
104
|
+
y: number;
|
|
105
|
+
timestamp: number;
|
|
106
|
+
} | {
|
|
107
|
+
type: 'mouseClick';
|
|
108
|
+
button: MouseButton;
|
|
109
|
+
x: number;
|
|
110
|
+
y: number;
|
|
111
|
+
timestamp: number;
|
|
112
|
+
} | {
|
|
113
|
+
type: 'mouseDown';
|
|
114
|
+
button: MouseButton;
|
|
115
|
+
x: number;
|
|
116
|
+
y: number;
|
|
117
|
+
timestamp: number;
|
|
118
|
+
} | {
|
|
119
|
+
type: 'mouseUp';
|
|
120
|
+
button: MouseButton;
|
|
121
|
+
x: number;
|
|
122
|
+
y: number;
|
|
123
|
+
timestamp: number;
|
|
124
|
+
} | {
|
|
125
|
+
type: 'mouseScroll';
|
|
126
|
+
amount: number;
|
|
127
|
+
direction: ScrollDirection;
|
|
128
|
+
timestamp: number;
|
|
129
|
+
} | {
|
|
130
|
+
type: 'keyPress';
|
|
131
|
+
key: string;
|
|
132
|
+
timestamp: number;
|
|
133
|
+
} | {
|
|
134
|
+
type: 'keyDown';
|
|
135
|
+
key: string;
|
|
136
|
+
timestamp: number;
|
|
137
|
+
} | {
|
|
138
|
+
type: 'keyUp';
|
|
139
|
+
key: string;
|
|
140
|
+
timestamp: number;
|
|
141
|
+
} | {
|
|
142
|
+
type: 'typeText';
|
|
143
|
+
text: string;
|
|
144
|
+
timestamp: number;
|
|
145
|
+
} | {
|
|
146
|
+
type: 'delay';
|
|
147
|
+
duration: number;
|
|
148
|
+
};
|
|
149
|
+
/** Recording playback options */
|
|
150
|
+
export interface PlaybackOptions {
|
|
151
|
+
/** Playback speed multiplier (default: 1.0) */
|
|
152
|
+
speed?: number;
|
|
153
|
+
/** Number of times to replay (default: 1) */
|
|
154
|
+
repeat?: number;
|
|
155
|
+
}
|
|
156
|
+
/** Safety configuration */
|
|
157
|
+
export interface SafetyConfig {
|
|
158
|
+
/** Enable failsafe corners (default: true) */
|
|
159
|
+
failsafe?: boolean;
|
|
160
|
+
/** Failsafe corner threshold in pixels (default: 5) */
|
|
161
|
+
failsafeThreshold?: number;
|
|
162
|
+
/** Maximum actions per second (0 = unlimited) */
|
|
163
|
+
rateLimit?: number;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../ts/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Stelo — TypeScript Type Definitions
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// All public types for the Stelo automation framework.
|
|
6
|
+
// ============================================================================
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../ts/types.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,sCAAsC;AACtC,+EAA+E;AAC/E,uDAAuD;AACvD,+EAA+E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface BezierPoint {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
export interface CubicBezierOptions {
|
|
6
|
+
/** Number of sample points along the curve (default: 100) */
|
|
7
|
+
steps?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Pure-TypeScript bezier curve utilities for path planning, easing, and
|
|
11
|
+
* visualization. These complement the native Rust bezier implementation
|
|
12
|
+
* used for actual mouse movement.
|
|
13
|
+
*/
|
|
14
|
+
export declare const bezier: {
|
|
15
|
+
/**
|
|
16
|
+
* Evaluate a cubic bezier curve at parameter t ∈ [0, 1].
|
|
17
|
+
*/
|
|
18
|
+
cubic(p0: BezierPoint, p1: BezierPoint, p2: BezierPoint, p3: BezierPoint, t: number): BezierPoint;
|
|
19
|
+
/**
|
|
20
|
+
* Evaluate a quadratic bezier curve at parameter t ∈ [0, 1].
|
|
21
|
+
*/
|
|
22
|
+
quadratic(p0: BezierPoint, p1: BezierPoint, p2: BezierPoint, t: number): BezierPoint;
|
|
23
|
+
/**
|
|
24
|
+
* Sample a cubic bezier curve and return an array of evenly-spaced points.
|
|
25
|
+
*/
|
|
26
|
+
sampleCubic(p0: BezierPoint, p1: BezierPoint, p2: BezierPoint, p3: BezierPoint, options?: CubicBezierOptions): BezierPoint[];
|
|
27
|
+
/**
|
|
28
|
+
* Compute the approximate arc length of a cubic bezier by summing segment distances.
|
|
29
|
+
*/
|
|
30
|
+
arcLength(p0: BezierPoint, p1: BezierPoint, p2: BezierPoint, p3: BezierPoint, samples?: number): number;
|
|
31
|
+
/**
|
|
32
|
+
* Generate random control points for a cubic bezier between two endpoints.
|
|
33
|
+
* Useful for creating natural-looking mouse movement curves.
|
|
34
|
+
*/
|
|
35
|
+
randomControlPoints(start: BezierPoint, end: BezierPoint, spread?: number): {
|
|
36
|
+
p1: BezierPoint;
|
|
37
|
+
p2: BezierPoint;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Standard CSS-style cubic-bezier easing function.
|
|
41
|
+
* Returns y for a given x ∈ [0, 1] using Newton's method.
|
|
42
|
+
*/
|
|
43
|
+
cssEasing(x1: number, y1: number, x2: number, y2: number, t: number): number;
|
|
44
|
+
/** Predefined easing: ease-in */
|
|
45
|
+
easeIn(t: number): number;
|
|
46
|
+
/** Predefined easing: ease-out */
|
|
47
|
+
easeOut(t: number): number;
|
|
48
|
+
/** Predefined easing: ease-in-out */
|
|
49
|
+
easeInOut(t: number): number;
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=bezier.d.ts.map
|