import express from "express"; import { Readability, isProbablyReaderable } from "@mozilla/readability"; import { JSDOM } from "jsdom"; import got from "got"; import path from "path"; import { fileURLToPath } from "url"; import fetch from 'node-fetch' import "dotenv/config"; const app = express(); const port = 8888; // @ts-ignore const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); app.get("/", async (req, res) => { const searchEngine = "https://api.search.brave.com/res/v1/web/search"; let query = req.query.q as string; if (!query) { res.sendFile(path.join(__dirname + "/dist/index.html")); return } const key = process.env.CYCLIC_BRAVE_KEY if (!key) { throw new Error("No brave key found"); } fetch(`${searchEngine}?q=${query}`, { headers: { "Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "X-Subscription-Token": key, }, }) .then((page) => { page.json().then(response => { const results: any[] = [] // @ts-ignore response.web.results.forEach(result => { results.push(` <div> <h2>${result.title}</h2> <span>${result.meta_url.hostname}</span> <a href="https://blaze.cyclic.app/blazed?url=${result.url}"> <p>${result.description}</p> </a> </div> <hr /> `); }) res.send(`<html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Blaze The Page</title> <style> h2 {margin-bottom:0} span {font-size: .9rem} </style> </head> <body> ${results.join("")} </body> </html>`); }) }) .catch((err) => { console.log(err); }); }); app.get("/blazed", (req, res) => { const pageToBlaze = req.query.url as string got(pageToBlaze) .then((response) => { const dom = new JSDOM(response.body); if (!isProbablyReaderable(dom.window.document)) { res.send("This page can not be blazed... Sorry!") return; } let reader = new Readability(dom.window.document); let article = reader.parse(); if (!article) { res.send("Something went wrong"); return; } res.send(article.content); }) .catch((err) => { console.log(err); }); }) app.get("/info", (_, res) => { res.sendFile(path.join(__dirname + "/dist/info.html")); }) app.listen(port, () => { console.log(`Got request`); });