From 35acc2ca76385a7123b1aabf0e5970e3994c6951 Mon Sep 17 00:00:00 2001 From: carince <99774021+carince@users.noreply.github.com> Date: Sun, 12 Nov 2023 10:57:28 +0800 Subject: [PATCH] 2.2.0 --- .eslintrc | 3 +- .gitignore | 6 +- build.mjs | 121 ++ config.example.json5 | 44 +- docs/1_INSTALLING.md | 2 +- docs/2_CONFIG.md | 49 +- package-lock.json | 2689 ++++++++++++----------------- package.json | 21 +- rollup.config.ts | 45 - src/analytics/balance.ts | 28 + src/analytics/crash.ts | 79 + src/analytics/index.html | 141 ++ src/analytics/index.ts | 69 + src/analytics/profile.ts | 11 + src/analytics/rain.ts | 43 + src/backend/api/game.ts | 33 - src/backend/api/log.ts | 16 - src/backend/api/rain.ts | 66 - src/backend/api/server.ts | 33 - src/backend/bloxflip/data.ts | 83 +- src/backend/bloxflip/user.ts | 48 +- src/backend/index.d.ts | 55 +- src/backend/index.ts | 23 +- src/backend/server/crash.ts | 22 + src/backend/server/logs.ts | 14 + src/backend/server/rain.ts | 81 + src/backend/server/server.ts | 54 + src/backend/server/user.ts | 28 + src/backend/utils/browser.ts | 17 - src/backend/utils/config.ts | 32 +- src/backend/utils/constants.ts | 5 + src/backend/utils/logger.ts | 92 +- src/backend/utils/pfetch.ts | 28 +- src/backend/utils/updater.ts | 12 +- src/userScript/bloxflip/bet.ts | 37 +- src/userScript/bloxflip/crash.ts | 96 +- src/userScript/bloxflip/rain.ts | 18 +- src/userScript/index.ts | 37 +- src/userScript/utils/api.ts | 11 - src/userScript/utils/config.ts | 39 +- src/userScript/utils/keepAlive.ts | 8 +- src/userScript/utils/logger.ts | 87 +- src/userScript/utils/ws.ts | 54 +- tailwind.config.cjs | 17 + tsconfig.json | 7 +- 45 files changed, 2238 insertions(+), 2266 deletions(-) create mode 100644 build.mjs delete mode 100644 rollup.config.ts create mode 100644 src/analytics/balance.ts create mode 100644 src/analytics/crash.ts create mode 100644 src/analytics/index.html create mode 100644 src/analytics/index.ts create mode 100644 src/analytics/profile.ts create mode 100644 src/analytics/rain.ts delete mode 100644 src/backend/api/game.ts delete mode 100644 src/backend/api/log.ts delete mode 100644 src/backend/api/rain.ts delete mode 100644 src/backend/api/server.ts create mode 100644 src/backend/server/crash.ts create mode 100644 src/backend/server/logs.ts create mode 100644 src/backend/server/rain.ts create mode 100644 src/backend/server/server.ts create mode 100644 src/backend/server/user.ts delete mode 100644 src/userScript/utils/api.ts create mode 100644 tailwind.config.cjs diff --git a/.eslintrc b/.eslintrc index ba0bfce..344ee20 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,7 +1,8 @@ { "env": { "es2022": true, - "node": true + "node": true, + "browser": true }, "extends": [ "eslint:recommended", diff --git a/.gitignore b/.gitignore index afbe3c9..8b11eb0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ node_modules -config.json5 -error.png +logs dist + +*.json5 +*.json tsconfig.tsbuildinfo .vscode \ No newline at end of file diff --git a/build.mjs b/build.mjs new file mode 100644 index 0000000..e2cda0d --- /dev/null +++ b/build.mjs @@ -0,0 +1,121 @@ +import { copyFile, readdir, mkdir, unlink, lstat, rmdir } from "fs/promises"; +import { existsSync as exists } from "fs"; +import { execSync } from "child_process"; + +import { rollup } from "rollup"; +import ts from "@rollup/plugin-typescript"; +import swc from "@rollup/plugin-swc"; +import esbuild from "rollup-plugin-esbuild"; + +const plugins = [ + ts(), + swc(), + esbuild({ + minify: false, + treeShaking: false, + format: "esm" + }) +]; + +// Clear and make paths +async function delDirRecursively(path) { + if (!exists(path)) return; + + for (const file of await readdir(path)) { + const filePath = `${path}/${file}`; + if ((await lstat(filePath)).isDirectory()) { + await delDirRecursively(filePath); + } else { + console.log(`Deleting file: ${filePath}`); + await unlink(filePath); + } + } + + console.log(`Deleting folder: ${path}`); + await rmdir(path); +} +await delDirRecursively("./dist"); + +await mkdir("./dist"); +await mkdir("./dist/pages"); +await mkdir("./dist/pages/public"); + +// Copy static files for analytics page. +await copyFile("./src/analytics/index.html", "./dist/pages/index.html"); +await copyFile("./node_modules/socket.io/client-dist/socket.io.js", "./dist/pages/public/socket.io.js"); + +if (exists("./src/analytics/public")) { + for (const file of await readdir("./src/analytics/public")) { + copyFile(`./src/analytics/public/${file}`, `./dist/pages/public/${file}`); + } +} + +// Backend +console.log("Building Backend..."); +try { + const backend = await rollup({ + input: "./src/backend/index.ts", + onwarn: () => { return; }, + plugins + }); + + await backend.write({ + file: "./dist/index.js", + format: "esm", + compact: true + }); + await backend.close(); + + console.log("Successfully built Backend!"); +} catch (err) { + console.error(`Failed to build Backend:\n ${err}`); + process.exit(1); +} + +// UserScript +console.log("Building UserScript..."); +try { + const userScript = await rollup({ + input: "./src/userscript/index.ts", + onwarn: () => { return; }, + plugins + }); + + await userScript.write({ + file: "./dist/userscript.js", + format: "cjs", + compact: true + }); + await userScript.close(); + + console.log("Successfully built UserScript!"); +} catch (err) { + console.error(`Failed to build UserScript:\n ${err}`); +} + +// Analytics Page +console.log("Building Analytics..."); +try { + const analytics = await rollup({ + input: "./src/analytics/index.ts", + onwarn: () => { return; }, + plugins + }); + + await analytics.write({ + file: "./dist/pages/public/index.js", + format: "cjs", + compact: true + }); + await analytics.close(); + + console.log("Successfully built Analytics!"); +} catch (err) { + console.error(`Failed to build Analytics:\n ${err}`); + process.exit(1); +} + +if (process.argv.includes("--run")) { + console.log("Running bloxflip-autocrash..."); + execSync("node .", { stdio: "inherit" }); +} diff --git a/config.example.json5 b/config.example.json5 index c1a5401..5bd19f9 100644 --- a/config.example.json5 +++ b/config.example.json5 @@ -1,39 +1,29 @@ { "auth": "", "bet": { - "tries": 13, - "custom": 0, - "multiplier": 2 + "tries": 12, + "startingBet": 0, + "autoCashout": 2 }, - "webhook": { - "enabled": true, - "link": "" - }, - "modules": { - "rain": { - "enabled": true, - "minimum": 0, - "notifications": { - "os_notifs": true, - "webhook": { - "enabled": true, - "ping_id": 0 - } - } - }, - "analytics": { - "enabled": false, - "notifications": { - "webhook": false + "rain": { + "enabled": true, + "minimum": 0, + "notifications": { + "os_notifs": false, + "webhook": { + "enabled": false, + "link": "", + "ping_id": 0 } - }, - "updater": { - "enabled": true } }, + "updater": { + "enabled": false, + "autoUpdate": false + }, // For debugging purposes only, dont touch if you dont know what you are doing "debugging": { "headless": true, - "verbose": false + "verbose": true } } \ No newline at end of file diff --git a/docs/1_INSTALLING.md b/docs/1_INSTALLING.md index 27754cf..8aba2c9 100644 --- a/docs/1_INSTALLING.md +++ b/docs/1_INSTALLING.md @@ -24,7 +24,7 @@ npm i - Run the bot! 🚀 ```bash -npm run start +npm start ``` ### 🆕 Updating diff --git a/docs/2_CONFIG.md b/docs/2_CONFIG.md index 362f259..2ff486e 100644 --- a/docs/2_CONFIG.md +++ b/docs/2_CONFIG.md @@ -1,44 +1,33 @@ # Config Documentation auth: Your Bloxflip token - + bet: { tries: How many times your balance will be divided to 2 - custom: Custom starting bet, tries will be ignored if this is set. - multiplier: At what multiplier you want to cashout - } - - webhook: { - enabled: Toggle webhook - link: Your Discord webhook URL + startingBet: Custom starting bet tries will be ignored if this is set + autoCashout: At what multiplier you want to cashout } - modules: { - rain: { - enabled: Toggle rain notifications - minimum: Minimum robux to notify - notifications: { - os_notifs: Toggle sending OS notifications - webhook { - enabled: Toggle rain notifications in webhook - ping_id: UserID to ping - } - } - } - - analytics: { - enabled: Toggle analytics notifications - notifications: { - webhook: Toggle analytic notifications in webhook + rain: { + enabled: Toggle rain notifications + minimum: Minimum robux to notify + notifications: { + os_notifs: Toggle sending OS notifications + webhook: { + enabled: Toggle sending webhook embeds + link: Discord Webhook link + ping_id: User/Role ID to ping. } } + } - updater: { - enabled: Toggle checking for updates - } + updater: { + enabled: Toggle update notifier + autoUpdate: Toggle auto updating } + // For debugging purposes only dont touch if you dont know what you are doing debugging: { - headless: Toggle chrome headless mode - verbose: Show more verbose logs in console + headless: Toggle chrome headless mode. + verbose: Toggle info logs. } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 500c46e..7fdf8eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,52 +1,41 @@ { "name": "bloxflip-autocrash", - "version": "1.1.2", + "version": "2.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bloxflip-autocrash", - "version": "1.1.2", + "version": "2.1.1", "license": "ISC", "dependencies": { - "@types/node": "^18.8.4", "chalk": "^4.1.2", + "chart.js": "^4.3.0", "express": "^4.18.2", - "hagen": "^2.0.2", "json5": "^2.2.1", "node-notifier": "^10.0.1", + "open": "^9.1.0", "puppeteer": "^17.1.3", "puppeteer-extra": "^3.3.4", "puppeteer-extra-plugin-stealth": "^2.11.1", + "socket.io": "^4.6.1", "socket.io-client": "^4.6.1" }, "devDependencies": { - "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-commonjs": "^25.0.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-swc": "^0.1.1", "@rollup/plugin-typescript": "^11.1.0", + "@swc/core": "^1.3.59", "@types/express": "^4.17.17", "@types/node-notifier": "^8.0.2", "@typescript-eslint/eslint-plugin": "^5.38.0", - "nodemon": "^2.0.20", "rollup": "^3.20.2", "rollup-plugin-esbuild": "^5.0.0", - "rollup-plugin-typescript-paths": "^1.4.0", - "ts-node": "^10.9.1", "tslib": "^2.5.0", "typescript": "^4.8.3" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/android-arm": { "version": "0.17.16", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz", @@ -445,31 +434,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true - }, "node_modules/@humanwhocodes/config-array": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", @@ -485,31 +449,6 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true - }, "node_modules/@humanwhocodes/gitignore-to-minimatch": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", @@ -542,30 +481,16 @@ "dev": true, "peer": true }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -602,10 +527,75 @@ "node": ">= 8" } }, + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.0.tgz", + "integrity": "sha512-hoho2Kay9TZrLu0bnDsTTCaj4Npa+THk9snajP/XDNb9a9mmjTjh52EQM9sKl3HD1LsnihX7js+eA2sd2uKAhw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@rollup/plugin-node-resolve": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz", - "integrity": "sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.1", @@ -627,6 +617,27 @@ } } }, + "node_modules/@rollup/plugin-swc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-swc/-/plugin-swc-0.1.1.tgz", + "integrity": "sha512-nDbcgC39Y0NWsvSd3O2B7qLB19lVkX5rCqRVDqkS991WL2WVpJyp2vX0pa2W5OviwyG/UFxCypkc6NiC6C6r5Q==", + "dev": true, + "dependencies": { + "smob": "^1.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@swc/core": "^1.3.x", + "rollup": "^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-typescript": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz", @@ -681,13 +692,11 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, "node_modules/@swc/core": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.49.tgz", - "integrity": "sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.59.tgz", + "integrity": "sha512-ZBw31zd2E5SXiodwGvjQdx5ZC90b2uyX/i2LeMMs8LKfXD86pfOfQac+JVrnyEKDhASXj9icgsF9NXBhaMr3Kw==", "dev": true, "hasInstallScript": true, - "optional": true, - "peer": true, "engines": { "node": ">=10" }, @@ -696,16 +705,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.49", - "@swc/core-darwin-x64": "1.3.49", - "@swc/core-linux-arm-gnueabihf": "1.3.49", - "@swc/core-linux-arm64-gnu": "1.3.49", - "@swc/core-linux-arm64-musl": "1.3.49", - "@swc/core-linux-x64-gnu": "1.3.49", - "@swc/core-linux-x64-musl": "1.3.49", - "@swc/core-win32-arm64-msvc": "1.3.49", - "@swc/core-win32-ia32-msvc": "1.3.49", - "@swc/core-win32-x64-msvc": "1.3.49" + "@swc/core-darwin-arm64": "1.3.59", + "@swc/core-darwin-x64": "1.3.59", + "@swc/core-linux-arm-gnueabihf": "1.3.59", + "@swc/core-linux-arm64-gnu": "1.3.59", + "@swc/core-linux-arm64-musl": "1.3.59", + "@swc/core-linux-x64-gnu": "1.3.59", + "@swc/core-linux-x64-musl": "1.3.59", + "@swc/core-win32-arm64-msvc": "1.3.59", + "@swc/core-win32-ia32-msvc": "1.3.59", + "@swc/core-win32-x64-msvc": "1.3.59" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -717,9 +726,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.49.tgz", - "integrity": "sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.59.tgz", + "integrity": "sha512-AnqWFBgEKHP0jb4iZqx7eVQT9/rX45+DE4Ox7GpwCahUKxxrsDLyXzKhwLwQuAjUvtu5JcSB77szKpPGDM49fQ==", "cpu": [ "arm64" ], @@ -728,15 +737,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.49.tgz", - "integrity": "sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.59.tgz", + "integrity": "sha512-iqDs+yii9mOsmpJez82SEi4d4prWDRlapHxKnDVJ0x1AqRo41vIq8t3fujrvCHYU5VQgOYGh4ooXQpaP2H3B2A==", "cpu": [ "x64" ], @@ -745,15 +753,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.49.tgz", - "integrity": "sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.59.tgz", + "integrity": "sha512-PB0PP+SgkCSd/kYmltnPiGv42cOSaih1OjXCEjxvNwUFEmWqluW6uGdWaNiR1LoYMxhcHZTc336jL2+O3l6p0Q==", "cpu": [ "arm" ], @@ -762,15 +769,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.49.tgz", - "integrity": "sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.59.tgz", + "integrity": "sha512-Ol/JPszWZ+OZ44FOdJe35TfJ1ckG4pYaisZJ4E7PzfwfVe2ygX85C5WWR4e5L0Y1zFvzpcI7gdyC2wzcXk4Cig==", "cpu": [ "arm64" ], @@ -779,15 +785,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.49.tgz", - "integrity": "sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.59.tgz", + "integrity": "sha512-PtTTtGbj9GiY5gJdoSFL2A0vL6BRaS1haAhp6g3hZvLDkTTg+rJURmzwBMMjaQlnGC62x/lLf6MoszHG/05//Q==", "cpu": [ "arm64" ], @@ -796,15 +801,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.49.tgz", - "integrity": "sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.59.tgz", + "integrity": "sha512-XBW9AGi0YsIN76IfesnDSBn/5sjR69J75KUNte8sH6seYlHJ0/kblqUMbUcfr0CiGoJadbzAZeKZZmfN7EsHpg==", "cpu": [ "x64" ], @@ -813,15 +817,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.49.tgz", - "integrity": "sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.59.tgz", + "integrity": "sha512-Cy5E939SdWPQ34cg6UABNO0RyEe0FuWqzZ/GLKtK11Ir4fjttVlucZiY59uQNyUVUc8T2qE0VBFCyD/zYGuHtg==", "cpu": [ "x64" ], @@ -830,15 +833,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.49.tgz", - "integrity": "sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.59.tgz", + "integrity": "sha512-z5ZJxizRvRoSAaevRIi3YjQh74OFWEIhonSDWNdqDL7RbjEivcatYcG7OikH6s+rtPhOcwNm3PbGV2Prcgh/gg==", "cpu": [ "arm64" ], @@ -847,15 +849,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.49.tgz", - "integrity": "sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.59.tgz", + "integrity": "sha512-vxpsn+hrKAhi5YusQfB/JXUJJVX40rIRE/L49ilBEqdbH8Khkoego6AD+2vWqTdJcUHo1WiAIAEZ0rTsjyorLQ==", "cpu": [ "ia32" ], @@ -864,15 +865,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=10" } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.49.tgz", - "integrity": "sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.59.tgz", + "integrity": "sha512-Ris/cJbURylcLwqz4RZUUBCEGsuaIHOJsvf69W5pGKHKBryVoOTNhBKpo3Km2hoAi5qFQ/ou0trAT4hBsVPZvQ==", "cpu": [ "x64" ], @@ -881,43 +881,10 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=10" } }, - "node_modules/@swc/wasm": { - "version": "1.2.122", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.122.tgz", - "integrity": "sha512-sM1VCWQxmNhFtdxME+8UXNyPNhxNu7zdb6ikWpz0YKAQQFRGT5ThZgJrubEpah335SUToNg8pkdDF7ibVCjxbQ==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", @@ -937,6 +904,19 @@ "@types/node": "*" } }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -1074,29 +1054,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -1140,31 +1097,6 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true - }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.38.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.38.0.tgz", @@ -1209,29 +1141,6 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/types": { "version": "5.38.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.38.0.tgz", @@ -1272,29 +1181,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -1351,12 +1237,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -1374,6 +1254,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1391,15 +1272,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1411,38 +1283,17 @@ "node": ">= 6.0.0" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { "type": "github", @@ -1473,25 +1324,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1545,13 +1377,20 @@ } ] }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "engines": { - "node": ">=8" + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" } }, "node_modules/bl": { @@ -1600,6 +1439,17 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1664,6 +1514,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -1728,31 +1592,15 @@ "node": ">=8" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/chart.js": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.3.0.tgz", + "integrity": "sha512-ynG0E79xGfMaV2xAHdbhwiPLczxnNNnasrmPEXriXsPJGjmhOBYzFVEsB65w2qMDz+CaBJJuJD0inE/ab/h36g==", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@kurkle/color": "^0.3.0" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "pnpm": ">=7" } }, "node_modules/chownr": { @@ -1791,6 +1639,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1828,11 +1682,17 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } }, "node_modules/cross-fetch": { "version": "3.1.5", @@ -1846,8 +1706,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1858,14 +1716,26 @@ } }, "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -1881,6 +1751,49 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -1903,15 +1816,6 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1036444.tgz", "integrity": "sha512-0y4f/T8H9lsESV9kKP1HDUXgHxCdniFeJh6Erq+FbdOEvp/Ydp9t8kcAAM5gOd17pMrTDlFWntoHtzzeTUWKNw==" }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1958,6 +1862,26 @@ "once": "^1.4.0" } }, + "node_modules/engine.io": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/engine.io-client": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz", @@ -1970,27 +1894,6 @@ "xmlhttprequest-ssl": "~2.0.0" } }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/engine.io-parser": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", @@ -1999,6 +1902,14 @@ "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/es-module-lexer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", @@ -2167,24 +2078,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -2222,13 +2115,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true - }, "node_modules/espree": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", @@ -2324,6 +2210,39 @@ "node": ">= 0.6" } }, + "node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -2397,27 +2316,6 @@ "@types/yauzl": "^2.9.1" } }, - "node_modules/extract-zip/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2753,17 +2651,6 @@ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" }, - "node_modules/hagen": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hagen/-/hagen-2.0.2.tgz", - "integrity": "sha512-0dMY1oBLOOWEUbPnhoGhy03io2+fHa6Iz8dOjsyqlqhKYZN+jO0v18VG6I3ALNT/1WAicNlnUZcwRbnHr/LSzQ==", - "dependencies": { - "chalk": "^4" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -2775,15 +2662,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -2822,27 +2700,14 @@ "node": ">= 6" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=14.18.0" } }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -2882,12 +2747,6 @@ "node": ">= 4" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -2937,18 +2796,6 @@ "node": ">= 0.10" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -3024,6 +2871,37 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -3050,6 +2928,26 @@ "node": ">=0.10.0" } }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -3212,11 +3110,17 @@ "node": ">=10" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } }, "node_modules/media-typer": { "version": "0.3.0", @@ -3244,6 +3148,11 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -3304,6 +3213,17 @@ "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3406,54 +3326,35 @@ "node": ">=10" } }, - "node_modules/nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", - "dev": true, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, + "node_modules/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==", "engines": { "node": ">=0.10.0" } @@ -3485,6 +3386,37 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -3578,8 +3510,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -3656,12 +3586,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -3782,27 +3706,6 @@ } } }, - "node_modules/puppeteer-extra-plugin-stealth/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-stealth/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/puppeteer-extra-plugin-user-data-dir": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.0.tgz", @@ -3829,27 +3732,6 @@ } } }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/puppeteer-extra-plugin-user-preferences": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.0.tgz", @@ -3876,90 +3758,6 @@ } } }, - "node_modules/puppeteer-extra-plugin-user-preferences/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin-user-preferences/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/puppeteer-extra-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/puppeteer-extra/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer-extra/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/puppeteer/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/puppeteer/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/puppeteer/node_modules/ws": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", @@ -4049,18 +3847,6 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -4161,36 +3947,111 @@ "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" } }, - "node_modules/rollup-plugin-esbuild/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", "dependencies": { - "ms": "2.1.2" + "execa": "^5.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup-plugin-esbuild/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } }, - "node_modules/rollup-plugin-typescript-paths": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript-paths/-/rollup-plugin-typescript-paths-1.4.0.tgz", - "integrity": "sha512-6EgeLRjTVmymftEyCuYu91XzY5XMB5lR0YrJkeT0D7OG2RGSdbNL+C/hfPIdc/sjMa9Sl5NLsxIr6C/+/5EUpA==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.4" + "node_modules/run-applescript/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" } }, "node_modules/run-parallel": { @@ -4240,15 +4101,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -4341,8 +4193,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "peer": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4354,8 +4204,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -4378,26 +4226,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/slash": { "version": "3.0.0", @@ -4408,74 +4240,62 @@ "node": ">=8" } }, - "node_modules/socket.io-client": { + "node_modules/smob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.1.1.tgz", + "integrity": "sha512-i5aqEBPnDv9d77+NDxfjROtywxzNdAVNyaOr+RsLhM28Ts+Ar7luIp/Q+SBYa6wv/7BBcOpEkrhtDxsl2WA9Jg==", + "dev": true + }, + "node_modules/socket.io": { "version": "4.6.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.1.tgz", - "integrity": "sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", "dependencies": { - "@socket.io/component-emitter": "~3.1.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io-client": "~6.4.0", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "ws": "~8.11.0" } }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", + "node_modules/socket.io-client": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.1.tgz", + "integrity": "sha512-5UswCV6hpaRsNg5kkEHVcbBIXEYoVbMQaHJBXJCyEQ+CiFPV1NIOY0XOFWG4XR4GZcB8Kn6AsRs/9cy9TbqVMQ==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.3.2", + "engine.io-client": "~6.4.0", + "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/socket.io-parser": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", + "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", "dependencies": { - "ms": "2.1.2" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -4505,6 +4325,17 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4518,18 +4349,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -4580,6 +4399,17 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4600,66 +4430,11 @@ "node": ">=0.6" } }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -4747,12 +4522,6 @@ "through": "^2.3.8" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -4769,6 +4538,14 @@ "node": ">= 0.8" } }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "engines": { + "node": ">=8" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4800,12 +4577,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -4899,15 +4670,6 @@ "fd-slicer": "~1.1.0" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -4923,15 +4685,6 @@ } }, "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, "@esbuild/android-arm": { "version": "0.17.16", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz", @@ -5124,25 +4877,6 @@ "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true - } } }, "@humanwhocodes/config-array": { @@ -5155,25 +4889,6 @@ "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true - } } }, "@humanwhocodes/gitignore-to-minimatch": { @@ -5197,27 +4912,16 @@ "dev": true, "peer": true }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } + "@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -5245,10 +4949,57 @@ "fastq": "^1.6.0" } }, + "@rollup/plugin-commonjs": { + "version": "25.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.0.tgz", + "integrity": "sha512-hoho2Kay9TZrLu0bnDsTTCaj4Npa+THk9snajP/XDNb9a9mmjTjh52EQM9sKl3HD1LsnihX7js+eA2sd2uKAhw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "@rollup/plugin-node-resolve": { - "version": "15.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.2.tgz", - "integrity": "sha512-Y35fRGUjC3FaurG722uhUuG8YHOJRJQbI6/CkbRkdPotSpDj9NtIN85z1zrcyDcCQIW4qp5mgG72U+gJ0TAFEg==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz", + "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==", "dev": true, "requires": { "@rollup/pluginutils": "^5.0.1", @@ -5259,6 +5010,15 @@ "resolve": "^1.22.1" } }, + "@rollup/plugin-swc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-swc/-/plugin-swc-0.1.1.tgz", + "integrity": "sha512-nDbcgC39Y0NWsvSd3O2B7qLB19lVkX5rCqRVDqkS991WL2WVpJyp2vX0pa2W5OviwyG/UFxCypkc6NiC6C6r5Q==", + "dev": true, + "requires": { + "smob": "^1.0.0" + } + }, "@rollup/plugin-typescript": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-11.1.0.tgz", @@ -5286,136 +5046,92 @@ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, "@swc/core": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.49.tgz", - "integrity": "sha512-br44ZHOfE9YyRGcORSLkHFQHTvhwRcaithBJ1Q5y5iMGpLbH0Wai3GN49L60RvmGwxNJfWzT+E7+rNNR7ewKgA==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.59.tgz", + "integrity": "sha512-ZBw31zd2E5SXiodwGvjQdx5ZC90b2uyX/i2LeMMs8LKfXD86pfOfQac+JVrnyEKDhASXj9icgsF9NXBhaMr3Kw==", "dev": true, - "optional": true, - "peer": true, "requires": { - "@swc/core-darwin-arm64": "1.3.49", - "@swc/core-darwin-x64": "1.3.49", - "@swc/core-linux-arm-gnueabihf": "1.3.49", - "@swc/core-linux-arm64-gnu": "1.3.49", - "@swc/core-linux-arm64-musl": "1.3.49", - "@swc/core-linux-x64-gnu": "1.3.49", - "@swc/core-linux-x64-musl": "1.3.49", - "@swc/core-win32-arm64-msvc": "1.3.49", - "@swc/core-win32-ia32-msvc": "1.3.49", - "@swc/core-win32-x64-msvc": "1.3.49" + "@swc/core-darwin-arm64": "1.3.59", + "@swc/core-darwin-x64": "1.3.59", + "@swc/core-linux-arm-gnueabihf": "1.3.59", + "@swc/core-linux-arm64-gnu": "1.3.59", + "@swc/core-linux-arm64-musl": "1.3.59", + "@swc/core-linux-x64-gnu": "1.3.59", + "@swc/core-linux-x64-musl": "1.3.59", + "@swc/core-win32-arm64-msvc": "1.3.59", + "@swc/core-win32-ia32-msvc": "1.3.59", + "@swc/core-win32-x64-msvc": "1.3.59" } }, "@swc/core-darwin-arm64": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.49.tgz", - "integrity": "sha512-g7aIfXh6uPHmhLXdjXQq5t3HAyS/EdvujasW1DIS5k8UqOBaSoCcSGtLIjzcLv3KujqNfYcm118E+12H0nY6fQ==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.59.tgz", + "integrity": "sha512-AnqWFBgEKHP0jb4iZqx7eVQT9/rX45+DE4Ox7GpwCahUKxxrsDLyXzKhwLwQuAjUvtu5JcSB77szKpPGDM49fQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-darwin-x64": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.49.tgz", - "integrity": "sha512-eSIxVX0YDw40Bre5sAx2BV3DzdIGzmQvCf2yiBvLqiiL6GC0mmuDeWbUCAzdUX6fJ6FUVEBMUVqNOc9oJ2/d5w==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.59.tgz", + "integrity": "sha512-iqDs+yii9mOsmpJez82SEi4d4prWDRlapHxKnDVJ0x1AqRo41vIq8t3fujrvCHYU5VQgOYGh4ooXQpaP2H3B2A==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-arm-gnueabihf": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.49.tgz", - "integrity": "sha512-8mj3IcRVr/OJY0mVITz6Z5osNAMJK5GiKDaZ+3QejPLbl6aiu4sH4GmTHDRN14RnaVXOpecsGcUoQmNoNa3u3w==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.59.tgz", + "integrity": "sha512-PB0PP+SgkCSd/kYmltnPiGv42cOSaih1OjXCEjxvNwUFEmWqluW6uGdWaNiR1LoYMxhcHZTc336jL2+O3l6p0Q==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-arm64-gnu": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.49.tgz", - "integrity": "sha512-Rmg9xw6tmpOpf6GKKjpHQGmjfHzqSths5ebI2ahrHlhekzZF2HYmPkVw4bHda8Bja6mbaw8FVBgBHjPU8mMeDA==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.59.tgz", + "integrity": "sha512-Ol/JPszWZ+OZ44FOdJe35TfJ1ckG4pYaisZJ4E7PzfwfVe2ygX85C5WWR4e5L0Y1zFvzpcI7gdyC2wzcXk4Cig==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-arm64-musl": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.49.tgz", - "integrity": "sha512-nlKPYMogAI3Aak6Mlkag8/2AlHAZ/DpH7RjhfMazsaGhD/sQOmYdyY9Al69ejpa419YJuREeeeLoojFlSsd30g==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.59.tgz", + "integrity": "sha512-PtTTtGbj9GiY5gJdoSFL2A0vL6BRaS1haAhp6g3hZvLDkTTg+rJURmzwBMMjaQlnGC62x/lLf6MoszHG/05//Q==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-x64-gnu": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.49.tgz", - "integrity": "sha512-QOyeJQ6NVi73SJcizbwvIZTiGA/N+BxX9liRrvibumaQmRh8fWjJiLNsv3ODSHeuonak7E8Bf7a7NnSTyu48Mw==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.59.tgz", + "integrity": "sha512-XBW9AGi0YsIN76IfesnDSBn/5sjR69J75KUNte8sH6seYlHJ0/kblqUMbUcfr0CiGoJadbzAZeKZZmfN7EsHpg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-x64-musl": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.49.tgz", - "integrity": "sha512-WlDMz+SOpYC9O/ZBUw1oiyWI7HyUCMlf/HS8Fy/kRI3eGoGCUxVTCJ1mP57GdQr4Wg32Y/ZpO2KSNQFWnT8mAw==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.59.tgz", + "integrity": "sha512-Cy5E939SdWPQ34cg6UABNO0RyEe0FuWqzZ/GLKtK11Ir4fjttVlucZiY59uQNyUVUc8T2qE0VBFCyD/zYGuHtg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-win32-arm64-msvc": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.49.tgz", - "integrity": "sha512-41LZOeI94Za3twib8KOIjnHYAZ+nkBFmboaREsFR1760S7jiMVywqWX8nFZvn/CXj15Fjjgdgyuig+zMREwXwQ==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.59.tgz", + "integrity": "sha512-z5ZJxizRvRoSAaevRIi3YjQh74OFWEIhonSDWNdqDL7RbjEivcatYcG7OikH6s+rtPhOcwNm3PbGV2Prcgh/gg==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-win32-ia32-msvc": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.49.tgz", - "integrity": "sha512-IdqLPoMKssyAoOCZdNXmnAd6/uyx+Hb9KSfZUHepZaNfwMy6J5XXrOsbYs3v53FH8MtekUUdV+mMX4me9bcv9w==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.59.tgz", + "integrity": "sha512-vxpsn+hrKAhi5YusQfB/JXUJJVX40rIRE/L49ilBEqdbH8Khkoego6AD+2vWqTdJcUHo1WiAIAEZ0rTsjyorLQ==", "dev": true, - "optional": true, - "peer": true + "optional": true }, "@swc/core-win32-x64-msvc": { - "version": "1.3.49", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.49.tgz", - "integrity": "sha512-7Fqjo5pS3uIohhSbYSaR0+e/bJdxmQb4oG97FIh5qvlCCGQaQ9UiaEeYy4uK0Ad+Menum1IXCAEiG7RHcl6Eyw==", - "dev": true, - "optional": true, - "peer": true - }, - "@swc/wasm": { - "version": "1.2.122", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.2.122.tgz", - "integrity": "sha512-sM1VCWQxmNhFtdxME+8UXNyPNhxNu7zdb6ikWpz0YKAQQFRGT5ThZgJrubEpah335SUToNg8pkdDF7ibVCjxbQ==", + "version": "1.3.59", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.59.tgz", + "integrity": "sha512-Ris/cJbURylcLwqz4RZUUBCEGsuaIHOJsvf69W5pGKHKBryVoOTNhBKpo3Km2hoAi5qFQ/ou0trAT4hBsVPZvQ==", "dev": true, - "optional": true, - "peer": true - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "optional": true }, "@types/body-parser": { "version": "1.19.2", @@ -5436,6 +5152,19 @@ "@types/node": "*" } }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "requires": { + "@types/node": "*" + } + }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -5557,21 +5286,6 @@ "tsutils": "^3.21.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -5594,25 +5308,6 @@ "@typescript-eslint/types": "5.38.0", "@typescript-eslint/typescript-estree": "5.38.0", "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true - } } }, "@typescript-eslint/scope-manager": { @@ -5635,23 +5330,6 @@ "@typescript-eslint/utils": "5.38.0", "debug": "^4.3.4", "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/types": { @@ -5675,21 +5353,6 @@ "tsutils": "^3.21.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -5725,12 +5388,6 @@ "eslint-visitor-keys": "^3.3.0" } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -5744,7 +5401,8 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -5754,33 +5412,12 @@ "peer": true, "requires": {} }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "ajv": { @@ -5811,22 +5448,6 @@ "color-convert": "^2.0.1" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5860,11 +5481,15 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "bl": { "version": "4.1.0", @@ -5910,6 +5535,14 @@ } } }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "requires": { + "big-integer": "^1.6.44" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5948,6 +5581,14 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "requires": { + "run-applescript": "^5.0.0" + } + }, "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -5993,20 +5634,12 @@ } } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "chart.js": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.3.0.tgz", + "integrity": "sha512-ynG0E79xGfMaV2xAHdbhwiPLczxnNNnasrmPEXriXsPJGjmhOBYzFVEsB65w2qMDz+CaBJJuJD0inE/ab/h36g==", "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@kurkle/color": "^0.3.0" } }, "chownr": { @@ -6039,6 +5672,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6067,11 +5706,14 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "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" + } }, "cross-fetch": { "version": "3.1.5", @@ -6085,8 +5727,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "peer": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6094,12 +5734,18 @@ } }, "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "deep-is": { @@ -6114,6 +5760,31 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -6129,12 +5800,6 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1036444.tgz", "integrity": "sha512-0y4f/T8H9lsESV9kKP1HDUXgHxCdniFeJh6Erq+FbdOEvp/Ydp9t8kcAAM5gOd17pMrTDlFWntoHtzzeTUWKNw==" }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6172,6 +5837,30 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "dependencies": { + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + } + } + }, "engine.io-client": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.4.0.tgz", @@ -6182,21 +5871,6 @@ "engine.io-parser": "~5.0.3", "ws": "~8.11.0", "xmlhttprequest-ssl": "~2.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "engine.io-parser": { @@ -6301,16 +5975,6 @@ "text-table": "^0.2.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.1.2" - } - }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -6338,13 +6002,6 @@ "requires": { "is-glob": "^4.0.3" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "peer": true } } }, @@ -6453,6 +6110,29 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + } + } + }, "express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -6509,27 +6189,12 @@ "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" } }, "fast-deep-equal": { @@ -6796,14 +6461,6 @@ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" }, - "hagen": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hagen/-/hagen-2.0.2.tgz", - "integrity": "sha512-0dMY1oBLOOWEUbPnhoGhy03io2+fHa6Iz8dOjsyqlqhKYZN+jO0v18VG6I3ALNT/1WAicNlnUZcwRbnHr/LSzQ==", - "requires": { - "chalk": "^4" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -6812,12 +6469,6 @@ "function-bind": "^1.1.1" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -6842,23 +6493,13 @@ "requires": { "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -6878,12 +6519,6 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6921,15 +6556,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -6978,6 +6604,21 @@ "is-extglob": "^2.1.1" } }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "requires": { + "is-docker": "^3.0.0" + }, + "dependencies": { + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" + } + } + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -6998,6 +6639,20 @@ "isobject": "^3.0.1" } }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -7122,11 +6777,14 @@ "yallist": "^4.0.0" } }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } }, "media-typer": { "version": "0.3.0", @@ -7148,6 +6806,11 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -7187,6 +6850,11 @@ "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7264,38 +6932,25 @@ } } }, - "nodemon": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", - "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "requires": { - "abbrev": "1" + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "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.3", @@ -7318,6 +6973,25 @@ "wrappy": "1" } }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -7383,9 +7057,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "peer": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -7441,12 +7113,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7481,19 +7147,6 @@ "ws": "8.8.1" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "ws": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", @@ -7510,21 +7163,6 @@ "@types/debug": "^4.1.0", "debug": "^4.1.1", "deepmerge": "^4.2.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "puppeteer-extra-plugin": { @@ -7535,21 +7173,6 @@ "@types/debug": "^4.1.0", "debug": "^4.1.1", "merge-deep": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "puppeteer-extra-plugin-stealth": { @@ -7560,21 +7183,6 @@ "debug": "^4.1.1", "puppeteer-extra-plugin": "^3.2.2", "puppeteer-extra-plugin-user-preferences": "^2.4.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "puppeteer-extra-plugin-user-data-dir": { @@ -7586,21 +7194,6 @@ "fs-extra": "^10.0.0", "puppeteer-extra-plugin": "^3.2.2", "rimraf": "^3.0.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "puppeteer-extra-plugin-user-preferences": { @@ -7612,21 +7205,6 @@ "deepmerge": "^4.2.2", "puppeteer-extra-plugin": "^3.2.2", "puppeteer-extra-plugin-user-data-dir": "^2.4.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "qs": { @@ -7669,15 +7247,6 @@ "util-deprecate": "^1.0.1" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -7736,32 +7305,75 @@ "es-module-lexer": "^1.0.5", "joycon": "^3.1.1", "jsonc-parser": "^3.2.0" + } + }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "requires": { + "execa": "^5.0.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { - "ms": "2.1.2" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" } } }, - "rollup-plugin-typescript-paths": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript-paths/-/rollup-plugin-typescript-paths-1.4.0.tgz", - "integrity": "sha512-6EgeLRjTVmymftEyCuYu91XzY5XMB5lR0YrJkeT0D7OG2RGSdbNL+C/hfPIdc/sjMa9Sl5NLsxIr6C/+/5EUpA==", - "dev": true, - "requires": {} - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7781,12 +7393,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, "send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -7870,8 +7476,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "peer": true, "requires": { "shebang-regex": "^3.0.0" } @@ -7879,9 +7483,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "peer": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shellwords": { "version": "0.1.1", @@ -7898,22 +7500,10 @@ "object-inspect": "^1.9.0" } }, - "simple-update-notifier": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz", - "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==", - "dev": true, - "requires": { - "semver": "~7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "slash": { "version": "3.0.0", @@ -7921,6 +7511,33 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "smob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.1.1.tgz", + "integrity": "sha512-i5aqEBPnDv9d77+NDxfjROtywxzNdAVNyaOr+RsLhM28Ts+Ar7luIp/Q+SBYa6wv/7BBcOpEkrhtDxsl2WA9Jg==", + "dev": true + }, + "socket.io": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + } + }, + "socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "requires": { + "ws": "~8.11.0" + } + }, "socket.io-client": { "version": "4.6.1", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.6.1.tgz", @@ -7930,45 +7547,15 @@ "debug": "~4.3.2", "engine.io-client": "~6.4.0", "socket.io-parser": "~4.2.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", + "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "statuses": { @@ -7994,6 +7581,11 @@ "ansi-regex": "^5.0.1" } }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -8001,15 +7593,6 @@ "dev": true, "peer": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -8051,6 +7634,11 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8065,41 +7653,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, "tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", @@ -8164,12 +7722,6 @@ "through": "^2.3.8" } }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -8180,6 +7732,11 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -8205,12 +7762,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8275,12 +7826,6 @@ "fd-slicer": "~1.1.0" } }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 2dc5cd1..d3f1018 100644 --- a/package.json +++ b/package.json @@ -1,39 +1,42 @@ { "name": "bloxflip-autocrash", - "version": "2.1.1", + "version": "2.2.0", "description": "Bloxflip crash automation using the martingale strategy.", "main": "dist/index.js", "type": "module", "scripts": { - "dev": "nodemon src/index.ts -e ts", - "start": "rollup -c --configPlugin @rollup/plugin-typescript & node .", + "start": "node build.mjs --run", "lint": "eslint src --fix", - "build": "rollup -c --configPlugin @rollup/plugin-typescript" + "build": "node build.mjs" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { - "@rollup/plugin-node-resolve": "^15.0.2", + "@rollup/plugin-commonjs": "^25.0.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@rollup/plugin-swc": "^0.1.1", "@rollup/plugin-typescript": "^11.1.0", + "@swc/core": "^1.3.59", "@types/express": "^4.17.17", "@types/node-notifier": "^8.0.2", "@typescript-eslint/eslint-plugin": "^5.38.0", - "nodemon": "^2.0.20", "rollup": "^3.20.2", "rollup-plugin-esbuild": "^5.0.0", - "rollup-plugin-typescript-paths": "^1.4.0", - "ts-node": "^10.9.1", "tslib": "^2.5.0", "typescript": "^4.8.3" }, "dependencies": { "chalk": "^4.1.2", + "chart.js": "^4.3.0", "express": "^4.18.2", "json5": "^2.2.1", "node-notifier": "^10.0.1", + "open": "^9.1.0", "puppeteer": "^17.1.3", "puppeteer-extra": "^3.3.4", - "puppeteer-extra-plugin-stealth": "^2.11.1" + "puppeteer-extra-plugin-stealth": "^2.11.1", + "socket.io": "^4.6.1", + "socket.io-client": "^4.6.1" } } diff --git a/rollup.config.ts b/rollup.config.ts deleted file mode 100644 index 4befd6d..0000000 --- a/rollup.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { defineConfig } from "rollup"; -import esbuild from "rollup-plugin-esbuild"; -import { typescriptPaths as paths } from "rollup-plugin-typescript-paths"; - -const plugins = [ - paths({ preserveExtensions: true, nonRelative: true }), - esbuild( - { - minify: true, - treeShaking: true, - target: "esnext", - format: "esm" - } - ) -] - -export default defineConfig([ - { - input: `src/backend/index.ts`, - treeshake: true, - cache: true, - external: ['json5', 'chalk', 'puppeteer', 'puppeteer-extra', 'puppeteer-extra-plugin-stealth', 'node-notifier', 'express', 'node:fs', 'node:path', 'node:url', 'node:child_process'], - output: { - file: `dist/index.js`, - compact: true, - format: "esm", - strict: true, - sourcemap: false - }, - plugins: plugins - }, - { - input: `src/userScript/index.ts`, - treeshake: true, - cache: true, - output: { - file: `dist/userScript.js`, - compact: true, - format: "cjs", - strict: true, - sourcemap: false - }, - plugins: plugins - } -]) \ No newline at end of file diff --git a/src/analytics/balance.ts b/src/analytics/balance.ts new file mode 100644 index 0000000..c74d21a --- /dev/null +++ b/src/analytics/balance.ts @@ -0,0 +1,28 @@ +import { Game } from "@types"; + +function updateBalance(games: Array) { + const before = document.querySelector(".BalBefore"); + const current = document.querySelector(".BalCurrent"); + const highest = document.querySelector(".BalHighest"); + const lowest = document.querySelector(".BalLowest"); + const balance = document.querySelector(".ProfileBalance"); + + const balances = games.map(game => game.balance); + + if (balances[0]) { + before!.textContent = `${balances[0]} R$`; + current!.textContent = `${balances.slice(-1)[0]} R$`; + highest!.textContent = `${Math.max(...balances)} R$`; + lowest!.textContent = `${Math.min(...balances)} R$`; + balance!.textContent = `${balances.slice(-1)[0]} R$`; + } else { + before!.textContent = `... R$`; + current!.textContent = `... R$`; + highest!.textContent = `... R$`; + lowest!.textContent = `... R$`; + balance!.textContent = `... R$`; + } + +} + +export { updateBalance }; diff --git a/src/analytics/crash.ts b/src/analytics/crash.ts new file mode 100644 index 0000000..9676ec8 --- /dev/null +++ b/src/analytics/crash.ts @@ -0,0 +1,79 @@ +import { Game } from "@types"; + +async function updateCrash(games: Array) { + const joined = document.querySelector(".GamesJoined"); + const won = document.querySelector(".GamesWon"); + const lost = document.querySelector(".GamesLost"); + const streak = document.querySelector(".GamesHighestLoss"); + const recent = document.querySelector(".GamesRecent"); + + try { + joined!.textContent = `${games.length}`; + + let wins = 0; + let loss = 0; + games.map(game => { + if (game["crash"] >= 2) { + wins++; + } else { + loss++; + } + }); + + won!.textContent = `${wins}`; + lost!.textContent = `${loss}`; + + const lossStreaks: Array = []; + let currentStreak = 0; + games.map(game => { + if (game["crash"] < 2) { + currentStreak++; + } else { + if (currentStreak) { + lossStreaks.push(currentStreak); + } + currentStreak = 0; + } + }); + + const max = Math.max(...lossStreaks); + const maxMultiplier = lossStreaks.filter(num => num == max).length; + streak!.textContent = games.length ? `${max == -Infinity ? "0" : max} (${maxMultiplier}x)` : "No data to analyze with."; + + const recentGames = games.slice(-10); + + const bodies = document.querySelectorAll("table.GamesRecent > tbody"); + Array.from(bodies).map(body => { + body.remove(); + }); + + const tbody = document.createElement("tbody"); + recentGames.map(game => { + const tr = document.createElement("tr"); + tr.className = `bg-[rgba(${game["crash"] < 2 ? "255,0,0" : "0,255,0"},0.1)]`; + const status = tr.insertCell(); + status.textContent = game["crash"] < 2 ? "Lost" : "Won"; + status.className = "font-bold"; + const crashPoint = tr.insertCell(); + crashPoint.textContent = `${game["crash"]}x`; + const bet = tr.insertCell(); + bet.textContent = `${game["bet"]} R$`; + const balance = tr.insertCell(); + balance.textContent = `${game["balance"]} R$`; + + tr.insertCell; + + recent!.appendChild(tbody); + tbody.appendChild(tr); + }); + } catch (err) { + console.error(err); + joined!.textContent = "ERR"; + won!.textContent = "ERR"; + lost!.textContent = "ERR"; + streak!.textContent = "ERR"; + recent!.textContent = "ERR"; + } +} + +export { updateCrash }; diff --git a/src/analytics/index.html b/src/analytics/index.html new file mode 100644 index 0000000..1898ef7 --- /dev/null +++ b/src/analytics/index.html @@ -0,0 +1,141 @@ + + + + + + + + bloxflip-autocrash + + + + + + + + + +
+

Analytics

+ +
+
+

Crash

+ +
+
+

Joined:

+

...

+
+
+

Won:

+

...

+
+
+

Lost:

+

...

+
+
+

Highest Loss Streak:

+

...

+
+
+ +

Recent Games

+ + + + + + + + + + +
StatusCrash PointBetBalance
+
+ +
+

Balance

+ +
+
+

Before:

+

...

+
+
+

Current:

+

...

+
+
+

Highest:

+

...

+
+
+

Lowest:

+

...

+
+

+
+
+ +
+

Rain

+ +
+
+

Rains Recorded:

+

...

+
+
+

Highest Prize:

+

...

+
+
+ + + + + + + + + +
HostPrizeDate & Time
+
+
+
+ + + \ No newline at end of file diff --git a/src/analytics/index.ts b/src/analytics/index.ts new file mode 100644 index 0000000..bd9cc03 --- /dev/null +++ b/src/analytics/index.ts @@ -0,0 +1,69 @@ +import { Game, Profile, Rain } from "@types"; +// @ts-ignore +import io from "../../node_modules/socket.io/client-dist/socket.io.esm.min.js"; + +import { updateCrash } from "./crash.js"; +import { updateBalance } from "./balance.js"; +import { updateRain } from "./rain.js"; +import { updateProfile } from "./profile.js"; + +let games: Array; +let rains: Array; +let chart: any; + +async function fetchData() { + const socket = io("http://localhost:6580", { + transports: ["websocket"] + }); + + socket.emit("join-analytics"); + + socket.emitWithAck("get-games").then((i: Array) => { + games = i; + + chart = new Chart( + document.getElementById("BalGraph"), + { + type: "line", + data: { + labels: Array.from(Array(games.length).keys()), + datasets: [ + { + label: "Balance", + data: games.map(game => game.balance) + } + ] + } + } + ); + + updateCrash(i); + updateBalance(i); + }); + + socket.emitWithAck("get-rains").then((i: Array) => { + rains = i; + updateRain(i); + }); + + socket.emitWithAck("get-profile").then((i: Profile) => { + updateProfile(i); + }); + + socket.on("new-game", (i: Game) => { + games.push(i); + updateCrash(games); + updateBalance(games); + + chart.data.labels = Array.from({length: games.length}, (_, i) => i + 1); + chart.data.datasets[0].data.push(i.balance); + chart.update(); + }); + + socket.on("new-rain", (i: Rain) => { + rains.push(i); + updateRain(rains); + }); +} + +fetchData(); diff --git a/src/analytics/profile.ts b/src/analytics/profile.ts new file mode 100644 index 0000000..0b24132 --- /dev/null +++ b/src/analytics/profile.ts @@ -0,0 +1,11 @@ +import { Profile } from "@types"; + +async function updateProfile(profile: Profile) { + const username = document.querySelector(".ProfileUsername"); + const headshot: HTMLImageElement | null = document.querySelector(".ProfileHeadshot"); + + username!.textContent = profile.username ? profile.username : "..."; + headshot!.src = `https://api.bloxflip.com/render-headshot?userId=${profile.id}&width=48&height=48&format=png`; +} + +export { updateProfile }; diff --git a/src/analytics/rain.ts b/src/analytics/rain.ts new file mode 100644 index 0000000..2577173 --- /dev/null +++ b/src/analytics/rain.ts @@ -0,0 +1,43 @@ +import { Rain } from "@types"; + +async function updateRain(rains: Array) { + const amount = document.querySelector(".RainsAmount"); + const prize = document.querySelector(".RainsPrize"); + const recent = document.querySelector(".RainsRecent"); + + amount!.textContent = `${rains.length}`; + + const prizes = rains.map(rain => { + return rain.prize; + }); + + prize!.textContent = rains.length ? `${Math.max(...prizes)} R$` : "No data to analyze with."; + + const recentRains = rains.slice(-10); + + const bodies = document.querySelectorAll("table.RainsRecent > tbody"); + Array.from(bodies).map(body => { + body.remove(); + }); + + const tbody = document.createElement("tbody"); + recentRains.map(rain => { + const tr = document.createElement("tr"); + const host = tr.insertCell(); + host.textContent = rain.host; + host.className = "font-bold"; + const prize = tr.insertCell(); + prize.textContent = `${rain.prize} R$`; + + const date = new Date(rain.time); + const dateTime = tr.insertCell(); + dateTime.textContent = `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()} | ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; + + tr.insertCell; + + recent!.appendChild(tbody); + tbody.appendChild(tr); + }); +} + +export { updateRain }; diff --git a/src/backend/api/game.ts b/src/backend/api/game.ts deleted file mode 100644 index 8206dd8..0000000 --- a/src/backend/api/game.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Request, Response } from "express"; -import { Logger } from "@utils/logger.js"; -import { config } from "@utils/config.js"; - -async function logGame(req: Request, res: Response): Promise { - const { game }: any = req.body!; - - const won = game.crashPoint >= config.bet.multiplier; - - async function calculateWallet() { - game.wallet = game.wallet - game.bet; - if (game.crashPoint >= config.bet.multiplier) { - game.wallet = game.wallet + game.bet * config.bet.multiplier; - } - return +game.wallet.toFixed(2); - } - - if (!game.joined) { - Logger.log("GAME", - `Unable to join this round. \nCrash Point: ${game.crashPoint}`, - { customColor: 93, seperator: true} - ); - } else { - Logger.log("GAME", - `Status: ${won ? "Won" : `Loss - #${game.lossStreak}`} \nCrash Point: ${game.crashPoint}x \nBet: ${game.bet} R$, Wallet: ${await calculateWallet()} R$`, - { customColor: won ? 92 : 91, seperator: true} - ); - } - - res.sendStatus(200); -} - -export { logGame }; diff --git a/src/backend/api/log.ts b/src/backend/api/log.ts deleted file mode 100644 index af2d8f2..0000000 --- a/src/backend/api/log.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Request, Response } from "express"; -import { Logger } from "@utils/logger.js"; - -async function log(req: Request, res: Response): Promise { - const { logs }: any = req.body!; - const { type }: any = req.params!; - - if ( type == "log") Logger.log(logs.label!, logs.message!, logs.options); - if ( type == "info") Logger.info(logs.label!, logs.message!); - if ( type == "warn") Logger.warn(logs.label!, logs.message!); - if ( type == "error") Logger.error(logs.label!, logs.message!, logs.options.forceClose!); - - res.sendStatus(200); -} - -export { log }; diff --git a/src/backend/api/rain.ts b/src/backend/api/rain.ts deleted file mode 100644 index bed737e..0000000 --- a/src/backend/api/rain.ts +++ /dev/null @@ -1,66 +0,0 @@ -import notifier from "node-notifier"; -import { sendWh } from "@utils/pfetch.js"; -import { config } from "@utils/config.js"; -import { Request, Response } from "express"; - -async function notifyRain(req: Request, res: Response): Promise { - const { rain }: any = req.body!; - - const rainConfig = config.modules.rain; - - if (rain.prize >= rainConfig.minimum) { - if (rainConfig.notifications.os_notifs) { - notifier.notify({ - title: "AutoCrash Rain Notifier", - message: `Robux: ${rain.prize} R$ \nHost: ${rain.host} \nTime Remaining: ${rain.duration / 60000} minutes`, - subtitle: "bloxflip-autocrash", - sound: true - }); - } - - sendWh({ - "content": pingId(), - "embeds": [ - { - "title": "Bloxflip Rain Notifier", - "url": "https://bloxflip.com", - "color": 3092790, - "fields": [ - { - "name": "Prize", - "value": `${rain.prize} R$`, - "inline": true - }, - { - "name": "Host", - "value": rain.host, - "inline": true - }, - { - "name": "Time Remaining", - "value": `${rain.duration / 60000} minutes`, - "inline": true - } - ], - "footer": { - "text": "bloxflip-autocrash" - } - } - ] - }); - } - - res.sendStatus(200); -} - -function pingId() { - const rainConfig = config.modules.rain; - const idLength = rainConfig.notifications.webhook.ping_id.length; - if (idLength === 18 || idLength === 19) { - return `<@${rainConfig.notifications.webhook.ping_id}>`; - } else { - return ""; - } -} - -export { notifyRain }; diff --git a/src/backend/api/server.ts b/src/backend/api/server.ts deleted file mode 100644 index a16b756..0000000 --- a/src/backend/api/server.ts +++ /dev/null @@ -1,33 +0,0 @@ -import express from "express"; -import { Logger } from "@utils/logger.js"; -import { notifyRain } from "@api/rain.js"; -import { logGame } from "@api/game.js"; -import { log } from "@api/log.js"; - -async function startApi() { - const app = express(); - app.use(express.json()); - - app.listen(6580, () => { - Logger.info("API", "Successfully started Express server, listening on port 6580."); - }); - - app.get("/", (req, res) => { - Logger.info("API",`${req.hostname} made request to API.`); - res.send("bloxflip-autocrash"); - }); - - app.post("/rain", (req, res) => { - notifyRain(req, res); - }); - - app.post("/game", (req, res) => { - logGame(req, res); - }); - - app.post("/log/:type", (req, res) => { - log(req, res); - }); -} - -export { startApi }; diff --git a/src/backend/bloxflip/data.ts b/src/backend/bloxflip/data.ts index e4ea3d8..5102364 100644 --- a/src/backend/bloxflip/data.ts +++ b/src/backend/bloxflip/data.ts @@ -1,65 +1,36 @@ +import { Game, Rain, Profile } from "@types"; import { config } from "@utils/config.js"; -import { Logger } from "@utils/logger.js"; -import { getBfUser, sendWh } from "@utils/pfetch.js"; -import { sleep } from "@utils/sleep.js"; -async function startDataAnalysis() { - if (!config.modules.analytics.enabled) return; +class Data { + games: Array; + rains: Array; + profile: Profile & { options: { autoCashout: number } }; - Logger.info("DATA", "Starting analysis module"); - - const bfUser = await getBfUser(); - - const balanceBefore = +bfUser!.user.wallet.toFixed(2); - let betBefore = balanceBefore / Math.pow(2, config.bet.tries); - betBefore = +betBefore.toFixed(2); - - async function start() { - await sleep(60 * 60000); - - const bfUser = await getBfUser(); - - const balance: number = +bfUser!.user.wallet.toFixed(2); - let bet: number = balance / Math.pow(2, config.bet.tries); - bet = +bet.toFixed(2); - - function diffPercent(denominator: number, numerator: number): string { - const string = `${(denominator < numerator ? "-" + ((numerator - denominator) * 100) / denominator : ((denominator - numerator) * 100) / numerator)}`; - return `${parseFloat(string) > 0 ? "+" +parseFloat(string).toFixed(2) : +parseFloat(string).toFixed(2)} %`; - } + public pushGame(game: Game) { + this.games.push(game); + } - sendWh({ - "embeds": [ - { - "title": "Hourly Analysis", - "color": 3092790, - "fields": [ - { - "name": "Balance", - "value": `**Before: ** ${balanceBefore}\n**After: ** ${balance}\n**Difference: ** ${diffPercent(balance, balanceBefore)}`, - "inline": true - }, - { - "name": "Bet", - "value": `**Before: ** ${betBefore}\n**After: ** ${bet}\n**Difference: ** ${diffPercent(bet, betBefore)}`, - "inline": true - } - ], - "footer": { - "text": "bloxflip-autocrash" - }, - "thumbnail": { - "url": "https://bloxflip.com/favicon.ico" - } - } - ] - }); + public pushRain(rain: Rain) { + this.rains.push(rain); + } - Logger.info("DATA", "Successfully calculated data for analysis."); - await start(); + public updateProfile(profile: Profile) { + this.profile = { + id: profile.id, + username: profile.username, + options: { + autoCashout: config.bet.autoCashout + } + }; } - new Promise(start); + constructor() { + this.games = []; + this.rains = []; + this.profile = { username: "null", id: 0, options: { autoCashout: 2 } }; + } } -export { startDataAnalysis }; +const data = new Data(); + +export { data }; diff --git a/src/backend/bloxflip/user.ts b/src/backend/bloxflip/user.ts index e47cad6..4c0c653 100644 --- a/src/backend/bloxflip/user.ts +++ b/src/backend/bloxflip/user.ts @@ -1,7 +1,8 @@ import chalk from "chalk"; import { Logger } from "@utils/logger.js"; -import { getBfUser, sendWh } from "@utils/pfetch.js"; +import { getBfUser } from "@utils/pfetch.js"; import { config } from "@utils/config.js"; +import { data } from "@bf/data.js"; async function checkAuth(): Promise { Logger.info("USER", "Fetching user information."); @@ -15,47 +16,14 @@ async function checkAuth(): Promise { } Logger.log("USER", - `${chalk.bold("Successfully logged in!")} \nUsername: ${bfUser!.user.robloxUsername} \nID: ${bfUser!.user.robloxId} \nBalance: ${+bfUser!.user.wallet.toFixed(2)} R$`, - { seperator: true } + `${chalk.bold("Successfully logged in!")} \nUsername: ${bfUser!.user.robloxUsername} \nID: ${bfUser!.user.robloxId} \nBalance: ${+bfUser!.user.wallet.toFixed(2)} R$` ); - sendWh({ - "embeds": [ - { - "title": "Successfully logged in!", - "color": 3092790, - "fields": [ - { - "name": "Username", - "value": bfUser!.user.robloxUsername, - "inline": true - }, - { - "name": "Roblox ID", - "value": bfUser!.user.robloxId, - "inline": true - }, - { - "name": "Balance", - "value": `${+bfUser!.user.wallet.toFixed(2) } R$ ${config.bet.custom ? "(Custom)" : ""}`, - "inline": true - }, - { - "name": "Bet", - "value": `**Tries: **${config.bet.tries}\n**Base Bet: **${baseBet}`, - "inline": true - }, - { - "name": "Modules", - "value": `**Rain: **${config.modules.rain.enabled}, ${config.modules.rain.minimum} R$\n**Analytics: **${config.modules.analytics.enabled}\n**Updater: **${config.modules.updater.enabled}`, - "inline": true - } - ], - "footer": { - "text": "bloxflip-autocrash" - } - } - ] + + data.updateProfile({ + username: bfUser!.user.robloxUsername, + id: bfUser!.user.robloxId }); + } export { checkAuth }; diff --git a/src/backend/index.d.ts b/src/backend/index.d.ts index 1ed7914..c7a246e 100644 --- a/src/backend/index.d.ts +++ b/src/backend/index.d.ts @@ -11,35 +11,25 @@ export type Config = { auth: string; bet: { tries: number; - custom: number; - multiplier: number; + startingBet: number; + autoCashout: number; } - webhook: { + rain: { enabled: boolean; - link: string; - }; - modules: { - rain: { - enabled: boolean; - minimum: number; - notifications: { - os_notifs: boolean; - webhook: { - os_notifs: boolean; - ping_id: string; - } - } - }; - analytics: { - enabled: boolean; - notifications: { - webhook: true + minimum: number; + notifications: { + os_notifs: boolean; + webhook: { + enabled: boolean; + link: string; + ping_id: string; } - }; - updater: { - enabled: boolean; } }; + updater: { + enabled: boolean; + autoUpdate: boolean + } debugging: { headless: boolean; verbose: boolean; @@ -58,3 +48,20 @@ export type GitHubCommits = { message: string }> } + +export type Game = { + crash: number; + bet: number; + balance: number; +} + +export type Rain = { + prize: number; + host: string; + time: number; +} + +export type Profile = { + username: string, + id: number, +} diff --git a/src/backend/index.ts b/src/backend/index.ts index 7123203..30232c5 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -1,29 +1,30 @@ -import { checkAuth } from "./bloxflip/user.js"; -import { startDataAnalysis } from "./bloxflip/data.js"; -import { fetchCfg } from "@utils/config.js"; +import { checkAuth } from "@bf/user.js"; import { Logger } from "@utils/logger.js"; import { startBrowser, page } from "@utils/browser.js"; -import { startApi } from "@api/server.js"; +import { startServer } from "@server/server.js"; import { readFileSync, existsSync } from "node:fs"; import { checkUpdates } from "@utils/updater.js"; +import { sleep } from "@utils/sleep.js"; +import { fetchConfig } from "@utils/config.js"; (async (): Promise => { Logger.log("STARTUP", "Starting bloxflip-autocrash"); Logger.log("SUPPORT", "Support the developers by giving the repo a star! https://github.com/Norikiru/bloxflip-autocrash"); - - await fetchCfg(); - await startApi(); + + await fetchConfig(); + await startServer(); await startBrowser(); + await Logger.createLog(); await checkUpdates(); await checkAuth(); - await startDataAnalysis(); - + + await sleep(5000); if (existsSync("./dist/userScript.js")) { - const autoCrash = readFileSync("./dist/userScript.js", "utf-8"); + const autoCrash = readFileSync("./dist/userscript.js", "utf-8"); page.evaluate(autoCrash); } else { - Logger.error("BFAC", "Unable to read UserScript, make sure that UserScript is built.", true); + Logger.error("BFAC", "Unable to read UserScript, make sure that UserScript is built.", { forceClose: true }); } })(); diff --git a/src/backend/server/crash.ts b/src/backend/server/crash.ts new file mode 100644 index 0000000..444a882 --- /dev/null +++ b/src/backend/server/crash.ts @@ -0,0 +1,22 @@ +import { data } from "@bf/data.js"; +import { socket } from "./server.js"; +import { Logger } from "@utils/logger.js"; +import { Game } from "@types"; + +function sendGames(callback: (ack: any) => unknown) { + callback(data.games); +} + +async function handleGame(game: Game & { lossStreak: number }) { + const gameInfo = { + crash: game.crash, + bet: game.bet, + balance: game.balance + }; + + Logger.logGame(game); + data.pushGame(gameInfo); + socket.to("analytics").emit("new-game", gameInfo); +} + +export { sendGames, handleGame }; diff --git a/src/backend/server/logs.ts b/src/backend/server/logs.ts new file mode 100644 index 0000000..dbe7859 --- /dev/null +++ b/src/backend/server/logs.ts @@ -0,0 +1,14 @@ +import { Logger } from "@utils/logger.js"; + +async function logBloxflip(msg: string) { + Logger.logToLogs(msg); +} + +async function handleLog(log: { type: string, label: string, message: string, forceClose?: boolean }) { + if (log.type == "log") Logger.log(log.label, log.message); + if (log.type == "info") Logger.info(log.label, log.message); + if (log.type == "warn") Logger.warn(log.label, log.message); + if (log.type == "error") Logger.error(log.label, log.message, { forceClose: log.forceClose }); +} + +export { handleLog, logBloxflip }; diff --git a/src/backend/server/rain.ts b/src/backend/server/rain.ts new file mode 100644 index 0000000..eb427d1 --- /dev/null +++ b/src/backend/server/rain.ts @@ -0,0 +1,81 @@ +import { data } from "@bf/data.js"; +import { socket } from "./server.js"; +import { sendWh } from "@utils/pfetch.js"; +import notifier from "node-notifier"; +import { config } from "@utils/config.js"; +import open from "open"; + +type RainInfo = { + duration: number, + prize: number, + host: string +} + +function sendRains(callback: (ack: any) => unknown) { + callback(data.rains); +} + + +async function handleRain(rain: RainInfo) { + const date = new Date(); + + const rainInfo = { + host: rain.host, + prize: rain.prize, + time: date.getTime() + }; + + data.pushRain(rainInfo); + socket.to("analytics").emit("new-rain", rainInfo); + + const rainConfig = config.rain; + + if (rain.prize >= rainConfig.minimum) { + if (rainConfig.notifications.os_notifs) { + notifier.notify({ + title: "Bloxflip Rain Notifier", + message: `Robux: ${rain.prize} R$ \nHost: ${rain.host} \nTime Remaining: ${rain.duration / 60000} minutes`, + subtitle: "bloxflip-autocrash", + sound: true, + wait: false + }, (err, response) => { + if (response == "activate") open("https://bloxflip.com/"); + }); + } + + if (rainConfig.notifications.webhook.enabled) { + sendWh({ + "content": `<@${config.rain.notifications.webhook.ping_id}>`, + "embeds": [ + { + "title": "Bloxflip Rain Notifier", + "url": "https://bloxflip.com", + "color": 3092790, + "fields": [ + { + "name": "Prize", + "value": `${rain.prize} R$`, + "inline": true + }, + { + "name": "Host", + "value": rain.host, + "inline": true + }, + { + "name": "Time Remaining", + "value": `${rain.duration / 60000} minutes`, + "inline": true + } + ], + "footer": { + "text": "bloxflip-autocrash" + } + } + ] + }, config.rain.notifications.webhook.link); + } + } +} + +export { handleRain, sendRains }; diff --git a/src/backend/server/server.ts b/src/backend/server/server.ts new file mode 100644 index 0000000..874b9c3 --- /dev/null +++ b/src/backend/server/server.ts @@ -0,0 +1,54 @@ +import express from "express"; +import http from "http"; +import { Server } from "socket.io"; +import { Logger } from "@utils/logger.js"; +import { __dirname } from "@utils/constants.js"; +import { join } from "path"; + +import { sendGames, handleGame } from "@server/crash.js"; +import { sendRains, handleRain } from "@server/rain.js"; +import { sendConfig, sendProfile } from "@server/user.js"; +import { logBloxflip, handleLog } from "@server/logs.js"; + +let io: Server; + +async function startServer() { + const app = express(); + const server = http.createServer(app); + io = new Server(server); + + app.use(express.json()); + app.use("/public", express.static(join(__dirname, "pages", "public"))); + + server.listen(6580, "0.0.0.0", () => { + Logger.info("SERVER", "Successfully started server, listening on port 6580."); + }); + + app.get("/", (req, res) => { + res.send("Welcome to bloxflip-autocrash! 🎉
If you are looking for the analytics page, go to: http://localhost:6580/analytics"); + }); + + app.get("/analytics", (req, res) => { + res.sendFile(join(__dirname, "pages", "index.html")); + }); + + io.on("connection", (socket) => { + Logger.info("SERVER", `${socket.id} has connected.`); + + socket.on("get-games", sendGames); + socket.on("get-rains", sendRains); + socket.on("get-config", sendConfig); + socket.on("get-profile", sendProfile); + socket.on("new-game", handleGame); + socket.on("new-rain", handleRain); + socket.on("new-log", handleLog); + + socket.on("bloxflip-ws-log", logBloxflip); + + socket.on("join-analytics", () => { + socket.join("analytics"); + }); + }); +} + +export { startServer, io as socket }; diff --git a/src/backend/server/user.ts b/src/backend/server/user.ts new file mode 100644 index 0000000..618715c --- /dev/null +++ b/src/backend/server/user.ts @@ -0,0 +1,28 @@ +import { data } from "@bf/data.js"; +import { config } from "@utils/config.js"; + +async function sendProfile(callback: (ack: any) => unknown) { + callback(data.profile); +} + +let times = 0; +function sendConfig(callback: (ack: any) => unknown) { + times++; + if (times > 1) return; + callback( + { + auth: config.auth, + bet: { + tries: config.bet.tries, + startingBet: config.bet.startingBet, + autoCashout: config.bet.autoCashout + }, + rain: { + enabled: config.rain.enabled, + minimum: config.rain.minimum + } + } + ); +} + +export { sendConfig, sendProfile }; diff --git a/src/backend/utils/browser.ts b/src/backend/utils/browser.ts index 7473115..036756d 100644 --- a/src/backend/utils/browser.ts +++ b/src/backend/utils/browser.ts @@ -27,23 +27,6 @@ async function startBrowser(): Promise { await page.setUserAgent(USER_AGENT); await page.goto("http://localhost:6580/", { timeout: 0 }); - await page.evaluate((config) => { - const browserConfig = { - auth: config.auth, - bet: { - tries: config.bet.tries, - custom: config.bet.custom, - multiplier: config.bet.multiplier - }, - rain: { - enabled: config.modules.rain.enabled, - minimum: config.modules.rain.minimum - } - }; - - localStorage.setItem("BFAC_config", JSON.stringify(browserConfig)); - }, config); - Logger.info("BLOXFLIP", "Successfully set up page for Bloxflip"); } diff --git a/src/backend/utils/config.ts b/src/backend/utils/config.ts index 4b9dadf..bfd224b 100644 --- a/src/backend/utils/config.ts +++ b/src/backend/utils/config.ts @@ -1,33 +1,21 @@ import json from "json5"; import { existsSync, readFileSync } from "node:fs"; -import { join, dirname } from "node:path"; -import { fileURLToPath } from "node:url"; +import { join } from "node:path"; import { Logger } from "@utils/logger.js"; -import { sleep } from "@utils/sleep.js"; import { Config } from "@types"; +import { __dirname } from "@utils/constants.js"; let config: Config; -async function fetchCfg() { - const __filename = fileURLToPath(import.meta.url); - const __dirname = dirname(__filename); +async function fetchConfig(): Promise { + const configPath = join(__dirname, "..", "config.json5"); - try { - if (!existsSync(join(__dirname, "..", "config.json5"))) return Logger.error("CONFIG", "config.json not found.", { forceClose: true }); - config = await json.parse(readFileSync(join(__dirname, "..", "config.json5"), "utf-8")); - Logger.info("CONFIG", "Fetched config.json."); - - if (config.auth.length === 0) { - Logger.error("TOKEN", "Token is empty, please put a valid token."); - } - - if (config.bet.tries < 10) { - Logger.warn("CONFIG", "It is not recommended to set the tries below 10, exit the script with CTRL+C if you want to make changes."); - await sleep(3000); - } - } catch (err) { - Logger.error("CONFIG", "Unabled to read config.json.", { forceClose: true }); + if (!existsSync(configPath)) { + Logger.error("CONFIG", `Config was not found. \nExpected config at path: ${configPath}`, { forceClose: true }); } + + config = await json.parse(readFileSync(configPath, "utf-8")); + Logger.info("CONFIG", "Successfully fetched config."); } -export { fetchCfg, config }; +export { fetchConfig, config }; diff --git a/src/backend/utils/constants.ts b/src/backend/utils/constants.ts index 699b8ce..db6b72b 100644 --- a/src/backend/utils/constants.ts +++ b/src/backend/utils/constants.ts @@ -1 +1,6 @@ +import { fileURLToPath } from "node:url"; +import { dirname } from "node:path"; + export const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44"; +export const __filename = fileURLToPath(import.meta.url); +export const __dirname = dirname(__filename); diff --git a/src/backend/utils/logger.ts b/src/backend/utils/logger.ts index a6c3b3e..03606f7 100644 --- a/src/backend/utils/logger.ts +++ b/src/backend/utils/logger.ts @@ -1,75 +1,61 @@ import chalk from "chalk"; +import { createWriteStream, WriteStream, existsSync, mkdirSync } from "fs"; +import { join } from "path"; import { config } from "@utils/config.js"; -import { LoggerOptions } from "@types"; +import { __dirname } from "@utils/constants.js"; +import { Game } from "@types"; -const seperatorChar = "─"; +let logFile: string; +let logStream: WriteStream; -export class Logger { - public static async log(label: string, message: string, options?: LoggerOptions): Promise { - const customColor = options?.customColor; - const seperator = options?.seperator; - const seperatorString = seperatorChar.repeat(Logger.getLongestLine(message)); - - let labelStyle = chalk.bold.bgGreenBright.ansi(30); - let infoStyle = chalk.greenBright; - - if (customColor) { - labelStyle = chalk.bold.bgAnsi(customColor).ansi(30); - infoStyle = chalk.bold.ansi(customColor); - } - - console.log((`${labelStyle(` ${label} `)} ${infoStyle(`${seperator ? `${seperatorString}\n` : ""}${message}`)}`)); +class Logger { + public static async log(label: string, message: string): Promise { + console.log((`${chalk.bgGreenBright.black(` ${label} `)} ${chalk.greenBright(message)}`)); } - public static info(label: string, message: string, options?: LoggerOptions): void { + public static info(label: string, message: string): void { if (config.debugging.verbose) { - const customColor = options?.customColor; - const seperator = options?.seperator; - const seperatorString = seperatorChar.repeat(Logger.getLongestLine(message)); - - let labelStyle = chalk.bold.bgBlueBright.ansi(30); - let infoStyle = chalk.blueBright; + console.log(`${chalk.bgBlueBright(` ${label} `)} ${chalk.blueBright(message)}`); + } + } - if (customColor) { - labelStyle = chalk.bold.bgAnsi(customColor).ansi(30); - infoStyle = chalk.bold.ansi(customColor); - } + public static warn(label: string, message: string): void { + console.log(`${chalk.bgYellowBright.black(` ▲ ${label} `)} ${chalk.yellowBright(message)}`); + } - console.log(`${labelStyle(` ${label} `)} ${infoStyle(`${seperator ? `${seperatorString}\n` : ""}${message}`)}`); - } + public static async error(label: string, message: string, options?: { forceClose?: boolean }): Promise { + console.log(`${chalk.bgRedBright(` ⬣ ${label} `)} ${chalk.redBright(message)}`); + if (options?.forceClose) process.exit(1); } - public static error(label: string, message: string, options?: LoggerOptions & { forceClose: boolean }): void { - const customColor = options?.customColor; - const seperator = options?.seperator; - const seperatorString = seperatorChar.repeat(Logger.getLongestLine(message)); + public static async logGame(game: Game & { lossStreak: number }) { + if (game.crash >= config.bet.autoCashout) { + const message = `Status: Won \nCrash Point: ${game.crash}x \nBet: ${game.bet} R$, Balance: ${game.balance} R$`; + const seperator = "-".repeat(Logger.getLongestLine(message) - 6); - let labelStyle = chalk.bold.bgRedBright.ansi(30); - let infoStyle = chalk.redBright; + console.log(`${chalk.bgGreenBright(" GAME ")} ${chalk.greenBright(`${seperator}\n${message}`)}`); + } else { + const message = `Status: Loss - #${game.lossStreak} \nCrash Point: ${game.crash}x \nBet: ${game.bet} R$, Balance: ${game.balance} R$`; + const seperator = "-".repeat(Logger.getLongestLine(message) - 7); - if (customColor) { - labelStyle = chalk.bold.bgAnsi(customColor).ansi(30); - infoStyle = chalk.bold.ansi(customColor); + console.log(`${chalk.bgRedBright(" GAME ")} ${chalk.redBright(`${seperator}\n${message}`)}`); } - - console.log(`${labelStyle(` ${label} `)} ${infoStyle(`${seperator ? `${seperatorString}\n` : ""}${message}`)}`); - if (options) process.exit(); } - public static warn(label: string, message: string, options?: LoggerOptions): void { - const customColor = options?.customColor; - const seperator = options?.seperator; - const seperatorString = seperatorChar.repeat(Logger.getLongestLine(message)); + public static async logToLogs(log: string): Promise { + logStream.write(`${log}\n`); + } - let labelStyle = chalk.bold.bgYellowBright.ansi(30); - let infoStyle = chalk.yellowBright; + public static async createLog() { + const date = new Date; + logFile = join(__dirname, "..", "logs", `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}_${date.getHours()}-${date.getMinutes()}-${date.getSeconds()}.txt`); - if (customColor) { - labelStyle = chalk.bold.bgAnsi(customColor).ansi(30); - infoStyle = chalk.bold.ansi(customColor); + if (!existsSync(join(__dirname, "..", "logs"))) { + mkdirSync(join(__dirname, "..", "logs")); } - console.log(`${labelStyle(` ${label} `)} ${infoStyle(`${seperator ? `${seperatorString}\n` : ""}${message}`)}`); + Logger.info("LOGS", `Successfully created log file: "${logFile}"`); + logStream = createWriteStream(logFile); } private static getLongestLine(string: string): number { @@ -77,3 +63,5 @@ export class Logger { return Math.max(...(lines.map(line => line.length))); } } + +export { Logger, logFile }; diff --git a/src/backend/utils/pfetch.ts b/src/backend/utils/pfetch.ts index 2c87f60..64b0776 100644 --- a/src/backend/utils/pfetch.ts +++ b/src/backend/utils/pfetch.ts @@ -8,11 +8,11 @@ import { GitHubCommits, UserApi } from "@types"; async function getBfUser(): Promise { const auth = config.auth; for (let i = 1; i < 6; i++) { - const res: Record & { apiError: any } = await page.evaluate(async (auth: string) => { + const res: Record & { apiError: { code: any, body: any } } = await page.evaluate(async (auth: string) => { let api; try { - api = await fetch("https://rest-bf.blox.land/user", { + api = await fetch("https://api.bloxflip.com/user", { method: "get", headers: { "x-auth-token": auth @@ -22,36 +22,27 @@ async function getBfUser(): Promise { if (api.ok) { return api.json(); } else { - return { apiError: api.status }; + return { apiError: { code: api?.status, body: await api?.text() }}; } } catch (e) { - return { apiError: e }; + return { apiError: { code: e, body: null }}; } }, auth); if (res.success) { return res as unknown as UserApi; - } else { - Logger.error("PFETCH", `Fetching user data failed.\nError: ${res.error}`, { forceClose: true }); - } - - if (res.apiError) { - Logger.warn("PFETCH", `Fetching user data failed, trying again... #${i} \nError: ${res.apiError} `); - if (i === 4) return Logger.error("PFETCH", `Fetching user data failed. \nError: ${res.apiError}`, { forceClose: true }); + } else if (res.apiError) { + Logger.warn("PFETCH", `Fetching user data failed, trying again... #${i} \nCode: ${res.apiError.code} \nBody: ${res.apiError.body}`); + if (i === 2) return Logger.error("PFETCH", `Fetching user data failed. \nCode: ${res.apiError.code} \nBody: ${res.apiError.body}`, { forceClose: true }); await sleep(5000); } } } -async function sendWh(body: any) { - if (!config.webhook.enabled) return; - const link = config.webhook.link; - +async function sendWh(body: any, link: string) { const res: { apiError: any } | undefined = await page.evaluate(async (link: string, body: any) => { let api; - console.log("im here"); - try { api = await fetch(link, { method: "post", @@ -72,6 +63,7 @@ async function sendWh(body: any) { } } + async function getGh(branch: string, hash: string): Promise { for (let i = 1; i < 6; i++) { const res: { apiError: any } = await page.evaluate(async (branch: string, hash: string, USER_AGENT: string) => { @@ -97,7 +89,7 @@ async function getGh(branch: string, hash: string): Promise { - string = string + `${upd.hash} | ${upd.author} | ${upd.message}\n`; - }); - return string; -} - async function compareChanges(branch: string, currentHash: string) { const data = await getGh(branch, currentHash); diff --git a/src/userScript/bloxflip/bet.ts b/src/userScript/bloxflip/bet.ts index b2a16e8..2d06d28 100644 --- a/src/userScript/bloxflip/bet.ts +++ b/src/userScript/bloxflip/bet.ts @@ -1,26 +1,37 @@ +import { Logger } from "../utils/logger.js"; import { config } from "../utils/config.js"; import { game } from "./crash.js"; async function calculateBet(won: boolean) { const headers: HeadersInit = new Headers(); - headers.set("x-auth-token", `${config.auth}`); + headers.set("x-auth-token", `${config.auth}`); - const bfApi = await fetch("https://rest-bf.blox.land/user", { - method: "GET", - mode: "cors", - credentials: "omit", - headers: headers, - }).then(res => { - return res.json(); - }); + let bfApi; - game.wallet = +bfApi.user.wallet.toFixed(2); + try { + bfApi = await fetch("https://api.bloxflip.com/user", { + method: "GET", + mode: "cors", + credentials: "omit", + headers: headers, + }); + + if (bfApi.ok) { + bfApi = await bfApi.json(); + } else { + return Logger.error("BET", `Fetching user data failed. \nCode: ${bfApi.status} \nBody: ${await bfApi.text()}`, { forceClose: true }); + } + } catch (e) { + return Logger.error("BET", `Fetching user data failed. \nError: ${e}`, { forceClose: true }); + } + + game.balance = +bfApi.user.wallet.toFixed(2); if (won) { - if (config.bet.custom) { - game.bet = config.bet.custom; + if (config.bet.startingBet) { + game.bet = config.bet.startingBet; } else { - game.bet = game.wallet / Math.pow(config.bet.multiplier, config.bet.tries); + game.bet = game.balance / Math.pow(config.bet.autoCashout, config.bet.tries); } game.bet = +game.bet.toFixed(2); } else { diff --git a/src/userScript/bloxflip/crash.ts b/src/userScript/bloxflip/crash.ts index 18743d3..39037f8 100644 --- a/src/userScript/bloxflip/crash.ts +++ b/src/userScript/bloxflip/crash.ts @@ -1,57 +1,67 @@ -import { bfWs } from "../utils/ws.js"; +import { bfWs, bfWsSend, connectBfWs, serverWs } from "../utils/ws.js"; import { calculateBet } from "./bet.js"; -import { post } from "../utils/api.js"; -import { config } from "userScript/utils/config.js"; +import { startRain, rain } from "./rain.js"; +import { keepAlive } from "../utils/keepAlive.js"; +import { config } from "../utils/config.js"; +import { Logger } from "../utils/logger.js"; +import { sleep } from "@utils/sleep.js"; interface gameInt { bet: number; joined: boolean; started: boolean; lossStreak: number; - crashPoint: number; - wallet: number; + crash: number; + balance: number; } const game: gameInt = { bet: 0, joined: false, started: false, - crashPoint: 0, + crash: 0, lossStreak: 0, - wallet: 0 + balance: 0 }; async function crash(event: MessageEvent) { + // Unable to join due to expired/invalid token + if (event.data.includes("42/crash,[\"notify-error\",\"Your session has expired, please refresh your page!\"]")) { + return Logger.error("CRASH", "Token is either expired or invalid, try taking your auth token again after relogging into Bloxflip", { forceClose: true }); + } + // Game Intermission before it starts if (event.data.includes("42/crash,[\"game-starting\",")) { if (game.bet !== 0) { if (game.started) { - return console.log("[BET] Cannot place bet, game has already started."); + return Logger.warn("BET", "Cannot place bet, game has already started."); } if (game.joined) { - return console.log("[BET] Cannot place bet, already joined the game."); + return Logger.warn("BET", "Cannot place bet, already joined the game."); } - bfWs.send(`42/crash,["join-game",{"autoCashoutPoint":${config.bet.multiplier * 100},"betAmount":${game.bet}}]`); - console.log(`[BET] Balance: ${game.wallet}, Bet: ${game.bet}`); + bfWsSend(`42/crash,["join-game",{"autoCashoutPoint":${config.bet.autoCashout * 100},"betAmount":${game.bet}}]`); + game.balance = game.balance - game.bet; + game.balance = +game.balance.toFixed(2); + Logger.log("BET", `Balance: ${game.balance}, Bet: ${game.bet}`, { skipEmit: true }); } } // Check if we successfully joined if (event.data.includes("42/crash,[\"game-join-success\"")) { if (game.joined) { - return console.log("[CRASH] Why did we try to join again when we are already in? (my code is shit)"); + return Logger.log("CRASH", "Why did we try to join again when we are already in? (my code is shit)"); } game.joined = true; - console.log("[CRASH] Joined game successfully"); + Logger.log("CRASH", "Joined game successfully", { skipEmit: true }); } // Game starting if (event.data.includes("42/crash,[\"eos-commit\"")) { if (!game.joined) { - console.log("[CRASH] Failed to join game"); + Logger.warn("CRASH", "Failed to join game, bet was not placed before game started."); } game.started = true; @@ -59,40 +69,62 @@ async function crash(event: MessageEvent) { // Game end if (event.data.includes("42/crash,[\"game-end\",")) { - game.crashPoint = event.data.match(/(?<="crashPoint":)(.*?)(?=,)/)[0]; + game.crash = event.data.match(/(?<="crashPoint":)(.*?)(?=,)/)[0]; game.started = false; if (!game.joined) { - return console.log(`[CRASH] Ignoring as we haven't joined this round.: ${game.crashPoint}`); + return Logger.warn("CRASH", `Ignoring as we haven't joined this round: ${game.crash}x`); } - if (game.crashPoint >= config.bet.multiplier) { + if (game.crash >= config.bet.autoCashout) { game.lossStreak = 0; - console.log(`[CRASH] Won: ${game.crashPoint}x`); - sendLog(); + Logger.log("CRASH", `Won: ${game.crash}x`, { skipEmit: true }); + game.balance = game.balance + (game.bet * config.bet.autoCashout); + game.balance = +game.balance.toFixed(2); + sendGame(); await calculateBet(true); } else { game.lossStreak = game.lossStreak + 1; - console.log(`[CRASH] Lost: ${game.crashPoint}x - #${game.lossStreak}`); - sendLog(); + Logger.log("CRASH", `Lost: ${game.crash}x - #${game.lossStreak}`, { skipEmit: true }); + sendGame(); await calculateBet(false); } game.joined = false; - console.log("──────────────────────────────────"); + Logger.log("L I N E", "──────────────────────────────────", { skipEmit: true }); } } -function sendLog() { - post("game", { - game: { - crashPoint: game.crashPoint, - joined: game.joined, - lossStreak: game.lossStreak, - wallet: game.wallet, - bet: game.bet - } +function sendGame() { + serverWs.emit("new-game", { + crash: game.crash, + lossStreak: game.lossStreak, + balance: game.balance, + bet: game.bet }); } -export { crash, game }; +async function startAutoCrash() { + await connectBfWs(); + const kA = new keepAlive(); + + bfWs.addEventListener("close", async () => { + Logger.warn("WS", "WebSocket closed unexpectedly, attempting reconnect..."); + + bfWs.removeEventListener("message", crash); + bfWs.removeEventListener("message", rain); + kA.stop(); + + await sleep(5000); + return startAutoCrash(); + }); + + Promise.all([ + bfWs.addEventListener("message", (event) => crash(event)), + startRain(), + kA.start() + ]); +} + + +export { startAutoCrash, crash, game }; diff --git a/src/userScript/bloxflip/rain.ts b/src/userScript/bloxflip/rain.ts index c45bb24..2bc5615 100644 --- a/src/userScript/bloxflip/rain.ts +++ b/src/userScript/bloxflip/rain.ts @@ -1,6 +1,5 @@ import { config } from "../utils/config.js"; -import { post } from "../utils/api.js"; -import { bfWs } from "../utils/ws.js"; +import { bfWs, serverWs } from "../utils/ws.js"; import { Logger } from "../utils/logger.js"; async function startRain() { @@ -22,16 +21,15 @@ async function rain(event: MessageEvent) { if (rainData.active !== "true") return; if (rainData.prize < config.rain.minimum) { - return Logger.log("RAIN", `Rain detected! \nNot notifying cause of set minimum \nRobux: ${rainData.prize} R$ \nHost: ${rainData.host} \nTime Remaining: ${rainData.duration / 60000} minute(s)`); + return Logger.log("RAIN", `Rain detected! \nNot notifying cause of set minimum \nRobux: ${rainData.prize} R$ \nHost: ${rainData.host} \nTime Remaining: ${rainData.duration / 60000} minute(s)`, { skipEmit: true }); } - Logger.log("RAIN", `Rain detected! \nRobux: ${rainData.prize} R$ \nHost: ${rainData.host} \nTime Remaining: ${rainData.duration / 60000} minute(s)`); - post("rain", { - rain: { - duration: rainData.duration, - prize: rainData.prize, - host: rainData.host - } + Logger.log("RAIN", `Rain detected! \nRobux: ${rainData.prize} R$ \nHost: ${rainData.host} \nTime Remaining: ${rainData.duration / 60000} minute(s)`, { skipEmit: true }); + + serverWs.emit("new-rain", { + duration: rainData.duration, + prize: rainData.prize, + host: rainData.host }); } } diff --git a/src/userScript/index.ts b/src/userScript/index.ts index ec4ad54..1fc07b6 100644 --- a/src/userScript/index.ts +++ b/src/userScript/index.ts @@ -1,37 +1,12 @@ -import { connectWs, bfWs } from "./utils/ws.js"; -import { fetchCfg } from "./utils/config.js"; -import { crash } from "./bloxflip/crash.js"; -import { keepAlive } from "./utils/keepAlive.js"; -import { sleep } from "@utils/sleep.js"; -import { startRain, rain } from "./bloxflip/rain.js"; import { Logger } from "./utils/logger.js"; +import { connectServerWs } from "./utils/ws.js"; -Logger.info("BFAC", "Running AutoCrash"); +(async () => { + Logger.log("AC", "Starting Bloxflip AutoCrash..."); -async function startCrash() { try { - await fetchCfg(); - await connectWs(); - - const kA = new keepAlive(); - - bfWs.addEventListener("close", async () => { - Logger.warn("WS", "WebSocket closed unexpectedly, attempting reconnect..."); - await sleep(5000); - - bfWs.removeEventListener("message", crash); - bfWs.removeEventListener("message", rain); - kA.stop(); - - startCrash(); - }); - - Promise.all([ - bfWs.addEventListener("message", (event) => crash(event)), - startRain(), - kA.start() - ]); + await connectServerWs(); } catch (err) { - Logger.error("BFAC", `Error occured, killing AutoCrash. \n${err}`, true); + Logger.error("BFAC", `Error occured, killing AutoCrash. \n${err}`, { forceClose: true }); } -} startCrash(); +})(); diff --git a/src/userScript/utils/api.ts b/src/userScript/utils/api.ts deleted file mode 100644 index 6c97e85..0000000 --- a/src/userScript/utils/api.ts +++ /dev/null @@ -1,11 +0,0 @@ -async function post(path: string, json: any) { - fetch(`http://localhost:6580/${path}`, { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify(json) - }); -} - -export { post }; diff --git a/src/userScript/utils/config.ts b/src/userScript/utils/config.ts index ce4b2d8..b60e380 100644 --- a/src/userScript/utils/config.ts +++ b/src/userScript/utils/config.ts @@ -1,11 +1,12 @@ import { Logger } from "./logger.js"; +import { serverWs } from "./ws.js"; -interface configInt { - auth: string; +type Config = { + auth: string, bet: { - tries: number; - custom: number; - multiplier: number; + tries: number, + startingBet: number, + autoCashout: number } rain: { enabled: boolean; @@ -13,25 +14,17 @@ interface configInt { } } -let config: configInt = { - auth: "", - bet: { - tries: 100, - custom: 0, - multiplier: 2 - }, - rain: { - enabled: false, - minimum: 0 - } -}; +let config: Config; -async function fetchCfg() { - if (localStorage.getItem("BFAC_config")) { - config = JSON.parse(localStorage.getItem("BFAC_config")!); - } else { - return Logger.error("CONFIG", "Unable to parse config.", true); +async function fetchConfig() { + try { + if (config?.auth) return Logger.info("CONFIG", "Already fetched config, returning..."); + const fetchedConfig = await serverWs.emitWithAck("get-config"); + config = fetchedConfig as Config; + Logger.info("CONFIG", "Successfully fetched config."); + } catch (err) { + Logger.error("CONFIG", `Unable to fetch config from server.\n${err}`, { forceClose: true }); } } -export { fetchCfg, config }; +export { fetchConfig, config }; diff --git a/src/userScript/utils/keepAlive.ts b/src/userScript/utils/keepAlive.ts index 7826349..48c4a82 100644 --- a/src/userScript/utils/keepAlive.ts +++ b/src/userScript/utils/keepAlive.ts @@ -1,4 +1,4 @@ -import { bfWs } from "./ws.js"; +import { bfWsSend } from "./ws.js"; import { sleep } from "@utils/sleep.js"; class keepAlive { @@ -13,9 +13,9 @@ class keepAlive { for (let i = 0; i < Infinity; i++) { if (this.enabled) { try { - await sleep(30000); - bfWs.send("2"); - } catch { } + await sleep(25000); + bfWsSend("2"); + } catch { continue; } } } } diff --git a/src/userScript/utils/logger.ts b/src/userScript/utils/logger.ts index 5c1d566..6f73875 100644 --- a/src/userScript/utils/logger.ts +++ b/src/userScript/utils/logger.ts @@ -1,57 +1,54 @@ -import { post } from "./api.js"; - -interface loggerOptions { - customColor?: number; - seperator?: boolean; - forceClose?: boolean; -} - -export class Logger { - public static log(label: string, message: string, options?: loggerOptions): void { - post("log/log", { - logs: { - label: label, - message: message, - options: options - } +import { serverWs } from "./ws.js"; + +class Logger { + public static async log(label: string, message: string, options?: { skipEmit: boolean }) { + console.log(`%c ${label} %c ${message}`, "background-color: green", "color: green"); + + if (options?.skipEmit) return; + if (!serverWs || !serverWs?.connected) return; + serverWs.emit("new-log", { + type: "log", + label: `CLIENT > ${label}`, + message: message, }); - - console.log(`[${label}] ${message}`); } - public static info(label: string, message: string): void { - post("log/info", { - logs: { - label: label, - message: message - } - }); + public static async info(label: string, message: string, options?: { skipEmit?: boolean }) { + console.log(`%c ${label} %c ${message}`, "background-color: blue", "color: blue"); - console.log(`[${label}] ${message}`); + if (options?.skipEmit) return; + if (!serverWs || !serverWs?.connected) return; + serverWs.emit("new-log", { + type: "info", + label: `CLIENT > ${label}`, + message: message, + }); } - public static warn(label: string, message: string): void { - post("log/warn", { - logs: { - label: label, - message: message - } - }); + public static async warn(label: string, message: string, options?: { skipEmit: boolean }) { + console.log(`%c ▲ ${label} %c ${message}`, "background-color: yellow; color: black", "color: yellow"); - console.warn(`[${label}] ${message}`); + if (options?.skipEmit) return; + if (!serverWs || !serverWs?.connected) return; + serverWs.emit("new-log", { + type: "warn", + label: `CLIENT > ${label}`, + message: message, + }); } - public static error(label: string, message: string, forceClose: boolean): void { - post("log/error", { - logs: { - label: label, - message: message, - options: { - forceClose: forceClose - } - } - }); + public static async error(label: string, message: string, options?: { forceClose?: boolean, skipEmit?: boolean }) { + console.log(`%c ⬣ ${label} %c ${message}`, "background-color: red", "color: red"); - console.error(`[${label}] ${message}`); + if (options?.skipEmit) return; + if (!serverWs || !serverWs?.connected) return; + serverWs.emit("new-log", { + type: "error", + label: `CLIENT > ${label}`, + message: message, + forceClose: options?.forceClose + }); } } + +export { Logger }; diff --git a/src/userScript/utils/ws.ts b/src/userScript/utils/ws.ts index 6851364..f2ccc89 100644 --- a/src/userScript/utils/ws.ts +++ b/src/userScript/utils/ws.ts @@ -1,25 +1,59 @@ -import { calculateBet } from "../bloxflip/bet.js"; -import { config } from "./config.js"; +// @ts-ignore +import io from "../../../node_modules/socket.io/client-dist/socket.io.esm.min.js"; +import { fetchConfig } from "./config.js"; import { Logger } from "./logger.js"; +import { config } from "./config.js"; +import { calculateBet } from "../bloxflip/bet.js"; +import { startAutoCrash } from "../bloxflip/crash.js"; +let serverWs: any; let bfWs: WebSocket; -async function connectWs() { - bfWs = new WebSocket("wss://ws.bloxflip.com/socket.io/?transport=websocket"); +async function connectServerWs() { + serverWs = await io("http://localhost:6580", { + transports: ["websocket"] + }); + + serverWs.on("connect", async () => { + Logger.info("SERVER", `Successfully connected to server with ID: ${serverWs.id}`); + await fetchConfig(); + await startAutoCrash(); + }); +} + +async function connectBfWs() { + if (bfWs?.OPEN) return Logger.warn("BF", "Already connected to Bloxflip WebSocket, returning..."); + + bfWs = new WebSocket("wss://ws.bloxflip.com/socket.io/?EIO=3&transport=websocket"); bfWs.addEventListener("message", async (event) => { if (event.data.charAt(0) == "0") { - if (config.rain.enabled) bfWs.send("40/chat,"); - bfWs.send("40/crash,"); + if (config.rain.enabled) bfWsSend("40/chat,"); + bfWsSend("40/crash,"); } if (event.data == "40/crash") { - bfWs.send(`42/crash,["auth","${config.auth}"]`); - Logger.info("WS", "Connected to WebSocket"); - console.log("──────────────────────────────────"); + bfWsSend(`42/crash,["auth","${config.auth}"]`); + Logger.info("BF", "Successfully authorized account."); await calculateBet(true); } + + if (event.data.includes("new-chat-message")) return; + if (event.data.includes("users-online")) return; + // Sometimes bloxflip's websocket keeps on getting scammed with SCAM!!!!!! notifs + if (event.data.includes("SCAM")) return; + + serverWs.emit("bloxflip-ws-log", `▼─ ${event.data}`); }); + + bfWs.addEventListener("open", () => { + Logger.info("BF", "Successfully connected to Bloxflip WebSocket"); + }); +} + +async function bfWsSend(msg: string) { + bfWs.send(msg); + serverWs.emit("bloxflip-ws-log", `─▲ ${msg}`); } -export { connectWs, bfWs }; +export { connectServerWs, serverWs, connectBfWs, bfWsSend, bfWs }; diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100644 index 0000000..0c97f8f --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,17 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{html,js}"], + theme: { + extend: { + colors: { + primary: "#282828", + secondary: "#ebdbb2", + tertiary: "#3c3836", + "black-100": "#32302f", + "black-200": "#1d2021", + "white-100": "#f3f3f3", + } + }, + }, + plugins: [], +}; diff --git a/tsconfig.json b/tsconfig.json index 1c59f6b..49a7094 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,13 +8,14 @@ "outDir": "./dist", "rootDir": "./src", "baseUrl": "./src", - "module": "ESNext", + "module": "NodeNext", "target": "ESNext", "newLine": "LF", "moduleResolution": "NodeNext", "resolveJsonModule": true, "useUnknownInCatchVariables": true, "allowUnreachableCode": false, + "allowSyntheticDefaultImports": true, "noUnusedLocals": true, "noUnusedParameters": true, "esModuleInterop": true, @@ -26,8 +27,10 @@ "allowJs": true, "paths": { "@utils/*": ["backend/utils/*"], - "@api/*": ["backend/api/*"], + "@server/*": ["backend/server/*"], + "@bf/*": ["backend/bloxflip/*"], "@types": ["backend/index.d.ts"] + } }, "include": [