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.
Files changed (141) hide show
  1. package/LICENSE +184 -0
  2. package/README.md +853 -0
  3. package/dist/accessibility.d.ts +227 -0
  4. package/dist/accessibility.d.ts.map +1 -0
  5. package/dist/accessibility.js +602 -0
  6. package/dist/accessibility.js.map +1 -0
  7. package/dist/agent.d.ts +870 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +1107 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/audio-stream.d.ts +114 -0
  12. package/dist/audio-stream.d.ts.map +1 -0
  13. package/dist/audio-stream.js +167 -0
  14. package/dist/audio-stream.js.map +1 -0
  15. package/dist/clipboard.d.ts +99 -0
  16. package/dist/clipboard.d.ts.map +1 -0
  17. package/dist/clipboard.js +352 -0
  18. package/dist/clipboard.js.map +1 -0
  19. package/dist/config.d.ts +183 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +477 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/context.d.ts +213 -0
  24. package/dist/context.d.ts.map +1 -0
  25. package/dist/context.js +387 -0
  26. package/dist/context.js.map +1 -0
  27. package/dist/cortex.d.ts +548 -0
  28. package/dist/cortex.d.ts.map +1 -0
  29. package/dist/cortex.js +1479 -0
  30. package/dist/cortex.js.map +1 -0
  31. package/dist/errors.d.ts +133 -0
  32. package/dist/errors.d.ts.map +1 -0
  33. package/dist/errors.js +278 -0
  34. package/dist/errors.js.map +1 -0
  35. package/dist/events.d.ts +227 -0
  36. package/dist/events.d.ts.map +1 -0
  37. package/dist/events.js +429 -0
  38. package/dist/events.js.map +1 -0
  39. package/dist/executor.d.ts +212 -0
  40. package/dist/executor.d.ts.map +1 -0
  41. package/dist/executor.js +545 -0
  42. package/dist/executor.js.map +1 -0
  43. package/dist/index.d.ts +69 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +167 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/integration.d.ts +159 -0
  48. package/dist/integration.d.ts.map +1 -0
  49. package/dist/integration.js +533 -0
  50. package/dist/integration.js.map +1 -0
  51. package/dist/keyboard.d.ts +276 -0
  52. package/dist/keyboard.d.ts.map +1 -0
  53. package/dist/keyboard.js +404 -0
  54. package/dist/keyboard.js.map +1 -0
  55. package/dist/logger.d.ts +198 -0
  56. package/dist/logger.d.ts.map +1 -0
  57. package/dist/logger.js +516 -0
  58. package/dist/logger.js.map +1 -0
  59. package/dist/middleware.d.ts +183 -0
  60. package/dist/middleware.d.ts.map +1 -0
  61. package/dist/middleware.js +493 -0
  62. package/dist/middleware.js.map +1 -0
  63. package/dist/monitor.d.ts +136 -0
  64. package/dist/monitor.d.ts.map +1 -0
  65. package/dist/monitor.js +341 -0
  66. package/dist/monitor.js.map +1 -0
  67. package/dist/mouse.d.ts +290 -0
  68. package/dist/mouse.d.ts.map +1 -0
  69. package/dist/mouse.js +466 -0
  70. package/dist/mouse.js.map +1 -0
  71. package/dist/plugin.d.ts +157 -0
  72. package/dist/plugin.d.ts.map +1 -0
  73. package/dist/plugin.js +409 -0
  74. package/dist/plugin.js.map +1 -0
  75. package/dist/process.d.ts +106 -0
  76. package/dist/process.d.ts.map +1 -0
  77. package/dist/process.js +326 -0
  78. package/dist/process.js.map +1 -0
  79. package/dist/recorder.d.ts +100 -0
  80. package/dist/recorder.d.ts.map +1 -0
  81. package/dist/recorder.js +258 -0
  82. package/dist/recorder.js.map +1 -0
  83. package/dist/safety.d.ts +59 -0
  84. package/dist/safety.d.ts.map +1 -0
  85. package/dist/safety.js +98 -0
  86. package/dist/safety.js.map +1 -0
  87. package/dist/scheduler.d.ts +152 -0
  88. package/dist/scheduler.d.ts.map +1 -0
  89. package/dist/scheduler.js +615 -0
  90. package/dist/scheduler.js.map +1 -0
  91. package/dist/screen.d.ts +96 -0
  92. package/dist/screen.d.ts.map +1 -0
  93. package/dist/screen.js +154 -0
  94. package/dist/screen.js.map +1 -0
  95. package/dist/session.d.ts +209 -0
  96. package/dist/session.d.ts.map +1 -0
  97. package/dist/session.js +479 -0
  98. package/dist/session.js.map +1 -0
  99. package/dist/stream.d.ts +168 -0
  100. package/dist/stream.d.ts.map +1 -0
  101. package/dist/stream.js +298 -0
  102. package/dist/stream.js.map +1 -0
  103. package/dist/telemetry.d.ts +223 -0
  104. package/dist/telemetry.d.ts.map +1 -0
  105. package/dist/telemetry.js +433 -0
  106. package/dist/telemetry.js.map +1 -0
  107. package/dist/types.d.ts +165 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +8 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/utils/bezier.d.ts +51 -0
  112. package/dist/utils/bezier.d.ts.map +1 -0
  113. package/dist/utils/bezier.js +117 -0
  114. package/dist/utils/bezier.js.map +1 -0
  115. package/dist/utils/helpers.d.ts +90 -0
  116. package/dist/utils/helpers.d.ts.map +1 -0
  117. package/dist/utils/helpers.js +143 -0
  118. package/dist/utils/helpers.js.map +1 -0
  119. package/dist/utils/index.d.ts +4 -0
  120. package/dist/utils/index.d.ts.map +1 -0
  121. package/dist/utils/index.js +18 -0
  122. package/dist/utils/index.js.map +1 -0
  123. package/dist/validation.d.ts +254 -0
  124. package/dist/validation.d.ts.map +1 -0
  125. package/dist/validation.js +478 -0
  126. package/dist/validation.js.map +1 -0
  127. package/dist/vision.d.ts +719 -0
  128. package/dist/vision.d.ts.map +1 -0
  129. package/dist/vision.js +1197 -0
  130. package/dist/vision.js.map +1 -0
  131. package/dist/window.d.ts +80 -0
  132. package/dist/window.d.ts.map +1 -0
  133. package/dist/window.js +170 -0
  134. package/dist/window.js.map +1 -0
  135. package/dist/workflow.d.ts +224 -0
  136. package/dist/workflow.d.ts.map +1 -0
  137. package/dist/workflow.js +578 -0
  138. package/dist/workflow.js.map +1 -0
  139. package/index.d.ts +840 -0
  140. package/index.js +495 -0
  141. package/package.json +91 -0
