Add a mechanism for flash games to be loaded in the games page, and add a couple
This commit is contained in:
parent
0a4a32974f
commit
213c729a70
22 changed files with 2174 additions and 2060 deletions
|
|
@ -23,8 +23,8 @@ export default defineConfig({
|
||||||
vite: {
|
vite: {
|
||||||
server: {
|
server: {
|
||||||
watch: {
|
watch: {
|
||||||
usePolling: true
|
usePolling: true,
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
2
index.js
2
index.js
|
|
@ -16,7 +16,7 @@ import dotenv from "dotenv";
|
||||||
import cookieParser from "cookie-parser";
|
import cookieParser from "cookie-parser";
|
||||||
import wisp from "wisp-server-node";
|
import wisp from "wisp-server-node";
|
||||||
import { masqrCheck } from "./masqr.js";
|
import { masqrCheck } from "./masqr.js";
|
||||||
import { handler as ssrHandler } from './dist/server/entry.mjs';
|
import { handler as ssrHandler } from "./dist/server/entry.mjs";
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
|
|
|
||||||
176
package-lock.json
generated
176
package-lock.json
generated
|
|
@ -9,14 +9,14 @@
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/node": "^8.2.5",
|
"@astrojs/node": "^8.2.5",
|
||||||
"@astrojs/partytown": "^2.1.1",
|
|
||||||
"@astrojs/sitemap": "^3.1.4",
|
"@astrojs/sitemap": "^3.1.4",
|
||||||
"@mercuryworkshop/bare-as-module3": "^2.2.2",
|
"@mercuryworkshop/bare-as-module3": "^2.2.2",
|
||||||
"@mercuryworkshop/bare-mux": "^2.0.1",
|
"@mercuryworkshop/bare-mux": "^2.0.2",
|
||||||
"@mercuryworkshop/epoxy-transport": "^2.1.3",
|
"@mercuryworkshop/epoxy-transport": "^2.1.3",
|
||||||
"@mercuryworkshop/libcurl-transport": "^1.3.6",
|
"@mercuryworkshop/libcurl-transport": "^1.3.6",
|
||||||
"@titaniumnetwork-dev/ultraviolet": "^3.2.2",
|
"@titaniumnetwork-dev/ultraviolet": "^3.2.2",
|
||||||
"@tomphttp/bare-server-node": "^2.0.3",
|
"@tomphttp/bare-server-node": "^2.0.3",
|
||||||
|
"@types/node": "^20.14.10",
|
||||||
"astro": "^4.7.0",
|
"astro": "^4.7.0",
|
||||||
"chalk": "^5.3.0",
|
"chalk": "^5.3.0",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
|
|
@ -25,10 +25,10 @@
|
||||||
"express": "^4.19.2",
|
"express": "^4.19.2",
|
||||||
"notyf": "^3.10.0",
|
"notyf": "^3.10.0",
|
||||||
"rammerhead": "https://github.com/NebulaServices/rammerhead/releases/download/rammerhead-1.2.41-nebula.8/rammerhead-1.2.41-nebula.7.tgz",
|
"rammerhead": "https://github.com/NebulaServices/rammerhead/releases/download/rammerhead-1.2.41-nebula.8/rammerhead-1.2.41-nebula.7.tgz",
|
||||||
|
"urlpattern-polyfill": "^10.0.0",
|
||||||
"wisp-server-node": "^1.1.0"
|
"wisp-server-node": "^1.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/eslint-parser": "^7.24.1",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^7.8.0",
|
"@typescript-eslint/eslint-plugin": "^7.8.0",
|
||||||
"@typescript-eslint/parser": "^7.8.0",
|
"@typescript-eslint/parser": "^7.8.0",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
|
|
@ -111,16 +111,6 @@
|
||||||
"astro": "^4.2.0"
|
"astro": "^4.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@astrojs/partytown": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@astrojs/partytown/-/partytown-2.1.1.tgz",
|
|
||||||
"integrity": "sha512-KvecQuGGgrDrdTjC5awmtoQXqJFinChfeizKBJyr7F5EGQPx62xq8SIWkcXamLr5xZyNw0lryKeLtIzbxRH/zw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@builder.io/partytown": "^0.10.2",
|
|
||||||
"mrmime": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@astrojs/prism": {
|
"node_modules/@astrojs/prism": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz",
|
||||||
|
|
@ -222,43 +212,6 @@
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/eslint-parser": {
|
|
||||||
"version": "7.24.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz",
|
|
||||||
"integrity": "sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
|
|
||||||
"eslint-visitor-keys": "^2.1.0",
|
|
||||||
"semver": "^6.3.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^10.13.0 || ^12.13.0 || >=14.0.0"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@babel/core": "^7.11.0",
|
|
||||||
"eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
|
|
||||||
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@babel/eslint-parser/node_modules/semver": {
|
|
||||||
"version": "6.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
|
||||||
"dev": true,
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@babel/generator": {
|
"node_modules/@babel/generator": {
|
||||||
"version": "7.24.7",
|
"version": "7.24.7",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
|
||||||
|
|
@ -578,18 +531,6 @@
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@builder.io/partytown": {
|
|
||||||
"version": "0.10.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@builder.io/partytown/-/partytown-0.10.2.tgz",
|
|
||||||
"integrity": "sha512-A9U+4PREWcS+CCYzKGIPovtGB/PBgnH/8oQyCE6Nr9drDJk6cMPpLQIEajpGPmG9tYF7N3FkRvhXm/AS9+0iKg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"partytown": "bin/partytown.cjs"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@emnapi/runtime": {
|
"node_modules/@emnapi/runtime": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
|
||||||
|
|
@ -1608,9 +1549,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mercuryworkshop/bare-mux": {
|
"node_modules/@mercuryworkshop/bare-mux": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@mercuryworkshop/bare-mux/-/bare-mux-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@mercuryworkshop/bare-mux/-/bare-mux-2.0.2.tgz",
|
||||||
"integrity": "sha512-94YThllV9sWSb5hzIDg+U0JSNfFdkvOq6j5wwV1OON3izZhrKSsdDOkaywS5WP6HE/jm0/0ZYaYixbf8u3kjYg=="
|
"integrity": "sha512-1rnqFfI29VXi3jrMbkotHV+NnafJ3tpTIuH3Ov/BtVAfZMNGcsCRr3dwEKRWc+mDb0tWdNWC0PnZghgfAlbr+A=="
|
||||||
},
|
},
|
||||||
"node_modules/@mercuryworkshop/epoxy-tls": {
|
"node_modules/@mercuryworkshop/epoxy-tls": {
|
||||||
"version": "2.0.6-1",
|
"version": "2.0.6-1",
|
||||||
|
|
@ -1643,37 +1584,6 @@
|
||||||
"rollup-plugin-typescript2": "^0.36.0"
|
"rollup-plugin-typescript2": "^0.36.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
|
|
||||||
"version": "5.1.1-v1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
|
|
||||||
"integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"eslint-scope": "5.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": {
|
|
||||||
"version": "5.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
|
|
||||||
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"esrecurse": "^4.3.0",
|
|
||||||
"estraverse": "^4.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": {
|
|
||||||
"version": "4.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
|
|
||||||
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@nodelib/fs.scandir": {
|
"node_modules/@nodelib/fs.scandir": {
|
||||||
"version": "2.1.5",
|
"version": "2.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||||
|
|
@ -2125,9 +2035,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.11.16",
|
"version": "20.14.11",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz",
|
||||||
"integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==",
|
"integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~5.26.4"
|
"undici-types": "~5.26.4"
|
||||||
}
|
}
|
||||||
|
|
@ -3045,11 +2955,11 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/braces": {
|
"node_modules/braces": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
||||||
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
|
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fill-range": "^7.0.1"
|
"fill-range": "^7.1.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
|
|
@ -4574,9 +4484,9 @@
|
||||||
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
|
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
|
||||||
},
|
},
|
||||||
"node_modules/fill-range": {
|
"node_modules/fill-range": {
|
||||||
"version": "7.0.1",
|
"version": "7.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
||||||
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
|
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"to-regex-range": "^5.0.1"
|
"to-regex-range": "^5.0.1"
|
||||||
},
|
},
|
||||||
|
|
@ -5426,10 +5336,23 @@
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
||||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
|
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
|
||||||
},
|
},
|
||||||
"node_modules/ip": {
|
"node_modules/ip-address": {
|
||||||
"version": "2.0.0",
|
"version": "9.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
|
||||||
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
|
"integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"jsbn": "1.1.0",
|
||||||
|
"sprintf-js": "^1.1.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ip-address/node_modules/sprintf-js": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/ipaddr.js": {
|
"node_modules/ipaddr.js": {
|
||||||
|
|
@ -5654,6 +5577,12 @@
|
||||||
"js-yaml": "bin/js-yaml.js"
|
"js-yaml": "bin/js-yaml.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/jsbn": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"node_modules/jsesc": {
|
"node_modules/jsesc": {
|
||||||
"version": "2.5.2",
|
"version": "2.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
|
||||||
|
|
@ -8766,16 +8695,16 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/socks": {
|
"node_modules/socks": {
|
||||||
"version": "2.7.1",
|
"version": "2.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
|
||||||
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
|
"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ip": "^2.0.0",
|
"ip-address": "^9.0.5",
|
||||||
"smart-buffer": "^4.2.0"
|
"smart-buffer": "^4.2.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 10.13.0",
|
"node": ">= 10.0.0",
|
||||||
"npm": ">= 3.0.0"
|
"npm": ">= 3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -9063,9 +8992,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tar": {
|
"node_modules/tar": {
|
||||||
"version": "6.2.0",
|
"version": "6.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
|
||||||
"integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
|
"integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chownr": "^2.0.0",
|
"chownr": "^2.0.0",
|
||||||
"fs-minipass": "^2.0.0",
|
"fs-minipass": "^2.0.0",
|
||||||
|
|
@ -9658,6 +9587,11 @@
|
||||||
"integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
|
"integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
|
||||||
"deprecated": "Please see https://github.com/lydell/urix#deprecated"
|
"deprecated": "Please see https://github.com/lydell/urix#deprecated"
|
||||||
},
|
},
|
||||||
|
"node_modules/urlpattern-polyfill": {
|
||||||
|
"version": "10.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz",
|
||||||
|
"integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg=="
|
||||||
|
},
|
||||||
"node_modules/utf-8-validate": {
|
"node_modules/utf-8-validate": {
|
||||||
"version": "6.0.4",
|
"version": "6.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.4.tgz",
|
||||||
|
|
@ -10011,9 +9945,9 @@
|
||||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
|
||||||
},
|
},
|
||||||
"node_modules/ws": {
|
"node_modules/ws": {
|
||||||
"version": "8.16.0",
|
"version": "8.18.0",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
|
||||||
"integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
|
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
"@mercuryworkshop/bare-mux": "^2.0.2",
|
"@mercuryworkshop/bare-mux": "^2.0.2",
|
||||||
"@mercuryworkshop/epoxy-transport": "^2.1.3",
|
"@mercuryworkshop/epoxy-transport": "^2.1.3",
|
||||||
"@mercuryworkshop/libcurl-transport": "^1.3.6",
|
"@mercuryworkshop/libcurl-transport": "^1.3.6",
|
||||||
"@titaniumnetwork-dev/ultraviolet": "^3.2.2",
|
"@titaniumnetwork-dev/ultraviolet": "^3.2.5",
|
||||||
"@tomphttp/bare-server-node": "^2.0.3",
|
"@tomphttp/bare-server-node": "^2.0.3",
|
||||||
"@types/node": "^20.14.10",
|
"@types/node": "^20.14.10",
|
||||||
"astro": "^4.7.0",
|
"astro": "^4.7.0",
|
||||||
|
|
|
||||||
3725
pnpm-lock.yaml
generated
3725
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
26
public/flash/instantiateFlash.js
Normal file
26
public/flash/instantiateFlash.js
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
const id = window.location.pathname.split("/").pop();
|
||||||
|
id && RufflePlayer ? window.addEventListener("load", ()=>{
|
||||||
|
const e = RufflePlayer.newest().createPlayer();
|
||||||
|
e.config = {
|
||||||
|
preloader: !1,
|
||||||
|
splashScreen: !1,
|
||||||
|
unmuteOverlay: "hidden",
|
||||||
|
autoplay: "on",
|
||||||
|
contextMenu: !1,
|
||||||
|
showSwfDownload: !1
|
||||||
|
},
|
||||||
|
e.style.width = "100%",
|
||||||
|
e.style.height = "100%";
|
||||||
|
const a = document.querySelector("#gameContainer");
|
||||||
|
a == null || a.appendChild(e),
|
||||||
|
e.load(`/games/flash/${id}.swf`).then(()=>{
|
||||||
|
document.querySelector("#loader").classList.add("hidden"),
|
||||||
|
document.querySelector("#gameContainer").classList.remove("hidden")
|
||||||
|
}
|
||||||
|
).catch(o=>{
|
||||||
|
console.log(o)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
) : (document.querySelector("#loader").classList.add("hidden"),
|
||||||
|
document.querySelector("#error").classList.remove("hidden"));
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 2beae2ca136865d7a78ce42fea0f590c24371a1f
|
Subproject commit 98c48fe6bf57706348442ac5b963055fa0e3599f
|
||||||
1
public/marketplace/scriptInjector/index.js
Normal file
1
public/marketplace/scriptInjector/index.js
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
(()=>{async function i(e){let o=e.request.url,s=e.workerware.config;if(o.includes(self.__uv$config.prefix)){let r=self.__uv$config.decodeUrl(e.request.url.split(self.__uv$config.prefix)[1]);if(r==e.workerware.config.injectURL){console.log(`Injecting script into ${r}!`),console.log(s.injectURls);let n=(await e.uvResponse.text()).replace("</head>",`<script src="${s.injectURLs[0]}"><\/script><link rel="stylesheet" href="${s.injectURLs[1]}"></head>`);return new Response(n,{status:e.uvResponse.status,statusText:e.uvResponse.statusText,headers:e.uvResponse.headers})}return e.uvResponse}}self.scriptInjector={inject:i};})();
|
||||||
10
public/marketplace/vencord/vencord.js
Normal file
10
public/marketplace/vencord/vencord.js
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
// async function applyCSS() {
|
||||||
|
// let vencordCSS = await fetch("https://raw.githubusercontent.com/Vencord/builds/main/browser.css")
|
||||||
|
// let cssLink = document.createElement("style");
|
||||||
|
|
||||||
|
// cssLink.innerHTML = await vencordCSS.text();
|
||||||
|
// document.head.appendChild(cssLink)
|
||||||
|
// }
|
||||||
|
// applyCSS();
|
||||||
|
|
||||||
|
// document.head.appendChild(document.createElement("script")).src = "https://raw.githubusercontent.com/Vencord/builds/main/browser.js";
|
||||||
12
public/sw.js
12
public/sw.js
|
|
@ -2,9 +2,19 @@ importScripts("/uv/uv.bundle.js", "/uv.config.js", "/workerware/workerware.js");
|
||||||
importScripts( __uv$config.sw);
|
importScripts( __uv$config.sw);
|
||||||
|
|
||||||
const ww = new WorkerWare({
|
const ww = new WorkerWare({
|
||||||
debug: true,
|
debug: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
self.__uv$config.inject = [{
|
||||||
|
host: "discord.com",
|
||||||
|
html: `
|
||||||
|
<script src="https://raw.githubusercontent.com/Vencord/builds/main/browser.js"></script>
|
||||||
|
<link rel="stylesheet" href="https://raw.githubusercontent.com/Vencord/builds/main/browser.css">
|
||||||
|
`,
|
||||||
|
injectTo: "head",
|
||||||
|
}];
|
||||||
|
|
||||||
|
|
||||||
function loadExtensionScripts() {
|
function loadExtensionScripts() {
|
||||||
try {
|
try {
|
||||||
let db = indexedDB.open("AluDB", 1);
|
let db = indexedDB.open("AluDB", 1);
|
||||||
|
|
|
||||||
|
|
@ -73,9 +73,11 @@ class WorkerWare {
|
||||||
event.workerware = {
|
event.workerware = {
|
||||||
config: middlewares[i].configuration || {},
|
config: middlewares[i].configuration || {},
|
||||||
};
|
};
|
||||||
let res = await middlewares[i].function(event);
|
if (!middlewares[i].explicitCall) {
|
||||||
if (this._opt.timing) console.timeEnd(middlewares[i].name);
|
let res = await middlewares[i].function(event);
|
||||||
returnList.push(res);
|
if (this._opt.timing) console.timeEnd(middlewares[i].name);
|
||||||
|
returnList.push(res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return returnList;
|
return returnList;
|
||||||
|
|
@ -97,11 +99,29 @@ class WorkerWare {
|
||||||
Run a single middleware by ID.
|
Run a single middleware by ID.
|
||||||
This assumes that the user knows what they're doing, and is running the middleware on an event that it's supposed to run on.
|
This assumes that the user knows what they're doing, and is running the middleware on an event that it's supposed to run on.
|
||||||
*/
|
*/
|
||||||
runMW(id, event) {
|
runMW(name, event) {
|
||||||
const middlewares = this._middlewares;
|
const middlewares = this._middlewares;
|
||||||
if (this._opt.debug) dbg("Running middleware:", id);
|
if (this._opt.debug) dbg("Running middleware:", name);
|
||||||
if (middlewares.includes(id)) {
|
// if (middlewares.includes(name)) {
|
||||||
return middlewares[id](event);
|
// return middlewares[name](event);
|
||||||
|
// } else {
|
||||||
|
// throw new WWError("Middleware not found!");
|
||||||
|
// }
|
||||||
|
let didCall = false;
|
||||||
|
for (let i = 0; i < middlewares.length; i++) {
|
||||||
|
if (middlewares[i].name == name) {
|
||||||
|
didCall = true;
|
||||||
|
event.workerware = {
|
||||||
|
config: middlewares[i].configuration || {},
|
||||||
|
}
|
||||||
|
if (this._opt.timing) console.time(middlewares[i].name);
|
||||||
|
let call = middlewares[i].function(event);
|
||||||
|
if (this._opt.timing) console.timeEnd(middlewares[i].name);
|
||||||
|
return call;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!didCall) {
|
||||||
|
throw new WWError("Middleware not found!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// type middlewareManifest = {
|
// type middlewareManifest = {
|
||||||
|
|
@ -136,6 +156,11 @@ class WorkerWare {
|
||||||
return {
|
return {
|
||||||
error: "Invalid event type! Must be one of the following: " + validEvents.join(", "),
|
error: "Invalid event type! Must be one of the following: " + validEvents.join(", "),
|
||||||
};
|
};
|
||||||
|
if (middleware.explicitCall && typeof middleware.explicitCall !== "boolean") {
|
||||||
|
return {
|
||||||
|
error: "middleware.explicitCall must be typeof boolean",
|
||||||
|
};
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
error: undefined,
|
error: undefined,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
import { TransportMgr, initTransport } from "./ts/TransportManager";
|
import { TransportMgr, initTransport } from "./ts/TransportManager";
|
||||||
import "notyf/notyf.min.css";
|
import "notyf/notyf.min.css";
|
||||||
import { Notyf } from "notyf";
|
import { Notyf } from "notyf";
|
||||||
|
import { loadIDB, GetStore } from "./ts/IDBManager";
|
||||||
|
|
||||||
let form = document.querySelector("form");
|
let form = document.querySelector("form");
|
||||||
let input = document.querySelector("input");
|
let input = document.querySelector("input");
|
||||||
|
|
@ -51,8 +52,43 @@
|
||||||
return window.__uv$config.decodeUrl(frame.contentWindow!.location.href.split("/service/")[1]);
|
return window.__uv$config.decodeUrl(frame.contentWindow!.location.href.split("/service/")[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function loadPageExtensions() {
|
||||||
|
try {
|
||||||
|
let iframe = document.getElementById("proxy-frame") as HTMLIFrameElement;
|
||||||
|
let db = loadIDB("AluDB", 1);
|
||||||
|
db.onsuccess = () => {
|
||||||
|
let store = GetStore("InstalledExtensions", "readonly");
|
||||||
|
let request = store.getAll();
|
||||||
|
request.onsuccess = () => {
|
||||||
|
let extensions = request.result;
|
||||||
|
extensions.forEach((extension: IExtensionMetadata) => {
|
||||||
|
// Eval the extension script inside of the iframe
|
||||||
|
if (!(extension.type == "page")) return;
|
||||||
|
if (extension.pages && extension.pages.length > 0) {
|
||||||
|
// Check if the current URL matches the extension's URL
|
||||||
|
extension.pages.forEach((url) => {
|
||||||
|
console.log(url);
|
||||||
|
console.log(iframe.contentWindow!.__uv$location.host);
|
||||||
|
if (iframe.contentWindow!.__uv$location.host.includes(url)) {
|
||||||
|
let script = extension.script;
|
||||||
|
let scriptElement = document.createElement("script");
|
||||||
|
scriptElement.src = script;
|
||||||
|
scriptElement.type = "module";
|
||||||
|
iframe.contentDocument!.head.appendChild(scriptElement);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} catch (err) {
|
||||||
|
console.error(`Failed load extension scripts: ${err}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function loadContent() {
|
async function loadContent() {
|
||||||
await initTransport();
|
await initTransport();
|
||||||
|
await loadPageExtensions();
|
||||||
// The setTimeout is because service workers are a little silly and can take a while longer to register despite .then being called, which causes a bug on the first load.
|
// The setTimeout is because service workers are a little silly and can take a while longer to register despite .then being called, which causes a bug on the first load.
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
let openWith = localStorage.getItem("alu__selectedOpenWith");
|
let openWith = localStorage.getItem("alu__selectedOpenWith");
|
||||||
|
|
@ -122,30 +158,6 @@
|
||||||
iframe.classList.add("active");
|
iframe.classList.add("active");
|
||||||
}
|
}
|
||||||
|
|
||||||
// function loadExtensionScripts() {
|
|
||||||
// try {
|
|
||||||
// let db = indexedDB.open("AluDB", 1);
|
|
||||||
// db.onsuccess = () => {
|
|
||||||
// let transaction = db.result.transaction("InstalledExtensions", "readonly");
|
|
||||||
// let store = transaction.objectStore("InstalledExtensions");
|
|
||||||
// let request = store.getAll();
|
|
||||||
// request.onsuccess = () => {
|
|
||||||
// let extensions = request.result;
|
|
||||||
// extensions.forEach((extension: any) => {
|
|
||||||
// // Eval the extension script inside of the iframe
|
|
||||||
// if (extension.serviceWorkerExtension) return;
|
|
||||||
// if (iframe.contentWindow) {
|
|
||||||
// console.log(`Evaluating extension "${extension.title}" inside of the iframe.`);
|
|
||||||
// (iframe.contentWindow as any).eval(atob(extension.script));
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// };
|
|
||||||
// };
|
|
||||||
// } catch (err) {
|
|
||||||
// console.error(`Failed load extension scripts: ${err}`);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
function iframeLoad() {
|
function iframeLoad() {
|
||||||
loadingContent.style.opacity = "0";
|
loadingContent.style.opacity = "0";
|
||||||
iframe.style.opacity = "1";
|
iframe.style.opacity = "1";
|
||||||
|
|
@ -281,6 +293,7 @@
|
||||||
let UVURL = getUVProxyURL(iframe);
|
let UVURL = getUVProxyURL(iframe);
|
||||||
if (proxiedFavicon.src == `${window.location.origin}/custom-favicon?url=${UVURL}`) return;
|
if (proxiedFavicon.src == `${window.location.origin}/custom-favicon?url=${UVURL}`) return;
|
||||||
proxiedFavicon.src = `/custom-favicon?url=${UVURL}`;
|
proxiedFavicon.src = `/custom-favicon?url=${UVURL}`;
|
||||||
|
loadPageExtensions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,4 @@
|
||||||
import { BareMuxConnection } from "@mercuryworkshop/bare-mux";
|
import { BareMuxConnection } from "@mercuryworkshop/bare-mux";
|
||||||
declare global {
|
|
||||||
interface Window {
|
|
||||||
__uv$config: {
|
|
||||||
prefix: string;
|
|
||||||
encodeUrl: (url: string) => string;
|
|
||||||
decodeUrl: (url: string) => string;
|
|
||||||
};
|
|
||||||
loadFormContent: Function | null;
|
|
||||||
loadSelectedTransport: Function | null;
|
|
||||||
loadedThemeAtob: string;
|
|
||||||
idb: IDBDatabase;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type transportConfig =
|
type transportConfig =
|
||||||
| {
|
| {
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,11 @@ Array.from(installButtons).forEach((btn) => {
|
||||||
|
|
||||||
async function getMarketplaceObj(slug: string): Promise<IExtensionMetadata> {
|
async function getMarketplaceObj(slug: string): Promise<IExtensionMetadata> {
|
||||||
const manifest = extManifest[slug];
|
const manifest = extManifest[slug];
|
||||||
manifest.scriptCopy = btoa(await fetch(manifest.script).then((res) => res.text()));
|
if (manifest.type === "page") {
|
||||||
|
return manifest;
|
||||||
|
} else {
|
||||||
|
manifest.scriptCopy = btoa(await fetch(manifest.script).then((res) => res.text()));
|
||||||
|
}
|
||||||
return manifest;
|
return manifest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,12 @@
|
||||||
"image": "/games/2048/logo.png",
|
"image": "/games/2048/logo.png",
|
||||||
"slug": "2048"
|
"slug": "2048"
|
||||||
},
|
},
|
||||||
|
"achievement-unlocked": {
|
||||||
|
"name": "Achievement Unlocked",
|
||||||
|
"image": "/games/flash/img/achievement-unlocked.webp",
|
||||||
|
"slug": "achievement-unlocked",
|
||||||
|
"flash": true
|
||||||
|
},
|
||||||
"adofai": {
|
"adofai": {
|
||||||
"name": "A Dance of Fire and Ice",
|
"name": "A Dance of Fire and Ice",
|
||||||
"description": "A Dance of Fire and Ice is a strict rhythm game. Keep your focus as you guide two orbiting planets along a winding path without breaking their perfect equilibrium. Press on every beat of the music to move in a line. Every pattern has its own rhythm to it. It can get difficult. This game is purely based on rhythm, so use your ears more than your sight.",
|
"description": "A Dance of Fire and Ice is a strict rhythm game. Keep your focus as you guide two orbiting planets along a winding path without breaking their perfect equilibrium. Press on every beat of the music to move in a line. Every pattern has its own rhythm to it. It can get difficult. This game is purely based on rhythm, so use your ears more than your sight.",
|
||||||
|
|
@ -27,6 +33,24 @@
|
||||||
"image": "/games/basketball-stars/logo.png",
|
"image": "/games/basketball-stars/logo.png",
|
||||||
"slug": "basketball-stars"
|
"slug": "basketball-stars"
|
||||||
},
|
},
|
||||||
|
"binding-of-isaac": {
|
||||||
|
"name": "The Binding of Isaac",
|
||||||
|
"image": "/games/flash/img/binding-of-isaac.png",
|
||||||
|
"slug": "binding-of-isaac",
|
||||||
|
"flash": true
|
||||||
|
},
|
||||||
|
"bloons-tower-defense-2": {
|
||||||
|
"name": "Bloons Tower Defense 2",
|
||||||
|
"image": "/games/flash/img/bloons-tower-defense-2.webp",
|
||||||
|
"slug": "bloons-tower-defense-2",
|
||||||
|
"flash": true
|
||||||
|
},
|
||||||
|
"bloons-tower-defense-4": {
|
||||||
|
"name": "Bloons Tower Defense 4",
|
||||||
|
"image": "/games/flash/img/bloons-tower-defense-4.jpg",
|
||||||
|
"slug": "bloons-tower-defense-4",
|
||||||
|
"flash": true
|
||||||
|
},
|
||||||
"cannon-basketball-4": {
|
"cannon-basketball-4": {
|
||||||
"name": "Cannon Basketball 4",
|
"name": "Cannon Basketball 4",
|
||||||
"image": "/games/cannon-basketball-4/logo.png",
|
"image": "/games/cannon-basketball-4/logo.png",
|
||||||
|
|
@ -260,6 +284,12 @@
|
||||||
"slug": "tunnelrush",
|
"slug": "tunnelrush",
|
||||||
"unity": true
|
"unity": true
|
||||||
},
|
},
|
||||||
|
"unfairmario": {
|
||||||
|
"name": "Unfair Mario",
|
||||||
|
"image": "/games/flash/img/unfairmario.jpg",
|
||||||
|
"slug": "unfairmario",
|
||||||
|
"flash": true
|
||||||
|
},
|
||||||
"ul6": {
|
"ul6": {
|
||||||
"name": "Ultima 6",
|
"name": "Ultima 6",
|
||||||
"image": "/games/ul6/logo.png",
|
"image": "/games/ul6/logo.png",
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,22 @@
|
||||||
"dev.wearr.adblock": {
|
"dev.wearr.adblock": {
|
||||||
"title": "Alu Adblocker",
|
"title": "Alu Adblocker",
|
||||||
"description": "Alu Adblocker is the best adblocker for web proxy services. Blocking up to 97% of all trackers and ads.",
|
"description": "Alu Adblocker is the best adblocker for web proxy services. Blocking up to 97% of all trackers and ads.",
|
||||||
"version": "0.0.1",
|
"version": "0.1.0",
|
||||||
"image": "/marketplace/adblock/adblock.png",
|
"image": "/marketplace/adblock/adblock.png",
|
||||||
"script": "/marketplace/adblock/index.js",
|
"script": "/marketplace/adblock/index.js",
|
||||||
"type": "serviceWorker",
|
"type": "serviceWorker",
|
||||||
"entryNamespace": "adblockExt",
|
"entryNamespace": "adblockExt",
|
||||||
"entryFunc": "filterRequest"
|
"entryFunc": "filterRequest"
|
||||||
},
|
},
|
||||||
|
"dev.wearr.vencord": {
|
||||||
|
"title": "Vencord",
|
||||||
|
"description": "Vencord is the cutest client mod for Discord, it's incredibly user friendly and easy to use",
|
||||||
|
"version": "DevBuild 80b493d",
|
||||||
|
"image": "/marketplace/vencord/vencord.png",
|
||||||
|
"script": "/marketplace/vencord/vencord.js",
|
||||||
|
"pages": ["discord.com"],
|
||||||
|
"type": "page"
|
||||||
|
},
|
||||||
"dev.wearr.oled-theme": {
|
"dev.wearr.oled-theme": {
|
||||||
"title": "OLED Theme",
|
"title": "OLED Theme",
|
||||||
"description": "A beautiful OLED theme for Alu.",
|
"description": "A beautiful OLED theme for Alu.",
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,14 @@ const { title, optionalPreloads } = Astro.props;
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6, p, span {
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
p,
|
||||||
|
span {
|
||||||
color: var(--text-color);
|
color: var(--text-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ if (!game) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function isValidGameKey(key: string) {
|
function isValidGameKey(key: string) {
|
||||||
return key in gamesList;
|
return key in gamesList;
|
||||||
}
|
}
|
||||||
|
|
||||||
let gameData = isValidGameKey(game) ? gamesList[game] : null;
|
let gameData = isValidGameKey(game) ? gamesList[game] : null;
|
||||||
|
|
@ -21,20 +21,23 @@ let gameData = isValidGameKey(game) ? gamesList[game] : null;
|
||||||
if (!gameData) {
|
if (!gameData) {
|
||||||
return Astro.redirect("/en/games/");
|
return Astro.redirect("/en/games/");
|
||||||
}
|
}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout title="Game">
|
<Layout title="Game">
|
||||||
<div id="main-content">
|
<div id="main-content">
|
||||||
<div class="game-container">
|
<div class="game-container">
|
||||||
{gameData.unity ?
|
{
|
||||||
<iframe scrolling="no" src=`/unity/${gameData.slug}` title={gameData.name} id="game-frame"/> :
|
gameData.unity ? (
|
||||||
<iframe scrolling="no" src=`/games/${gameData.slug}` title={gameData.name} id="game-frame"/>
|
<iframe scrolling="no" src={`/game/unity/${gameData.slug}`} title={gameData.name} id="game-frame" />
|
||||||
|
) : gameData.flash ? (
|
||||||
|
<iframe scrolling="no" src={`/game/flash/${gameData.slug}`} title={gameData.name} id="game-frame" />
|
||||||
|
) : <iframe scrolling="no" src={`/games/${gameData.slug}`} title={gameData.name} id="game-frame" />
|
||||||
|
|
||||||
}
|
}
|
||||||
<div class="game-info">
|
<div class="game-info">
|
||||||
<div class="game-info-top">
|
<div class="game-info-top">
|
||||||
<p class="game-title">{gameData.name}</p>
|
<p class="game-title">{gameData.name}</p>
|
||||||
<img src="/img/games/fullscreen.svg" alt="Fullscreen" id="game-fullscreen" class="icn">
|
<img src="/img/games/fullscreen.svg" alt="Fullscreen" id="game-fullscreen" class="icn" />
|
||||||
</div>
|
</div>
|
||||||
<div class="game-info-bottom">
|
<div class="game-info-bottom">
|
||||||
<p class="game-desc">{gameData.description}</p>
|
<p class="game-desc">{gameData.description}</p>
|
||||||
|
|
@ -100,12 +103,12 @@ if (!gameData) {
|
||||||
|
|
||||||
iframe.addEventListener("click", () => {
|
iframe.addEventListener("click", () => {
|
||||||
iframe.contentWindow?.focus();
|
iframe.contentWindow?.focus();
|
||||||
})
|
});
|
||||||
|
|
||||||
document.addEventListener("astro:after-swap", () => {
|
document.addEventListener("astro:after-swap", () => {
|
||||||
let iframe = document.getElementById("game-frame") as HTMLIFrameElement;
|
let iframe = document.getElementById("game-frame") as HTMLIFrameElement;
|
||||||
iframe?.contentWindow?.focus();
|
iframe?.contentWindow?.focus();
|
||||||
})
|
});
|
||||||
|
|
||||||
let fullscreen = document.getElementById("game-fullscreen") as HTMLImageElement;
|
let fullscreen = document.getElementById("game-fullscreen") as HTMLImageElement;
|
||||||
|
|
||||||
|
|
@ -115,4 +118,4 @@ if (!gameData) {
|
||||||
iframe.focus();
|
iframe.focus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,15 @@
|
||||||
export const prerender = false;
|
export const prerender = false;
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en" class="w-full h-full">
|
<html lang="en" class="w-full h-full">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Unity Content</title>
|
<title>Radon Games</title>
|
||||||
<script is:inline src="/unity/UnityLoader.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/@ruffle-rs/ruffle@0.1.0-nightly.2024.7.23/ruffle.min.js" is:inline></script>
|
||||||
<script is:inline src="/unity/instantiateUnity.js"></script>
|
|
||||||
|
<script type="module" src="/flash/instantiateFlash.js" is:inline defer></script>
|
||||||
<link rel="stylesheet" href="/unity/index.css">
|
<link rel="stylesheet" href="/unity/index.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="w-full h-full bg-slate-800 text-slate-200">
|
<body class="w-full h-full bg-slate-800 text-slate-200">
|
||||||
|
|
@ -43,7 +44,7 @@ export const prerender = false;
|
||||||
<div
|
<div
|
||||||
class="w-full h-full flex items-center justify-center flex-col gap-5"
|
class="w-full h-full flex items-center justify-center flex-col gap-5"
|
||||||
>
|
>
|
||||||
<img src="/favicon.svg" class="w-10" />
|
<img src="logo.png" class="w-10" />
|
||||||
<p>An error occurred.</p>
|
<p>An error occurred.</p>
|
||||||
<p class="underline cursor-pointer" onclick="location.reload()">
|
<p class="underline cursor-pointer" onclick="location.reload()">
|
||||||
Refresh
|
Refresh
|
||||||
|
|
@ -51,5 +52,6 @@ export const prerender = false;
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="gameContainer" class="w-full h-full hidden bg-white"></div>
|
<div id="gameContainer" class="w-full h-full hidden bg-white"></div>
|
||||||
|
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"rayId":"8a78f4d95f1f61cf","version":"2024.7.0","r":1,"token":"cf313dfff389483fae99876f60faccea","serverTiming":{"name":{"cfL4":true}}}' crossorigin="anonymous"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
32
src/pages/game/unity/[game].astro
Normal file
32
src/pages/game/unity/[game].astro
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
export const prerender = false;
|
||||||
|
---
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en" class="w-full h-full">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Unity Content</title>
|
||||||
|
<script is:inline src="/unity/UnityLoader.js"></script>
|
||||||
|
<script is:inline src="/unity/instantiateUnity.js"></script>
|
||||||
|
<link rel="stylesheet" href="/unity/index.css" />
|
||||||
|
</head>
|
||||||
|
<body class="w-full h-full bg-slate-800 text-slate-200">
|
||||||
|
<div id="loader" class="w-full h-full flex items-center justify-center flex-col gap-5">
|
||||||
|
<img src="/favicon.svg" class="w-10" />
|
||||||
|
<svg class="animate-spin h-5 w-5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
||||||
|
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
||||||
|
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div class="h-full w-full hidden" id="error">
|
||||||
|
<div class="w-full h-full flex items-center justify-center flex-col gap-5">
|
||||||
|
<img src="/favicon.svg" class="w-10" />
|
||||||
|
<p>An error occurred.</p>
|
||||||
|
<p class="underline cursor-pointer" onclick="location.reload()">Refresh</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="gameContainer" class="w-full h-full hidden bg-white"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
34
src/types.d.ts
vendored
34
src/types.d.ts
vendored
|
|
@ -1,3 +1,19 @@
|
||||||
|
interface Window {
|
||||||
|
__uv$config: {
|
||||||
|
prefix: string;
|
||||||
|
encodeUrl: (url: string) => string;
|
||||||
|
decodeUrl: (url: string) => string;
|
||||||
|
};
|
||||||
|
__uv$location: Location;
|
||||||
|
loadFormContent: Function | null;
|
||||||
|
loadSelectedTransport: Function | null;
|
||||||
|
loadedThemeAtob: string;
|
||||||
|
idb: IDBDatabase;
|
||||||
|
URLPattern: URLPattern | null;
|
||||||
|
// Why is this not already on Window?
|
||||||
|
eval(string): void;
|
||||||
|
}
|
||||||
|
|
||||||
type ExtType = "serviceWorker" | "theme" | "page";
|
type ExtType = "serviceWorker" | "theme" | "page";
|
||||||
|
|
||||||
type Extension = {
|
type Extension = {
|
||||||
|
|
@ -9,7 +25,7 @@ type Extension = {
|
||||||
/*
|
/*
|
||||||
- title: The title of the extension
|
- title: The title of the extension
|
||||||
- description: A description of the extension
|
- description: A description of the extension
|
||||||
- version: The version of the extension (semver)
|
- version: The version of the extension
|
||||||
- script: The script URL to be downloaded and saved into scriptCopy
|
- script: The script URL to be downloaded and saved into scriptCopy
|
||||||
- entryNamespace: The namespace of the entry function for serviceWorker extensions
|
- entryNamespace: The namespace of the entry function for serviceWorker extensions
|
||||||
- entryFunc: The name of the entry function for serviceWorker extensions
|
- entryFunc: The name of the entry function for serviceWorker extensions
|
||||||
|
|
@ -23,6 +39,7 @@ interface IExtensionMetadata {
|
||||||
version: string;
|
version: string;
|
||||||
image: string;
|
image: string;
|
||||||
script: string;
|
script: string;
|
||||||
|
pages?: string[];
|
||||||
entryNamespace?: string;
|
entryNamespace?: string;
|
||||||
entryFunc?: string;
|
entryFunc?: string;
|
||||||
scriptCopy?: string;
|
scriptCopy?: string;
|
||||||
|
|
@ -39,13 +56,14 @@ type InstallReturn = {
|
||||||
};
|
};
|
||||||
|
|
||||||
type GameMetadata = {
|
type GameMetadata = {
|
||||||
name: string,
|
name: string;
|
||||||
description?: string,
|
description?: string;
|
||||||
image: string,
|
image: string;
|
||||||
slug: string,
|
slug: string;
|
||||||
unity?: boolean
|
unity?: boolean;
|
||||||
}
|
flash?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
type GameList = {
|
type GameList = {
|
||||||
[key: string]: GameMetadata;
|
[key: string]: GameMetadata;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
"paths": {
|
"paths": {
|
||||||
"@components/*": ["src/components/*"],
|
"@components/*": ["src/components/*"],
|
||||||
"@i18n/*": ["src/i18n/*"],
|
"@i18n/*": ["src/i18n/*"],
|
||||||
"@json/*": ["src/json/*"],
|
"@json/*": ["src/json/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue