agent-web-interface 4.1.0 → 4.2.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.
Files changed (85) hide show
  1. package/dist/src/browser/session-manager.d.ts +28 -1
  2. package/dist/src/browser/session-manager.d.ts.map +1 -1
  3. package/dist/src/browser/session-manager.js +73 -0
  4. package/dist/src/browser/session-manager.js.map +1 -1
  5. package/dist/src/index.d.ts +10 -1
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +47 -0
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/server/mcp-server.d.ts +14 -1
  10. package/dist/src/server/mcp-server.d.ts.map +1 -1
  11. package/dist/src/server/mcp-server.js +21 -6
  12. package/dist/src/server/mcp-server.js.map +1 -1
  13. package/dist/src/server/session-store.d.ts +18 -3
  14. package/dist/src/server/session-store.d.ts.map +1 -1
  15. package/dist/src/server/session-store.js +27 -3
  16. package/dist/src/server/session-store.js.map +1 -1
  17. package/dist/src/session/session-worker-binding.d.ts +57 -0
  18. package/dist/src/session/session-worker-binding.d.ts.map +1 -0
  19. package/dist/src/session/session-worker-binding.js +109 -0
  20. package/dist/src/session/session-worker-binding.js.map +1 -0
  21. package/dist/src/shared/services/logging.service.d.ts +8 -0
  22. package/dist/src/shared/services/logging.service.d.ts.map +1 -1
  23. package/dist/src/shared/services/logging.service.js +10 -0
  24. package/dist/src/shared/services/logging.service.js.map +1 -1
  25. package/dist/src/snapshot/snapshot-compiler.d.ts +14 -0
  26. package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
  27. package/dist/src/snapshot/snapshot-compiler.js +119 -3
  28. package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
  29. package/dist/src/state/actionables-filter.d.ts.map +1 -1
  30. package/dist/src/state/actionables-filter.js +8 -30
  31. package/dist/src/state/actionables-filter.js.map +1 -1
  32. package/dist/src/state/locator-generator.d.ts.map +1 -1
  33. package/dist/src/state/locator-generator.js +1 -10
  34. package/dist/src/state/locator-generator.js.map +1 -1
  35. package/dist/src/state/node-layer.d.ts +22 -0
  36. package/dist/src/state/node-layer.d.ts.map +1 -0
  37. package/dist/src/state/node-layer.js +42 -0
  38. package/dist/src/state/node-layer.js.map +1 -0
  39. package/dist/src/state/state-manager.d.ts.map +1 -1
  40. package/dist/src/state/state-manager.js +9 -8
  41. package/dist/src/state/state-manager.js.map +1 -1
  42. package/dist/src/tools/tool-schemas.d.ts +22 -22
  43. package/dist/src/tools/tool-schemas.d.ts.map +1 -1
  44. package/dist/src/tools/tool-schemas.js.map +1 -1
  45. package/dist/src/worker/chrome-worker-process.d.ts +123 -0
  46. package/dist/src/worker/chrome-worker-process.d.ts.map +1 -0
  47. package/dist/src/worker/chrome-worker-process.js +294 -0
  48. package/dist/src/worker/chrome-worker-process.js.map +1 -0
  49. package/dist/src/worker/errors/index.d.ts +5 -0
  50. package/dist/src/worker/errors/index.d.ts.map +1 -0
  51. package/dist/src/worker/errors/index.js +5 -0
  52. package/dist/src/worker/errors/index.js.map +1 -0
  53. package/dist/src/worker/errors/worker.error.d.ts +122 -0
  54. package/dist/src/worker/errors/worker.error.d.ts.map +1 -0
  55. package/dist/src/worker/errors/worker.error.js +199 -0
  56. package/dist/src/worker/errors/worker.error.js.map +1 -0
  57. package/dist/src/worker/health-monitor.d.ts +141 -0
  58. package/dist/src/worker/health-monitor.d.ts.map +1 -0
  59. package/dist/src/worker/health-monitor.js +260 -0
  60. package/dist/src/worker/health-monitor.js.map +1 -0
  61. package/dist/src/worker/index.d.ts +16 -0
  62. package/dist/src/worker/index.d.ts.map +1 -0
  63. package/dist/src/worker/index.js +19 -0
  64. package/dist/src/worker/index.js.map +1 -0
  65. package/dist/src/worker/lease-manager.d.ts +137 -0
  66. package/dist/src/worker/lease-manager.d.ts.map +1 -0
  67. package/dist/src/worker/lease-manager.js +334 -0
  68. package/dist/src/worker/lease-manager.js.map +1 -0
  69. package/dist/src/worker/multi-tenant-config.d.ts +46 -0
  70. package/dist/src/worker/multi-tenant-config.d.ts.map +1 -0
  71. package/dist/src/worker/multi-tenant-config.js +94 -0
  72. package/dist/src/worker/multi-tenant-config.js.map +1 -0
  73. package/dist/src/worker/port-allocator.d.ts +96 -0
  74. package/dist/src/worker/port-allocator.d.ts.map +1 -0
  75. package/dist/src/worker/port-allocator.js +153 -0
  76. package/dist/src/worker/port-allocator.js.map +1 -0
  77. package/dist/src/worker/types.d.ts +218 -0
  78. package/dist/src/worker/types.d.ts.map +1 -0
  79. package/dist/src/worker/types.js +38 -0
  80. package/dist/src/worker/types.js.map +1 -0
  81. package/dist/src/worker/worker-manager.d.ts +157 -0
  82. package/dist/src/worker/worker-manager.d.ts.map +1 -0
  83. package/dist/src/worker/worker-manager.js +500 -0
  84. package/dist/src/worker/worker-manager.js.map +1 -0
  85. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.error.d.ts","sourceRoot":"","sources":["../../../../src/worker/errors/worker.error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Worker Error
