diff --git a/README.md b/README.md
index 8f86456..67e250e 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ Thanks for using Nebula!
## Tech Stack
- TypeScript, Tailwind
-- Express
+- Fastify
- TSX
- Framer motion
- react-i18next
diff --git a/masqr.js b/masqr.js
new file mode 100644
index 0000000..773d413
--- /dev/null
+++ b/masqr.js
@@ -0,0 +1,75 @@
+import fp from "fastify-plugin";
+import fs from "fs";
+const failureFile = fs.readFileSync("Checkfailed.html", "utf8");
+const LICENSE_SERVER_URL = "https://license.mercurywork.shop/validate?license=";
+const whiteListedDomain = ["nebulaproxy.io"];
+async function licenseCheck(req, pass) {
+ try {
+ const resp = await fetch(
+ `${LICENSE_SERVER_URL}${pass}&host=${req.headers.host}`
+ );
+ const data = await resp.json();
+ if (data.status === "License valid") {
+ return true;
+ } else {
+ return false;
+ }
+ } catch {
+ return false;
+ }
+}
+const plugin = (fastify, opts, done) => {
+ fastify.addHook("onRequest", function (req, reply, next) {
+ if (
+ req.cookies.authcheck === "true" ||
+ whiteListedDomain.includes(req.headers.host)
+ ) {
+ return next();
+ }
+ const authHeader = req.headers.authorization;
+ if (req.cookies.refreshcheck != "true") {
+ reply
+ .setCookie("refreshcheck", "true", { maxAge: 1000 })
+ .type("text/html")
+ .send(failureFile);
+ return;
+ }
+ if (!authHeader) {
+ reply
+ .code(401)
+ .header("WWW-Authenticate", "Basic")
+ .type("text/html")
+ .send(failureFile);
+ return;
+ }
+ const auth = Buffer.from(authHeader.split(" ")[1], "base64")
+ .toString()
+ .split(":");
+ const user = auth[0];
+ const pass = auth[1];
+ licenseCheck(req, pass).then((data) => {
+ if (!data) {
+ reply
+ .status(401)
+ .header("WWW-Authenticate", "Basic")
+ .type("text/html")
+ .send(failureFile);
+ return;
+ } else {
+ reply
+ .setCookie("authcheck", "true")
+ .type("text/html")
+ .send("");
+ return;
+ }
+ });
+ });
+ done();
+};
+
+const masqr = fp(plugin, {
+ fastify: "4.x",
+ name: "masqr"
+});
+
+export default masqr;
diff --git a/package.json b/package.json
index 6fd8e20..28821fd 100644
--- a/package.json
+++ b/package.json
@@ -23,14 +23,13 @@
"@tsparticles/engine": "^3.3.0",
"@tsparticles/react": "^3.0.0",
"@tsparticles/slim": "^3.3.0",
- "@types/express": "^4.17.21",
"chalk": "^5.3.0",
"classnames": "^2.5.1",
"compression": "^1.7.4",
"cookie-parser": "^1.4.6",
"crypto-js": "^4.2.0",
- "express": "^4.19.1",
"fastify": "^4.26.2",
+ "fastify-plugin": "^4.5.1",
"framer-motion": "^10.18.0",
"i18next": "^23.10.1",
"i18next-browser-languagedetector": "^7.2.0",
@@ -46,7 +45,7 @@
"react-icons": "^4.12.0",
"react-toastify": "^9.1.3",
"tsx": "^4.7.1",
- "wisp-server-node": "^1.0.5",
+ "wisp-server-node": "^1.0.4",
"ws": "^8.16.0"
},
"devDependencies": {
@@ -60,8 +59,7 @@
"prettier-plugin-tailwindcss": "^0.5.12",
"tailwindcss": "^3.4.1",
"typescript": "^5.4.3",
- "vite": "^5.2.2",
+ "vite": "^5.2.3",
"vite-plugin-static-copy": "^1.0.1"
}
}
-
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4bcd1bd..38508d1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -41,9 +41,6 @@ dependencies:
'@tsparticles/slim':
specifier: ^3.3.0
version: 3.3.0
- '@types/express':
- specifier: ^4.17.21
- version: 4.17.21
chalk:
specifier: ^5.3.0
version: 5.3.0
@@ -59,12 +56,12 @@ dependencies:
crypto-js:
specifier: ^4.2.0
version: 4.2.0
- express:
- specifier: ^4.19.1
- version: 4.19.1
fastify:
specifier: ^4.26.2
version: 4.26.2
+ fastify-plugin:
+ specifier: ^4.5.1
+ version: 4.5.1
framer-motion:
specifier: ^10.18.0
version: 10.18.0(react-dom@18.2.0)(react@18.2.0)
@@ -111,8 +108,8 @@ dependencies:
specifier: ^4.7.1
version: 4.7.1
wisp-server-node:
- specifier: ^1.0.5
- version: 1.0.5
+ specifier: ^1.0.4
+ version: 1.0.4
ws:
specifier: ^8.16.0
version: 8.16.0
@@ -120,7 +117,7 @@ dependencies:
devDependencies:
'@preact/preset-vite':
specifier: ^2.8.2
- version: 2.8.2(@babel/core@7.24.3)(preact@10.20.0)(vite@5.2.2)
+ version: 2.8.2(@babel/core@7.24.3)(preact@10.20.0)(vite@5.2.3)
autoprefixer:
specifier: ^10.4.19
version: 10.4.19(postcss@8.4.38)
@@ -149,11 +146,11 @@ devDependencies:
specifier: ^5.4.3
version: 5.4.3
vite:
- specifier: ^5.2.2
- version: 5.2.2
+ specifier: ^5.2.3
+ version: 5.2.3
vite-plugin-static-copy:
specifier: ^1.0.1
- version: 1.0.1(vite@5.2.2)
+ version: 1.0.1(vite@5.2.3)
packages:
@@ -1182,7 +1179,7 @@ packages:
requiresBuild: true
optional: true
- /@preact/preset-vite@2.8.2(@babel/core@7.24.3)(preact@10.20.0)(vite@5.2.2):
+ /@preact/preset-vite@2.8.2(@babel/core@7.24.3)(preact@10.20.0)(vite@5.2.3):
resolution: {integrity: sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==}
peerDependencies:
'@babel/core': 7.x
@@ -1191,7 +1188,7 @@ packages:
'@babel/core': 7.24.3
'@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.3)
'@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.3)
- '@prefresh/vite': 2.4.5(preact@10.20.0)(vite@5.2.2)
+ '@prefresh/vite': 2.4.5(preact@10.20.0)(vite@5.2.3)
'@rollup/pluginutils': 4.2.1
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.24.3)
debug: 4.3.4
@@ -1201,7 +1198,7 @@ packages:
resolve: 1.22.8
source-map: 0.7.4
stack-trace: 1.0.0-pre2
- vite: 5.2.2
+ vite: 5.2.3
transitivePeerDependencies:
- preact
- supports-color
@@ -1223,7 +1220,7 @@ packages:
resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==}
dev: true
- /@prefresh/vite@2.4.5(preact@10.20.0)(vite@5.2.2):
+ /@prefresh/vite@2.4.5(preact@10.20.0)(vite@5.2.3):
resolution: {integrity: sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==}
peerDependencies:
preact: ^10.4.0
@@ -1235,7 +1232,7 @@ packages:
'@prefresh/utils': 1.2.0
'@rollup/pluginutils': 4.2.1
preact: 10.20.0
- vite: 5.2.2
+ vite: 5.2.3
transitivePeerDependencies:
- supports-color
dev: true
@@ -1623,19 +1620,6 @@ packages:
'@tsparticles/engine': 3.3.0
dev: false
- /@types/body-parser@1.19.5:
- resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==}
- dependencies:
- '@types/connect': 3.4.38
- '@types/node': 20.11.30
- dev: false
-
- /@types/connect@3.4.38:
- resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
- dependencies:
- '@types/node': 20.11.30
- dev: false
-
/@types/estree@0.0.46:
resolution: {integrity: sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==}
dev: false
@@ -1643,24 +1627,6 @@ packages:
/@types/estree@1.0.5:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
- /@types/express-serve-static-core@4.17.43:
- resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==}
- dependencies:
- '@types/node': 20.11.30
- '@types/qs': 6.9.14
- '@types/range-parser': 1.2.7
- '@types/send': 0.17.4
- dev: false
-
- /@types/express@4.17.21:
- resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
- dependencies:
- '@types/body-parser': 1.19.5
- '@types/express-serve-static-core': 4.17.43
- '@types/qs': 6.9.14
- '@types/serve-static': 1.15.5
- dev: false
-
/@types/glob@7.2.0:
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
requiresBuild: true
@@ -1670,22 +1636,10 @@ packages:
dev: false
optional: true
- /@types/http-errors@2.0.4:
- resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
- dev: false
-
/@types/json-schema@7.0.15:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
dev: true
- /@types/mime@1.3.5:
- resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
- dev: false
-
- /@types/mime@3.0.4:
- resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==}
- dev: false
-
/@types/minimatch@5.1.2:
resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
requiresBuild: true
@@ -1699,14 +1653,6 @@ packages:
undici-types: 5.26.5
dev: false
- /@types/qs@6.9.14:
- resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==}
- dev: false
-
- /@types/range-parser@1.2.7:
- resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
- dev: false
-
/@types/resolve@0.0.8:
resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==}
dependencies:
@@ -1717,21 +1663,6 @@ packages:
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
dev: true
- /@types/send@0.17.4:
- resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
- dependencies:
- '@types/mime': 1.3.5
- '@types/node': 20.11.30
- dev: false
-
- /@types/serve-static@1.15.5:
- resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==}
- dependencies:
- '@types/http-errors': 2.0.4
- '@types/mime': 3.0.4
- '@types/node': 20.11.30
- dev: false
-
/@types/uuid@9.0.8:
resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
dev: false
@@ -1994,10 +1925,6 @@ packages:
is-array-buffer: 3.0.4
dev: true
- /array-flatten@1.1.1:
- resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
- dev: false
-
/array-includes@3.1.8:
resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
engines: {node: '>= 0.4'}
@@ -2033,7 +1960,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
es-shim-unscopables: 1.0.2
dev: true
@@ -2043,7 +1970,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
es-shim-unscopables: 1.0.2
dev: true
@@ -2052,7 +1979,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
es-shim-unscopables: 1.0.2
dev: true
@@ -2061,7 +1988,7 @@ packages:
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
es-errors: 1.3.0
es-shim-unscopables: 1.0.2
dev: true
@@ -2132,7 +2059,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.23.0
- caniuse-lite: 1.0.30001599
+ caniuse-lite: 1.0.30001600
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
@@ -2200,26 +2127,6 @@ packages:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
dev: false
- /body-parser@1.20.2:
- resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.5
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.11.0
- raw-body: 2.5.2
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
/boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
dev: true
@@ -2257,8 +2164,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001599
- electron-to-chromium: 1.4.713
+ caniuse-lite: 1.0.30001600
+ electron-to-chromium: 1.4.715
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
@@ -2297,11 +2204,6 @@ packages:
engines: {node: '>= 0.8'}
dev: false
- /bytes@3.1.2:
- resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
- engines: {node: '>= 0.8'}
- dev: false
-
/cacache@15.3.0:
resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==}
engines: {node: '>= 10'}
@@ -2339,6 +2241,7 @@ packages:
function-bind: 1.1.2
get-intrinsic: 1.2.4
set-function-length: 1.2.2
+ dev: true
/callsite@1.0.0:
resolution: {integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==}
@@ -2354,8 +2257,8 @@ packages:
engines: {node: '>= 6'}
dev: true
- /caniuse-lite@1.0.30001599:
- resolution: {integrity: sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==}
+ /caniuse-lite@1.0.30001600:
+ resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==}
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@@ -2526,11 +2429,6 @@ packages:
safe-buffer: 5.2.1
dev: false
- /content-type@1.0.5:
- resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
- engines: {node: '>= 0.6'}
- dev: false
-
/convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
@@ -2751,6 +2649,7 @@ packages:
es-define-property: 1.0.0
es-errors: 1.3.0
gopd: 1.0.1
+ dev: true
/define-lazy-prop@3.0.0:
resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
@@ -2777,11 +2676,6 @@ packages:
engines: {node: '>= 0.8'}
dev: false
- /destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- dev: false
-
/detect-libc@2.0.3:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
engines: {node: '>=8'}
@@ -2867,12 +2761,8 @@ packages:
/eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- /ee-first@1.1.1:
- resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- dev: false
-
- /electron-to-chromium@1.4.713:
- resolution: {integrity: sha512-vDarADhwntXiULEdmWd77g2dV6FrNGa8ecAC29MZ4TwPut2fvosD0/5sJd1qWNNe8HcJFAC+F5Lf9jW1NPtWmw==}
+ /electron-to-chromium@1.4.715:
+ resolution: {integrity: sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==}
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2880,11 +2770,6 @@ packages:
/emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- /encodeurl@1.0.2:
- resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
- engines: {node: '>= 0.8'}
- dev: false
-
/encoding@0.1.13:
resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
requiresBuild: true
@@ -2916,53 +2801,6 @@ packages:
dev: false
optional: true
- /es-abstract@1.22.5:
- resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==}
- engines: {node: '>= 0.4'}
- dependencies:
- array-buffer-byte-length: 1.0.1
- arraybuffer.prototype.slice: 1.0.3
- available-typed-arrays: 1.0.7
- call-bind: 1.0.7
- es-define-property: 1.0.0
- es-errors: 1.3.0
- es-set-tostringtag: 2.0.3
- es-to-primitive: 1.2.1
- function.prototype.name: 1.1.6
- get-intrinsic: 1.2.4
- get-symbol-description: 1.0.2
- globalthis: 1.0.3
- gopd: 1.0.1
- has-property-descriptors: 1.0.2
- has-proto: 1.0.3
- has-symbols: 1.0.3
- hasown: 2.0.2
- internal-slot: 1.0.7
- is-array-buffer: 3.0.4
- is-callable: 1.2.7
- is-negative-zero: 2.0.3
- is-regex: 1.1.4
- is-shared-array-buffer: 1.0.3
- is-string: 1.0.7
- is-typed-array: 1.1.13
- is-weakref: 1.0.2
- object-inspect: 1.13.1
- object-keys: 1.1.1
- object.assign: 4.1.5
- regexp.prototype.flags: 1.5.2
- safe-array-concat: 1.1.2
- safe-regex-test: 1.0.3
- string.prototype.trim: 1.2.9
- string.prototype.trimend: 1.0.8
- string.prototype.trimstart: 1.0.7
- typed-array-buffer: 1.0.2
- typed-array-byte-length: 1.0.1
- typed-array-byte-offset: 1.0.2
- typed-array-length: 1.0.5
- unbox-primitive: 1.0.2
- which-typed-array: 1.1.15
- dev: true
-
/es-abstract@1.23.2:
resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==}
engines: {node: '>= 0.4'}
@@ -3006,11 +2844,11 @@ packages:
safe-regex-test: 1.0.3
string.prototype.trim: 1.2.9
string.prototype.trimend: 1.0.8
- string.prototype.trimstart: 1.0.7
+ string.prototype.trimstart: 1.0.8
typed-array-buffer: 1.0.2
typed-array-byte-length: 1.0.1
typed-array-byte-offset: 1.0.2
- typed-array-length: 1.0.5
+ typed-array-length: 1.0.6
unbox-primitive: 1.0.2
which-typed-array: 1.1.15
dev: true
@@ -3020,10 +2858,12 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.4
+ dev: true
/es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
+ dev: true
/es-iterator-helpers@1.0.18:
resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==}
@@ -3190,7 +3030,7 @@ packages:
'@mdn/browser-compat-data': 5.5.16
ast-metadata-inferer: 0.8.0
browserslist: 4.23.0
- caniuse-lite: 1.0.30001599
+ caniuse-lite: 1.0.30001600
eslint: 8.57.0
find-up: 5.0.0
lodash.memoize: 4.1.2
@@ -3245,7 +3085,7 @@ packages:
minimatch: 3.1.2
object.entries: 1.1.8
object.fromentries: 2.0.8
- object.hasown: 1.1.3
+ object.hasown: 1.1.4
object.values: 1.2.0
prop-types: 15.8.1
resolve: 2.0.0-next.5
@@ -3383,11 +3223,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /etag@1.8.1:
- resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
- engines: {node: '>= 0.6'}
- dev: false
-
/event-target-shim@5.0.1:
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
engines: {node: '>=6'}
@@ -3461,45 +3296,6 @@ packages:
engines: {node: '>=6'}
dev: false
- /express@4.19.1:
- resolution: {integrity: sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==}
- engines: {node: '>= 0.10.0'}
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.2
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.6.0
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: 1.0.2
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.2.0
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.1
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 0.1.7
- proxy-addr: 2.0.7
- qs: 6.11.0
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.18.0
- serve-static: 1.15.0
- setprototypeof: 1.2.0
- statuses: 2.0.1
- type-is: 1.6.18
- utils-merge: 1.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
- dev: false
-
/fast-content-type-parse@1.1.0:
resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==}
dev: false
@@ -3606,21 +3402,6 @@ packages:
dependencies:
to-regex-range: 5.0.1
- /finalhandler@1.2.0:
- resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
- engines: {node: '>= 0.8'}
- dependencies:
- debug: 2.6.9
- encodeurl: 1.0.2
- escape-html: 1.0.3
- on-finished: 2.4.1
- parseurl: 1.3.3
- statuses: 2.0.1
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
/find-cache-dir@3.3.2:
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
engines: {node: '>=8'}
@@ -3708,11 +3489,6 @@ packages:
'@emotion/is-prop-valid': 0.8.8
dev: false
- /fresh@0.5.2:
- resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
- engines: {node: '>= 0.6'}
- dev: false
-
/from2@2.3.0:
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
dependencies:
@@ -3810,6 +3586,7 @@ packages:
has-proto: 1.0.3
has-symbols: 1.0.3
hasown: 2.0.2
+ dev: true
/get-stream@3.0.0:
resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==}
@@ -3934,6 +3711,7 @@ packages:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies:
get-intrinsic: 1.2.4
+ dev: true
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
@@ -3959,14 +3737,17 @@ packages:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
dependencies:
es-define-property: 1.0.0
+ dev: true
/has-proto@1.0.3:
resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
engines: {node: '>= 0.4'}
+ dev: true
/has-symbols@1.0.3:
resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
engines: {node: '>= 0.4'}
+ dev: true
/has-tostringtag@1.0.2:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
@@ -4073,13 +3854,6 @@ packages:
'@babel/runtime': 7.24.1
dev: false
- /iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
- dependencies:
- safer-buffer: 2.1.2
- dev: false
-
/iconv-lite@0.5.1:
resolution: {integrity: sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==}
engines: {node: '>=0.10.0'}
@@ -4687,15 +4461,6 @@ packages:
resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
dev: false
- /media-typer@0.3.0:
- resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
- engines: {node: '>= 0.6'}
- dev: false
-
- /merge-descriptors@1.0.1:
- resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
- dev: false
-
/merge-stream@1.0.1:
resolution: {integrity: sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA==}
dependencies:
@@ -4716,11 +4481,6 @@ packages:
engines: {node: '>=10.4.0'}
dev: false
- /methods@1.1.2:
- resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
- engines: {node: '>= 0.6'}
- dev: false
-
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
@@ -4762,12 +4522,6 @@ packages:
hasBin: true
dev: false
- /mime@1.6.0:
- resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
- engines: {node: '>=4'}
- hasBin: true
- dev: false
-
/mime@2.6.0:
resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
engines: {node: '>=4.0.0'}
@@ -4916,7 +4670,9 @@ packages:
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ requiresBuild: true
dev: false
+ optional: true
/mustache@2.3.2:
resolution: {integrity: sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==}
@@ -5064,6 +4820,7 @@ packages:
/object-inspect@1.13.1:
resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+ dev: true
/object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
@@ -5099,11 +4856,13 @@ packages:
es-object-atoms: 1.0.0
dev: true
- /object.hasown@1.1.3:
- resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
+ /object.hasown@1.1.4:
+ resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==}
+ engines: {node: '>= 0.4'}
dependencies:
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
+ es-object-atoms: 1.0.0
dev: true
/object.values@1.2.0:
@@ -5120,13 +4879,6 @@ packages:
engines: {node: '>=14.0.0'}
dev: false
- /on-finished@2.4.1:
- resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
- engines: {node: '>= 0.8'}
- dependencies:
- ee-first: 1.1.1
- dev: false
-
/on-headers@1.0.2:
resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
engines: {node: '>= 0.8'}
@@ -5245,11 +4997,6 @@ packages:
entities: 4.5.0
dev: false
- /parseurl@1.3.3:
- resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
- engines: {node: '>= 0.8'}
- dev: false
-
/path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
dev: false
@@ -5286,10 +5033,6 @@ packages:
lru-cache: 10.2.0
minipass: 7.0.4
- /path-to-regexp@0.1.7:
- resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
- dev: false
-
/path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -5633,13 +5376,6 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- /qs@6.11.0:
- resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
- engines: {node: '>=0.6'}
- dependencies:
- side-channel: 1.0.6
- dev: false
-
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
@@ -5648,21 +5384,6 @@ packages:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
dev: false
- /range-parser@1.2.1:
- resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
- engines: {node: '>= 0.6'}
- dev: false
-
- /raw-body@2.5.2:
- resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
- engines: {node: '>= 0.8'}
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
- dev: false
-
/rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -6071,39 +5792,6 @@ packages:
dependencies:
lru-cache: 6.0.0
- /send@0.18.0:
- resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
- engines: {node: '>= 0.8.0'}
- dependencies:
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- encodeurl: 1.0.2
- escape-html: 1.0.3
- etag: 1.8.1
- fresh: 0.5.2
- http-errors: 2.0.0
- mime: 1.6.0
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.1
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /serve-static@1.15.0:
- resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
- engines: {node: '>= 0.8.0'}
- dependencies:
- encodeurl: 1.0.2
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 0.18.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
/set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
requiresBuild: true
@@ -6124,6 +5812,7 @@ packages:
get-intrinsic: 1.2.4
gopd: 1.0.1
has-property-descriptors: 1.0.2
+ dev: true
/set-function-name@2.0.2:
resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
@@ -6173,6 +5862,7 @@ packages:
es-errors: 1.3.0
get-intrinsic: 1.2.4
object-inspect: 1.13.1
+ dev: true
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
@@ -6297,9 +5987,6 @@ packages:
/sqlite3@5.1.7:
resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==}
requiresBuild: true
- peerDependenciesMeta:
- node-gyp:
- optional: true
dependencies:
bindings: 1.5.0
node-addon-api: 7.1.0
@@ -6391,12 +6078,13 @@ packages:
es-object-atoms: 1.0.0
dev: true
- /string.prototype.trimstart@1.0.7:
- resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+ /string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.23.2
+ es-object-atoms: 1.0.0
dev: true
/string_decoder@1.1.1:
@@ -6714,14 +6402,6 @@ packages:
engines: {node: '>=10'}
dev: true
- /type-is@1.6.18:
- resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
- engines: {node: '>= 0.6'}
- dependencies:
- media-typer: 0.3.0
- mime-types: 2.1.35
- dev: false
-
/typed-array-buffer@1.0.2:
resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
engines: {node: '>= 0.4'}
@@ -6754,8 +6434,8 @@ packages:
is-typed-array: 1.1.13
dev: true
- /typed-array-length@1.0.5:
- resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==}
+ /typed-array-length@1.0.6:
+ resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
@@ -6816,11 +6496,6 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
- /unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
- dev: false
-
/unplugin@1.10.0:
resolution: {integrity: sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==}
engines: {node: '>=14.0.0'}
@@ -6859,11 +6534,6 @@ packages:
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- /utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
- dev: false
-
/uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
@@ -6879,7 +6549,7 @@ packages:
engines: {node: '>= 0.8'}
dev: false
- /vite-plugin-static-copy@1.0.1(vite@5.2.2):
+ /vite-plugin-static-copy@1.0.1(vite@5.2.3):
resolution: {integrity: sha512-3eGL4mdZoPJMDBT68pv/XKIHR4MgVolStIxxv1gIBP4R8TpHn9C9EnaU0hesqlseJ4ycLGUxckFTu/jpuJXQlA==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
@@ -6889,11 +6559,11 @@ packages:
fast-glob: 3.3.2
fs-extra: 11.2.0
picocolors: 1.0.0
- vite: 5.2.2
+ vite: 5.2.3
dev: true
- /vite@5.2.2:
- resolution: {integrity: sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==}
+ /vite@5.2.3:
+ resolution: {integrity: sha512-+i1oagbvkVIhEy9TnEV+fgXsng13nZM90JQbrcPrf6DvW2mXARlz+DK7DLiDP+qeKoD1FCVx/1SpFL1CLq9Mhw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -7017,8 +6687,8 @@ packages:
dev: false
optional: true
- /wisp-server-node@1.0.5:
- resolution: {integrity: sha512-D6VgyuQqmFeRHPpt1M46xJytr8bD5f++FgXVfCmKjHaQ5vB+/wXL8oNM3rUSO+g8DE85AIlCdgH1sq9uq/CG4g==}
+ /wisp-server-node@1.0.4:
+ resolution: {integrity: sha512-23mGc9vkjcqJaRzkrX5QbmMciEgfSWBiBcduNn39ttBQbaVdP050om7FzYzLiv9TYt5OMw5d2KyDxZ7QUErzwg==}
dependencies:
ws: 8.16.0
transitivePeerDependencies:
diff --git a/server.ts b/server.ts
index 6eaee2e..f9db5da 100644
--- a/server.ts
+++ b/server.ts
@@ -1,24 +1,19 @@
-import { createBareServer } from "@tomphttp/bare-server-node";
-import chalk from "chalk";
-import express from "express";
-import { createServer } from "node:http";
+import fastify from "fastify";
+import fastifyStatic from "@fastify/static";
import { fileURLToPath } from "url";
-import compression from "compression";
-import createRammerhead from "rammerhead/src/server/index.js";
import path from "path";
-import fs from "fs";
-import cookieParser from "cookie-parser";
+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";
-import { Request, Response } from "express";
-//@ts-ignore
-import { Socket, Head } from "ws";
-
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
-const LICENSE_SERVER_URL = "https://license.mercurywork.shop/validate?license=";
-const whiteListedDomains = ["nebulaproxy.io"]; // Add any public domains you have here
-const failureFile = fs.readFileSync("Checkfailed.html", "utf8");
+const bare = createBareServer("/bare/");
const rh = createRammerhead();
+import chalk from "chalk";
+import masqr from "./masqr.js";
+
const rammerheadScopes = [
"/rammerhead.js",
"/hammerhead.js",
@@ -33,146 +28,12 @@ const rammerheadScopes = [
"/editsession",
"/needpassword",
"/syncLocalStorage",
- "/api/shuffleDict"
+ "/api/shuffleDict",
+ "/mainport"
];
+
const rammerheadSession = /^\/[a-z0-9]{32}/;
-console.log(`${chalk.magentaBright("Starting Nebula...")}\n`);
-
-const app = express();
-app.use(
- compression({
- threshold: 0,
- filter: () => true
- })
-);
-app.use(cookieParser());
-
-// Congratulations! Masqr failed to validate, this is either your first visit or you're a FRAUD
-async function MasqFail(req: Request, res: Response) {
- if (!req.headers.host) {
- // no bitch still using HTTP/1.0 go away
- return;
- }
- const unsafeSuffix = req.headers.host + ".html";
- let safeSuffix = path
- .normalize(unsafeSuffix)
- .replace(/^(\.\.(\/|\\|$))+/, "");
- let safeJoin = path.join(process.cwd() + "/Masqrd", safeSuffix);
- try {
- await fs.promises.access(safeJoin); // man do I wish this was an if-then instead of a "exception on fail"
- const failureFileLocal = await fs.promises.readFile(safeJoin, "utf8");
- res.setHeader("Content-Type", "text/html");
- res.send(failureFileLocal);
- return;
- } catch (e) {
- res.setHeader("Content-Type", "text/html");
- res.send(failureFile);
- return;
- }
-}
-
-// Woooooo masqr yayyyy (said no one)
-// uncomment for masqr
-/* app.use(async (req, res, next) => {
- if (req.headers.host && whiteListedDomains.includes(req.headers.host)) {
- next();
- return;
- }
- if (req.url.includes("/bare/")) { // replace this with your bare endpoint
- next();
- return;
- // Bypass for UV and other bares
- }
-
- const authheader = req.headers.authorization;
-
- if (req.cookies["authcheck"]) {
- next();
- return;
- }
-
-
- if (req.cookies['refreshcheck'] != "true") {
- res.cookie("refreshcheck", "true", {maxAge: 10000}) // 10s refresh check
- MasqFail(req, res)
- return;
- }
-
- if (!authheader) {
-
- res.setHeader('WWW-Authenticate', 'Basic'); // Yeah so we need to do this to get the auth params, kinda annoying and just showing a login prompt gives it away so its behind a 10s refresh check
- res.status(401);
- MasqFail(req, res)
- return;
- }
-
- const auth = Buffer.from(authheader.split(' ')[1],
- 'base64').toString().split(':');
- const user = auth[0];
- const pass = auth[1];
-
- const licenseCheck = ((await (await fetch(LICENSE_SERVER_URL + pass + "&host=" + req.headers.host)).json()))["status"]
- console.log(LICENSE_SERVER_URL + pass + "&host=" + req.headers.host +" returned " +licenseCheck)
- if (licenseCheck == "License valid") {
- res.cookie("authcheck", "true", {expires: new Date((Date.now()) + (365*24*60*60 * 1000))}) // authorize session, for like a year, by then the link will be expired lol
- res.send(``) // fun hack to make the browser refresh and remove the auth params from the URL
- return;
- }
-
- MasqFail(req, res)
- return;
-}) */
-
-app.use(
- express.static("dist", {
- //force .cjs files to be served as text/javascript (libcurl)
- setHeaders: (res, path) => {
- if (path.endsWith(".cjs")) {
- res.setHeader("Content-Type", "text/javascript");
- }
- }
- })
-);
-
-app.get("/search=:query", async (req: Request, res: Response) => {
- const { query } = req.params;
-
- const response = await fetch(
- `http://api.duckduckgo.com/ac?q=${query}&format=json`
- ).then((apiRes) => apiRes.json());
-
- res.send(response);
-});
-
-app.get("*", (req, res) => {
- res.sendFile(path.join(__dirname, "dist", "index.html"));
-});
-
-const server = createServer();
-
-const bare = createBareServer("/bare/");
-
-server.on("request", (req: Request, res: Response) => {
- if (bare.shouldRoute(req)) {
- bare.routeRequest(req, res);
- } else if (shouldRouteRh(req)) {
- routeRhRequest(req, res);
- } else {
- app(req, res);
- }
-});
-
-server.on("upgrade", (req: Request, socket: Socket, head: 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, head);
- }
-});
-
function shouldRouteRh(req) {
const url = new URL(req.url, "http://0.0.0.0");
return (
@@ -181,20 +42,72 @@ function shouldRouteRh(req) {
);
}
-function routeRhRequest(req: Request, res: Response) {
+function routeRhRequest(req, res) {
rh.emit("request", req, res);
}
-function routeRhUpgrade(req: Request, socket: Socket, head: Head) {
+function routeRhUpgrade(req, socket, head) {
rh.emit("upgrade", req, socket, head);
}
-const port = parseInt(process.env.PORT || "8080");
+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);
+ }
+ });
+};
-server.listen(port, () => {
- console.log(
- `${
- chalk.magentaBright("You can now use Nebula on port ") + chalk.bold(port)
- }\n`
- );
+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"
});