diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..11ae9ff --- /dev/null +++ b/index.mjs @@ -0,0 +1,48 @@ +import http from 'node:http'; +import { createBareServer } from '@tomphttp/bare-server-node'; +import express from 'express'; +import { hostname } from "node:os"; + +const httpServer = http.createServer(); + +const app = express(); + +app.use(express.static("src")); + +const bareServer = createBareServer('/y/'); + + + +httpServer.on('request', (req, res) => { + if (bareServer.shouldRoute(req)) { + bareServer.routeRequest(req, res); + } else { + app(req, res); + } +}); + +httpServer.on('upgrade', (req, socket, head) => { + if (bareServer.shouldRoute(req)) { + bareServer.routeUpgrade(req, socket, head); + } else { + socket.end(); + } +}); + +httpServer.on('listening', () => { + const address = httpServer.address(); + console.log("Listening on:"); + console.log(`\thttp://localhost:${address.port}`); + console.log(`\thttp://${hostname()}:${address.port}`); + console.log( + `\thttp://${ + address.family === "IPv6" ? `[${address.address}]` : address.address + }:${address.port}` + ); +}); + + + +httpServer.listen({ + port: 8080, +}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1064b40..efdd8a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "Xen", + "name": "xen", "lockfileVersion": 3, "requires": true, "packages": { @@ -10,6 +10,7 @@ "@nlux/core": "^0.12.1", "@nlux/openai": "^0.12.1", "@titaniumnetwork-dev/ultraviolet": "^3.0.0", + "@tomphttp/bare-server-node": "^2.0.3", "express": "^4.18.2", "flowbite": "^2.3.0", "wisp-server-node": "^1.0.2" @@ -730,6 +731,42 @@ "uuid": "^9.0.1" } }, + "node_modules/@tomphttp/bare-server-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tomphttp/bare-server-node/-/bare-server-node-2.0.3.tgz", + "integrity": "sha512-IGzZspDwzto+oPsvlV99OALJKH3X1nRWnpBE8EY6nrqu5I83xw3uSUacEdHNnW4rXG0IQ8vZwMH87VOMoArJ3A==", + "dependencies": { + "async-exit-hook": "^2.0.1", + "commander": "^10.0.1", + "dotenv": "^16.0.3", + "http-errors": "^2.0.0", + "ipaddr.js": "^2.1.0", + "source-map-support": "^0.5.21", + "ws": "^8.13.0" + }, + "bin": { + "bare-server-node": "bin.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@tomphttp/bare-server-node/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@tomphttp/bare-server-node/node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "engines": { + "node": ">= 10" + } + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -860,6 +897,14 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -927,6 +972,11 @@ "node": ">=8" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -1215,6 +1265,17 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2966,6 +3027,14 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -2974,6 +3043,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", diff --git a/package.json b/package.json index 07ac5b0..0d817b8 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@nlux/core": "^0.12.1", "@nlux/openai": "^0.12.1", "@titaniumnetwork-dev/ultraviolet": "^3.0.0", + "@tomphttp/bare-server-node": "^2.0.3", "express": "^4.18.2", "flowbite": "^2.3.0", "wisp-server-node": "^1.0.2" diff --git a/server.mjs b/server.mjs deleted file mode 100644 index 36e2e26..0000000 --- a/server.mjs +++ /dev/null @@ -1,68 +0,0 @@ -import express from "express"; -import { createServer } from "node:http"; -import { uvPath } from "@titaniumnetwork-dev/ultraviolet"; -import { epoxyPath } from "@mercuryworkshop/epoxy-transport"; -import { baremuxPath } from "@mercuryworkshop/bare-mux"; -import { join } from "node:path"; -import { hostname } from "node:os"; -import wisp from "wisp-server-node"; - -const app = express(); -// Load our publicPath first and prioritize it over UV. -app.use(express.static("./src/")); -// Load vendor files last. -// The vendor's uv.config.js won't conflict with our uv.config.js inside the publicPath directory. -app.use("/uv/", express.static(uvPath)); -app.use("/epoxy/", express.static(epoxyPath)); -app.use("/baremux/", express.static(baremuxPath)); - -// Error for everything else -app.use((req, res) => { - res.status(404); -}); - -const server = createServer(); - -server.on("request", (req, res) => { - res.setHeader("Cross-Origin-Opener-Policy", "same-origin"); - res.setHeader("Cross-Origin-Embedder-Policy", "require-corp"); - app(req, res); -}); - -server.on("upgrade", (req, socket, head) => { - if (req.url.endsWith("/wisp/")) wisp.routeRequest(req, socket, head); - else socket.end(); -}); - -let port = parseInt(process.env.PORT || ""); - -if (isNaN(port)) port = 8080; - -server.on("listening", () => { - const address = server.address(); - - // by default we are listening on 0.0.0.0 (every interface) - // we just need to list a few - console.log("Listening on:"); - console.log(`\thttp://localhost:${address.port}`); - console.log(`\thttp://${hostname()}:${address.port}`); - console.log( - `\thttp://${address.family === "IPv6" ? `[${address.address}]` : address.address}:${ - address.port - }` - ); -}); - -// https://expressjs.com/en/advanced/healthcheck-graceful-shutdown.html -process.on("SIGINT", shutdown); -process.on("SIGTERM", shutdown); - -function shutdown() { - console.log("SIGTERM signal received: closing HTTP server"); - server.close(); - process.exit(0); -} - -server.listen({ - port -}); diff --git a/src/frame.html b/src/frame.html index 24e3317..1ac92e1 100644 --- a/src/frame.html +++ b/src/frame.html @@ -18,8 +18,8 @@ - - + +