velocious 1.0.523 → 1.0.524
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 +3 -1
- package/build/background-jobs/forked-runner-child.js +9 -0
- package/build/background-jobs/job-runner.js +23 -0
- package/build/background-jobs/job.js +12 -0
- package/build/background-jobs/main.js +53 -0
- package/build/background-jobs/store.js +32 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-main.js +3 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-runner.js +4 -0
- package/build/environment-handlers/node/cli/commands/background-jobs-worker.js +3 -0
- package/build/environment-handlers/node/cli/commands/beacon.js +3 -0
- package/build/environment-handlers/node/cli/commands/server.js +3 -0
- package/build/src/background-jobs/forked-runner-child.js +9 -1
- package/build/src/background-jobs/job-runner.d.ts.map +1 -1
- package/build/src/background-jobs/job-runner.js +21 -1
- package/build/src/background-jobs/job.d.ts +11 -0
- package/build/src/background-jobs/job.d.ts.map +1 -1
- package/build/src/background-jobs/job.js +12 -1
- package/build/src/background-jobs/main.d.ts +23 -0
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +50 -1
- package/build/src/background-jobs/store.d.ts +19 -0
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +26 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-main.js +3 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-runner.js +4 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/background-jobs-worker.js +3 -1
- package/build/src/environment-handlers/node/cli/commands/beacon.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/beacon.js +3 -1
- package/build/src/environment-handlers/node/cli/commands/server.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/server.js +3 -1
- package/package.json +1 -1
- package/src/background-jobs/forked-runner-child.js +9 -0
- package/src/background-jobs/job-runner.js +23 -0
- package/src/background-jobs/job.js +12 -0
- package/src/background-jobs/main.js +53 -0
- package/src/background-jobs/store.js +32 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-main.js +3 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-runner.js +4 -0
- package/src/environment-handlers/node/cli/commands/background-jobs-worker.js +3 -0
- package/src/environment-handlers/node/cli/commands/beacon.js +3 -0
- package/src/environment-handlers/node/cli/commands/server.js +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-jobs-main.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/background-jobs-main.js"],"names":[],"mappings":"AAGA;IACE,
|
|
1
|
+
{"version":3,"file":"background-jobs-main.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/background-jobs-main.js"],"names":[],"mappings":"AAGA;IACE,yBAkBC;CACF;wBAvBuB,iCAAiC"}
|
|
@@ -2,6 +2,8 @@ import BaseCommand from "../../../../cli/base-command.js";
|
|
|
2
2
|
import BackgroundJobsMain from "../../../../background-jobs/main.js";
|
|
3
3
|
export default class BackgroundJobsMainCommand extends BaseCommand {
|
|
4
4
|
async execute() {
|
|
5
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
6
|
+
process.title = "velocious background-jobs-main";
|
|
5
7
|
const main = new BackgroundJobsMain({ configuration: this.getConfiguration() });
|
|
6
8
|
await main.start();
|
|
7
9
|
console.log(`Background jobs main listening on ${main.host}:${main.getPort()}`);
|
|
@@ -15,4 +17,4 @@ export default class BackgroundJobsMainCommand extends BaseCommand {
|
|
|
15
17
|
});
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1qb2JzLW1haW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZW52aXJvbm1lbnQtaGFuZGxlcnMvbm9kZS9jbGkvY29tbWFuZHMvYmFja2dyb3VuZC1qb2JzLW1haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0saUNBQWlDLENBQUE7QUFDekQsT0FBTyxrQkFBa0IsTUFBTSxxQ0FBcUMsQ0FBQTtBQUVwRSxNQUFNLENBQUMsT0FBTyxPQUFPLHlCQUEwQixTQUFRLFdBQVc7SUFDaEUsS0FBSyxDQUFDLE9BQU87UUFDWCx5RUFBeUU7UUFDekUsT0FBTyxDQUFDLEtBQUssR0FBRyxnQ0FBZ0MsQ0FBQTtRQUVoRCxNQUFNLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLEVBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFDLENBQUMsQ0FBQTtRQUM3RSxNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUVsQixPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFL0UsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDakIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3BCLENBQUMsQ0FBQTtZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcbmltcG9ydCBCYWNrZ3JvdW5kSm9ic01haW4gZnJvbSBcIi4uLy4uLy4uLy4uL2JhY2tncm91bmQtam9icy9tYWluLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFja2dyb3VuZEpvYnNNYWluQ29tbWFuZCBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAvLyBJZGVudGlmeSB0aGlzIHByb2Nlc3MgaW4gYHBzYC9gdG9wYCBpbnN0ZWFkIG9mIGEgZ2VuZXJpYyBcIm5vZGVcIiBlbnRyeS5cbiAgICBwcm9jZXNzLnRpdGxlID0gXCJ2ZWxvY2lvdXMgYmFja2dyb3VuZC1qb2JzLW1haW5cIlxuXG4gICAgY29uc3QgbWFpbiA9IG5ldyBCYWNrZ3JvdW5kSm9ic01haW4oe2NvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpfSlcbiAgICBhd2FpdCBtYWluLnN0YXJ0KClcblxuICAgIGNvbnNvbGUubG9nKGBCYWNrZ3JvdW5kIGpvYnMgbWFpbiBsaXN0ZW5pbmcgb24gJHttYWluLmhvc3R9OiR7bWFpbi5nZXRQb3J0KCl9YClcblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBzaHV0ZG93biA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgbWFpbi5zdG9wKClcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCBzaHV0ZG93bilcbiAgICAgIHByb2Nlc3Mub25jZShcIlNJR1RFUk1cIiwgc2h1dGRvd24pXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-jobs-runner.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/background-jobs-runner.js"],"names":[],"mappings":"AAGA;IACE,
|
|
1
|
+
{"version":3,"file":"background-jobs-runner.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/background-jobs-runner.js"],"names":[],"mappings":"AAGA;IACE,yBAuBC;CACF;wBA5BuB,iCAAiC"}
|
|
@@ -13,10 +13,13 @@ export default class BackgroundJobsRunnerCommand extends BaseCommand {
|
|
|
13
13
|
for (const signal of ["SIGTERM", "SIGINT"]) {
|
|
14
14
|
process.once(signal, () => process.exit(0));
|
|
15
15
|
}
|
|
16
|
+
// Base title; runJobPayload sets the per-job title (from the job class's
|
|
17
|
+
// `static processTitle`) for the duration of the job and restores this after.
|
|
18
|
+
process.title = "velocious background-jobs-runner";
|
|
16
19
|
const decoded = Buffer.from(payload, "base64").toString("utf8");
|
|
17
20
|
const jobPayload = JSON.parse(decoded);
|
|
18
21
|
await runJobPayload(jobPayload, { closeConnections: false });
|
|
19
22
|
process.exit(0);
|
|
20
23
|
}
|
|
21
24
|
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1qb2JzLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9ub2RlL2NsaS9jb21tYW5kcy9iYWNrZ3JvdW5kLWpvYnMtcnVubmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sV0FBVyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3pELE9BQU8sYUFBYSxNQUFNLDJDQUEyQyxDQUFBO0FBRXJFLE1BQU0sQ0FBQyxPQUFPLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQUNsRSxLQUFLLENBQUMsT0FBTztRQUNYLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUE7UUFFakQsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFFOUQsc0VBQXNFO1FBQ3RFLHdFQUF3RTtRQUN4RSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLHFCQUFxQjtRQUNyQixLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdDLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsOEVBQThFO1FBQzlFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsa0NBQWtDLENBQUE7UUFFbEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFdEMsTUFBTSxhQUFhLENBQUMsVUFBVSxFQUFFLEVBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlQ29tbWFuZCBmcm9tIFwiLi4vLi4vLi4vLi4vY2xpL2Jhc2UtY29tbWFuZC5qc1wiXG5pbXBvcnQgcnVuSm9iUGF5bG9hZCBmcm9tIFwiLi4vLi4vLi4vLi4vYmFja2dyb3VuZC1qb2JzL2pvYi1ydW5uZXIuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWNrZ3JvdW5kSm9ic1J1bm5lckNvbW1hbmQgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHByb2Nlc3MuZW52LlZFTE9DSU9VU19KT0JfUEFZTE9BRFxuXG4gICAgaWYgKCFwYXlsb2FkKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIFZFTE9DSU9VU19KT0JfUEFZTE9BRFwiKVxuXG4gICAgLy8gQSBncmFjZWZ1bCB3b3JrZXIgc2h1dGRvd24gKGUuZy4gYSBkZXBsb3kgZHJhaW5pbmcgdGhlIG9sZCByZWxlYXNlKVxuICAgIC8vIFNJR1RFUk1zIHRoaXMgc3Bhd25lZCBydW5uZXIgdG8gcmVhcCBpdC4gRXhpdCBwcm9tcHRseSBzbyBpdCBkb2VzIG5vdFxuICAgIC8vIGxpbmdlciBhcyBhbiBvcnBoYW4gcnVubmluZyBhZ2FpbnN0IGRlbGV0ZWQgcmVsZWFzZSBjb2RlOyB0aGUgT1MgcmVsZWFzZXNcbiAgICAvLyB0aGUgcnVubmVyJ3MgREIvYmVhY29uIHNvY2tldHMgb24gZXhpdCBhbmQgbWFpbidzIG9ycGhhbiBzd2VlcCByZWNsYWltc1xuICAgIC8vIHRoZSBpbi1mbGlnaHQgam9iLlxuICAgIGZvciAoY29uc3Qgc2lnbmFsIG9mIFtcIlNJR1RFUk1cIiwgXCJTSUdJTlRcIl0pIHtcbiAgICAgIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHByb2Nlc3MuZXhpdCgwKSlcbiAgICB9XG5cbiAgICAvLyBCYXNlIHRpdGxlOyBydW5Kb2JQYXlsb2FkIHNldHMgdGhlIHBlci1qb2IgdGl0bGUgKGZyb20gdGhlIGpvYiBjbGFzcydzXG4gICAgLy8gYHN0YXRpYyBwcm9jZXNzVGl0bGVgKSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBqb2IgYW5kIHJlc3RvcmVzIHRoaXMgYWZ0ZXIuXG4gICAgcHJvY2Vzcy50aXRsZSA9IFwidmVsb2Npb3VzIGJhY2tncm91bmQtam9icy1ydW5uZXJcIlxuXG4gICAgY29uc3QgZGVjb2RlZCA9IEJ1ZmZlci5mcm9tKHBheWxvYWQsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKVxuICAgIGNvbnN0IGpvYlBheWxvYWQgPSBKU09OLnBhcnNlKGRlY29kZWQpXG5cbiAgICBhd2FpdCBydW5Kb2JQYXlsb2FkKGpvYlBheWxvYWQsIHtjbG9zZUNvbm5lY3Rpb25zOiBmYWxzZX0pXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background-jobs-worker.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/background-jobs-worker.js"],"names":[],"mappings":"AA2BA;IACE,
|
|
1
|
+
{"version":3,"file":"background-jobs-worker.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/background-jobs-worker.js"],"names":[],"mappings":"AA2BA;IACE,yBAoBC;CACF;wBAjDuB,iCAAiC"}
|
|
@@ -23,6 +23,8 @@ function resolveShutdownTimeoutMs() {
|
|
|
23
23
|
}
|
|
24
24
|
export default class BackgroundJobsWorkerCommand extends BaseCommand {
|
|
25
25
|
async execute() {
|
|
26
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
27
|
+
process.title = "velocious background-jobs-worker";
|
|
26
28
|
const worker = new BackgroundJobsWorker({ configuration: this.getConfiguration() });
|
|
27
29
|
await worker.start();
|
|
28
30
|
console.log("Background jobs worker connected");
|
|
@@ -37,4 +39,4 @@ export default class BackgroundJobsWorkerCommand extends BaseCommand {
|
|
|
37
39
|
});
|
|
38
40
|
}
|
|
39
41
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC1qb2JzLXdvcmtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9ub2RlL2NsaS9jb21tYW5kcy9iYWNrZ3JvdW5kLWpvYnMtd29ya2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sV0FBVyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3pELE9BQU8sb0JBQW9CLE1BQU0sdUNBQXVDLENBQUE7QUFFeEU7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQVMsd0JBQXdCO0lBQy9CLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvREFBb0QsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUV6RyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksR0FBRyxLQUFLLEdBQUc7UUFBRSxPQUFPLFNBQVMsQ0FBQTtJQUVqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUV2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDcEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8sMkJBQTRCLFNBQVEsV0FBVztJQUNsRSxLQUFLLENBQUMsT0FBTztRQUNYLHlFQUF5RTtRQUN6RSxPQUFPLENBQUMsS0FBSyxHQUFHLGtDQUFrQyxDQUFBO1FBRWxELE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQUMsRUFBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBRXBCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtRQUUvQyxNQUFNLFNBQVMsR0FBRyx3QkFBd0IsRUFBRSxDQUFBO1FBRTVDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM1QixNQUFNLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDMUIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQTtnQkFDOUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3BCLENBQUMsQ0FBQTtZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcbmltcG9ydCBCYWNrZ3JvdW5kSm9ic1dvcmtlciBmcm9tIFwiLi4vLi4vLi4vLi4vYmFja2dyb3VuZC1qb2JzL3dvcmtlci5qc1wiXG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIHNodXRkb3duIGRyYWluIHRpbWVvdXQgZnJvbVxuICogYFZFTE9DSU9VU19CQUNLR1JPVU5EX0pPQlNfV09SS0VSX1NIVVRET1dOX1RJTUVPVVRfTVNgOlxuICogICAtIHVuc2V0IC8gXCJpbmRlZmluaXRlXCIgLyBcIjBcIiDihpIgaW5kZWZpbml0ZTogd2FpdCBmb3IgaW4tZmxpZ2h0IGpvYnMgdG9cbiAqICAgICBmaW5pc2ggYW5kIG5ldmVyIGtpbGwgYSBwcm9jZXNzIHJ1bm5lci4gVGhpcyBpcyB0aGUgZGVmYXVsdCBzbyBhIGdyYWNlZnVsXG4gKiAgICAgc3RvcCAoZS5nLiBhIGRlcGxveSkgZG9lcyBub3QgaW50ZXJydXB0IGxvbmctcnVubmluZyBqb2JzIHN1Y2ggYXMgYnVpbGRzLlxuICogICAtIHBvc2l0aXZlIGludGVnZXIg4oaSIHRoYXQgbWFueSBtaWxsaXNlY29uZHMsIGFmdGVyIHdoaWNoIGFueSBwcm9jZXNzIHJ1bm5lclxuICogICAgIHN0aWxsIGluIGZsaWdodCBpcyB0ZXJtaW5hdGVkIChTSUdURVJNLCB0aGVuIFNJR0tJTEwpIGluc3RlYWQgb2Ygb3JwaGFuZWQuXG4gKlxuICogV2hlbiBhIGZpbml0ZSBjYXAgaXMgdXNlZCBpdCBtdXN0IGJlIHNob3J0ZXIgdGhhbiB0aGUgc3VwZXJ2aXNvcidzXG4gKiBncmFjZWZ1bC1zdG9wIHdpbmRvdyBzbyB0aGUgd29ya2VyIHJlYXBzIGl0cyBvd24gY2hpbGRyZW4gYmVmb3JlIGJlaW5nXG4gKiBmb3JjZS1raWxsZWQuXG4gKiBAcmV0dXJucyB7bnVtYmVyIHwgdW5kZWZpbmVkfSAtIFRpbWVvdXQgaW4gbXMsIG9yIHVuZGVmaW5lZCBmb3IgaW5kZWZpbml0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNodXRkb3duVGltZW91dE1zKCkge1xuICBjb25zdCByYXcgPSAocHJvY2Vzcy5lbnYuVkVMT0NJT1VTX0JBQ0tHUk9VTkRfSk9CU19XT1JLRVJfU0hVVERPV05fVElNRU9VVF9NUyB8fCBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKVxuXG4gIGlmICghcmF3IHx8IHJhdyA9PT0gXCJpbmRlZmluaXRlXCIgfHwgcmF3ID09PSBcIjBcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlci5wYXJzZUludChyYXcsIDEwKVxuXG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlZCkgJiYgcGFyc2VkID4gMCA/IHBhcnNlZCA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWNrZ3JvdW5kSm9ic1dvcmtlckNvbW1hbmQgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgLy8gSWRlbnRpZnkgdGhpcyBwcm9jZXNzIGluIGBwc2AvYHRvcGAgaW5zdGVhZCBvZiBhIGdlbmVyaWMgXCJub2RlXCIgZW50cnkuXG4gICAgcHJvY2Vzcy50aXRsZSA9IFwidmVsb2Npb3VzIGJhY2tncm91bmQtam9icy13b3JrZXJcIlxuXG4gICAgY29uc3Qgd29ya2VyID0gbmV3IEJhY2tncm91bmRKb2JzV29ya2VyKHtjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKX0pXG4gICAgYXdhaXQgd29ya2VyLnN0YXJ0KClcblxuICAgIGNvbnNvbGUubG9nKFwiQmFja2dyb3VuZCBqb2JzIHdvcmtlciBjb25uZWN0ZWRcIilcblxuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHJlc29sdmVTaHV0ZG93blRpbWVvdXRNcygpXG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3Qgc2h1dGRvd24gPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHdvcmtlci5zdG9wKHt0aW1lb3V0TXN9KVxuICAgICAgICByZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH1cblxuICAgICAgcHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsIHNodXRkb3duKVxuICAgICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCBzaHV0ZG93bilcbiAgICB9KVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"beacon.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/beacon.js"],"names":[],"mappings":"AAGA;IACE,
|
|
1
|
+
{"version":3,"file":"beacon.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/beacon.js"],"names":[],"mappings":"AAGA;IACE,yBAkBC;CACF;wBAvBuB,iCAAiC"}
|
|
@@ -2,6 +2,8 @@ import BaseCommand from "../../../../cli/base-command.js";
|
|
|
2
2
|
import BeaconServer from "../../../../beacon/server.js";
|
|
3
3
|
export default class BeaconCommand extends BaseCommand {
|
|
4
4
|
async execute() {
|
|
5
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
6
|
+
process.title = "velocious beacon";
|
|
5
7
|
const beacon = new BeaconServer({ configuration: this.getConfiguration() });
|
|
6
8
|
await beacon.start();
|
|
7
9
|
console.log(`Beacon listening on ${beacon.host}:${beacon.getPort()}`);
|
|
@@ -15,4 +17,4 @@ export default class BeaconCommand extends BaseCommand {
|
|
|
15
17
|
});
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Vudmlyb25tZW50LWhhbmRsZXJzL25vZGUvY2xpL2NvbW1hbmRzL2JlYWNvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN6RCxPQUFPLFlBQVksTUFBTSw4QkFBOEIsQ0FBQTtBQUV2RCxNQUFNLENBQUMsT0FBTyxPQUFPLGFBQWMsU0FBUSxXQUFXO0lBQ3BELEtBQUssQ0FBQyxPQUFPO1FBQ1gseUVBQXlFO1FBQ3pFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUE7UUFFbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUMsQ0FBQyxDQUFBO1FBQ3pFLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBRXBCLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVyRSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUNuQixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDcEIsQ0FBQyxDQUFBO1lBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFzZUNvbW1hbmQgZnJvbSBcIi4uLy4uLy4uLy4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIlxuaW1wb3J0IEJlYWNvblNlcnZlciBmcm9tIFwiLi4vLi4vLi4vLi4vYmVhY29uL3NlcnZlci5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJlYWNvbkNvbW1hbmQgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgLy8gSWRlbnRpZnkgdGhpcyBwcm9jZXNzIGluIGBwc2AvYHRvcGAgaW5zdGVhZCBvZiBhIGdlbmVyaWMgXCJub2RlXCIgZW50cnkuXG4gICAgcHJvY2Vzcy50aXRsZSA9IFwidmVsb2Npb3VzIGJlYWNvblwiXG5cbiAgICBjb25zdCBiZWFjb24gPSBuZXcgQmVhY29uU2VydmVyKHtjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKX0pXG4gICAgYXdhaXQgYmVhY29uLnN0YXJ0KClcblxuICAgIGNvbnNvbGUubG9nKGBCZWFjb24gbGlzdGVuaW5nIG9uICR7YmVhY29uLmhvc3R9OiR7YmVhY29uLmdldFBvcnQoKX1gKVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHNodXRkb3duID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBiZWFjb24uc3RvcCgpXG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLm9uY2UoXCJTSUdJTlRcIiwgc2h1dGRvd24pXG4gICAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsIHNodXRkb3duKVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/server.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,qFAJG;IAAwC,WAAW,EAA3C,yBAAyB;IACJ,aAAa;CAC1C,GAAU,OAAO,CAAC,IAAI,CAAC,CA+DzB;AA4BD;;;;;GAKG;AACH,mEAJW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,aACrD,OAAO,oCAAoC,EAAE,uBAAuB,GAClE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAC,CAS1D;AAED;IACE;;;OAGG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/server.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;;GAOG;AACH,qFAJG;IAAwC,WAAW,EAA3C,yBAAyB;IACJ,aAAa;CAC1C,GAAU,OAAO,CAAC,IAAI,CAAC,CA+DzB;AA4BD;;;;;GAKG;AACH,mEAJW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,aACrD,OAAO,oCAAoC,EAAE,uBAAuB,GAClE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAC,CAS1D;AAED;IACE;;;OAGG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAoBzB;CACF;;;;;;;;UAnJa,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,aAAa;;;;oBACpE,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,aAAa;;;;;;;;;UAMpE,MAAM,OAAO,CAAC,IAAI,CAAC;;;;UACnB,MAAM,OAAO,CAAC,IAAI,CAAC;;wBAbT,iCAAiC"}
|
|
@@ -120,6 +120,8 @@ export default class VelociousCliCommandsServer extends BaseCommand {
|
|
|
120
120
|
* @returns {Promise<void>} - Starts the HTTP server and waits until it stops.
|
|
121
121
|
*/
|
|
122
122
|
async execute() {
|
|
123
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
124
|
+
process.title = "velocious server";
|
|
123
125
|
const parsedProcessArgs = this.args?.parsedProcessArgs || {};
|
|
124
126
|
const configuration = this.getConfiguration();
|
|
125
127
|
const httpServer = httpServerConfigFromParsedArgs(parsedProcessArgs, configuration.httpServer);
|
|
@@ -135,4 +137,4 @@ export default class VelociousCliCommandsServer extends BaseCommand {
|
|
|
135
137
|
await waitForApplicationWithSignalShutdown({ application });
|
|
136
138
|
}
|
|
137
139
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Vudmlyb25tZW50LWhhbmRsZXJzL25vZGUvY2xpL2NvbW1hbmRzL3NlcnZlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFdBQVcsTUFBTSw0QkFBNEIsQ0FBQTtBQUNwRCxPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV6RDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxFQUFDLFdBQVcsRUFBRSxhQUFhLEdBQUcsT0FBTyxFQUFDO0lBQ3pGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3BCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUVwQjs7O1dBR0c7UUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDaEQsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkQsQ0FBQyxDQUFBO1FBRUQ7Ozs7V0FJRztRQUNILE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxRQUFRO2dCQUFFLE9BQU07WUFFcEIsUUFBUSxHQUFHLElBQUksQ0FBQTtZQUNmLE9BQU8sRUFBRSxDQUFBO1lBRVQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3BCLENBQUM7UUFDSCxDQUFDLENBQUE7UUFFRDs7O1dBR0c7UUFDSCxNQUFNLGVBQWUsR0FBRyxL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QUFBO1FBQzdDLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM5RixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUNsQyxhQUFhO1lBQ2IsVUFBVTtZQUNWLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRWxELE1BQU0sV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQzlCLE1BQU0sV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLFVBQVUsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksT0FBTyxXQUFXLGNBQWMsQ0FBQyxDQUFBO1FBQ25ILE1BQU0sb0NBQW9DLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFBO0lBQzNELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwbGljYXRpb24uanNcIlxuaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcblxuLyoqXG4gKiBTaWduYWxQcm9jZXNzIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTaWduYWxQcm9jZXNzXG4gKiBAcHJvcGVydHkgeyhldmVudDogXCJTSUdJTlRcIiB8IFwiU0lHVEVSTVwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gU2lnbmFsUHJvY2Vzc30gb25jZSAtIFJlZ2lzdGVyIG9uZSBzaWduYWwgbGlzdGVuZXIuXG4gKiBAcHJvcGVydHkgeyhldmVudDogXCJTSUdJTlRcIiB8IFwiU0lHVEVSTVwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gU2lnbmFsUHJvY2Vzc30gcmVtb3ZlTGlzdGVuZXIgLSBSZW1vdmUgb25lIHNpZ25hbCBsaXN0ZW5lci5cbiAqL1xuXG4vKipcbiAqIFNpZ25hbFNodXRkb3duQXBwbGljYXRpb24gdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNpZ25hbFNodXRkb3duQXBwbGljYXRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTx2b2lkPn0gc3RvcCAtIFN0b3AgdGhlIGFwcGxpY2F0aW9uIGdyYWNlZnVsbHkuXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IHdhaXQgLSBXYWl0IHVudGlsIHRoZSBhcHBsaWNhdGlvbiBjbG9zZXMuXG4gKi9cblxuLyoqXG4gKiBXYWl0cyBmb3IgdGhlIEhUVFAgYXBwbGljYXRpb24gdG8gY2xvc2UsIHN0b3BwaW5nIGl0IGdyYWNlZnVsbHkgd2hlbiB0aGVcbiAqIHByb2Nlc3MgcmVjZWl2ZXMgU0lHSU5UIG9yIFNJR1RFUk0uXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFdhaXQgb3B0aW9ucy5cbiAqIEBwYXJhbSB7U2lnbmFsU2h1dGRvd25BcHBsaWNhdGlvbn0gYXJncy5hcHBsaWNhdGlvbiAtIFJ1bm5pbmcgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0ge1NpZ25hbFByb2Nlc3N9IFthcmdzLnByb2Nlc3NPYmplY3RdIC0gUHJvY2Vzcy1saWtlIHNpZ25hbCBlbWl0dGVyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB0aGUgYXBwbGljYXRpb24gaGFzIHN0b3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yQXBwbGljYXRpb25XaXRoU2lnbmFsU2h1dGRvd24oe2FwcGxpY2F0aW9uLCBwcm9jZXNzT2JqZWN0ID0gcHJvY2Vzc30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgIGxldCBzdG9wcGluZyA9IGZhbHNlXG5cbiAgICAvKipcbiAgICAgKiBDbGVhbnVwLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfSAtIFJlbW92ZSBpbnN0YWxsZWQgc2lnbmFsIGhhbmRsZXJzLlxuICAgICAqL1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBwcm9jZXNzT2JqZWN0LnJlbW92ZUxpc3RlbmVyKFwiU0lHSU5UXCIsIG9uU2lnbmFsKVxuICAgICAgcHJvY2Vzc09iamVjdC5yZW1vdmVMaXN0ZW5lcihcIlNJR1RFUk1cIiwgb25TaWduYWwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGxldGVzIHRoZSB3YWl0IHByb21pc2Ugb25jZS5cbiAgICAgKiBAcGFyYW0gez99IFtlcnJvcl0gLSBPcHRpb25hbCByZWplY3Rpb24gcmVhc29uLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmlzaCA9IChlcnJvcikgPT4ge1xuICAgICAgaWYgKGZpbmlzaGVkKSByZXR1cm5cblxuICAgICAgZmluaXNoZWQgPSB0cnVlXG4gICAgICBjbGVhbnVwKClcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3AgYXBwbGljYXRpb24uXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gU3RvcHMgdGhlIGFwcGxpY2F0aW9uIG9uY2UuXG4gICAgICovXG4gICAgY29uc3Qgc3RvcEFwcGxpY2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHN0b3BwaW5nIHx8IGZpbmlzaGVkKSByZXR1cm5cblxuICAgICAgc3RvcHBpbmcgPSB0cnVlXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFwcGxpY2F0aW9uLnN0b3AoKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZmluaXNoKGVycm9yKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIHNpZ25hbC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gLSBIYW5kbGVzIG9uZSBzaHV0ZG93biBzaWduYWwuXG4gICAgICovXG4gICAgY29uc3Qgb25TaWduYWwgPSAoKSA9PiB7XG4gICAgICB2b2lkIHN0b3BBcHBsaWNhdGlvbigpXG4gICAgfVxuXG4gICAgcHJvY2Vzc09iamVjdC5vbmNlKFwiU0lHSU5UXCIsIG9uU2lnbmFsKVxuICAgIHByb2Nlc3NPYmplY3Qub25jZShcIlNJR1RFUk1cIiwgb25TaWduYWwpXG5cbiAgICBhcHBsaWNhdGlvbi53YWl0KCkudGhlbigoKSA9PiBmaW5pc2goKSkuY2F0Y2goKGVycm9yKSA9PiBmaW5pc2goZXJyb3IpKVxuICB9KVxufVxuXG4vKipcbiAqIFJ1bnMgZmlyc3QgY29uZmlndXJlZCB2YWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gey4uLihUIHwgdW5kZWZpbmVkKX0gdmFsdWVzIC0gQ2FuZGlkYXRlIHZhbHVlcyBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEByZXR1cm5zIHtUIHwgdW5kZWZpbmVkfSAtIEZpcnN0IGNvbmZpZ3VyZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGZpcnN0Q29uZmlndXJlZFZhbHVlKC4uLnZhbHVlcykge1xuICByZXR1cm4gdmFsdWVzLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxufVxuXG4vKipcbiAqIFJ1bnMgaHR0cCBzZXJ2ZXIgd29ya2VycyBmcm9tIGFyZy5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZH0gd29ya2Vyc0FyZyAtIFdvcmtlciBjb3VudCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gTm9ybWFsaXplZCB3b3JrZXIgY291bnQuXG4gKi9cbmZ1bmN0aW9uIGh0dHBTZXJ2ZXJXb3JrZXJzRnJvbUFyZyh3b3JrZXJzQXJnKSB7XG4gIGlmICh3b3JrZXJzQXJnID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKHR5cGVvZiB3b3JrZXJzQXJnID09PSBcImJvb2xlYW5cIikgdGhyb3cgbmV3IEVycm9yKFwiLS13b3JrZXJzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpXG5cbiAgY29uc3Qgd29ya2VycyA9IE51bWJlcih3b3JrZXJzQXJnKVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih3b3JrZXJzKSB8fCB3b3JrZXJzIDwgMSkgdGhyb3cgbmV3IEVycm9yKFwiLS13b3JrZXJzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpXG5cbiAgcmV0dXJuIHdvcmtlcnNcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBodHRwU2VydmVyQ29uZmlnRnJvbVBhcnNlZEFyZ3MgaGVscGVyLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPn0gcGFyc2VkUHJvY2Vzc0FyZ3MgLSBQYXJzZWQgQ0xJIGFyZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuSHR0cFNlcnZlckNvbmZpZ3VyYXRpb259IFtkZWZhdWx0c10gLSBEZWZhdWx0IEhUVFAgc2VydmVyIGNvbmZpZy5cbiAqIEByZXR1cm5zIHt7aG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIsIHdvcmtlcnM/OiBudW1iZXJ9fSAtIEhUVFAgc2VydmVyIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0dHBTZXJ2ZXJDb25maWdGcm9tUGFyc2VkQXJncyhwYXJzZWRQcm9jZXNzQXJncyA9IHt9LCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IGhvc3QgPSBTdHJpbmcoZmlyc3RDb25maWd1cmVkVmFsdWUocGFyc2VkUHJvY2Vzc0FyZ3MuaCwgcGFyc2VkUHJvY2Vzc0FyZ3MuaG9zdCwgZGVmYXVsdHMuaG9zdCwgXCIxMjcuMC4wLjFcIikpXG4gIGNvbnN0IHBvcnQgPSBOdW1iZXIoZmlyc3RDb25maWd1cmVkVmFsdWUocGFyc2VkUHJvY2Vzc0FyZ3MucCwgcGFyc2VkUHJvY2Vzc0FyZ3MucG9ydCwgZGVmYXVsdHMucG9ydCwgMzAwNikpXG4gIGNvbnN0IHdvcmtlcnMgPSBodHRwU2VydmVyV29ya2Vyc0Zyb21BcmcoZmlyc3RDb25maWd1cmVkVmFsdWUocGFyc2VkUHJvY2Vzc0FyZ3Mud29ya2VycywgZGVmYXVsdHMud29ya2VycykpXG5cbiAgaWYgKHdvcmtlcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHtob3N0LCBwb3J0fVxuICByZXR1cm4ge2hvc3QsIHBvcnQsIHdvcmtlcnN9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0NsaUNvbW1hbmRzU2VydmVyIGV4dGVuZHMgQmFzZUNvbW1hbmR7XG4gIC8qKlxuICAgKiBSdW5zIGV4ZWN1dGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFN0YXJ0cyB0aGUgSFRUUCBzZXJ2ZXIgYW5kIHdhaXRzIHVudGlsIGl0IHN0b3BzLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBjb25zdCBwYXJzZWRQcm9jZXNzQXJncyA9IHRoaXMuYXJncz8ucGFyc2VkUHJvY2Vzc0FyZ3MgfHwge31cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKClcbiAgICBjb25zdCBodHRwU2VydmVyID0gaHR0cFNlcnZlckNvbmZpZ0Zyb21QYXJzZWRBcmdzKHBhcnNlZFByb2Nlc3NBcmdzLCBjb25maWd1cmF0aW9uLmh0dHBTZXJ2ZXIpXG4gICAgY29uc3QgYXBwbGljYXRpb24gPSBuZXcgQXBwbGljYXRpb24oe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIGh0dHBTZXJ2ZXIsXG4gICAgICB0eXBlOiBcInNlcnZlclwiXG4gICAgfSlcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGNvbmZpZ3VyYXRpb24uZ2V0RW52aXJvbm1lbnQoKVxuXG4gICAgYXdhaXQgYXBwbGljYXRpb24uaW5pdGlhbGl6ZSgpXG4gICAgYXdhaXQgYXBwbGljYXRpb24uc3RhcnRIdHRwU2VydmVyKClcbiAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCBWZWxvY2lvdXMgSFRUUCBzZXJ2ZXIgb24gJHtodHRwU2VydmVyLmhvc3R9OiR7aHR0cFNlcnZlci5wb3J0fSBpbiAke2Vudmlyb25tZW50fSBlbnZpcm9ubWVudGApXG4gICAgYXdhaXQgd2FpdEZvckFwcGxpY2F0aW9uV2l0aFNpZ25hbFNodXRkb3duKHthcHBsaWNhdGlvbn0pXG4gIH1cbn1cbiJdfQ==
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Vudmlyb25tZW50LWhhbmRsZXJzL25vZGUvY2xpL2NvbW1hbmRzL3NlcnZlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFdBQVcsTUFBTSw0QkFBNEIsQ0FBQTtBQUNwRCxPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUV6RDs7Ozs7R0FLRztBQUVIOzs7OztHQUtHO0FBRUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxvQ0FBb0MsQ0FBQyxFQUFDLFdBQVcsRUFBRSxhQUFhLEdBQUcsT0FBTyxFQUFDO0lBQ3pGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3BCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUVwQjs7O1dBR0c7UUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDbkIsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDaEQsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDbkQsQ0FBQyxDQUFBO1FBRUQ7Ozs7V0FJRztRQUNILE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxRQUFRO2dCQUFFLE9BQU07WUFFcEIsUUFBUSxHQUFHLElBQUksQ0FBQTtZQUNmLE9BQU8sRUFBRSxDQUFBO1lBRVQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDZixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1lBQ3BCLENBQUM7UUFDSCxDQUFDLENBQUE7UUFFRDs7O1dBR0c7UUFDSCxNQUFNLGVBQWUsR0FBRyxL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RSxDQUFBO1FBQzVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBQzdDLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM5RixNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQztZQUNsQyxhQUFhO1lBQ2IsVUFBVTtZQUNWLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBRWxELE1BQU0sV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQzlCLE1BQU0sV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFBO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLFVBQVUsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksT0FBTyxXQUFXLGNBQWMsQ0FBQyxDQUFBO1FBQ25ILE1BQU0sb0NBQW9DLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxDQUFBO0lBQzNELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBsaWNhdGlvbiBmcm9tIFwiLi4vLi4vLi4vLi4vYXBwbGljYXRpb24uanNcIlxuaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcblxuLyoqXG4gKiBTaWduYWxQcm9jZXNzIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTaWduYWxQcm9jZXNzXG4gKiBAcHJvcGVydHkgeyhldmVudDogXCJTSUdJTlRcIiB8IFwiU0lHVEVSTVwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gU2lnbmFsUHJvY2Vzc30gb25jZSAtIFJlZ2lzdGVyIG9uZSBzaWduYWwgbGlzdGVuZXIuXG4gKiBAcHJvcGVydHkgeyhldmVudDogXCJTSUdJTlRcIiB8IFwiU0lHVEVSTVwiLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCkgPT4gU2lnbmFsUHJvY2Vzc30gcmVtb3ZlTGlzdGVuZXIgLSBSZW1vdmUgb25lIHNpZ25hbCBsaXN0ZW5lci5cbiAqL1xuXG4vKipcbiAqIFNpZ25hbFNodXRkb3duQXBwbGljYXRpb24gdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFNpZ25hbFNodXRkb3duQXBwbGljYXRpb25cbiAqIEBwcm9wZXJ0eSB7KCkgPT4gUHJvbWlzZTx2b2lkPn0gc3RvcCAtIFN0b3AgdGhlIGFwcGxpY2F0aW9uIGdyYWNlZnVsbHkuXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IHdhaXQgLSBXYWl0IHVudGlsIHRoZSBhcHBsaWNhdGlvbiBjbG9zZXMuXG4gKi9cblxuLyoqXG4gKiBXYWl0cyBmb3IgdGhlIEhUVFAgYXBwbGljYXRpb24gdG8gY2xvc2UsIHN0b3BwaW5nIGl0IGdyYWNlZnVsbHkgd2hlbiB0aGVcbiAqIHByb2Nlc3MgcmVjZWl2ZXMgU0lHSU5UIG9yIFNJR1RFUk0uXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFdhaXQgb3B0aW9ucy5cbiAqIEBwYXJhbSB7U2lnbmFsU2h1dGRvd25BcHBsaWNhdGlvbn0gYXJncy5hcHBsaWNhdGlvbiAtIFJ1bm5pbmcgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0ge1NpZ25hbFByb2Nlc3N9IFthcmdzLnByb2Nlc3NPYmplY3RdIC0gUHJvY2Vzcy1saWtlIHNpZ25hbCBlbWl0dGVyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB0aGUgYXBwbGljYXRpb24gaGFzIHN0b3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0Rm9yQXBwbGljYXRpb25XaXRoU2lnbmFsU2h1dGRvd24oe2FwcGxpY2F0aW9uLCBwcm9jZXNzT2JqZWN0ID0gcHJvY2Vzc30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgIGxldCBzdG9wcGluZyA9IGZhbHNlXG5cbiAgICAvKipcbiAgICAgKiBDbGVhbnVwLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfSAtIFJlbW92ZSBpbnN0YWxsZWQgc2lnbmFsIGhhbmRsZXJzLlxuICAgICAqL1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBwcm9jZXNzT2JqZWN0LnJlbW92ZUxpc3RlbmVyKFwiU0lHSU5UXCIsIG9uU2lnbmFsKVxuICAgICAgcHJvY2Vzc09iamVjdC5yZW1vdmVMaXN0ZW5lcihcIlNJR1RFUk1cIiwgb25TaWduYWwpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGxldGVzIHRoZSB3YWl0IHByb21pc2Ugb25jZS5cbiAgICAgKiBAcGFyYW0gez99IFtlcnJvcl0gLSBPcHRpb25hbCByZWplY3Rpb24gcmVhc29uLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGNvbnN0IGZpbmlzaCA9IChlcnJvcikgPT4ge1xuICAgICAgaWYgKGZpbmlzaGVkKSByZXR1cm5cblxuICAgICAgZmluaXNoZWQgPSB0cnVlXG4gICAgICBjbGVhbnVwKClcblxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3AgYXBwbGljYXRpb24uXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gU3RvcHMgdGhlIGFwcGxpY2F0aW9uIG9uY2UuXG4gICAgICovXG4gICAgY29uc3Qgc3RvcEFwcGxpY2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHN0b3BwaW5nIHx8IGZpbmlzaGVkKSByZXR1cm5cblxuICAgICAgc3RvcHBpbmcgPSB0cnVlXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFwcGxpY2F0aW9uLnN0b3AoKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZmluaXNoKGVycm9yKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIHNpZ25hbC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH0gLSBIYW5kbGVzIG9uZSBzaHV0ZG93biBzaWduYWwuXG4gICAgICovXG4gICAgY29uc3Qgb25TaWduYWwgPSAoKSA9PiB7XG4gICAgICB2b2lkIHN0b3BBcHBsaWNhdGlvbigpXG4gICAgfVxuXG4gICAgcHJvY2Vzc09iamVjdC5vbmNlKFwiU0lHSU5UXCIsIG9uU2lnbmFsKVxuICAgIHByb2Nlc3NPYmplY3Qub25jZShcIlNJR1RFUk1cIiwgb25TaWduYWwpXG5cbiAgICBhcHBsaWNhdGlvbi53YWl0KCkudGhlbigoKSA9PiBmaW5pc2goKSkuY2F0Y2goKGVycm9yKSA9PiBmaW5pc2goZXJyb3IpKVxuICB9KVxufVxuXG4vKipcbiAqIFJ1bnMgZmlyc3QgY29uZmlndXJlZCB2YWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gey4uLihUIHwgdW5kZWZpbmVkKX0gdmFsdWVzIC0gQ2FuZGlkYXRlIHZhbHVlcyBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEByZXR1cm5zIHtUIHwgdW5kZWZpbmVkfSAtIEZpcnN0IGNvbmZpZ3VyZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGZpcnN0Q29uZmlndXJlZFZhbHVlKC4uLnZhbHVlcykge1xuICByZXR1cm4gdmFsdWVzLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxufVxuXG4vKipcbiAqIFJ1bnMgaHR0cCBzZXJ2ZXIgd29ya2VycyBmcm9tIGFyZy5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZH0gd29ya2Vyc0FyZyAtIFdvcmtlciBjb3VudCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9IC0gTm9ybWFsaXplZCB3b3JrZXIgY291bnQuXG4gKi9cbmZ1bmN0aW9uIGh0dHBTZXJ2ZXJXb3JrZXJzRnJvbUFyZyh3b3JrZXJzQXJnKSB7XG4gIGlmICh3b3JrZXJzQXJnID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKHR5cGVvZiB3b3JrZXJzQXJnID09PSBcImJvb2xlYW5cIikgdGhyb3cgbmV3IEVycm9yKFwiLS13b3JrZXJzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpXG5cbiAgY29uc3Qgd29ya2VycyA9IE51bWJlcih3b3JrZXJzQXJnKVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih3b3JrZXJzKSB8fCB3b3JrZXJzIDwgMSkgdGhyb3cgbmV3IEVycm9yKFwiLS13b3JrZXJzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpXG5cbiAgcmV0dXJuIHdvcmtlcnNcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBodHRwU2VydmVyQ29uZmlnRnJvbVBhcnNlZEFyZ3MgaGVscGVyLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPn0gcGFyc2VkUHJvY2Vzc0FyZ3MgLSBQYXJzZWQgQ0xJIGFyZ3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuSHR0cFNlcnZlckNvbmZpZ3VyYXRpb259IFtkZWZhdWx0c10gLSBEZWZhdWx0IEhUVFAgc2VydmVyIGNvbmZpZy5cbiAqIEByZXR1cm5zIHt7aG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIsIHdvcmtlcnM/OiBudW1iZXJ9fSAtIEhUVFAgc2VydmVyIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0dHBTZXJ2ZXJDb25maWdGcm9tUGFyc2VkQXJncyhwYXJzZWRQcm9jZXNzQXJncyA9IHt9LCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IGhvc3QgPSBTdHJpbmcoZmlyc3RDb25maWd1cmVkVmFsdWUocGFyc2VkUHJvY2Vzc0FyZ3MuaCwgcGFyc2VkUHJvY2Vzc0FyZ3MuaG9zdCwgZGVmYXVsdHMuaG9zdCwgXCIxMjcuMC4wLjFcIikpXG4gIGNvbnN0IHBvcnQgPSBOdW1iZXIoZmlyc3RDb25maWd1cmVkVmFsdWUocGFyc2VkUHJvY2Vzc0FyZ3MucCwgcGFyc2VkUHJvY2Vzc0FyZ3MucG9ydCwgZGVmYXVsdHMucG9ydCwgMzAwNikpXG4gIGNvbnN0IHdvcmtlcnMgPSBodHRwU2VydmVyV29ya2Vyc0Zyb21BcmcoZmlyc3RDb25maWd1cmVkVmFsdWUocGFyc2VkUHJvY2Vzc0FyZ3Mud29ya2VycywgZGVmYXVsdHMud29ya2VycykpXG5cbiAgaWYgKHdvcmtlcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHtob3N0LCBwb3J0fVxuICByZXR1cm4ge2hvc3QsIHBvcnQsIHdvcmtlcnN9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0NsaUNvbW1hbmRzU2VydmVyIGV4dGVuZHMgQmFzZUNvbW1hbmR7XG4gIC8qKlxuICAgKiBSdW5zIGV4ZWN1dGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFN0YXJ0cyB0aGUgSFRUUCBzZXJ2ZXIgYW5kIHdhaXRzIHVudGlsIGl0IHN0b3BzLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAvLyBJZGVudGlmeSB0aGlzIHByb2Nlc3MgaW4gYHBzYC9gdG9wYCBpbnN0ZWFkIG9mIGEgZ2VuZXJpYyBcIm5vZGVcIiBlbnRyeS5cbiAgICBwcm9jZXNzLnRpdGxlID0gXCJ2ZWxvY2lvdXMgc2VydmVyXCJcblxuICAgIGNvbnN0IHBhcnNlZFByb2Nlc3NBcmdzID0gdGhpcy5hcmdzPy5wYXJzZWRQcm9jZXNzQXJncyB8fCB7fVxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKVxuICAgIGNvbnN0IGh0dHBTZXJ2ZXIgPSBodHRwU2VydmVyQ29uZmlnRnJvbVBhcnNlZEFyZ3MocGFyc2VkUHJvY2Vzc0FyZ3MsIGNvbmZpZ3VyYXRpb24uaHR0cFNlcnZlcilcbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IG5ldyBBcHBsaWNhdGlvbih7XG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgaHR0cFNlcnZlcixcbiAgICAgIHR5cGU6IFwic2VydmVyXCJcbiAgICB9KVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gY29uZmlndXJhdGlvbi5nZXRFbnZpcm9ubWVudCgpXG5cbiAgICBhd2FpdCBhcHBsaWNhdGlvbi5pbml0aWFsaXplKClcbiAgICBhd2FpdCBhcHBsaWNhdGlvbi5zdGFydEh0dHBTZXJ2ZXIoKVxuICAgIGNvbnNvbGUubG9nKGBTdGFydGVkIFZlbG9jaW91cyBIVFRQIHNlcnZlciBvbiAke2h0dHBTZXJ2ZXIuaG9zdH06JHtodHRwU2VydmVyLnBvcnR9IGluICR7ZW52aXJvbm1lbnR9IGVudmlyb25tZW50YClcbiAgICBhd2FpdCB3YWl0Rm9yQXBwbGljYXRpb25XaXRoU2lnbmFsU2h1dGRvd24oe2FwcGxpY2F0aW9ufSlcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import runJobPayload from "./job-runner.js"
|
|
4
4
|
|
|
5
|
+
// Name the process so `ps`/`top`/`htop` can identify forked job runners at a
|
|
6
|
+
// glance instead of a wall of generic "node" entries. Updated to the specific
|
|
7
|
+
// job name once one arrives (see runJobMessage), so operators can see exactly
|
|
8
|
+
// which jobs are running, how many of each, and which are eating resources.
|
|
9
|
+
process.title = "velocious background-jobs-runner"
|
|
10
|
+
|
|
5
11
|
let finishing = false
|
|
6
12
|
|
|
7
13
|
/**
|
|
@@ -51,6 +57,9 @@ async function runJobMessage(message) {
|
|
|
51
57
|
throw new Error("Forked background job runner received invalid payload")
|
|
52
58
|
}
|
|
53
59
|
|
|
60
|
+
// The per-job process title (and its restore) is set inside runJobPayload,
|
|
61
|
+
// which reads the job class's `static processTitle`. This process boots with
|
|
62
|
+
// the base "velocious background-jobs-runner" title set at module load above.
|
|
54
63
|
await runJobPayload(message.payload, {closeConnections: false})
|
|
55
64
|
}
|
|
56
65
|
|
|
@@ -47,6 +47,21 @@ async function connectBeacon(configuration) {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Resolves the process title to show while a job runs: the job class's declared
|
|
52
|
+
* `static processTitle`, else a `velocious job-runner: <JobName>` fallback.
|
|
53
|
+
* @param {typeof import("./job.js").default} JobClass - Resolved job class.
|
|
54
|
+
* @param {import("./types.js").BackgroundJobPayload} payload - Payload.
|
|
55
|
+
* @returns {string} - Process title.
|
|
56
|
+
*/
|
|
57
|
+
function runnerProcessTitle(JobClass, payload) {
|
|
58
|
+
const declared = JobClass.processTitle
|
|
59
|
+
|
|
60
|
+
if (typeof declared === "string" && declared.length > 0) return declared
|
|
61
|
+
|
|
62
|
+
return `velocious job-runner: ${payload.jobName}`
|
|
63
|
+
}
|
|
64
|
+
|
|
50
65
|
/**
|
|
51
66
|
* Runs run job payload.
|
|
52
67
|
* @param {import("./types.js").BackgroundJobPayload} payload - Payload.
|
|
@@ -70,6 +85,11 @@ export default async function runJobPayload(payload, {closeConnections = true} =
|
|
|
70
85
|
* @type {(...args: Array<?>) => Promise<void>} */
|
|
71
86
|
const perform = jobInstance.perform
|
|
72
87
|
|
|
88
|
+
// Name the process after the job it is running so `ps`/`top` show what each
|
|
89
|
+
// runner is doing; restored in the `finally` below when the job finishes.
|
|
90
|
+
const previousTitle = process.title
|
|
91
|
+
process.title = runnerProcessTitle(JobClass, payload)
|
|
92
|
+
|
|
73
93
|
try {
|
|
74
94
|
try {
|
|
75
95
|
await configuration.withConnections({name: `Background job runner: ${payload.jobName}`}, async () => {
|
|
@@ -102,6 +122,9 @@ export default async function runJobPayload(payload, {closeConnections = true} =
|
|
|
102
122
|
})
|
|
103
123
|
}
|
|
104
124
|
} finally {
|
|
125
|
+
// Restore the runner's base title so a lingering/idle runner (or a reused
|
|
126
|
+
// one) doesn't misreport a finished job as still running.
|
|
127
|
+
process.title = previousTitle
|
|
105
128
|
if (closeConnections) {
|
|
106
129
|
try {
|
|
107
130
|
await configuration.disconnectBeacon()
|
|
@@ -22,6 +22,18 @@ export default class VelociousJob {
|
|
|
22
22
|
*/
|
|
23
23
|
static queue = undefined
|
|
24
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Optional process title shown for the runner while this job executes.
|
|
27
|
+
* Velocious sets `process.title` to this for the duration of the job — so
|
|
28
|
+
* `ps`/`top`/`htop` identify what a runner is doing — and restores the
|
|
29
|
+
* runner's base title when the job finishes. Left undefined, the runner falls
|
|
30
|
+
* back to `velocious job-runner: <JobName>`. Set e.g.
|
|
31
|
+
* `static processTitle = "velocious media transcoder"` to give a job a
|
|
32
|
+
* custom, human-readable title.
|
|
33
|
+
* @type {string | undefined}
|
|
34
|
+
*/
|
|
35
|
+
static processTitle = undefined
|
|
36
|
+
|
|
25
37
|
/**
|
|
26
38
|
* Runs job name.
|
|
27
39
|
* @returns {string} - Job name.
|
|
@@ -422,11 +422,47 @@ export default class BackgroundJobsMain {
|
|
|
422
422
|
jsonSocket.lastSeenAt = Date.now()
|
|
423
423
|
this.workers.add(jsonSocket)
|
|
424
424
|
this.workerHandoffs.set(jsonSocket, new Map())
|
|
425
|
+
void this._adoptWorkerHandoffs(jsonSocket)
|
|
425
426
|
}
|
|
426
427
|
|
|
427
428
|
return message.role
|
|
428
429
|
}
|
|
429
430
|
|
|
431
|
+
/**
|
|
432
|
+
* Adopts a reconnecting worker's still-active `handed_off` jobs into its new
|
|
433
|
+
* socket's handoff map. A fresh main (e.g. after a deploy restart) holds no
|
|
434
|
+
* in-memory leases, so a worker that reconnects with its stable id would
|
|
435
|
+
* otherwise have its pre-restart jobs tracked nowhere — if it then died, those
|
|
436
|
+
* leases (and their concurrency reservations) would sit stuck until the
|
|
437
|
+
* hours-long orphan sweep. Adopting them means `_handleWorkerSocketClosed`
|
|
438
|
+
* releases them on the worker's next disconnect, while a still-running worker
|
|
439
|
+
* (including one gracefully draining) keeps executing them untouched. No
|
|
440
|
+
* time-based reclaim is used, so a draining worker whose jobs outlive the old
|
|
441
|
+
* main is never wrongly requeued into a duplicate attempt.
|
|
442
|
+
* @param {JsonSocket} jsonSocket - The reconnected worker socket.
|
|
443
|
+
* @returns {Promise<void>}
|
|
444
|
+
*/
|
|
445
|
+
async _adoptWorkerHandoffs(jsonSocket) {
|
|
446
|
+
const workerId = jsonSocket.workerId
|
|
447
|
+
|
|
448
|
+
if (typeof workerId !== "string" || workerId.length === 0) return
|
|
449
|
+
|
|
450
|
+
try {
|
|
451
|
+
const handoffs = await this.store.handedOffJobsForWorker({workerId})
|
|
452
|
+
const map = this.workerHandoffs.get(jsonSocket)
|
|
453
|
+
|
|
454
|
+
// The socket may have closed while the query was in flight; its map is then
|
|
455
|
+
// gone and the jobs are left for the orphan sweep rather than resurrected.
|
|
456
|
+
if (!map || !this.workers.has(jsonSocket)) return
|
|
457
|
+
|
|
458
|
+
for (const {jobId, handoffId} of handoffs) {
|
|
459
|
+
map.set(jobId, handoffId)
|
|
460
|
+
}
|
|
461
|
+
} catch (error) {
|
|
462
|
+
this._reportHandoffAdoptError(error)
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
|
|
430
466
|
/**
|
|
431
467
|
* Runs handle client socket message.
|
|
432
468
|
* @param {object} args - Options.
|
|
@@ -611,6 +647,23 @@ export default class BackgroundJobsMain {
|
|
|
611
647
|
errorEvents.emit("all-error", {...payload, errorType: "framework-error"})
|
|
612
648
|
}
|
|
613
649
|
|
|
650
|
+
/**
|
|
651
|
+
* Reports an unexpected worker-handoff adoption failure on framework error
|
|
652
|
+
* channels. A failed adoption is not fatal (the worker's jobs remain and are
|
|
653
|
+
* reclaimed by the orphan sweep), but must surface rather than be swallowed.
|
|
654
|
+
* @param {?} error - Adoption failure.
|
|
655
|
+
* @returns {void}
|
|
656
|
+
*/
|
|
657
|
+
_reportHandoffAdoptError(error) {
|
|
658
|
+
const normalizedError = error instanceof Error ? error : new Error(String(error))
|
|
659
|
+
const payload = {context: {stage: "background-job-handoff-adopt"}, error: normalizedError}
|
|
660
|
+
const errorEvents = this.configuration.getErrorEvents()
|
|
661
|
+
|
|
662
|
+
this.logger.error(() => ["Failed to adopt reconnected worker handoffs:", normalizedError])
|
|
663
|
+
errorEvents.emit("framework-error", payload)
|
|
664
|
+
errorEvents.emit("all-error", {...payload, errorType: "framework-error"})
|
|
665
|
+
}
|
|
666
|
+
|
|
614
667
|
/**
|
|
615
668
|
* Runs handle enqueue.
|
|
616
669
|
* @param {object} args - Options.
|
|
@@ -487,6 +487,38 @@ export default class BackgroundJobsStore {
|
|
|
487
487
|
}))
|
|
488
488
|
}
|
|
489
489
|
|
|
490
|
+
/**
|
|
491
|
+
* Returns the active `handed_off` jobs (jobId + handoffId) held under a worker
|
|
492
|
+
* id. Used on worker reconnect: after a main restart a worker reconnects with
|
|
493
|
+
* its stable id, and the fresh main adopts these leases so they are tracked —
|
|
494
|
+
* and released if the reconnected worker later disconnects — instead of
|
|
495
|
+
* sitting stuck until the age-based orphan sweep. This never reclaims, so a
|
|
496
|
+
* gracefully-draining worker that keeps running its in-flight jobs is left
|
|
497
|
+
* untouched. Rows with a null handoff id (legacy) are skipped; the orphan
|
|
498
|
+
* sweep reclaims those via its `handed_off_at_ms` fence.
|
|
499
|
+
* @param {object} args - Options.
|
|
500
|
+
* @param {string} args.workerId - Worker id.
|
|
501
|
+
* @returns {Promise<Array<{jobId: string, handoffId: string}>>} - Active handoffs.
|
|
502
|
+
*/
|
|
503
|
+
async handedOffJobsForWorker({workerId}) {
|
|
504
|
+
await this.ensureReady()
|
|
505
|
+
|
|
506
|
+
const rows = await this._withDb(async (db) =>
|
|
507
|
+
await db.newQuery().from(JOBS_TABLE).where({status: "handed_off", worker_id: workerId}).results()
|
|
508
|
+
)
|
|
509
|
+
|
|
510
|
+
/** @type {Array<{jobId: string, handoffId: string}>} */
|
|
511
|
+
const handoffs = []
|
|
512
|
+
|
|
513
|
+
for (const row of rows) {
|
|
514
|
+
const job = this._normalizeJobRow(row)
|
|
515
|
+
|
|
516
|
+
if (job.handoffId) handoffs.push({jobId: job.id, handoffId: job.handoffId})
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
return handoffs
|
|
520
|
+
}
|
|
521
|
+
|
|
490
522
|
/**
|
|
491
523
|
* Runs mark failed.
|
|
492
524
|
* @param {object} args - Options.
|
|
@@ -3,6 +3,9 @@ import BackgroundJobsMain from "../../../../background-jobs/main.js"
|
|
|
3
3
|
|
|
4
4
|
export default class BackgroundJobsMainCommand extends BaseCommand {
|
|
5
5
|
async execute() {
|
|
6
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
7
|
+
process.title = "velocious background-jobs-main"
|
|
8
|
+
|
|
6
9
|
const main = new BackgroundJobsMain({configuration: this.getConfiguration()})
|
|
7
10
|
await main.start()
|
|
8
11
|
|
|
@@ -16,6 +16,10 @@ export default class BackgroundJobsRunnerCommand extends BaseCommand {
|
|
|
16
16
|
process.once(signal, () => process.exit(0))
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
// Base title; runJobPayload sets the per-job title (from the job class's
|
|
20
|
+
// `static processTitle`) for the duration of the job and restores this after.
|
|
21
|
+
process.title = "velocious background-jobs-runner"
|
|
22
|
+
|
|
19
23
|
const decoded = Buffer.from(payload, "base64").toString("utf8")
|
|
20
24
|
const jobPayload = JSON.parse(decoded)
|
|
21
25
|
|
|
@@ -27,6 +27,9 @@ function resolveShutdownTimeoutMs() {
|
|
|
27
27
|
|
|
28
28
|
export default class BackgroundJobsWorkerCommand extends BaseCommand {
|
|
29
29
|
async execute() {
|
|
30
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
31
|
+
process.title = "velocious background-jobs-worker"
|
|
32
|
+
|
|
30
33
|
const worker = new BackgroundJobsWorker({configuration: this.getConfiguration()})
|
|
31
34
|
await worker.start()
|
|
32
35
|
|
|
@@ -3,6 +3,9 @@ import BeaconServer from "../../../../beacon/server.js"
|
|
|
3
3
|
|
|
4
4
|
export default class BeaconCommand extends BaseCommand {
|
|
5
5
|
async execute() {
|
|
6
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
7
|
+
process.title = "velocious beacon"
|
|
8
|
+
|
|
6
9
|
const beacon = new BeaconServer({configuration: this.getConfiguration()})
|
|
7
10
|
await beacon.start()
|
|
8
11
|
|
|
@@ -133,6 +133,9 @@ export default class VelociousCliCommandsServer extends BaseCommand{
|
|
|
133
133
|
* @returns {Promise<void>} - Starts the HTTP server and waits until it stops.
|
|
134
134
|
*/
|
|
135
135
|
async execute() {
|
|
136
|
+
// Identify this process in `ps`/`top` instead of a generic "node" entry.
|
|
137
|
+
process.title = "velocious server"
|
|
138
|
+
|
|
136
139
|
const parsedProcessArgs = this.args?.parsedProcessArgs || {}
|
|
137
140
|
const configuration = this.getConfiguration()
|
|
138
141
|
const httpServer = httpServerConfigFromParsedArgs(parsedProcessArgs, configuration.httpServer)
|