bb-app 0.0.7 → 0.0.8
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/bb-app.js +77 -15
- package/dist/bb-host-daemon.js +57 -5
- package/package.json +1 -1
package/dist/bb-app.js
CHANGED
|
@@ -13970,6 +13970,8 @@ var HOST_AUTH_FILE_NAME = "auth.json";
|
|
|
13970
13970
|
var HOST_ID_FILE_NAME = "host-id";
|
|
13971
13971
|
var HEALTH_CHECK_TIMEOUT_MS = 15e3;
|
|
13972
13972
|
var HEALTH_CHECK_INTERVAL_MS = 100;
|
|
13973
|
+
var MANAGED_PROCESS_TERMINATION_TIMEOUT_MS = 5e3;
|
|
13974
|
+
var MANAGED_PROCESS_KILL_TIMEOUT_MS = 1e3;
|
|
13973
13975
|
var START_COMMAND = "start";
|
|
13974
13976
|
var HOST_DAEMON_COMMAND = "host-daemon";
|
|
13975
13977
|
var HOST_DAEMON_JOIN_COMMAND = "join";
|
|
@@ -14922,6 +14924,35 @@ function waitForProcessExit(childProcess) {
|
|
|
14922
14924
|
});
|
|
14923
14925
|
});
|
|
14924
14926
|
}
|
|
14927
|
+
function waitForProcessExitWithTimeout(args) {
|
|
14928
|
+
if (hasProcessExited(args.childProcess)) {
|
|
14929
|
+
return Promise.resolve("exited");
|
|
14930
|
+
}
|
|
14931
|
+
return new Promise((resolvePromise) => {
|
|
14932
|
+
let settled = false;
|
|
14933
|
+
let timeout;
|
|
14934
|
+
const finish = (result) => {
|
|
14935
|
+
if (settled) {
|
|
14936
|
+
return;
|
|
14937
|
+
}
|
|
14938
|
+
settled = true;
|
|
14939
|
+
clearTimeout(timeout);
|
|
14940
|
+
args.childProcess.off("exit", exitHandler);
|
|
14941
|
+
resolvePromise(result);
|
|
14942
|
+
};
|
|
14943
|
+
const exitHandler = () => {
|
|
14944
|
+
finish("exited");
|
|
14945
|
+
};
|
|
14946
|
+
timeout = setTimeout(() => {
|
|
14947
|
+
finish("timed-out");
|
|
14948
|
+
}, args.timeoutMs);
|
|
14949
|
+
timeout.unref();
|
|
14950
|
+
args.childProcess.once("exit", exitHandler);
|
|
14951
|
+
if (hasProcessExited(args.childProcess)) {
|
|
14952
|
+
finish("exited");
|
|
14953
|
+
}
|
|
14954
|
+
});
|
|
14955
|
+
}
|
|
14925
14956
|
async function waitForNamedProcessExit(args) {
|
|
14926
14957
|
return {
|
|
14927
14958
|
processName: args.processName,
|
|
@@ -14934,12 +14965,29 @@ function toExitCode(result) {
|
|
|
14934
14965
|
}
|
|
14935
14966
|
return result.signal === null ? 1 : 128;
|
|
14936
14967
|
}
|
|
14937
|
-
async function terminateProcessIfRunning(
|
|
14938
|
-
if (hasProcessExited(childProcess)) {
|
|
14968
|
+
async function terminateProcessIfRunning(args) {
|
|
14969
|
+
if (hasProcessExited(args.childProcess)) {
|
|
14970
|
+
return;
|
|
14971
|
+
}
|
|
14972
|
+
args.childProcess.kill(args.signal);
|
|
14973
|
+
const gracefulResult = await waitForProcessExitWithTimeout({
|
|
14974
|
+
childProcess: args.childProcess,
|
|
14975
|
+
timeoutMs: MANAGED_PROCESS_TERMINATION_TIMEOUT_MS
|
|
14976
|
+
});
|
|
14977
|
+
if (gracefulResult === "exited") {
|
|
14939
14978
|
return;
|
|
14940
14979
|
}
|
|
14941
|
-
|
|
14942
|
-
|
|
14980
|
+
log(
|
|
14981
|
+
yellow("!"),
|
|
14982
|
+
`${args.processName} did not stop after ${MANAGED_PROCESS_TERMINATION_TIMEOUT_MS}ms - sending SIGKILL`
|
|
14983
|
+
);
|
|
14984
|
+
if (!hasProcessExited(args.childProcess)) {
|
|
14985
|
+
args.childProcess.kill("SIGKILL");
|
|
14986
|
+
}
|
|
14987
|
+
await waitForProcessExitWithTimeout({
|
|
14988
|
+
childProcess: args.childProcess,
|
|
14989
|
+
timeoutMs: MANAGED_PROCESS_KILL_TIMEOUT_MS
|
|
14990
|
+
});
|
|
14943
14991
|
}
|
|
14944
14992
|
function createSharedEnv(args) {
|
|
14945
14993
|
return {
|
|
@@ -15097,7 +15145,11 @@ async function runHostDaemonOnly(args) {
|
|
|
15097
15145
|
shuttingDown = true;
|
|
15098
15146
|
process.stdout.write("\n");
|
|
15099
15147
|
log(dim("\u25CF"), "Shutting down");
|
|
15100
|
-
await terminateProcessIfRunning(
|
|
15148
|
+
await terminateProcessIfRunning({
|
|
15149
|
+
childProcess: daemonProcess,
|
|
15150
|
+
processName: "daemon",
|
|
15151
|
+
signal
|
|
15152
|
+
});
|
|
15101
15153
|
};
|
|
15102
15154
|
const removeSignalForwarding = installTerminationSignalForwarding(
|
|
15103
15155
|
(signal) => {
|
|
@@ -15264,11 +15316,19 @@ async function runBbApp(cliArgs = process.argv.slice(2)) {
|
|
|
15264
15316
|
process.stdout.write("\n");
|
|
15265
15317
|
log(dim("\u25CF"), "Shutting down");
|
|
15266
15318
|
const terminationPromises = [
|
|
15267
|
-
terminateProcessIfRunning(
|
|
15319
|
+
terminateProcessIfRunning({
|
|
15320
|
+
childProcess: serverProcess,
|
|
15321
|
+
processName: "server",
|
|
15322
|
+
signal
|
|
15323
|
+
})
|
|
15268
15324
|
];
|
|
15269
15325
|
if (daemonProcess !== null) {
|
|
15270
15326
|
terminationPromises.push(
|
|
15271
|
-
terminateProcessIfRunning(
|
|
15327
|
+
terminateProcessIfRunning({
|
|
15328
|
+
childProcess: daemonProcess,
|
|
15329
|
+
processName: "daemon",
|
|
15330
|
+
signal
|
|
15331
|
+
})
|
|
15272
15332
|
);
|
|
15273
15333
|
}
|
|
15274
15334
|
await Promise.all(terminationPromises);
|
|
@@ -15338,15 +15398,17 @@ async function runBbApp(cliArgs = process.argv.slice(2)) {
|
|
|
15338
15398
|
outputBuffer.flush();
|
|
15339
15399
|
const firstExit = await Promise.race([serverExit, daemonExit]);
|
|
15340
15400
|
if (firstExit.processName === "server") {
|
|
15341
|
-
await terminateProcessIfRunning(
|
|
15342
|
-
daemonProcess,
|
|
15343
|
-
|
|
15344
|
-
|
|
15401
|
+
await terminateProcessIfRunning({
|
|
15402
|
+
childProcess: daemonProcess,
|
|
15403
|
+
processName: "daemon",
|
|
15404
|
+
signal: firstExit.result.signal ?? "SIGTERM"
|
|
15405
|
+
});
|
|
15345
15406
|
} else {
|
|
15346
|
-
await terminateProcessIfRunning(
|
|
15347
|
-
serverProcess,
|
|
15348
|
-
|
|
15349
|
-
|
|
15407
|
+
await terminateProcessIfRunning({
|
|
15408
|
+
childProcess: serverProcess,
|
|
15409
|
+
processName: "server",
|
|
15410
|
+
signal: firstExit.result.signal ?? "SIGTERM"
|
|
15411
|
+
});
|
|
15350
15412
|
}
|
|
15351
15413
|
process.exitCode = toExitCode(firstExit.result);
|
|
15352
15414
|
} catch (error48) {
|
package/dist/bb-host-daemon.js
CHANGED
|
@@ -13970,6 +13970,8 @@ var HOST_AUTH_FILE_NAME = "auth.json";
|
|
|
13970
13970
|
var HOST_ID_FILE_NAME = "host-id";
|
|
13971
13971
|
var HEALTH_CHECK_TIMEOUT_MS = 15e3;
|
|
13972
13972
|
var HEALTH_CHECK_INTERVAL_MS = 100;
|
|
13973
|
+
var MANAGED_PROCESS_TERMINATION_TIMEOUT_MS = 5e3;
|
|
13974
|
+
var MANAGED_PROCESS_KILL_TIMEOUT_MS = 1e3;
|
|
13973
13975
|
var HOST_DAEMON_JOIN_COMMAND = "join";
|
|
13974
13976
|
var MANAGED_CONFIG_KEYS = BB_APP_MANAGED_CONFIG_KEYS;
|
|
13975
13977
|
var MANAGED_CONFIG_KEY_VALUES = new Set(MANAGED_CONFIG_KEYS);
|
|
@@ -14525,18 +14527,64 @@ function waitForProcessExit(childProcess) {
|
|
|
14525
14527
|
});
|
|
14526
14528
|
});
|
|
14527
14529
|
}
|
|
14530
|
+
function waitForProcessExitWithTimeout(args) {
|
|
14531
|
+
if (hasProcessExited(args.childProcess)) {
|
|
14532
|
+
return Promise.resolve("exited");
|
|
14533
|
+
}
|
|
14534
|
+
return new Promise((resolvePromise) => {
|
|
14535
|
+
let settled = false;
|
|
14536
|
+
let timeout;
|
|
14537
|
+
const finish = (result) => {
|
|
14538
|
+
if (settled) {
|
|
14539
|
+
return;
|
|
14540
|
+
}
|
|
14541
|
+
settled = true;
|
|
14542
|
+
clearTimeout(timeout);
|
|
14543
|
+
args.childProcess.off("exit", exitHandler);
|
|
14544
|
+
resolvePromise(result);
|
|
14545
|
+
};
|
|
14546
|
+
const exitHandler = () => {
|
|
14547
|
+
finish("exited");
|
|
14548
|
+
};
|
|
14549
|
+
timeout = setTimeout(() => {
|
|
14550
|
+
finish("timed-out");
|
|
14551
|
+
}, args.timeoutMs);
|
|
14552
|
+
timeout.unref();
|
|
14553
|
+
args.childProcess.once("exit", exitHandler);
|
|
14554
|
+
if (hasProcessExited(args.childProcess)) {
|
|
14555
|
+
finish("exited");
|
|
14556
|
+
}
|
|
14557
|
+
});
|
|
14558
|
+
}
|
|
14528
14559
|
function toExitCode(result) {
|
|
14529
14560
|
if (result.code !== null) {
|
|
14530
14561
|
return result.code;
|
|
14531
14562
|
}
|
|
14532
14563
|
return result.signal === null ? 1 : 128;
|
|
14533
14564
|
}
|
|
14534
|
-
async function terminateProcessIfRunning(
|
|
14535
|
-
if (hasProcessExited(childProcess)) {
|
|
14565
|
+
async function terminateProcessIfRunning(args) {
|
|
14566
|
+
if (hasProcessExited(args.childProcess)) {
|
|
14567
|
+
return;
|
|
14568
|
+
}
|
|
14569
|
+
args.childProcess.kill(args.signal);
|
|
14570
|
+
const gracefulResult = await waitForProcessExitWithTimeout({
|
|
14571
|
+
childProcess: args.childProcess,
|
|
14572
|
+
timeoutMs: MANAGED_PROCESS_TERMINATION_TIMEOUT_MS
|
|
14573
|
+
});
|
|
14574
|
+
if (gracefulResult === "exited") {
|
|
14536
14575
|
return;
|
|
14537
14576
|
}
|
|
14538
|
-
|
|
14539
|
-
|
|
14577
|
+
log(
|
|
14578
|
+
yellow("!"),
|
|
14579
|
+
`${args.processName} did not stop after ${MANAGED_PROCESS_TERMINATION_TIMEOUT_MS}ms - sending SIGKILL`
|
|
14580
|
+
);
|
|
14581
|
+
if (!hasProcessExited(args.childProcess)) {
|
|
14582
|
+
args.childProcess.kill("SIGKILL");
|
|
14583
|
+
}
|
|
14584
|
+
await waitForProcessExitWithTimeout({
|
|
14585
|
+
childProcess: args.childProcess,
|
|
14586
|
+
timeoutMs: MANAGED_PROCESS_KILL_TIMEOUT_MS
|
|
14587
|
+
});
|
|
14540
14588
|
}
|
|
14541
14589
|
function resolveHostDaemonServerUrl(args) {
|
|
14542
14590
|
return trimToUndefined(args.env.BB_SERVER_URL) ?? args.context.serverUrl;
|
|
@@ -14662,7 +14710,11 @@ async function runHostDaemonOnly(args) {
|
|
|
14662
14710
|
shuttingDown = true;
|
|
14663
14711
|
process.stdout.write("\n");
|
|
14664
14712
|
log(dim("\u25CF"), "Shutting down");
|
|
14665
|
-
await terminateProcessIfRunning(
|
|
14713
|
+
await terminateProcessIfRunning({
|
|
14714
|
+
childProcess: daemonProcess,
|
|
14715
|
+
processName: "daemon",
|
|
14716
|
+
signal
|
|
14717
|
+
});
|
|
14666
14718
|
};
|
|
14667
14719
|
const removeSignalForwarding = installTerminationSignalForwarding(
|
|
14668
14720
|
(signal) => {
|