diff --git a/index.js b/index.js index 1e6724a..443fe6e 100644 --- a/index.js +++ b/index.js @@ -9,7 +9,8 @@ const app = express(); const port = process.env.PORT || process.argv[2] || 8080; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); -app.use(new Easyviolet().express(app)); +const ultraviolet = new Easyviolet(); + app.use(express.static(path.join(__dirname, '/static'), { extensions: ['html'] })); app.get('/cdn/*', cors({ origin: false }), async (req, res, next) => { @@ -30,7 +31,10 @@ app.get('/cdn/*', cors({ origin: false }), async (req, res, next) => { } else next(); }); -app.use((req, res) => res.status(404).sendFile(path.join(__dirname, './static/', '404.html'))); -app.use((e, req, res, next) => res.status(500).send(`Something Broke \n\n The error was: ${e.stack}`)); +app.use((req, res, next) => { + if (!ultraviolet.requiresRoute(req)) res.status(404).sendFile(path.join(__dirname, './static/', '404.html')); +}); const server = app.listen(port, () => console.log(`Polaris is running!\n Port: ${server.address().port}\n Node: ${process.version}`)); + +ultraviolet.httpServer(server); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7434126..10d2a06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "polaris", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -16,13 +16,13 @@ } }, "node_modules/@titaniumnetwork-dev/ultraviolet": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@titaniumnetwork-dev/ultraviolet/-/ultraviolet-1.0.5.tgz", - "integrity": "sha512-FJtZw/xQubrgk8pJLs5wx9k6okCGZPR7FXWXTiL5wOiCvjqgDQCmHBTb7M5eYqnQil05tbaz92+16Ki/7rRWIw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@titaniumnetwork-dev/ultraviolet/-/ultraviolet-2.0.0.tgz", + "integrity": "sha512-zRjwip5yFr1p3/1WTb7nmbqmJKNIoxvhbaKFaKr1eSw1Px/Y/nBwPZ+AW+aKVAPFZvx/wAb14eTf2BAH7zklaQ==", "dependencies": { - "@tomphttp/bare-client": "^2.0.0", - "css-tree": "^2.3.1", - "esotope-hammerhead": "^0.6.5", + "@tomphttp/bare-client": "^2.0.0-beta.2", + "css-tree": "^2.0.4", + "esotope-hammerhead": "^0.6.1", "events": "^3.3.0", "idb": "^7.1.1", "meriyah": "^4.3.3", @@ -32,14 +32,14 @@ } }, "node_modules/@tomphttp/bare-client": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tomphttp/bare-client/-/bare-client-2.0.0.tgz", - "integrity": "sha512-WyIVnSAqzfrLejmOhh/l/LtDOeK+SHnBGi/z+QyliVP1T1JxoNE5eecwxlV+osM9J6FTAYVGNHr8/5bubaIj6Q==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@tomphttp/bare-client/-/bare-client-2.1.0.tgz", + "integrity": "sha512-0s2g3bpKAxwk7sOsfewpngLF+2lQrS0mxnga+6qIzKCoYdOKd5+Lm3lkEDHO0cWIEqMbgRZB2wjW1+NQ2XbGWA==" }, "node_modules/@tomphttp/bare-server-node": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@tomphttp/bare-server-node/-/bare-server-node-1.2.6.tgz", - "integrity": "sha512-8TDkJyPbJQO++zEK4uKuFCE4H4wxeM1RkEX2WEni+N0kS0UU/XL4G1svxlMY5pQFJR75gt/zSmfy8vSO/StE4w==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tomphttp/bare-server-node/-/bare-server-node-2.0.1.tgz", + "integrity": "sha512-L42TC/AldYRFBRZSxhkI0FC5TL8EC/NAsepNC/cWYTTiHQJ7mGg/vdTqNz8ShTYHr6LTHYkuD3/81nhX55SYtA==", "dependencies": { "async-exit-hook": "^2.0.1", "commander": "^10.0.1", @@ -47,7 +47,8 @@ "headers-polyfill": "^3.1.2", "http-errors": "^2.0.0", "ipaddr.js": "^2.0.1", - "source-map-support": "^0.5.21" + "source-map-support": "^0.5.21", + "ws": "^8.13.0" }, "bin": { "bare-server-node": "bin.js" @@ -56,14 +57,6 @@ "node": ">=18.0.0" } }, - "node_modules/@tomphttp/bare-server-node/node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "engines": { - "node": ">= 10" - } - }, "node_modules/@types/estree": { "version": "0.0.46", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", @@ -162,9 +155,9 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -232,9 +225,9 @@ } }, "node_modules/dotenv": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.3.tgz", - "integrity": "sha512-FYssxsmCTtKL72fGBSvb1K9dRz0/VZeWqFme/vSb7r7323x4CRaHu4LvQ5JG3+s6yt2YPbBrkpiEODktfyjI9A==", + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "engines": { "node": ">=12" }, @@ -244,11 +237,11 @@ }, "node_modules/easyviolet": { "version": "1.0.0", - "resolved": "git+ssh://git@github.com/Russell2259/Easyviolet.git#5ba74af389958600a3c045be4e31cd5cd46e776d", + "resolved": "git+ssh://git@github.com/Russell2259/Easyviolet.git#40768a00e1553847be70574e1aa70cdac627ed7c", "license": "ISC", "dependencies": { - "@titaniumnetwork-dev/ultraviolet": "^1.0.11", - "@tomphttp/bare-server-node": "^1.2.6" + "@titaniumnetwork-dev/ultraviolet": "*", + "@tomphttp/bare-server-node": "*" } }, "node_modules/ee-first": { @@ -281,9 +274,9 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/esotope-hammerhead": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/esotope-hammerhead/-/esotope-hammerhead-0.6.4.tgz", - "integrity": "sha512-QY4HXqvjLSFGoGgHvm3H1QUMNcpwnUpGRBaVVFWE5uqbPQh9HSWcA1YD7KwwL/IrgerDwZn00z5dtYT9Ot/C/A==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/esotope-hammerhead/-/esotope-hammerhead-0.6.5.tgz", + "integrity": "sha512-vjncN4nG+RvsUNFC0idHNw1Xzse8GUWn15tr8In0Q4EBscnELTdpQVfsF/cRsMlvSbJdd0gUrW6gK5U+LTmVCg==", "dependencies": { "@types/estree": "0.0.46" } @@ -384,12 +377,13 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -407,6 +401,17 @@ "node": ">= 0.4.0" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -419,9 +424,9 @@ } }, "node_modules/headers-polyfill": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.1.2.tgz", - "integrity": "sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.2.3.tgz", + "integrity": "sha512-oj6MO8sdFQ9gQQedSVdMGh96suxTNp91vPQu7C4qx/57FqYsA5TiNr92nhIZwVQq8zygn4nu3xS1aEqpakGqdw==" }, "node_modules/http-errors": { "version": "2.0.0", @@ -460,11 +465,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "engines": { - "node": ">= 0.10" + "node": ">= 10" } }, "node_modules/mdn-data": { @@ -553,9 +558,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -607,6 +612,14 @@ "node": ">= 0.10" } }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -819,605 +832,26 @@ "engines": { "node": ">= 0.8" } - } - }, - "dependencies": { - "@titaniumnetwork-dev/ultraviolet": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@titaniumnetwork-dev/ultraviolet/-/ultraviolet-1.0.11.tgz", - "integrity": "sha512-FJtZw/xQubrgk8pJLs5wx9k6okCGZPR7FXWXTiL5wOiCvjqgDQCmHBTb7M5eYqnQil05tbaz92+16Ki/7rRWIw==", - "requires": { - "@tomphttp/bare-client": "^1.1.2-beta.3", - "css-tree": "^2.0.4", - "esotope-hammerhead": "^0.6.1", - "events": "^3.3.0", - "idb": "^7.1.1", - "meriyah": "^4.3.3", - "mime-db": "^1.51.0", - "parse5": "^7.1.2", - "set-cookie-parser": "^2.4.8" - } }, - "@tomphttp/bare-client": { - "version": "1.1.2-beta.3", - "resolved": "https://registry.npmjs.org/@tomphttp/bare-client/-/bare-client-1.1.2-beta.3.tgz", - "integrity": "sha512-WyIVnSAqzfrLejmOhh/l/LtDOeK+SHnBGi/z+QyliVP1T1JxoNE5eecwxlV+osM9J6FTAYVGNHr8/5bubaIj6Q==" - }, - "@tomphttp/bare-server-node": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@tomphttp/bare-server-node/-/bare-server-node-1.2.6.tgz", - "integrity": "sha512-8TDkJyPbJQO++zEK4uKuFCE4H4wxeM1RkEX2WEni+N0kS0UU/XL4G1svxlMY5pQFJR75gt/zSmfy8vSO/StE4w==", - "requires": { - "async-exit-hook": "^2.0.1", - "commander": "^10.0.1", - "dotenv": "^16.0.3", - "headers-polyfill": "^3.1.2", - "http-errors": "^2.0.0", - "ipaddr.js": "^2.0.1", - "source-map-support": "^0.5.21" + "node_modules/ws": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", + "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" - } - } - }, - "@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "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.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "requires": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "dotenv": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.3.tgz", - "integrity": "sha512-FYssxsmCTtKL72fGBSvb1K9dRz0/VZeWqFme/vSb7r7323x4CRaHu4LvQ5JG3+s6yt2YPbBrkpiEODktfyjI9A==" - }, - "easyviolet": { - "version": "git+ssh://git@github.com/Russell2259/Easyviolet.git#5ba74af389958600a3c045be4e31cd5cd46e776d", - "from": "easyviolet@github:Russell2259/Easyviolet", - "requires": { - "@titaniumnetwork-dev/ultraviolet": "^1.0.11", - "@tomphttp/bare-server-node": "^1.2.6" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "esotope-hammerhead": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/esotope-hammerhead/-/esotope-hammerhead-0.6.4.tgz", - "integrity": "sha512-QY4HXqvjLSFGoGgHvm3H1QUMNcpwnUpGRBaVVFWE5uqbPQh9HSWcA1YD7KwwL/IrgerDwZn00z5dtYT9Ot/C/A==", - "requires": { - "@types/estree": "0.0.46" - } - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.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" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "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" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "headers-polyfill": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.1.2.tgz", - "integrity": "sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "meriyah": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/meriyah/-/meriyah-4.3.7.tgz", - "integrity": "sha512-JAlSOUqFU/rmLy2CEdZO5hN5E5dyUj1f4AlRR4GCQMjfobvd5lcm9JLkrqq0MgVaLQ/Zur590A+0RyUZhj0b5A==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "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" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "utf-8-validate": { + "optional": true } } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" } } } diff --git a/static/assets/js/apps.js b/static/assets/js/apps.js index 8de5611..55f0df9 100644 --- a/static/assets/js/apps.js +++ b/static/assets/js/apps.js @@ -1,5 +1,4 @@ import PolarisError from './error.js'; -import frame from './frame.js'; const tiltEffectSettings = { max: 8, // max tilt rotation (degrees (deg)) @@ -12,62 +11,59 @@ const tiltEffectSettings = { const load = () => { fetch('/assets/JSON/apps.json') .then(res => res.json()) - .then(games => { - console.log(games) - games.forEach(game => { + .then(apps => { + apps.forEach(app => { const el = document.createElement('div'); - el.classList = 'game'; - el.innerHTML = `