@@ -0,0 +1,478 @@
1
+ "use strict";
2
+ // ============================================================================
3
+ // Stelo — Validation & Security Utilities
4
+ // ============================================================================
5
+ // Enterprise-grade input validation, bounds checking, and security primitives.
6
+ // ============================================================================
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RateLimiter = exports.security = exports.validate = exports.ValidationError = void 0;
9
+ exports.ok = ok;
10
+ exports.err = err;
11
+ exports.unwrap = unwrap;
12
+ /**
13
+ * Validation error with details
14
+ */
15
+ class ValidationError extends Error {
16
+ code;
17
+ field;
18
+ value;
19
+ constraint;
20
+ constructor(field, value, constraint, code = 'VALIDATION_ERROR') {
21
+ super(`Validation failed for '${field}': ${constraint}`);
22
+ this.name = 'ValidationError';
23
+ this.code = code;
24
+ this.field = field;
25
+ this.value = value;
26
+ this.constraint = constraint;
27
+ }
28
+ }
29
+ exports.ValidationError = ValidationError;
30
+ /**
31
+ * Create a successful result
32
+ */
33
+ function ok(value) {
34
+ return { ok: true, value };
35
+ }
36
+ /**
37
+ * Create a failed result
38
+ */
39
+ function err(error) {
40
+ return { ok: false, error };
41
+ }
42
+ /**
43
+ * Unwrap a result, throwing if it's an error
44
+ */
45
+ function unwrap(result) {
46
+ if (result.ok)
47
+ return result.value;
48
+ throw result.error;
49
+ }
50
+ // ── Standalone Validation Functions ─────────────────────────────────────────
51
+ /**
52
+ * Validate that a value is a finite number
53
+ * @throws ValidationError if validation fails
54
+ */
55
+ function validateNumber(value, field) {
56
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
57
+ throw new ValidationError(field, value, 'must be a finite number', 'INVALID_NUMBER');
58
+ }
59
+ }
60
+ /**
61
+ * Validate that a value is an integer
62
+ * @throws ValidationError if validation fails
63
+ */
64
+ function validateInteger(value, field) {
65
+ validateNumber(value, field);
66
+ if (!Number.isInteger(value)) {
67
+ throw new ValidationError(field, value, 'must be an integer', 'INVALID_INTEGER');
68
+ }
69
+ }
70
+ /**
71
+ * Validate that a value is a positive integer
72
+ * @throws ValidationError if validation fails
73
+ */
74
+ function validatePositiveInteger(value, field) {
75
+ validateInteger(value, field);
76
+ if (value < 0) {
77
+ throw new ValidationError(field, value, 'must be a positive integer', 'NEGATIVE_VALUE');
78
+ }
79
+ }
80
+ /**
81
+ * Validate a coordinate value (integer, reasonable range)
82
+ * @throws ValidationError if validation fails
83
+ */
84
+ function validateCoordinate(value, field) {
85
+ validateInteger(value, field);
86
+ const v = value;
87
+ // Reasonable coordinate range: -100000 to 100000 (covers multi-monitor setups)
88
+ if (v < -100_000 || v > 100_000) {
89
+ throw new ValidationError(field, value, 'coordinate out of reasonable range (-100000 to 100000)', 'COORDINATE_OUT_OF_RANGE');
90
+ }
91
+ }
92
+ /**
93
+ * Validate that coordinates are within screen bounds
94
+ * @throws ValidationError if validation fails
95
+ */
96
+ function validateInBounds(point, screenSize, field = 'point') {
97
+ validateCoordinate(point.x, `${field}.x`);
98
+ validateCoordinate(point.y, `${field}.y`);
99
+ const x = point.x;
100
+ const y = point.y;
101
+ if (x < 0 || x >= screenSize.width) {
102
+ throw new ValidationError(`${field}.x`, x, `must be within screen width (0 to ${screenSize.width - 1})`, 'X_OUT_OF_BOUNDS');
103
+ }
104
+ if (y < 0 || y >= screenSize.height) {
105
+ throw new ValidationError(`${field}.y`, y, `must be within screen height (0 to ${screenSize.height - 1})`, 'Y_OUT_OF_BOUNDS');
106
+ }
107
+ }
108
+ /**
109
+ * Validate a region has valid dimensions
110
+ * @throws ValidationError if validation fails
111
+ */
112
+ function validateRegion(region, field = 'region') {
113
+ if (typeof region !== 'object' || region === null) {
114
+ throw new ValidationError(field, region, 'must be an object', 'INVALID_REGION');
115
+ }
116
+ const r = region;
117
+ validateCoordinate(r.x, `${field}.x`);
118
+ validateCoordinate(r.y, `${field}.y`);
119
+ validatePositiveInteger(r.width, `${field}.width`);
120
+ validatePositiveInteger(r.height, `${field}.height`);
121
+ if (r.width === 0) {
122
+ throw new ValidationError(`${field}.width`, r.width, 'must be greater than 0', 'ZERO_WIDTH');
123
+ }
124
+ if (r.height === 0) {
125
+ throw new ValidationError(`${field}.height`, r.height, 'must be greater than 0', 'ZERO_HEIGHT');
126
+ }
127
+ }
128
+ /**
129
+ * Validate a string is non-empty
130
+ * @throws ValidationError if validation fails
131
+ */
132
+ function validateNonEmptyString(value, field) {
133
+ if (typeof value !== 'string') {
134
+ throw new ValidationError(field, value, 'must be a string', 'INVALID_STRING');
135
+ }
136
+ if (value.length === 0) {
137
+ throw new ValidationError(field, value, 'must not be empty', 'EMPTY_STRING');
138
+ }
139
+ }
140
+ /**
141
+ * Validate a string has max length
142
+ * @throws ValidationError if validation fails
143
+ */
144
+ function validateMaxLength(value, maxLen, field) {
145
+ if (value.length > maxLen) {
146
+ throw new ValidationError(field, value, `must be at most ${maxLen} characters (got ${value.length})`, 'STRING_TOO_LONG');
147
+ }
148
+ }
149
+ /**
150
+ * Validate duration in milliseconds
151
+ * @throws ValidationError if validation fails
152
+ */
153
+ function validateDuration(value, field, maxMs = 300_000) {
154
+ validatePositiveInteger(value, field);
155
+ if (value > maxMs) {
156
+ throw new ValidationError(field, value, `must be at most ${maxMs}ms`, 'DURATION_TOO_LONG');
157
+ }
158
+ }
159
+ /**
160
+ * Validate a value is within a range
161
+ * @throws ValidationError if validation fails
162
+ */
163
+ function validateRange(value, min, max, field) {
164
+ if (value < min || value > max) {
165
+ throw new ValidationError(field, value, `must be between ${min} and ${max}`, 'OUT_OF_RANGE');
166
+ }
167
+ }
168
+ /**
169
+ * Validate a key name is valid
170
+ * @throws ValidationError if validation fails
171
+ */
172
+ function validateKeyName(value, field) {
173
+ validateNonEmptyString(value, field);
174
+ const v = value;
175
+ // Max key name length: 32 chars
176
+ if (v.length > 32) {
177
+ throw new ValidationError(field, value, 'key name too long (max 32 chars)', 'KEY_NAME_TOO_LONG');
178
+ }
179
+ // Only allow safe characters
180
+ if (!/^[a-zA-Z0-9_+-]+$/.test(v)) {
181
+ throw new ValidationError(field, value, 'key name contains invalid characters', 'INVALID_KEY_NAME');
182
+ }
183
+ }
184
+ // ── Safe Validation (Result-based) ──────────────────────────────────────────
185
+ function safeCoordinate(value, field) {
186
+ try {
187
+ validateCoordinate(value, field);
188
+ return ok(value);
189
+ }
190
+ catch (e) {
191
+ return err(e);
192
+ }
193
+ }
194
+ function safeInBounds(point, screenSize, field) {
195
+ try {
196
+ validateInBounds(point, screenSize, field);
197
+ return ok(point);
198
+ }
199
+ catch (e) {
200
+ return err(e);
201
+ }
202
+ }
203
+ function safeRegion(region, field) {
204
+ try {
205
+ validateRegion(region, field);
206
+ return ok(region);
207
+ }
208
+ catch (e) {
209
+ return err(e);
210
+ }
211
+ }
212
+ function safeNumber(value, field) {
213
+ try {
214
+ validateNumber(value, field);
215
+ return ok(value);
216
+ }
217
+ catch (e) {
218
+ return err(e);
219
+ }
220
+ }
221
+ /**
222
+ * Validation utilities for enterprise-grade input checking
223
+ *
224
+ * @example
225
+ * ```typescript
226
+ * import { validate } from 'stelo';
227
+ *
228
+ * // Validate coordinates
229
+ * validate.coordinate(x, 'x');
230
+ * validate.coordinate(y, 'y');
231
+ *
232
+ * // Validate within screen bounds
233
+ * validate.inBounds({ x, y }, screenSize);
234
+ *
235
+ * // Validate region
236
+ * validate.region(region);
237
+ *
238
+ * // Safe validation (returns Result)
239
+ * const result = validate.safe.coordinate(x, 'x');
240
+ * if (!result.ok) console.error(result.error);
241
+ * ```
242
+ */
243
+ exports.validate = {
244
+ number: validateNumber,
245
+ integer: validateInteger,
246
+ positiveInteger: validatePositiveInteger,
247
+ coordinate: validateCoordinate,
248
+ inBounds: validateInBounds,
249
+ region: validateRegion,
250
+ nonEmptyString: validateNonEmptyString,
251
+ maxLength: validateMaxLength,
252
+ duration: validateDuration,
253
+ range: validateRange,
254
+ keyName: validateKeyName,
255
+ safe: {
256
+ coordinate: safeCoordinate,
257
+ inBounds: safeInBounds,
258
+ region: safeRegion,
259
+ number: safeNumber,
260
+ },
261
+ };
262
+ const auditLog = [];
263
+ let auditEnabled = false;
264
+ let auditMaxEntries = 10_000;
265
+ const auditHandlers = [];
266
+ /**
267
+ * Security utilities for enterprise deployments
268
+ *
269
+ * @example
270
+ * ```typescript
271
+ * import { security } from 'stelo';
272
+ *
273
+ * // Enable audit logging
274
+ * security.enableAudit();
275
+ *
276
+ * // Subscribe to audit events
277
+ * security.onAudit((entry) => {
278
+ * console.log(`[AUDIT] ${entry.operation}: ${entry.success}`);
279
+ * });
280
+ *
281
+ * // Get audit log
282
+ * const log = security.getAuditLog();
283
+ *
284
+ * // Sanitize text for typing (remove control characters)
285
+ * const safeText = security.sanitizeText(userInput);
286
+ * ```
287
+ */
288
+ exports.security = {
289
+ /**
290
+ * Enable audit logging
291
+ */
292
+ enableAudit(maxEntries = 10_000) {
293
+ auditEnabled = true;
294
+ auditMaxEntries = maxEntries;
295
+ },
296
+ /**
297
+ * Disable audit logging
298
+ */
299
+ disableAudit() {
300
+ auditEnabled = false;
301
+ },
302
+ /**
303
+ * Check if audit logging is enabled
304
+ */
305
+ isAuditEnabled() {
306
+ return auditEnabled;
307
+ },
308
+ /**
309
+ * Subscribe to audit events
310
+ */
311
+ onAudit(handler) {
312
+ auditHandlers.push(handler);
313
+ return () => {
314
+ const idx = auditHandlers.indexOf(handler);
315
+ if (idx >= 0)
316
+ auditHandlers.splice(idx, 1);
317
+ };
318
+ },
319
+ /**
320
+ * Log an audit entry
321
+ * @internal Used by Stelo internals
322
+ */
323
+ logAudit(operation, args, success, durationMs, error) {
324
+ if (!auditEnabled)
325
+ return;
326
+ const entry = {
327
+ timestamp: new Date().toISOString(),
328
+ operation,
329
+ args: this.redactSensitive(args),
330
+ success,
331
+ durationMs,
332
+ error,
333
+ };
334
+ auditLog.push(entry);
335
+ if (auditLog.length > auditMaxEntries) {
336
+ auditLog.shift();
337
+ }
338
+ for (const handler of auditHandlers) {
339
+ try {
340
+ handler(entry);
341
+ }
342
+ catch {
343
+ // Audit handlers should not throw
344
+ }
345
+ }
346
+ },
347
+ /**
348
+ * Get the audit log
349
+ */
350
+ getAuditLog(limit) {
351
+ if (limit === undefined)
352
+ return [...auditLog];
353
+ return auditLog.slice(-limit);
354
+ },
355
+ /**
356
+ * Clear the audit log
357
+ */
358
+ clearAuditLog() {
359
+ auditLog.length = 0;
360
+ },
361
+ /**
362
+ * Sanitize text for safe typing (remove control characters)
363
+ */
364
+ sanitizeText(text) {
365
+ // Remove control characters except newline, tab, carriage return
366
+ // eslint-disable-next-line no-control-regex
367
+ return text.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, '');
368
+ },
369
+ /**
370
+ * Redact potentially sensitive values from an object
371
+ */
372
+ redactSensitive(obj) {
373
+ const sensitiveKeys = ['password', 'secret', 'token', 'key', 'credential', 'auth'];
374
+ const result = {};
375
+ for (const [key, value] of Object.entries(obj)) {
376
+ const lowerKey = key.toLowerCase();
377
+ if (sensitiveKeys.some((sk) => lowerKey.includes(sk))) {
378
+ result[key] = '[REDACTED]';
379
+ }
380
+ else if (typeof value === 'string' && value.length > 1000) {
381
+ result[key] = `[STRING: ${value.length} chars]`;
382
+ }
383
+ else if (value instanceof Buffer || ArrayBuffer.isView(value)) {
384
+ result[key] = `[BUFFER: ${value.length} bytes]`;
385
+ }
386
+ else {
387
+ result[key] = value;
388
+ }
389
+ }
390
+ return result;
391
+ },
392
+ /**
393
+ * Check if running in a sandboxed environment (best effort detection)
394
+ */
395
+ detectSandbox() {
396
+ const indicators = [];
397
+ // Check for common sandbox indicators
398
+ if (process.env.CONTAINER)
399
+ indicators.push('CONTAINER env var');
400
+ if (process.env.DOCKER_CONTAINER)
401
+ indicators.push('DOCKER_CONTAINER env var');
402
+ if (process.env.KUBERNETES_SERVICE_HOST)
403
+ indicators.push('Kubernetes');
404
+ if (process.env.AWS_LAMBDA_FUNCTION_NAME)
405
+ indicators.push('AWS Lambda');
406
+ if (process.env.FUNCTIONS_WORKER_RUNTIME)
407
+ indicators.push('Azure Functions');
408
+ if (process.env.GCP_PROJECT)
409
+ indicators.push('Google Cloud');
410
+ return {
411
+ sandboxed: indicators.length > 0,
412
+ indicators,
413
+ };
414
+ },
415
+ /**
416
+ * Generate a secure operation ID
417
+ */
418
+ generateOperationId() {
419
+ const timestamp = Date.now().toString(36);
420
+ const random = Math.random().toString(36).slice(2, 10);
421
+ return `op-${timestamp}-${random}`;
422
+ },
423
+ };
424
+ // ── Rate Limiting Utilities ─────────────────────────────────────────────────
425
+ /**
426
+ * Token bucket rate limiter
427
+ */
428
+ class RateLimiter {
429
+ tokens;
430
+ lastRefill;
431
+ maxTokens;
432
+ refillRate; // tokens per second
433
+ /**
434
+ * Create a rate limiter
435
+ * @param maxTokens Maximum tokens in the bucket
436
+ * @param refillRate Tokens added per second
437
+ */
438
+ constructor(maxTokens, refillRate) {
439
+ this.maxTokens = maxTokens;
440
+ this.refillRate = refillRate;
441
+ this.tokens = maxTokens;
442
+ this.lastRefill = Date.now();
443
+ }
444
+ /**
445
+ * Try to consume tokens
446
+ * @returns true if tokens were available, false if rate limited
447
+ */
448
+ tryConsume(count = 1) {
449
+ this.refill();
450
+ if (this.tokens >= count) {
451
+ this.tokens -= count;
452
+ return true;
453
+ }
454
+ return false;
455
+ }
456
+ /**
457
+ * Get current token count
458
+ */
459
+ getTokens() {
460
+ this.refill();
461
+ return this.tokens;
462
+ }
463
+ /**
464
+ * Check if rate limited (without consuming)
465
+ */
466
+ isLimited() {
467
+ this.refill();
468
+ return this.tokens < 1;
469
+ }
470
+ refill() {
471
+ const now = Date.now();
472
+ const elapsed = (now - this.lastRefill) / 1000;
473
+ this.tokens = Math.min(this.maxTokens, this.tokens + elapsed * this.refillRate);
474
+ this.lastRefill = now;
475
+ }
476
+ }
477
+ exports.RateLimiter = RateLimiter;
478
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../ts/validation.ts"],"names":[],"mappings":"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"}