Upgrade to astro 5, for some reason epoxy is broken now?

This commit is contained in:
wearrrrr 2024-12-03 14:55:03 -06:00
parent cef106b512
commit 58e7cb118e
12 changed files with 2427 additions and 2854 deletions

View file

@ -1,7 +1,7 @@
import { defineConfig } from "astro/config"; import { defineConfig } from "astro/config";
import node from "@astrojs/node"; import node from "@astrojs/node";
import sitemap from "@inox-tools/sitemap-ext";
import dotenv from "dotenv-flow"; import dotenv from "dotenv-flow";
import sitemap from '@astrojs/sitemap';
dotenv.config(); dotenv.config();
// Check if node is running in production mode // Check if node is running in production mode
@ -14,7 +14,6 @@ export default defineConfig({
site: site, site: site,
integrations: [ integrations: [
sitemap({ sitemap({
includeByDefault: true,
lastmod: new Date(), lastmod: new Date(),
}), }),
], ],

Binary file not shown.

View file

@ -8,10 +8,8 @@ import { baremuxPath } from "@mercuryworkshop/bare-mux/node";
import express from "express"; import express from "express";
import { createServer } from "http"; import { createServer } from "http";
import path from "node:path"; import path from "node:path";
import rammerhead from "@rubynetwork/rammerhead";
import chalk from "chalk"; import chalk from "chalk";
import { server as wisp, logging } from "@mercuryworkshop/wisp-js/server"; import { server as wisp, logging as wispLogging } from "@mercuryworkshop/wisp-js/server";
import router from "./middleware/ProxyExt/index.js";
import { handler as astroSSR } from "./dist/server/entry.mjs"; import { handler as astroSSR } from "./dist/server/entry.mjs";
import cookies from "cookie-parser"; import cookies from "cookie-parser";
import { existsSync, readFileSync } from "fs"; import { existsSync, readFileSync } from "fs";
@ -30,19 +28,12 @@ if (existsSync("exempt_masqr.txt")) {
const LICENSE_SERVER_URL = "https://license.mercurywork.shop/validate?license="; const LICENSE_SERVER_URL = "https://license.mercurywork.shop/validate?license=";
const MASQR_ENABLED = process.env.MASQR_ENABLED; const MASQR_ENABLED = process.env.MASQR_ENABLED;
logging.set_level(logging.WARN); wispLogging.set_level(wispLogging.WARN);
const log = (message) => console.log(chalk.gray.bold("[Alu] " + message)); const log = (message) => console.log(chalk.gray.bold("[Alu] " + message));
const success = (message) => console.log(chalk.green.bold("[Alu] " + message)); const success = (message) => console.log(chalk.green.bold("[Alu] " + message));
const PORT = process.env.PORT; const PORT = process.env.PORT;
log("Starting Rammerhead...");
const rh = rammerhead.createRammerhead({
logLevel: "info",
reverseProxy: false,
disableLocalStorageSync: false,
disableHttp2: false,
});
const app = express(); const app = express();
app.use(cookies()); app.use(cookies());
@ -56,9 +47,6 @@ if (MASQR_ENABLED == "true") {
app.use(astroSSR); app.use(astroSSR);
log("Starting Marketplace Provider...");
app.use(router);
app.use(express.static(path.join(process.cwd(), "static"))); app.use(express.static(path.join(process.cwd(), "static")));
app.use(express.static(path.join(process.cwd(), "build"))); app.use(express.static(path.join(process.cwd(), "build")));
app.use("/uv/", express.static(uvPath)); app.use("/uv/", express.static(uvPath));
@ -131,17 +119,11 @@ app.get("*", (req, res) => {
const server = createServer(); const server = createServer();
server.on("request", (req, res) => { server.on("request", (req, res) => {
if (rammerhead.shouldRouteRh(req)) { app(req, res);
rammerhead.routeRhRequest(rh, req, res);
} else {
app(req, res);
}
}); });
server.on("upgrade", (req, socket, head) => { server.on("upgrade", (req, socket, head) => {
if (rammerhead.shouldRouteRh(req)) { if (req.url.endsWith("/wisp/")) {
rammerhead.routeRhUpgrade(rh, req, socket, head);
} else if (req.url.endsWith("/wisp/")) {
wisp.routeRequest(req, socket, head); wisp.routeRequest(req, socket, head);
} else { } else {
socket.end(); socket.end();

View file

@ -1,79 +0,0 @@
import b from "express";
import { DataTypes as t, Sequelize as k } from "sequelize";
var A = new k("database", "user", "password", { host: "localhost", dialect: "sqlite", logging: !1, storage: "database.sqlite" }),
n = A.define("catalog_assets", {
package_name: { type: t.TEXT, unique: !0 },
title: { type: t.TEXT },
description: { type: t.TEXT },
author: { type: t.TEXT },
image: { type: t.TEXT },
tags: { type: t.JSON, allowNull: !0 },
version: { type: t.TEXT },
background_image: { type: t.TEXT, allowNull: !0 },
background_video: { type: t.TEXT, allowNull: !0 },
payload: { type: t.TEXT },
type: { type: t.TEXT },
});
n.sync();
async function c(p, s) {
try {
let a = p.query,
o = parseInt(a.page) || 1,
r = parseInt(a.amount) || 20,
u = await n.count(),
m = Math.ceil(u / r),
d = o < m;
if (o < 1) {
s.status(400).json({ error: "Invalid page number!" });
return;
}
if (parseInt(a.amount) < 10) {
s.status(400).json({ error: "Amount must be at least 10!" });
return;
}
let y = (o - 1) * r,
f = (await n.findAll({ offset: y, limit: 20 })).map((e) => e.get()),
T = {
assets: Object.fromEntries(
f.map((e) => [
e.package_name,
{
title: e.title,
description: e.description,
author: e.author,
image: e.image,
tags: e.tags,
version: e.version,
background_image: e.background_image,
background_video: e.background_video,
payload: e.payload,
type: e.type,
},
])
),
page: o.toString(),
nextPage: d,
amount: u,
};
s.send(T);
} catch (a) {
s.status(500).json({ error: a });
}
}
async function l(p, s) {
try {
let a = p.params.package,
o = await n.findOne({ where: { package_name: a } });
if (!o) return s.status(404).json({ error: "Package not found" });
let r = o.toJSON();
return delete r.id, delete r.createdAt, delete r.updatedAt, s.send(r);
} catch (a) {
return s.status(500).json({ error: a });
}
}
var i = { getCatalogAssets: c, getPackage: l };
var g = b.Router();
g.get("/api/catalog_assets", i.getCatalogAssets);
g.get("/api/packages/:package", i.getPackage);
var N = g;
export { N as default };

View file

@ -1,5 +1,5 @@
{ {
"name": "alus-unblocker", "name": "alu",
"type": "module", "type": "module",
"version": "0.0.1", "version": "0.0.1",
"scripts": { "scripts": {
@ -13,18 +13,18 @@
"lint:fix": "eslint --fix ." "lint:fix": "eslint --fix ."
}, },
"dependencies": { "dependencies": {
"@astrojs/node": "^8.3.4", "@astrojs/node": "^9.0.0",
"@inox-tools/sitemap-ext": "^0.3.5", "@astrojs/sitemap": "^3.2.1",
"@mercuryworkshop/bare-as-module3": "^2.2.5", "@mercuryworkshop/bare-as-module3": "^2.2.5",
"@mercuryworkshop/bare-mux": "^2.1.6", "@mercuryworkshop/bare-mux": "^2.1.5",
"@mercuryworkshop/epoxy-transport": "^2.1.13", "@mercuryworkshop/epoxy-transport": "^2.1.12",
"@mercuryworkshop/libcurl-transport": "^1.3.12", "@mercuryworkshop/libcurl-transport": "^1.3.14",
"@mercuryworkshop/wisp-js": "^0.3.3", "@mercuryworkshop/wisp-js": "^0.3.3",
"@rubynetwork/rammerhead": "^1.3.5", "@rubynetwork/rammerhead": "^1.3.5",
"@titaniumnetwork-dev/ultraviolet": "^3.2.10", "@titaniumnetwork-dev/ultraviolet": "^3.2.10",
"@tomphttp/bare-server-node": "^2.0.4", "@tomphttp/bare-server-node": "^2.0.5",
"@types/node": "^20.17.1", "@types/node": "^22.10.1",
"astro": "^4.16.7", "astro": "^5.0.1",
"chalk": "^5.3.0", "chalk": "^5.3.0",
"cookie-parser": "^1.4.7", "cookie-parser": "^1.4.7",
"dotenv-flow": "^4.1.0", "dotenv-flow": "^4.1.0",
@ -34,12 +34,12 @@
"sqlite3": "^5.1.7" "sqlite3": "^5.1.7"
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/eslint-plugin": "^8.17.0",
"@typescript-eslint/parser": "^7.18.0", "@typescript-eslint/parser": "^8.17.0",
"eslint": "^8.57.1", "eslint": "^9.16.0",
"eslint-plugin-astro": "^0.31.4", "eslint-plugin-astro": "^1.3.1",
"prettier": "3.2.5", "prettier": "3.4.1",
"prettier-plugin-astro": "^0.13.0" "prettier-plugin-astro": "^0.14.1"
}, },
"optionalDependencies": { "optionalDependencies": {
"bufferutil": "^4.0.8" "bufferutil": "^4.0.8"

4986
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -11,42 +11,52 @@ function loadExtensionScripts() {
try { try {
let db = indexedDB.open("AluDB", 1); let db = indexedDB.open("AluDB", 1);
db.onsuccess = () => { db.onsuccess = () => {
let transaction = db.result.transaction("InstalledExtensions", "readonly"); try {
let store = transaction.objectStore("InstalledExtensions"); let transaction = db.result.transaction("InstalledExtensions", "readonly");
let request = store.getAll(); let store = transaction.objectStore("InstalledExtensions");
request.onsuccess = () => { let request = store.getAll();
let extensions = request.result.filter((extension) => extension.type == "serviceWorker"); request.onsuccess = () => {
extensions.forEach((extension) => { let extensions = request.result.filter((extension) => extension.type == "serviceWorker");
const decoder = new TextDecoder(); extensions.forEach((extension) => {
const contents = decoder.decode(extension.scriptCopy); const decoder = new TextDecoder();
const contents = decoder.decode(extension.scriptCopy);
eval(contents);
const func = self[extension.entryNamespace][extension.entryFunc]; eval(contents);
switch (extension.type) { const func = self[extension.entryNamespace][extension.entryFunc];
case "serviceWorker": switch (extension.type) {
// Loads the function to be added as a middleware into global scope. case "serviceWorker":
// Loads the function to be added as a middleware into global scope.
ww.use({
function: self[extension.entryNamespace][extension.entryFunc],
name: extension.title,
events: ["fetch"],
});
break;
case "page":
console.log("Calling " + extension.entryFunc);
func();
break;
ww.use({ }
function: self[extension.entryNamespace][extension.entryFunc], });
name: extension.title, };
events: ["fetch"], } catch {
}); console.error("Failed to open IndexedDB");
break; }
case "page":
console.log("Calling " + extension.entryFunc);
func();
break;
}
});
};
}; };
} catch (err) { } catch (err) {
console.error(`Failed load extension scripts: ${err}`); console.error(`Failed load extension scripts: ${err}`);
} }
} }
loadExtensionScripts();
try {
loadExtensionScripts();
} catch (err) {
console.error(`Failed to load extension scripts: ${err}`);
}
self.addEventListener("fetch", async (event) => { self.addEventListener("fetch", async (event) => {
event.respondWith( event.respondWith(

View file

@ -2,7 +2,15 @@
import IDBManager from "@components/ts/IDBManager"; import IDBManager from "@components/ts/IDBManager";
const idb = IDBManager.loadIDB("AluDB", 1); const idb = IDBManager.loadIDB("AluDB", 1);
idb.onsuccess = () => { idb.onupgradeneeded = (event) => {
const db = (event.target as IDBOpenDBRequest).result;
db.createObjectStore("InstalledExtensions", { keyPath: "slug" });
};
// Create a store for installed extensions
idb.onsuccess = (event) => {
IDBManager.SetIDB((event.target as IDBOpenDBRequest).result);
IDBManager.GetStore("InstalledExtensions", "readonly").getAll().onsuccess = (event) => { IDBManager.GetStore("InstalledExtensions", "readonly").getAll().onsuccess = (event) => {
// TODO: Get rid of this ugly type assertion!! // TODO: Get rid of this ugly type assertion!!
const result = (event.target as IDBRequest).result; const result = (event.target as IDBRequest).result;

View file

@ -1,5 +1,8 @@
<script> <script>
import IDBManager from "@components/ts/IDBManager"; import IDBManager from "@components/ts/IDBManager";
import instantiateAlu from "@components/ts/Alu";
await instantiateAlu();
function switchTheme() { function switchTheme() {
const currentTheme = Alu.store.get("theme"); const currentTheme = Alu.store.get("theme");

View file

@ -1,15 +1,32 @@
import AluStore from "./AluStore"; import AluStore from "./AluStore";
import IDBManager from "./IDBManager";
function instantiateAlu() { async function instantiateAlu(): Promise<void> {
if (globalThis.Alu) return; return new Promise((resolve) => {
globalThis.Alu = { if (globalThis.Alu) return;
store: new AluStore(), globalThis.Alu = {
eventList: {}, store: new AluStore(),
settings: { eventList: {},
loadedContentStorage: {}, settings: {
currentTab: "", loadedContentStorage: {},
}, currentTab: "",
}; },
};
if (!window.idb) {
const db = IDBManager.loadIDB("AluDB", 1);
db.onupgradeneeded = () => {
window.idb = db.result;
IDBManager.SetIDB(window.idb);
IDBManager.CreateStore("InstalledExtensions", { keyPath: "slug" });
};
db.onsuccess = () => {
window.idb = db.result;
IDBManager.SetIDB(window.idb);
resolve();
};
}
});
} }
export default instantiateAlu; export default instantiateAlu;

View file

@ -1,4 +1,6 @@
--- ---
import { ViewTransitions } from "astro:transitions"; import { ViewTransitions } from "astro:transitions";
import Header from "@components/UI/Header.astro"; import Header from "@components/UI/Header.astro";
import Footer from "@components/UI/Footer.astro"; import Footer from "@components/UI/Footer.astro";
@ -44,7 +46,7 @@ const DESCRIPTION =
<link rel="sitemap" href="/sitemap-index.xml" /> <link rel="sitemap" href="/sitemap-index.xml" />
<SchemaData /> <SchemaData />
{ {
optionalStylesheets?.map((item) => { optionalStylesheets?.map((item: string) => {
return <link rel="stylesheet" class="style-load" href={item} />; return <link rel="stylesheet" class="style-load" href={item} />;
}) })
} }
@ -57,25 +59,6 @@ const DESCRIPTION =
gtag("js", new Date()); gtag("js", new Date());
gtag("config", "G-P1JX4G9KSF"); gtag("config", "G-P1JX4G9KSF");
</script> </script>
<script>
import instantiateAlu from "@components/ts/Alu";
import IDBManager from "@components/ts/IDBManager";
instantiateAlu();
if (!window.idb) {
const db = IDBManager.loadIDB("AluDB", 1);
db.onupgradeneeded = () => {
window.idb = db.result;
IDBManager.SetIDB(window.idb);
IDBManager.CreateStore("InstalledExtensions", { keyPath: "slug" });
};
db.onsuccess = () => {
window.idb = db.result;
IDBManager.SetIDB(window.idb);
};
}
</script>
<script src="@components/ts/AluStore.ts"></script> <script src="@components/ts/AluStore.ts"></script>
<meta name="generator" content={Astro.generator} /> <meta name="generator" content={Astro.generator} />
<title>{title}</title> <title>{title}</title>

View file

@ -3,22 +3,8 @@ export const prerender = false;
import Layout from "../../layouts/Layout.astro"; import Layout from "../../layouts/Layout.astro";
import games from "../../json/games.json"; import games from "../../json/games.json";
import sitemap from "sitemap-ext:config";
const gamesList = games as GameList; const gamesList = games as GameList;
sitemap(async ({ setSitemap }) => {
const gamesList = games as GameList;
setSitemap(
Object.keys(gamesList).map((game) => ({
sitemap: true,
params: {
game: game,
},
}))
);
});
// get the current game based on the information in the url // get the current game based on the information in the url
const game = Astro.params.game; const game = Astro.params.game;
if (!game) { if (!game) {