import fastify from "fastify"; import fastifyStatic from "@fastify/static"; import { fileURLToPath } from "url"; import path from "path"; import cookieParser from "@fastify/cookie"; import { createServer } from "http"; import { createBareServer } from "@tomphttp/bare-server-node"; import createRammerhead from "rammerhead/src/server/index.js"; import wisp from "wisp-server-node"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const bare = createBareServer("/bare/"); const rh = createRammerhead(); import chalk from "chalk"; import masqr from "./masqr.js"; const rammerheadScopes = [ "/rammerhead.js", "/hammerhead.js", "/transport-worker.js", "/task.js", "/iframe-task.js", "/worker-hammerhead.js", "/messaging", "/sessionexists", "/deletesession", "/newsession", "/editsession", "/needpassword", "/syncLocalStorage", "/api/shuffleDict", "/mainport" ]; const rammerheadSession = /^\/[a-z0-9]{32}/; function shouldRouteRh(req) { const url = new URL(req.url, "http://0.0.0.0"); return ( rammerheadScopes.includes(url.pathname) || rammerheadSession.test(url.pathname) ); } function routeRhRequest(req, res) { rh.emit("request", req, res); } function routeRhUpgrade(req, socket, head) { rh.emit("upgrade", req, socket, head); } const serverFactory = (handler, opts) => { return createServer() .on("request", (req, res) => { if (bare.shouldRoute(req)) { bare.routeRequest(req, res); } else if (shouldRouteRh(req)) { routeRhRequest(req, res); } else { handler(req, res); } }) .on("upgrade", (req, socket, head) => { if (bare.shouldRoute(req)) { bare.routeUpgrade(req, socket, head); } else if (shouldRouteRh(req)) { routeRhUpgrade(req, socket, head); } else if (req.url.endsWith("/wisp/")) { wisp.routeRequest(req, socket as Socket, head); } }); }; const app = fastify({ logger: false, serverFactory }); app.register(cookieParser); await app.register(import("@fastify/compress")); //Uncomment the following line to enable masqr //app.register(masqr); app.register(fastifyStatic, { root: path.join(__dirname, "dist"), prefix: "/", serve: true, wildcard: false }); app.get("/search=:query", async (req, res) => { const { query } = req.params as { query: string }; // Define the type for req.params const response = await fetch( `http://api.duckduckgo.com/ac?q=${query}&format=json` ).then((apiRes) => apiRes.json()); res.send(response); }); app.setNotFoundHandler((req, res) => { res.sendFile("index.html"); // SPA catch-all }); console.log( chalk.green(`Server listening on ${chalk.bold("http://localhost:8080")}`) ); console.log( chalk.magenta(`Server also listening on ${chalk.bold("http://0.0.0.0:8080")}`) ); app.listen({ port: 8080, host: "0.0.0.0" }); { "singleQuote": false, "endOfLine": "crlf", "tabWidth": 2, "useTabs": false, "trailingComma": "none", "plugins": ["prettier-plugin-tailwindcss"] } Welcome to nginx!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required. If you are expecting another page, please check your network or Refresh this page

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.