@procwire/transport 0.1.3 → 0.3.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/README.md +130 -4
- package/dist/channel/builder.d.ts +17 -0
- package/dist/channel/builder.d.ts.map +1 -1
- package/dist/channel/builder.js +34 -0
- package/dist/channel/builder.js.map +1 -1
- package/dist/channel/index.d.ts +1 -1
- package/dist/channel/index.d.ts.map +1 -1
- package/dist/channel/index.js +1 -1
- package/dist/channel/index.js.map +1 -1
- package/dist/channel/quickstart.d.ts.map +1 -1
- package/dist/channel/quickstart.js +16 -10
- package/dist/channel/quickstart.js.map +1 -1
- package/dist/channel/request-channel.d.ts +6 -1
- package/dist/channel/request-channel.d.ts.map +1 -1
- package/dist/channel/request-channel.js +138 -34
- package/dist/channel/request-channel.js.map +1 -1
- package/dist/channel/types.d.ts +129 -7
- package/dist/channel/types.d.ts.map +1 -1
- package/dist/framing/length-prefixed.d.ts +5 -1
- package/dist/framing/length-prefixed.d.ts.map +1 -1
- package/dist/framing/length-prefixed.js +94 -15
- package/dist/framing/length-prefixed.js.map +1 -1
- package/dist/framing/line-delimited.d.ts +4 -1
- package/dist/framing/line-delimited.d.ts.map +1 -1
- package/dist/framing/line-delimited.js +89 -23
- package/dist/framing/line-delimited.js.map +1 -1
- package/dist/heartbeat/constants.d.ts +12 -0
- package/dist/heartbeat/constants.d.ts.map +1 -0
- package/dist/heartbeat/constants.js +17 -0
- package/dist/heartbeat/constants.js.map +1 -0
- package/dist/heartbeat/index.d.ts +10 -0
- package/dist/heartbeat/index.d.ts.map +1 -0
- package/dist/heartbeat/index.js +10 -0
- package/dist/heartbeat/index.js.map +1 -0
- package/dist/heartbeat/manager.d.ts +107 -0
- package/dist/heartbeat/manager.d.ts.map +1 -0
- package/dist/heartbeat/manager.js +252 -0
- package/dist/heartbeat/manager.js.map +1 -0
- package/dist/heartbeat/types.d.ts +99 -0
- package/dist/heartbeat/types.d.ts.map +1 -0
- package/dist/heartbeat/types.js +8 -0
- package/dist/heartbeat/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/process/handle.d.ts.map +1 -1
- package/dist/process/handle.js.map +1 -1
- package/dist/process/manager.d.ts +16 -0
- package/dist/process/manager.d.ts.map +1 -1
- package/dist/process/manager.js +133 -82
- package/dist/process/manager.js.map +1 -1
- package/dist/process/types.d.ts +110 -1
- package/dist/process/types.d.ts.map +1 -1
- package/dist/protocol/index.d.ts +2 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +3 -0
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/jsonrpc.d.ts.map +1 -1
- package/dist/protocol/jsonrpc.js.map +1 -1
- package/dist/protocol/reserved-methods.d.ts +90 -0
- package/dist/protocol/reserved-methods.d.ts.map +1 -0
- package/dist/protocol/reserved-methods.js +99 -0
- package/dist/protocol/reserved-methods.js.map +1 -0
- package/dist/protocol/reserved-types.d.ts +231 -0
- package/dist/protocol/reserved-types.d.ts.map +1 -0
- package/dist/protocol/reserved-types.js +10 -0
- package/dist/protocol/reserved-types.js.map +1 -0
- package/dist/protocol/simple.d.ts.map +1 -1
- package/dist/protocol/simple.js.map +1 -1
- package/dist/reconnect/constants.d.ts +12 -0
- package/dist/reconnect/constants.d.ts.map +1 -0
- package/dist/reconnect/constants.js +21 -0
- package/dist/reconnect/constants.js.map +1 -0
- package/dist/reconnect/index.d.ts +10 -0
- package/dist/reconnect/index.d.ts.map +1 -0
- package/dist/reconnect/index.js +10 -0
- package/dist/reconnect/index.js.map +1 -0
- package/dist/reconnect/manager.d.ts +110 -0
- package/dist/reconnect/manager.d.ts.map +1 -0
- package/dist/reconnect/manager.js +264 -0
- package/dist/reconnect/manager.js.map +1 -0
- package/dist/reconnect/types.d.ts +137 -0
- package/dist/reconnect/types.d.ts.map +1 -0
- package/dist/reconnect/types.js +8 -0
- package/dist/reconnect/types.js.map +1 -0
- package/dist/resilience/handle.d.ts +112 -0
- package/dist/resilience/handle.d.ts.map +1 -0
- package/dist/resilience/handle.js +371 -0
- package/dist/resilience/handle.js.map +1 -0
- package/dist/resilience/index.d.ts +9 -0
- package/dist/resilience/index.d.ts.map +1 -0
- package/dist/resilience/index.js +9 -0
- package/dist/resilience/index.js.map +1 -0
- package/dist/resilience/types.d.ts +191 -0
- package/dist/resilience/types.d.ts.map +1 -0
- package/dist/resilience/types.js +8 -0
- package/dist/resilience/types.js.map +1 -0
- package/dist/serialization/json.d.ts.map +1 -1
- package/dist/serialization/json.js.map +1 -1
- package/dist/shutdown/constants.d.ts +12 -0
- package/dist/shutdown/constants.d.ts.map +1 -0
- package/dist/shutdown/constants.js +15 -0
- package/dist/shutdown/constants.js.map +1 -0
- package/dist/shutdown/index.d.ts +10 -0
- package/dist/shutdown/index.d.ts.map +1 -0
- package/dist/shutdown/index.js +10 -0
- package/dist/shutdown/index.js.map +1 -0
- package/dist/shutdown/manager.d.ts +102 -0
- package/dist/shutdown/manager.d.ts.map +1 -0
- package/dist/shutdown/manager.js +252 -0
- package/dist/shutdown/manager.js.map +1 -0
- package/dist/shutdown/types.d.ts +133 -0
- package/dist/shutdown/types.d.ts.map +1 -0
- package/dist/shutdown/types.js +8 -0
- package/dist/shutdown/types.js.map +1 -0
- package/dist/transport/socket-server.d.ts.map +1 -1
- package/dist/transport/socket-server.js.map +1 -1
- package/dist/transport/socket-transport.d.ts +11 -13
- package/dist/transport/socket-transport.d.ts.map +1 -1
- package/dist/transport/socket-transport.js +57 -26
- package/dist/transport/socket-transport.js.map +1 -1
- package/dist/transport/stdio-transport.d.ts +12 -19
- package/dist/transport/stdio-transport.d.ts.map +1 -1
- package/dist/transport/stdio-transport.js +54 -33
- package/dist/transport/stdio-transport.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/metrics.d.ts +6 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +2 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/pipe-path.d.ts +8 -2
- package/dist/utils/pipe-path.d.ts.map +1 -1
- package/dist/utils/pipe-path.js +27 -4
- package/dist/utils/pipe-path.js.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/platform.js +1 -1
- package/dist/utils/platform.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResilientProcessHandle implementation.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a ProcessHandle with heartbeat monitoring, auto-reconnect,
|
|
5
|
+
* and graceful shutdown capabilities.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
* @module Resilience
|
|
9
|
+
*/
|
|
10
|
+
import { EventEmitter } from "../utils/events.js";
|
|
11
|
+
import { HeartbeatManager, DEFAULT_HEARTBEAT_OPTIONS } from "../heartbeat/index.js";
|
|
12
|
+
import { ReconnectManager, DEFAULT_RECONNECT_OPTIONS } from "../reconnect/index.js";
|
|
13
|
+
import { ShutdownManager, DEFAULT_SHUTDOWN_OPTIONS } from "../shutdown/index.js";
|
|
14
|
+
import { ReservedMethods } from "../protocol/reserved-methods.js";
|
|
15
|
+
/**
|
|
16
|
+
* Creates a Reconnectable adapter from a ProcessHandle.
|
|
17
|
+
*
|
|
18
|
+
* Note: Reconnection is NOT supported for stdio-based ProcessHandle.
|
|
19
|
+
* stdio streams are bound to a specific process - when the process dies,
|
|
20
|
+
* the streams are destroyed and cannot be "reconnected".
|
|
21
|
+
*
|
|
22
|
+
* For ProcessHandle, "reconnection" means restarting the process, which is
|
|
23
|
+
* the responsibility of ProcessManager at a higher level, not ResilientProcessHandle.
|
|
24
|
+
*
|
|
25
|
+
* Reconnection IS supported for socket-based transports (TCP, named pipes as server)
|
|
26
|
+
* where a new connection can be established to a listening endpoint.
|
|
27
|
+
*
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
function createReconnectable(_handle) {
|
|
31
|
+
return {
|
|
32
|
+
connect: async () => {
|
|
33
|
+
// stdio-based handles cannot be reconnected - the streams are bound
|
|
34
|
+
// to a specific process and are destroyed when the process exits.
|
|
35
|
+
// Use ProcessManager.restart() to restart the entire process instead.
|
|
36
|
+
throw new Error("Reconnection not supported for ProcessHandle. " +
|
|
37
|
+
"Use ProcessManager.restart() to restart the process.");
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a Shutdownable adapter from a ProcessHandle and control channel.
|
|
43
|
+
*/
|
|
44
|
+
function createShutdownable(handle, kill) {
|
|
45
|
+
return {
|
|
46
|
+
id: handle.id,
|
|
47
|
+
pid: handle.pid,
|
|
48
|
+
request: (method, params, timeout) => handle.request(method, params, timeout),
|
|
49
|
+
kill,
|
|
50
|
+
onNotification: (method, handler) => {
|
|
51
|
+
// Subscribe to notifications from the control channel
|
|
52
|
+
// The channel's onNotification returns an unsubscribe function
|
|
53
|
+
const channel = handle.controlChannel;
|
|
54
|
+
// We need to filter notifications by method
|
|
55
|
+
const wrappedHandler = (notification) => {
|
|
56
|
+
// Check if this notification has the expected method
|
|
57
|
+
// The notification format depends on the protocol
|
|
58
|
+
const notif = notification;
|
|
59
|
+
if (notif.method === method) {
|
|
60
|
+
handler(notif.params);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return channel.onNotification(wrappedHandler);
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Default resilient process options.
|
|
69
|
+
*
|
|
70
|
+
* Note: Reconnect is disabled by default for ProcessHandle because stdio-based
|
|
71
|
+
* transports cannot be reconnected. See createReconnectable() for details.
|
|
72
|
+
*/
|
|
73
|
+
export const DEFAULT_RESILIENT_OPTIONS = {
|
|
74
|
+
heartbeat: DEFAULT_HEARTBEAT_OPTIONS,
|
|
75
|
+
reconnect: { ...DEFAULT_RECONNECT_OPTIONS, enabled: false },
|
|
76
|
+
shutdown: DEFAULT_SHUTDOWN_OPTIONS,
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* A process handle with resilience features.
|
|
80
|
+
*
|
|
81
|
+
* Combines heartbeat monitoring, auto-reconnect, and graceful shutdown
|
|
82
|
+
* with a standard ProcessHandle.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const resilientHandle = new ResilientProcessHandle(processHandle, {
|
|
87
|
+
* heartbeat: { intervalMs: 5000, timeoutMs: 1000, maxMissed: 3 },
|
|
88
|
+
* reconnect: { maxAttempts: 5, initialDelay: 100 },
|
|
89
|
+
* shutdown: { gracefulTimeoutMs: 5000 },
|
|
90
|
+
* });
|
|
91
|
+
*
|
|
92
|
+
* resilientHandle.on('heartbeatDead', () => {
|
|
93
|
+
* console.log('Worker is unresponsive');
|
|
94
|
+
* });
|
|
95
|
+
*
|
|
96
|
+
* resilientHandle.on('reconnected', ({ attempt }) => {
|
|
97
|
+
* console.log(`Reconnected after ${attempt} attempts`);
|
|
98
|
+
* });
|
|
99
|
+
*
|
|
100
|
+
* resilientHandle.start();
|
|
101
|
+
*
|
|
102
|
+
* // Later
|
|
103
|
+
* await resilientHandle.shutdown('user_requested');
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export class ResilientProcessHandle {
|
|
107
|
+
_handle;
|
|
108
|
+
events = new EventEmitter();
|
|
109
|
+
heartbeatManager = null;
|
|
110
|
+
reconnectManager = null;
|
|
111
|
+
shutdownManager = null;
|
|
112
|
+
handleEventSubscriptions = [];
|
|
113
|
+
resilienceSubscriptions = [];
|
|
114
|
+
_isHealthy = true;
|
|
115
|
+
killFn = null;
|
|
116
|
+
/**
|
|
117
|
+
* Creates a new ResilientProcessHandle.
|
|
118
|
+
*
|
|
119
|
+
* @param handle - The underlying ProcessHandle
|
|
120
|
+
* @param options - Resilience configuration options
|
|
121
|
+
* @param killFn - Function to kill the process (injected for testability)
|
|
122
|
+
*/
|
|
123
|
+
constructor(handle, options = {}, killFn) {
|
|
124
|
+
this._handle = handle;
|
|
125
|
+
this.killFn = killFn ?? null;
|
|
126
|
+
// Initialize heartbeat manager if not disabled
|
|
127
|
+
if (options.heartbeat !== false) {
|
|
128
|
+
const heartbeatOptions = {
|
|
129
|
+
...DEFAULT_HEARTBEAT_OPTIONS,
|
|
130
|
+
...(options.heartbeat ?? {}),
|
|
131
|
+
};
|
|
132
|
+
this.heartbeatManager = new HeartbeatManager(handle.controlChannel, heartbeatOptions);
|
|
133
|
+
this.setupHeartbeatListeners();
|
|
134
|
+
}
|
|
135
|
+
// Initialize reconnect manager if not disabled
|
|
136
|
+
if (options.reconnect !== false) {
|
|
137
|
+
const reconnectOptions = {
|
|
138
|
+
...DEFAULT_RECONNECT_OPTIONS,
|
|
139
|
+
...(options.reconnect ?? {}),
|
|
140
|
+
};
|
|
141
|
+
this.reconnectManager = new ReconnectManager(createReconnectable(handle), reconnectOptions);
|
|
142
|
+
this.setupReconnectListeners();
|
|
143
|
+
}
|
|
144
|
+
// Initialize shutdown manager if not disabled
|
|
145
|
+
if (options.shutdown !== false) {
|
|
146
|
+
const shutdownOptions = {
|
|
147
|
+
...DEFAULT_SHUTDOWN_OPTIONS,
|
|
148
|
+
...(options.shutdown ?? {}),
|
|
149
|
+
};
|
|
150
|
+
this.shutdownManager = new ShutdownManager(shutdownOptions);
|
|
151
|
+
this.setupShutdownListeners();
|
|
152
|
+
}
|
|
153
|
+
// Forward base handle events
|
|
154
|
+
this.setupHandleEventForwarding();
|
|
155
|
+
}
|
|
156
|
+
// ProcessHandle interface delegation
|
|
157
|
+
get id() {
|
|
158
|
+
return this._handle.id;
|
|
159
|
+
}
|
|
160
|
+
get pid() {
|
|
161
|
+
return this._handle.pid;
|
|
162
|
+
}
|
|
163
|
+
get state() {
|
|
164
|
+
return this._handle.state;
|
|
165
|
+
}
|
|
166
|
+
get isHealthy() {
|
|
167
|
+
return this._isHealthy;
|
|
168
|
+
}
|
|
169
|
+
get isReconnecting() {
|
|
170
|
+
return this.reconnectManager?.isReconnecting() ?? false;
|
|
171
|
+
}
|
|
172
|
+
get controlChannel() {
|
|
173
|
+
return this._handle.controlChannel;
|
|
174
|
+
}
|
|
175
|
+
get dataChannel() {
|
|
176
|
+
return this._handle.dataChannel;
|
|
177
|
+
}
|
|
178
|
+
get handle() {
|
|
179
|
+
return this._handle;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Sends a request, optionally queueing during reconnection.
|
|
183
|
+
* Successful requests signal activity to the heartbeat manager (implicit heartbeat).
|
|
184
|
+
*/
|
|
185
|
+
async request(method, params, timeout) {
|
|
186
|
+
// If reconnecting and queueing is enabled, queue the request
|
|
187
|
+
if (this.reconnectManager?.isReconnecting()) {
|
|
188
|
+
const queued = this.reconnectManager.queueRequest(method, async () => {
|
|
189
|
+
return this._handle.request(method, params, timeout);
|
|
190
|
+
});
|
|
191
|
+
if (queued !== null) {
|
|
192
|
+
return queued;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
const result = await this._handle.request(method, params, timeout);
|
|
196
|
+
// Signal activity to heartbeat manager (implicit heartbeat mode)
|
|
197
|
+
// This prevents healthy workers from being marked dead just because
|
|
198
|
+
// they don't respond to ping/pong while actively processing requests
|
|
199
|
+
this.heartbeatManager?.onActivity();
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
async notify(method, params) {
|
|
203
|
+
return this._handle.notify(method, params);
|
|
204
|
+
}
|
|
205
|
+
async requestViaData(method, params, timeout) {
|
|
206
|
+
if (!this._handle.dataChannel) {
|
|
207
|
+
throw new Error(`Data channel not available for process '${this.id}'`);
|
|
208
|
+
}
|
|
209
|
+
return this._handle.dataChannel.request(method, params, timeout);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Initiates graceful shutdown of the process.
|
|
213
|
+
*/
|
|
214
|
+
async shutdown(reason = "user_requested") {
|
|
215
|
+
if (!this.shutdownManager) {
|
|
216
|
+
// No graceful shutdown - force kill and close
|
|
217
|
+
this.forceKill();
|
|
218
|
+
await this.close();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// Stop heartbeat during shutdown
|
|
222
|
+
this.heartbeatManager?.stop();
|
|
223
|
+
const shutdownable = createShutdownable(this._handle, (signal) => {
|
|
224
|
+
if (this.killFn) {
|
|
225
|
+
this.killFn(signal);
|
|
226
|
+
}
|
|
227
|
+
else if (this._handle.pid !== null) {
|
|
228
|
+
// Fallback to process.kill() if no killFn provided
|
|
229
|
+
try {
|
|
230
|
+
process.kill(this._handle.pid, signal ?? "SIGTERM");
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Process may already be dead
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
await this.shutdownManager.initiateShutdown(shutdownable, reason);
|
|
238
|
+
}
|
|
239
|
+
async close() {
|
|
240
|
+
this.stop();
|
|
241
|
+
this.cleanupAllSubscriptions();
|
|
242
|
+
await this._handle.close();
|
|
243
|
+
}
|
|
244
|
+
on(event, handler) {
|
|
245
|
+
return this.events.on(event, handler);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Starts resilience features.
|
|
249
|
+
*/
|
|
250
|
+
start() {
|
|
251
|
+
if (this.heartbeatManager) {
|
|
252
|
+
this.setupHeartbeatPongListener();
|
|
253
|
+
this.heartbeatManager.start();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Stops resilience features.
|
|
258
|
+
* Note: Base handle event forwarding continues after stop().
|
|
259
|
+
*/
|
|
260
|
+
stop() {
|
|
261
|
+
this.heartbeatManager?.stop();
|
|
262
|
+
this.reconnectManager?.cancel();
|
|
263
|
+
// Cleanup resilience subscriptions only (not handle event forwarding)
|
|
264
|
+
for (const unsub of this.resilienceSubscriptions) {
|
|
265
|
+
unsub();
|
|
266
|
+
}
|
|
267
|
+
this.resilienceSubscriptions.length = 0;
|
|
268
|
+
}
|
|
269
|
+
// Private methods
|
|
270
|
+
setupHeartbeatListeners() {
|
|
271
|
+
if (!this.heartbeatManager)
|
|
272
|
+
return;
|
|
273
|
+
this.heartbeatManager.on("heartbeat:missed", ({ missedCount }) => {
|
|
274
|
+
this.events.emit("heartbeatMissed", { missedCount });
|
|
275
|
+
});
|
|
276
|
+
this.heartbeatManager.on("heartbeat:recovered", ({ missedCount }) => {
|
|
277
|
+
this._isHealthy = true;
|
|
278
|
+
this.events.emit("heartbeatRecovered", { missedCount });
|
|
279
|
+
});
|
|
280
|
+
this.heartbeatManager.on("heartbeat:dead", ({ missedCount, lastPongAt }) => {
|
|
281
|
+
this._isHealthy = false;
|
|
282
|
+
this.events.emit("heartbeatDead", { missedCount, lastPongAt });
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
setupReconnectListeners() {
|
|
286
|
+
if (!this.reconnectManager)
|
|
287
|
+
return;
|
|
288
|
+
this.reconnectManager.on("reconnect:attempting", ({ attempt, delay }) => {
|
|
289
|
+
this.events.emit("reconnecting", { attempt, delay });
|
|
290
|
+
});
|
|
291
|
+
this.reconnectManager.on("reconnect:success", ({ attempt, totalTimeMs }) => {
|
|
292
|
+
this.events.emit("reconnected", { attempt, totalTimeMs });
|
|
293
|
+
});
|
|
294
|
+
this.reconnectManager.on("reconnect:failed", ({ attempts, lastError }) => {
|
|
295
|
+
this.events.emit("reconnectFailed", { attempts, lastError });
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
setupShutdownListeners() {
|
|
299
|
+
if (!this.shutdownManager)
|
|
300
|
+
return;
|
|
301
|
+
this.shutdownManager.on("shutdown:start", ({ reason }) => {
|
|
302
|
+
this.events.emit("shutdownStarted", { reason });
|
|
303
|
+
});
|
|
304
|
+
this.shutdownManager.on("shutdown:ack", ({ pendingRequests }) => {
|
|
305
|
+
this.events.emit("shutdownAcknowledged", { pendingRequests });
|
|
306
|
+
});
|
|
307
|
+
this.shutdownManager.on("shutdown:done", ({ graceful, durationMs }) => {
|
|
308
|
+
this.events.emit("shutdownComplete", { graceful, durationMs });
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
setupHandleEventForwarding() {
|
|
312
|
+
const unsub1 = this._handle.on("stateChange", (data) => {
|
|
313
|
+
this.events.emit("stateChange", data);
|
|
314
|
+
});
|
|
315
|
+
const unsub2 = this._handle.on("exit", (data) => {
|
|
316
|
+
this.events.emit("exit", data);
|
|
317
|
+
});
|
|
318
|
+
const unsub3 = this._handle.on("error", (error) => {
|
|
319
|
+
this.events.emit("error", error);
|
|
320
|
+
});
|
|
321
|
+
this.handleEventSubscriptions.push(unsub1, unsub2, unsub3);
|
|
322
|
+
}
|
|
323
|
+
setupHeartbeatPongListener() {
|
|
324
|
+
if (!this.heartbeatManager)
|
|
325
|
+
return;
|
|
326
|
+
// Listen for notifications from worker
|
|
327
|
+
const channel = this._handle.controlChannel;
|
|
328
|
+
const unsubNotification = channel.onNotification((notification) => {
|
|
329
|
+
const notif = notification;
|
|
330
|
+
// Forward pong to HeartbeatManager for latency tracking
|
|
331
|
+
if (notif.method === ReservedMethods.HEARTBEAT_PONG) {
|
|
332
|
+
this.heartbeatManager.handlePong(notif.params);
|
|
333
|
+
}
|
|
334
|
+
// Any notification from worker counts as activity for implicit heartbeat.
|
|
335
|
+
// This prevents marking active workers as dead just because they don't
|
|
336
|
+
// respond to ping/pong while sending progress updates, metrics, etc.
|
|
337
|
+
this.heartbeatManager.onActivity();
|
|
338
|
+
});
|
|
339
|
+
this.resilienceSubscriptions.push(unsubNotification);
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Force kills the process with SIGKILL.
|
|
343
|
+
*/
|
|
344
|
+
forceKill() {
|
|
345
|
+
if (this.killFn) {
|
|
346
|
+
this.killFn("SIGKILL");
|
|
347
|
+
}
|
|
348
|
+
else if (this._handle.pid !== null) {
|
|
349
|
+
try {
|
|
350
|
+
process.kill(this._handle.pid, "SIGKILL");
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
// Process may already be dead
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Cleanup all subscriptions (called by close()).
|
|
359
|
+
*/
|
|
360
|
+
cleanupAllSubscriptions() {
|
|
361
|
+
for (const unsub of this.resilienceSubscriptions) {
|
|
362
|
+
unsub();
|
|
363
|
+
}
|
|
364
|
+
this.resilienceSubscriptions.length = 0;
|
|
365
|
+
for (const unsub of this.handleEventSubscriptions) {
|
|
366
|
+
unsub();
|
|
367
|
+
}
|
|
368
|
+
this.handleEventSubscriptions.length = 0;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=handle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/resilience/handle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resilience/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resilience/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the Resilience module.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module Resilience
|
|
6
|
+
*/
|
|
7
|
+
import type { Unsubscribe } from "../utils/disposables.js";
|
|
8
|
+
import type { HeartbeatOptions } from "../heartbeat/types.js";
|
|
9
|
+
import type { ReconnectOptions } from "../reconnect/types.js";
|
|
10
|
+
import type { ShutdownOptions } from "../shutdown/types.js";
|
|
11
|
+
import type { ShutdownReason } from "../protocol/reserved-types.js";
|
|
12
|
+
import type { ProcessHandle, ProcessState, ProcessHandleEvents } from "../process/types.js";
|
|
13
|
+
import type { Channel } from "../channel/types.js";
|
|
14
|
+
/**
|
|
15
|
+
* Options for creating a ResilientProcessHandle.
|
|
16
|
+
*/
|
|
17
|
+
export interface ResilientProcessOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Heartbeat configuration.
|
|
20
|
+
* Set to false to disable heartbeat.
|
|
21
|
+
* Partial options will be merged with defaults.
|
|
22
|
+
*/
|
|
23
|
+
heartbeat?: Partial<HeartbeatOptions> | false;
|
|
24
|
+
/**
|
|
25
|
+
* Reconnect configuration.
|
|
26
|
+
* Set to false to disable auto-reconnect.
|
|
27
|
+
* Partial options will be merged with defaults.
|
|
28
|
+
*/
|
|
29
|
+
reconnect?: Partial<ReconnectOptions> | false;
|
|
30
|
+
/**
|
|
31
|
+
* Shutdown configuration.
|
|
32
|
+
* Set to false to disable graceful shutdown.
|
|
33
|
+
* Partial options will be merged with defaults.
|
|
34
|
+
*/
|
|
35
|
+
shutdown?: Partial<ShutdownOptions> | false;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extended events for resilient process handle.
|
|
39
|
+
*/
|
|
40
|
+
export interface ResilientProcessEvents extends ProcessHandleEvents {
|
|
41
|
+
/**
|
|
42
|
+
* Fired when heartbeat is missed (worker may be unresponsive).
|
|
43
|
+
*/
|
|
44
|
+
heartbeatMissed: {
|
|
45
|
+
missedCount: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Fired when heartbeat recovers after misses.
|
|
49
|
+
*/
|
|
50
|
+
heartbeatRecovered: {
|
|
51
|
+
missedCount: number;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Fired when worker is determined dead (max misses exceeded).
|
|
55
|
+
*/
|
|
56
|
+
heartbeatDead: {
|
|
57
|
+
missedCount: number;
|
|
58
|
+
lastPongAt: number | null;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Fired when reconnection is attempting.
|
|
62
|
+
*/
|
|
63
|
+
reconnecting: {
|
|
64
|
+
attempt: number;
|
|
65
|
+
delay: number;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Fired when reconnection succeeds.
|
|
69
|
+
*/
|
|
70
|
+
reconnected: {
|
|
71
|
+
attempt: number;
|
|
72
|
+
totalTimeMs: number;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Fired when reconnection fails permanently.
|
|
76
|
+
*/
|
|
77
|
+
reconnectFailed: {
|
|
78
|
+
attempts: number;
|
|
79
|
+
lastError: Error;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Fired when graceful shutdown starts.
|
|
83
|
+
*/
|
|
84
|
+
shutdownStarted: {
|
|
85
|
+
reason: ShutdownReason;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Fired when worker acknowledges shutdown.
|
|
89
|
+
*/
|
|
90
|
+
shutdownAcknowledged: {
|
|
91
|
+
pendingRequests: number;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Fired when shutdown completes (graceful or forced).
|
|
95
|
+
*/
|
|
96
|
+
shutdownComplete: {
|
|
97
|
+
graceful: boolean;
|
|
98
|
+
durationMs: number;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Interface for a resilient process handle with heartbeat, reconnect, and shutdown.
|
|
103
|
+
*/
|
|
104
|
+
export interface IResilientProcessHandle {
|
|
105
|
+
/**
|
|
106
|
+
* Unique process identifier.
|
|
107
|
+
*/
|
|
108
|
+
readonly id: string;
|
|
109
|
+
/**
|
|
110
|
+
* Process ID (OS-level).
|
|
111
|
+
*/
|
|
112
|
+
readonly pid: number | null;
|
|
113
|
+
/**
|
|
114
|
+
* Current process state.
|
|
115
|
+
*/
|
|
116
|
+
readonly state: ProcessState;
|
|
117
|
+
/**
|
|
118
|
+
* Whether the process is currently healthy (responding to heartbeats).
|
|
119
|
+
*/
|
|
120
|
+
readonly isHealthy: boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Whether the process is currently reconnecting.
|
|
123
|
+
*/
|
|
124
|
+
readonly isReconnecting: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Control channel (stdio-based, always available).
|
|
127
|
+
*/
|
|
128
|
+
readonly controlChannel: Channel;
|
|
129
|
+
/**
|
|
130
|
+
* Data channel (pipe-based, optional).
|
|
131
|
+
*/
|
|
132
|
+
readonly dataChannel: Channel | null;
|
|
133
|
+
/**
|
|
134
|
+
* Underlying process handle.
|
|
135
|
+
*/
|
|
136
|
+
readonly handle: ProcessHandle;
|
|
137
|
+
/**
|
|
138
|
+
* Sends a request via control channel.
|
|
139
|
+
* Requests are queued during reconnection if enabled.
|
|
140
|
+
*
|
|
141
|
+
* @param method - Method name
|
|
142
|
+
* @param params - Optional parameters
|
|
143
|
+
* @param timeout - Optional timeout override
|
|
144
|
+
* @returns Promise resolving to response result
|
|
145
|
+
*/
|
|
146
|
+
request(method: string, params?: unknown, timeout?: number): Promise<unknown>;
|
|
147
|
+
/**
|
|
148
|
+
* Sends a notification via control channel.
|
|
149
|
+
*
|
|
150
|
+
* @param method - Method name
|
|
151
|
+
* @param params - Optional parameters
|
|
152
|
+
*/
|
|
153
|
+
notify(method: string, params?: unknown): Promise<void>;
|
|
154
|
+
/**
|
|
155
|
+
* Sends a request via data channel.
|
|
156
|
+
*
|
|
157
|
+
* @param method - Method name
|
|
158
|
+
* @param params - Optional parameters
|
|
159
|
+
* @param timeout - Optional timeout override
|
|
160
|
+
* @returns Promise resolving to response result
|
|
161
|
+
* @throws {Error} if data channel is not available
|
|
162
|
+
*/
|
|
163
|
+
requestViaData(method: string, params?: unknown, timeout?: number): Promise<unknown>;
|
|
164
|
+
/**
|
|
165
|
+
* Initiates graceful shutdown of the process.
|
|
166
|
+
*
|
|
167
|
+
* @param reason - Reason for shutdown
|
|
168
|
+
* @returns Promise that resolves when shutdown is complete
|
|
169
|
+
*/
|
|
170
|
+
shutdown(reason?: ShutdownReason): Promise<void>;
|
|
171
|
+
/**
|
|
172
|
+
* Closes the handle and its channels.
|
|
173
|
+
* Does not terminate the process - use shutdown() for that.
|
|
174
|
+
*/
|
|
175
|
+
close(): Promise<void>;
|
|
176
|
+
/**
|
|
177
|
+
* Subscribes to handle events.
|
|
178
|
+
*
|
|
179
|
+
* @returns Unsubscribe function
|
|
180
|
+
*/
|
|
181
|
+
on<K extends keyof ResilientProcessEvents>(event: K, handler: (data: ResilientProcessEvents[K]) => void): Unsubscribe;
|
|
182
|
+
/**
|
|
183
|
+
* Starts the resilience features (heartbeat monitoring, etc.).
|
|
184
|
+
*/
|
|
185
|
+
start(): void;
|
|
186
|
+
/**
|
|
187
|
+
* Stops the resilience features.
|
|
188
|
+
*/
|
|
189
|
+
stop(): void;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resilience/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resilience/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/serialization/json.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAEpD;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAEnD;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAS,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IAClE,SAAgB,IAAI,UAAU;IAC9B,SAAgB,WAAW,sBAAsB;IAEjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyD;IAClF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;gBAExC,OAAO,GAAE,gBAAqB;IAM1C;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/serialization/json.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAEpD;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAEnD;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,SAAS,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IAClE,SAAgB,IAAI,UAAU;IAC9B,SAAgB,WAAW,sBAAsB;IAEjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyD;IAClF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8B;gBAExC,OAAO,GAAE,gBAAqB;IAM1C;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAgB3B;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC;CAW/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/serialization/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0BxD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,SAAS;IACJ,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,kBAAkB,CAAC;IAEhC,QAAQ,CAAyD;IACjE,OAAO,CAAyD;IAChE,KAAK,CAA8B;IAEpD,YAAY,UAA4B,EAAE;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,KAAQ;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/serialization/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0BxD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,SAAS;IACJ,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,kBAAkB,CAAC;IAEhC,QAAQ,CAAyD;IACjE,OAAO,CAAyD;IAChE,KAAK,CAA8B;IAEpD,YAAY,UAA4B,EAAE;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,KAAQ;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CACzB,KAAK,EACL,IAAI,CAAC,QAAoD,EACzD,IAAI,CAAC,KAAK,CACX,CAAC;YACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAC1B,sCAAsC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC9F,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,MAAc;QACxB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAmD,CAAM,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAC1B,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACvF,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default options for ShutdownManager.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module Shutdown
|
|
6
|
+
*/
|
|
7
|
+
import type { ShutdownOptions } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Default shutdown options.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_SHUTDOWN_OPTIONS: Required<ShutdownOptions>;
|
|
12
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/shutdown/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,eAAe,CAI9D,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default options for ShutdownManager.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module Shutdown
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default shutdown options.
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_SHUTDOWN_OPTIONS = {
|
|
11
|
+
enabled: true,
|
|
12
|
+
gracefulTimeoutMs: 5000,
|
|
13
|
+
exitWaitMs: 1000,
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=constants.js.map
|