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.
- package/dist/src/browser/session-manager.d.ts +28 -1
- package/dist/src/browser/session-manager.d.ts.map +1 -1
- package/dist/src/browser/session-manager.js +73 -0
- package/dist/src/browser/session-manager.js.map +1 -1
- package/dist/src/index.d.ts +10 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +47 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/server/mcp-server.d.ts +14 -1
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/mcp-server.js +21 -6
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/server/session-store.d.ts +18 -3
- package/dist/src/server/session-store.d.ts.map +1 -1
- package/dist/src/server/session-store.js +27 -3
- package/dist/src/server/session-store.js.map +1 -1
- package/dist/src/session/session-worker-binding.d.ts +57 -0
- package/dist/src/session/session-worker-binding.d.ts.map +1 -0
- package/dist/src/session/session-worker-binding.js +109 -0
- package/dist/src/session/session-worker-binding.js.map +1 -0
- package/dist/src/shared/services/logging.service.d.ts +8 -0
- package/dist/src/shared/services/logging.service.d.ts.map +1 -1
- package/dist/src/shared/services/logging.service.js +10 -0
- package/dist/src/shared/services/logging.service.js.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.d.ts +14 -0
- package/dist/src/snapshot/snapshot-compiler.d.ts.map +1 -1
- package/dist/src/snapshot/snapshot-compiler.js +119 -3
- package/dist/src/snapshot/snapshot-compiler.js.map +1 -1
- package/dist/src/state/actionables-filter.d.ts.map +1 -1
- package/dist/src/state/actionables-filter.js +8 -30
- package/dist/src/state/actionables-filter.js.map +1 -1
- package/dist/src/state/locator-generator.d.ts.map +1 -1
- package/dist/src/state/locator-generator.js +1 -10
- package/dist/src/state/locator-generator.js.map +1 -1
- package/dist/src/state/node-layer.d.ts +22 -0
- package/dist/src/state/node-layer.d.ts.map +1 -0
- package/dist/src/state/node-layer.js +42 -0
- package/dist/src/state/node-layer.js.map +1 -0
- package/dist/src/state/state-manager.d.ts.map +1 -1
- package/dist/src/state/state-manager.js +9 -8
- package/dist/src/state/state-manager.js.map +1 -1
- package/dist/src/tools/tool-schemas.d.ts +22 -22
- package/dist/src/tools/tool-schemas.d.ts.map +1 -1
- package/dist/src/tools/tool-schemas.js.map +1 -1
- package/dist/src/worker/chrome-worker-process.d.ts +123 -0
- package/dist/src/worker/chrome-worker-process.d.ts.map +1 -0
- package/dist/src/worker/chrome-worker-process.js +294 -0
- package/dist/src/worker/chrome-worker-process.js.map +1 -0
- package/dist/src/worker/errors/index.d.ts +5 -0
- package/dist/src/worker/errors/index.d.ts.map +1 -0
- package/dist/src/worker/errors/index.js +5 -0
- package/dist/src/worker/errors/index.js.map +1 -0
- package/dist/src/worker/errors/worker.error.d.ts +122 -0
- package/dist/src/worker/errors/worker.error.d.ts.map +1 -0
- package/dist/src/worker/errors/worker.error.js +199 -0
- package/dist/src/worker/errors/worker.error.js.map +1 -0
- package/dist/src/worker/health-monitor.d.ts +141 -0
- package/dist/src/worker/health-monitor.d.ts.map +1 -0
- package/dist/src/worker/health-monitor.js +260 -0
- package/dist/src/worker/health-monitor.js.map +1 -0
- package/dist/src/worker/index.d.ts +16 -0
- package/dist/src/worker/index.d.ts.map +1 -0
- package/dist/src/worker/index.js +19 -0
- package/dist/src/worker/index.js.map +1 -0
- package/dist/src/worker/lease-manager.d.ts +137 -0
- package/dist/src/worker/lease-manager.d.ts.map +1 -0
- package/dist/src/worker/lease-manager.js +334 -0
- package/dist/src/worker/lease-manager.js.map +1 -0
- package/dist/src/worker/multi-tenant-config.d.ts +46 -0
- package/dist/src/worker/multi-tenant-config.d.ts.map +1 -0
- package/dist/src/worker/multi-tenant-config.js +94 -0
- package/dist/src/worker/multi-tenant-config.js.map +1 -0
- package/dist/src/worker/port-allocator.d.ts +96 -0
- package/dist/src/worker/port-allocator.d.ts.map +1 -0
- package/dist/src/worker/port-allocator.js +153 -0
- package/dist/src/worker/port-allocator.js.map +1 -0
- package/dist/src/worker/types.d.ts +218 -0
- package/dist/src/worker/types.d.ts.map +1 -0
- package/dist/src/worker/types.js +38 -0
- package/dist/src/worker/types.js.map +1 -0
- package/dist/src/worker/worker-manager.d.ts +157 -0
- package/dist/src/worker/worker-manager.d.ts.map +1 -0
- package/dist/src/worker/worker-manager.js +500 -0
- package/dist/src/worker/worker-manager.js.map +1 -0
- 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":"AAAA;;;;;GAKG;AA2BH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC;;OAEG;IACM,IAAI,CAAkB;IAE/B;;OAEG;IACM,KAAK,CAAS;IAEvB;;OAEG;IACM,OAAO,CAA2B;IAE3C,YACE,OAAe,EACf,IAAqB,EACrB,OAAiC,EACjC,KAAa;QAEb,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,oEAAoE;QACpE,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACf,CAAC,CAAC;oBACE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;oBACrB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;iBAC5B;gBACH,CAAC,CAAC,SAAS;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAc;QACjC,OAAO,KAAK,YAAY,WAAW,CAAC;IACtC,CAAC;IAED,4DAA4D;IAE5D;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAgB,EAAE,OAAiC;QACvE,OAAO,IAAI,WAAW,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,QAAgB,EAChB,YAAoB,EACpB,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,yCAAyC,YAAY,GAAG,EACxD,oBAAoB,EACpB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CACvC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAClB,QAAgB,EAChB,QAAuB,EACvB,MAAqB,EACrB,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,8BAA8B,QAAQ,aAAa,MAAM,GAAG,EAC5D,gBAAgB,EAChB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAC3C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAgB,EAChB,KAAY,EACZ,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,2BAA2B,KAAK,CAAC,OAAO,EAAE,EAC1C,qBAAqB,EACrB,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EACxB,KAAK,CACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,QAAgB,EAChB,KAAY,EACZ,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,0BAA0B,KAAK,CAAC,OAAO,EAAE,EACzC,oBAAoB,EACpB,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EACxB,KAAK,CACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAgB,EAAE,OAAiC;QACtE,OAAO,IAAI,WAAW,CAAC,4BAA4B,EAAE,iBAAiB,EAAE;YACtE,QAAQ;YACR,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,QAAgB,EAChB,YAAoB,EACpB,kBAA0B,EAC1B,OAAiC;QAEjC,OAAO,IAAI,WAAW,CAAC,yCAAyC,EAAE,gBAAgB,EAAE;YAClF,QAAQ;YACR,YAAY;YACZ,kBAAkB;YAClB,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,QAAgB,EAChB,SAAiB,EACjB,OAAiC;QAEjC,OAAO,IAAI,WAAW,CAAC,mBAAmB,EAAE,eAAe,EAAE;YAC3D,QAAQ;YACR,SAAS;YACT,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CACrB,QAAgB,EAChB,kBAA0B,EAC1B,OAAiC;QAEjC,OAAO,IAAI,WAAW,CAAC,6CAA6C,EAAE,oBAAoB,EAAE;YAC1F,QAAQ;YACR,kBAAkB;YAClB,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAClB,OAAe,EACf,OAAe,EACf,OAAiC;QAEjC,OAAO,IAAI,WAAW,CAAC,+BAA+B,OAAO,IAAI,OAAO,EAAE,EAAE,gBAAgB,EAAE;YAC5F,OAAO;YACP,OAAO;YACP,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,UAAkB,EAClB,YAAoB,EACpB,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,iCAAiC,YAAY,IAAI,UAAU,GAAG,EAC9D,qBAAqB,EACrB,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CACzC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAgB,EAChB,KAAY,EACZ,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,wBAAwB,KAAK,CAAC,OAAO,EAAE,EACvC,qBAAqB,EACrB,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EACxB,KAAK,CACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CACvB,QAAgB,EAChB,SAAiB,EACjB,OAAiC;QAEjC,OAAO,IAAI,WAAW,CAAC,gCAAgC,SAAS,IAAI,EAAE,sBAAsB,EAAE;YAC5F,QAAQ;YACR,SAAS;YACT,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,YAAoB,EACpB,kBAA0B,EAC1B,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,sBAAsB,kBAAkB,eAAe,YAAY,GAAG,EACtE,eAAe,EACf,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE,CACjD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe,CACpB,SAAiB,EACjB,KAAY,EACZ,OAAiC;QAEjC,OAAO,IAAI,WAAW,CACpB,qBAAqB,SAAS,MAAM,KAAK,CAAC,OAAO,EAAE,EACnD,kBAAkB,EAClB,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,EACzB,KAAK,CACN,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAY7C;;GAEG;AACH,MAAM,qBAAqB,GAAgC;IACzD,SAAS,EAAE,IAAI;IACf,gBAAgB,EAAE,CAAC;CACpB,CAAC;AAkCF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC5B,UAAU,CAAS;IACnB,MAAM,CAA8B;IACpC,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IACxD,UAAU,GAA0C,IAAI,CAAC;IACzD,UAAU,GAAG,KAAK,CAAC;IAE3B,YAAY,UAAU,GAAG,MAAM,EAAE,SAA4B,EAAE;QAC7D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,QAAgB,EAAE,IAAY;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,iDAAiD,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,QAAQ;YACR,IAAI;YACJ,OAAO,EAAE,IAAI,EAAE,wCAAwC;YACvD,mBAAmB,EAAE,CAAC;SACvB,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,yCAAyC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,QAAgB;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,QAAgB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAgB;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,gCAAgC;QAChC,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QAE5B,yBAAyB;QACzB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9B,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpB,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,UAAU,QAAQ,oBAAoB;aAC9C,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,KAAwB;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzD,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;QACzB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEjC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;QAEjC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAC9B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAE5B,oDAAoD;YACpD,IAAI,KAAK,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC9D,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;gBACzC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;aAC/C,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAY;QACnC,MAAM,GAAG,GAAG,oBAAoB,IAAI,eAAe,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;aACnD,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACtC,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE;iBACzD,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;YAE9D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACtC,WAAW;aACZ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc;oBAC7B,CAAC,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI;oBAC5C,CAAC,CAAC,KAAK,CAAC,OAAO;gBACjB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACtC,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACtC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,QAAgB;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAC9B,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC5B,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -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"}
|