diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7d8e6ab --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "dotenv.enableAutocloaking": false +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index fe6779f..1ac24b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,5 +8,7 @@ ADD package.json package.json RUN bun install WORKDIR /home/bun/app +ENV PORT 8080 + # start server CMD bun run ./src/server.ts \ No newline at end of file diff --git a/package.json b/package.json index bd30c3b..3e575a3 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,9 @@ "devDependencies": { "@types/bun": "latest" }, + "scripts": { + "start": "bun run src/server.ts" + }, "peerDependencies": { "typescript": "^5.0.0" }, diff --git a/src/WebhookServer.ts b/src/WebhookServer.ts index 7c19c89..f44b3fa 100644 --- a/src/WebhookServer.ts +++ b/src/WebhookServer.ts @@ -13,6 +13,10 @@ export class WebhookServer { this.app.use(prettyJSON()); + this.websockets.forEach(ws => { + console.log(`SERVER: subscribed to ${ws.name} at /api/${ws.name}`); + }); + this.app.get(`/api/:wsName`, async (c) => { const wsName = c.req.param('wsName'); diff --git a/src/server.ts b/src/server.ts index ec758b8..44bc28f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,8 +1,31 @@ import { WebhookServer } from "./WebhookServer"; import { WebSocketLifecycle } from "./WebSocketLifeCycle"; -const socket = new WebSocketLifecycle("wss://ntfy.chromart.cc/buzzer/ws", "buzzer"); -socket.registerWebSocketHandler(); +const port: number = process.env.PORT ? parseInt(process.env.PORT): 8080; -const wsServer = new WebhookServer([socket]); -wsServer.listen(8080); \ No newline at end of file +const sockets: WebSocketLifecycle[] = []; + +// read all envs like SUB_= +Object.keys(process.env).forEach(e => { + if (!e.startsWith("SUB_")) { + return; + } + + const name = e.split("_")[1].toLowerCase(); + const url = process.env[e] as string; + + const socket = new WebSocketLifecycle(url, name); + socket.registerWebSocketHandler(); + + sockets.push(socket); +}); + +if (sockets.length === 0) { + console.warn("There is no sockets registered, exiting"); + console.warn("USAGE: Please configure urls with environment varibles"); + console.warn("\tSUB_="); +} else { + console.log(`listening on ${sockets.length} websockets`); + const wsServer = new WebhookServer(sockets); + wsServer.listen(port); +}