#!/usr/bin/env node 'use strict'; const config = require("./config.json"); const path = require("path"); const errorReporter = require("./src/error-reporting")(path.resolve(__dirname, config.errors.directory)); const express = require("express"); const expressWs = require("express-ws"); const clientStore = require("./src/client-store")(); const scraper = require("./src/scraper")({ scrapePastebinCom: true, scraperSettings: config.scraperSettings }); scraper.on("newPaste", (paste) => { clientStore.broadcast({ type: "newPaste", data: paste }); }); scraper.on("warning", (error) => { console.error(error); }); scraper.on("error", (error) => { errorReporter.report(error, { source: "scraper" }); }); clientStore.on("error", (error) => { errorReporter.report(error, { source: "clientStore" }); }); let app = express(); expressWs(app); app.set("views", path.join(__dirname, "views")); app.set("view engine", "pug"); app.use(express.static(path.join(__dirname, "public"))); app.get("/", (req, res) => { res.render("index"); }); app.ws("/stream", (ws, req) => { let client = clientStore.add(ws); client.on("message", (message) => { if (message.type === "backlog") { if (message.all === true) { client.send({ type: "backlog", results: scraper.pasteStore.all() }); } else if (typeof message.since === "number") { client.send({ type: "backlog", results: scraper.pasteStore.since(message.since) }); } else if (typeof message.last === "number") { client.send({ type: "backlog", results: scraper.pasteStore.last(message.last) }); } else { client.kill(); } } }) }); app.listen(3000, () => { console.log("Listening on port 3000..."); });