1
0
silverbullet/plugos/bin/plugos-server.ts

63 lines
1.8 KiB
TypeScript
Raw Normal View History

2022-03-27 07:55:29 +00:00
#!/usr/bin/env node
import express from "express";
import yargs from "yargs";
import {hideBin} from "yargs/helpers";
import {DiskPlugLoader} from "../plug_loader";
import {CronHookT, NodeCronHook} from "../hooks/node_cron";
import shellSyscalls from "../syscalls/shell.node";
import {System} from "../system";
import {EndpointHook, EndpointHookT} from "../hooks/endpoint";
import {safeRun} from "../util";
2022-03-27 07:55:29 +00:00
import knex from "knex";
import {ensureTable, storeSyscalls} from "../syscalls/store.knex_node";
import {fetchSyscalls} from "../syscalls/fetch.node";
import {EventHook, EventHookT} from "../hooks/event";
import {eventSyscalls} from "../syscalls/event";
2022-03-27 07:55:29 +00:00
let args = yargs(hideBin(process.argv))
.option("port", {
type: "number",
default: 1337,
})
.parse();
2022-03-27 07:55:29 +00:00
if (!args._.length) {
2022-03-30 13:16:22 +00:00
console.error("Usage: plugos-server <path-to-plugs>");
2022-03-27 07:55:29 +00:00
process.exit(1);
}
const plugPath = args._[0] as string;
const app = express();
type ServerHook = EndpointHookT & CronHookT & EventHookT;
2022-03-27 07:55:29 +00:00
const system = new System<ServerHook>("server");
safeRun(async () => {
const db = knex({
client: "better-sqlite3",
connection: {
2022-03-27 09:31:12 +00:00
filename: "plugos.db",
2022-03-27 07:55:29 +00:00
},
useNullAsDefault: true,
});
await ensureTable(db, "item");
let plugLoader = new DiskPlugLoader(system, plugPath);
await plugLoader.loadPlugs();
plugLoader.watcher();
system.addHook(new NodeCronHook());
let eventHook = new EventHook();
system.addHook(eventHook);
system.registerSyscalls([], eventSyscalls(eventHook));
system.addHook(new EndpointHook(app, ""));
system.registerSyscalls([], shellSyscalls("."));
system.registerSyscalls([], fetchSyscalls());
system.registerSyscalls([], storeSyscalls(db, "item"));
2022-03-27 07:55:29 +00:00
app.listen(args.port, () => {
console.log(`Plugbox server listening on port ${args.port}`);
});
});