3
+ *
4
+ * Standardized error classification for worker operations.
5
+ * Provides error codes for programmatic handling and detailed messages for debugging.
6
+ */
7
+ /**
8
+ * Standardized error for worker operations.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * throw new WorkerError(
13
+ * 'Worker crashed unexpectedly',
14
+ * 'WORKER_CRASHED',
15
+ * { workerId: 'w-123', exitCode: 1 }
16
+ * );
17
+ *
18
+ * // Catching and handling by code
19
+ * try {
20
+ * await workerManager.acquireForTenant('tenant-a', 'controller-1');
21
+ * } catch (error) {
22
+ * if (error instanceof WorkerError) {
23
+ * switch (error.code) {
24
+ * case 'MAX_WORKERS_REACHED':
25
+ * console.log('Worker limit reached, try again later');
26
+ * break;
27
+ * case 'LEASE_ALREADY_HELD':
28
+ * console.log('Another session has the lease');
29
+ * break;
30
+ * }
31
+ * }
32
+ * }
33
+ * ```
34
+ */
35
+ export class WorkerError extends Error {
36
+ /**
37
+ * Error code for programmatic handling
38
+ */
39
+ code;
40
+ /**
41
+ * Original error that caused this error (if any)
42
+ */
43
+ cause;
44
+ /**
45
+ * Additional context for debugging
46
+ */
47
+ context;
48
+ constructor(message, code, context, cause) {
49
+ super(message);
50
+ this.name = 'WorkerError';
51
+ this.code = code;
52
+ this.cause = cause;
53
+ this.context = context;
54
+ // Maintains proper stack trace for where error was thrown (V8 only)
55
+ if (Error.captureStackTrace) {
56
+ Error.captureStackTrace(this, WorkerError);
57
+ }
58
+ }
59
+ /**
60
+ * Create a JSON-serializable representation of the error
61
+ */
62
+ toJSON() {
63
+ return {
64
+ name: this.name,
65
+ message: this.message,
66
+ code: this.code,
67
+ context: this.context,
68
+ cause: this.cause
69
+ ? {
70
+ name: this.cause.name,
71
+ message: this.cause.message,
72
+ }
73
+ : undefined,
74
+ stack: this.stack,
75
+ };
76
+ }
77
+ /**
78
+ * Type guard to check if an error is a WorkerError
79
+ */
80
+ static isWorkerError(error) {
81
+ return error instanceof WorkerError;
82
+ }
83
+ // ==================== Factory Methods ====================
84
+ /**
85
+ * Create error for worker not found
86
+ */
87
+ static workerNotFound(workerId, context) {
88
+ return new WorkerError('Worker not found', 'WORKER_NOT_FOUND', { workerId, ...context });
89
+ }
90
+ /**
91
+ * Create error for worker not running
92
+ */
93
+ static workerNotRunning(workerId, currentState, context) {
94
+ return new WorkerError(`Worker is not running (current state: ${currentState})`, 'WORKER_NOT_RUNNING', { workerId, currentState, ...context });
95
+ }
96
+ /**
97
+ * Create error for worker crash
98
+ */
99
+ static workerCrashed(workerId, exitCode, signal, context) {
100
+ return new WorkerError(`Worker crashed (exit code: ${exitCode}, signal: ${signal})`, 'WORKER_CRASHED', { workerId, exitCode, signal, ...context });
101
+ }
102
+ /**
103
+ * Create error for worker start failure
104
+ */
105
+ static workerStartFailed(workerId, cause, context) {
106
+ return new WorkerError(`Failed to start worker: ${cause.message}`, 'WORKER_START_FAILED', { workerId, ...context }, cause);
107
+ }
108
+ /**
109
+ * Create error for worker stop failure
110
+ */
111
+ static workerStopFailed(workerId, cause, context) {
112
+ return new WorkerError(`Failed to stop worker: ${cause.message}`, 'WORKER_STOP_FAILED', { workerId, ...context }, cause);
113
+ }
114
+ /**
115
+ * Create error for lease not found
116
+ */
117
+ static leaseNotFound(tenantId, context) {
118
+ return new WorkerError('Lease not found for tenant', 'LEASE_NOT_FOUND', {
119
+ tenantId,
120
+ ...context,
121
+ });
122
+ }
123
+ /**
124
+ * Create error for lease not held by controller
125
+ */
126
+ static leaseNotHeld(tenantId, controllerId, actualControllerId, context) {
127
+ return new WorkerError('Lease is held by a different controller', 'LEASE_NOT_HELD', {
128
+ tenantId,
129
+ controllerId,
130
+ actualControllerId,
131
+ ...context,
132
+ });
133
+ }
134
+ /**
135
+ * Create error for expired lease
136
+ */
137
+ static leaseExpired(tenantId, expiredAt, context) {
138
+ return new WorkerError('Lease has expired', 'LEASE_EXPIRED', {
139
+ tenantId,
140
+ expiredAt,
141
+ ...context,
142
+ });
143
+ }
144
+ /**
145
+ * Create error for lease already held
146
+ */
147
+ static leaseAlreadyHeld(tenantId, heldByControllerId, context) {
148
+ return new WorkerError('Lease is already held by another controller', 'LEASE_ALREADY_HELD', {
149
+ tenantId,
150
+ heldByControllerId,
151
+ ...context,
152
+ });
153
+ }
154
+ /**
155
+ * Create error for port exhaustion
156
+ */
157
+ static portExhausted(portMin, portMax, context) {
158
+ return new WorkerError(`No available ports in range ${portMin}-${portMax}`, 'PORT_EXHAUSTED', {
159
+ portMin,
160
+ portMax,
161
+ ...context,
162
+ });
163
+ }
164
+ /**
165
+ * Create error for max workers reached
166
+ */
167
+ static maxWorkersReached(maxWorkers, currentCount, context) {
168
+ return new WorkerError(`Maximum worker limit reached (${currentCount}/${maxWorkers})`, 'MAX_WORKERS_REACHED', { maxWorkers, currentCount, ...context });
169
+ }
170
+ /**
171
+ * Create error for health check failure
172
+ */
173
+ static healthCheckFailed(workerId, cause, context) {
174
+ return new WorkerError(`Health check failed: ${cause.message}`, 'HEALTH_CHECK_FAILED', { workerId, ...context }, cause);
175
+ }
176
+ /**
177
+ * Create error for health check timeout
178
+ */
179
+ static healthCheckTimeout(workerId, timeoutMs, context) {
180
+ return new WorkerError(`Health check timed out after ${timeoutMs}ms`, 'HEALTH_CHECK_TIMEOUT', {
181
+ workerId,
182
+ timeoutMs,
183
+ ...context,
184
+ });
185
+ }
186
+ /**
187
+ * Create error for invalid state transition
188
+ */
189
+ static invalidState(currentState, attemptedOperation, context) {
190
+ return new WorkerError(`Invalid operation "${attemptedOperation}" in state "${currentState}"`, 'INVALID_STATE', { currentState, attemptedOperation, ...context });
191
+ }
192
+ /**
193
+ * Create error for generic operation failure
194
+ */
195
+ static operationFailed(operation, cause, context) {
196
+ return new WorkerError(`Operation failed: ${operation} - ${cause.message}`, 'OPERATION_FAILED', { operation, ...context }, cause);
197
+ }
198
+ }
199
+ //# sourceMappingURL=worker.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.error.js","sourceRoot":"","sources":["../../../../src/worker/errors/worker.error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Health Monitor
3
+ *
4
+ * Monitors the health of Chrome workers by periodically checking
5
+ * their CDP endpoints via /json/version.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import type { HealthCheckResult, HealthMonitorEvents } from './types.js';
9
+ /**
10
+ * Configuration for health checking
11
+ */
12
+ export interface HealthCheckConfig {
13
+ /** Timeout for individual health checks (ms) */
14
+ timeoutMs?: number;
15
+ /** Number of consecutive failures before considered unhealthy */
16
+ failureThreshold?: number;
17
+ }
18
+ /**
19
+ * Track health state for a worker
20
+ */
21
+ interface WorkerHealthState {
22
+ workerId: string;
23
+ port: number;
24
+ healthy: boolean;
25
+ consecutiveFailures: number;
26
+ lastCheck?: HealthCheckResult;
27
+ lastCheckTime?: number;
28
+ }
29
+ /**
30
+ * Type-safe EventEmitter for HealthMonitor
31
+ */
32
+ interface HealthMonitorEmitter {
33
+ on<K extends keyof HealthMonitorEvents>(event: K, listener: (data: HealthMonitorEvents[K]) => void): this;
34
+ once<K extends keyof HealthMonitorEvents>(event: K, listener: (data: HealthMonitorEvents[K]) => void): this;
35
+ emit<K extends keyof HealthMonitorEvents>(event: K, data: HealthMonitorEvents[K]): boolean;
36
+ off<K extends keyof HealthMonitorEvents>(event: K, listener: (data: HealthMonitorEvents[K]) => void): this;
37
+ removeAllListeners<K extends keyof HealthMonitorEvents>(event?: K): this;
38
+ }
39
+ /**
40
+ * Monitors the health of Chrome workers.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const monitor = new HealthMonitor({ intervalMs: 30000 });
45
+ *
46
+ * monitor.on('healthChange', ({ workerId, healthy, result }) => {
47
+ * if (!healthy) {
48
+ * console.log(`Worker ${workerId} became unhealthy: ${result.error}`);
49
+ * }
50
+ * });
51
+ *
52
+ * monitor.registerWorker('w-123', 9300);
53
+ * monitor.start();
54
+ *
55
+ * // Later...
56
+ * monitor.unregisterWorker('w-123');
57
+ * monitor.stop();
58
+ * ```
59
+ */
60
+ export declare class HealthMonitor extends EventEmitter implements HealthMonitorEmitter {
61
+ private readonly intervalMs;
62
+ private readonly config;
63
+ private readonly workers;
64
+ private intervalId;
65
+ private _isRunning;
66
+ constructor(intervalMs?: number, config?: HealthCheckConfig);
67
+ /**
68
+ * Check if the monitor is currently running
69
+ */
70
+ get isRunning(): boolean;
71
+ /**
72
+ * Get the number of registered workers
73
+ */
74
+ get workerCount(): number;
75
+ /**
76
+ * Register a worker for health monitoring
77
+ *
78
+ * @param workerId - Unique worker identifier
79
+ * @param port - CDP port number
80
+ */
81
+ registerWorker(workerId: string, port: number): void;
82
+ /**
83
+ * Unregister a worker from health monitoring
84
+ *
85
+ * @param workerId - Unique worker identifier
86
+ * @returns true if the worker was found and removed
87
+ */
88
+ unregisterWorker(workerId: string): boolean;
89
+ /**
90
+ * Check if a worker is registered
91
+ */
92
+ isWorkerRegistered(workerId: string): boolean;
93
+ /**
94
+ * Get the current health state of a worker
95
+ */
96
+ getWorkerHealth(workerId: string): WorkerHealthState | undefined;
97
+ /**
98
+ * Start periodic health monitoring
99
+ */
100
+ start(): void;
101
+ /**
102
+ * Stop periodic health monitoring
103
+ */
104
+ stop(): void;
105
+ /**
106
+ * Check health of all registered workers
107
+ */
108
+ checkAllWorkers(): Promise<void>;
109
+ /**
110
+ * Check health of a specific worker by ID
111
+ *
112
+ * @param workerId - Worker identifier
113
+ * @returns Health check result
114
+ */
115
+ checkWorkerById(workerId: string): Promise<HealthCheckResult>;
116
+ /**
117
+ * Perform a single health check on a worker
118
+ */
119
+ private checkWorker;
120
+ /**
121
+ * Perform a health check against the CDP endpoint
122
+ *
123
+ * @param port - CDP port number
124
+ * @returns Health check result
125
+ */
126
+ performHealthCheck(port: number): Promise<HealthCheckResult>;
127
+ /**
128
+ * Get all unhealthy workers
129
+ */
130
+ getUnhealthyWorkers(): string[];
131
+ /**
132
+ * Reset health state for a worker (e.g., after restart)
133
+ */
134
+ resetWorkerHealth(workerId: string): void;
135
+ /**
136
+ * Clear all registered workers
137
+ */
138
+ clear(): void;
139
+ }
140
+ export {};
141
+ //# sourceMappingURL=health-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.d.ts","sourceRoot":"","sources":["../../../src/worker/health-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Health Monitor
3
+ *
4
+ * Monitors the health of Chrome workers by periodically checking
5
+ * their CDP endpoints via /json/version.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { createLogger } from '../shared/services/logging.service.js';
9
+ const logger = createLogger('HealthMonitor');
10
+ /**
11
+ * Default health check configuration
12
+ */
13
+ const DEFAULT_HEALTH_CONFIG = {
14
+ timeoutMs: 5000,
15
+ failureThreshold: 3,
16
+ };
17
+ /**
18
+ * Monitors the health of Chrome workers.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const monitor = new HealthMonitor({ intervalMs: 30000 });
23
+ *
24
+ * monitor.on('healthChange', ({ workerId, healthy, result }) => {
25
+ * if (!healthy) {
26
+ * console.log(`Worker ${workerId} became unhealthy: ${result.error}`);
27
+ * }
28
+ * });
29
+ *
30
+ * monitor.registerWorker('w-123', 9300);
31
+ * monitor.start();
32
+ *
33
+ * // Later...
34
+ * monitor.unregisterWorker('w-123');
35
+ * monitor.stop();
36
+ * ```
37
+ */
38
+ export class HealthMonitor extends EventEmitter {
39
+ intervalMs;
40
+ config;
41
+ workers = new Map();
42
+ intervalId = null;
43
+ _isRunning = false;
44
+ constructor(intervalMs = 30_000, config = {}) {
45
+ super();
46
+ this.intervalMs = intervalMs;
47
+ this.config = { ...DEFAULT_HEALTH_CONFIG, ...config };
48
+ }
49
+ /**
50
+ * Check if the monitor is currently running
51
+ */
52
+ get isRunning() {
53
+ return this._isRunning;
54
+ }
55
+ /**
56
+ * Get the number of registered workers
57
+ */
58
+ get workerCount() {
59
+ return this.workers.size;
60
+ }
61
+ /**
62
+ * Register a worker for health monitoring
63
+ *
64
+ * @param workerId - Unique worker identifier
65
+ * @param port - CDP port number
66
+ */
67
+ registerWorker(workerId, port) {
68
+ if (this.workers.has(workerId)) {
69
+ logger.warning('Worker already registered for health monitoring', { workerId });
70
+ return;
71
+ }
72
+ this.workers.set(workerId, {
73
+ workerId,
74
+ port,
75
+ healthy: true, // Assume healthy until proven otherwise
76
+ consecutiveFailures: 0,
77
+ });
78
+ logger.debug('Worker registered for health monitoring', { workerId, port });
79
+ }
80
+ /**
81
+ * Unregister a worker from health monitoring
82
+ *
83
+ * @param workerId - Unique worker identifier
84
+ * @returns true if the worker was found and removed
85
+ */
86
+ unregisterWorker(workerId) {
87
+ const removed = this.workers.delete(workerId);
88
+ if (removed) {
89
+ logger.debug('Worker unregistered from health monitoring', { workerId });
90
+ }
91
+ return removed;
92
+ }
93
+ /**
94
+ * Check if a worker is registered
95
+ */
96
+ isWorkerRegistered(workerId) {
97
+ return this.workers.has(workerId);
98
+ }
99
+ /**
100
+ * Get the current health state of a worker
101
+ */
102
+ getWorkerHealth(workerId) {
103
+ return this.workers.get(workerId);
104
+ }
105
+ /**
106
+ * Start periodic health monitoring
107
+ */
108
+ start() {
109
+ if (this._isRunning) {
110
+ logger.warning('Health monitor is already running');
111
+ return;
112
+ }
113
+ this._isRunning = true;
114
+ // Run initial check immediately
115
+ void this.checkAllWorkers();
116
+ // Set up periodic checks
117
+ this.intervalId = setInterval(() => {
118
+ void this.checkAllWorkers();
119
+ }, this.intervalMs);
120
+ logger.info('Health monitor started', { intervalMs: this.intervalMs });
121
+ }
122
+ /**
123
+ * Stop periodic health monitoring
124
+ */
125
+ stop() {
126
+ if (!this._isRunning) {
127
+ return;
128
+ }
129
+ if (this.intervalId) {
130
+ clearInterval(this.intervalId);
131
+ this.intervalId = null;
132
+ }
133
+ this._isRunning = false;
134
+ logger.info('Health monitor stopped');
135
+ }
136
+ /**
137
+ * Check health of all registered workers
138
+ */
139
+ async checkAllWorkers() {
140
+ const checks = Array.from(this.workers.values()).map((state) => this.checkWorker(state));
141
+ await Promise.all(checks);
142
+ }
143
+ /**
144
+ * Check health of a specific worker by ID
145
+ *
146
+ * @param workerId - Worker identifier
147
+ * @returns Health check result
148
+ */
149
+ async checkWorkerById(workerId) {
150
+ const state = this.workers.get(workerId);
151
+ if (!state) {
152
+ return {
153
+ healthy: false,
154
+ error: `Worker ${workerId} is not registered`,
155
+ };
156
+ }
157
+ return this.checkWorker(state);
158
+ }
159
+ /**
160
+ * Perform a single health check on a worker
161
+ */
162
+ async checkWorker(state) {
163
+ const result = await this.performHealthCheck(state.port);
164
+ state.lastCheck = result;
165
+ state.lastCheckTime = Date.now();
166
+ const wasHealthy = state.healthy;
167
+ if (result.healthy) {
168
+ state.consecutiveFailures = 0;
169
+ state.healthy = true;
170
+ }
171
+ else {
172
+ state.consecutiveFailures++;
173
+ // Only mark as unhealthy after threshold is reached
174
+ if (state.consecutiveFailures >= this.config.failureThreshold) {
175
+ state.healthy = false;
176
+ }
177
+ }
178
+ // Emit event if health state changed
179
+ if (wasHealthy !== state.healthy) {
180
+ logger.info('Worker health state changed', {
181
+ workerId: state.workerId,
182
+ healthy: state.healthy,
183
+ consecutiveFailures: state.consecutiveFailures,
184
+ });
185
+ this.emit('healthChange', {
186
+ workerId: state.workerId,
187
+ healthy: state.healthy,
188
+ result,
189
+ });
190
+ }
191
+ return result;
192
+ }
193
+ /**
194
+ * Perform a health check against the CDP endpoint
195
+ *
196
+ * @param port - CDP port number
197
+ * @returns Health check result
198
+ */
199
+ async performHealthCheck(port) {
200
+ const url = `http://127.0.0.1:${port}/json/version`;
201
+ const startTime = Date.now();
202
+ try {
203
+ const response = await fetch(url, {
204
+ signal: AbortSignal.timeout(this.config.timeoutMs),
205
+ });
206
+ if (!response.ok) {
207
+ return {
208
+ healthy: false,
209
+ responseTimeMs: Date.now() - startTime,
210
+ error: `HTTP ${response.status}: ${response.statusText}`,
211
+ };
212
+ }
213
+ const versionInfo = (await response.json());
214
+ return {
215
+ healthy: true,
216
+ responseTimeMs: Date.now() - startTime,
217
+ versionInfo,
218
+ };
219
+ }
220
+ catch (error) {
221
+ const errorMessage = error instanceof Error
222
+ ? error.name === 'TimeoutError'
223
+ ? `Timeout after ${this.config.timeoutMs}ms`
224
+ : error.message
225
+ : String(error);
226
+ return {
227
+ healthy: false,
228
+ responseTimeMs: Date.now() - startTime,
229
+ error: errorMessage,
230
+ };
231
+ }
232
+ }
233
+ /**
234
+ * Get all unhealthy workers
235
+ */
236
+ getUnhealthyWorkers() {
237
+ return Array.from(this.workers.entries())
238
+ .filter(([_, state]) => !state.healthy)
239
+ .map(([workerId]) => workerId);
240
+ }
241
+ /**
242
+ * Reset health state for a worker (e.g., after restart)
243
+ */
244
+ resetWorkerHealth(workerId) {
245
+ const state = this.workers.get(workerId);
246
+ if (state) {
247
+ state.healthy = true;
248
+ state.consecutiveFailures = 0;
249
+ state.lastCheck = undefined;
250
+ state.lastCheckTime = undefined;
251
+ }
252
+ }
253
+ /**
254
+ * Clear all registered workers
255
+ */
256
+ clear() {
257
+ this.workers.clear();
258
+ }
259
+ }
260
+ //# sourceMappingURL=health-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-monitor.js","sourceRoot":"","sources":["../../../src/worker/health-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Worker Module
3
+ *
4
+ * Exports the Browser Worker Manager system for managing tenant-bound
5
+ * Chrome workers with exclusive lease-based access control.
6
+ */
7
+ export { WorkerManager } from './worker-manager.js';
8
+ export { WorkerError, type WorkerErrorCode } from './errors/index.js';
9
+ export type { WorkerState, LeaseStatus, WorkerDescriptor, LeaseDescriptor, LeaseAcquisitionResult, WorkerManagerConfig, PortRange, HealthCheckResult, CdpVersionInfo, WorkerProcessEvents, HealthMonitorEvents, WorkerManagerEvents, } from './types.js';
10
+ export { DEFAULT_WORKER_CONFIG, CHROME_WORKER_ARGS } from './types.js';
11
+ export { PortAllocator, type PortAllocatorConfig } from './port-allocator.js';
12
+ export { ChromeWorkerProcess, type ChromeWorkerProcessConfig, findChromePath, } from './chrome-worker-process.js';
13
+ export { HealthMonitor, type HealthCheckConfig } from './health-monitor.js';
14
+ export { LeaseManager, type LeaseManagerConfig } from './lease-manager.js';
15
+ export { getMultiTenantConfig, validateMultiTenantConfig, type MultiTenantConfig, } from './multi-tenant-config.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGtE,YAAY,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,mBAAmB,EACnB,KAAK,yBAAyB,EAC9B,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG3E,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Worker Module
3
+ *
4
+ * Exports the Browser Worker Manager system for managing tenant-bound
5
+ * Chrome workers with exclusive lease-based access control.
6
+ */
7
+ // Main orchestrator
8
+ export { WorkerManager } from './worker-manager.js';
9
+ // Error handling
10
+ export { WorkerError } from './errors/index.js';
11
+ export { DEFAULT_WORKER_CONFIG, CHROME_WORKER_ARGS } from './types.js';
12
+ // Component classes (for advanced usage/testing)
13
+ export { PortAllocator } from './port-allocator.js';
14
+ export { ChromeWorkerProcess, findChromePath, } from './chrome-worker-process.js';
15
+ export { HealthMonitor } from './health-monitor.js';
16
+ export { LeaseManager } from './lease-manager.js';
17
+ // Multi-tenant configuration
18
+ export { getMultiTenantConfig, validateMultiTenantConfig, } from './multi-tenant-config.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/worker/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AAkBtE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEvE,iDAAiD;AACjD,OAAO,EAAE,aAAa,EAA4B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,mBAAmB,EAEnB,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAA0B,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAA2B,MAAM,oBAAoB,CAAC;AAE3E,6BAA6B;AAC7B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,GAE1B,MAAM,0BAA0B,CAAC"}