Files
YMhut-box-C-/third_party/MoeKoeMusic/api/ymhut-sidecar.js
T

60 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
'use strict';
const { once } = require('node:events');
const { consturctServer } = require('./server');
const protocolVersion = 1;
const commit = '4581660209c9cdd07669e8bd5bcbe136b7d91e02';
const token = process.env.YMHUT_INTERNAL_TOKEN;
const parentPid = Number(process.env.YMHUT_PARENT_PID || '0');
if (!token || token.length < 32 || !Number.isInteger(parentPid) || parentPid <= 0) {
process.stderr.write('Invalid sidecar bootstrap environment.\n');
process.exit(2);
}
async function main() {
const app = await consturctServer();
const server = app.listen(0, '127.0.0.1');
await once(server, 'listening');
const address = server.address();
if (!address || typeof address === 'string') throw new Error('Loopback listener did not expose a port.');
let stopping = false;
const stop = () => {
if (stopping) return;
stopping = true;
clearInterval(parentWatchdog);
server.close(() => process.exit(0));
setTimeout(() => process.exit(0), 1500).unref();
};
app.once('ymhut-shutdown', stop);
process.once('SIGINT', stop);
process.once('SIGTERM', stop);
const parentWatchdog = setInterval(() => {
try {
process.kill(parentPid, 0);
} catch {
stop();
}
}, 2000);
parentWatchdog.unref();
process.stdout.write(JSON.stringify({
type: 'ready',
protocolVersion,
commit,
pid: process.pid,
port: address.port,
}) + '\n');
}
main().catch((error) => {
process.stderr.write(`Sidecar startup failed: ${error && error.message ? error.message : 'unknown error'}\n`);
process.exit(1);
});