@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,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HeartbeatManager implementation.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module Heartbeat
|
|
6
|
+
*/
|
|
7
|
+
import { ReservedMethods } from "../protocol/reserved-methods.js";
|
|
8
|
+
import { EventEmitter } from "../utils/events.js";
|
|
9
|
+
import { DEFAULT_HEARTBEAT_OPTIONS } from "./constants.js";
|
|
10
|
+
/**
|
|
11
|
+
* Manages heartbeat ping/pong cycle to detect unresponsive workers.
|
|
12
|
+
*
|
|
13
|
+
* The HeartbeatManager sends periodic `__heartbeat_ping__` notifications via the
|
|
14
|
+
* control channel and expects `__heartbeat_pong__` responses within the configured
|
|
15
|
+
* timeout. After `maxMissed` consecutive missed pongs, the worker is declared dead.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const heartbeat = new HeartbeatManager(controlChannel, {
|
|
20
|
+
* interval: 30000,
|
|
21
|
+
* timeout: 5000,
|
|
22
|
+
* maxMissed: 3,
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* heartbeat.on('heartbeat:pong', ({ latencyMs }) => {
|
|
26
|
+
* console.log(`Pong received with ${latencyMs}ms latency`);
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* heartbeat.on('heartbeat:dead', ({ missedCount }) => {
|
|
30
|
+
* console.log(`Worker dead after ${missedCount} missed pongs`);
|
|
31
|
+
* // Trigger restart or cleanup
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* heartbeat.start();
|
|
35
|
+
*
|
|
36
|
+
* // When done
|
|
37
|
+
* heartbeat.stop();
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export class HeartbeatManager extends EventEmitter {
|
|
41
|
+
options;
|
|
42
|
+
channel;
|
|
43
|
+
state = {
|
|
44
|
+
seq: 0,
|
|
45
|
+
lastPongAt: null,
|
|
46
|
+
consecutiveMissed: 0,
|
|
47
|
+
isRunning: false,
|
|
48
|
+
pendingPing: null,
|
|
49
|
+
};
|
|
50
|
+
intervalHandle = null;
|
|
51
|
+
timeoutHandle = null;
|
|
52
|
+
/**
|
|
53
|
+
* Creates a new HeartbeatManager.
|
|
54
|
+
*
|
|
55
|
+
* @param channel - Control channel to send heartbeat notifications on
|
|
56
|
+
* @param options - Configuration options (merged with defaults)
|
|
57
|
+
*/
|
|
58
|
+
constructor(channel, options = {}) {
|
|
59
|
+
super();
|
|
60
|
+
this.channel = channel;
|
|
61
|
+
this.options = { ...DEFAULT_HEARTBEAT_OPTIONS, ...options };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Start heartbeat monitoring.
|
|
65
|
+
* Sends first ping immediately, then at configured interval.
|
|
66
|
+
*/
|
|
67
|
+
start() {
|
|
68
|
+
if (!this.options.enabled || this.state.isRunning) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.state.isRunning = true;
|
|
72
|
+
this.emit("heartbeat:start", undefined);
|
|
73
|
+
// Send first ping immediately
|
|
74
|
+
this.sendPing();
|
|
75
|
+
// Schedule recurring pings
|
|
76
|
+
this.intervalHandle = setInterval(() => {
|
|
77
|
+
this.sendPing();
|
|
78
|
+
}, this.options.interval);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Stop heartbeat monitoring.
|
|
82
|
+
* Clears all timers and resets counters for clean restart.
|
|
83
|
+
*/
|
|
84
|
+
stop() {
|
|
85
|
+
if (!this.state.isRunning) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.clearTimers();
|
|
89
|
+
this.state.isRunning = false;
|
|
90
|
+
this.state.pendingPing = null;
|
|
91
|
+
this.state.consecutiveMissed = 0; // Reset for clean restart
|
|
92
|
+
this.emit("heartbeat:stop", undefined);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Call when any activity occurs on the channel.
|
|
96
|
+
* If implicitHeartbeat is enabled, resets the missed counter, clears pending ping,
|
|
97
|
+
* and emits heartbeat:recovered if the worker was previously considered unhealthy.
|
|
98
|
+
*/
|
|
99
|
+
onActivity() {
|
|
100
|
+
if (this.options.implicitHeartbeat) {
|
|
101
|
+
const previousMissed = this.state.consecutiveMissed;
|
|
102
|
+
this.state.consecutiveMissed = 0;
|
|
103
|
+
// Clear pending ping and timeout since we received activity
|
|
104
|
+
if (this.state.pendingPing) {
|
|
105
|
+
this.state.pendingPing = null;
|
|
106
|
+
if (this.timeoutHandle) {
|
|
107
|
+
clearTimeout(this.timeoutHandle);
|
|
108
|
+
this.timeoutHandle = null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Always update lastPongAt on activity
|
|
112
|
+
this.state.lastPongAt = Date.now();
|
|
113
|
+
// Emit recovered if we had missed pongs before (same behavior as handlePong)
|
|
114
|
+
// This ensures ResilientProcessHandle._isHealthy returns to true
|
|
115
|
+
if (previousMissed > 0) {
|
|
116
|
+
this.emit("heartbeat:recovered", {
|
|
117
|
+
missedCount: previousMissed,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Handle incoming pong notification.
|
|
124
|
+
* Should be called by the channel when `__heartbeat_pong__` is received.
|
|
125
|
+
*
|
|
126
|
+
* @param params - The pong notification parameters
|
|
127
|
+
*/
|
|
128
|
+
handlePong(params) {
|
|
129
|
+
const { pendingPing } = this.state;
|
|
130
|
+
// Ignore if no ping is pending or seq doesn't match
|
|
131
|
+
if (!pendingPing || params.seq !== pendingPing.seq) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
// Clear timeout
|
|
135
|
+
if (this.timeoutHandle) {
|
|
136
|
+
clearTimeout(this.timeoutHandle);
|
|
137
|
+
this.timeoutHandle = null;
|
|
138
|
+
}
|
|
139
|
+
// Calculate latency and update state
|
|
140
|
+
const latencyMs = Date.now() - pendingPing.sentAt;
|
|
141
|
+
this.state.pendingPing = null;
|
|
142
|
+
const previousMissed = this.state.consecutiveMissed;
|
|
143
|
+
this.state.consecutiveMissed = 0;
|
|
144
|
+
this.state.lastPongAt = Date.now();
|
|
145
|
+
this.emit("heartbeat:pong", {
|
|
146
|
+
seq: params.seq,
|
|
147
|
+
latencyMs,
|
|
148
|
+
...(params.load !== undefined && { load: params.load }),
|
|
149
|
+
});
|
|
150
|
+
// Emit recovered if we had missed pongs before
|
|
151
|
+
if (previousMissed > 0) {
|
|
152
|
+
this.emit("heartbeat:recovered", {
|
|
153
|
+
missedCount: previousMissed,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get current heartbeat state (readonly).
|
|
159
|
+
*/
|
|
160
|
+
getState() {
|
|
161
|
+
return { ...this.state };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get current options (readonly).
|
|
165
|
+
*/
|
|
166
|
+
getOptions() {
|
|
167
|
+
return { ...this.options };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check if heartbeat is currently running.
|
|
171
|
+
*/
|
|
172
|
+
isRunning() {
|
|
173
|
+
return this.state.isRunning;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Reset state for restart scenarios.
|
|
177
|
+
* Clears timers and resets all counters.
|
|
178
|
+
*/
|
|
179
|
+
reset() {
|
|
180
|
+
this.clearTimers();
|
|
181
|
+
this.state = {
|
|
182
|
+
seq: 0,
|
|
183
|
+
lastPongAt: null,
|
|
184
|
+
consecutiveMissed: 0,
|
|
185
|
+
isRunning: false,
|
|
186
|
+
pendingPing: null,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Sends a heartbeat ping notification.
|
|
191
|
+
*/
|
|
192
|
+
sendPing() {
|
|
193
|
+
// Don't send new ping if one is already pending
|
|
194
|
+
if (this.state.pendingPing) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const seq = ++this.state.seq;
|
|
198
|
+
const timestamp = Date.now();
|
|
199
|
+
this.state.pendingPing = { seq, sentAt: timestamp };
|
|
200
|
+
// Send ping notification (fire-and-forget)
|
|
201
|
+
const params = { timestamp, seq };
|
|
202
|
+
this.channel.notify(ReservedMethods.HEARTBEAT_PING, params).catch(() => {
|
|
203
|
+
// If we can't even send, treat as missed
|
|
204
|
+
this.handleMissed();
|
|
205
|
+
});
|
|
206
|
+
// Schedule timeout check
|
|
207
|
+
this.timeoutHandle = setTimeout(() => {
|
|
208
|
+
if (this.state.pendingPing?.seq === seq) {
|
|
209
|
+
this.handleMissed();
|
|
210
|
+
}
|
|
211
|
+
}, this.options.timeout);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Handles a missed pong (timeout or send failure).
|
|
215
|
+
*/
|
|
216
|
+
handleMissed() {
|
|
217
|
+
const seq = this.state.pendingPing?.seq ?? this.state.seq;
|
|
218
|
+
// Clear pending state
|
|
219
|
+
this.state.pendingPing = null;
|
|
220
|
+
if (this.timeoutHandle) {
|
|
221
|
+
clearTimeout(this.timeoutHandle);
|
|
222
|
+
this.timeoutHandle = null;
|
|
223
|
+
}
|
|
224
|
+
// Increment missed counter
|
|
225
|
+
this.state.consecutiveMissed++;
|
|
226
|
+
this.emit("heartbeat:missed", {
|
|
227
|
+
seq,
|
|
228
|
+
missedCount: this.state.consecutiveMissed,
|
|
229
|
+
});
|
|
230
|
+
// Check if dead threshold reached
|
|
231
|
+
if (this.state.consecutiveMissed >= this.options.maxMissed) {
|
|
232
|
+
this.emit("heartbeat:dead", {
|
|
233
|
+
missedCount: this.state.consecutiveMissed,
|
|
234
|
+
lastPongAt: this.state.lastPongAt,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Clears all active timers.
|
|
240
|
+
*/
|
|
241
|
+
clearTimers() {
|
|
242
|
+
if (this.intervalHandle) {
|
|
243
|
+
clearInterval(this.intervalHandle);
|
|
244
|
+
this.intervalHandle = null;
|
|
245
|
+
}
|
|
246
|
+
if (this.timeoutHandle) {
|
|
247
|
+
clearTimeout(this.timeoutHandle);
|
|
248
|
+
this.timeoutHandle = null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/heartbeat/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heartbeat manager types.
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module Heartbeat
|
|
6
|
+
*/
|
|
7
|
+
import type { WorkerLoad } from "../protocol/reserved-types.js";
|
|
8
|
+
import type { EventMap } from "../utils/events.js";
|
|
9
|
+
/**
|
|
10
|
+
* Configuration options for HeartbeatManager.
|
|
11
|
+
*/
|
|
12
|
+
export interface HeartbeatOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Enable heartbeat monitoring.
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Interval between heartbeat pings in milliseconds.
|
|
20
|
+
* @default 30000
|
|
21
|
+
*/
|
|
22
|
+
interval: number;
|
|
23
|
+
/**
|
|
24
|
+
* Timeout waiting for pong response in milliseconds.
|
|
25
|
+
* @default 5000
|
|
26
|
+
*/
|
|
27
|
+
timeout: number;
|
|
28
|
+
/**
|
|
29
|
+
* Number of consecutive missed pongs before declaring worker dead.
|
|
30
|
+
* @default 3
|
|
31
|
+
*/
|
|
32
|
+
maxMissed: number;
|
|
33
|
+
/**
|
|
34
|
+
* Treat any successful request/response as implicit heartbeat.
|
|
35
|
+
* Resets missed counter on activity.
|
|
36
|
+
* @default true
|
|
37
|
+
*/
|
|
38
|
+
implicitHeartbeat: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Internal state of the HeartbeatManager.
|
|
42
|
+
*/
|
|
43
|
+
export interface HeartbeatState {
|
|
44
|
+
/** Current sequence number */
|
|
45
|
+
seq: number;
|
|
46
|
+
/** Timestamp of last successful pong */
|
|
47
|
+
lastPongAt: number | null;
|
|
48
|
+
/** Number of consecutive missed pongs */
|
|
49
|
+
consecutiveMissed: number;
|
|
50
|
+
/** Whether heartbeat is currently running */
|
|
51
|
+
isRunning: boolean;
|
|
52
|
+
/** Pending ping awaiting pong */
|
|
53
|
+
pendingPing: {
|
|
54
|
+
seq: number;
|
|
55
|
+
sentAt: number;
|
|
56
|
+
} | null;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Event map for HeartbeatManager events.
|
|
60
|
+
*/
|
|
61
|
+
export interface HeartbeatEventMap extends EventMap {
|
|
62
|
+
/**
|
|
63
|
+
* Emitted when a pong is received.
|
|
64
|
+
*/
|
|
65
|
+
"heartbeat:pong": {
|
|
66
|
+
seq: number;
|
|
67
|
+
latencyMs: number;
|
|
68
|
+
load?: WorkerLoad;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Emitted when a pong times out.
|
|
72
|
+
*/
|
|
73
|
+
"heartbeat:missed": {
|
|
74
|
+
seq: number;
|
|
75
|
+
missedCount: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Emitted when heartbeat recovers after missed pongs.
|
|
79
|
+
*/
|
|
80
|
+
"heartbeat:recovered": {
|
|
81
|
+
missedCount: number;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Emitted when worker is declared dead (maxMissed reached).
|
|
85
|
+
*/
|
|
86
|
+
"heartbeat:dead": {
|
|
87
|
+
missedCount: number;
|
|
88
|
+
lastPongAt: number | null;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Emitted when heartbeat starts.
|
|
92
|
+
*/
|
|
93
|
+
"heartbeat:start": undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Emitted when heartbeat stops.
|
|
96
|
+
*/
|
|
97
|
+
"heartbeat:stop": undefined;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/heartbeat/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IAEZ,wCAAwC;IACxC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,yCAAyC;IACzC,iBAAiB,EAAE,MAAM,CAAC;IAE1B,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IAEnB,iCAAiC;IACjC,WAAW,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI,CAAC;CACV;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD;;OAEG;IACH,gBAAgB,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,UAAU,CAAC;KACnB,CAAC;IAEF;;OAEG;IACH,kBAAkB,EAAE;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF;;OAEG;IACH,qBAAqB,EAAE;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF;;OAEG;IACH,gBAAgB,EAAE;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,CAAC;IAEF;;OAEG;IACH,iBAAiB,EAAE,SAAS,CAAC;IAE7B;;OAEG;IACH,gBAAgB,EAAE,SAAS,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/heartbeat/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -23,5 +23,9 @@ export * from "./serialization/index.js";
|
|
|
23
23
|
export * from "./protocol/index.js";
|
|
24
24
|
export * from "./channel/index.js";
|
|
25
25
|
export * from "./process/index.js";
|
|
26
|
+
export * from "./heartbeat/index.js";
|
|
27
|
+
export * from "./reconnect/index.js";
|
|
28
|
+
export * from "./shutdown/index.js";
|
|
29
|
+
export * from "./resilience/index.js";
|
|
26
30
|
export * from "./utils/index.js";
|
|
27
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,11 @@ export * from "./serialization/index.js";
|
|
|
24
24
|
export * from "./protocol/index.js";
|
|
25
25
|
export * from "./channel/index.js";
|
|
26
26
|
export * from "./process/index.js";
|
|
27
|
+
// Resilience
|
|
28
|
+
export * from "./heartbeat/index.js";
|
|
29
|
+
export * from "./reconnect/index.js";
|
|
30
|
+
export * from "./shutdown/index.js";
|
|
31
|
+
export * from "./resilience/index.js";
|
|
27
32
|
// Utilities
|
|
28
33
|
export * from "./utils/index.js";
|
|
29
34
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,aAAa;AACb,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAEnC,YAAY;AACZ,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,aAAa;AACb,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAEnC,aAAa;AACb,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AAEtC,YAAY;AACZ,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,cAAc,EAC/B,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAGhE,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,cAAc,EAAE,OAAO,EACvB,WAAW,GAAE,OAAO,GAAG,IAAW;IASpC,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,WAAW,IAAI,OAAO,GAAG,IAAI,CAEhC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAUtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInF;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;OAGG;IACG,cAAc,
|
|
1
|
+
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,cAAc,EAC/B,mBAAmB,EACnB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAGhE,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,cAAc,EAAE,OAAO,EACvB,WAAW,GAAE,OAAO,GAAG,IAAW;IASpC,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,WAAW,IAAI,OAAO,GAAG,IAAI,CAEhC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAUtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAInF;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1F;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EACpC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC9C,WAAW;IAId;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI1D;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAG9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,OAAO,aAAa;IACP,GAAG,CAAS;IACrB,IAAI,CAAgB;IACpB,MAAM,CAAe;IACZ,eAAe,CAAU;IACzB,YAAY,CAAiB;IAC7B,MAAM,GAAG,IAAI,YAAY,EAAuB,CAAC;IAElE,YACE,EAAU,EACV,GAAkB,EAClB,cAAuB,EACvB,cAA8B,IAAI;QAElC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAkB;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAsB;QAC7B,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,MAAgB,EAAE,OAAgB;QAC9D,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAgB;QAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"handle.js","sourceRoot":"","sources":["../../src/process/handle.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,MAAM,OAAO,aAAa;IACP,GAAG,CAAS;IACrB,IAAI,CAAgB;IACpB,MAAM,CAAe;IACZ,eAAe,CAAU;IACzB,YAAY,CAAiB;IAC7B,MAAM,GAAG,IAAI,YAAY,EAAuB,CAAC;IAElE,YACE,EAAU,EACV,GAAkB,EAClB,cAAuB,EACvB,cAA8B,IAAI;QAElC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QACzB,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAkB;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAsB;QAC7B,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,MAAgB,EAAE,OAAgB;QAC9D,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAgB;QAC3C,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,MAAgB,EAAE,OAAgB;QACrE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;SAClE,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,EAAE,CACA,KAAQ,EACR,OAA+C;QAE/C,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,IAAmB,EAAE,MAAqB;QACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAY;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -9,7 +9,18 @@ export declare class ProcessManager implements IProcessManager {
|
|
|
9
9
|
private readonly config;
|
|
10
10
|
private readonly processes;
|
|
11
11
|
private readonly events;
|
|
12
|
+
private signalHandler;
|
|
12
13
|
constructor(config?: ProcessManagerConfig);
|
|
14
|
+
/**
|
|
15
|
+
* Sets up signal handlers for graceful shutdown.
|
|
16
|
+
* Called automatically if handleSignals is enabled.
|
|
17
|
+
*/
|
|
18
|
+
private setupSignalHandlers;
|
|
19
|
+
/**
|
|
20
|
+
* Removes signal handlers.
|
|
21
|
+
* Useful for cleanup in tests or when you want to handle signals differently.
|
|
22
|
+
*/
|
|
23
|
+
removeSignalHandlers(): void;
|
|
13
24
|
/**
|
|
14
25
|
* Spawns a new managed process.
|
|
15
26
|
*/
|
|
@@ -20,6 +31,8 @@ export declare class ProcessManager implements IProcessManager {
|
|
|
20
31
|
terminate(id: string): Promise<void>;
|
|
21
32
|
/**
|
|
22
33
|
* Terminates all managed processes.
|
|
34
|
+
* Uses Promise.allSettled to ensure all processes are attempted to be terminated
|
|
35
|
+
* even if some fail. Emits error events for failed terminations.
|
|
23
36
|
*/
|
|
24
37
|
terminateAll(): Promise<void>;
|
|
25
38
|
/**
|
|
@@ -46,6 +59,9 @@ export declare class ProcessManager implements IProcessManager {
|
|
|
46
59
|
* Cleans up process resources.
|
|
47
60
|
*/
|
|
48
61
|
private cleanupProcess;
|
|
62
|
+
private createTransport;
|
|
63
|
+
private setupProcessListeners;
|
|
64
|
+
private startManagedProcess;
|
|
49
65
|
/**
|
|
50
66
|
* Builds control channel from stdio transport.
|
|
51
67
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,IAAI,eAAe,EACjC,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/process/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,IAAI,eAAe,EACjC,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA8C3D;;;GAGG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IACnE,OAAO,CAAC,aAAa,CAAsC;gBAE/C,MAAM,GAAE,oBAAyB;IAmD7C;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;OAGG;IACH,oBAAoB,IAAI,IAAI;IAQ5B;;OAEG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAiDvE;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1C;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBnC;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAI5C;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK9B;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,WAAW;IAId;;OAEG;YACW,iBAAiB;IA+D/B;;OAEG;YACW,cAAc;IAsC5B;;OAEG;YACW,cAAc;IAiB5B,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,qBAAqB;YAef,mBAAmB;IAuBjC;;OAEG;YACW,mBAAmB;IAoDjC;;OAEG;YACW,gBAAgB;CAqD/B"}
|