${game.name}

${game.desc}`; + el.classList = 'app'; + el.innerHTML = `

${app.name}

${app.desc}`; document.querySelector('.apps').appendChild(el); el.addEventListener('click', () => { - location.href = `/appplayer?id=${game.quickname}`; + location.href = `/appplayer?id=${app.quickname}`; }); - el.addEventListener('mouseenter', gameMouseEnter); - el.addEventListener('mousemove', gameMouseMove); - el.addEventListener('mouseleave', gameMouseLeave); + el.addEventListener('mouseenter', appMouseEnter); + el.addEventListener('mousemove', appMouseMove); + el.addEventListener('mouseleave', appMouseLeave); }); }) - .catch(e => { - new PolarisError('Failed to load Apps'); - }); + .catch(e => new PolarisError('Failed to load Apps')); }; -function gameMouseEnter(event) { +function appMouseEnter(event) { setTransition(event); } -function gameMouseMove(event) { - const game = event.currentTarget; - const gameWidth = game.offsetWidth; - const gameHeight = game.offsetHeight; - const centerX = game.offsetLeft + gameWidth / 2; - const centerY = game.offsetTop + gameHeight / 2; +function appMouseMove(event) { + const app = event.currentTarget; + const appWidth = app.offsetWidth; + const appHeight = app.offsetHeight; + const centerX = app.offsetLeft + appWidth / 2; + const centerY = app.offsetTop + appHeight / 2; const mouseX = event.clientX - centerX; const mouseY = event.clientY - centerY; - const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (gameHeight / 2); - const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (gameWidth / 2); + const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (appHeight / 2); + const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (appWidth / 2); const rotateX = rotateXUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max : (rotateXUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateXUncapped); const rotateY = rotateYUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max : (rotateYUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateYUncapped); - game.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) + app.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale3d(${tiltEffectSettings.scale}, ${tiltEffectSettings.scale}, ${tiltEffectSettings.scale})`; } -function gameMouseLeave(event) { +function appMouseLeave(event) { event.currentTarget.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`; setTransition(event); } function setTransition(event) { - const game = event.currentTarget; - clearTimeout(game.transitionTimeoutId); - game.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`; - game.transitionTimeoutId = setTimeout(() => { - game.style.transition = ''; + const app = event.currentTarget; + clearTimeout(app.transitionTimeoutId); + app.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`; + app.transitionTimeoutId = setTimeout(() => { + app.style.transition = ''; }, tiltEffectSettings.speed); } diff --git a/static/assets/js/dynamic.js b/static/assets/js/dynamic.js new file mode 100644 index 0000000..dc30c7d --- /dev/null +++ b/static/assets/js/dynamic.js @@ -0,0 +1,27 @@ +var workerLoaded; + +const worker = async () => { + return false; + return await navigator.serviceWorker.register('/dynamic/sw.js', { + scope: '/dynamic/service', + }); +} + +document.addEventListener('DOMContentLoaded', async () => { + await worker(); + + workerLoaded = true; +}); + +const prependHttps = (url) => { + if (!url.startsWith('http://') && !url.startsWith('https://')) return 'https://' + url; + + return url; +} + +const isUrl = (val = '') => { + const urlPattern = /^(http(s)?:\/\/)?([\w-]+\.)+[\w]{2,}(\/.*)?$/; + return urlPattern.test(val); +} + +export { isUrl, prependHttps, worker, workerLoaded }; \ No newline at end of file diff --git a/static/assets/js/main.js b/static/assets/js/main.js index 66a865c..2ce4e32 100644 --- a/static/assets/js/main.js +++ b/static/assets/js/main.js @@ -1,5 +1,5 @@ // THIS FILE IS CRITICAL, DO NOT TOUCH UNLESS YOU KNOW WHAT YOU'RE DOING -import Settings from './settings.js'; +import { load } from './settings.js'; import Games from './games.js'; import Apps from './apps.js'; import Frame from './frame.js'; @@ -7,6 +7,10 @@ import AppPlayer from './appplayer.js'; import WPM from './wpm.js'; import PolarisError from './error.js'; +const Settings = { + load: load +}; + fetch('/assets/misc/nav.html') .then(res => res.text()) .then(content => { @@ -22,8 +26,10 @@ fetch('/assets/misc/nav.html') onbeforeunload = (e) => { if (localStorage.getItem('prevent_close') === 'true') { e.preventDefault(); + return e; } + sessionStorage.clear(); } @@ -31,12 +37,45 @@ var previousLocation = location.pathname; const urlchange = setInterval(() => { if (location.pathname !== previousLocation) { + const frame = document.createElement('iframe'); + frame.src = location.pathname + frame.style = 'display: none'; + document.body.appendChild(frame); + frame.contentWindow.addEventListener('DOMContentLoaded', () => { + document.body.style.display = 'none'; + + window.onmessage = (e) => { + if (e.data == 'loaded') { + window.history.pushState({}, '', location.pathname); + document.documentElement.innerHTML = frame.contentWindow.document.documentElement.innerHTML; + document.body.style.display = 'none'; + + Settings.load(); + registerLinks(); + + if (location.pathname === '/games') Games.load(); + + if (location.pathname === '/apps') Apps.load(); + + if (location.pathname === '/search') WPM.load(); + + setTimeout(() => { + document.body.style.display = 'block'; + }, 500); + } + } + }); } previousLocation = location.pathname; }, 1); +window.onhashchange = () => { + if (location.hash === '#settings') document.querySelector('.sidebar').classList.add('active'); + else document.querySelector('.sidebar').classList.remove('active'); +}; + const registerLinks = () => { document.querySelectorAll('a').forEach(a => { a.onclick = (e) => { @@ -62,21 +101,11 @@ const registerLinks = () => { Settings.load(); registerLinks(); - if (location.pathname === '/games') { - Games.load(); - } + if (location.pathname === '/games') Games.load(); + if (location.pathname === '/apps') Apps.load(); + if (location.pathname === '/search') WPM.load(); - if (location.pathname === '/apps') { - Apps.load(); - } - - if (location.pathname === '/search') { - WPM.load(); - } - - setTimeout(() => { - document.body.style.display = 'block'; - }, 500); + setTimeout(() => document.body.style.display = 'block', 500); } } }); @@ -95,25 +124,11 @@ if (window.self === window.top) { Settings.load(); registerLinks(); - if (location.pathname === '/games') { - Games.load(); - } - - if (location.pathname === '/apps') { - Apps.load(); - } - - if (location.pathname === '/search') { - WPM.load(); - } - - if (location.pathname === '/play') { - Frame.load(); - } - - if (location.pathname === '/appplayer') { - AppPlayer.load(); - } + if (location.pathname === '/games') Games.load(); + if (location.pathname === '/apps') Apps.load(); + if (location.pathname === '/search') WPM.load(); + if (location.pathname === '/play') Frame.load(); + if (location.pathname === '/appplayer') AppPlayer.load(); }, 500); } @@ -124,8 +139,8 @@ if (location.pathname === '/') { const randomID = 1; // :3 const game = games[randomID]; - document.querySelector('.featuredimg').addEventListener('click', function() { - window.location.href = '/play?id=' + randomID; + document.querySelector('.featuredimg').addEventListener('click', function () { + window.location.href = '/play?id=' + randomID; }); document.querySelector('.featuredimg').src = game.image; }).catch(e => new PolarisError('Failed to load featured game')); diff --git a/static/assets/js/settings.js b/static/assets/js/settings.js index 8922ee4..b03a18f 100644 --- a/static/assets/js/settings.js +++ b/static/assets/js/settings.js @@ -7,13 +7,11 @@ const isScrollable = (element) => { class Settings { constructor() { - if (this.get('panic_key')) { - document.querySelector('#panic_key').value = this.get('panic_key'); - } + if (this.get('panic_key')) document.querySelector('#panic_key').value = this.get('panic_key'); - if (this.get('panic_url')) { - document.querySelector('#panic_url').value = this.get('panic_url'); - } + if (this.get('panic_url')) document.querySelector('#panic_url').value = this.get('panic_url'); + + if (this.get('proxy_type')) document.querySelector('#proxy_select').value = this.get('proxy_type'); if (this.get('cloak')) { document.querySelector('#cloak_select').value = this.get('cloak'); @@ -49,19 +47,14 @@ class Settings { document.querySelector('#domain').value = this.get('cloak_website'); document.querySelector('link[rel="shortcut icon"]').href = 'https://www.google.com/s2/favicons?domain=' + this.get('cloak_website'); } - } else { - fetch('/assets/JSON/cloaks.json') - .then(res => res.json()) - .then(cloaks => { - if (cloaks[this.get('cloak')]) { - document.title = cloaks[this.get('cloak')].title; - document.querySelector('link[rel="shortcut icon"]').href = cloaks[this.get('cloak')].icon; - } else { - /*new PolarisError(`The theme ${this.get('cloak')} does not exist`);*/ - //this is a very bad way of doing this it is going to break eventually but who cares - } - }); - } + } else fetch('/assets/JSON/cloaks.json') + .then(res => res.json()) + .then(cloaks => { + if (cloaks[this.get('cloak')]) { + document.title = cloaks[this.get('cloak')].title; + document.querySelector('link[rel="shortcut icon"]').href = cloaks[this.get('cloak')].icon; + } else if (this.get('cloak') !== 'none') new PolarisError(`The cloak ${this.get('cloak')} does not exist`); + }); } fetch('/assets/JSON/cloaks.json') @@ -93,12 +86,12 @@ class Settings { }); } else if (document.querySelector('#cloak_select').value == 'none') { this.set('cloak', document.querySelector('#cloak_select').value); - + document.title = 'Polaris'; document.querySelector('link[rel="shortcut icon"]').href = '/favicon.ico'; - + document.querySelector('#custom_cloak').classList.add('hidden'); - } + } else { if (cloaks[document.querySelector('#cloak_select').value]) { document.title = cloaks[document.querySelector('#cloak_select').value].title; @@ -114,6 +107,8 @@ class Settings { }); }); + document.querySelector('#proxy_select').addEventListener('change', (e) => this.set('proxy_type', e.target.value)); + document.querySelector('#reset_panic').addEventListener('click', (e) => { this.set('panic_key', ''); document.querySelector('#panic_key').value = 'No Key Selected'; @@ -253,4 +248,4 @@ const load = () => { new Settings(); }; -export default { load}; +export { load, Settings }; diff --git a/static/assets/js/uv.js b/static/assets/js/uv.js index ceb3404..4ec38dd 100644 --- a/static/assets/js/uv.js +++ b/static/assets/js/uv.js @@ -1,5 +1,3 @@ -import PolarisError from './error.js'; - const load = () => { const evBundle = document.createElement('script'); evBundle.src = '/uv/ev.bundle.js'; diff --git a/static/assets/js/wpm.js b/static/assets/js/wpm.js index 62e3af2..ec098d3 100644 --- a/static/assets/js/wpm.js +++ b/static/assets/js/wpm.js @@ -1,11 +1,27 @@ -/* Stands for Web prxy Manager because the keywork prxy is usually blocked */ +/* Stands for Web proxy Manager because the keywork proxy is usually blocked */ +import { isUrl, prependHttps, worker, workerLoaded } from './dynamic.js'; import uv from './uv.js'; +const getSetting = (name) => { + if (!localStorage.getItem('settings')) { + localStorage.setItem('settings', JSON.stringify({})); + } else { + try { + JSON.parse(localStorage.getItem('settings')); + } catch (e) { + localStorage.setItem('settings', JSON.stringify({})); + } + } + + const settings = JSON.parse(localStorage.getItem('settings')); + return settings[name]; +} + uv.load(); const load = () => { - function getURL(input, template) { + const getURL = (input, template) => { try { return new URL(input).toString(); } catch (e) { } @@ -25,8 +41,18 @@ const load = () => { form.addEventListener('submit', async (e) => { e.preventDefault(); - const url = getURL(query.value, 'https://www.google.com/search?q=%s'); - location.href = Easyviolet.getProxiedUrl(url); + if (getSetting('proxy_type') === 'ultraviolet' || !getSetting('proxy_type')) { + const url = getURL(query.value, 'https://www.google.com/search?q=%s'); + location.href = Easyviolet.getProxiedUrl(url); + } else if (getSetting('proxy_type') === 'dynamic') { + if (typeof navigator.serviceWorker === 'undefined') new PolarisError('Failed to load proxy'); + + if (!workerLoaded) await worker(); + + const url = isUrl(query.value) ? prependHttps(query.value) : 'https://www.google.com/search?q=' + encodeURIComponent(query.value); + + window.location.href = '/dynamic/service/route?url=' + encodeURIComponent(url); + } }); } diff --git a/static/assets/misc/nav.html b/static/assets/misc/nav.html index e87622b..e13f1ee 100644 --- a/static/assets/misc/nav.html +++ b/static/assets/misc/nav.html @@ -39,6 +39,12 @@ +

Proxy

+ +

Tab Cloak